#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" //////////////////////////////////////////////////////////////////// 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; } 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(); sensor_init(); breaker_init(); thread_start(THREAD_ID_POLL, poll_thread, NULL); return 0; }