aboutsummaryrefslogtreecommitdiffstats
path: root/src/lm75.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lm75.c')
-rw-r--r--src/lm75.c129
1 files changed, 53 insertions, 76 deletions
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