sys.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. #include <limits.h>
  7. #include "fs.h"
  8. #include "log.h"
  9. #include "sys.h"
  10. #include "lock.h"
  11. #include "paras.h"
  12. #include "cfg.h"
  13. #include "fs.h"
  14. #include "ui.h"
  15. #include "mb.h"
  16. #include "db.h"
  17. #include "sensor.h"
  18. #include "breaker.h"
  19. #include "thread.h"
  20. #include "led.h"
  21. #include "beep.h"
  22. #include "stdio.h"
  23. ////////////////////////////////////////////////////////////////////
  24. int sys_reboot(void)
  25. {
  26. int r=0;
  27. r = system("reboot");
  28. if(r) {
  29. LOGE("sys_reboot failed!\n");
  30. return -1;
  31. }
  32. return r;
  33. }
  34. int sys_get_chip_id(int *id)
  35. {
  36. if(!id) {
  37. return -1;
  38. }
  39. return 0;
  40. }
  41. int sys_get_bldtime(char *buf, int len)
  42. {
  43. char mon[10]={0};
  44. datetime_t dt;
  45. char *mon2[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
  46. sscanf(__DATE__, "%s %hhu %hu", mon,&dt.day,&dt.year);
  47. sscanf(__TIME__, "%hhu:%hhu:%hhu", &dt.hour,&dt.min,&dt.sec);
  48. for(int i=0;i<12;i++) {
  49. if(strcmp(mon, mon2[i])==0) {
  50. dt.mon = i+1; break;
  51. }
  52. }
  53. return snprintf(buf,len,"%04hu/%02hhu/%02hhu %02hhu:%02hhu:%02hhu",dt.year,dt.mon,dt.day,dt.hour,dt.min,dt.sec);
  54. }
  55. static char *str_get(char *buf, char *tok, char *dst, int dstlen)
  56. {
  57. int n=0;
  58. char *t=dst,*p=strstr(buf,tok);
  59. if(!p) {
  60. return NULL;
  61. }
  62. while((*p)!=':') {
  63. if((*p)=='\r' || (*p)=='\n') {
  64. return NULL;
  65. }
  66. p++;
  67. }
  68. p++;
  69. while((*p)!='"') {
  70. if((*p)=='\r' || (*p)=='\n') {
  71. return NULL;
  72. }
  73. p++;
  74. }
  75. p++;
  76. while((*p)!='"') {
  77. if((*p)=='\r' || (*p)=='\n') {
  78. return NULL;
  79. }
  80. *dst++ = *p++;
  81. n++;
  82. if(n>=dstlen-1) {
  83. LOGE("str_get %s, dst buf length %d is too small!\n", tok, dstlen);
  84. return NULL;
  85. }
  86. }
  87. *dst = 0;
  88. return t;
  89. }
  90. user_config_t USER_ADMIN={
  91. .role_id = 1,
  92. .user_name="admin",
  93. .password_md5="21232f297a57a5a743894a0e4a801fc3", //md5 "admin"
  94. .date="2026/05/29",
  95. .time="09:34:47",
  96. };
  97. #define USER_CSV_FORMATE "%d,%s,%s,%s,%s\n"
  98. int sys_get_user(char *path,user_data_t *user)
  99. {
  100. int ret = 0;
  101. FILE *fp = NULL;
  102. char buff[128] = {0};
  103. if(!user || !path)
  104. return -1;
  105. ret = fs_length(path);
  106. if(ret == -1)
  107. {
  108. fp = fopen(path, "w");
  109. if(fp == NULL)
  110. return -1;
  111. sprintf(buff,USER_CSV_FORMATE,USER_ADMIN.role_id,USER_ADMIN.user_name,USER_ADMIN.password_md5,USER_ADMIN.date,USER_ADMIN.time);
  112. fwrite(buff,strlen(buff),1,fp);
  113. fclose(fp);
  114. fp = NULL;
  115. }
  116. fp = fopen(path, "rb");
  117. if(fp == NULL)
  118. return -1;
  119. int i = 0;
  120. while(fgets(buff,128,fp) != NULL)
  121. {
  122. 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);
  123. i++;
  124. }
  125. user->user_count = i;
  126. fclose(fp);
  127. return 0;
  128. }
  129. int sys_set_user(char *path,user_data_t *user)
  130. {
  131. FILE *fp = NULL;
  132. char buff[128] = {0};
  133. fp = fopen(path, "w");
  134. for(int i = 0; i < user->user_count;i++)
  135. {
  136. 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);
  137. fputs(buff,fp);
  138. memset(buff,0,128);
  139. }
  140. fclose(fp);
  141. return 0;
  142. }
  143. int sys_get_prod(char *path, paras_data_t *info)
  144. {
  145. int r;
  146. char *p,*tok;
  147. buf_t fbuf;
  148. r = fs_load(path, &fbuf);
  149. if(r) {
  150. return -1;
  151. }
  152. tok = "product_name";
  153. p = str_get(fbuf.buf, tok, info->prod.pname, sizeof(info->prod.pname));
  154. if(p) LOGD("___%s:%s\n", tok, p);
  155. tok = "product_sn";
  156. p = str_get(fbuf.buf, tok, info->prod.pnumber, sizeof(info->prod.pnumber));
  157. if(p) LOGD("___%s:%s\n", tok, p);
  158. #if 0
  159. tok = "device_name";
  160. p = str_get(fbuf.buf, tok, info->prod.name, sizeof(info->prod.name));
  161. if(p) LOGD("___%s:%s\n", tok, p);
  162. #endif
  163. tok = "device_no";
  164. p = str_get(fbuf.buf, tok, info->prod.number, sizeof(info->prod.number));
  165. if (p)
  166. LOGD("___%s:%s\n", tok, p);
  167. tok = "device_date";
  168. p = str_get(fbuf.buf, tok, info->prod.date, sizeof(info->prod.date));
  169. if(p) LOGD("___%s:%s\n", tok, p);
  170. tok = "device_batch";
  171. p = str_get(fbuf.buf, tok, info->prod.batch, sizeof(info->prod.batch));
  172. if(p) LOGD("___%s:%s\n", tok, p);
  173. tok = "service_name";
  174. p = str_get(fbuf.buf, tok, info->serv.name, sizeof(info->serv.name));
  175. if(p) LOGD("___%s:%s\n", tok, p);
  176. tok = "service_site";
  177. p = str_get(fbuf.buf, tok, info->serv.site, sizeof(info->serv.site));
  178. if(p) LOGD("___%s:%s\n", tok, p);
  179. tok = "service_mail";
  180. p = str_get(fbuf.buf, tok, info->serv.mail, sizeof(info->serv.mail));
  181. if(p) LOGD("___%s:%s\n", tok, p);
  182. tok = "service_address";
  183. p = str_get(fbuf.buf, tok, info->serv.addr, sizeof(info->serv.addr));
  184. if(p) LOGD("___%s:%s\n", tok, p);
  185. tok = "service_telephone";
  186. p = str_get(fbuf.buf, tok, info->serv.tele, sizeof(info->serv.tele));
  187. if(p) LOGD("___%s:%s\n", tok, p);
  188. free(fbuf.buf);
  189. return 0;
  190. }
  191. static void poll_thread(void *arg)
  192. {
  193. thread_handle_t *h=(thread_handle_t*)arg;
  194. //wdog_init();
  195. //tmp_create();
  196. while(h->quit==0) {
  197. sensor_query();
  198. // breaker_query();
  199. sleep(1);
  200. }
  201. pthread_exit(NULL);
  202. }
  203. int sys_init(void)
  204. {
  205. fs_init();
  206. //db_init();
  207. paras_init();
  208. ui_init();
  209. mb_init();
  210. //breaker_init();
  211. //thread_start(THREAD_ID_POLL, poll_thread, NULL);
  212. return 0;
  213. }