paras.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "sys.h"
  4. #include "file.h"
  5. #include "lock.h"
  6. #include "paras.h"
  7. #include "cascade.h"
  8. #if 1
  9. #define LOGD log_d
  10. #define LOGE log_e
  11. #define LOGW log_w
  12. #else
  13. #define LOGD printf
  14. #define LOGE printf
  15. #define LOGW printf
  16. #endif
  17. enum {
  18. INI_READ=0,
  19. INI_WRITE,
  20. };
  21. extern GlobalDeviceInfo DFLT_PARAS;
  22. typedef struct {
  23. int flag;
  24. }paras_handle_t;
  25. static paras_handle_t paraHandle={0};
  26. static int do_check(void *para)
  27. {
  28. return 0;
  29. }
  30. #if 1
  31. #include "dictionary.h"
  32. #include "iniparser.h"
  33. typedef struct {
  34. int product_id ;//产品ID
  35. char product_number[16] ;//产品编号
  36. char product_name[32] ;//产品名称
  37. char product_status[32] ;//产品状态
  38. unsigned char product_type ;//产品类型
  39. unsigned char product_pwr_type ;//电源类型
  40. char product_version[8] ;//软件版本
  41. unsigned char product_language ;//多国语言
  42. unsigned char product_count ;//级联设备数
  43. unsigned short product_samp_time ;//采集周期 单位ms
  44. unsigned short product_save_time ;//采集周期 单位ms
  45. }prod_info_t;
  46. static int ini_rw_prod(int rw, dictionary *dic, GlobalDeviceInfo *info)
  47. {
  48. int r=-1,ok=1;
  49. char *p=NULL;
  50. char temp[100];
  51. char *token=NULL;
  52. if(info->product_language>=4) {
  53. LOGE("___ product_language %d is wrong\n", info->product_language);
  54. ok = 0;
  55. }
  56. if(info->product_type>=2) {
  57. LOGE("___ product_type %d is wrong\n", info->product_type);
  58. ok = 0;
  59. }
  60. if(info->product_pwr_type>=SmartPDU_Tree_AC_One_B) {
  61. LOGE("___ product_pwr_type %d is wrong\n", info->product_pwr_type);
  62. ok = 0;
  63. }
  64. if(!ok) {
  65. return -1;
  66. }
  67. token = "product:id";
  68. if(rw==INI_READ) {
  69. r = iniparser_getint(dic, token, -1);
  70. if(r==-1) {
  71. LOGE("___ iniparser_getstring %s failed\n", token);
  72. return -1;
  73. }
  74. info->product_id = r;
  75. }
  76. else {
  77. sprintf(temp, "%d", info->product_id);
  78. r = iniparser_set(dic, token, temp);
  79. if(r) {
  80. LOGE("___ iniparser_set %s failed\n", token);
  81. return -1;
  82. }
  83. }
  84. token = "product:number";
  85. if(rw==INI_READ) {
  86. p = (char*)iniparser_getstring(dic, token, NULL);
  87. if(!p) {
  88. LOGE("___ iniparser_getstring %s failed\n", token);
  89. return -1;
  90. }
  91. strcpy(info->product_number, p);
  92. }
  93. else {
  94. r = iniparser_set(dic, token, info->product_number);
  95. if(r) {
  96. LOGE("___ iniparser_set %s failed\n", token);
  97. return -1;
  98. }
  99. }
  100. token = "product:name";
  101. if(rw==INI_READ) {
  102. p = (char*)iniparser_getstring(dic, token, NULL);
  103. if(!p) {
  104. LOGE("___ iniparser_getstring %s failed\n", token);
  105. return -1;
  106. }
  107. strcpy(info->product_name, p);
  108. }
  109. else {
  110. r = iniparser_set(dic, token, info->product_name);
  111. if(r) {
  112. LOGE("___ iniparser_set %s failed\n", token);
  113. return -1;
  114. }
  115. }
  116. token = "product:type";
  117. if(rw==INI_READ) {
  118. r = iniparser_getint(dic, token, -1);
  119. if(r==-1) {
  120. LOGE("___ iniparser_getint %s failed\n", token);
  121. return -1;
  122. }
  123. info->product_type = r;
  124. }
  125. else {
  126. sprintf(temp, "%d", info->product_type);
  127. r = iniparser_set(dic, token, temp);
  128. if(r) {
  129. LOGE("___ iniparser_set %s failed\n", token);
  130. return -1;
  131. }
  132. }
  133. token = "product:powertype";
  134. if(rw==INI_READ) {
  135. r = iniparser_getint(dic, token, -1);
  136. if(r==-1) {
  137. LOGE("___ iniparser_getint %s failed\n", token);
  138. return -1;
  139. }
  140. info->product_pwr_type = r;
  141. }
  142. else {
  143. sprintf(temp, "%d", info->product_pwr_type);
  144. r = iniparser_set(dic, token, temp);
  145. if(r) {
  146. LOGE("___ iniparser_set %s failed\n", token);
  147. return -1;
  148. }
  149. }
  150. token = "product:version";
  151. if(rw==INI_READ) {
  152. p = (char*)iniparser_getstring(dic, token, NULL);
  153. if(!p) {
  154. LOGE("___ iniparser_getstring %s failed\n", token);
  155. return -1;
  156. }
  157. strcpy(info->product_version, p);
  158. }
  159. else {
  160. r = iniparser_set(dic, token, info->product_version);
  161. if(r) {
  162. LOGE("___ iniparser_set %s failed\n", token);
  163. return -1;
  164. }
  165. }
  166. token = "product:language";
  167. if(rw==INI_READ) {
  168. r = iniparser_getint(dic, token, -1);
  169. if(r==-1) {
  170. LOGE("___ iniparser_getint %s failed\n", token);
  171. return -1;
  172. }
  173. info->product_language = r;
  174. }
  175. else {
  176. sprintf(temp, "%d", info->product_language);
  177. r = iniparser_set(dic, token, temp);
  178. if(r) {
  179. LOGE("___ iniparser_set %s failed\n", token);
  180. return -1;
  181. }
  182. }
  183. token = "product:samptime";
  184. if(rw==INI_READ) {
  185. p = (char*)iniparser_getstring(dic, token, NULL);
  186. if(!p) {
  187. LOGE("___ iniparser_getstring %s failed\n", token);
  188. return -1;
  189. }
  190. info->product_samp_time = atoi(p);
  191. }
  192. else {
  193. sprintf(temp, "%d", info->product_samp_time);
  194. r = iniparser_set(dic, token, temp);
  195. if(r) {
  196. LOGE("___ iniparser_set %s failed\n", token);
  197. return -1;
  198. }
  199. }
  200. token = "product:savetime";
  201. if(rw==INI_READ) {
  202. p = (char*)iniparser_getstring(dic, token, NULL);
  203. if(!p) {
  204. LOGE("___ iniparser_getstring %s failed\n", token);
  205. return -1;
  206. }
  207. info->product_save_time = atoi(p);
  208. }
  209. else {
  210. sprintf(temp, "%d", info->product_save_time);
  211. r = iniparser_set(dic, token, temp);
  212. if(r) {
  213. LOGE("___ iniparser_set %s failed\n", token);
  214. return -1;
  215. }
  216. }
  217. if(rw==INI_READ) {
  218. info->product_count = 0;
  219. info->product_status[0] = 0;
  220. }
  221. return 0;
  222. }
  223. static int ini_rw_modbus(int rw, dictionary *dic, GlobalDeviceInfo *info)
  224. {
  225. int r=-1;
  226. char temp[100];
  227. char *token=NULL;
  228. ModbusInfo_t *mb=&info->_modbus_info;
  229. if(rw==INI_WRITE) {
  230. if(mb->product_modbus_type!=0 || mb->product_modbus_type!=1) {
  231. LOGE("___ set modbus, mode %d is invalid\n", mb->product_modbus_type);
  232. return -1;
  233. }
  234. if(mb->product_modbus_type==1 && (mb->product_modbus_addr==0 || mb->product_modbus_addr>CASCADE_MAX)) { //slave
  235. LOGE("___ set modbus, slave addr %d is invalid\n", mb->product_modbus_addr);
  236. }
  237. }
  238. token = "modbus:mode";
  239. if(rw==INI_READ) {
  240. r = iniparser_getint(dic, token, -1);
  241. if(r==-1) {
  242. LOGE("___ iniparser_getstring %s failed\n", token);
  243. return -1;
  244. }
  245. mb->product_modbus_type = r;
  246. }
  247. else {
  248. sprintf(temp, "%d", mb->product_modbus_type);
  249. r = iniparser_set(dic, token, temp);
  250. if(r) {
  251. LOGE("___ iniparser_set %s failed\n", token);
  252. return -1;
  253. }
  254. }
  255. token = "modbus:baudrate";
  256. if(rw==INI_READ) {
  257. r = iniparser_getint(dic, token, -1);
  258. if(r==-1) {
  259. LOGE("___ iniparser_getstring %s failed\n", token);
  260. return -1;
  261. }
  262. mb->product_modbus_baud = r;
  263. }
  264. else {
  265. sprintf(temp, "%d", mb->product_modbus_baud);
  266. r = iniparser_set(dic, token, temp);
  267. if(r) {
  268. LOGE("___ iniparser_set %s failed\n", token);
  269. return -1;
  270. }
  271. }
  272. token = "modbus:address";
  273. if(rw==INI_READ) {
  274. r = iniparser_getint(dic, token, -1);
  275. if(r==-1) {
  276. LOGE("___ iniparser_getstring %s failed\n", token);
  277. return -1;
  278. }
  279. mb->product_modbus_addr = r;
  280. }
  281. else {
  282. sprintf(temp, "%d", mb->product_modbus_addr);
  283. r = iniparser_set(dic, token, temp);
  284. if(r) {
  285. LOGE("___ iniparser_set %s failed\n", token);
  286. return -1;
  287. }
  288. }
  289. return 0;
  290. }
  291. static int ini_rw_network(int rw, dictionary *dic, GlobalDeviceInfo *info)
  292. {
  293. int r=-1;
  294. char *p=NULL;
  295. char temp[100];
  296. char *token=NULL;
  297. return 0;
  298. }
  299. static int ini_reset(void)
  300. {
  301. int r;
  302. dictionary *dic=NULL;
  303. char *ininame=INI_FILE_NAME;
  304. char temp[200];
  305. FILE *fp=NULL;
  306. GlobalDeviceInfo *info=&DFLT_PARAS;
  307. sys_get_path(temp, ininame);
  308. fp = fopen(temp, "w");
  309. if (fp==NULL) {
  310. LOGE("ini_reset, create %s failed\n", ininame);
  311. return -1;
  312. }
  313. fprintf(fp, "[product]\n");
  314. fprintf(fp, "id = %d\n", info->product_id);
  315. fprintf(fp, "number = %s\n", info->product_number);
  316. fprintf(fp, "name = %s\n", info->product_name);
  317. fprintf(fp, "type = %d\n", info->product_type);
  318. fprintf(fp, "powertype = %d\n", info->product_pwr_type);
  319. fprintf(fp, "version = %s\n", info->product_version);
  320. fprintf(fp, "language = %d\n", info->product_language);
  321. fprintf(fp, "samptime = %d\n", info->product_samp_time);
  322. fprintf(fp, "savetime = %d\n", info->product_save_time);
  323. fclose(fp);
  324. return 0;
  325. }
  326. static int ini_load(GlobalDeviceInfo *info)
  327. {
  328. int r=-1;
  329. char *p=NULL;
  330. char *ininame=INI_FILE_NAME;
  331. dictionary *dic=iniparser_load(ininame);
  332. if(dic == NULL){
  333. ini_reset();
  334. dic = iniparser_load(ininame);
  335. if(dic == NULL) {
  336. LOGE("___ iniparser_load failed\n");
  337. return -1;
  338. }
  339. }
  340. r = ini_rw_prod(INI_READ, dic, info);
  341. if(r) {
  342. LOGE("___ini_r_prod failed\n");
  343. }
  344. iniparser_freedict(dic);
  345. return r;
  346. }
  347. static int ini_save(GlobalDeviceInfo *info)
  348. {
  349. int r=-1;
  350. char *p=NULL;
  351. char temp[200];
  352. char *ininame=INI_FILE_NAME;
  353. dictionary *dic=iniparser_load(ininame);
  354. if(dic == NULL){
  355. LOGE("___ %s load failed\n", ininame);
  356. return -1;
  357. }
  358. r = ini_rw_prod(INI_WRITE, dic, info);
  359. if(r) {
  360. LOGE("___ini_r_prod failed\n");
  361. goto quit;
  362. }
  363. sys_get_path(temp, ininame);
  364. FILE *fp=fopen(temp, "w");
  365. if(!fp) {
  366. LOGE("___%s open failed\n", ininame);
  367. goto quit;
  368. }
  369. iniparser_dump_ini(dic, fp);
  370. fclose(fp);
  371. quit:
  372. iniparser_freedict(dic);
  373. return r;
  374. }
  375. #endif
  376. static GlobalDeviceInfo *get_dm(void)
  377. {
  378. return &__globalDeviceManage._globalDevInfo;
  379. }
  380. ////////////////////////////////////////////////////////////
  381. int paras_init(void)
  382. {
  383. GlobalDeviceInfo *info=get_dm();
  384. paras_handle_t *h=&paraHandle;
  385. lock_s_hold(LOCK_ID_PARAS);
  386. ini_load(info);
  387. lock_s_release(LOCK_ID_PARAS);
  388. return 0;
  389. }
  390. int paras_deinit(void)
  391. {
  392. paras_handle_t *h=&paraHandle;
  393. lock_s_hold(LOCK_ID_PARAS);
  394. memset(&paraHandle, 0, sizeof(paraHandle));
  395. lock_s_release(LOCK_ID_PARAS);
  396. return 0;
  397. }
  398. int paras_load(void)
  399. {
  400. int r=0;
  401. GlobalDeviceInfo *info=get_dm();
  402. paras_handle_t *h=&paraHandle;
  403. lock_s_hold(LOCK_ID_PARAS);
  404. r = ini_load(info);
  405. lock_s_release(LOCK_ID_PARAS);
  406. return r;
  407. }
  408. int paras_reset(void)
  409. {
  410. int r=0;
  411. GlobalDeviceInfo *info=get_dm();
  412. paras_handle_t *h=&paraHandle;
  413. lock_s_hold(LOCK_ID_PARAS);
  414. ini_reset();
  415. r = ini_load(info);
  416. lock_s_release(LOCK_ID_PARAS);
  417. return r;
  418. }
  419. int paras_save(void)
  420. {
  421. int r=0;
  422. GlobalDeviceInfo *info=get_dm();
  423. paras_handle_t *h=&paraHandle;
  424. lock_s_hold(LOCK_ID_PARAS);
  425. //r = ini_save(info);
  426. lock_s_release(LOCK_ID_PARAS);
  427. return r;
  428. }
  429. int paras_read(int type, void *data)
  430. {
  431. int r=0;
  432. paras_handle_t *h=&paraHandle;
  433. lock_s_hold(LOCK_ID_PARAS);
  434. lock_s_release(LOCK_ID_PARAS);
  435. return r;
  436. }
  437. int paras_write(int type, void *data)
  438. {
  439. int r=0;
  440. paras_handle_t *h=&paraHandle;
  441. lock_s_hold(LOCK_ID_PARAS);
  442. lock_s_release(LOCK_ID_PARAS);
  443. return r;
  444. }