/***********************************************************************************************************
 * Copyright (c)  2023 - 2024, Unicmicro Co.,Ltd .
 * All rights reserved.
 * Filename    : um2011A_defs.h
 * Description : um2011A_defs header file
 * Author(s)   : yanhaihua
 * version     : V1.0
 * Modify date : 2024-10-26
 ***********************************************************************************************************/
#ifndef __UM2011A_DEFS_H__
#define __UM2011A_DEFS_H__

#define UM2011A_REG_WRITE								0x80
#define UM2011A_REG_READ								0x7F
#define UM2011A_REG_PAGE								0x7F

#define UM2011A_REG00                    				0x00
#define UM2011A_REG01                    				0x01
#define UM2011A_REG02                    				0x02
#define UM2011A_REG03                    				0x03
#define UM2011A_REG04                    				0x04
#define UM2011A_REG05                    				0x05
#define UM2011A_REG05_CH_EN								0x80
#define UM2011A_REG05_MASK_STEP							0xFC

#define UM2011A_REG06                    				0x06

#define UM2011A_REG0E                    				0x0E
#define UM2011A_REG0F                    				0x0F

#define UM2011A_REG14                         		    0x14
#define UM2011A_REG14_FIFO_EMPT_THRES            	    0x3F
#define UM2011A_REG14_FIFO_SHARE_EN              	    0x40
#define UM2011A_REG14_PW_FIFO_EN                 	    0x80
													  
#define UM2011A_REG15                            	    0x15
#define UM2011A_REG15_FIFO_FULL_THRES            	    0x3F
													  
#define UM2011A_REG16                            	    0x16
#define UM2011A_REG16_FSM_CLK_SEL                	    0x01
#define UM2011A_REG16_CONT_RX_EN                 	    0x02
#define UM2011A_REG16_CRC_ERR_RXRET              	    0x04
#define UM2011A_REG16_SYNTH_ON_DLY               	    0x38
#define UM2011A_REG16_SYNTH_LOCK_DLY             	    0xC0

#define UM2011A_REG1E                    				0x1E

#define UM2011A_REG21                         	    	0x21
#define UM2011A_REG21_PACKET_MODE                 	    0x03
#define UM2011A_REG21_DIRECT_EN                   	    0x04
#define UM2011A_REG21_DIRECT_DATAIN_PIN_SEI       	    0x18
#define UM2011A_REG21_PAYLOAD_BIT_ORDER           	    0x80

#define UM2011A_REG2E                               	0x2E
#define UM2011A_REG2E_TX_PREAMBLE_EN                	0x01
#define UM2011A_REG2E_TX_PREAMBLE_UNIT              	0x02
#define UM2011A_REG2E_DIFMANCST_1ST_SEL             	0x08
#define UM2011A_REG2E_TX_TEST_DATA                  	0x30
#define UM2011A_REG2E_TX_DATA_INV                   	0x40
#define UM2011A_REG2E_RX_DATA_INV                   	0x80

#define UM2011A_REG2F									0x2F
#define UM2011A_REG30									0x30

#define UM2011A_REG32                     			    0x32
#define UM2011A_REG32_SYNCWORD_EN         			    0x01
#define UM2011A_REG32_SYNC_BIT_ORDER      			    0x02
#define UM2011A_REG32_SYNC_BYTE_SWAP      			    0x04
#define UM2011A_REG32_SYNC_MANCHCST_EN    			    0x08
#define UM2011A_REG32_SYNC_THRES          			    0xF0

#define UM2011A_REG33				        		    0x33                          
#define UM2011A_REG34				        		    0x34                           
#define UM2011A_REG35				        		    0x35                                
#define UM2011A_REG36				        		    0x36                               
#define UM2011A_REG37				        		    0x37                                 
#define UM2011A_REG38				        		    0x38                                 
#define UM2011A_REG39				        		    0x39
#define UM2011A_REG3A				        		    0x3A

#define UM2011A_REG3B                            	    0x3B
#define UM2011A_REG3B_SYNC_BIT_LEN                  	0x3F
#define UM2011A_REG3B_SYNC_PREAMB_MATCH             	0x40
#define UM2011A_REG3B_SYNC_RSSI_MATCH               	0x80
													   
#define UM2011A_REG3C									0x3C
#define UM2011A_REG3D									0x3D

#define UM2011A_REG4C									0x4C
#define UM2011A_REG4D									0x4D
#define UM2011A_REG4E									0x4E
#define UM2011A_REG4E_POSTAMBLE_EN						0x80

#define UM2011A_REG4F									0x4F
#define UM2011A_REG4F_preamble_len_sel                  0x80

#define UM2011A_REG50									0x50

#define UM2011A_REG52                         	 		0x52
#define UM2011A_REG52_GPIO0_INPUT                   	0x01
#define UM2011A_REG52_GPIO1_INPUT                   	0x02
#define UM2011A_REG52_GPIO2_INPUT                   	0x04
#define UM2011A_REG52_GPIO_NIRQ_DIR               		0x08
#define UM2011A_REG52_BRCLK_SEL                   		0x70
#define UM2011A_REG52_GPIO_MISO_EN                		0x80
		
#define UM2011A_REG53							 		0x53
#define UM2011A_REG53_GPIO0_OUT_SEL               		0x0F
#define UM2011A_REG53_GPIO1_OUT_SEL               		0xF0
		
#define UM2011A_REG54							 		0x54
#define UM2011A_REG54_GPIO2_OUT_SEL               		0x0F
#define UM2011A_REG54_GPIO3_OUT_SEL               		0xF0
		
#define UM2011A_REG55							 		0x55
#define UM2011A_REG55_GPIO_NIRQ_OUT_SEL           		0x0F
#define UM2011A_REG55_GPIO_MISO_OUT_SEL           		0xF0

#define UM2011A_REG56									0x56

#define UM2011A_REG57									0x57
#define UM2011A_REG57_SPI_READ_EN						0x30
#define UM2011A_REG57_MISO_OUT							0x20
#define UM2011A_REG57_EVENT_GPIO_SEL					0xC0
#define UM2011A_REG57_EVENT_GPIO_SEL_NONE				0x00
#define UM2011A_REG57_EVENT_GPIO_SEL_GPIO0				0x40
#define UM2011A_REG57_EVENT_GPIO_SEL_GPIO1				0x80

#define UM2011A_REG58									0x58
#define UM2011A_REG58_LBD_EN							0x10
#define UM2011A_REG58_LBD_VOLT							0x0F
#define UM2011A_REG58_MASK_LBD_VOLT						0xF0

#define UM2011A_REG60									0x60
#define UM2011A_REG60_WORK_RXFSON						0x08
#define UM2011A_REG60_WORK_TXFSON                       0x10
#define UM2011A_REG60_WORK_RX							0x20
#define UM2011A_REG60_WORK_TX							0x40
#define UM2011A_REG60_WORK_IDLE							0x80

#define UM2011A_REG61									0x61
#define UM2011A_REG61_MASK_CRC_PKT						0x30
#define UM2011A_REG61_PKT								0x10

#define UM2011A_REG64                                   0x64

#define UM2011A_REG66									0x66
#define UM2011A_REG66_RC32K_CAL_DONE					0x80

#define UM2011A_REG6A									0x6A
#define UM2011A_REG6A_LBD_DATA							0xF0

#define UM2011A_REG6E									0x6E
#define UM2011A_REG6E_VER								0x11
#define UM2011A_REG6F									0x6F
#define UM2011A_REG6F_VER								0x20

#define UM2011A_REG74									0x74
#define UM2011A_REG74_CLEAR_ALL_INT						0x0F
#define UM2011A_REG74_CLR_PKT_FLAG_INT                  0x01
#define UM2011A_REG74_CLR_PREAMBLE_INT                  0x02
#define UM2011A_REG74_CLR_SYNSWORD_INT                  0x04
#define UM2011A_REG74_CLR_PJD_VALID                     0x08
#define UM2011A_REG74_WOR_GO_ON                         0x10
#define UM2011A_REG74_LBD_VOLT_SCAN                     0x40
#define UM2011A_REG74_CLR_RSSI_LOCK_VALUE               0x80

#define UM2011A_REG76                    				0x76
#define UM2011A_REG76_TXFIFO_PTR                  		0x80

#define UM2011A_REG77									0x77

#define UM2011A_REG78                   				0x78
#define UM2011A_REG78_RXFIFO_PTR                  		0x80

#define UM2011A_REG7A                      				0x7A

#define UM2011A_REG7C                              		0x7C
#define UM2011A_REG7C_SLEEP                             0x00
#define UM2011A_REG7C_IDLE                              0x80
#define UM2011A_REG7C_TX                              	0xC0
#define UM2011A_REG7C_RX                              	0xA0
#define UM2011A_REG7C_RX_FSON                           0xB0
#define UM2011A_REG7C_TX_FSON                           0xD0
#define UM2011A_REG7C_RC_CAL                            0x81
#define UM2011A_REG7C_VCO_CAL                           0x82
#define UM2011A_REG7C_RC32K_CAL                         0x84
#define UM2011A_REG7C_WOR                              	0x88
#define UM2011A_REG7C_RST                              	0x8F

#define UM2011A_REG7D                              		0x7D
#define UM2011A_REG7D_PW_SRST_EN						0x02

#define UM2011A_REG7F									0x7F
#define UM2011A_REG7F_PAGE0								0x00
#define UM2011A_REG7F_PAGE1								0x01

#define UM2011A_REG80									0x80
#define UM2011A_REG81									0x81
#define UM2011A_REG82									0x82
#define UM2011A_REG83									0x83
#define UM2011A_REG84									0x84

#define UM2011A_REG85									0x85
#define UM2011A_REG85_TX_FREQ_MASK						0x03
#define UM2011A_REG85_TX_GAU							0x04
#define UM2011A_REG85_OOK_EN							0x80
#define UM2011A_REG85_CARRIER							0x08

#define UM2011A_REGBD                                   0xBD

#define UM2011A_REGC0									0xC0
#define UM2011A_REGC0_RC32K_EN							0x80
#define UM2011A_REGC0_RC32K_CAL_EN						0x40
#define UM2011A_REGC0_RC32K_TRX_CAL						0x20

typedef enum            
{
	GFSK 												= 0,
    FSK  												= 1,
    OOK  												= 2,               
}em_mod_t;

typedef enum
{
    BIT_LSB 											= 0,
    BIT_MSB 											= 1,
}em_bit_order_t;

typedef enum
{
    GPIO_OUT_NIRQ               						= 0,
    GPIO_OUT_RX_PKT_FLAG        						= 1,
    GPIO_OUT_PREAMBLE_FLAG      						= 2,
    GPIO_OUT_SYNSWORD_FLAG      						= 3,
    GPIO_OUT_FIFO_FLAG          						= 4,
    GPIO_OUT_CLKO_SEL           						= 5,
    GPIO_OUT_TRXDATA            						= 6,
    GPIO_OUT_VCO_LOCK_FLAG      						= 7,
    GPIO_OUT_CRC_ERROR          						= 8, 
    GPIO_OUT_RSSI_PJD_FLAG      						= 9,
    GPIO_OUT_LBD_WARN           						= 10,
    GPIO_OUT_TR_SW              						= 11,
    GPIO_OUT_TR_SW_INV          						= 12,
    GPIO_OUT_RX_FIFO_WRBYTE     						= 13,
    GPIO_OUT_HIGH               						= 14,
    GPIO_OUT_LOW                						= 15,
}em_gpio_out_sel_t;

typedef enum
{
   RSSI_PJD_INT  										= 0x01,
   PREAMBLE_INT 										= 0x02,
   SYNC_INT      										= 0x04,
   RX_PKT_INT    										= 0x08,
   TX_PKT_INT    										= 0x10,
   FIFO_INT    											= 0x20,
   LBD_WARN_INT  										= 0x80,
}em_nirq_sel_t;

typedef enum
{
    GPIO_SEL_RX_CLK    									= 0,
    GPIO_SEL_XTAL_CORE 									= 1,
    GPIO_SEL_FCAL_CLK  									= 2,
    GPIO_SEL_CLK_FSM   									= 3,
    GPIO_SEL_SYNTH_CLK 									= 4,
    GPIO_SEL_CLK_TX1   									= 5,
    GPIO_SEL_CLK_RC32K 									= 6,
}em_gpio_brclk_sel_t;

typedef enum
{
    NONE 												= 0,
    EVENT_OUTPIN_SEL_GPIO0 								= 1,
    EVENT_OUTPIN_SEL_GPIO1 								= 2,
}em_event_outpin_t;

typedef enum
{
	RFIO_DIR_OUT										= 0,
	RFIO_DIR_IN											= 1,
}em_io_dir_t;

typedef enum
{
    RX_RSSI_VALID                       				= 0,
    RSSI_PJD_VALID                      				= 1,
    RSSI_PJD_VALID_AND_PREAMBLE_MATCH   				= 2,
    RSSI_PJD_VALID_AND_SYNC_MATCH       				= 3,
}em_rssi_pjd_int_sel_t;


typedef enum
{
    PIN_SEL_GPIO0 										= 0,
    PIN_SEL_GPIO1 										= 1,
    PIN_SEL_GPIO2 										= 2,
}em_pin_sel_t;

typedef enum
{
    PACKET_MODE_0 										= 0,
    PACKET_MODE_1 										= 1,
    PACKET_MODE_2 										= 2,
    PACKET_MODE_3 										= 3,
}em_packet_mode_t;

typedef enum
{
	UNIT_BYTE 											= 0,
	UNIT_BIT 											= 1,
}em_unit_t;

#endif
