paras.c 130 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include "sys.h"
  5. #include "file.h"
  6. #include "lock.h"
  7. #include "xlist.h"
  8. #include "paras.h"
  9. #include "cascade.h"
  10. #include "switch_ctrl.h"
  11. #include "dictionary.h"
  12. #include "iniparser.h"
  13. #include "sqlite_handle.h"
  14. //#define READ_INI
  15. #if 1
  16. #define LOGD log_d
  17. #define LOGE log_e
  18. #define LOGW log_w
  19. #else
  20. #define LOGD printf
  21. #define LOGE printf
  22. #define LOGW printf
  23. #endif
  24. enum {
  25. TYPE_INT=0,
  26. TYPE_STR,
  27. TYPE_FLOAT,
  28. };
  29. enum {
  30. PARAS_CHECK=0,
  31. PARAS_READ,
  32. PARAS_WRITE,
  33. PARAS_CREATE,
  34. };
  35. extern GlobalDeviceInfo DFLT_PARAS;
  36. typedef struct {
  37. dictionary *dic;
  38. GlobalDeviceInfo *info;
  39. char path[200];
  40. }paras_handle_t;
  41. static paras_handle_t paraHandle={0};
  42. #if 1
  43. static GlobalDeviceManager *get_dm(void)
  44. {
  45. return &__globalDeviceManage;
  46. }
  47. static int is_power3(void)
  48. {
  49. GlobalDeviceManager *dm=get_dm();
  50. if(dm->_globalDevInfo.product.pwr_type>=SmartPDU_Tree_AC_Tree) {
  51. return 1;
  52. }
  53. return 0;
  54. }
  55. static GlobalDeviceInfo *get_info(void)
  56. {
  57. return &get_dm()->_globalDevInfo;
  58. }
  59. static int feq(double a, double b)
  60. {
  61. return (fabs(a-b)<(1e-6))?1:0;
  62. }
  63. static int str_cnt(char *buf, char *s)
  64. {
  65. int cnt=0;
  66. char *p=buf;
  67. while(1) {
  68. p = strstr(p, s);
  69. if(!p) break;
  70. cnt++;
  71. }
  72. return cnt;
  73. }
  74. static int str_del(char *b, char *s)
  75. {
  76. if(!b || !b[0]) {
  77. return -1;
  78. }
  79. int sl=strlen(s);
  80. char *p1,*p2,*b2=strdup(b);
  81. if(!b2) return -1;
  82. p1=b2;
  83. while(1) {
  84. p2=strstr(p1,s); if(!p2) break;
  85. memcpy(b,p1,p2-p1);
  86. b += p2-p1; p1 = p2+sl;
  87. }
  88. strcpy(b,p1); free(b2);
  89. return 0;
  90. }
  91. static int str_replace(char *b, char *s1, char *s2)
  92. {
  93. if(!b || !b[0] || !s1 || !s1[0] || !s2 || !s2[0]) {
  94. return -1;
  95. }
  96. int l1=strlen(s1),l2=strlen(s2);
  97. if(l1 != l2) {
  98. return -1;
  99. }
  100. char *p=b;
  101. while(1) {
  102. p = strstr(p,s1);
  103. if(!p) break;
  104. memcpy(p, s2, l1);
  105. p += l1;
  106. }
  107. return 0;
  108. }
  109. static int ini_dump(char *path, dictionary *dic)
  110. {
  111. FILE *fp=fopen(path, "a+");
  112. if(!fp) {
  113. return -1;
  114. }
  115. iniparser_dump_ini(dic, fp);
  116. return fclose(fp);
  117. }
  118. static void sec_cpy(char *sec, char *key)
  119. {
  120. while((*key)!=':') *sec++ = *key++;
  121. *sec = 0;
  122. }
  123. static int ini_write(dictionary *dic, char *key, void *val, int len, int type, int str_chk)
  124. {
  125. int r=-1;
  126. char *p,sec[100],tmp[100];
  127. sec_cpy(sec, key);
  128. r = iniparser_set(dic, sec, NULL);
  129. if (r<0) {
  130. LOGE("___ini_rw section %s failed\n", sec);
  131. return -1;
  132. }
  133. if(type==TYPE_INT) {
  134. sprintf(tmp, "%d", *((int*)val)); p = tmp;
  135. }
  136. else if(type==TYPE_STR) {
  137. p = (char*)val;
  138. if(str_chk && p[0]==0) {
  139. return -1;
  140. }
  141. }
  142. else if(type==TYPE_FLOAT) {
  143. sprintf(tmp, "%0.2f", *((float*)val)); p = tmp;
  144. }
  145. else {
  146. return -1;
  147. }
  148. r = iniparser_set(dic, key, p);
  149. if(r<0) {
  150. LOGE("___ini_rw %s failed\n", key);
  151. }
  152. return r;
  153. }
  154. static int ini_read(dictionary *dic, char *key, void *val, int len, int type, int str_chk)
  155. {
  156. int r=0;
  157. if(type==TYPE_INT) {
  158. int t = iniparser_getint(dic, key, -1);
  159. if(t==-1) {
  160. return -1;
  161. }
  162. *(((int*)val)) = t;
  163. }
  164. else if(type==TYPE_STR) {
  165. ((char*)val)[0] = 0;
  166. char *p = (char*)iniparser_getstring(dic, key, NULL);
  167. if(!p) {
  168. return -1;
  169. }
  170. int xlen=strlen(p);
  171. if(str_chk && xlen==0) {
  172. return -1;
  173. }
  174. if(len<=xlen) {
  175. LOGE("___ %s val len %d longer than recv buf len %d\n", key, xlen, len);
  176. return -1;
  177. }
  178. strcpy((char*)val, p);
  179. }
  180. else if(type==TYPE_FLOAT) {
  181. double c=-10000.0;
  182. double f = (float)iniparser_getdouble(dic, key, c);
  183. if(feq(f,c)) {
  184. return -1;
  185. }
  186. *((float*)val) = (float)f;
  187. }
  188. return 0;
  189. }
  190. static int ini_rw(dictionary *dic, char *key, void *val, int len, int type, int io, int str_chk)
  191. {
  192. int r=-1;
  193. if(io==PARAS_READ) {
  194. r = ini_read(dic,key,val,len,type,str_chk);
  195. }
  196. else if(io==PARAS_WRITE) {
  197. r = ini_write(dic,key,val,len,type,str_chk);
  198. }
  199. return r;
  200. }
  201. static int proc_prod(dictionary *dic, int op, ProductInfo_t *prod)
  202. {
  203. int r=0;
  204. char *p=NULL;
  205. char temp[100];
  206. char *token=NULL;
  207. if(op==PARAS_CHECK) {
  208. if(prod->language>=4) {
  209. LOGE("___ check product.language %d is wrong\n", prod->language);
  210. r = -1;
  211. }
  212. if(prod->type>=2) {
  213. LOGE("___ check product.type %d is wrong\n", prod->type);
  214. r = -1;
  215. }
  216. if(prod->pwr_type>SmartPDU_Tree_AC_One_B) {
  217. LOGE("___ check product.pwr_type %d is wrong\n", prod->pwr_type);
  218. r = -1;
  219. }
  220. return r;
  221. }
  222. else if(op==PARAS_WRITE) {
  223. r = proc_prod(dic, PARAS_CHECK, prod);
  224. if(r) {
  225. return -1;
  226. }
  227. }
  228. token = "product:id";
  229. if(op==PARAS_READ) {
  230. r = iniparser_getint(dic, token, -1);
  231. if(r==-1) {
  232. LOGE("___ iniparser_getint %s failed\n", token);
  233. return -1;
  234. } else {
  235. prod->id = r;
  236. }
  237. }
  238. else {
  239. sprintf(temp, "%d", prod->id);
  240. r = iniparser_set(dic, token, temp);
  241. if(r) {
  242. LOGE("___ iniparser_set %s failed\n", token);
  243. return -1;
  244. }
  245. }
  246. /*
  247. token = "product:number";
  248. if(op==PARAS_READ) {
  249. p = (char*)iniparser_getstring(dic, token, NULL);
  250. if(!p) {
  251. LOGE("___ iniparser_getstring %s failed\n", token);
  252. return -1;
  253. } else {
  254. strcpy(prod->number, p);
  255. }
  256. }
  257. else {
  258. r = iniparser_set(dic, token, prod->number);
  259. if(r) {
  260. LOGE("___ iniparser_set %s failed\n", token);
  261. return -1;
  262. }
  263. }
  264. */
  265. token = "product:name";
  266. if(op==PARAS_READ) {
  267. p = (char*)iniparser_getstring(dic, token, NULL);
  268. if(!p) {
  269. LOGE("___ iniparser_getstring %s failed\n", token);
  270. return -1;
  271. } else {
  272. strcpy(prod->name, p);
  273. }
  274. }
  275. else {
  276. r = iniparser_set(dic, token, prod->name);
  277. if(r) {
  278. LOGE("___ iniparser_set %s failed\n", token);
  279. return -1;
  280. }
  281. }
  282. token = "product:type";
  283. if(op==PARAS_READ) {
  284. r = iniparser_getint(dic, token, -1);
  285. if(r==-1) {
  286. LOGE("___ iniparser_getint %s failed\n", token);
  287. return -1;
  288. } else {
  289. prod->type = r;
  290. }
  291. }
  292. else {
  293. sprintf(temp, "%d", prod->type);
  294. r = iniparser_set(dic, token, temp);
  295. if(r) {
  296. LOGE("___ iniparser_set %s failed\n", token);
  297. return -1;
  298. }
  299. }
  300. token = "product:pwrtype";
  301. if(op==PARAS_READ) {
  302. r = iniparser_getint(dic, token, -1);
  303. if(r==-1) {
  304. LOGE("___ iniparser_getint %s failed\n", token);
  305. return -1;
  306. } else {
  307. prod->pwr_type = r;
  308. }
  309. }
  310. else {
  311. sprintf(temp, "%d", prod->pwr_type);
  312. r = iniparser_set(dic, token, temp);
  313. if(r) {
  314. LOGE("___ iniparser_set %s failed\n", token);
  315. return -1;
  316. }
  317. }
  318. #if 0
  319. token = "product:version";
  320. if(op==PARAS_READ) {
  321. p = (char*)iniparser_getstring(dic, token, NULL);
  322. if(!p) {
  323. LOGE("___ iniparser_getstring %s failed\n", token);
  324. return -1;
  325. } else {
  326. strcpy(prod->version, p);
  327. }
  328. }
  329. else {
  330. r = iniparser_set(dic, token, prod->version);
  331. if(r) {
  332. LOGE("___ iniparser_set %s failed\n", token);
  333. return -1;
  334. }
  335. }
  336. #endif
  337. token = "product:language";
  338. if(op==PARAS_READ) {
  339. r = iniparser_getint(dic, token, -1);
  340. if(r==-1) {
  341. LOGE("___ iniparser_getint %s failed\n", token);
  342. return -1;
  343. } else {
  344. prod->language = r;
  345. }
  346. }
  347. else {
  348. sprintf(temp, "%d", prod->language);
  349. r = iniparser_set(dic, token, temp);
  350. if(r) {
  351. LOGE("___ iniparser_set %s failed\n", token);
  352. return -1;
  353. }
  354. }
  355. token = "product:samptime";
  356. if(op==PARAS_READ) {
  357. r = iniparser_getint(dic, token, -1);
  358. if(r==-1) {
  359. LOGE("___ iniparser_getint %s failed\n", token);
  360. return -1;
  361. } else {
  362. prod->samp_time = r;
  363. }
  364. }
  365. else {
  366. sprintf(temp, "%d", prod->samp_time);
  367. r = iniparser_set(dic, token, temp);
  368. if(r) {
  369. LOGE("___ iniparser_set %s failed\n", token);
  370. return -1;
  371. }
  372. }
  373. token = "product:savetime";
  374. if(op==PARAS_READ) {
  375. r = iniparser_getint(dic, token, -1);
  376. if(r==-1) {
  377. LOGE("___ iniparser_getint %s failed\n", token);
  378. return -1;
  379. } else {
  380. prod->save_time = r;
  381. }
  382. }
  383. else {
  384. sprintf(temp, "%d", prod->save_time);
  385. r = iniparser_set(dic, token, temp);
  386. if(r) {
  387. LOGE("___ iniparser_set %s failed\n", token);
  388. return -1;
  389. }
  390. }
  391. token = "product:ph_group";
  392. if(op==PARAS_READ) {
  393. r = iniparser_getint(dic, token, -1);
  394. if(r==-1) {
  395. LOGE("___ iniparser_getint %s failed\n", token);
  396. return -1;
  397. } else {
  398. prod->ph_group = r;
  399. }
  400. }
  401. else {
  402. sprintf(temp, "%d", prod->ph_group);
  403. r = iniparser_set(dic, token, temp);
  404. if(r) {
  405. LOGE("___ iniparser_set %s failed\n", token);
  406. return -1;
  407. }
  408. }
  409. token = "product:ch_delay";
  410. if(op==PARAS_READ) {
  411. r = iniparser_getint(dic, token, -1);
  412. if(r==-1) {
  413. LOGE("___ iniparser_getint %s failed\n", token);
  414. return -1;
  415. } else {
  416. prod->ch_delay = r;
  417. }
  418. }
  419. else {
  420. sprintf(temp, "%d", prod->ch_delay);
  421. r = iniparser_set(dic, token, temp);
  422. if(r) {
  423. LOGE("___ iniparser_set %s failed\n", token);
  424. return -1;
  425. }
  426. }
  427. r = 0;
  428. if(op==PARAS_READ) {
  429. prod->count = 0;
  430. prod->status[0] = 0;
  431. r = proc_prod(dic, PARAS_CHECK, prod);
  432. }
  433. return r;
  434. }
  435. static int proc_modbus(dictionary *dic, int op, ModbusInfo_t *mb)
  436. {
  437. int r=0;
  438. char temp[100];
  439. char *p,*token=NULL;
  440. if(op==PARAS_CHECK) {
  441. if(mb->mode!=0 && mb->mode!=1) {
  442. LOGE("___ check modbus, mode %d is invalid\n", mb->mode);
  443. r = -1;
  444. }
  445. if(mb->mode==1 && (mb->addr==0 || mb->addr>CASCADE_MAX)) { //slave
  446. LOGE("___ check modbus, slave addr %d is invalid\n", mb->addr);
  447. r = -1;
  448. }
  449. return r;
  450. }
  451. else if (op==PARAS_WRITE) {
  452. r = proc_modbus(dic, PARAS_CHECK, mb);
  453. if(r) {
  454. return -1;
  455. }
  456. }
  457. token = "modbus:mode";
  458. if(op==PARAS_READ) {
  459. r = iniparser_getint(dic, token, -1);
  460. if(r==-1) {
  461. LOGE("___ iniparser_getint %s failed\n", token);
  462. return -1;
  463. } else {
  464. mb->mode = r;
  465. }
  466. }
  467. else {
  468. sprintf(temp, "%d", mb->mode);
  469. r = iniparser_set(dic, token, temp);
  470. if(r) {
  471. LOGE("___ iniparser_set %s failed\n", token);
  472. return -1;
  473. }
  474. }
  475. token = "modbus:address";
  476. if(op==PARAS_READ) {
  477. r = iniparser_getint(dic, token, -1);
  478. if(r==-1) {
  479. LOGE("___ iniparser_getint %s failed\n", token);
  480. return -1;
  481. } else {
  482. mb->addr = r;
  483. }
  484. }
  485. else {
  486. sprintf(temp, "%d", mb->addr);
  487. r = iniparser_set(dic, token, temp);
  488. if(r) {
  489. LOGE("___ iniparser_set %s failed\n", token);
  490. return -1;
  491. }
  492. }
  493. token = "modbus:baudrate";
  494. if(op==PARAS_READ) {
  495. r = iniparser_getint(dic, token, -1);
  496. if(r==-1) {
  497. LOGE("___ iniparser_getint %s failed\n", token);
  498. return -1;
  499. } else {
  500. mb->baudrate = r;
  501. }
  502. }
  503. else {
  504. sprintf(temp, "%d", mb->baudrate);
  505. r = iniparser_set(dic, token, temp);
  506. if(r) {
  507. LOGE("___ iniparser_set %s failed\n", token);
  508. return -1;
  509. }
  510. }
  511. r = 0;
  512. if(op==PARAS_READ) {
  513. r = proc_modbus(dic, PARAS_CHECK, mb);
  514. }
  515. return r;
  516. }
  517. static int proc_ptotal(dictionary *dic, int op, PowerTotal_t *ptotal)
  518. {
  519. int r=0;
  520. char temp[100];
  521. char *p,*token=NULL;
  522. if(op==PARAS_CHECK) {
  523. if(ptotal->voltage<=0) {
  524. LOGE("___ check ptotal, voltage is invalid, must greater than 0\n");
  525. r = -1;
  526. }
  527. if(ptotal->current<=0) {
  528. LOGE("___ check ptotal, current is invalid, must greater than 0\n");
  529. r = -1;
  530. }
  531. if(ptotal->power<=0) {
  532. LOGE("___ check ptotal, power is invalid, must greater than 0\n");
  533. r = -1;
  534. }
  535. if(ptotal->brdMax<=0) {
  536. LOGE("___ check ptotal, brdMax is invalid, must greater than 0\n");
  537. r = -1;
  538. }
  539. return r;
  540. }
  541. else if (op==PARAS_WRITE) {
  542. r = proc_ptotal(dic, PARAS_CHECK, ptotal);
  543. if(r) {
  544. return -1;
  545. }
  546. }
  547. token = "ptotal:voltage";
  548. if(op==PARAS_READ) {
  549. r = iniparser_getint(dic, token, -1);
  550. if(r==-1) {
  551. LOGE("___ iniparser_getint %s failed\n", token);
  552. return -1;
  553. } else {
  554. ptotal->voltage = r;
  555. }
  556. }
  557. else {
  558. sprintf(temp, "%d", ptotal->voltage);
  559. r = iniparser_set(dic, token, temp);
  560. if(r) {
  561. LOGE("___ iniparser_set %s failed\n", token);
  562. return -1;
  563. }
  564. }
  565. token = "ptotal:current";
  566. if(op==PARAS_READ) {
  567. r = iniparser_getint(dic, token, -1);
  568. if(r==-1) {
  569. LOGE("___ iniparser_getint %s failed\n", token);
  570. return -1;
  571. } else {
  572. ptotal->current = r;
  573. }
  574. }
  575. else {
  576. sprintf(temp, "%d", ptotal->current);
  577. r = iniparser_set(dic, token, temp);
  578. if(r) {
  579. LOGE("___ iniparser_set %s failed\n", token);
  580. return -1;
  581. }
  582. }
  583. token = "ptotal:power";
  584. if(op==PARAS_READ) {
  585. r = iniparser_getint(dic, token, -1);
  586. if(r==-1) {
  587. LOGE("___ iniparser_getint %s failed\n", token);
  588. return -1;
  589. } else {
  590. ptotal->power = r;
  591. }
  592. }
  593. else {
  594. sprintf(temp, "%d", ptotal->power);
  595. r = iniparser_set(dic, token, temp);
  596. if(r) {
  597. LOGE("___ iniparser_set %s failed\n", token);
  598. return -1;
  599. }
  600. }
  601. token = "ptotal:brd_max";
  602. if(op==PARAS_READ) {
  603. r = iniparser_getint(dic, token, -1);
  604. if(r==-1) {
  605. LOGE("___ iniparser_getint %s failed\n", token);
  606. return -1;
  607. } else {
  608. ptotal->brdMax = r;
  609. }
  610. }
  611. else {
  612. sprintf(temp, "%d", ptotal->brdMax);
  613. r = iniparser_set(dic, token, temp);
  614. if(r) {
  615. LOGE("___ iniparser_set %s failed\n", token);
  616. return -1;
  617. }
  618. }
  619. r = 0;
  620. if(op==PARAS_READ) {
  621. r = proc_ptotal(dic, PARAS_CHECK, ptotal);
  622. }
  623. return r;
  624. }
  625. static int proc_webcfg(dictionary *dic, int op, WebcfgInfo_t *webcfg)
  626. {
  627. int r=0;
  628. char temp[100];
  629. char *p,*token=NULL;
  630. if(op==PARAS_CHECK) {
  631. if(webcfg->monway<0 || webcfg->monway>3) {
  632. LOGE("___ check webcfg, mon_way is invalid, correct value is 1/2/3\n");
  633. r = -1;
  634. }
  635. if(webcfg->netsw!=0 && webcfg->netsw!=1) {
  636. LOGE("___ check webcfg, netsw is invalid, correct value is 0/1\n");
  637. r = -1;
  638. }
  639. if(webcfg->nwire!=0 && webcfg->nwire!=1) {
  640. LOGE("___ check webcfg, nwire is invalid, correct value is 0/1\n");
  641. r = -1;
  642. }
  643. if(webcfg->ipv4!=0 && webcfg->ipv4!=1) {
  644. LOGE("___ check webcfg, ipv4_use is invalid, correct value is 0/1\n");
  645. r = -1;
  646. }
  647. if(webcfg->ipv6!=0 && webcfg->ipv6!=1) {
  648. LOGE("___ check webcfg, ipv6_use is invalid, correct value is 0/1\n");
  649. r = -1;
  650. }
  651. return r;
  652. }
  653. else if (op==PARAS_CREATE) {
  654. }
  655. else if (op==PARAS_WRITE) {
  656. r = proc_webcfg(dic, PARAS_CHECK, webcfg);
  657. if(r) {
  658. return -1;
  659. }
  660. }
  661. token = "webcfg:monway";
  662. if(op==PARAS_READ) {
  663. r = iniparser_getint(dic, token, -1);
  664. if(r==-1) {
  665. LOGE("___ iniparser_getint %s failed\n", token);
  666. return -1;
  667. } else {
  668. webcfg->monway = r;
  669. }
  670. }
  671. else {
  672. sprintf(temp, "%d", webcfg->monway);
  673. r = iniparser_set(dic, token, temp);
  674. if(r) {
  675. LOGE("___ iniparser_set %s failed\n", token);
  676. return -1;
  677. }
  678. }
  679. token = "webcfg:netsw";
  680. if(op==PARAS_READ) {
  681. r = iniparser_getint(dic, token, -1);
  682. if(r==-1) {
  683. LOGE("___ iniparser_getint %s failed\n", token);
  684. return -1;
  685. } else {
  686. webcfg->netsw = r;
  687. }
  688. }
  689. else {
  690. sprintf(temp, "%d", webcfg->netsw);
  691. r = iniparser_set(dic, token, temp);
  692. if(r) {
  693. LOGE("___ iniparser_set %s failed\n", token);
  694. return -1;
  695. }
  696. }
  697. token = "webcfg:nwire";
  698. if(op==PARAS_READ) {
  699. r = iniparser_getint(dic, token, -1);
  700. if(r==-1) {
  701. LOGE("___ iniparser_getint %s failed\n", token);
  702. return -1;
  703. } else {
  704. webcfg->nwire = r;
  705. }
  706. }
  707. else {
  708. sprintf(temp, "%d", webcfg->nwire);
  709. r = iniparser_set(dic, token, temp);
  710. if(r) {
  711. LOGE("___ iniparser_set %s failed\n", token);
  712. return -1;
  713. }
  714. }
  715. token = "webcfg:ipv4";
  716. if(op==PARAS_READ) {
  717. r = iniparser_getint(dic, token, -1);
  718. if(r==-1) {
  719. LOGE("___ iniparser_getint %s failed\n", token);
  720. return -1;
  721. } else {
  722. webcfg->ipv4 = r;
  723. }
  724. }
  725. else {
  726. sprintf(temp, "%d", webcfg->ipv4);
  727. r = iniparser_set(dic, token, temp);
  728. if(r) {
  729. LOGE("___ iniparser_set %s failed\n", token);
  730. return -1;
  731. }
  732. }
  733. token = "webcfg:ipv6";
  734. if(op==PARAS_READ) {
  735. r = iniparser_getint(dic, token, -1);
  736. if(r==-1) {
  737. LOGE("___ iniparser_getint %s failed\n", token);
  738. return -1;
  739. } else {
  740. webcfg->ipv6 = r;
  741. }
  742. }
  743. else {
  744. sprintf(temp, "%d", webcfg->ipv6);
  745. r = iniparser_set(dic, token, temp);
  746. if(r) {
  747. LOGE("___ iniparser_set %s failed\n", token);
  748. return -1;
  749. }
  750. }
  751. r = 0;
  752. if(op==PARAS_READ) {
  753. r = proc_webcfg(dic, PARAS_CHECK, webcfg);
  754. }
  755. return r;
  756. }
  757. static int proc_misc(dictionary *dic, int op, MiscInfo_t *misc)
  758. {
  759. int r=0;
  760. char temp[100];
  761. char *p,*token=NULL;
  762. if(op==PARAS_CHECK) {
  763. if(misc->watchdog<0 || misc->watchdog>1) {
  764. LOGE("___ check misc, watchdog is invalid, correct value is 0/1\n");
  765. r = -1;
  766. }
  767. if(misc->flip_time<=0) {
  768. LOGE("___ check misc, flip_time is invalid, must greater than 0\n");
  769. r = -1;
  770. }
  771. }
  772. else if (op==PARAS_CREATE) {
  773. }
  774. else if (op==PARAS_WRITE) {
  775. r = proc_misc(dic, PARAS_CHECK, misc);
  776. if(r) {
  777. return -1;
  778. }
  779. }
  780. token = "misc:watchdog";
  781. if(op==PARAS_READ) {
  782. r = iniparser_getint(dic, token, -1);
  783. if(r==-1) {
  784. LOGE("___ iniparser_getint %s failed\n", token);
  785. return -1;
  786. } else {
  787. misc->watchdog = r;
  788. }
  789. }
  790. else {
  791. sprintf(temp, "%d", misc->watchdog);
  792. r = iniparser_set(dic, token, temp);
  793. if(r) {
  794. LOGE("___ iniparser_set %s failed\n", token);
  795. return -1;
  796. }
  797. }
  798. token = "misc:fliptime";
  799. if(op==PARAS_READ) {
  800. r = iniparser_getint(dic, token, -1);
  801. if(r==-1) {
  802. LOGE("___ iniparser_getint %s failed\n", token);
  803. return -1;
  804. } else {
  805. misc->flip_time = r;
  806. }
  807. }
  808. else {
  809. sprintf(temp, "%d", misc->flip_time);
  810. r = iniparser_set(dic, token, temp);
  811. if(r) {
  812. LOGE("___ iniparser_set %s failed\n", token);
  813. return -1;
  814. }
  815. }
  816. r = 0;
  817. if(op==PARAS_READ) {
  818. r = proc_misc(dic, PARAS_CHECK, misc);
  819. }
  820. return r;
  821. }
  822. static int proc_ntp(char *path, int op, NTPManager *ntp)
  823. {
  824. int r=0;
  825. char temp[100];
  826. char *p,*token=NULL;
  827. FILE *fp=NULL;
  828. dictionary *dic=NULL;
  829. GlobalDeviceManager *dm=get_dm();
  830. NTPManager ntp2,*pntp=ntp;
  831. switch(op) {
  832. case PARAS_CHECK:
  833. {
  834. if(pntp->mode<0 || pntp->mode>1) {
  835. LOGE("___ check ntp, mode is wrong, correct value is 0/1\n");
  836. r = -1;
  837. }
  838. if(!pntp->ntpName[0]) {
  839. LOGE("___ check ntp, name is null\n");
  840. r = -1;
  841. }
  842. if(!pntp->ntpaddress[0]) {
  843. LOGE("___ check ntp, addr is null\n");
  844. r = -1;
  845. }
  846. if(pntp->tzone>12 || pntp->tzone<-12) {
  847. LOGE("___ check ntp, tzong is wrong, correct range is -12~12\n");
  848. r = -1;
  849. }
  850. return r;
  851. }
  852. break;
  853. case PARAS_CREATE:
  854. {
  855. FILE *fp = fopen(path, "a+");
  856. if(!fp) {
  857. LOGE("___ %s open failed\n", path);
  858. return -1;
  859. }
  860. fprintf(fp, "[ntp]\n");
  861. fprintf(fp, "mode = \"%d\"\n", pntp->mode);
  862. fprintf(fp, "name = \"%s\"\n", pntp->ntpName);
  863. fprintf(fp, "address = \"%s\"\n", pntp->ntpaddress);
  864. fprintf(fp, "port = \"%d\"\n", pntp->port);
  865. fprintf(fp, "tzone = \"%d\"\n", pntp->tzone);
  866. fprintf(fp, "\n");
  867. fclose(fp);
  868. return 0;
  869. }
  870. break;
  871. case PARAS_READ:
  872. {
  873. pntp = &ntp2;
  874. dic = iniparser_load(path); if(!dic) return -1;
  875. memset(pntp, 0, sizeof(NTPManager));
  876. r = ini_rw(dic, "ntp:mode", &pntp->mode, sizeof(pntp->mode), TYPE_INT, op, 1); if(r) goto quit;
  877. r = ini_rw(dic, "ntp:name", pntp->ntpName, sizeof(pntp->ntpName), TYPE_STR, op, 1); if(r) goto quit;
  878. r = ini_rw(dic, "ntp:address", pntp->ntpaddress, sizeof(pntp->ntpaddress), TYPE_STR, op, 1); if(r) goto quit;
  879. r = ini_rw(dic, "ntp:port", &pntp->port, sizeof(pntp->port), TYPE_INT, op, 1); if(r) goto quit;
  880. r = ini_rw(dic, "ntp:tzone", &pntp->tzone, sizeof(pntp->tzone), TYPE_INT, op, 1); if(r) goto quit;
  881. r = ini_rw(dic, "ntp:time", pntp->time, sizeof(pntp->time), TYPE_STR, op, 1); if(r) goto quit;
  882. pntp->product_id = 0;
  883. r = proc_ntp(path, PARAS_CHECK, pntp); if(r) goto quit;
  884. //r = dev_clear_table(dm->db, TAB_ID_NTP); if(r) goto quit;
  885. r = dev_update_ntp_info(dm->db, 0, pntp);
  886. }
  887. break;
  888. case PARAS_WRITE:
  889. {
  890. pntp = &ntp2;
  891. r = dev_get_ntp_info(dm->db, pntp); if(r) return -1;
  892. r = proc_ntp(path, PARAS_CHECK, pntp); if(r) return -1;
  893. dic = dictionary_new(0); if(!dic) return -1;
  894. r = ini_rw(dic, "ntp:mode", &pntp->mode, sizeof(pntp->mode), TYPE_INT, op, 1); if(r) goto quit;
  895. r = ini_rw(dic, "ntp:name", pntp->ntpName, sizeof(pntp->ntpName), TYPE_STR, op, 1); if(r) goto quit;
  896. r = ini_rw(dic, "ntp:address", pntp->ntpaddress, sizeof(pntp->ntpaddress), TYPE_STR, op, 1); if(r) goto quit;
  897. r = ini_rw(dic, "ntp:port", &pntp->port, sizeof(pntp->port), TYPE_INT, op, 1); if(r) goto quit;
  898. r = ini_rw(dic, "ntp:tzone", &pntp->tzone, sizeof(pntp->tzone), TYPE_INT, op, 1); if(r) goto quit;
  899. r = ini_rw(dic, "ntp:time", pntp->time, sizeof(pntp->time), TYPE_STR, op, 1); if(r) goto quit;
  900. r = ini_dump(path, dic);
  901. }
  902. break;
  903. default:
  904. return -1;
  905. }
  906. quit:
  907. iniparser_freedict(dic);
  908. return r;
  909. }
  910. static int proc_snmp(char *path, int op, SNMPManager *snmp)
  911. {
  912. int r=0,len=0;
  913. char temp[100];
  914. char *p,*token=NULL;
  915. dictionary *dic=NULL;
  916. SNMPManager snmp2,*psnmp=snmp;
  917. GlobalDeviceManager *dm=get_dm();
  918. switch(op) {
  919. case PARAS_CHECK:
  920. {
  921. if(psnmp->mode<0 || psnmp->mode>1) {
  922. LOGE("___ check snmp, mode %d is wrong, correct value is 0/1\n", psnmp->mode);
  923. r = -1;
  924. }
  925. if(psnmp->mode==1) {
  926. if(!psnmp->public[0]) {
  927. LOGE("___ check snmp, no public input\n");
  928. r = -1;
  929. }
  930. if(psnmp->trapmode<0 || psnmp->trapmode>1) {
  931. LOGE("___ check snmp, trapmode %d is wrong, correct value is 0/1\n", psnmp->trapmode);
  932. r = -1;
  933. }
  934. if(psnmp->version>=1 && sys_ip_check(psnmp->nmsIP)==IP_ERR) {
  935. LOGE("___ check snmp, nms ip is invalid\n");
  936. r = -1;
  937. }
  938. if(psnmp->version<0 || psnmp->version>2) {
  939. LOGE("___ check snmp, version %d is wrong, correct value is 0/1/2\n");
  940. r = -1;
  941. }
  942. if(psnmp->version==2) {
  943. if(!psnmp->crypt.user[0]) {
  944. LOGE("___ check snmp, crypt user is null\n");
  945. r = -1;
  946. }
  947. len = strlen(psnmp->crypt.user);
  948. if(len<8 || len>32) {
  949. LOGE("___ check snmp, crypt user length %d is wrong, correct range is 8~32 characters(english)\n", len);
  950. r = -1;
  951. }
  952. if(!psnmp->crypt.auth.alg[0]) {
  953. LOGE("___ check snmp, crypt auth algorithm is null\n");
  954. r = -1;
  955. }
  956. if(strcmp(psnmp->crypt.auth.alg, "MD5") && strcmp(psnmp->crypt.auth.alg, "SHA") && strcmp(psnmp->crypt.auth.alg, "SHA-224") &&
  957. strcmp(psnmp->crypt.auth.alg, "SHA-256") && strcmp(psnmp->crypt.auth.alg, "SHA-384") && strcmp(psnmp->crypt.auth.alg, "SHA-512")) {
  958. LOGE("___ check snmp, crypt auth algorithm %s is wrong, correct value is: MD5/SHA/SHA-224/SHA-256/SHA-384/SHA-512\n", psnmp->crypt.auth.alg);
  959. r = -1;
  960. }
  961. if(!psnmp->crypt.auth.passwd[0]) {
  962. LOGE("___ check snmp, crypt auth password is null\n");
  963. r = -1;
  964. }
  965. len = strlen(psnmp->crypt.auth.passwd);
  966. if(len<8 || len>32) {
  967. LOGE("___ check snmp, crypt auth password length %d is wrong, correct range is 8~32 characters(english)\n", len);
  968. r = -1;
  969. }
  970. if(!psnmp->crypt.priv.alg[0]) {
  971. LOGE("___ check snmp, crypt priv algorithm is null\n");
  972. r = -1;
  973. }
  974. if(strcmp(psnmp->crypt.priv.alg, "DES") && strcmp(psnmp->crypt.priv.alg, "AES")) {
  975. LOGE("___ check snmp, crypt priv algorithm %s is wrong, correct value is: 0/DES/AES\n", psnmp->crypt.priv.alg);
  976. r = -1;
  977. }
  978. if(!psnmp->crypt.priv.passwd[0]) {
  979. LOGE("___ check snmp, crypt priv password is null\n");
  980. r = -1;
  981. }
  982. len = strlen(psnmp->crypt.priv.passwd);
  983. if(len<8 || len>32) {
  984. LOGE("___ check snmp, crypt priv password length %d is wrong, correct range is 8~32 characters(english)\n", len);
  985. r = -1;
  986. }
  987. }
  988. }
  989. return r;
  990. }
  991. break;
  992. case PARAS_CREATE:
  993. {
  994. FILE *fp = fopen(path, "a+");
  995. if(!fp) {
  996. LOGE("___ %s open failed\n", path);
  997. return -1;
  998. }
  999. fprintf(fp, "[snmp]\n");
  1000. fprintf(fp, "mode = \"%d\"\n", snmp->mode);
  1001. fprintf(fp, "version = \"%d\"\n", snmp->version+1);
  1002. fprintf(fp, "public = \"%s\"\n", snmp->public);
  1003. fprintf(fp, "trap_mode = \"%d\"\n", snmp->trapmode);
  1004. fprintf(fp, "nms_ip = \"%s\"\n", snmp->nmsIP);
  1005. fprintf(fp, "crypt.user = \"%s\"\n", snmp->crypt.user);
  1006. fprintf(fp, "crypt.auth.proto = \"%s\"\n", snmp->crypt.auth.alg);
  1007. fprintf(fp, "crypt.auth.password = \"%s\"\n", snmp->crypt.auth.passwd);
  1008. fprintf(fp, "crypt.priv.proto = \"%s\"\n", snmp->crypt.priv.alg);
  1009. fprintf(fp, "crypt.priv.password = \"%s\"\n", snmp->crypt.priv.passwd);
  1010. fprintf(fp, "nms_ip = \"%s\"\n", snmp->nmsIP);
  1011. fprintf(fp, "\n");
  1012. fclose(fp);
  1013. return 0;
  1014. }
  1015. break;
  1016. case PARAS_READ:
  1017. {
  1018. char ver[32];
  1019. psnmp = &snmp2;
  1020. dic = iniparser_load(path); if(!dic) return -1;
  1021. memset(psnmp, 0, sizeof(SNMPManager));
  1022. r = ini_rw(dic, "snmp:mode", &psnmp->mode, sizeof(psnmp->mode), TYPE_INT, op, 1); if(r) goto quit;
  1023. r = ini_rw(dic, "snmp:public", psnmp->public, sizeof(psnmp->public), TYPE_STR, op, 1); if(r) goto quit;
  1024. r = ini_rw(dic, "snmp:version", ver, sizeof(ver), TYPE_STR, op, 1); if(r) goto quit;
  1025. if(strcmp(ver, "V1")==0) psnmp->version = 0;
  1026. else if(strcmp(ver, "V2c")==0) psnmp->version = 1;
  1027. else if(strcmp(ver, "V3")==0) psnmp->version = 2;
  1028. else {r=-1; goto quit;}
  1029. r = ini_rw(dic, "snmp:trap_mode", &psnmp->trapmode, sizeof(ver), TYPE_INT, op, 1); if(r) goto quit;
  1030. if(psnmp->version>=1) {
  1031. r = ini_rw(dic, "snmp:nms_ip", psnmp->nmsIP, sizeof(ver), TYPE_STR, op, 1); if(r) goto quit;
  1032. }
  1033. if(psnmp->version==2) {
  1034. r = ini_rw(dic, "snmp:crypt.user", psnmp->crypt.user, sizeof(psnmp->crypt.user), TYPE_STR, op, 1); if(r) goto quit;
  1035. r = ini_rw(dic, "snmp:crypt.auth.proto", psnmp->crypt.auth.alg, sizeof(psnmp->crypt.auth.alg), TYPE_STR, op, 1); if(r) goto quit;
  1036. r = ini_rw(dic, "snmp:crypt.auth.password", psnmp->crypt.auth.passwd, sizeof(psnmp->crypt.auth.passwd), TYPE_STR, op, 1); if(r) goto quit;
  1037. r = ini_rw(dic, "snmp:crypt.priv.proto", psnmp->crypt.priv.alg, sizeof(psnmp->crypt.priv.alg), TYPE_STR, op, 1); if(r) goto quit;
  1038. if(strcmp(psnmp->crypt.priv.alg, "NO")==0) {
  1039. strcpy(psnmp->crypt.priv.alg, "0");
  1040. }
  1041. r = ini_rw(dic, "snmp:crypt.priv.password", psnmp->crypt.priv.passwd, sizeof(psnmp->crypt.priv.passwd), TYPE_STR, op, 1); if(r) goto quit;
  1042. }
  1043. r = proc_snmp(path, PARAS_CHECK, psnmp);
  1044. if(r==0) {
  1045. //r = dev_clear_table(dm->db, TAB_ID_SNMP); if(r) goto quit;
  1046. r = dev_update_snmp_info(dm->db, 0, psnmp); if(r) goto quit;
  1047. extern int snmp_config(SNMPManager *m, int quit);
  1048. snmp_config(psnmp, 0);
  1049. }
  1050. }
  1051. break;
  1052. case PARAS_WRITE:
  1053. {
  1054. char ver[32];
  1055. psnmp = &snmp2;
  1056. r = dev_get_snmp_info(dm->db, psnmp); if(r) return -1;
  1057. r = proc_snmp(path, PARAS_CHECK, psnmp); if(r) return -1;
  1058. dic = dictionary_new(0); if(r) return -1;
  1059. r = ini_rw(dic, "snmp:mode", &psnmp->mode, sizeof(psnmp->mode), TYPE_INT, op, 1); if(r) goto quit;
  1060. r = ini_rw(dic, "snmp:public", psnmp->public, sizeof(psnmp->public), TYPE_STR, op, 1); if(r) goto quit;
  1061. if(psnmp->version==0) strcpy(ver, "V1");
  1062. else if(psnmp->version==1) strcpy(ver, "V2c");
  1063. else if(psnmp->version==2) strcpy(ver, "V3");
  1064. r = ini_rw(dic, "snmp:version", ver, sizeof(ver), TYPE_STR, op, 1); if(r) goto quit;
  1065. r = ini_rw(dic, "snmp:trap_mode", &psnmp->trapmode, sizeof(ver), TYPE_INT, op, 1); if(r) goto quit;
  1066. r = ini_rw(dic, "snmp:nms_ip", psnmp->nmsIP, sizeof(ver), TYPE_STR, op, 1); if(r) goto quit;
  1067. if(psnmp->version==2) {
  1068. r = ini_rw(dic, "snmp:crypt.user", psnmp->crypt.user, sizeof(psnmp->crypt.user), TYPE_STR, op, 1); if(r) goto quit;
  1069. r = ini_rw(dic, "snmp:crypt.auth.proto", psnmp->crypt.auth.alg, sizeof(psnmp->crypt.auth.alg), TYPE_STR, op, 1); if(r) goto quit;
  1070. r = ini_rw(dic, "snmp:crypt.auth.password", psnmp->crypt.auth.passwd, sizeof(psnmp->crypt.auth.passwd), TYPE_STR, op, 1); if(r) goto quit;
  1071. if(strcmp(psnmp->crypt.priv.alg, "0")==0) {
  1072. strcpy(psnmp->crypt.priv.alg, "NO");
  1073. }
  1074. r = ini_rw(dic, "snmp:crypt.priv.proto", psnmp->crypt.priv.alg, sizeof(psnmp->crypt.priv.alg), TYPE_STR, op, 1); if(r) goto quit;
  1075. r = ini_rw(dic, "snmp:crypt.priv.password", psnmp->crypt.priv.passwd, sizeof(psnmp->crypt.priv.passwd), TYPE_STR, op, 1); if(r) goto quit;
  1076. }
  1077. r = ini_dump(path, dic);
  1078. }
  1079. break;
  1080. default:
  1081. return -1;
  1082. }
  1083. quit:
  1084. iniparser_freedict(dic);
  1085. return r;
  1086. }
  1087. static int proc_mqtt(char *path, int op, mqtt_info_t *mqtt)
  1088. {
  1089. char *p;
  1090. int i,j=0,r=0;
  1091. char temp[100],token[9000];
  1092. mqtt_server_t *ser=NULL;
  1093. dictionary *dic=NULL;
  1094. GlobalDeviceManager *dm=get_dm();
  1095. mqtt_info_t mqtt2,*pmqtt=mqtt;
  1096. switch(op) {
  1097. case PARAS_CHECK:
  1098. {
  1099. for(i=0; i<MQTT_SER_MAX; i++) {
  1100. ser = &pmqtt->ser[i];
  1101. if(ser->mode<0 || ser->mode>1) {
  1102. LOGE("___ check mqtt[%d], mode %d is invalid, correct is 0/1\n", i,ser->mode);
  1103. r = -1;
  1104. }
  1105. if(ser->mode==1) {
  1106. if(!ser->name[0]) {
  1107. LOGE("___ check mqtt[%d], name %d is null\n", i);
  1108. r = -1;
  1109. }
  1110. if(!ser->user[0]) {
  1111. LOGE("___ check mqtt[%d], user is null\n", i);
  1112. r = -1;
  1113. }
  1114. if(!ser->password[0]) {
  1115. LOGE("___ check mqtt[%d], password is null\n", i);
  1116. r = -1;
  1117. }
  1118. if(!ser->cid[0]) {
  1119. LOGE("___ check mqtt[%d], cid is null\n", i);
  1120. r = -1;
  1121. }
  1122. if(!ser->port[0]) {
  1123. LOGE("___ check mqtt[%d], port is null\n", i);
  1124. r = -1;
  1125. }
  1126. if(ser->id!=-1 && ser->id != i) {
  1127. LOGE("___ check mqtt[%d], id %d is mismatch the index\n", i, ser->id);
  1128. r = -1;
  1129. }
  1130. if(!ser->server[0]) {
  1131. LOGE("___ check mqtt[%d], server is null\n", i);
  1132. r = -1;
  1133. }
  1134. }
  1135. if(r) {
  1136. break;
  1137. }
  1138. }
  1139. return r;
  1140. }
  1141. break;
  1142. case PARAS_CREATE:
  1143. {
  1144. FILE *fp = fopen(path, "a+");
  1145. if(!fp) {
  1146. LOGE("___ %s open failed\n", path);
  1147. return -1;
  1148. }
  1149. fprintf(fp, "[mqtt]\n");
  1150. for(i=0; i<MQTT_SER_MAX; i++) {
  1151. ser = &pmqtt->ser[i];
  1152. if(ser->id>=0) {
  1153. fprintf(fp, "broker%d.plat = \"%d\"\n", i+1,ser->plat);
  1154. fprintf(fp, "broker%d.mode = \"%d\"\n", i+1,ser->mode);
  1155. //fprintf(fp, "broker%d.proto = \"%s\"\n", i+1,ser->proto);
  1156. fprintf(fp, "broker%d.name = \"%s\"\n", i+1,ser->name);
  1157. fprintf(fp, "broker%d.server = \"%s\"\n", i+1,ser->server);
  1158. fprintf(fp, "broker%d.port = \"%s\"\n", i+1,ser->port);
  1159. fprintf(fp, "broker%d.client_id = \"%s\"\n", i+1,ser->cid);
  1160. fprintf(fp, "broker%d.user = \"%s\"\n", i+1,ser->user);
  1161. fprintf(fp, "broker%d.password = \"%s\"\n", i+1,ser->password);
  1162. fprintf(fp, "broker%d.cert = \"%s\"\n", i+1,ser->cert);
  1163. fprintf(fp, "\n");
  1164. }
  1165. }
  1166. fclose(fp);
  1167. return 0;
  1168. }
  1169. break;
  1170. case PARAS_READ:
  1171. {
  1172. pmqtt = &mqtt2;
  1173. dic = iniparser_load(path); if(!dic) return -1;
  1174. memset(pmqtt, 0, sizeof(mqtt_info_t));
  1175. for(i=0; i<MQTT_SER_MAX; i++) {
  1176. ser = &pmqtt->ser[j];
  1177. ser->id = -1;
  1178. sprintf(token, "mqtt:broker%d.plat", i+1);
  1179. r = ini_rw(dic, token, &ser->plat, sizeof(ser->plat), TYPE_INT, op, 1); if(r) break;
  1180. sprintf(token, "mqtt:broker%d.mode", i+1);
  1181. r = ini_rw(dic, token, &ser->mode, sizeof(ser->mode), TYPE_INT, op, 1); if(r) break;
  1182. #if 0
  1183. sprintf(token, "mqtt:broker%d.proto", i+1);
  1184. r = ini_rw(dic, token, ser->proto, TYPE_STR, op, 1); if(r) break;
  1185. #endif
  1186. sprintf(token, "mqtt:broker%d.name", i+1);
  1187. r = ini_rw(dic, token, ser->name, sizeof(ser->name), TYPE_STR, op, 1); if(r) break;
  1188. sprintf(token, "mqtt:broker%d.server", i+1);
  1189. r = ini_rw(dic, token, ser->server, sizeof(ser->server), TYPE_STR, op, 1); if(r) break;
  1190. sprintf(token, "mqtt:broker%d.port", i+1);
  1191. r = ini_rw(dic, token, ser->port, sizeof(ser->port), TYPE_STR, op, 1); if(r) break;
  1192. sprintf(token, "mqtt:broker%d.client_id", i+1);
  1193. r = ini_rw(dic, token, ser->cid, sizeof(ser->cid), TYPE_STR, op, 1); if(r) break;
  1194. sprintf(token, "mqtt:broker%d.user", i+1);
  1195. r = ini_rw(dic, token, ser->user, sizeof(ser->user), TYPE_STR, op, 1); if(r) break;
  1196. sprintf(token, "mqtt:broker%d.password", i+1);
  1197. r = ini_rw(dic, token, ser->password, sizeof(ser->password), TYPE_STR, op, 1); if(r) break;
  1198. sprintf(token, "mqtt:broker%d.cert", i+1);
  1199. r = ini_rw(dic, token, ser->cert, sizeof(ser->cert), TYPE_STR, op, 0); if(r) break;
  1200. str_replace(ser->cert,";;", "\r\n");
  1201. ser->id = j;
  1202. j++;
  1203. }
  1204. r = proc_mqtt(path, PARAS_CHECK, pmqtt); if(r) goto quit;
  1205. r = dev_clear_table(dm->db, TAB_ID_MQTT); if(r) goto quit;
  1206. r = dev_mqtt_update_info(dm->db, pmqtt);
  1207. }
  1208. break;
  1209. case PARAS_WRITE:
  1210. {
  1211. int cnt=0;
  1212. pmqtt = &mqtt2;
  1213. r = dev_mqtt_get(dm->db, pmqtt); if(r) return -1;
  1214. r = proc_mqtt(path, PARAS_CHECK, pmqtt); if(r) return -1;
  1215. dic = dictionary_new(0); if(!dic) return -1;
  1216. for(i=0; i<MQTT_SER_MAX; i++) {
  1217. ser = &pmqtt->ser[i];
  1218. if(ser->id==-1) break;
  1219. sprintf(token, "mqtt:broker%d.plat", i+1);
  1220. r = ini_rw(dic, token, &ser->plat, sizeof(ser->plat), TYPE_INT, op, 1); if(r) break;
  1221. sprintf(token, "mqtt:broker%d.mode", i+1);
  1222. r = ini_rw(dic, token, &ser->mode, sizeof(ser->mode), TYPE_INT, op, 1); if(r) break;
  1223. #if 0
  1224. sprintf(token, "mqtt:broker%d.proto", i+1);
  1225. r = ini_rw(dic, token, ser->proto, TYPE_STR, op, 1); if(r) break;
  1226. #endif
  1227. sprintf(token, "mqtt:broker%d.name", i+1);
  1228. r = ini_rw(dic, token, ser->name, sizeof(ser->name), TYPE_STR, op, 1); if(r) break;
  1229. sprintf(token, "mqtt:broker%d.server", i+1);
  1230. r = ini_rw(dic, token, ser->server, sizeof(ser->server), TYPE_STR, op, 1); if(r) break;
  1231. sprintf(token, "mqtt:broker%d.port", i+1);
  1232. r = ini_rw(dic, token, ser->port, sizeof(ser->port), TYPE_STR, op, 1); if(r) break;
  1233. sprintf(token, "mqtt:broker%d.client_id", i+1);
  1234. r = ini_rw(dic, token, ser->cid, sizeof(ser->cid), TYPE_STR, op, 1); if(r) break;
  1235. sprintf(token, "mqtt:broker%d.user", i+1);
  1236. r = ini_rw(dic, token, ser->user, sizeof(ser->user), TYPE_STR, op, 1); if(r) break;
  1237. sprintf(token, "mqtt:broker%d.password", i+1);
  1238. r = ini_rw(dic, token, ser->password, sizeof(ser->password), TYPE_STR, op, 1); if(r) break;
  1239. sprintf(token, "mqtt:broker%d.cert", i+1);
  1240. str_replace(ser->cert, "\r\n", ";;");
  1241. r = ini_rw(dic, token, ser->cert, sizeof(ser->cert), TYPE_STR, op, 0); if(r) break;
  1242. cnt++;
  1243. }
  1244. if(cnt>0) {
  1245. r = ini_dump(path, dic);
  1246. }
  1247. }
  1248. break;
  1249. default:
  1250. return -1;
  1251. }
  1252. quit:
  1253. iniparser_freedict(dic);
  1254. return r;
  1255. }
  1256. static int proc_mail(char *path, int op, mail_info_t *mail)
  1257. {
  1258. int i,r=0;
  1259. dictionary *dic=NULL;
  1260. char *p,*tok,token[100],temp[100];
  1261. GlobalDeviceManager *dm=get_dm();
  1262. mail_info_t mail2,*pmail=mail;
  1263. mail_send_t *send=&pmail->send;
  1264. switch(op) {
  1265. case PARAS_CHECK:
  1266. {
  1267. send->id = 0;
  1268. if(send->mode<0 || send->mode>1) {
  1269. LOGE("___ check mail, send.mode is invalid, correct value is 0/1\n");
  1270. r = -1;
  1271. }
  1272. if(send->mode==1) {
  1273. if(!send->server[0]) {
  1274. LOGE("___ check mail, send.server is null\n");
  1275. r = -1;
  1276. }
  1277. if(!send->port[0]) {
  1278. LOGE("___ check mail, send.server is null\n");
  1279. r = -1;
  1280. }
  1281. if(!send->account[0]) {
  1282. LOGE("___ check mail, send.account is null\n");
  1283. r = -1;
  1284. }
  1285. if(!send->password[0]) {
  1286. LOGE("___ check mail, send.password is null\n");
  1287. r = -1;
  1288. }
  1289. if(!send->auth[0]) {
  1290. LOGE("___ check mail, send.account is null\n");
  1291. r = -1;
  1292. }
  1293. for(i=0; i<MAIL_RECV_MAX; i++) {
  1294. mail_recv_t *recv=&pmail->recv[i];
  1295. if(recv->use<0 || recv->use>1) {
  1296. LOGE("___ check mail, recv[%d].use is invalid, correct value is 0/1", i);
  1297. r = -1;
  1298. }
  1299. if(recv->use==1) {
  1300. if(recv->id != i) {
  1301. LOGE("___ check mail, recv[%d].id %d mismatch it's index\n", i,recv->id);
  1302. r = -1;
  1303. }
  1304. if(!recv[i].account[0]) {
  1305. LOGE("___ check mail, recv[%d].account is null", i);
  1306. r = -1;
  1307. }
  1308. }
  1309. if(r) {
  1310. break;
  1311. }
  1312. }
  1313. }
  1314. return r;
  1315. }
  1316. break;
  1317. case PARAS_CREATE:
  1318. {
  1319. FILE *fp = fopen(path, "a+");
  1320. if(!fp) {
  1321. LOGE("___ %s open failed\n", path);
  1322. return -1;
  1323. }
  1324. fprintf(fp, "[mail]\n");
  1325. fprintf(fp, "send.mode = \"%d\"\n", send->mode);
  1326. fprintf(fp, "send.server = \"%s\"\n", send->account);
  1327. fprintf(fp, "send.password = \"%s\"\n", send->password);
  1328. fprintf(fp, "send.server = \"%s\"\n", send->server);
  1329. fprintf(fp, "send.port = \"%s\"\n", send->port);
  1330. fprintf(fp, "send.auth = \"%s\"\n", send->auth);
  1331. fprintf(fp, "send.ca = \"%s\"\n", send->ca[0]?send->ca:"");
  1332. fprintf(fp, "\n");
  1333. for(i=0; i<MAIL_RECV_MAX; i++) {
  1334. mail_recv_t *recv=&pmail->recv[i];
  1335. if(recv->use==1) {
  1336. fprintf(fp, "recv%d.use = \"%d\"\n", i+1,recv->use);
  1337. fprintf(fp, "recv%d.account = \"%s\"\n", i+1,recv->account);
  1338. fprintf(fp, "\n");
  1339. }
  1340. }
  1341. fclose(fp);
  1342. return 0;
  1343. }
  1344. break;
  1345. case PARAS_READ:
  1346. {
  1347. pmail = &mail2;
  1348. send = &pmail->send;
  1349. send->id = 0;
  1350. mail_recv_t *recv=NULL;
  1351. dic = iniparser_load(path); if(!dic) return -1;
  1352. memset(pmail, 0, sizeof(mail_info_t));
  1353. send->id = 0;
  1354. r = ini_rw(dic, "mail:send.mode", &send->mode, sizeof(send->mode), TYPE_INT, op, 1); if(r) goto quit;
  1355. r = ini_rw(dic, "mail:send.server", send->server, sizeof(send->server), TYPE_STR, op, 1); if(r) goto quit;
  1356. r = ini_rw(dic, "mail:send.port", send->port, sizeof(send->port), TYPE_STR, op, 1); if(r) goto quit;
  1357. r = ini_rw(dic, "mail:send.auth", send->auth, sizeof(send->auth), TYPE_STR, op, 1); if(r) goto quit;
  1358. r = ini_rw(dic, "mail:send.ca", send->ca, sizeof(send->ca), TYPE_STR, op, 0); if(r) goto quit;
  1359. r = ini_rw(dic, "mail:send.account", send->account, sizeof(send->account), TYPE_STR, op, 1); if(r) goto quit;
  1360. r = ini_rw(dic, "mail:send.password", send->password, sizeof(send->password), TYPE_STR, op, 1); if(r) goto quit;
  1361. for(i=0; i<MAIL_RECV_MAX; i++) {
  1362. recv = &pmail->recv[i];
  1363. recv->id = i;
  1364. sprintf(token, "mail:recv%d.account", i+1);
  1365. r = ini_rw(dic, token, recv->account, sizeof(recv->account), TYPE_STR, op, 1); if(r) break;
  1366. recv->use = 1;
  1367. }
  1368. r = dev_clear_table(dm->db, TAB_ID_MAIL); if(r) goto quit;
  1369. r = dev_mail_update_send(dm->db, &pmail->send); if(r) goto quit;
  1370. r = dev_mail_update_recv(dm->db, pmail->recv); if(r) goto quit;
  1371. }
  1372. break;
  1373. case PARAS_WRITE:
  1374. {
  1375. int cnt=0;
  1376. pmail = &mail2;
  1377. send = &pmail->send;
  1378. r = dev_mail_get(dm->db, pmail); if(r) return -1;
  1379. dic = dictionary_new(0); if(!dic) return -1;
  1380. r = ini_rw(dic, "mail:send.mode", &send->mode, sizeof(send->mode), TYPE_INT, op, 1); if(r) goto quit;
  1381. r = ini_rw(dic, "mail:send.server", send->server, sizeof(send->server), TYPE_STR, op, 1); if(r) goto quit;
  1382. r = ini_rw(dic, "mail:send.port", send->port, sizeof(send->port), TYPE_STR, op, 1); if(r) goto quit;
  1383. r = ini_rw(dic, "mail:send.auth", send->auth, sizeof(send->auth), TYPE_STR, op, 1); if(r) goto quit;
  1384. r = ini_rw(dic, "mail:send.ca", send->ca, sizeof(send->ca), TYPE_STR, op, 0); if(r) goto quit;
  1385. r = ini_rw(dic, "mail:send.account", send->account, sizeof(send->account), TYPE_STR, op, 1); if(r) goto quit;
  1386. r = ini_rw(dic, "mail:send.password", send->password, sizeof(send->password), TYPE_STR, op, 1); if(r) goto quit;
  1387. for(i=0; i<MAIL_RECV_MAX; i++) {
  1388. mail_recv_t *recv=&pmail->recv[i];
  1389. sprintf(token, "mail:recv%d.account", i+1);
  1390. r = ini_rw(dic, token, recv->account, sizeof(recv->account), TYPE_STR, op, 1); if(r) break;
  1391. }
  1392. r = ini_dump(path, dic);
  1393. }
  1394. break;
  1395. default:
  1396. return -1;
  1397. }
  1398. quit:
  1399. iniparser_freedict(dic);
  1400. return r;
  1401. }
  1402. static int proc_role(char *path, int op, RoleInfo *role, handle_t l)
  1403. {
  1404. int i=1,r=0;
  1405. char temp[100];
  1406. char *p,token[100];
  1407. dictionary *dic=NULL;
  1408. RoleInfo role2,*prole=role;
  1409. GlobalDeviceManager *dm=get_dm();
  1410. switch(op) {
  1411. case PARAS_CHECK:
  1412. {
  1413. if(!prole->roleName[0]) {
  1414. LOGE("___ check role, roleName is null\n");
  1415. r = -1;
  1416. }
  1417. if(prole->roleLevel<0) {
  1418. LOGE("___ check role, roleLevel is invalid\n");
  1419. r = -1;
  1420. }
  1421. if(!prole->roleAuthority[0]) {
  1422. LOGE("___ check role, roleAuthority is null\n");
  1423. r = -1;
  1424. }
  1425. return r;
  1426. }
  1427. break;
  1428. case PARAS_CREATE:
  1429. {
  1430. FILE *fp=fopen(path, "a+");
  1431. if(!fp) {
  1432. LOGE("___ %s open failed\n", path);
  1433. return -1;
  1434. }
  1435. get_time_str(temp, sizeof(temp), time(NULL));
  1436. fprintf(fp, "[role]\n");
  1437. fprintf(fp, "role1.name = \"super admin\"\n");
  1438. fprintf(fp, "role1.level = \"0\"\n");
  1439. fprintf(fp, "role1.auth = \"1,2,3,4,5,6\"\n");
  1440. fprintf(fp, "role1.sort = \"1\"\n");
  1441. fprintf(fp, "role1.time = \"%s\"\n", temp);
  1442. fprintf(fp, "\n");
  1443. fprintf(fp, "role2.name = \"admin\"\n");
  1444. fprintf(fp, "role2.level = \"1\"\n");
  1445. fprintf(fp, "role2.auth = \"1,2,3\"\n");
  1446. fprintf(fp, "role2.sort = \"2\"\n");
  1447. fprintf(fp, "role3.time = \"%s\"\n", temp);
  1448. fprintf(fp, "\n");
  1449. fprintf(fp, "role3.name = \"normal\"\n");
  1450. fprintf(fp, "role3.level = \"2\"\n");
  1451. fprintf(fp, "role3.auth = \"1,2\"\n");
  1452. fprintf(fp, "role3.sort = \"3\"\n");
  1453. fprintf(fp, "role3.time = \"%s\"\n", temp);
  1454. fprintf(fp, "\n");
  1455. fclose(fp);
  1456. return 0;
  1457. }
  1458. break;
  1459. case PARAS_READ:
  1460. {
  1461. int x,chk_ok=0,cnt_ok=0;
  1462. prole = &role2;
  1463. dic = iniparser_load(path); if(!dic) return -1;
  1464. memset(prole, 0, sizeof(RoleInfo));
  1465. for(x=0; x<2; x++) {
  1466. i = 1;
  1467. while(1) {
  1468. prole->roleID = i;
  1469. sprintf(token, "role:role%d.name", i);
  1470. r = ini_rw(dic, token, prole->roleName, sizeof(prole->roleName), TYPE_STR, op, 1); if(r) break;
  1471. sprintf(token, "role:role%d.level", i);
  1472. r = ini_rw(dic, token, &prole->roleLevel, sizeof(prole->roleLevel), TYPE_INT, op, 1); if(r) break;
  1473. sprintf(token, "role:role%d.auth", i);
  1474. r = ini_rw(dic, token, prole->roleAuthority, sizeof(prole->roleAuthority), TYPE_STR, op, 1); if(r) break;
  1475. sprintf(token, "role:role%d.sort", i);
  1476. r = ini_rw(dic, token, &prole->roleSort, sizeof(prole->roleAuthority), TYPE_INT, op, 1); if(r) break;
  1477. sprintf(token, "role:role%d.time", i);
  1478. r = ini_rw(dic, token, prole->createTime, sizeof(prole->createTime), TYPE_STR, op, 1); if(r) break;
  1479. if(chk_ok==0) {
  1480. r = proc_role(path, PARAS_CHECK, prole, NULL); if(r) break;
  1481. xlist_append(l, 0, prole, sizeof(RoleInfo));
  1482. cnt_ok++;
  1483. }
  1484. else {
  1485. r = dev_insert_role_info(dm->db, prole); if(r) break;
  1486. }
  1487. i++;
  1488. }
  1489. if(x==0) {
  1490. if(cnt_ok==0) break;
  1491. chk_ok = 1;
  1492. r = dev_clear_table(dm->db, TAB_ID_ROLE); if(r) break;
  1493. }
  1494. else {
  1495. if(r) {
  1496. if(i>cnt_ok) r = 0;
  1497. break;
  1498. }
  1499. }
  1500. }
  1501. }
  1502. break;
  1503. case PARAS_WRITE:
  1504. {
  1505. int cnt=0;
  1506. RoleInfo *tmp,*node,*next;
  1507. prole = &role2;
  1508. INIT_LIST_HEAD(&prole->list);
  1509. r = dev_get_role_info(dm->db, prole); if(r) return -1;
  1510. dic = dictionary_new(0); if(!dic) return -1;
  1511. list_for_each_entry(tmp, &prole->list, list) {
  1512. if(!tmp) break;
  1513. r = proc_role(path, PARAS_CHECK, tmp, NULL); if(r) break;
  1514. sprintf(token, "role:role%d.name", i);
  1515. r = ini_rw(dic, token, tmp->roleName, sizeof(tmp->roleName), TYPE_STR, op, 1); if(r) break;
  1516. sprintf(token, "role:role%d.level", i);
  1517. r = ini_rw(dic, token, &tmp->roleLevel, sizeof(tmp->roleLevel), TYPE_INT, op, 1); if(r) break;
  1518. sprintf(token, "role:role%d.auth", i);
  1519. r = ini_rw(dic, token, tmp->roleAuthority, sizeof(tmp->roleAuthority), TYPE_STR, op, 1); if(r) break;
  1520. sprintf(token, "role:role%d.sort", i);
  1521. r = ini_rw(dic, token, &tmp->roleSort, sizeof(tmp->roleAuthority), TYPE_INT, op, 1); if(r) break;
  1522. sprintf(token, "role:role%d.time", i);
  1523. get_curtime_str(temp, sizeof(temp));
  1524. r = ini_rw(dic, token, temp, sizeof(temp), TYPE_STR, op, 1); if(r) break;
  1525. i++;
  1526. cnt++;
  1527. }
  1528. list_for_each_entry_safe(node,next,&prole->list,list) {
  1529. list_del(&node->list); free(node);
  1530. }
  1531. if(cnt>0) {
  1532. r = ini_dump(path, dic);
  1533. }
  1534. }
  1535. break;
  1536. default:
  1537. return -1;
  1538. }
  1539. iniparser_freedict(dic);
  1540. return r;
  1541. }
  1542. static int find_role_id(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
  1543. {
  1544. int id=(*(int*)arg);
  1545. RoleInfo *info=(RoleInfo*)xd->buf;
  1546. if(id==info->roleID) {
  1547. *act = LIST_ACT_STOP;
  1548. return 0;
  1549. }
  1550. return -1;
  1551. }
  1552. static int proc_user(char *path, int op, UserInfo *user, handle_t l)
  1553. {
  1554. int i=1,r=0;
  1555. char temp[100];
  1556. char *p,token[100];
  1557. dictionary *dic=NULL;
  1558. UserInfo user2,*puser=user;
  1559. GlobalDeviceManager *dm=get_dm();
  1560. switch(op) {
  1561. case PARAS_CHECK:
  1562. {
  1563. if(!puser->userName[0]) {
  1564. LOGE("___ check user, userName is null\n");
  1565. r = -1;
  1566. }
  1567. if(!puser->userPW[0]) {
  1568. LOGE("___ check user, userPW is invalid\n");
  1569. r = -1;
  1570. }
  1571. if(!puser->nickName[0]) {
  1572. LOGE("___ check user, nickName is null\n");
  1573. r = -1;
  1574. }
  1575. if(!puser->createTime[0]) {
  1576. LOGE("___ check user, createTime is null\n");
  1577. r = -1;
  1578. }
  1579. return r;
  1580. }
  1581. break;
  1582. case PARAS_CREATE:
  1583. {
  1584. FILE *fp=fopen(path, "a+");
  1585. if(!fp) {
  1586. LOGE("___ %s open failed\n", path);
  1587. return -1;
  1588. }
  1589. get_time_str(temp, sizeof(temp), time(NULL));
  1590. fprintf(fp, "[user]\n");
  1591. fprintf(fp, "user1.userName = \"admin\"\n");
  1592. fprintf(fp, "user1.userPW = \"admin\"\n");
  1593. fprintf(fp, "user1.nickName = \"administer\"\n");
  1594. fprintf(fp, "user1.roleID = \"1\"\n");
  1595. fprintf(fp, "user1.createTime = \"%s\"\n", temp);
  1596. fprintf(fp, "\n");
  1597. fprintf(fp, "user2.userName = \"user\"\n");
  1598. fprintf(fp, "user2.userPW = \"123456\"\n");
  1599. fprintf(fp, "user2.nickName = \"users\"\n");
  1600. fprintf(fp, "user2.roleID = \"3\"\n");
  1601. fprintf(fp, "user2.createTime = \"%s\"\n", temp);
  1602. fprintf(fp, "\n");
  1603. fclose(fp);
  1604. return 0;
  1605. }
  1606. break;
  1607. case PARAS_READ:
  1608. {
  1609. int x,chk_ok=0,cnt_ok=0;
  1610. RoleInfo role;
  1611. puser = &user2;
  1612. dic = iniparser_load(path); if(!dic) return -1;
  1613. memset(puser, 0, sizeof(UserInfo));
  1614. for(x=0; x<2; x++) {
  1615. i = 1;
  1616. while(1) {
  1617. puser->userID = i;
  1618. sprintf(token, "user:user%d.name", i);
  1619. r = ini_rw(dic, token, puser->userName, sizeof(puser->userName), TYPE_STR, op, 1); if(r) break;
  1620. sprintf(token, "user:user%d.password", i);
  1621. r = ini_rw(dic, token, &puser->userPW, sizeof(puser->userPW), TYPE_STR, op, 1); if(r) break;
  1622. sprintf(token, "user:user%d.nick_name", i);
  1623. r = ini_rw(dic, token, puser->nickName, sizeof(puser->nickName), TYPE_STR, op, 1); if(r) break;
  1624. sprintf(token, "user:user%d.role_id", i);
  1625. r = ini_rw(dic, token, &puser->roleID, sizeof(puser->roleID), TYPE_INT, op, 1); if(r) break;
  1626. sprintf(token, "user:user%d.time", i);
  1627. r = ini_rw(dic, token, puser->createTime, sizeof(puser->createTime), TYPE_STR, op, 1); if(r) break;
  1628. if(chk_ok==0) {
  1629. r = proc_user(path, PARAS_CHECK, puser, NULL); if(r) break;
  1630. if(l) {
  1631. r = xlist_iterator(l, NULL, find_role_id, &puser->roleID);
  1632. if(r) {
  1633. LOGE("___ roleID %d not found in role sett options!\n", puser->roleID);
  1634. break;
  1635. }
  1636. }
  1637. cnt_ok++;
  1638. }
  1639. else {
  1640. r = dev_insert_user_info(dm->db, puser); if(r) break;
  1641. }
  1642. i++;
  1643. }
  1644. if(x==0) {
  1645. if(cnt_ok==0) break;
  1646. chk_ok = 1;
  1647. r = dev_clear_table(dm->db, TAB_ID_USER); if(r) break;
  1648. }
  1649. else {
  1650. if(r) {
  1651. if(i>cnt_ok) r = 0;
  1652. break;
  1653. }
  1654. }
  1655. }
  1656. }
  1657. break;
  1658. case PARAS_WRITE:
  1659. {
  1660. int cnt=0;
  1661. UserInfo *tmp,*node,*next;
  1662. puser = &user2;
  1663. INIT_LIST_HEAD(&puser->list);
  1664. r = dev_get_user_info(dm->db, puser); if(r) return -1;
  1665. dic = dictionary_new(0); if(!dic) return -1;
  1666. list_for_each_entry(tmp, &puser->list, list) {
  1667. if(!tmp) break;
  1668. r = proc_user(path, PARAS_CHECK, tmp, NULL); if(r) break;
  1669. sprintf(token, "user:user%d.name", i);
  1670. r = ini_rw(dic, token, tmp->userName, sizeof(tmp->userName), TYPE_STR, op, 1); if(r) break;
  1671. sprintf(token, "user:user%d.password", i);
  1672. r = ini_rw(dic, token, &tmp->userPW, sizeof(tmp->userPW), TYPE_STR, op, 1); if(r) break;
  1673. sprintf(token, "user:user%d.nick_name", i);
  1674. r = ini_rw(dic, token, tmp->nickName, sizeof(tmp->nickName), TYPE_STR, op, 1); if(r) break;
  1675. sprintf(token, "user:user%d.role_id", i);
  1676. r = ini_rw(dic, token, &tmp->roleID, sizeof(tmp->roleID), TYPE_INT, op, 1); if(r) break;
  1677. sprintf(token, "user:user%d.time", i);
  1678. r = ini_rw(dic, token, tmp->createTime, sizeof(tmp->createTime), TYPE_STR, op, 1); if(r) break;
  1679. i++;
  1680. cnt++;
  1681. }
  1682. list_for_each_entry_safe(node,next,&puser->list,list) {
  1683. list_del(&node->list); free(node);
  1684. }
  1685. if(cnt>0) {
  1686. r = ini_dump(path, dic);
  1687. }
  1688. }
  1689. break;
  1690. default:
  1691. return -1;
  1692. }
  1693. iniparser_freedict(dic);
  1694. return r;
  1695. }
  1696. static int proc_group(char *path, int op, GroupInfo *group)
  1697. {
  1698. int i=1,r=0;
  1699. char temp[100];
  1700. char *p,token[100];
  1701. dictionary *dic=NULL;
  1702. GroupInfo group2,*pgroup=group;
  1703. GlobalDeviceManager *dm=get_dm();
  1704. switch(op) {
  1705. case PARAS_CHECK:
  1706. {
  1707. if(!pgroup->GroupChList[0]) {
  1708. LOGE("___ check group, GroupChList is null\n");
  1709. r = -1;
  1710. }
  1711. if(!pgroup->GroupName[0]) {
  1712. LOGE("___ check group, GroupName is null\n");
  1713. r = -1;
  1714. }
  1715. return r;
  1716. }
  1717. break;
  1718. case PARAS_CREATE:
  1719. {
  1720. FILE *fp=fopen(path, "a+");
  1721. if(!fp) {
  1722. LOGE("___ %s open failed\n", path);
  1723. return -1;
  1724. }
  1725. fprintf(fp, "[group]\n");
  1726. fprintf(fp, "\n");
  1727. fclose(fp);
  1728. return 0;
  1729. }
  1730. break;
  1731. case PARAS_READ:
  1732. {
  1733. int x,chk_ok=0,cnt_ok=0;
  1734. pgroup = &group2;
  1735. dic = iniparser_load(path); if(!dic) return -1;
  1736. memset(pgroup, 0, sizeof(GroupInfo));
  1737. for(x=0; x<2; x++) {
  1738. i = 1;
  1739. while(1) {
  1740. sprintf(token, "group:group%d.id", i);
  1741. r = ini_rw(dic, token, &pgroup->GroupID, sizeof(pgroup->GroupID), TYPE_STR, op, 1); if(r) break;
  1742. sprintf(token, "group:group%d.name", i);
  1743. r = ini_rw(dic, token, pgroup->GroupName, sizeof(pgroup->GroupName), TYPE_STR, op, 1); if(r) break;
  1744. sprintf(token, "group:group%d.ch_list", i);
  1745. r = ini_rw(dic, token, pgroup->GroupChList, sizeof(pgroup->GroupChList), TYPE_STR, op, 1); if(r) break;
  1746. if(chk_ok==0) {
  1747. r = proc_group(path, PARAS_CHECK, pgroup); if(r) break;
  1748. cnt_ok++;
  1749. }
  1750. else {
  1751. r = dev_insert_group_info(dm->db, pgroup); if(r) break;
  1752. }
  1753. i++;
  1754. }
  1755. if(x==0) {
  1756. if(cnt_ok==0) break;
  1757. chk_ok = 1;
  1758. r = dev_clear_table(dm->db, TAB_ID_GROUP); if(r) break;
  1759. }
  1760. else {
  1761. if(r) {
  1762. if(i>cnt_ok) r = 0;
  1763. break;
  1764. }
  1765. }
  1766. }
  1767. }
  1768. break;
  1769. case PARAS_WRITE:
  1770. {
  1771. int cnt=0;
  1772. GroupInfo *tmp,*node,*next;
  1773. pgroup = &group2;
  1774. INIT_LIST_HEAD(&pgroup->list);
  1775. r = dev_get_group_info(dm->db, pgroup); if(r) return -1;
  1776. r = proc_group(path, PARAS_CHECK, pgroup); if(r) return -1;
  1777. dic = dictionary_new(0); if(!dic) return -1;
  1778. list_for_each_entry(tmp, &pgroup->list, list) {
  1779. if(!tmp) break;
  1780. sprintf(token, "group:group%d.id", i);
  1781. r = ini_rw(dic, token, &tmp->GroupID, sizeof(tmp->GroupID), TYPE_INT, op, 1); if(r) break;
  1782. sprintf(token, "group:group%d.name", i);
  1783. r = ini_rw(dic, token, tmp->GroupName, sizeof(tmp->GroupName), TYPE_STR, op, 1); if(r) break;
  1784. sprintf(token, "group%d.ch_list", i);
  1785. sprintf(temp, "%s", tmp->GroupChList);
  1786. r = ini_rw(dic, token, tmp->GroupChList, sizeof(tmp->GroupChList), TYPE_STR, op, 1); if(r) break;
  1787. i++;
  1788. cnt++;
  1789. }
  1790. list_for_each_entry_safe(node,next,&pgroup->list,list) {
  1791. list_del(&node->list); free(node);
  1792. }
  1793. if(cnt>0) {
  1794. r = ini_dump(path, dic);
  1795. }
  1796. }
  1797. break;
  1798. default:
  1799. return -1;
  1800. }
  1801. iniparser_freedict(dic);
  1802. return r;
  1803. }
  1804. static int proc_sensor(char *path, int op, GlobalSensorManger *sensor)
  1805. {
  1806. int i=1,j,k,r=0;
  1807. char temp[100];
  1808. char *p,token[100];
  1809. dictionary *dic=NULL;
  1810. GlobalSensorManger sensor2,*psensor=sensor;
  1811. GlobalDeviceManager *dm=get_dm();
  1812. switch(op) {
  1813. case PARAS_CHECK:
  1814. {
  1815. p = strstr(psensor->sensor_port_name, "IN");
  1816. if(psensor->sensor_id<0) {
  1817. LOGE("___ check sensor, sensor_id %d is invalid, must >0\n",psensor->sensor_id);
  1818. r = -1;
  1819. }
  1820. if(!p && psensor->sensor_addr<=0) {
  1821. LOGE("___ check sensor, sensor_addr %d is invalid, must >0\n",psensor->sensor_addr);
  1822. r = -1;
  1823. }
  1824. if(!p && psensor->sensor_baud<=0) {
  1825. LOGE("___ check sensor, sensor_baud %d is invalid, must >0\n",psensor->sensor_baud);
  1826. r = -1;
  1827. }
  1828. if(!psensor->sensor_name[0]) {
  1829. LOGE("___ check sensor, sensor_name is null\n");
  1830. r = -1;
  1831. }
  1832. if(psensor->sensor_interface_type<1 || psensor->sensor_interface_type>2) {
  1833. LOGE("___ check sensor, sensor_interface_type %d is invalid, must be 1/2\n",psensor->sensor_interface_type);
  1834. r = -1;
  1835. }
  1836. return r;
  1837. }
  1838. break;
  1839. case PARAS_CREATE:
  1840. {
  1841. FILE *fp = fopen(path, "a+");
  1842. if(!fp) {
  1843. LOGE("___ %s open failed\n", path);
  1844. return -1;
  1845. }
  1846. typedef struct {
  1847. int iface;
  1848. int type;
  1849. char *name;
  1850. char *port;
  1851. int baudrate;
  1852. int addr;
  1853. int vcnt;
  1854. }sensor_info_t;
  1855. #define SENSOR_MAX 7
  1856. sensor_info_t sinfo[SENSOR_MAX]={
  1857. { .iface = 1, .type=SENSOR_TYPE_TEMP_HUMI, .name="A", .port="COM2", .baudrate=9600, .addr=1, .vcnt=2 },
  1858. { .iface = 2, .type=SENSOR_TYPE_SMOKE, .name="B", .port="IN1", .baudrate=9600, .addr=0, .vcnt=1 },
  1859. { .iface = 2, .type=SENSOR_TYPE_WATER, .name="C", .port="IN2", .baudrate=9600, .addr=0, .vcnt=1 },
  1860. { .iface = 2, .type=SENSOR_TYPE_ACCESS, .name="D", .port="IN3", .baudrate=9600, .addr=0, .vcnt=1 },
  1861. { .iface = 1, .type=SENSOR_TYPE_GAS, .name="E", .port="COM1", .baudrate=9600, .addr=2, .vcnt=1 },
  1862. { .iface = 1, .type=SENSOR_TYPE_AIR_PRESS, .name="F", .port="COM3", .baudrate=9600, .addr=3, .vcnt=2 },
  1863. { .iface = 1, .type=SENSOR_TYPE_AIR_COND, .name="G", .port="COM4", .baudrate=9600, .addr=4, .vcnt=1 },
  1864. };
  1865. fprintf(fp, "[sensor]\n");
  1866. for(i=0; i<SENSOR_MAX; i++) {
  1867. fprintf(fp, "sensor%d.id = \"%d\"", i+1, i+1);
  1868. fprintf(fp, "sensor%d.type = \"%d\"", i+1, sinfo[i].type);
  1869. fprintf(fp, "sensor%d.name = \"%s\"", i+1, sinfo[i].name);
  1870. fprintf(fp, "sensor%d.iface = \"%d\"", i+1, sinfo[i].iface);
  1871. fprintf(fp, "sensor%d.port = \"%s\"", i+1, sinfo[i].port);
  1872. fprintf(fp, "sensor%d.baudrate = \"%d\"", i+1, sinfo[i].baudrate);
  1873. fprintf(fp, "sensor%d.addr = \"%d\"", i+1, sinfo[i].addr);
  1874. fprintf(fp, "sensor%d.staus = \"0\"", i+1);
  1875. fprintf(fp, "sensor%d.vcnt = \"%d\"", i+1, sinfo[i].vcnt);
  1876. for(j=0; j<2; j++) {
  1877. fprintf(fp, "sensor%d.v%d.up.en = \"0\"", i+1, j+1);
  1878. fprintf(fp, "sensor%d.v%d.up.th = \"0\"", i+1, j+1);
  1879. fprintf(fp, "sensor%d.v%d.up.th_t = \"0\"", i+1, j+1);
  1880. fprintf(fp, "sensor%d.v%d.up.th_p = \"0\"", i+1, j+1);
  1881. fprintf(fp, "sensor%d.v%d.lo.en = \"0\"", i+1, j+1);
  1882. fprintf(fp, "sensor%d.v%d.lo.th = \"0\"", i+1, j+1);
  1883. fprintf(fp, "sensor%d.v%d.lo.th_t = \"0\"", i+1, j+1);
  1884. fprintf(fp, "sensor%d.v%d.lo.th_p = \"0\"", i+1, j+1);
  1885. }
  1886. fprintf(fp, "\n");
  1887. }
  1888. fclose(fp);
  1889. return 0;
  1890. }
  1891. break;
  1892. case PARAS_READ:
  1893. {
  1894. float f;
  1895. int x,chk_ok=0,cnt_ok=0;
  1896. psensor = &sensor2;
  1897. dic = iniparser_load(path); if(!dic) return -1;
  1898. memset(psensor, 0, sizeof(GlobalSensorManger));
  1899. for(x=0; x<2; x++) {
  1900. i = 1;
  1901. while(1) {
  1902. sprintf(token, "sensor:sensor%d.id", i);
  1903. r = ini_rw(dic, token, &psensor->sensor_id, sizeof(psensor->sensor_id), TYPE_INT, op, 1); if(r) break;
  1904. sprintf(token, "sensor:sensor%d.type", i);
  1905. r = ini_rw(dic, token, &psensor->sensor_type, sizeof(psensor->sensor_type), TYPE_INT, op, 1); if(r) break;
  1906. sprintf(token, "sensor:sensor%d.name", i);
  1907. r = ini_rw(dic, token, psensor->sensor_name, sizeof(psensor->sensor_name), TYPE_STR, op, 1); if(r) break;
  1908. sprintf(token, "sensor:sensor%d.iface", i);
  1909. r = ini_rw(dic, token, &psensor->sensor_interface_type, sizeof(psensor->sensor_interface_type), TYPE_INT, op, 1); if(r) break;
  1910. sprintf(token, "sensor:sensor%d.port", i);
  1911. r = ini_rw(dic, token, psensor->sensor_port_name, sizeof(psensor->sensor_port_name), TYPE_STR, op, 1); if(r) break;
  1912. sprintf(token, "sensor:sensor%d.addr", i);
  1913. r = ini_rw(dic, token, &psensor->sensor_addr, sizeof(psensor->sensor_addr), TYPE_INT, op, 1); if(r) break;
  1914. sprintf(token, "sensor:sensor%d.baudrate", i);
  1915. r = ini_rw(dic, token, &psensor->sensor_baud, sizeof(psensor->sensor_baud), TYPE_INT, op, 1); if(r) break;
  1916. sprintf(token, "sensor:sensor%d.vcnt", i);
  1917. r = ini_rw(dic, token, &psensor->sensor_val_count, sizeof(psensor->sensor_val_count), TYPE_INT, op, 1); if(r) break;
  1918. //////////////////////
  1919. GlobalSensorOverManage *pover=&psensor->over_manager;
  1920. for(j=1; j<=2; j++) {
  1921. for(k=1; k<=2; k++) {
  1922. if(j==1) {
  1923. if(k==1) {
  1924. sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
  1925. r = ini_rw(dic, token, &pover->sensor_val1_upper_enabled, sizeof(pover->sensor_val1_upper_enabled), TYPE_INT, op, 1); if(r) break;
  1926. sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
  1927. r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold, sizeof(pover->sensor_val1_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  1928. sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
  1929. r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl, sizeof(pover->sensor_val1_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  1930. sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
  1931. r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl_para, sizeof(pover->sensor_val1_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  1932. }
  1933. else {
  1934. sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
  1935. r = ini_rw(dic, token, &pover->sensor_val1_lower_enabled, sizeof(pover->sensor_val1_lower_enabled), TYPE_INT, op, 1); if(r) break;
  1936. sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
  1937. r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold, sizeof(pover->sensor_val1_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  1938. sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
  1939. r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl, sizeof(pover->sensor_val1_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  1940. sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
  1941. r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl_para, sizeof(pover->sensor_val1_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  1942. }
  1943. }
  1944. else {
  1945. if(k==1) {
  1946. sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
  1947. r = ini_rw(dic, token, &pover->sensor_val2_upper_enabled, sizeof(pover->sensor_val2_upper_enabled), TYPE_INT, op, 1); if(r) break;
  1948. sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
  1949. r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold, sizeof(pover->sensor_val2_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  1950. sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
  1951. r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl, sizeof(pover->sensor_val2_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  1952. sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
  1953. r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl_para, sizeof(pover->sensor_val2_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  1954. }
  1955. else {
  1956. sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
  1957. r = ini_rw(dic, token, &pover->sensor_val2_lower_enabled, sizeof(pover->sensor_val2_lower_enabled), TYPE_INT, op, 1); if(r) break;
  1958. sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
  1959. r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold, sizeof(pover->sensor_val2_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  1960. sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
  1961. r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl, sizeof(pover->sensor_val2_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  1962. sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
  1963. r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl_para, sizeof(pover->sensor_val2_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  1964. }
  1965. }
  1966. if(r) break;
  1967. }
  1968. if(r) break;
  1969. }
  1970. if(chk_ok==0) {
  1971. r = proc_sensor(path, PARAS_CHECK, psensor); if(r) break;
  1972. cnt_ok++;
  1973. }
  1974. else {
  1975. r = dev_insert_sensor_genera_manage(dm->db, psensor); if(r) break;
  1976. r = dev_update_sensor_over_manage(dm->db, 0, psensor->sensor_id, psensor); if(r) break;
  1977. }
  1978. i++;
  1979. }
  1980. if(x==0) {
  1981. if(cnt_ok==0) break;
  1982. chk_ok = 1;
  1983. r = dev_clear_table(dm->db, TAB_ID_SENSOR); if(r) break;
  1984. }
  1985. else {
  1986. if(r) {
  1987. if(i>cnt_ok) r = 0;
  1988. break;
  1989. }
  1990. }
  1991. }
  1992. }
  1993. break;
  1994. case PARAS_WRITE:
  1995. {
  1996. int cnt=0;
  1997. GlobalSensorManger *tmp,*node,*next;
  1998. psensor = &sensor2;
  1999. INIT_LIST_HEAD(&psensor->list);
  2000. r = dev_get_sensor_manage_info(dm->db, 0, psensor); if(r) return -1;
  2001. dic = dictionary_new(0); if(!dic) return -1;
  2002. list_for_each_entry(tmp, &psensor->list, list) {
  2003. if(!tmp) break;
  2004. r = proc_sensor(path, PARAS_CHECK, tmp); if(r) break;
  2005. sprintf(token, "sensor:sensor%d.id", i);
  2006. r = ini_rw(dic, token, &tmp->sensor_id, sizeof(tmp->sensor_id), TYPE_INT, op, 1); if(r) break;
  2007. sprintf(token, "sensor:sensor%d.type", i);
  2008. r = ini_rw(dic, token, &tmp->sensor_type, sizeof(tmp->sensor_type), TYPE_INT, op, 1); if(r) break;
  2009. sprintf(token, "sensor:sensor%d.name", i);
  2010. r = ini_rw(dic, token, tmp->sensor_name, sizeof(tmp->sensor_name), TYPE_STR, op, 1); if(r) break;
  2011. sprintf(token, "sensor:sensor%d.iface", i);
  2012. r = ini_rw(dic, token, &tmp->sensor_interface_type, sizeof(tmp->sensor_interface_type), TYPE_INT, op, 1); if(r) break;
  2013. sprintf(token, "sensor:sensor%d.port", i);
  2014. r = ini_rw(dic, token, tmp->sensor_port_name, sizeof(tmp->sensor_port_name), TYPE_STR, op, 1); if(r) break;
  2015. sprintf(token, "sensor:sensor%d.addr", i);
  2016. r = ini_rw(dic, token, &tmp->sensor_addr, sizeof(tmp->sensor_addr), TYPE_INT, op, 1); if(r) break;
  2017. sprintf(token, "sensor:sensor%d.baudrate", i);
  2018. r = ini_rw(dic, token, &tmp->sensor_baud, sizeof(tmp->sensor_baud), TYPE_INT, op, 1); if(r) break;
  2019. sprintf(token, "sensor:sensor%d.vcnt", i);
  2020. r = ini_rw(dic, token, &tmp->sensor_val_count, sizeof(tmp->sensor_val_count), TYPE_INT, op, 1); if(r) break;
  2021. //////////////////////
  2022. GlobalSensorOverManage *pover=&tmp->over_manager;
  2023. for(j=1; j<=2; j++) {
  2024. for(k=1; k<=2; k++) {
  2025. if(j==1) {
  2026. if(k==1) {
  2027. sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
  2028. r = ini_rw(dic, token, &pover->sensor_val1_upper_enabled, sizeof(pover->sensor_val1_upper_enabled), TYPE_INT, op, 1); if(r) break;
  2029. sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
  2030. r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold, sizeof(pover->sensor_val1_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2031. sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
  2032. r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl, sizeof(pover->sensor_val1_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2033. sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
  2034. r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl_para, sizeof(pover->sensor_val1_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2035. }
  2036. else {
  2037. sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
  2038. r = ini_rw(dic, token, &pover->sensor_val1_lower_enabled, sizeof(pover->sensor_val1_lower_enabled), TYPE_INT, op, 1); if(r) break;
  2039. sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
  2040. r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold, sizeof(pover->sensor_val1_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2041. sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
  2042. r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl, sizeof(pover->sensor_val1_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2043. sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
  2044. r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl_para, sizeof(pover->sensor_val1_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2045. }
  2046. }
  2047. else {
  2048. if(k==1) {
  2049. sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
  2050. r = ini_rw(dic, token, &pover->sensor_val2_upper_enabled, sizeof(pover->sensor_val2_upper_enabled), TYPE_INT, op, 1); if(r) break;
  2051. sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
  2052. r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold, sizeof(pover->sensor_val2_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2053. sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
  2054. r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl, sizeof(pover->sensor_val2_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2055. sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
  2056. r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl_para, sizeof(pover->sensor_val2_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2057. }
  2058. else {
  2059. sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
  2060. r = ini_rw(dic, token, &pover->sensor_val2_lower_enabled, sizeof(pover->sensor_val2_lower_enabled), TYPE_INT, op, 1); if(r) break;
  2061. sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
  2062. r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold, sizeof(pover->sensor_val2_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2063. sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
  2064. r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl, sizeof(pover->sensor_val2_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2065. sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
  2066. r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl_para, sizeof(pover->sensor_val2_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2067. }
  2068. }
  2069. if(r) break;
  2070. }
  2071. if(r) break;
  2072. }
  2073. if(r) break;
  2074. cnt++;
  2075. i++;
  2076. }
  2077. list_for_each_entry_safe(node,next,&psensor->list,list) {
  2078. list_del(&node->list); free(node);
  2079. }
  2080. if(cnt>0) {
  2081. r = ini_dump(path, dic);
  2082. }
  2083. }
  2084. break;
  2085. default:
  2086. return -1;
  2087. }
  2088. iniparser_freedict(dic);
  2089. return r;
  2090. }
  2091. static int get_power(int ch_id, GlobalPowerManger *power)
  2092. {
  2093. int quit=0;
  2094. GlobalDeviceManager *dm=get_dm();
  2095. GlobalPowerManger *hd,*tmp;
  2096. hd = tmp = &dm->_globalPowerManger;
  2097. while(tmp) {
  2098. if(tmp->product_ch_id==ch_id) {
  2099. if(power) *power = *tmp;
  2100. return 0;
  2101. }
  2102. if(tmp->list.next==&hd->list) break;
  2103. tmp = (GlobalPowerManger*)((uint32_t)tmp->list.next - offsetof(typeof(*tmp),list));
  2104. }
  2105. return -1;
  2106. }
  2107. static int proc_power(char *path, int op, GlobalPowerManger *power)
  2108. {
  2109. int i,j,r=0;
  2110. char temp[100];
  2111. char *p,token[100];
  2112. dictionary *dic=NULL;
  2113. GlobalPowerManger power2,*ppower=power;
  2114. GlobalDeviceManager *dm=get_dm();
  2115. switch(op) {
  2116. case PARAS_CHECK:
  2117. {
  2118. if(ppower->product_ch_addr<0) {
  2119. LOGE("___ check power, product_ch_addr %d is invalid, must greater than 0\n", ppower->product_ch_addr);
  2120. r = -1;
  2121. }
  2122. return r;
  2123. }
  2124. break;
  2125. case PARAS_CREATE:
  2126. {
  2127. FILE *fp=fopen(path, "a+");
  2128. if(!fp) {
  2129. LOGE("___ %s open failed\n", path);
  2130. return -1;
  2131. }
  2132. fprintf(fp, "[power]\n");
  2133. fprintf(fp, "\n");
  2134. fclose(fp);
  2135. return 0;
  2136. }
  2137. break;
  2138. case PARAS_READ:
  2139. {
  2140. float f;
  2141. int x,chk_ok=0,cnt_ok=0;
  2142. GlobalPowerManger *tmp=&power2;
  2143. dic = iniparser_load(path); if(!dic) return -1;
  2144. memset(tmp, 0, sizeof(GlobalPowerManger));
  2145. for(x=0; x<2; x++) {
  2146. for(i=1; i<=dm->brdMax; i++) {+
  2147. sprintf(token, "power:channel%d.addr",i);
  2148. r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op, 1); if(r) break;
  2149. tmp->product_ch_id = i;
  2150. sprintf(token, "power:channel%d.ch_addr",tmp->product_ch_id);
  2151. r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op, 1); if(r) break;
  2152. sprintf(token, "power:channel%d.name",tmp->product_ch_id);
  2153. r = ini_rw(dic, token, tmp->product_ch_name, sizeof(tmp->product_ch_name), TYPE_INT, op, 1); if(r) break;
  2154. sprintf(token, "power:channel%d.type",tmp->product_ch_id);
  2155. r = ini_rw(dic, token, &tmp->product_ch_type, sizeof(tmp->product_ch_type), TYPE_INT, op, 1); if(r) break;
  2156. sprintf(token, "power:channel%d.status",tmp->product_ch_id);
  2157. r = ini_rw(dic, token, &tmp->product_ch_status, sizeof(tmp->product_ch_status), TYPE_INT, op, 1); if(r) break;
  2158. sprintf(token, "power:channel%d.start_delay",tmp->product_ch_id);
  2159. r = ini_rw(dic, token, &tmp->product_ch_start_delay, sizeof(tmp->product_ch_start_delay), TYPE_INT, op, 1); if(r) break;
  2160. sprintf(token, "power:channel%d.stop_delay",tmp->product_ch_id);
  2161. r = ini_rw(dic, token, &tmp->product_ch_stop_delay, sizeof(tmp->product_ch_stop_delay), TYPE_INT, op, 1); if(r) break;
  2162. ///////////voltage//////////
  2163. GlobalOverManager *pover=&tmp->global_over_manager;
  2164. //upper
  2165. sprintf(token, "power:channel%d.threshold.voltate.up.en",tmp->product_ch_id);
  2166. r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op, 1); if(r) break;
  2167. sprintf(token, "power:channel%d.threshold.voltate.up.val",tmp->product_ch_id);
  2168. r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2169. sprintf(token, "power:channel%d.threshold.voltate.up.act",tmp->product_ch_id);
  2170. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2171. sprintf(token, "power:channel%d.threshold.voltate.up.para",tmp->product_ch_id);
  2172. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2173. //lower
  2174. sprintf(token, "power:channel%d.threshold.voltate.lo.en",tmp->product_ch_id);
  2175. r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op, 1); if(r) break;
  2176. sprintf(token, "power:channel%d.threshold.voltate.lo.val",tmp->product_ch_id);
  2177. r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2178. sprintf(token, "power:channel%d.threshold.voltate.lo.act",tmp->product_ch_id);
  2179. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2180. sprintf(token, "power:channel%d.threshold.voltate.lo.para",tmp->product_ch_id);
  2181. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2182. ///////////current//////////
  2183. sprintf(token, "power:channel%d.threshold.current.up.en",tmp->product_ch_id);
  2184. r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op, 1); if(r) break;
  2185. sprintf(token, "power:channel%d.threshold.current.up.val",tmp->product_ch_id);
  2186. r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2187. sprintf(token, "power:channel%d.threshold.current.up.act",tmp->product_ch_id);
  2188. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2189. sprintf(token, "power:channel%d.threshold.current.up.para",tmp->product_ch_id);
  2190. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2191. ///////////power//////////
  2192. sprintf(token, "power:channel%d.threshold.power.up.en",tmp->product_ch_id);
  2193. r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op, 1); if(r) break;
  2194. sprintf(token, "power:channel%d.threshold.power.up.val",tmp->product_ch_id);
  2195. r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2196. sprintf(token, "power:channel%d.threshold.power.up.act",tmp->product_ch_id);
  2197. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2198. sprintf(token, "power:channel%d.threshold.power.up.para",tmp->product_ch_id);
  2199. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2200. ///////////power consumption//////////
  2201. sprintf(token, "power:channel%d.threshold.powerc.up.en",tmp->product_ch_id);
  2202. r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op, 1); if(r) break;
  2203. sprintf(token, "power:channel%d.threshold.powerc.up.val",tmp->product_ch_id);
  2204. r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2205. sprintf(token, "power:channel%d.threshold.powerc.up.act",tmp->product_ch_id);
  2206. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2207. sprintf(token, "power:channel%d.threshold.powerc.up.para",tmp->product_ch_id);
  2208. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2209. if(chk_ok==0) {
  2210. r = proc_power(path, PARAS_CHECK, tmp); if(r) break;
  2211. cnt_ok++;
  2212. }
  2213. else {
  2214. GlobalPowerManger pwr;
  2215. r = dev_update_power_manage_genera_info(dm->db, 0, tmp->product_ch_id, tmp); if(r) break;
  2216. r = dev_update_power_manage_over_info(dm->db, 0, tmp->product_ch_id, tmp); if(r) break;
  2217. r = get_power(tmp->product_ch_id, &pwr); if(r) break;
  2218. tmp->_PowerInfo = pwr._PowerInfo;
  2219. r = g_switch_set_all_single_threshold(&dm->_globalRelaySampManger,
  2220. tmp->product_ch_type, tmp->product_saddr,
  2221. tmp->product_ch_addr, tmp);
  2222. }
  2223. }
  2224. if(x==0) {
  2225. if(cnt_ok==0) break;
  2226. chk_ok = 1;
  2227. }
  2228. else {
  2229. if(r) {
  2230. if(i>cnt_ok) {
  2231. r = 0; break;
  2232. }
  2233. }
  2234. }
  2235. }
  2236. }
  2237. break;
  2238. case PARAS_WRITE:
  2239. {
  2240. int cnt=0;
  2241. GlobalPowerManger *tmp,*node,*next;
  2242. ppower = &power2;
  2243. INIT_LIST_HEAD(&ppower->list);
  2244. r = dev_get_power_info(dm->db, ppower); if(r) return -1;
  2245. dic = dictionary_new(0); if(!dic) return -1;
  2246. list_for_each_entry(tmp, &ppower->list, list) {
  2247. if(!tmp) break;
  2248. r = proc_power(path, PARAS_CHECK, tmp); if(r) break;
  2249. sprintf(token, "power:channel%d.addr",tmp->product_ch_id);
  2250. r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op, 1); if(r) break;
  2251. sprintf(token, "power:channel%d.ch_addr",tmp->product_ch_id);
  2252. r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op, 1); if(r) break;
  2253. sprintf(token, "power:channel%d.name",tmp->product_ch_id);
  2254. r = ini_rw(dic, token, tmp->product_ch_name, sizeof(tmp->product_ch_name), TYPE_INT, op, 1); if(r) break;
  2255. sprintf(token, "power:channel%d.type",tmp->product_ch_id);
  2256. r = ini_rw(dic, token, &tmp->product_ch_type, sizeof(tmp->product_ch_type), TYPE_INT, op, 1); if(r) break;
  2257. sprintf(token, "power:channel%d.status",tmp->product_ch_id);
  2258. r = ini_rw(dic, token, &tmp->product_ch_status, sizeof(tmp->product_ch_status), TYPE_INT, op, 1); if(r) break;
  2259. sprintf(token, "power:channel%d.start_delay",tmp->product_ch_id);
  2260. r = ini_rw(dic, token, &tmp->product_ch_start_delay, sizeof(tmp->product_ch_start_delay), TYPE_INT, op, 1); if(r) break;
  2261. sprintf(token, "power:channel%d.stop_delay",tmp->product_ch_id);
  2262. r = ini_rw(dic, token, &tmp->product_ch_stop_delay, sizeof(tmp->product_ch_stop_delay), TYPE_INT, op, 1); if(r) break;
  2263. ///////////voltage//////////
  2264. GlobalOverManager *pover=&tmp->global_over_manager;
  2265. //upper
  2266. sprintf(token, "power:channel%d.threshold.voltate.up.en",tmp->product_ch_id);
  2267. r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op, 1); if(r) break;
  2268. sprintf(token, "power:channel%d.threshold.voltate.up.val",tmp->product_ch_id);
  2269. r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2270. sprintf(token, "power:channel%d.threshold.voltate.up.act",tmp->product_ch_id);
  2271. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2272. sprintf(token, "power:channel%d.threshold.voltate.up.para",tmp->product_ch_id);
  2273. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2274. //lower
  2275. sprintf(token, "power:channel%d.threshold.voltate.lo.en",tmp->product_ch_id);
  2276. r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op, 1); if(r) break;
  2277. sprintf(token, "power:channel%d.threshold.voltate.lo.val",tmp->product_ch_id);
  2278. r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2279. sprintf(token, "power:channel%d.threshold.voltate.lo.act",tmp->product_ch_id);
  2280. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2281. sprintf(token, "power:channel%d.threshold.voltate.lo.para",tmp->product_ch_id);
  2282. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2283. ///////////current//////////
  2284. sprintf(token, "power:channel%d.threshold.current.up.en",tmp->product_ch_id);
  2285. r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op, 1); if(r) break;
  2286. sprintf(token, "power:channel%d.threshold.current.up.val",tmp->product_ch_id);
  2287. r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2288. sprintf(token, "power:channel%d.threshold.current.up.act",tmp->product_ch_id);
  2289. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2290. sprintf(token, "power:channel%d.threshold.current.up.para",tmp->product_ch_id);
  2291. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2292. ///////////power//////////
  2293. sprintf(token, "power:channel%d.threshold.power.up.en",tmp->product_ch_id);
  2294. r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op, 1); if(r) break;
  2295. sprintf(token, "power:channel%d.threshold.power.up.val",tmp->product_ch_id);
  2296. r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2297. sprintf(token, "power:channel%d.threshold.power.up.act",tmp->product_ch_id);
  2298. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2299. sprintf(token, "power:channel%d.threshold.power.up.para",tmp->product_ch_id);
  2300. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2301. ///////////power consumption//////////
  2302. sprintf(token, "power:channel%d.threshold.powerc.up.en",tmp->product_ch_id);
  2303. r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op, 1); if(r) break;
  2304. sprintf(token, "power:channel%d.threshold.powerc.up.val",tmp->product_ch_id);
  2305. r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2306. sprintf(token, "power:channel%d.threshold.powerc.up.act",tmp->product_ch_id);
  2307. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2308. sprintf(token, "power:channel%d.threshold.powerc.up.para",tmp->product_ch_id);
  2309. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2310. cnt++;
  2311. }
  2312. list_for_each_entry_safe(node,next,&ppower->list,list) {
  2313. list_del(&node->list); free(node);
  2314. }
  2315. if(cnt>0) {
  2316. r = ini_dump(path, dic);
  2317. }
  2318. }
  2319. break;
  2320. default:
  2321. return -1;
  2322. }
  2323. iniparser_freedict(dic);
  2324. return r;
  2325. }
  2326. static int proc_power3(char *path, int op, GlobalTreeACManager *power)
  2327. {
  2328. int i,j,r=0;
  2329. char temp[100];
  2330. char *p,token[100];
  2331. dictionary *dic=NULL;
  2332. GlobalTreeACManager power2,*ppower=power;
  2333. GlobalDeviceManager *dm=get_dm();
  2334. int pwrtype=dm->_globalDevInfo.product.pwr_type;
  2335. switch(op) {
  2336. case PARAS_CHECK:
  2337. {
  2338. if(ppower->product_ch_addr<0) {
  2339. LOGE("___ check power, product_ch_addr %d is invalid, must greater than 0\n", ppower->product_ch_addr);
  2340. r = -1;
  2341. }
  2342. return r;
  2343. }
  2344. break;
  2345. case PARAS_CREATE:
  2346. {
  2347. FILE *fp=fopen(path, "a+");
  2348. if(!fp) {
  2349. LOGE("___ %s open failed\n", path);
  2350. return -1;
  2351. }
  2352. fprintf(fp, "[power]\n");
  2353. fprintf(fp, "\n");
  2354. fclose(fp);
  2355. return 0;
  2356. }
  2357. break;
  2358. case PARAS_READ:
  2359. {
  2360. float f;
  2361. int x,chk_ok=0,cnt_ok=0;
  2362. GlobalPowerManger pwr;
  2363. GlobalTreeACManager *tmp=&power2;
  2364. dic = iniparser_load(path); if(!dic) return -1;
  2365. memset(tmp, 0, sizeof(GlobalTreeACManager));
  2366. for(x=0; x<2; x++) {
  2367. for(i=1; i<=dm->brdMax*3; i++) {
  2368. int channelID = i;
  2369. sprintf(token, "power:channel%d.addr",i);
  2370. r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op, 1); if(r) break;
  2371. tmp->product_ph_id = channelID-1;
  2372. sprintf(token, "power:channel%d.ch_addr",channelID);
  2373. r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op, 1); if(r) break;
  2374. sprintf(token, "power:channel%d.ch_id",channelID);
  2375. r = ini_rw(dic, token, &tmp->product_ch_id, sizeof(tmp->product_ch_id), TYPE_INT, op, 1); if(r) break;
  2376. sprintf(token, "power:channel%d.ph_type",channelID);
  2377. r = ini_rw(dic, token, &tmp->product_ph_type, sizeof(tmp->product_ph_type), TYPE_INT, op, 1); if(r) break;
  2378. /*
  2379. sprintf(token, "power:channel%d.ph_otype",channelID);
  2380. r = ini_rw(dic, token, &tmp->product_ph_outputType, sizeof(tmp->product_ph_outputType), TYPE_INT, op, 1); if(r) break;
  2381. sprintf(token, "power:channel%d.ph_ostat",channelID);
  2382. r = ini_rw(dic, token, &tmp->product_ph_outputStatus, sizeof(tmp->product_ph_outputStatus), TYPE_INT, op, 1); if(r) break;
  2383. */
  2384. ///////////voltage//////////
  2385. GlobalOverManager *pover=&tmp->global_over_manager;
  2386. //upper
  2387. sprintf(token, "power:channel%d.threshold.voltage.up.en",channelID);
  2388. r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op, 1); if(r) break;
  2389. sprintf(token, "power:channel%d.threshold.voltage.up.val",channelID);
  2390. r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2391. sprintf(token, "power:channel%d.threshold.voltage.up.act",channelID);
  2392. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2393. sprintf(token, "power:channel%d.threshold.voltage.up.para",channelID);
  2394. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2395. //lower
  2396. sprintf(token, "power:channel%d.threshold.voltage.lo.en",channelID);
  2397. r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op, 1); if(r) break;
  2398. sprintf(token, "power:channel%d.threshold.voltage.lo.val",channelID);
  2399. r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2400. sprintf(token, "power:channel%d.threshold.voltage.lo.act",channelID);
  2401. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2402. sprintf(token, "power:channel%d.threshold.voltage.lo.para",channelID);
  2403. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2404. ///////////current//////////
  2405. sprintf(token, "power:channel%d.threshold.current.up.en",channelID);
  2406. r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op, 1); if(r) break;
  2407. sprintf(token, "power:channel%d.threshold.current.up.val",channelID);
  2408. r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2409. sprintf(token, "power:channel%d.threshold.current.up.act",channelID);
  2410. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2411. sprintf(token, "power:channel%d.threshold.current.up.para",channelID);
  2412. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2413. ///////////power//////////
  2414. sprintf(token, "power:channel%d.threshold.power.up.en",channelID);
  2415. r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op, 1); if(r) break;
  2416. sprintf(token, "power:channel%d.threshold.power.up.val",channelID);
  2417. r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2418. sprintf(token, "power:channel%d.threshold.power.up.act",channelID);
  2419. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2420. sprintf(token, "power:channel%d.threshold.power.up.para",channelID);
  2421. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2422. ///////////power consumption//////////
  2423. sprintf(token, "power:channel%d.threshold.powerc.up.en",channelID);
  2424. r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op, 1); if(r) break;
  2425. sprintf(token, "power:channel%d.threshold.powerc.up.val",channelID);
  2426. r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2427. sprintf(token, "power:channel%d.threshold.powerc.up.act",channelID);
  2428. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2429. sprintf(token, "power:channel%d.threshold.powerc.up.para",channelID);
  2430. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2431. if(chk_ok==0) {
  2432. r = proc_power3(path, PARAS_CHECK, tmp); if(r) break;
  2433. cnt_ok++;
  2434. }
  2435. else {
  2436. //PowerInfo tt;
  2437. //r = g_switch_get_t_ac_out_info(&dm->_globalRelaySampManger, tmp->product_saddr, tmp->product_ch_id, &tt); if(r) break;
  2438. //r = dev_get_power_manage_info2(dm->db, tmp->product_ch_id, &pwr); if(r) break;
  2439. r = get_power(tmp->product_ch_id, &pwr); if(r) break;
  2440. pwr.global_over_manager = tmp->global_over_manager;
  2441. r = dev_update_power_manage_over_info(dm->db, 0, pwr.product_ch_id, &pwr); if(r) break;
  2442. r = dev_update_t_ac_power_manage_over_info(dm->db, tmp); if(r) break;
  2443. r = g_switch_set_all_single_threshold(&dm->_globalRelaySampManger,
  2444. pwr.product_ch_type,
  2445. tmp->product_saddr,
  2446. tmp->product_ch_addr,
  2447. &pwr);
  2448. }
  2449. }
  2450. if(x==0) {
  2451. if(cnt_ok==0) break;
  2452. chk_ok = 1;
  2453. }
  2454. else {
  2455. if(i>cnt_ok) {
  2456. r = 0; break;
  2457. }
  2458. }
  2459. }
  2460. }
  2461. break;
  2462. case PARAS_WRITE:
  2463. {
  2464. int cnt=0,channelID=-1;
  2465. GlobalTreeACManager *tmp,*node,*next;
  2466. ppower = &power2;
  2467. INIT_LIST_HEAD(&ppower->list_Tree_AC);
  2468. r = dev_get_ac_power_info(dm->db, ppower); if(r) return -1;
  2469. dic = dictionary_new(0); if(!dic) return -1;
  2470. list_for_each_entry(tmp, &ppower->list_Tree_AC, list_Tree_AC) {
  2471. if(!tmp) break;
  2472. //if(tmp->product_ph_id%3) continue;
  2473. //channelID = tmp->product_ph_id/3+1;
  2474. channelID = tmp->product_ph_id+1;
  2475. r = proc_power3(path, PARAS_CHECK, tmp); if(r) break;
  2476. sprintf(token, "power:channel%d.addr",channelID);
  2477. r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op, 1); if(r) break;
  2478. sprintf(token, "power:channel%d.ch_id",channelID);
  2479. r = ini_rw(dic, token, &tmp->product_ch_id, sizeof(tmp->product_ch_id), TYPE_INT, op, 1); if(r) break;
  2480. sprintf(token, "power:channel%d.ch_addr",channelID);
  2481. r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op, 1); if(r) break;
  2482. //sprintf(token, "power:channel%d.ph_id",channelID);
  2483. //r = ini_rw(dic, token, &tmp->product_ph_id, sizeof(tmp->product_ph_id), TYPE_INT, op, 1); if(r) break;
  2484. sprintf(token, "power:channel%d.ph_type",channelID);
  2485. r = ini_rw(dic, token, &tmp->product_ph_type, sizeof(tmp->product_ph_type), TYPE_INT, op, 1); if(r) break;
  2486. /*
  2487. sprintf(token, "power:channel%d.ph_otype",channelID);
  2488. r = ini_rw(dic, token, &tmp->product_ph_outputType, sizeof(tmp->product_ph_outputType), TYPE_INT, op, 1); if(r) break;
  2489. sprintf(token, "power:channel%d.ph_ostat",channelID);
  2490. r = ini_rw(dic, token, &tmp->product_ph_outputStatus, sizeof(tmp->product_ph_outputStatus), TYPE_INT, op, 1); if(r) break;
  2491. */
  2492. ///////////voltage//////////
  2493. GlobalOverManager *pover=&tmp->global_over_manager;
  2494. //upper
  2495. sprintf(token, "power:channel%d.threshold.voltage.up.en",channelID);
  2496. r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op, 1); if(r) break;
  2497. sprintf(token, "power:channel%d.threshold.voltage.up.val",channelID);
  2498. r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2499. sprintf(token, "power:channel%d.threshold.voltage.up.act",channelID);
  2500. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2501. sprintf(token, "power:channel%d.threshold.voltage.up.para",channelID);
  2502. r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2503. //lower
  2504. sprintf(token, "power:channel%d.threshold.voltage.lo.en",channelID);
  2505. r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op, 1); if(r) break;
  2506. sprintf(token, "power:channel%d.threshold.voltage.lo.val",channelID);
  2507. r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2508. sprintf(token, "power:channel%d.threshold.voltage.lo.act",channelID);
  2509. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2510. sprintf(token, "power:channel%d.threshold.voltage.lo.para",channelID);
  2511. r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2512. ///////////current//////////
  2513. sprintf(token, "power:channel%d.threshold.current.up.en",channelID);
  2514. r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op, 1); if(r) break;
  2515. sprintf(token, "power:channel%d.threshold.current.up.val",channelID);
  2516. r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2517. sprintf(token, "power:channel%d.threshold.current.up.act",channelID);
  2518. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2519. sprintf(token, "power:channel%d.threshold.current.up.para",channelID);
  2520. r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2521. ///////////power//////////
  2522. sprintf(token, "power:channel%d.threshold.power.up.en",channelID);
  2523. r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op, 1); if(r) break;
  2524. sprintf(token, "power:channel%d.threshold.power.up.val",channelID);
  2525. r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2526. sprintf(token, "power:channel%d.threshold.power.up.act",channelID);
  2527. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2528. sprintf(token, "power:channel%d.threshold.power.up.para",channelID);
  2529. r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2530. ///////////power consumption//////////
  2531. sprintf(token, "power:channel%d.threshold.powerc.up.en",channelID);
  2532. r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op, 1); if(r) break;
  2533. sprintf(token, "power:channel%d.threshold.powerc.up.val",channelID);
  2534. r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op, 1); if(r) break;
  2535. sprintf(token, "power:channel%d.threshold.powerc.up.act",channelID);
  2536. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op, 1); if(r) break;
  2537. sprintf(token, "power:channel%d.threshold.powerc.up.para",channelID);
  2538. r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op, 1); if(r) break;
  2539. cnt++;
  2540. }
  2541. list_for_each_entry_safe(node,next,&ppower->list_Tree_AC,list_Tree_AC) {
  2542. list_del(&node->list_Tree_AC); free(node);
  2543. }
  2544. if(cnt>0) {
  2545. r = ini_dump(path, dic);
  2546. }
  2547. }
  2548. break;
  2549. default:
  2550. return -1;
  2551. }
  2552. iniparser_freedict(dic);
  2553. return r;
  2554. }
  2555. #if 0
  2556. static int proc_timer(char *path, int op, timer_data_t *timer)
  2557. {
  2558. int r=0;
  2559. char temp[100];
  2560. char *p,*token=NULL;
  2561. FILE *fp=NULL;
  2562. dictionary *dic=NULL;
  2563. if(op==PARAS_CHECK) {
  2564. if(ptotal->voltage<=0) {
  2565. LOGE("___ check timer, voltage is invalid, must greater than 0\n");
  2566. r = -1;
  2567. }
  2568. return r;
  2569. }
  2570. else if(op==PARAS_CREATE) {
  2571. fp = fopen(path, "a+");
  2572. if(!fp) {
  2573. LOGE("___ %s open failed\n", path);
  2574. return -1;
  2575. }
  2576. fprintf(fp, "[mqtt]\n");
  2577. for(i=0; i<MQTT_SER_MAX; i++) {
  2578. if(mqtt->ser[i].id>=0) {
  2579. fprintf(fp, "broker%d.plat = \"%d\"\n", i+1,mqtt->ser[i].plat);
  2580. fprintf(fp, "broker%d.mode = \"%d\"\n", i+1,mqtt->ser[i].mode);
  2581. //fprintf(fp, "broker%d.proto = \"%s\"\n", i+1,mqtt->ser[i].proto);
  2582. fprintf(fp, "broker%d.name = \"%s\"\n", i+1,mqtt->ser[i].name);
  2583. fprintf(fp, "broker%d.server = \"%s\"\n", i+1,mqtt->ser[i].server);
  2584. fprintf(fp, "broker%d.port = \"%s\"\n", i+1,mqtt->ser[i].port);
  2585. fprintf(fp, "broker%d.clientID = \"%s\"\n", i+1,mqtt->ser[i].clientID);
  2586. fprintf(fp, "broker%d.user = \"%s\"\n", i+1,mqtt->ser[i].user);
  2587. fprintf(fp, "broker%d.password = \"%s\"\n", i+1,mqtt->ser[i].password);
  2588. fprintf(fp, "broker%d.cert = \"%s\"\n", i+1,mqtt->ser[i].cert);
  2589. fprintf(fp, "\n");
  2590. }
  2591. }
  2592. fclose(fp);
  2593. return 0;
  2594. }
  2595. else {
  2596. if (op==PARAS_WRITE) {
  2597. r = proc_timer(path, PARAS_CHECK, timer);
  2598. if(r) {
  2599. return -1;
  2600. }
  2601. }
  2602. dic = iniparser_load(path);
  2603. }
  2604. token = "ptotal:voltage";
  2605. if(op==PARAS_READ) {
  2606. r = iniparser_getint(dic, token, -1);
  2607. if(r==-1) {
  2608. LOGE("___ iniparser_getint %s failed\n", token);
  2609. return -1;
  2610. }
  2611. ptotal->voltage = r;
  2612. }
  2613. else {
  2614. sprintf(temp, "%d", ptotal->voltage);
  2615. r = iniparser_set(dic, token, temp);
  2616. if(r) {
  2617. LOGE("___ iniparser_set %s failed\n", token);
  2618. return -1;
  2619. }
  2620. }
  2621. if(op==PARAS_READ) {
  2622. r = proc_timer(path, PARAS_CHECK, timer);
  2623. if(r) {
  2624. return -1;
  2625. }
  2626. }
  2627. quit:
  2628. iniparser_freedict(dic);
  2629. return r;
  2630. }
  2631. static int proc_breaker(char *path, int op, GlobalBreakerManager *breaker)
  2632. {
  2633. int i,r=0;
  2634. char temp[100];
  2635. char *p,*token=NULL;
  2636. FILE *fp=NULL;
  2637. dictionary *dic=NULL;
  2638. if(op==PARAS_CHECK) {
  2639. if(breaker->voltage<=0) {
  2640. LOGE("___ check breaker, voltage is invalid, must greater than 0\n");
  2641. r = -1;
  2642. }
  2643. return r;
  2644. }
  2645. else if(op==PARAS_CREATE) {
  2646. fp = fopen(path, "a+");
  2647. if(!fp) {
  2648. LOGE("___ %s open failed\n", path);
  2649. return -1;
  2650. }
  2651. fprintf(fp, "[mqtt]\n");
  2652. for(i=0; i<MQTT_SER_MAX; i++) {
  2653. if(mqtt->ser[i].id>=0) {
  2654. fprintf(fp, "broker%d.plat = \"%d\"\n", i+1,mqtt->ser[i].plat);
  2655. fprintf(fp, "broker%d.mode = \"%d\"\n", i+1,mqtt->ser[i].mode);
  2656. //fprintf(fp, "broker%d.proto = \"%s\"\n", i+1,mqtt->ser[i].proto);
  2657. fprintf(fp, "broker%d.name = \"%s\"\n", i+1,mqtt->ser[i].name);
  2658. fprintf(fp, "broker%d.server = \"%s\"\n", i+1,mqtt->ser[i].server);
  2659. fprintf(fp, "broker%d.port = \"%s\"\n", i+1,mqtt->ser[i].port);
  2660. fprintf(fp, "broker%d.clientID = \"%s\"\n", i+1,mqtt->ser[i].clientID);
  2661. fprintf(fp, "broker%d.user = \"%s\"\n", i+1,mqtt->ser[i].user);
  2662. fprintf(fp, "broker%d.password = \"%s\"\n", i+1,mqtt->ser[i].password);
  2663. fprintf(fp, "broker%d.cert = \"%s\"\n", i+1,mqtt->ser[i].cert);
  2664. fprintf(fp, "\n");
  2665. }
  2666. }
  2667. fclose(fp);
  2668. return 0;
  2669. }
  2670. else {
  2671. if(op==PARAS_WRITE) {
  2672. r = proc_breaker(path, PARAS_CHECK, breaker);
  2673. if(r) {
  2674. return -1;
  2675. }
  2676. }
  2677. dic = iniparser_load(path);
  2678. }
  2679. token = "ptotal:voltage";
  2680. if(op==PARAS_READ) {
  2681. r = iniparser_getint(dic, token, -1);
  2682. if(r==-1) {
  2683. LOGE("___ iniparser_getint %s failed\n", token);
  2684. return -1;
  2685. }
  2686. ptotal->voltage = r;
  2687. }
  2688. else {
  2689. sprintf(temp, "%d", ptotal->voltage);
  2690. r = iniparser_set(dic, token, temp);
  2691. if(r) {
  2692. LOGE("___ iniparser_set %s failed\n", token);
  2693. return -1;
  2694. }
  2695. }
  2696. if(op==PARAS_READ) {
  2697. r = proc_breaker(path, PARAS_CHECK, breaker);
  2698. if(r) {
  2699. return -1;
  2700. }
  2701. }
  2702. quit:
  2703. iniparser_freedict(dic);
  2704. return r;
  2705. }
  2706. #endif
  2707. /////////////////////////////////////////////////////////////////////////////////
  2708. static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
  2709. {
  2710. int r=-1;
  2711. dictionary *dic=iniparser_load(path);
  2712. if(dic == NULL){
  2713. return NULL;
  2714. }
  2715. r = proc_prod(dic, PARAS_READ, &info->product);
  2716. if(r) {
  2717. LOGE("___proc_prod failed\n");
  2718. }
  2719. r = proc_modbus(dic, PARAS_READ, &info->cascade);
  2720. if(r) {
  2721. LOGE("___proc_modbus failed\n");
  2722. }
  2723. r = proc_ptotal(dic, PARAS_READ, &info->ptotal);
  2724. if(r) {
  2725. LOGE("___proc_ptotal failed\n");
  2726. }
  2727. r = proc_webcfg(dic, PARAS_READ, &info->webcfg);
  2728. if(r) {
  2729. LOGE("___proc_webcfg failed\n");
  2730. }
  2731. r = proc_misc(dic, PARAS_READ, &info->misc);
  2732. if(r) {
  2733. LOGE("___proc_misc failed\n");
  2734. }
  2735. return dic;
  2736. }
  2737. static int ini_check(char *path)
  2738. {
  2739. GlobalDeviceInfo info=DFLT_PARAS;
  2740. dictionary *dic=ini_load(path, &info);
  2741. if(!dic) {
  2742. return -1;
  2743. }
  2744. iniparser_freedict(dic);
  2745. return 0;
  2746. }
  2747. static int ini_reset(paras_handle_t *h)
  2748. {
  2749. int r;
  2750. FILE *fp=NULL;
  2751. char tmp[200];
  2752. GlobalDeviceInfo *info=&DFLT_PARAS;
  2753. fp = fopen(h->path, "w");
  2754. if (fp==NULL) {
  2755. LOGE("ini_reset, fopen %s failed\n", h->path);
  2756. return -1;
  2757. }
  2758. fprintf(fp, "[product]\n");
  2759. fprintf(fp, "id = \"%d\"\n", info->product.id);
  2760. fprintf(fp, "number = \"%s\"\n", info->product.number);
  2761. fprintf(fp, "name = \"%s\"\n", info->product.name);
  2762. fprintf(fp, "type = \"%d\"\n", info->product.type);
  2763. fprintf(fp, "pwrtype = \"%d\"\n", info->product.pwr_type);
  2764. //fprintf(fp, "version = %s\\"n", info->product.version);
  2765. fprintf(fp, "language = \"%d\"\n", info->product.language);
  2766. fprintf(fp, "samptime = \"%d\"\n", info->product.samp_time);
  2767. fprintf(fp, "savetime = \"%d\"\n", info->product.save_time);
  2768. fprintf(fp, "ph_group = \"%d\"\n", info->product.ph_group);
  2769. fprintf(fp, "ch_delay = \"%d\"\n", info->product.ch_delay);
  2770. fprintf(fp, "\n");
  2771. fprintf(fp, "[modbus]\n");
  2772. fprintf(fp, "mode = \"%d\"\n", info->cascade.mode);
  2773. fprintf(fp, "address = \"%d\"\n", info->cascade.addr);
  2774. fprintf(fp, "baudrate = \"%d\"\n", info->cascade.baudrate);
  2775. fprintf(fp, "\n");
  2776. fprintf(fp, "[ptotal]\n");
  2777. fprintf(fp, "voltage = \"%d\"\n", info->ptotal.voltage);
  2778. fprintf(fp, "current = \"%d\"\n", info->ptotal.current);
  2779. fprintf(fp, "power = \"%d\"\n", info->ptotal.power);
  2780. fprintf(fp, "brd_max = \"%d\"\n", info->ptotal.brdMax);
  2781. fprintf(fp, "\n");
  2782. fprintf(fp, "[webcfg]\n");
  2783. fprintf(fp, "monway = \"%d\"\n", info->webcfg.monway);
  2784. fprintf(fp, "netsw = \"%d\"\n", info->webcfg.netsw);
  2785. fprintf(fp, "nwire = \"%d\"\n", info->webcfg.nwire);
  2786. fprintf(fp, "ipv4 = \"%d\"\n", info->webcfg.ipv4);
  2787. fprintf(fp, "ipv6 = \"%d\"\n", info->webcfg.ipv6);
  2788. fprintf(fp, "\n");
  2789. fprintf(fp, "[misc]\n");
  2790. fprintf(fp, "watchdog = \"%d\"\n", info->misc.watchdog);
  2791. fprintf(fp, "fliptime = \"%d\"\n", info->misc.flip_time);
  2792. fprintf(fp, "\n");
  2793. fclose(fp);
  2794. sys_get_path(tmp, INI_FILE_BAK_NAME);
  2795. file_copy(tmp, h->path);
  2796. sys_chmod();
  2797. if(h->dic) {
  2798. iniparser_freedict(h->dic);
  2799. }
  2800. h->dic = ini_load(h->path, h->info);
  2801. return 0;
  2802. }
  2803. static int ini_free(paras_handle_t *h)
  2804. {
  2805. iniparser_freedict(h->dic);
  2806. return 0;
  2807. }
  2808. static int ini_save(paras_handle_t *h)
  2809. {
  2810. int r=-1;
  2811. r = proc_prod(h->dic, PARAS_WRITE, &h->info->product);
  2812. if(r) {
  2813. LOGE("___ini_w_dev failed\n");
  2814. return -1;
  2815. }
  2816. r = proc_modbus(h->dic, PARAS_WRITE, &h->info->cascade);
  2817. if(r) {
  2818. LOGE("___ini_w_modbus failed\n");
  2819. return -1;
  2820. }
  2821. FILE *fp=fopen(h->path, "w");
  2822. if(!fp) {
  2823. LOGE("___%s open failed\n", h->path);
  2824. return -1;
  2825. }
  2826. iniparser_dump_ini(h->dic, fp);
  2827. fclose(fp);
  2828. return 0;
  2829. }
  2830. #endif
  2831. ////////////////////////////////////////////////////////////
  2832. int paras_init(void)
  2833. {
  2834. int r=0;
  2835. GlobalDeviceManager *dm=get_dm();
  2836. paras_handle_t *h=&paraHandle;
  2837. lock_s_hold(LOCK_ID_PARAS);
  2838. memset(&paraHandle, 0, sizeof(paraHandle));
  2839. h->info = get_info();
  2840. *h->info=DFLT_PARAS;
  2841. sys_get_prod(h->info);
  2842. sys_get_path(h->path, INI_FILE_NAME);
  2843. h->dic = ini_load(h->path, h->info);
  2844. if(h->dic==NULL) {
  2845. r = ini_reset(h);
  2846. }
  2847. lock_s_release(LOCK_ID_PARAS);
  2848. return r;
  2849. }
  2850. int paras_deinit(void)
  2851. {
  2852. int r=0;
  2853. paras_handle_t *h=&paraHandle;
  2854. lock_s_hold(LOCK_ID_PARAS);
  2855. r = ini_free(h);
  2856. lock_s_release(LOCK_ID_PARAS);
  2857. return 0;
  2858. }
  2859. int paras_check(char *path)
  2860. {
  2861. int r=0;
  2862. lock_s_hold(LOCK_ID_PARAS);
  2863. r = ini_check(path);
  2864. lock_s_release(LOCK_ID_PARAS);
  2865. return r;
  2866. }
  2867. int paras_load(char *path)
  2868. {
  2869. int r=-1;
  2870. paras_handle_t *h=&paraHandle;
  2871. lock_s_hold(LOCK_ID_PARAS);
  2872. ini_free(h);
  2873. h->dic = ini_load(path, h->info);
  2874. if(h->dic) r = 0;
  2875. lock_s_release(LOCK_ID_PARAS);
  2876. return r;
  2877. }
  2878. int paras_reset(void)
  2879. {
  2880. int r=0;
  2881. paras_handle_t *h=&paraHandle;
  2882. lock_s_hold(LOCK_ID_PARAS);
  2883. ini_reset(h);
  2884. lock_s_release(LOCK_ID_PARAS);
  2885. return r;
  2886. }
  2887. int paras_copy(char *dst, char *src)
  2888. {
  2889. int r=-1;
  2890. lock_s_hold(LOCK_ID_PARAS);
  2891. r = file_copy(dst, src);
  2892. lock_s_release(LOCK_ID_PARAS);
  2893. return r;
  2894. }
  2895. int paras_save(void)
  2896. {
  2897. int r=0;
  2898. paras_handle_t *h=&paraHandle;
  2899. lock_s_hold(LOCK_ID_PARAS);
  2900. r = ini_save(h);
  2901. lock_s_release(LOCK_ID_PARAS);
  2902. return r;
  2903. }
  2904. int paras_serv_xport(char *path, int io)
  2905. {
  2906. int r=-1;
  2907. char temp[100];
  2908. handle_t l;
  2909. list_cfg_t lc={0,LIST_FULL_FIFO,100};
  2910. if(io==PARAS_IMPORT) {
  2911. l = NULL;//xlist_init(&lc);
  2912. //r *= proc_role(path, PARAS_READ, NULL, l);
  2913. r *= proc_user(path, PARAS_READ, NULL, l);
  2914. r *= proc_group(path, PARAS_READ, NULL);
  2915. r *= proc_ntp(path, PARAS_READ, NULL);
  2916. r *= proc_mqtt(path, PARAS_READ, NULL);
  2917. r *= proc_mail(path, PARAS_READ, NULL);
  2918. r *= proc_snmp(path, PARAS_READ, NULL);
  2919. //r *= proc_timer(path, PARAS_READ, NULL);
  2920. //xlist_free(l);
  2921. }
  2922. else if(io==PARAS_EXPORT) {
  2923. get_curtime_str(temp,sizeof(temp));
  2924. sprintf(path, "/tmp/service_%s.ini", temp);
  2925. //r *= proc_role(path, PARAS_WRITE, NULL, NULL);
  2926. r *= proc_user(path, PARAS_WRITE, NULL, NULL);
  2927. r *= proc_group(path, PARAS_WRITE, NULL);
  2928. r *= proc_ntp(path, PARAS_WRITE, NULL);
  2929. r *= proc_mqtt(path, PARAS_WRITE, NULL);
  2930. r *= proc_mail(path, PARAS_WRITE, NULL);
  2931. r *= proc_snmp(path, PARAS_WRITE, NULL);
  2932. //r *= proc_timer(path, PARAS_WRITE, NULL);
  2933. }
  2934. return r;
  2935. }
  2936. int paras_alarm_xport(char *path, int io)
  2937. {
  2938. int r=-1,pwr3;
  2939. char temp[100];
  2940. pwr3 = is_power3();
  2941. if(io==PARAS_IMPORT) {
  2942. if(pwr3) {
  2943. r = proc_power3(path, PARAS_READ, NULL);
  2944. }
  2945. else {
  2946. r = proc_power(path, PARAS_READ, NULL);
  2947. }
  2948. }
  2949. else if(io==PARAS_EXPORT) {
  2950. get_curtime_str(temp,sizeof(temp));
  2951. sprintf(path, "/tmp/power_%s.ini", temp);
  2952. if(pwr3) {
  2953. r = proc_power3(path, PARAS_WRITE, NULL);
  2954. }
  2955. else {
  2956. r = proc_power(path, PARAS_WRITE, NULL);
  2957. }
  2958. }
  2959. return r;
  2960. }
  2961. int paras_sensor_xport(char *path, int io)
  2962. {
  2963. int r=-1;
  2964. char temp[100];
  2965. if(io==PARAS_IMPORT) {
  2966. r = proc_sensor(path, PARAS_READ, NULL);
  2967. }
  2968. else if(io==PARAS_EXPORT) {
  2969. get_curtime_str(temp,sizeof(temp));
  2970. sprintf(path, "/tmp/sensor_%s.ini", temp);
  2971. r = proc_sensor(path, PARAS_WRITE, NULL);
  2972. }
  2973. return r;
  2974. }