665e1b5cb16d058f478867d0e8a4f8632e2cb02e..2e7765f468c46728df16faa903d1f4b8a17f76fd
2022-09-21 Guo Wenxue
update sqlite_blob.c
2e7765 diff | tree
2022-09-21 Guo Wenxue
Merge branch 'master' of ssh://master.iot-yun.club:2280/raspberrypi
fbbb2d diff | tree
2022-09-21 Guo Wenxue
update ds18b20 source code
93fb64 diff | tree
2 files modified
118 ■■■■ changed files
apue/1.File_IO/ds18b20.c 67 ●●●● patch | view | raw | blame | history
apue/project_socket/src/sqlite_blob.c 51 ●●●● patch | view | raw | blame | history
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;
}
apue/project_socket/src/sqlite_blob.c
@@ -27,9 +27,9 @@
static sqlite3         *s_clidb = NULL;
/*  description: open or create sqlite database if not exist
 *   input args:
 *               $db_file: sqlite database file name
/* description: open or create sqlite database if not exist
 * input args:
 * $db_file: sqlite database file name
 * return value: <0: failure   0:ok
 * */
int database_init(const char *db_file)
@@ -73,7 +73,7 @@
    /* enable full auto vacuum, Auto increase/decrease  */
    sqlite3_exec(s_clidb, "pragma auto_vacuum = 2 ; ", NULL, NULL, NULL);
    /*   Create firehost table in the database */
    /* Create firehost table in the database */
    snprintf(sql, sizeof(sql), "CREATE TABLE %s(packet BLOB);", TABLE_NAME);
    if( SQLITE_OK != sqlite3_exec(s_clidb, sql, NULL, NULL, &errmsg) )
    {
@@ -81,6 +81,7 @@
        sqlite3_free(errmsg); /* free errmsg  */
        sqlite3_close(s_clidb);   /* close databse */
        unlink(db_file);      /* remove database file */
        return -3;
    }
    log_info("create and init database file '%s' ok\n", db_file);
@@ -88,7 +89,7 @@
}
/*  description: close sqlite database handler
/* description: close sqlite database handler
 * return value: none
 */
void database_term(void)
@@ -100,10 +101,10 @@
}
/*  description: push a blob packet into database
 *   input args:
 *               $pack:  blob packet data address
 *               $size:  blob packet data bytes
/* description: push a blob packet into database
 * input args:
 *      $pack:  blob packet data address
 *      $size:  blob packet data bytes
 * return value: <0: failure   0:ok
 */
int blobdb_push_packet(void *pack, int size)
@@ -125,7 +126,7 @@
        return -2;
    }
    snprintf(sql, sizeof(sql), "insert into %s(packet) values(?)", TABLE_NAME);
    snprintf(sql, sizeof(sql), "insert into %s(packet) values(?)", TABLE_NAME);
    rv = sqlite3_prepare_v2(s_clidb, sql, -1, &stat, NULL);
    if(SQLITE_OK!=rv || !stat)
    {
@@ -161,11 +162,11 @@
}
/*  description: pop the first blob packet from database
 *   input args:
 *               $pack:  blob packet output buffer address
 *               $size:  blob packet output buffer size
 *               $byte:  blob packet bytes
/* description: pop the first blob packet from database
 * input args:
 *      $pack:  blob packet output buffer address
 *      $size:  blob packet output buffer size
 *      $byte:  blob packet bytes
 * return value: <0: failure   0:ok
 */
int blobdb_pop_packet(void *pack, int size, int *bytes)
@@ -213,17 +214,17 @@
        goto out;
    }
    *bytes = sqlite3_column_bytes(stat, 0);
    *bytes = sqlite3_column_bytes(stat, 0);
    if( *bytes > size )
    {
        log_error("blob packet bytes[%d] larger than bufsize[%d]\n", *bytes, size);
        *bytes = 0;
        rv = -1;
    }
    if( *bytes > size )
    {
        log_error("blob packet bytes[%d] larger than bufsize[%d]\n", *bytes, size);
        *bytes = 0;
        rv = -1;
    }
    memcpy(pack, blob_ptr, *bytes);
    rv = 0;
    rv = 0;
out:
    sqlite3_finalize(stat);
@@ -231,8 +232,8 @@
}
/*  description: remove the first blob packet from database
 *   input args: none
/* description: remove the first blob packet from database
 * input args: none
 * return value: <0: failure   0:ok
 */
int blobdb_del_packet(void)