From e0eeeb389302c3050310ac8e618119384ce0fef8 Mon Sep 17 00:00:00 2001 From: Gergő J. Miklós Date: Mon, 13 May 2019 00:49:29 +0200 Subject: LM75 refactored --- src/lm75.c | 129 +++++++++++++++++++++++++------------------------------------ 1 file changed, 53 insertions(+), 76 deletions(-) (limited to 'src/lm75.c') diff --git a/src/lm75.c b/src/lm75.c index 784defd..bd1f764 100644 --- a/src/lm75.c +++ b/src/lm75.c @@ -29,127 +29,100 @@ void lm75_print_all(void) } -uchar *dev_xchg_data( uchar *buf, uint16 blen){ //# Exchange data with the device +uchar *read_data( uchar *buf ){ //# [buf] = 32 byte - if(write(devicef, buf, 1) != 1){ //# write + if(write(devicef, buf, 1) != 1){ //# write one byte to device bus_err(errno); } + usleep(10*1000); //# Wait 10ms for reading - if(read(devicef, buf, 2) != 2) { //# read + if(read(devicef, buf, 2) != 2) { //# read the result bus_err(errno); } - - // *buf = 0x0022; return buf; } -void lm75_conf_set(const char *opts){ - // printf(""); -} -float lm75_read_temp(float offset) -{ - signed int rawtemp = 0; +float calculate_temp(float offset){ // Calculate temperature + int16 rawtemp = 0; //# Signed by default float temp; - // char *buff; - buf[0] = 0x00; - - dev_xchg_data(buf,32); + buf[0] = 0x00; //# Measurement in the REG[0] + read_data(buf); //# [buf] = 32 byte - rawtemp = (buf[0]*256 + buf[1]) >> 5; //(buf[0] << 8), and (>> 5), 11bit device is also supported + rawtemp = (buf[0]*256 + buf[1]) >> 5; // (buf[0] << 8), and (>> 5), Device with 11bit data, is also supported - if((rawtemp & 0x400) == 0x400) //check if the msb(bit11) is 1 (1024 = 0x400), 2'complement negative number - { - rawtemp = rawtemp - 2048; //2^11 = 2048 + if((rawtemp & 0x400) == 0x400){ //# check if the msb(bit11) is 1 (1024 = 0x400), 2'complement negative number + rawtemp = rawtemp - 2048; //# 2^11 = 2048 } - temp = rawtemp * 0.125 ; //11bit->0.125°C or 9bit->0.5°C + temp = rawtemp * 0.125 ; //# 11bit -> 0.125°C or 9bit -> 0.5°C return (temp + offset); } -float lm75_read_tos(void) -{ - int rawtemp = 0; - - buf[0] = 0x02; - - dev_xchg_data(NULL,32); - +float read_tos(void){ // Over-Temperature Shutdown register + int16 rawtemp = 0; //# Int16 default signed + buf[0] = 0x02; //# Tos = REG[2] + read_data(buf); + rawtemp = buf[0]*256 + buf[1]; - rawtemp = (rawtemp) >> 7; //9bit data - - if((rawtemp & 256) == 256) // check if the msb 2'complement negative number - { - rawtemp = rawtemp - 512 ; // 2^9 = 512; + rawtemp = (rawtemp) >> 7; //# 9bit data + + if((rawtemp & 256) == 256){ //# check MSB if it's a 2'complement number + rawtemp = rawtemp - 512 ; //# 2^9 = 512; } - - return (rawtemp * 0.5); //9bit -> 0.5 celsius + return (rawtemp * 0.5); //# 9bit -> 0.5 celsius } -float lm75_read_thys(void) -{ - int rawtemp = 0; - - buf[0] = 0x03; - - dev_xchg_data(NULL,32); +float read_thys(void){ // Over-Temp Hysteresis Register + int16 rawtemp = 0; //# signed + buf[0] = 0x03; + read_data(buf); //# read from REG[3] rawtemp = buf[0]*256 + buf[1]; - rawtemp = (rawtemp) >> 7; //9bit data - - if((rawtemp & 256) == 256) // check if the msb 2'complement negative number - { - rawtemp = rawtemp - 512 ; // 2^9 = 512; + rawtemp = (rawtemp) >> 7; //# 9bit data + if((rawtemp & 256) == 256){ + rawtemp = rawtemp - 512 ; //# 2^9 = 512; } - - return (rawtemp * 0.5); //9bit -> 0.5 celsius + return (rawtemp * 0.5); //# 9bit -> 0.5 celsius } -char lm75_read_conf(void) -{ - - buf[0] = 0x01; - - dev_xchg_data(NULL,32); - +uchar read_conf(void){ //Configuration register + buf[0] = 0x01; + read_data(buf); return buf[0]; } -void lm75_read_all(const char *opts) -{ +void lm75_read_all(const uchar *opts){ // Print out whole device's data // if(opts != NULL) // { - // printf("00:%f\n", lm75_read_temp(strtof(opts, NULL))); + // printf("00:%f\n", calculate_temp(strtof(opts, NULL))); // } // else // { - printf("00:%f\n", lm75_read_temp(0.0)); + printf("00:%f\n", calculate_temp(0.0)); // } - - printf("01:0x%x\n", lm75_read_conf()); - printf("02:%f\n", lm75_read_tos()); - printf("03:%f\n", lm75_read_thys()); + printf("01:0x%x\n", read_conf()); + printf("02:%f\n", read_tos()); + printf("03:%f\n", read_thys()); } -void lm75_read_one(const char *opts) -{ - int id,i; - //char *ptr; - char temp[256]; +void lm75_read_one(const uchar *opts){ // Prints the selected register's data + uint16 id,i; + uchar temp[256]; if(opts != NULL){ - for(i = 0; i < strlen(opts); i++){ + for(i = 0; i < strlen((char*)opts); i++){ if (*(opts+i) == ','){ break; } @@ -157,24 +130,24 @@ void lm75_read_one(const char *opts) temp[i+1] = '\0'; } - id = atoi(temp); - strncpy(temp, opts+i+1, 255); + id = atoi((char*)temp); + strncpy((char*)temp, (char*)opts+i+1, 255); // id = strtol (opts,&ptr,0); //all format allowed // ptr++; //one separator allowed switch (id) { case 0x00: - printf("00:%f\n", lm75_read_temp(atof(temp))); + printf("%f\n", calculate_temp(atof((char*)temp))); break; case 0x01: - printf("01:0x%x\n", lm75_read_conf()); + printf("0x%x\n", read_conf()); break; case 0x02: - printf("02:%f\n", lm75_read_tos()); + printf("%f\n", read_tos()); break; case 0x03: - printf("03:%f\n", lm75_read_thys()); + printf("%f\n", read_thys()); break; default: print_help(); @@ -182,3 +155,7 @@ void lm75_read_one(const char *opts) } } + +void lm75_conf_set(const uchar *opts){ + // printf(""); +} \ No newline at end of file -- cgit v1.2.3