#include "plt.h" int rs_ws_n_nbr; struct rs_ws_n_t rs_ws_n[RS_WS_N_NBR_MAX + 1]; static int rs_ws_n_dbcb_0(void *para,int ncolumn,char ** columnvalue,char *columnname[]) { int i; struct dbcbparam_t* pcbparam = (struct dbcbparam_t*)para; struct rs_ws_n_t* dev = NULL; pcbparam->nrow++; log_dbg("%s, ++,row:%d, col:%d",__func__,pcbparam->nrow,ncolumn); dev = &rs_ws_n[pcbparam->nrow]; for( i = 0; i < ncolumn; i++){ if( strcmp("chan_idx",columnname[i]) == 0){ dev->comm.chanidx = atoi(columnvalue[i]); }else if( strcmp("info",columnname[i]) == 0){ strcpy(dev->szinfo, columnvalue[i]); }else if( strcmp("adr",columnname[i]) == 0){ dev->comm.adr = atoi(columnvalue[i]); } } pcbparam->ret = 0; log_dbg("%s, --,ret:%d",__func__,pcbparam->ret); return 0; } int rs_ws_n_get_addr( int idx ) { return rs_ws_n[idx].comm.adr; } void* rs_ws_n_thrd_main(void *param) { struct rs_ws_n_t* dev = NULL; int idx; log_dbg("%s, ++",__func__); for( idx = 1; idx <= rs_ws_n_nbr; idx++ ){ rs_ws_n_comm_init(idx); rs_ws_n_sm_init( idx ); } while(1){ for( idx = 1; idx <= rs_ws_n_nbr; idx++ ){ rs_ws_n_comm_dac(idx); rs_ws_n_sm( idx ); sleep(1); // 1s } } log_dbg("%s, --, idx:%d",__func__,idx); return NULL; } int rs_ws_n_chk_stat_all( int stat) { int idx; for( idx = 1; idx <= rs_ws_n_nbr; idx++){ if( rs_ws_n_get_state(idx) != stat){ return -1; } } return 0; } int rs_ws_n_send_sm_cmd_all( int cmd ) { int ret = 0; int idx; for( idx = 1; idx <= rs_ws_n_nbr; idx++ ){ rs_ws_n_send_sm_cmd( idx, cmd ); } log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, cmd, ret); return ret; } int rs_ws_n_init() { pthread_t thrd; int result = 0; int ret = 0; int idx = 0; struct rs_ws_n_t* dev = NULL ; char *errmsg = NULL; char sql[1024]; struct dbcbparam_t cbparam; sqlite3* db = NULL; log_dbg("%s, ++",__func__); plt_lock_ctndb(); db = plt_get_ctndb(); sprintf(sql,"select * from rs_ws_n"); cbparam.nrow = 0; result = sqlite3_exec(db,sql, rs_ws_n_dbcb_0,(void*)&cbparam,&errmsg); plt_unlock_ctndb(); if( result != SQLITE_OK ){ ret = -1; }else if( cbparam.ret != 0){ ret = -2; }else{ rs_ws_n_nbr = cbparam.nrow ; if(pthread_create(&thrd,NULL, rs_ws_n_thrd_main, NULL)!=0){ log_dbg( "%s, create rs_ws_n thrd main fail", __func__); ret = -1; } } log_dbg("%s--, ret:%d",__func__,ret); return ret; } int rs_ws_n_get_state( int idx) { return rs_ws_n[idx].sm.state; } char* rs_ws_n_get_state_str( int idx) { return rs_ws_n[idx].sm.szState; } int rs_ws_n_get_cmd( int idx) { return rs_ws_n[idx].cmd; } void rs_ws_n_reset_cmd( int idx) { rs_ws_n[idx].cmd = CMD_SM_DONE; } int rs_ws_n_get_temp( int idx ) { return rs_ws_n[idx].temp; } int rs_ws_n_get_humi( int idx ) { return rs_ws_n[idx].humi; } int rs_ws_n_send_sm_cmd( int idx, int val ) { int ret = 0; struct rs_ws_n_t* dev = &rs_ws_n[idx]; dev->cmd = val; leave: log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, val, ret); return ret; } int rs_ws_n_get_comm_st(int idx) { struct rs_ws_n_t* dev = &rs_ws_n[idx]; struct comm_t* comm = &dev->comm; return comm_get_state(comm); } int rs_ws_n_get_chan_idx(int idx) { struct rs_ws_n_t* dev = &rs_ws_n[idx]; struct comm_t* comm = &dev->comm; return comm_get_chan_idx(comm); } int rs_ws_n_get_tick(int idx) { return rs_ws_n[idx].sm.tick; } char* rs_ws_n_get_comm_state_str(int idx) { struct rs_ws_n_t* dev = &rs_ws_n[idx]; struct comm_t* comm = &dev->comm; return comm_get_state_str(comm); } int rs_ws_n_get_nbr() { return rs_ws_n_nbr; } struct rs_ws_n_t* rs_ws_n_get_all_data_ptr() { return rs_ws_n; } int rs_ws_n_get_tool_data(int idx,char* buf) { if(idx < 1 || idx > rs_ws_n_nbr || buf == NULL) return -1; struct rs_ws_n_t* dev = &rs_ws_n[idx]; struct statemachine_t* sm = &dev->sm; char buf_temp[1024]; sm_get_summary(sm, buf_temp, sizeof(buf_temp)); sprintf(buf," %s temp:"L_GREEN"%.1lf"NONE" humi:%.1lf\n", buf_temp, dev->temp,dev->humi); return 0; } int rs_ws_n_get_tbmqtt_data(int idx,char* buf) { sprintf(buf, "'env%drs_state':'%s','env%d_t':%d, 'env%d_h':%d", idx,rs_ws_n_get_state_str(idx),idx, rs_ws_n_get_temp(idx), idx, rs_ws_n_get_humi(idx)); } int rs_ws_n_get_cloud_data(int ctn_idx,int idx,char* buf) { sprintf(buf, "'id':'env_%d', 't':%d, 'h':%d,'state':%d", idx, rs_ws_n_get_temp( idx ), rs_ws_n_get_humi( idx ), rs_ws_n_get_state( idx )); } int rs_ws_n_get_bkds_data(int idx,char* buf) { sprintf(buf,"\ \"info\":\"%d#th\",\"model\":\"%s\",\"state\":\"%s\",\"chan_idx\":%d,\"adr\":%d,\ \"tick\":%d,\"comm_state\":\"%s\",\"temp\":%d,\"humi\":%d\ ", idx,"rs_ws_n",rs_ws_n_get_state_str( idx ),rs_ws_n_get_chan_idx( idx ),rs_ws_n_get_addr( idx ), 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 )); }