  | 
      
        
          1楼
          巨大八爪鱼
          2016-2-10 16:00
          
          
           
         
        
       | 
    
    
        | 
      
        
          2楼
          巨大八爪鱼
          2016-2-10 16:01
          
          
           
         
        【autorun.sh】 cd /home/octopus/Programs/powerlog ./powerlog2 on ./templog
  
       | 
    
    
        | 
      
        
          3楼
          巨大八爪鱼
          2016-2-10 16:02
          
          
           
         
        【conn.h】 #define SERVER_NAME "localhost" #define DB_USER "server" #define DB_PASSWORD "密碼" #define DB_NAME "server"
  
       | 
    
    
        | 
      
        
          4楼
          巨大八爪鱼
          2016-2-10 16:02
          
          
           
         
        【IP.txt】 192.168.0.4
  
       | 
    
    
        | 
      
        
          5楼
          巨大八爪鱼
          2016-2-10 16:02
          
          
           
         
        【logview.c】 #include <mysql/mysql.h> #include <stdio.h> #include "conn.h"
  void putstr(char *s, FILE *fp, char display) {     fputs(s, fp);     fputc('\n', fp);     if (display == 1)         puts(s); }
  int main(int argc, char *argv[]) {     char ch;     char IP[16];     char line[100];     char sql[150];     int i = 0;     FILE *fp;     MYSQL conn;     MYSQL_RES *rs;     MYSQL_ROW row;          /* Get IP Address */     if ((fp = fopen("IP.txt", "r")) == NULL)     {         printf("Cannot open the file for IP Address.\n");         return 1;     }     while (ch = fgetc(fp), !feof(fp))     {         if ((ch >= '0' && ch <= '9') || ch == '.')             IP[i++] = ch;         else             break;         if (i == sizeof(IP) - 1)             break;     }     IP[i] = '\0';     fclose(fp);          /* Open Log File */     if ((fp = fopen("powerlog.txt", "w")) == NULL)     {         printf("Cannot open the file.\n");         return 2;     }     printf("Powerlog Version 2.4\n");     putstr("ID\tTIME", fp, 1);          /* Init MySQL Connection */     mysql_init(&conn);     if (!mysql_real_connect(&conn, SERVER_NAME, DB_USER, DB_PASSWORD, DB_NAME, 0, NULL, 0))     {         printf("Cannot connect to the database server.\n");         return 3;     }     mysql_set_character_set(&conn, "utf8");          /* Query */     sprintf(sql, "SELECT LogID, LogTime FROM PowerLog WHERE LogFlag = 'POWER ON' AND ComputerIP = '%s' ORDER BY LogTime DESC", IP);     mysql_query(&conn, sql);     rs = mysql_store_result(&conn);     for (i = 0; row = mysql_fetch_row(rs); i++)     {         sprintf(line, "%d\t%s", atoi(row[0]), row[1]);         putstr(line, fp, (i < 20));     }     mysql_free_result(rs);     fclose(fp);          mysql_close(&conn);     return 0; }
  
       | 
    
    
        | 
      
        
          6楼
          巨大八爪鱼
          2016-2-10 16:02
          
          
           
         
        【Makefile】 MYSQL = -lmysqlclient
  powerlog2: conn.h temperature.h temperature.c UART.h UART.c powerlog2.c     gcc temperature.c UART.c powerlog2.c -o powerlog2 $(MYSQL)
  logview: conn.h logview.c     gcc logview.c -o logview $(MYSQL)
  templog: conn.h temperature.h temperature.c UART.h UART.c templog.c     gcc temperature.c UART.c templog.c -o templog $(MYSQL)
  
       | 
    
    
        | 
      
        
          7楼
          巨大八爪鱼
          2016-2-10 16:03
          
          
           
         
        【powerlog2.c】 #include <mysql/mysql.h> #include <stdio.h> #include <string.h> #include "conn.h" #include "UART.h"
  int main(int argc, char *argv[]) {     char sql[200];     char *sql_err;     char temp_str[10];     char temp_str_buffer[120] = {0};     char uart_open = 1;     float temp;     int i = 10;     MYSQL conn;     MYSQL_RES *rs;     MYSQL_ROW row;          if (UART_Open() == 0)         uart_open = 0;     mysql_init(&conn);     if (!mysql_real_connect(&conn, SERVER_NAME, DB_USER, DB_PASSWORD, DB_NAME, 0, NULL, 0))     {         printf("Cannot connect to the database server.\n");         return 3;     }     mysql_set_character_set(&conn, "utf8");          printf("Powerlog Version 2.4\n");     printf("Welcome\n");          if (uart_open)     {         get_temperature(&temp); // avoid the first possible error value         while (i--)         {             usleep(10000);             get_temperature(&temp);             get_temperature_str(&temp, temp_str);             strcat(temp_str_buffer, temp_str);         }     }     else         strcpy(temp_str_buffer, "UART Unavailable");              if (argc >= 2 && strcmp(argv[1], "on") == 0)     {         sprintf(sql, "INSERT INTO PowerLog (LogTime, LogFlag, Temperature) VALUES (NOW(), 'POWER ON', '%s')", temp_str_buffer);         sql_err = "INSERT INTO PowerLog (LogTime, LogFlag, Temperature) VALUES (NOW(), 'POWER ON', 'Query Error')";     }     else     {         // Just for debug         sprintf(sql, "INSERT INTO PowerLog (LogTime, Temperature) VALUES (NOW(), '%s')", temp_str_buffer);         sql_err = "INSERT INTO PowerLog (LogTime, Temperature) VALUES (NOW(), 'Query Error')";     }          i = mysql_query(&conn, sql);     if (i == 1)         mysql_query(&conn, sql_err);          mysql_query(&conn, "SELECT NOW()");     rs = mysql_store_result(&conn);     row = mysql_fetch_row(rs);     printf("MySQL Time: %s\n", row[0]);     mysql_free_result(rs);     mysql_close(&conn);     if (uart_open)         UART_Close();     return 0; }
  
       | 
    
    
        | 
      
        
          8楼
          巨大八爪鱼
          2016-2-10 16:03
          
          
           
         
        【temperature.c】 #include <stdio.h> #include <unistd.h> #include "UART.h" #include "temperature.h"
  char buffer[513];
  void get_temperature(float *temp) {     UART_Send(0x83);     usleep(100000);     UART_Receive(buffer);     if (buffer[1] & TEMP_ERROR)     {         *temp = -999.99;         return;     }     *temp = buffer[2] * 1.00 + buffer[3] * 0.01;     if (buffer[1] & TEMP_NEGATIVE)         *temp = -*temp; }
  void get_temperature_str(float *temp, char *s) {     sprintf(s, "%.2f℃\t", *temp); }
  
       | 
    
    
        | 
      
        
          9楼
          巨大八爪鱼
          2016-2-10 16:03
          
          
           
         
        【temperature.h】 #define _BV(n) (1 << n) #define TEMP_NEGATIVE _BV(4) #define TEMP_ERROR _BV(6)
  void get_temperature(float *temp); void get_temperature_str(float *temp, char *s);
  
       | 
    
    
        | 
      
        
          10楼
          巨大八爪鱼
          2016-2-10 16:04
          
          
           
         
        【templog.c】 #include <fcntl.h> #include <mysql/mysql.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "conn.h" #include "temperature.h" #include "UART.h"
  #define EXIT_FLAG _BV(7) #define COUNTER (flags & (~EXIT_FLAG)) #define COUNTER_CLEAR (flags &= EXIT_FLAG) int flags = 23;
  void record(void) {     char sql[300] = "INSERT INTO TemperatureLog (TemperatureA, TemperatureB, TemperatureC, TemperatureD, TemperatureE, TemperatureF, TemperatureG, TemperatureH, TemperatureI, TemperatureJ) VALUES (";     char *pStr;     float temp;     int i;     MYSQL conn;     MYSQL_RES *rs;          flags++;     if (COUNTER >= 24)         COUNTER_CLEAR;          if (COUNTER == 0)     {         if (UART_Open() == 0)             return;         for (i = 0; i < 5; i++)             get_temperature(&temp); // avoid the first possible error value     }          mysql_init(&conn);     if (!mysql_real_connect(&conn, SERVER_NAME, DB_USER, DB_PASSWORD, DB_NAME, 0, NULL, 0))     {         if (COUNTER == 0)             UART_Close();         return;     }     mysql_set_character_set(&conn, "utf8");          if (COUNTER == 0)     {         pStr = sql + strlen(sql);         for (i = 0; i < 10; i++)         {             get_temperature(&temp);             pStr += sprintf(pStr, "%.2f", temp);             if (i < 9)                 *pStr++ = ',';             sleep(1);         }         *pStr++ = ')';         *pStr++ = '\0';         mysql_query(&conn, sql);     }          mysql_query(&conn, "SELECT FlagValue FROM Flags WHERE FlagName = 'TEMPLOG_EXIT' AND FlagValue = 'EXIT'");     rs = mysql_store_result(&conn);     i = mysql_num_rows(rs);     mysql_free_result(rs);     if (i == 1)     {         mysql_query(&conn, "UPDATE Flags SET FlagValue = NOW() WHERE FlagName = 'TEMPLOG_EXIT'");         flags |= EXIT_FLAG;     }          mysql_close(&conn);     if (COUNTER == 0)         UART_Close(); }
  int main(void) {     int fd;     pid_t pid;     printf("Powerlog Version 2.4\n");     pid = fork();     if (pid < 0)         exit(1);     if (pid > 0)         exit(0);          pid = setsid();     fd = open("/dev/null", O_RDWR);     dup2(fd, STDIN_FILENO);     dup2(fd, STDOUT_FILENO);     dup2(fd, STDERR_FILENO);     close(fd);          for (;;)     {         sleep(100);         record();         if (flags & EXIT_FLAG)             break;     }     return 0; }
  
       |