#include #include #include #include #include #include #include "fs.h" #include "log.h" #include "sys.h" #include "lock.h" #include "paras.h" #include "cfg.h" #include "fs.h" #include "ui.h" #include "mb.h" #include "db.h" #include "sensor.h" #include "breaker.h" #include "thread.h" #include "led.h" #include "beep.h" #include "stdio.h" //////////////////////////////////////////////////////////////////// int sys_reboot(void) { int r=0; r = system("reboot"); if(r) { LOGE("sys_reboot failed!\n"); return -1; } return r; } int sys_get_chip_id(int *id) { if(!id) { return -1; } return 0; } int sys_get_bldtime(char *buf, int len) { char mon[10]={0}; datetime_t dt; char *mon2[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; sscanf(__DATE__, "%s %hhu %hu", mon,&dt.day,&dt.year); sscanf(__TIME__, "%hhu:%hhu:%hhu", &dt.hour,&dt.min,&dt.sec); for(int i=0;i<12;i++) { if(strcmp(mon, mon2[i])==0) { dt.mon = i+1; break; } } return snprintf(buf,len,"%04hu/%02hhu/%02hhu %02hhu:%02hhu:%02hhu",dt.year,dt.mon,dt.day,dt.hour,dt.min,dt.sec); } static char *str_get(char *buf, char *tok, char *dst, int dstlen) { int n=0; char *t=dst,*p=strstr(buf,tok); if(!p) { return NULL; } while((*p)!=':') { if((*p)=='\r' || (*p)=='\n') { return NULL; } p++; } p++; while((*p)!='"') { if((*p)=='\r' || (*p)=='\n') { return NULL; } p++; } p++; while((*p)!='"') { if((*p)=='\r' || (*p)=='\n') { return NULL; } *dst++ = *p++; n++; if(n>=dstlen-1) { LOGE("str_get %s, dst buf length %d is too small!\n", tok, dstlen); return NULL; } } *dst = 0; return t; } user_config_t USER_ADMIN={ .role_id = 1, .user_name="admin", .password_md5="21232f297a57a5a743894a0e4a801fc3", //md5 "admin" .date="2026/05/29", .time="09:34:47", }; #define USER_CSV_FORMATE "%d,%s,%s,%s,%s\n" int sys_get_user(char *path,user_data_t *user) { int ret = 0; FILE *fp = NULL; char buff[128] = {0}; if(!user || !path) return -1; ret = fs_length(path); if(ret == -1) { fp = fopen(path, "w"); if(fp == NULL) return -1; sprintf(buff,USER_CSV_FORMATE,USER_ADMIN.role_id,USER_ADMIN.user_name,USER_ADMIN.password_md5,USER_ADMIN.date,USER_ADMIN.time); fwrite(buff,strlen(buff),1,fp); fclose(fp); fp = NULL; } fp = fopen(path, "rb"); if(fp == NULL) return -1; int i = 0; while(fgets(buff,128,fp) != NULL) { sscanf(buff,"%d,%[^,],%[^,],%[^,],%s",&user->config[i].role_id,user->config[i].user_name,user->config[i].password_md5,user->config[i].date,user->config[i].time); i++; } user->user_count = i; fclose(fp); return 0; } int sys_set_user(char *path,user_data_t *user) { FILE *fp = NULL; char buff[128] = {0}; fp = fopen(path, "w"); for(int i = 0; i < user->user_count;i++) { sprintf(buff,USER_CSV_FORMATE,user->config[i].role_id,user->config[i].user_name,user->config[i].password_md5,user->config[i].date,user->config[i].time); fputs(buff,fp); memset(buff,0,128); } fclose(fp); return 0; } int sys_get_prod(char *path, paras_data_t *info) { int r; char *p,*tok; buf_t fbuf; r = fs_load(path, &fbuf); if(r) { return -1; } tok = "product_name"; p = str_get(fbuf.buf, tok, info->prod.pname, sizeof(info->prod.pname)); if(p) LOGD("___%s:%s\n", tok, p); tok = "product_sn"; p = str_get(fbuf.buf, tok, info->prod.pnumber, sizeof(info->prod.pnumber)); if(p) LOGD("___%s:%s\n", tok, p); #if 0 tok = "device_name"; p = str_get(fbuf.buf, tok, info->prod.name, sizeof(info->prod.name)); if(p) LOGD("___%s:%s\n", tok, p); #endif tok = "device_no"; p = str_get(fbuf.buf, tok, info->prod.number, sizeof(info->prod.number)); if (p) LOGD("___%s:%s\n", tok, p); tok = "device_date"; p = str_get(fbuf.buf, tok, info->prod.date, sizeof(info->prod.date)); if(p) LOGD("___%s:%s\n", tok, p); tok = "device_batch"; p = str_get(fbuf.buf, tok, info->prod.batch, sizeof(info->prod.batch)); if(p) LOGD("___%s:%s\n", tok, p); tok = "service_name"; p = str_get(fbuf.buf, tok, info->serv.name, sizeof(info->serv.name)); if(p) LOGD("___%s:%s\n", tok, p); tok = "service_site"; p = str_get(fbuf.buf, tok, info->serv.site, sizeof(info->serv.site)); if(p) LOGD("___%s:%s\n", tok, p); tok = "service_mail"; p = str_get(fbuf.buf, tok, info->serv.mail, sizeof(info->serv.mail)); if(p) LOGD("___%s:%s\n", tok, p); tok = "service_address"; p = str_get(fbuf.buf, tok, info->serv.addr, sizeof(info->serv.addr)); if(p) LOGD("___%s:%s\n", tok, p); tok = "service_telephone"; p = str_get(fbuf.buf, tok, info->serv.tele, sizeof(info->serv.tele)); if(p) LOGD("___%s:%s\n", tok, p); free(fbuf.buf); return 0; } static void poll_thread(void *arg) { thread_handle_t *h=(thread_handle_t*)arg; //wdog_init(); //tmp_create(); while(h->quit==0) { sensor_query(); // breaker_query(); sleep(1); } pthread_exit(NULL); } int sys_init(void) { fs_init(); //db_init(); paras_init(); ui_init(); mb_init(); //breaker_init(); //thread_start(THREAD_ID_POLL, poll_thread, NULL); return 0; }