123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- #include "chan.h"
- #include "plt.h"
- #include <arpa/inet.h>
- #include <assert.h>
- #include <netinet/in.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <unistd.h>
- extern int channbr;
- extern struct chan_t chan[CHAN_NBR_MAX + 1];
- extern struct ctn_t ctn[CTN_NBR_MAX + 1];
- static int sockfd = -1;
- static bool bChecking = false;
- static struct sockaddr_in saddr, caddr;
- static void *chan_checking(void *param)
- {
- log_info("-------------------chan_checking run!!%d", sockfd);
- while (bChecking)
- {
- int iRet = -1;
- char buff[1024] = {0};
- int len = sizeof(caddr);
- int iRecv = recvfrom(sockfd, buff, 1024, 0, (struct sockaddr *)&caddr, &len);
- if (iRecv <= 0)
- {
- continue;
- }
- cJSON *root = cJSON_Parse(buff);
- if (NULL != root)
- {
- snprintf(buff, sizeof(buff), "error");
- cJSON *id = cJSON_GetObjectItem(root, "id");
- cJSON *mode = cJSON_GetObjectItem(root, "mode");
- cJSON *index = cJSON_GetObjectItem(root, "index");
- if (id && mode && index)
- {
- int iID = id->valueint;
- int iMode = chan_mode_str2nbr(mode->valuestring);
- int iIndex = index->valueint;
- switch (iMode)
- {
- case CHANMODE_SERIAL:
- iRet = chan[iIndex].fd > 0 ? 1 : -1;
- break;
- case CHANMODE_SOCKET_CAN:
- case CHANMODE_TCPSERV_CAN:
- iRet = chan[iIndex].sockfd > 0 ? 1 : -1;
- break;
- case CHANMODE_MODBUS_RTU:
- case CHANMODE_MODBUS_TCP:
- {
- cJSON *slave = cJSON_GetObjectItem(root, "slave");
- cJSON *reg = cJSON_GetObjectItem(root, "reg");
- cJSON *count = cJSON_GetObjectItem(root, "count");
- int iNum = 2;
- if (count)
- {
- iNum = count->valueint;
- }
- if (slave && reg)
- {
- unsigned short tab_us[256] = {0};
- int iSlave = slave->valueint;
- int iReg = reg->valueint;
- iRet = chan_read_holdingregisters_with_retry(iIndex, iSlave, iReg, iNum, tab_us);
- if (iRet >= 0)
- {
- iRet = abs(tab_us[0]);
- }
- }
- break;
- }
- case CHANMODE_DI:
- {
- char buf[64] = {0};
- sprintf(buf, "/sys/class/gpio/gpio%d/value", iIndex);
- int fd_value = open(buf, O_RDONLY);
- if (fd_value > -1)
- {
- memset(buf, 0, sizeof(buf));
- lseek(fd_value, 0, SEEK_SET);
- if (read(fd_value, buf, sizeof(buf)) > 0)
- {
- iRet = atoi(buf);
- }
- close(fd_value);
- }
- break;
- }
- case CHANMODE_DO:
- {
- char buf[64] = {0};
- sprintf(buf, "/sys/class/gpio/gpio%d/value", iIndex);
- int fd_value = open(buf, O_RDWR);
- if (fd_value > -1)
- {
- cJSON *value = cJSON_GetObjectItem(root, "value");
- if (value)
- {
- memset(buf, 0, sizeof(buf));
- sprintf(buf, "%d", value->valueint);
- if (write(fd_value, buf, sizeof(buf)) > 0)
- {
- iRet = atoi(buf);
- }
- }
- close(fd_value);
- }
- break;
- }
- }
- snprintf(buff, sizeof(buff), "{\"index\":%d,\"return\":%d}", iID, iRet);
- log_info("reps:%s", buff);
- // sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr *)&caddr, sizeof(caddr));
- }
- else
- {
- cJSON *msg = cJSON_GetObjectItem(root, "msg");
- if (NULL != msg)
- {
- if (strcmp(msg->valuestring, "setCtnMqtt") == 0)
- {
- int rc = -1;
- char sql[1024] = {0};
- char *errmsg = NULL;
- sqlite3 *db = plt_get_projdb();
- sprintf(sql, "update mqtt_ctn set servip=%s, clientid=%s, usernam=%s, passwd=%s", cJSON_GetObjectItem(root, "mqttServer")->valuestring, cJSON_GetObjectItem(root, "mqttClientID")->valuestring, cJSON_GetObjectItem(root, "mqttUserName")->valuestring, cJSON_GetObjectItem(root, "mqttPassword")->valuestring);
- rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
- if (rc == SQLITE_OK)
- {
- sprintf(mqtt.szservip, "%s", cJSON_GetObjectItem(root, "mqttServer")->valuestring);
- sprintf(mqtt.szclientid, "%s", cJSON_GetObjectItem(root, "mqttClientID")->valuestring);
- sprintf(mqtt.szusername, "%s", cJSON_GetObjectItem(root, "mqttUserName")->valuestring);
- sprintf(mqtt.szpasswd, "%s", cJSON_GetObjectItem(root, "mqttPassword")->valuestring);
- }
- sprintf(sql, "update tbmqtt_ctn set servip=%s, clientid=%s, accesstoken=%s,usernam=%s, passwd=%s", cJSON_GetObjectItem(root, "mqttServer")->valuestring, cJSON_GetObjectItem(root, "mqttClientID")->valuestring, cJSON_GetObjectItem(root, "mqttUserName")->valuestring, cJSON_GetObjectItem(root, "mqttUserName")->valuestring, cJSON_GetObjectItem(root, "mqttPassword")->valuestring);
- rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
- if (rc == SQLITE_OK)
- {
- sprintf(mqtt.szservip, "%s", cJSON_GetObjectItem(root, "mqttServer")->valuestring);
- sprintf(mqtt.szclientid, "%s", cJSON_GetObjectItem(root, "mqttClientID")->valuestring);
- sprintf(mqtt.szusername, "%s", cJSON_GetObjectItem(root, "mqttUserName")->valuestring);
- sprintf(mqtt.szaccesstoken, "%s", cJSON_GetObjectItem(root, "mqttUserName")->valuestring);
- sprintf(mqtt.szpasswd, "%s", cJSON_GetObjectItem(root, "mqttPassword")->valuestring);
- }
- sprintf(sql, "update ctn set prj_id=%s", cJSON_GetObjectItem(root, "projectID")->valuestring);
- rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
- if (rc == SQLITE_OK)
- {
- sprintf(ctn[1].szprojId, "%s", cJSON_GetObjectItem(root, "projectID")->valuestring);
- }
- snprintf(buff, sizeof(buff), "{\"projectID\":\"%s\",\"mqttServer\":\"%s\",\"mqttClientID\":\"%s\",\"mqttUserName\":\"%s\" \
- ,\"mqttPassword\":\"%s\",\"tbmqttServer\":\"%s\",\"tbmqttClientID\":\"%s\",\"tbmqttUserName\":\"%s\",\"tbmqttPassword\":\"%s\"}",
- ctn[1].szprojId, mqtt.szservip, mqtt.szclientid, mqtt.szusername, mqtt.szpasswd, tbmqtt.szservip, tbmqtt.szclientid, tbmqtt.szusername, tbmqtt.szpasswd);
- // sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr *)&caddr, sizeof(caddr));
- }
- if (strcmp(msg->valuestring, "getCtnMqtt") == 0)
- {
- struct mqtt_t *dev = &mqtt;
- snprintf(buff, sizeof(buff), "{\"projectID\":\"%s\",\"mqttServer\":\"%s\",\"mqttClientID\":\"%s\",\"mqttUserName\":\"%s\" \
- ,\"mqttPassword\":\"%s\",\"tbmqttServer\":\"%s\",\"tbmqttClientID\":\"%s\",\"tbmqttUserName\":\"%s\",\"tbmqttPassword\":\"%s\"}",
- ctn[1].szprojId, mqtt.szservip, mqtt.szclientid, mqtt.szusername, mqtt.szpasswd, tbmqtt.szservip, tbmqtt.szclientid, tbmqtt.szusername, tbmqtt.szpasswd);
- // sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr *)&caddr, sizeof(caddr));
- }
- }
- }
- cJSON_Delete(root);
- sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr *)&caddr, sizeof(caddr));
- }
- }
- pthread_exit((void *)1);
- return NULL;
- }
- static void SetMqtt(cJSON root)
- {
- }
- static void GetMqtt(cJSON root)
- {
- }
- int chan_check_start()
- {
- pthread_t thrd;
- sockfd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP);
- memset(&saddr, 0, sizeof(saddr));
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(8001);
- saddr.sin_addr.s_addr = 0;
- int res = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr));
- // struct timeval TimeOut;
- // TimeOut.tv_sec = 5;
- // TimeOut.tv_usec = 0;
- // setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&TimeOut, sizeof(TimeOut));
- bChecking = true;
- pthread_create(&thrd, NULL, chan_checking, NULL);
- pthread_detach(thrd);
- }
- int chan_check_stop()
- {
- bChecking = false;
- close(sockfd);
- }
|