#ifndef __GATEWAY_MESSAGE_H
#define __GATEWAY_MESSAGE_H
#include "stm32f2xx.h"





// �ڵ����洢��modbusд����
typedef struct _NODE_WRITE_MODBUS_COMMAND
{
	uint8_t slaveAddress;
	uint8_t functionCode;
	uint8_t dataType;          //��������
	uint8_t slaveAdress;
	uint8_t keyword[20]; // ��д���Ե�����
	uint8_t bigLittleFormat;
	uint16_t registerAddress;	// �Ĵ�����ַ
	uint8_t write_command_flag; // �Ƿ�ɹ�д��ı�־
	struct _NODE_WRITE_MODBUS_COMMAND *nextParams;
} NODE_WRITE_MODBUS_COMMAND;
// �ڵ����洢��modbus������
typedef struct _NODE_READ_MODBUS_COMMAND
{
	uint8_t slaveAddress;
	uint8_t functionCode;
	uint8_t keyword[20]; // �������Ե�����
	uint16_t registerAddress;  // �Ĵ�����ַ
	uint8_t read_command_flag; // �Ƿ�ɹ���ȡ���ı�־
	uint8_t value[4];          //��ȡ��������ֵ
	uint16_t registerByteNum;
	uint8_t decimalPoint;
	struct _NODE_READ_MODBUS_COMMAND *nextParams;
} NODE_READ_MODBUS_COMMAND;
// �ڵ����洢��DLT645��ָ��
typedef struct _NODE_READ_DLT645_COMMAND
{
	uint8_t deviceID645[6];
	uint8_t keyword[20];   // �������Ե�����
	uint32_t Identification; // 645���ݱ�ʶ
	uint8_t data[9];	   // ����������
	uint8_t rxLen;		   // �ӻ�Ӧ��ֵ�ij���
	struct _NODE_READ_DLT645_COMMAND *nextParams;
} NODE_READ_DLT645_COMMAND;

typedef struct _PARAMS_PROTOCOL_COMMAND
{
	NODE_READ_MODBUS_COMMAND   *node_read_modbus_command;
	NODE_WRITE_MODBUS_COMMAND  *node_write_modbus_command;
	NODE_READ_DLT645_COMMAND   *node_read_dlt645_command;
}PARAMS_PROTOCOL_COMMAND;

// �ڵ�������豸��Ϣ
typedef struct _DEVICE_PARAMS
{
	uint8_t aliveflag; // ���֤��(����ѯ�����б�֤,������ѯ��Ӧ��ȷ���������·�仯ʱ�����ϱ��豸�Ѿ���ȥ������ѯ����Ӧ����Ӧֵʱȥ�ϱ��Ѿ����)
	uint8_t deviceID[20];
	uint8_t protocol;  // ����Э������                  1:modbus read 2:modbus write     3:dlt97  4:dlt07            һ���豸ֻ�ܴ���һ��Э��
	
	uint8_t MDBbigLittleFormat;
	uint8_t MDBdataType;
	
	
	PARAMS_PROTOCOL_COMMAND	*params;
	struct _DEVICE_PARAMS *nextDevice; // ָ����һ���豸��ַ
} DEVICE_PARAMS;

typedef struct _NODE_PARAMS
{                    
	uint8_t node_address[3];
	// ����Ĵ��ڹ������Խ�ֻ��һ��
	uint32_t baudrate;	 // ������
	uint8_t dataBits;	 // ����λ
	uint8_t checkBit;	 // У��λ
	uint8_t stopBit;	 // ֹͣλ
	uint8_t flowControl; // ������
	// loraͨ�ŵ���������
	uint8_t RFFrequency;        //�ز�Ƶ��
	uint8_t SignalBw;           //�źŴ���
	uint8_t SpreadingFactor;    //��Ƶ����
	uint8_t ErrorCoding;        //������
	// �������豸�ṹ��
	uint8_t deviceCount;
	DEVICE_PARAMS *device_params;
	struct _NODE_PARAMS *nextNode; // ��һ���豸�����ַ���û����һ���豸ָ��NULL
} NODE_PARAMS;

typedef struct _GATEWAY_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ָ������
	uint8_t deviceId[25];	  // �豸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 state;			 // ����Ƿ���λ�����ù�����λ�����ù���״̬λ�����Ժ������http��ȡ��Ӧ���� ��λֵΪ0xF1
	uint8_t gatewayId[10];	 // �̻���Ϣ
	uint8_t gatewayMode[10]; // ����ģʽ�������汾����ʹ��
	// ���������Ϣ
	uint8_t gateName[10];

	// �����豸�����Ϣ
	NODE_PARAMS *node_params;
} GATEWAY_PARAMS;

void addGatewayParams(char *gatewayString);
GATEWAY_PARAMS *get_gateway_config_params();
#endif