 |
|
 |
【autorun.sh】 cd /home/octopus/Programs/powerlog ./powerlog2 on ./templog
|
 |
【conn.h】 #define SERVER_NAME "localhost" #define DB_USER "server" #define DB_PASSWORD "密码" #define DB_NAME "server"
|
 |
【IP.txt】 192.168.0.4
|
 |
【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; }
|
 |
【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)
|
 |
【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; }
|
 |
【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); }
|
 |
【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; }
|