rs_ws_n.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #include "plt.h"
  2. int rs_ws_n_nbr;
  3. struct rs_ws_n_t rs_ws_n[RS_WS_N_NBR_MAX + 1];
  4. static int rs_ws_n_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 rs_ws_n_t* dev = NULL;
  9. pcbparam->nrow++;
  10. log_dbg("%s, ++,row:%d, col:%d",__func__,pcbparam->nrow,ncolumn);
  11. dev = &rs_ws_n[pcbparam->nrow];
  12. for( i = 0; i < ncolumn; i++){
  13. if( strcmp("chan_idx",columnname[i]) == 0){
  14. dev->comm.chanidx = atoi(columnvalue[i]);
  15. }else if( strcmp("info",columnname[i]) == 0){
  16. strcpy(dev->szinfo, columnvalue[i]);
  17. }else if( strcmp("adr",columnname[i]) == 0){
  18. dev->comm.adr = atoi(columnvalue[i]);
  19. }
  20. }
  21. pcbparam->ret = 0;
  22. log_dbg("%s, --,ret:%d",__func__,pcbparam->ret);
  23. return 0;
  24. }
  25. int rs_ws_n_get_addr( int idx )
  26. {
  27. return rs_ws_n[idx].comm.adr;
  28. }
  29. void* rs_ws_n_thrd_main(void *param)
  30. {
  31. struct rs_ws_n_t* dev = NULL;
  32. int idx;
  33. log_dbg("%s, ++",__func__);
  34. for( idx = 1; idx <= rs_ws_n_nbr; idx++ ){
  35. rs_ws_n_comm_init(idx);
  36. rs_ws_n_sm_init( idx );
  37. }
  38. while(1){
  39. for( idx = 1; idx <= rs_ws_n_nbr; idx++ ){
  40. rs_ws_n_comm_dac(idx);
  41. rs_ws_n_sm( idx );
  42. sleep(1); // 1s
  43. }
  44. }
  45. log_dbg("%s, --, idx:%d",__func__,idx);
  46. return NULL;
  47. }
  48. int rs_ws_n_chk_stat_all( int stat)
  49. {
  50. int idx;
  51. for( idx = 1; idx <= rs_ws_n_nbr; idx++){
  52. if( rs_ws_n_get_state(idx) != stat){
  53. return -1;
  54. }
  55. }
  56. return 0;
  57. }
  58. int rs_ws_n_send_sm_cmd_all( int cmd )
  59. {
  60. int ret = 0;
  61. int idx;
  62. for( idx = 1; idx <= rs_ws_n_nbr; idx++ ){
  63. rs_ws_n_send_sm_cmd( idx, cmd );
  64. }
  65. log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, cmd, ret);
  66. return ret;
  67. }
  68. int rs_ws_n_init()
  69. {
  70. pthread_t thrd;
  71. int result = 0;
  72. int ret = 0;
  73. int idx = 0;
  74. struct rs_ws_n_t* dev = NULL ;
  75. char *errmsg = NULL;
  76. char sql[1024];
  77. struct dbcbparam_t cbparam;
  78. sqlite3* db = NULL;
  79. log_dbg("%s, ++",__func__);
  80. plt_lock_ctndb();
  81. db = plt_get_ctndb();
  82. sprintf(sql,"select * from rs_ws_n");
  83. cbparam.nrow = 0;
  84. result = sqlite3_exec(db,sql, rs_ws_n_dbcb_0,(void*)&cbparam,&errmsg);
  85. plt_unlock_ctndb();
  86. if( result != SQLITE_OK ){
  87. ret = -1;
  88. }else if( cbparam.ret != 0){
  89. ret = -2;
  90. }else{
  91. rs_ws_n_nbr = cbparam.nrow ;
  92. if(pthread_create(&thrd,NULL, rs_ws_n_thrd_main, NULL)!=0){
  93. log_dbg( "%s, create rs_ws_n thrd main fail", __func__);
  94. ret = -1;
  95. }
  96. }
  97. log_dbg("%s--, ret:%d",__func__,ret);
  98. return ret;
  99. }
  100. int rs_ws_n_get_state( int idx)
  101. {
  102. return rs_ws_n[idx].sm.state;
  103. }
  104. char* rs_ws_n_get_state_str( int idx)
  105. {
  106. return rs_ws_n[idx].sm.szState;
  107. }
  108. int rs_ws_n_get_cmd( int idx)
  109. {
  110. return rs_ws_n[idx].cmd;
  111. }
  112. void rs_ws_n_reset_cmd( int idx)
  113. {
  114. rs_ws_n[idx].cmd = CMD_SM_DONE;
  115. }
  116. int rs_ws_n_get_temp( int idx )
  117. {
  118. return rs_ws_n[idx].temp;
  119. }
  120. int rs_ws_n_get_humi( int idx )
  121. {
  122. return rs_ws_n[idx].humi;
  123. }
  124. int rs_ws_n_send_sm_cmd( int idx, int val )
  125. {
  126. int ret = 0;
  127. struct rs_ws_n_t* dev = &rs_ws_n[idx];
  128. dev->cmd = val;
  129. leave:
  130. log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, val, ret);
  131. return ret;
  132. }
  133. int rs_ws_n_get_comm_st(int idx)
  134. {
  135. struct rs_ws_n_t* dev = &rs_ws_n[idx];
  136. struct comm_t* comm = &dev->comm;
  137. return comm_get_state(comm);
  138. }
  139. int rs_ws_n_get_chan_idx(int idx)
  140. {
  141. struct rs_ws_n_t* dev = &rs_ws_n[idx];
  142. struct comm_t* comm = &dev->comm;
  143. return comm_get_chan_idx(comm);
  144. }
  145. int rs_ws_n_get_tick(int idx)
  146. {
  147. return rs_ws_n[idx].sm.tick;
  148. }
  149. char* rs_ws_n_get_comm_state_str(int idx)
  150. {
  151. struct rs_ws_n_t* dev = &rs_ws_n[idx];
  152. struct comm_t* comm = &dev->comm;
  153. return comm_get_state_str(comm);
  154. }
  155. int rs_ws_n_get_nbr()
  156. {
  157. return rs_ws_n_nbr;
  158. }
  159. struct rs_ws_n_t* rs_ws_n_get_all_data_ptr()
  160. {
  161. return rs_ws_n;
  162. }
  163. int rs_ws_n_get_tool_data(int idx,char* buf)
  164. {
  165. if(idx < 1 || idx > rs_ws_n_nbr || buf == NULL)
  166. return -1;
  167. struct rs_ws_n_t* dev = &rs_ws_n[idx];
  168. struct statemachine_t* sm = &dev->sm;
  169. char buf_temp[1024];
  170. sm_get_summary(sm, buf_temp, sizeof(buf_temp));
  171. sprintf(buf," %s temp:"L_GREEN"%.1lf"NONE" humi:%.1lf\n", buf_temp, dev->temp,dev->humi);
  172. return 0;
  173. }
  174. int rs_ws_n_get_tbmqtt_data(int idx,char* buf)
  175. {
  176. sprintf(buf, "'env%drs_state':'%s','env%d_t':%d, 'env%d_h':%d",
  177. idx,rs_ws_n_get_state_str(idx),idx, rs_ws_n_get_temp(idx), idx, rs_ws_n_get_humi(idx));
  178. }
  179. int rs_ws_n_get_cloud_data(int ctn_idx,int idx,char* buf)
  180. {
  181. sprintf(buf, "'id':'env_%d', 't':%d, 'h':%d,'state':%d",
  182. idx, rs_ws_n_get_temp( idx ),
  183. rs_ws_n_get_humi( idx ),
  184. rs_ws_n_get_state( idx ));
  185. }
  186. int rs_ws_n_get_bkds_data(int idx,char* buf)
  187. {
  188. sprintf(buf,"\
  189. \"info\":\"%d#th\",\"model\":\"%s\",\"state\":\"%s\",\"chan_idx\":%d,\"adr\":%d,\
  190. \"tick\":%d,\"comm_state\":\"%s\",\"temp\":%d,\"humi\":%d\
  191. ",
  192. idx,"rs_ws_n",rs_ws_n_get_state_str( idx ),rs_ws_n_get_chan_idx( idx ),rs_ws_n_get_addr( idx ),
  193. rs_ws_n_get_tick( idx ),rs_ws_n_get_comm_state_str( idx ),rs_ws_n_get_temp( idx ),rs_ws_n_get_humi( idx ));
  194. }