
#ifndef DEVICE_MESSAGE_H
#define DEVICE_MESSAGE_H
 
#include <stdint.h>
 



typedef struct _DEVICE_READ_DATA_INFO{
			
      uint8_t decimalPoint;
        uint8_t keyword[20];                                         
        uint8_t deviceId[20];               
        uint8_t mdbSlave;                   
        uint8_t mdbFunctionCode;            
        uint16_t registerLength;                
        uint16_t mdbRegister;                  
        uint8_t deviceID645[6];
        uint16_t datalength;
        uint32_t dataType645;
        uint8_t bigLittleFormat;              
				uint8_t data[9];        //从机应答的值，前四个字节存储浮点数数据、后面五个字节存储645 DATE内容
				uint8_t rxLen;          //从机应答值的长度
}device_read_data;                //70字节

typedef struct _DEVICE_WRITE_DATA_INFO{
       uint8_t decimalPoint;
        uint8_t keyword[20];                                         
        uint8_t deviceId[20];               
        uint8_t mdbSlave;                   
        uint8_t mdbFunctionCode;            
        uint16_t registerLength;                
        uint16_t mdbRegister;                  
        uint32_t deviceID645;
        uint8_t bigLittleFormat; 
        uint16_t data;                     //只支持写入一个16位寄存器的值
        uint8_t flag;                      //写是否成功标志位   0失败 1成功
}device_write_data;                         //50字节



typedef struct _CONFIG_PARAMS
{
	  uint8_t data_valid_flag;                 //数据有效标志  0xF1:有效  其它:无效
    uint8_t host[20];                        //MQTT服务器地址
    uint16_t port;                           //MQTT服务器端口号
    uint8_t messageTopic[50];                //MQTT消息主题
    uint8_t commandTopic[50];                //MQTT指令主题
    uint32_t  baudrate;                      //波特率
    uint8_t dataBits;                        //数据位
    uint8_t checkBit;                        //校验位
    uint8_t stopBit;                         //停止位
    uint8_t flowControl;                		 //流控制
    uint8_t deviceId[20];                     //设备ID
		uint8_t dataSource;                     //协议类型                 0 保留 1 表示645协议 2表示modbus协议
    uint8_t dataType645;                     //645协议数据类型          0保留  1 表示07版本  2表示97版本
    uint32_t pollTime;                       //轮询时间
		uint32_t inboundTime;
	  uint8_t device_read_data_num;
	  uint8_t device_write_data_num;                    
		device_read_data device_read_data[180];
		device_write_data device_write_data[120];
		
		uint8_t state;                 //检测是否上位机配置过当上位机配置过该状态位，则以后均不走http获取相应配置 置位值为0xF1
		uint8_t version[10];						//用于版本检测升级
		uint8_t gatewayId[10];					//固化信息
		uint8_t gatewayMode[10];				//工作模式、后续版本迭代使用
		//网关相关信息
		uint8_t gateName[10];
}CONFIG_PARAMS;                               //168+180*70+120*50+41=19000字节/4=4750






 
typedef union _CONFIG_PARAMS_UNION
{
		CONFIG_PARAMS config_params; 
		uint32_t data[4750];			
}CONFIG_PARAMS_UNION;
 

extern int load_config_params(void);
 
extern CONFIG_PARAMS *get_config_params(void);

 
 
extern int save_config_params(CONFIG_PARAMS *params);

extern void clear_gateway_config_block(void);
 

#endif
