123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- #include "device_message.h"
- #include "gd32f10x.h"
- #include "string.h"
- int parseIntField(const char *data, const char *field);
- void parseStringField(const char *data, const char *field, char *value);
- void addDevice(char *deviceString);
- void addSensorListParams(char *paramString, DEVICE_PARAMS *device);
- void addCommandListParams(char *paramString, DEVICE_PARAMS *device);
- GATEWAY_PARAMS gateway_config_params = {0};
- GATEWAY_PARAMS *get_gateway_config_params()
- {
- return &gateway_config_params;
- }
- int addGatewayParams(char *gatewayString)
- {
- parseStringField(gatewayString, "\"commandTopic\":\"", (char *)&gateway_config_params.commandTopic);
- parseStringField(gatewayString, "\"messageTopic\":\"", (char *)&gateway_config_params.messageTopic);
- parseStringField(gatewayString, "\"deviceId\":\"", (char *)&gateway_config_params.deviceId);
- parseStringField(gatewayString, "\"host\":\"", (char *)&gateway_config_params.host);
- gateway_config_params.port = parseIntField(gatewayString, "\"port\":");
-
- gateway_config_params.pollTime = parseIntField(gatewayString, "\"pollTime\":");
- gateway_config_params.baudrate=parseIntField(gatewayString, "\"baudrate\":");
- gateway_config_params.checkBit=parseIntField(gatewayString, "\"checkBit\":");
- gateway_config_params.dataBits=parseIntField(gatewayString, "\"dataBit\":");
- gateway_config_params.stopBit=parseIntField(gatewayString, "\"stopBit\":");
- gateway_config_params.inboundTime=parseIntField(gatewayString, "\"inboundTime\":");
- char *deviceString = strstr(gatewayString, "deviceList");
- while (1)
- {
- addDevice(deviceString);
- deviceString=deviceString;
- deviceString = strstr(deviceString, "}");
- deviceString[0]='A';
- deviceString++;
- if(deviceString[0]==']')
- {
- break;
- }
- }
- }
- void addGatewayParamsJson(char *gatewayString)
- {
-
- }
- void addDevice(char *deviceString)
- {
- char *paramString = (char *)deviceString;
- DEVICE_PARAMS *newDevicePage = (DEVICE_PARAMS *)malloc(sizeof(DEVICE_PARAMS));
- newDevicePage->nextDevice = NULL;
- parseStringField(deviceString, "\"deviceId\":\"", (char *)&newDevicePage->deviceID);
- newDevicePage->protocol = parseIntField(deviceString, "\"protocol\":");
- newDevicePage->params = (PARAMS_PROTOCOL_COMMAND *)malloc(sizeof(PARAMS_PROTOCOL_COMMAND));
- paramString = strstr(paramString, "\"sensorData\":[");
- if(paramString!=NULL)
- {
- while(1)
- {
- addSensorListParams(paramString, newDevicePage);
- paramString = strstr(paramString, "}");
- paramString[0]='A';
- paramString++;
- if (paramString[0] == ']')
- {
- paramString = (char *)deviceString;
- break;
- }
- }
- }
- if(newDevicePage->protocol==MODBUS)
- {
- paramString=deviceString;
- newDevicePage->MDBbigLittleFormat = parseIntField(paramString, "\"bigLittleFormat\":");
- newDevicePage->MDBdataType= parseIntField(paramString, "\"dataType\":");
- paramString = strstr(paramString, "\"commandData\":[");
- if(paramString!=NULL)
- {
- while(1)
- {
- addCommandListParams(paramString, newDevicePage);
- paramString = strstr(paramString, "}");
- paramString[0]='A';
- paramString++;
- if (paramString[0] == ']')
- {
- paramString = (char *)deviceString;
- break;
- }
- }
- }
- }
- if(gateway_config_params.device_params==NULL)
- {
- gateway_config_params.device_params=newDevicePage;
- }else
- {
- DEVICE_PARAMS *current=gateway_config_params.device_params;
- while (current->nextDevice != NULL)
- {
- current = current->nextDevice;
- }
- current->nextDevice = newDevicePage;
- }
- }
- void addSensorListParams(char *paramString, DEVICE_PARAMS *device)
- {
- switch (device->protocol)
- {
- case DLT645_97:
- case DLT645_07:
- {
- READ_DLT645_COMMAND *read_dlt645_command = malloc(sizeof(READ_DLT645_COMMAND));
- READ_MODBUS_COMMAND *read_modbus_command =NULL;
- read_dlt645_command->Identification = parseIntField(paramString, "\"identifier645\":");
- parseStringField(paramString, "\"identifier\":\"", (char *)&read_dlt645_command->keyword);
- char *string = malloc(13);
- parseStringField(paramString, "\"deviceID645\":\"", string);
- for (int j = 0; j < 6; j++)
- {
- uint8_t byte;
- sscanf((const char *)&string[j * 2], "%2hhx", &byte);
- read_dlt645_command->deviceID645[j]=byte;
- }
- free(string);
- if (device->params->node_read_dlt645_command == NULL)
- {
- device->params->node_read_dlt645_command = read_dlt645_command;
- }
- else
- {
- READ_DLT645_COMMAND *current = device->params->node_read_dlt645_command;
- while (current->nextParams != NULL)
- {
- current = current->nextParams;
- }
- current->nextParams = read_dlt645_command;
- }
- }
- break;
- case MODBUS:
- {
- READ_MODBUS_COMMAND *read_modbus_command = malloc(sizeof(READ_MODBUS_COMMAND));
- READ_DLT645_COMMAND *read_dlt645_command = NULL;
- parseStringField(paramString,"\"identifier\":\"",(char *)&read_modbus_command->keyword);
- read_modbus_command->decimalPoint = parseIntField(paramString, "\"precise\":");
- read_modbus_command->functionCode = parseIntField(paramString, "\"rFunctionCode\":");
- read_modbus_command->slaveAddress = parseIntField(paramString, "\"slaveAddress\":");
- read_modbus_command->registerAddress = parseIntField(paramString, "\"registerAddress\":");
- read_modbus_command->registerByteNum = parseIntField(paramString, "\"registerByteNum\":");
- if (device->params->node_read_modbus_command == NULL)
- {
- device->params->node_read_modbus_command = read_modbus_command;
- }
- else
- {
- READ_MODBUS_COMMAND *current = device->params->node_read_modbus_command;
- while (current->nextParams != NULL)
- {
- current = current->nextParams;
- }
- current->nextParams = read_modbus_command;
- }
- }
- break;
- default:
- break;
- }
- }
- void addCommandListParams(char *paramString, DEVICE_PARAMS *device)
- {
-
- WRITE_MODBUS_COMMAND *write_modbus_command=malloc(sizeof(WRITE_MODBUS_COMMAND));
- parseStringField(paramString,"\"identifier\":\"",(char *)&write_modbus_command->keyword);
- write_modbus_command->registerByteNum = parseIntField(paramString, "\"registerByteNum\":");
- write_modbus_command->functionCode=parseIntField(paramString, "\"wFunctionCode\":");
- write_modbus_command->slaveAddress=parseIntField(paramString, "\"slaveAddress\":");
- write_modbus_command->registerAddress = parseIntField(paramString, "\"registerAddress\":");
- if(device->params->node_write_modbus_command == NULL)
- {
- device->params->node_write_modbus_command=write_modbus_command;
- }
- else
- {
- WRITE_MODBUS_COMMAND *current=device->params->node_write_modbus_command;
- while (current->nextParams != NULL)
- {
- current = current->nextParams;
- }
- current->nextParams = write_modbus_command;
- }
- }
- int parseIntField(const char *data, const char *field)
- {
- char *ptr = strstr(data, field) + strlen(field);
- int value;
- value = strtol(ptr, &ptr, 10);
- return value;
- }
- void parseStringField(const char *data, const char *field, char *value)
- {
- char *ptr = strstr(data, field) + strlen(field);
- sscanf(ptr, "%[^\"],", value);
- }
|