123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- #include "plt.h"
- int sga500e_nbr;
- struct sga500e_t sga500e[SGA500E_NBR_MAX + 1];
- static int sga500e_dbcb_0(void *para, int ncolumn, char **columnvalue, char *columnname[])
- {
- int i;
- struct dbcbparam_t *pcbparam = (struct dbcbparam_t *)para;
- struct sga500e_t *dev = NULL;
- pcbparam->nrow++;
- log_dbg("%s, ++,row:%d, col:%d", __func__, pcbparam->nrow, ncolumn);
- dev = &sga500e[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 sga500e_get_addr(int idx)
- {
- return sga500e[idx].comm.adr;
- }
- void *sga500e_thrd_main(void *param)
- {
- struct sga500e_t *dev = NULL;
- int idx;
- log_dbg("%s, ++", __func__);
- for (idx = 1; idx <= sga500e_nbr; idx++)
- {
- sga500e_comm_init(idx);
- sga500e_sm_init(idx);
- }
- while (1)
- {
- for (idx = 1; idx <= sga500e_nbr; idx++)
- {
- sga500e_comm_dac(idx);
- sga500e_sm(idx);
- sleep(1); // 1s
- }
- }
- log_dbg("%s, --, idx:%d", __func__, idx);
- return NULL;
- }
- int sga500e_chk_stat_all(int stat)
- {
- int idx;
- for (idx = 1; idx <= sga500e_nbr; idx++)
- {
- if (sga500e_get_state(idx) != stat)
- {
- return -1;
- }
- }
- return 0;
- }
- int sga500e_send_sm_cmd_all(int cmd)
- {
- int ret = 0;
- int idx;
- for (idx = 1; idx <= sga500e_nbr; idx++)
- {
- sga500e_send_sm_cmd(idx, cmd);
- }
- log_dbg("%s, idx:%d, cmd:%d, ret:%d", __func__, idx, cmd, ret);
- return ret;
- }
- int sga500e_init()
- {
- pthread_t thrd;
- int result = 0;
- int ret = 0;
- int idx = 0;
- struct sga500e_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 sga500e");
- cbparam.nrow = 0;
- result = sqlite3_exec(db, sql, sga500e_dbcb_0, (void *)&cbparam, &errmsg);
- plt_unlock_ctndb();
- if (result != SQLITE_OK)
- {
- ret = -1;
- }
- else if (cbparam.ret != 0)
- {
- ret = -2;
- }
- else
- {
- sga500e_nbr = cbparam.nrow;
- if (pthread_create(&thrd, NULL, sga500e_thrd_main, NULL) != 0)
- {
- log_dbg("%s, create sga500e thrd main fail", __func__);
- ret = -1;
- }
- }
- log_dbg("%s--, ret:%d", __func__, ret);
- return ret;
- }
- int sga500e_get_state(int idx)
- {
- return sga500e[idx].sm.state;
- }
- char *sga500e_get_state_str(int idx)
- {
- return sga500e[idx].sm.szState;
- }
- double sga500e_get_density(int idx)
- {
- return sga500e[idx].density;
- }
- int sga500e_get_cmd(int idx)
- {
- return sga500e[idx].cmd;
- }
- void sga500e_reset_cmd(int idx)
- {
- sga500e[idx].cmd = CMD_SM_DONE;
- }
- int sga500e_send_sm_cmd(int idx, int val)
- {
- int ret = 0;
- struct sga500e_t *dev = &sga500e[idx];
- dev->cmd = val;
- leave:
- log_dbg("%s, idx:%d, cmd:%d, ret:%d", __func__, idx, val, ret);
- return ret;
- }
- int sga500e_get_comm_st(int idx)
- {
- struct sga500e_t *dev = &sga500e[idx];
- struct comm_t *comm = &dev->comm;
- return comm_get_state(comm);
- }
- int sga500e_get_chan_idx(int idx)
- {
- struct sga500e_t *dev = &sga500e[idx];
- struct comm_t *comm = &dev->comm;
- return comm_get_chan_idx(comm);
- }
- int sga500e_get_tick(int idx)
- {
- return sga500e[idx].sm.tick;
- }
- char *sga500e_get_comm_state_str(int idx)
- {
- return sga500e[idx].sm.szState;
- }
- int sga500e_get_nbr()
- {
- return sga500e_nbr;
- }
- int sga500e_get_tool_data(int idx, char *buf)
- {
- if (idx < 1 || idx > sga500e_nbr || buf == NULL)
- return -1;
- struct sga500e_t *dev = &sga500e[idx];
- struct statemachine_t *sm = &dev->sm;
- char buf_temp[1024];
- sm_get_summary(sm, buf_temp, sizeof(buf_temp));
- sprintf(buf, " %s state:%d density:" L_GREEN "%.1lf" NONE " pos:%d name:%d unit:%d hi:%d lo:%d\n",
- buf_temp, dev->state, dev->density, dev->decimal_pos, dev->name, dev->unit,
- dev->alarm_hi, dev->alarm_lo);
- return 0;
- }
- int sga500e_get_tbmqtt_data(int idx, char *buf)
- {
- sprintf(buf, "'gase%d_state':'%s','gas%d_density':%.1f",
- idx, sga500e_get_state_str(idx), idx, sga500e_get_density(idx));
- }
- int sga500e_get_cloud_data(int ctn_idx, int idx, char *buf)
- {
- sprintf(buf, "'id':'env_%d', 'gas%d_density':%.1f,'gas%d_state':%d",
- idx,
- idx, sga500e_get_density(idx),
- idx, sga500e_get_state(idx));
- return 0;
- }
- int sga500e_get_bkds_data(int idx, char *buf)
- {
- sprintf(buf, "\
- \"info\":\"%d#gas\",\"model\":\"%s\",\"state\":\"%s\",\"chan_idx\":%d,\"adr\":%d,\
- \"tick\":%d,\"comm_state\":\"%s\",\"dens\":%f\
- ",
- idx, "sga500e", sga500e_get_state_str(idx), sga500e_get_chan_idx(idx), sga500e_get_addr(idx),
- sga500e_get_tick(idx), sga500e_get_comm_state_str(idx), sga500e_get_density(idx));
- }
|