#ifndef _E32_DEMO_H_
#define _E32_DEMO_H_

#include "e32_hal.h"

typedef enum
{
		OFF = 0x00,
		ON =  0x01,
}on_off_t;

typedef enum
{
		RADIO_RATE_2400   = 0x02,
		RADIO_RATE_4800   = 0x03,
		RADIO_RATE_9600   = 0x04,
		RADIO_RATE_19200  = 0x05,
		RADIO_RATE_38400  = 0x06,
		RADIO_RATE_62500  = 0x07,
}radio_rate_t;

typedef enum
{
		UART_8N1 = 0x00,
		UART_8O1 = 0x01,
		UART_8E1 = 0x02,
}uart_parity_t;

typedef enum
{
		UART_RATE_1200  = 0x00,
		UART_RATE_2400  = 0x01,
		UART_RATE_4800  = 0x02,
		UART_RATE_9600  = 0x03,
		UART_RATE_19200 = 0x04 ,
		UART_RATE_38400 = 0x05,
		UART_RATE_57600 = 0x06,
		UART_RATE_115200= 0x07,
}uart_rate_t;

typedef enum
{
		WOR_PERIOD_250MS  = 0x00,
		WOR_PERIOD_500MS  = 0x01,
		WOR_PERIOD_750MS  = 0x02,
		WOR_PERIOD_1000MS = 0x03,
		WOR_PERIOD_1250MS = 0x04,
		WOR_PERIOD_1500MS = 0x05,
		WOR_PERIOD_1750MS = 0x06,
		WOR_PERIOD_2000MS = 0x07,
}wor_period_t;

typedef enum
{
		TX_POWER_DBM_20  = 0x00,
		TX_POWER_DBM_17  = 0x01,
		TX_POWER_DBM_14  = 0x02,
		TX_POWER_DBM_10  = 0x03,
}transmit_power_t;


typedef struct
{
		/* 00H是固定的HEAD，无法配置 */
	
    /* ======== 用户配置寄存器 01H ======== */
    struct 
    {
        uint8_t address_h; /* 模组地址      (用户配置寄存器地址: 01H和02H) 不同地址的模组无法直接互通数据(广播地址除外); 65535为广播地址，可以群发信息 	*/	
    }register_1;
    
    /* ======== 用户配置寄存器 02H ======== */
    struct 
    {
        uint8_t address_l;
    }register_2;    
     
    /* ======== 用户配置寄存器 03H ======== */
    union {
        uint8_t value;
        struct
        {
            radio_rate_t     radio_rate             : 3;  /* 无线空中速率 (寄存器地址: 03H Bit2-0) 空中速率越高，发送数据越快，但接收灵敏度会下降，表现为通信距离缩短*/
						uart_rate_t      uart_baud_rate         : 3;  /* 串口波特率   (寄存器地址: 03H Bit7-5) 配置模式(模式2)强制固定波特率为9600，其余传输模式时为用户配置串口波特率 */
            uart_parity_t    uart_parity            : 2;  /* 串口校验类型 (寄存器地址: 03H Bit4-3) */
        }field;
    }register_3;
		
    /* ======== 用户配置寄存器 04H ======== */
    struct 
    {
        uint8_t channel;  /* 信道编号      (寄存器地址: 04H) 具体载波频率与频段类型有关，载波频率 = 信道0起始频率 + (1MHz x 信道编号)  */
    }register_4;   		
    
    /* ======== 用户配置寄存器 05H ======== */
    union {
        uint8_t value;
        struct
        {
            transmit_power_t tx_power               : 2;  /* 发射功率                         (寄存器地址: 05H Bit1-0) 不同功率模组的功率分档不一致，具体数值需要参考模组手册	*/
            on_off_t         packet_fec             : 1;	/* 前向纠错FEC                      (寄存器地址: 05H Bit2  ) 双发双端必须一致，否则无法通信。开启后，纠错能力增强(抗干扰)，但传输时间也会加长 */
						wor_period_t     wake_on_radio_period   : 3;  /* 空中唤醒WOR周期                  (寄存器地址: 05H Bit2-0) 收发双端设定周期最好一样，否则容易出现无法唤醒现象 */	
            on_off_t         reserve                : 1;  /* 保留 IO驱动方式*/
            on_off_t         specify_target         : 1;  /* 指定目标传输，也叫定点模式       (寄存器地址: 05H Bit7  ) 将用户串口传入数据的前三字节用来改变地址与信道 */
        }field;
    }register_5;
    
}e32_register_t;

typedef enum
{
		REQUEST_CMD_CONFIG    =  0x00,
		REQUEST_CMD_NAME      ,
		REQUEST_CMD_VERSION   ,
}request_cmd_t;

typedef struct
{
	uint8_t address_h;
	uint8_t address_l;
	uint8_t channel;
	uint8_t data[237];//定点传输(指定目标)单包数据不得超过237字节，否则超出部分数据会丢失
}e32_specify_target_buffer_t;

typedef struct
{
	uint8_t command;
	uint8_t config[20];
}e32_hex_cmd_buffer_t;

typedef union 
{
	uint8_t opt_buffer[1024];
  e32_hex_cmd_buffer_t        hex_cmd;    
	e32_specify_target_buffer_t target;
}e32_opt_buffer_t;

#endif

