From 93fb646dc67d6339e75a6787d629bbe3c45b9b37 Mon Sep 17 00:00:00 2001
From: Guo Wenxue <guowenxue@gmail.com>
Date: Wed, 21 Sep 2022 23:03:14 +0800
Subject: [PATCH] update ds18b20 source code

---
 apue/1.File_IO/ds18b20.c |   67 +++++++++++++++++----------------
 1 files changed, 35 insertions(+), 32 deletions(-)

diff --git a/apue/1.File_IO/ds18b20.c b/apue/1.File_IO/ds18b20.c
index efb0025..1ad5192 100644
--- a/apue/1.File_IO/ds18b20.c
+++ b/apue/1.File_IO/ds18b20.c
@@ -1,14 +1,14 @@
 /*********************************************************************************
- *      Copyright:  (C) 2018 LingYun IoT System Studio
+ *      Copyright:  (C) 2022 LingYun IoT System Studio
  *                  All rights reserved.
  *
  *       Filename:  ds18b20.c
- *    Description:  This file is temperature sensor DS18B20 code
- *                 
+ *    Description:  This file is DS18B20 temperature sensor example source code.
+ *              
  *        Version:  1.0.0(2018/10/14)
  *         Author:  Guo Wenxue <guowenxue@gmail.com>
  *      ChangeLog:  1, Release initial version on "2018/10/14 12:13:26"
- *                 
+ *              
  ********************************************************************************/
 
 #include <stdio.h>
@@ -24,21 +24,21 @@
 
 int main(int argc, char *argv[])
 {
-        float       temp;
+    float       temp;
 
-        if( ds18b20_get_temperature(&temp) < 0 )
-        {
-                printf("ERROR: ds18b20 get temprature failure\n");
-                return 1;
-        }
+    if( ds18b20_get_temperature(&temp) < 0 )
+    {
+        printf("ERROR: ds18b20 get temprature failure\n");
+        return 1;
+    }
 
-        printf("DS19B20 get temperature: %f ℃\n", temp);
-        return 0;
+    printf("DS18B20 get temperature: %f 'C\n", temp);
+    return 0;
 }
 
 
 /* File Content:
-   pi@raspberrypi:~/guowenxue $ cat /sys/bus/w1/devices/28-041731f7c0ff/w1_slave 
+   pi@raspberrypi:~/guowenxue $ cat /sys/bus/w1/devices/28-041731f7c0ff/w1_slave
    3a 01 4b 46 7f ff 0c 10 a5 : crc=a5 YES
    3a 01 4b 46 7f ff 0c 10 a5 t=19625
  */
@@ -54,10 +54,11 @@
     char           *ptr;
     float           value;
     int             found = 0;
+    int             rv = 0;
 
     if( !temp )
     {
-            return -1;
+        return -1;
     }
 
     /*+-------------------------------------------------------------------+
@@ -76,15 +77,15 @@
             /* find and get the chipset SN filename */
             strcpy(chip,direntp->d_name);
             found = 1;
-	    break;
+            break;
         }
     }
     closedir(dirp);
 
     if( !found )
     {
-            printf("Can not find ds18b20 in %s\n", w1_path);
-            return -3;
+        printf("Can not find ds18b20 in %s\n", w1_path);
+        return -3;
     }
 
     /* get DS18B20 sample file full path: /sys/bus/w1/devices/28-xxxx/w1_slave */
@@ -92,31 +93,33 @@
     strncat(w1_path, "/w1_slave", sizeof(w1_path)-strlen(w1_path));
 
     /* open file /sys/bus/w1/devices/28-xxxx/w1_slave to get temperature */
-    if( (fd=open(w1_path, O_RDONLY)) < 0 ) 
-    { 
-            printf("open %s error: %s\n", w1_path, strerror(errno)); 
-            return -4;
-    } 
-    
+    if( (fd=open(w1_path, O_RDONLY)) < 0 )
+    {
+        printf("open %s error: %s\n", w1_path, strerror(errno));
+        return -4;
+    }
+
     if(read(fd, buf, sizeof(buf)) < 0)
     {
-            printf("read %s error: %s\n", w1_path, strerror(errno)); 
-            return -5;
-    } 
-    
+        printf("read %s error: %s\n", w1_path, strerror(errno));
+        rv = -5;
+        goto cleanup;
+    }
+
     ptr = strstr(buf, "t=");
     if( !ptr )
     {
-            printf("ERROR: Can not get temperature\n");
-            return -6;
+        printf("ERROR: Can not get temperature\n");
+        rv = -6;
+        goto cleanup;
     }
 
     ptr+=2;
 
     /* convert string value to float value */
     *temp = atof(ptr)/1000;
-   
-    close(fd);
 
-    return 0;
+cleanup:
+    close(fd);
+    return rv;
 }

--
Gitblit v1.9.1