add patch milligrad ds1820 from Jan-Benedict Glaw
This commit is contained in:
parent
87028c1f60
commit
11b7022ce6
1 changed files with 24 additions and 12 deletions
|
@ -39,6 +39,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include "contiki.h"
|
#include "contiki.h"
|
||||||
#include "contiki-net.h"
|
#include "contiki-net.h"
|
||||||
|
|
||||||
|
@ -141,7 +142,11 @@ info_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if REST_RES_DS1820
|
#if REST_RES_DS1820
|
||||||
/*A simple getter example. Returns the reading from ds1820 sensor*/
|
/* A simple getter example. Returns the reading from ds1820 sensor */
|
||||||
|
#define DS1820_TEMP_LSB 0
|
||||||
|
#define DS1820_TEMP_MSB 1
|
||||||
|
#define DS1820_COUNT_REMAIN 6
|
||||||
|
#define DS1820_COUNT_PER_C 7
|
||||||
RESOURCE(ds1820, METHOD_GET, "sensors/temp", "title=\"Temperatur DS1820\";rt=\"temperature-c\"");
|
RESOURCE(ds1820, METHOD_GET, "sensors/temp", "title=\"Temperatur DS1820\";rt=\"temperature-c\"");
|
||||||
void
|
void
|
||||||
ds1820_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset)
|
ds1820_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset)
|
||||||
|
@ -149,22 +154,30 @@ ds1820_handler(void* request, void* response, uint8_t *buffer, uint16_t preferre
|
||||||
|
|
||||||
char message[100];
|
char message[100];
|
||||||
int length = 0; /* |<-------->| */
|
int length = 0; /* |<-------->| */
|
||||||
int grad=0;
|
union temp_raw {
|
||||||
int kgrad=0;
|
int16_t s_int16;
|
||||||
|
uint16_t u_int16;
|
||||||
if(ds1820_ok[0] & 0x01){
|
} temp_raw;
|
||||||
kgrad=5;
|
double temp_c;
|
||||||
}
|
int temp_integral;
|
||||||
grad = (int)((ds1820_ok[1] << 8) | (ds1820_ok[0])) >> 1;
|
int temp_centi;
|
||||||
|
|
||||||
const uint16_t *accept = NULL;
|
const uint16_t *accept = NULL;
|
||||||
int num = REST.get_header_accept(request, &accept);
|
int num = REST.get_header_accept(request, &accept);
|
||||||
|
|
||||||
|
// temp = temp_read - 0.25°C + (count_per_c - count_remain) / count_per_c;
|
||||||
|
temp_raw.u_int16 = ds1820_ok[DS1820_TEMP_MSB] << 8 | ds1820_ok[DS1820_TEMP_LSB];
|
||||||
|
temp_c = temp_raw.s_int16 / 2.0
|
||||||
|
- 0.25
|
||||||
|
+ ((double) ds1820_ok[DS1820_COUNT_PER_C] - (double) ds1820_ok[DS1820_COUNT_REMAIN])
|
||||||
|
/ (double) ds1820_ok[DS1820_COUNT_PER_C];
|
||||||
|
temp_integral = (int) temp_c;
|
||||||
|
temp_centi = (int) (fabs (temp_c - (int) temp_c) * 100.0);
|
||||||
|
|
||||||
if ((num==0) || (num && accept[0]==REST.type.TEXT_PLAIN))
|
if ((num==0) || (num && accept[0]==REST.type.TEXT_PLAIN))
|
||||||
{
|
{
|
||||||
REST.set_header_content_type(response, REST.type.TEXT_PLAIN);
|
REST.set_header_content_type(response, REST.type.TEXT_PLAIN);
|
||||||
// snprintf(message, REST_MAX_CHUNK_SIZE, "%2d.%d C",grad,kgrad);
|
snprintf(message, REST_MAX_CHUNK_SIZE, "%d.%02d C", temp_integral, temp_centi);
|
||||||
snprintf(message, REST_MAX_CHUNK_SIZE, "%4d",grad*100+kgrad*10);
|
|
||||||
|
|
||||||
length = strlen(message);
|
length = strlen(message);
|
||||||
memcpy(buffer, message,length );
|
memcpy(buffer, message,length );
|
||||||
|
@ -174,8 +187,7 @@ ds1820_handler(void* request, void* response, uint8_t *buffer, uint16_t preferre
|
||||||
else if (num && (accept[0]==REST.type.APPLICATION_JSON))
|
else if (num && (accept[0]==REST.type.APPLICATION_JSON))
|
||||||
{
|
{
|
||||||
REST.set_header_content_type(response, REST.type.APPLICATION_JSON);
|
REST.set_header_content_type(response, REST.type.APPLICATION_JSON);
|
||||||
// snprintf(message, REST_MAX_CHUNK_SIZE, "{\"temp\":\"%d.%d\"}",grad,kgrad);
|
snprintf(message, REST_MAX_CHUNK_SIZE, "{\"temp\":\"%d.%02d\"}", temp_integral, temp_centi);
|
||||||
snprintf(message, REST_MAX_CHUNK_SIZE, "{\"temp\":\"%4d\"}",grad*100+kgrad*10);
|
|
||||||
|
|
||||||
length = strlen(message);
|
length = strlen(message);
|
||||||
memcpy(buffer, message,length );
|
memcpy(buffer, message,length );
|
||||||
|
|
Loading…
Add table
Reference in a new issue