e3ks.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #include "plt.h"
  2. int e3ks_nbr;
  3. struct e3ks_t e3ks[E3KS_NBR_MAX + 1];
  4. static int e3ks_dbcb_0(void *para,int ncolumn,char ** columnvalue,char *columnname[])
  5. {
  6. int i;
  7. struct dbcbparam_t* pcbparam = (struct dbcbparam_t*)para;
  8. struct e3ks_t* dev = &e3ks[1];
  9. pcbparam->nrow++;
  10. log_dbg("%s, ++, row:%d, col:%d", __func__,pcbparam->nrow,ncolumn);
  11. for( i = 0; i < ncolumn; i++){
  12. if( strcmp("info",columnname[i]) == 0){
  13. strcpy(dev->szinfo,columnvalue[i]);
  14. }else if( strcmp("adr",columnname[i]) == 0){
  15. dev->comm.adr = atoi(columnvalue[i]);
  16. }else if( strcmp("chan_idx",columnname[i]) == 0){
  17. dev->comm.chanidx = atoi(columnvalue[i]);
  18. }
  19. }
  20. pcbparam->ret = 0;
  21. log_dbg("%s, --,ret:%d",__func__,pcbparam->ret);
  22. return 0;
  23. }
  24. int e3ks_chk_state( int idx, int stat )
  25. {
  26. return e3ks_get_state(idx) == stat ? 0 : -1;
  27. }
  28. int e3ks_get_batv( int idx )
  29. {
  30. return e3ks[idx].bat_v;
  31. }
  32. int e3ks_get_temp( int idx )
  33. {
  34. return e3ks[idx].temp;
  35. }
  36. /* NOTE this is the status of the device , not the state machine */
  37. int e3ks_get_status( int idx )
  38. {
  39. return e3ks[idx].status;
  40. }
  41. char* e3ks_get_status_str( int idx )
  42. {
  43. return e3ks[idx].szstatus;
  44. }
  45. int e3ks_get_line( int idx )
  46. {
  47. return e3ks[idx].line;
  48. }
  49. int e3ks_get_ups_fault( int idx )
  50. {
  51. return e3ks[idx].ups_fault;
  52. }
  53. int e3ks_get_bat_low( int idx )
  54. {
  55. return e3ks[idx].bat_low;
  56. }
  57. int e3ks_get_line_fault( int idx )
  58. {
  59. return e3ks[idx].line_fault;
  60. }
  61. static void* e3ks_thrd_main(void* param)
  62. {
  63. log_dbg("%s, ++",__func__);
  64. e3ks_s_comm_init(1);
  65. e3ks_sm_init(1);
  66. /* running */
  67. while( 1 ){
  68. e3ks_s_comm_dac(1);
  69. e3ks_sm( 1 );
  70. sleep(1); //1s
  71. }
  72. log_dbg("%s, --",__func__);
  73. }
  74. int e3ks_chk_stat_all( int stat)
  75. {
  76. int idx;
  77. for( idx = 1; idx <= e3ks_nbr; idx++){
  78. if( e3ks_get_state(idx) != stat){
  79. return -1;
  80. }
  81. }
  82. return 0;
  83. }
  84. int e3ks_send_sm_cmd_all( int cmd )
  85. {
  86. int ret = 0;
  87. int idx;
  88. for( idx = 1; idx <= e3ks_nbr; idx++ ){
  89. e3ks_send_sm_cmd( idx, cmd );
  90. }
  91. log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, cmd, ret);
  92. return ret;
  93. }
  94. int e3ks_init()
  95. {
  96. pthread_t thrd;
  97. int ret = 0;
  98. int result;
  99. char *errmsg = NULL;
  100. char sql[1024];
  101. struct dbcbparam_t cbparam;
  102. sqlite3* db = NULL;
  103. int idx;
  104. struct e3ks_t* dev = &e3ks[1];
  105. log_dbg( "%s, ++",__func__);
  106. plt_lock_ctndb();
  107. db = plt_get_ctndb();
  108. sprintf(sql,"select * from e3ks");
  109. cbparam.nrow = 0;
  110. result = sqlite3_exec(db,sql, e3ks_dbcb_0,(void*)&cbparam,&errmsg);
  111. plt_unlock_ctndb();
  112. if( result != SQLITE_OK ){
  113. log_dbg("%s, result != SQLITE_OK, result:%d", __func__, result);
  114. ret = -1;
  115. }else if( cbparam.ret != 0){
  116. log_dbg("%s, cbparam.ret != 0, %d", __func__, cbparam.ret);
  117. ret = -2;
  118. }else if( cbparam.nrow != 1 ){
  119. log_dbg("%s, cbparam.nrow != 1, %d", __func__, cbparam.nrow);
  120. ret = -3;
  121. }else{
  122. e3ks_nbr = 1;
  123. if(pthread_create(&thrd, NULL, e3ks_thrd_main, NULL) != 0){
  124. log_dbg( "%s, create e3ks thrd main fail", __func__);
  125. ret = -1;
  126. }
  127. }
  128. log_dbg( "%s, --, ret:%d", __func__, ret);
  129. return ret;
  130. }
  131. int e3ks_send_sm_cmd( int idx, int val )
  132. {
  133. int ret = 0;
  134. struct e3ks_t* dev = &e3ks[idx];
  135. dev->cmd = val;
  136. leave:
  137. log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, val, ret);
  138. return ret;
  139. }
  140. int e3ks_get_cmd( int idx)
  141. {
  142. return e3ks[idx].cmd;
  143. }
  144. int e3ks_set_dbg(int idx, int val)
  145. {
  146. e3ks[idx].dbg = val;
  147. return 0;
  148. }
  149. void e3ks_reset_cmd( int idx)
  150. {
  151. e3ks[idx].cmd = CMD_SM_DONE;
  152. }
  153. int e3ks_get_state(int idx)
  154. {
  155. return e3ks[idx].sm.state;
  156. }
  157. char* e3ks_get_info_str(int idx)
  158. {
  159. return e3ks[idx].szinfo;
  160. }
  161. int e3ks_get_chan_idx(int idx)
  162. {
  163. struct e3ks_t* dev = &e3ks[idx];
  164. struct comm_t* comm = &dev->comm;
  165. return comm_get_chan_idx(comm);
  166. }
  167. int e3ks_get_adr(int idx)
  168. {
  169. struct e3ks_t* dev = &e3ks[idx];
  170. struct comm_t* comm = &dev->comm;
  171. return comm_get_adr(comm);
  172. }
  173. int e3ks_get_tick(int idx)
  174. {
  175. return e3ks[idx].sm.tick;
  176. }
  177. char* e3ks_get_state_str(int idx)
  178. {
  179. return e3ks[idx].sm.szState;
  180. }
  181. int e3ks_get_comm_state(int idx)
  182. {
  183. return e3ks[idx].comm.state;
  184. }
  185. char* e3ks_get_comm_state_str(int idx)
  186. {
  187. return e3ks[idx].comm.szState;
  188. }
  189. int e3ks_get_tool_data(int idx,char* buf)
  190. {
  191. struct e3ks_t* dev = &e3ks[idx];
  192. struct statemachine_t* sm = &dev->sm;
  193. struct comm_t* comm = &dev->comm;
  194. char temp_buf[1024];
  195. if(idx < 1 || idx > e3ks_nbr || buf == NULL){
  196. return -1;
  197. }
  198. sm_get_summary(sm, temp_buf, sizeof(temp_buf));
  199. sprintf(buf," %s ", temp_buf);
  200. comm_get_summary(comm, temp_buf, sizeof(temp_buf));
  201. strcat(buf,temp_buf);
  202. sprintf(temp_buf," dbg:%d input_voltage:%.1f output:%.1f load_occupy:%d temp:%d line_fault:%d bat_low:%d ups_fault:%d\n",
  203. dev->dbg, dev->input_voltage, dev->output_voltage, dev->load_occupy, dev->temp, dev->line_fault, dev->bat_low, dev->ups_fault );
  204. strcat(buf,temp_buf);
  205. return 0;
  206. }
  207. int e3ks_get_tbmqtt_data(int idx,char* buf)
  208. {
  209. sprintf(buf, "'ups_state':'%s','ups_fault':%d,\
  210. 'ups_line_fault':%d,\
  211. 'ups_bat_low':%d,\
  212. 'ups_temp':%d",
  213. e3ks_get_state_str( idx ),
  214. e3ks_get_ups_fault( idx ),
  215. e3ks_get_line_fault( idx ),
  216. e3ks_get_bat_low( idx ),
  217. e3ks_get_temp( idx ));
  218. return 0;
  219. }
  220. int e3ks_get_cloud_data(int ctn_idx,int idx,char* buf)
  221. {
  222. sprintf(buf, "'id':'ups_%d', 'ups_fault':%d,\
  223. 'ups_line_fault':%d,\
  224. 'ups_bat_low':%d,\
  225. 'ups_temp':%d,\
  226. 'ups_state':%d",
  227. idx, e3ks_get_ups_fault( idx ),
  228. e3ks_get_line_fault( idx ),
  229. e3ks_get_bat_low( idx ),
  230. e3ks_get_temp( idx ),
  231. e3ks_get_state( idx ));
  232. return 0;
  233. }
  234. int e3ks_get_bkds_data(int idx,char* buf)
  235. {
  236. sprintf(buf,"\
  237. \"info\":\"%s\",\"model\":\"%s\",\"chan_idx\":%d,\"adr\":%d,\"state\":\"%s\",\
  238. \"tick\":%d,\"comm_state\":\"%s\",\"bat_v\":%d,\"temp\":%d,\"status\":\"%s\",\
  239. \"line\":%d\
  240. ",
  241. "ac","e3ks",e3ks_get_chan_idx( idx ),e3ks_get_adr( idx ),e3ks_get_state_str( idx ),
  242. e3ks_get_tick( idx ),e3ks_get_comm_state_str( idx ),e3ks_get_batv( idx ),e3ks_get_temp( idx ),e3ks_get_status_str( idx ),
  243. e3ks_get_line( idx )
  244. );
  245. }