239 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			239 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | 
 | ||
|  | ****************************************************************************/ | ||
|  | 
 | ||
|  | #ifndef _BB_CPU_FSM_H_
 | ||
|  | #define _BB_CPU_FSM_H_
 | ||
|  | 
 | ||
|  | /* os shim includes */ | ||
|  | #include "os_types.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define BB_MAX_TIME        0xffffffffUL
 | ||
|  | 
 | ||
|  | /* enter idle state reason is normal fllow */ | ||
|  | #define BB_CPU_ENTER_IDLE_NOR    0
 | ||
|  | /* enter idle state reason is reset */ | ||
|  | #define BB_CPU_ENTER_IDLE_RST    1
 | ||
|  | 
 | ||
|  | /* bb cpu global finite state machine */ | ||
|  | typedef enum{ | ||
|  |     /* bb cpu is idle state */ | ||
|  |     BB_CPU_STATE_IDLE = 0, | ||
|  |     /* bb cpu is tx state */ | ||
|  |     BB_CPU_STATE_TX = 1, | ||
|  |     /* bb cpu is rx state */ | ||
|  |     BB_CPU_STATE_RX = 2, | ||
|  |     /* bb cpu is reset state */ | ||
|  |     BB_CPU_STATE_RST = 3, | ||
|  | } BB_CPU_GLB_STATE; | ||
|  | 
 | ||
|  | /* bb cpu tx state finite state machine */ | ||
|  | typedef enum{ | ||
|  |     /* bb cpu tx idle state */ | ||
|  |     BB_CPU_TX_STATE_IDLE = 0, | ||
|  |     /* bb cpu tx is wait tx complete state */ | ||
|  |     BB_CPU_TX_STATE_WAIT_COMPLETE = 1, | ||
|  | } BB_CPU_TX_STATE; | ||
|  | 
 | ||
|  | /* bb cpu rx state finite state machine */ | ||
|  | typedef enum{ | ||
|  |     /* bb cpu rx is wait rx idle state */ | ||
|  |     BB_CPU_RX_STATE_IDLE = 0, | ||
|  |     /* bb cpu rx is rx listening state */ | ||
|  |     BB_CPU_RX_STATE_LISTENING = 1, | ||
|  |     /* bb cpu rx is wait phy header interrupt state */ | ||
|  |     BB_CPU_RX_STATE_WAIT_PHR = 2, | ||
|  |     /* bb cpu rx is wait payload interrupt state */ | ||
|  |     BB_CPU_RX_STATE_WAIT_PLD = 3, | ||
|  |     /* bb cpu rx is rx complete state */ | ||
|  |     BB_CPU_RX_STATE_RX_COMPLETE = 4, | ||
|  |     /* bb cpu rx is wait sack tx complete state */ | ||
|  |     BB_CPU_RX_STATE_WAIT_SACK_TX_COMPLETE = 5, | ||
|  | } BB_CPU_RX_STATE; | ||
|  | 
 | ||
|  | /* bb cpu reset state finite state machine */ | ||
|  | typedef enum{ | ||
|  |     /* bb cpu reset is idle state */ | ||
|  |     BB_CPU_RST_STATE_IDLE = 0, | ||
|  |     /* bb cpu reset is wait tx complete state */ | ||
|  |     BB_CPU_RST_STATE_WAIT_TX_COMPLETE = 1, | ||
|  |     /* bb cpu reset is wait rx pld start state */ | ||
|  |     BB_CPU_RST_STATE_WAIT_RX_PLD_START = 2, | ||
|  | } BB_CPU_RST_STATE; | ||
|  | 
 | ||
|  | /* bb cpu event id
 | ||
|  |  * NOTE: the lower the number, the higher the priority. | ||
|  |  */ | ||
|  | typedef enum{ | ||
|  |     /* bb cpu power save idle event id */ | ||
|  |     BB_CPU_EVENT_PS_IDLE_ID = 1, | ||
|  |     /* bb cpu bb csma tx check event id */ | ||
|  |     BB_CPU_EVENT_CSMA_TX_CHECK_ID = 2, | ||
|  |     /* bb cpu bb set channel event id */ | ||
|  |     BB_CPU_EVENT_SET_CHANNEL_ID = 3, | ||
|  |     /* bb cpu cmdlist done event id */ | ||
|  |     BB_CPU_EVENT_CMDLIST_DONE_ID = 4, | ||
|  |     /* bb cpu enter reset state event id */ | ||
|  |     BB_CPU_EVENT_RST_ID = 5, | ||
|  |     /* bb cpu enter wait rx complete event id */ | ||
|  |     BB_CPU_EVENT_RST_WAIT_RX_COMPLETE_ID = 6, | ||
|  |     /* bb cpu enter wait tx done event id */ | ||
|  |     BB_CPU_EVENT_RST_WAIT_TX_DONE_ID = 7, | ||
|  |     /* bb cpu enter reset timeout state event id */ | ||
|  |     BB_CPU_EVENT_RST_TIMEOUT_ID = 8, | ||
|  |     /* bb cpu mac rx start event id */ | ||
|  |     BB_CPU_EVENT_MAC_RX_START_ID = 9, | ||
|  |     /* bb cpu enter rx abort event id */ | ||
|  |     BB_CPU_EVENT_RX_ABORT_ID = 10, | ||
|  |     /* bb cpu enter backoff timeout event id */ | ||
|  |     BB_CPU_EVENT_BACKOFF_TIMEOUT_ID = 11, | ||
|  |     /* bb cpu rx sig event id */ | ||
|  |     BB_CPU_EVENT_RX_SIG_ID = 12, | ||
|  |     /* bb cpu rx phy header event id */ | ||
|  |     BB_CPU_EVENT_RX_PHR_ID = 13, | ||
|  |     /* bb cpu rx pld start event id */ | ||
|  |     BB_CPU_EVENT_RX_PLD_START_ID = 14, | ||
|  |     /* bb cpu rx backfill desc event id */ | ||
|  |     BB_CPU_EVENT_RX_BACKFILL_DESC_ID = 15, | ||
|  |     /* bb cpu rx timeout event id */ | ||
|  |     BB_CPU_EVENT_RX_TIMEOUT_ID = 16, | ||
|  |     /* bb cpu wait sack timeout event id */ | ||
|  |     BB_CPU_EVENT_WAIT_SACK_TIMEOUT_ID = 17, | ||
|  |     /* bb cpu mac tx start event id */ | ||
|  |     BB_CPU_EVENT_MAC_TX_START_ID = 18, | ||
|  |     /* bb cpu tx abort event id */ | ||
|  |     BB_CPU_EVENT_TX_ABORT_ID = 19, | ||
|  |     /* bb cpu mac fill tx info event id */ | ||
|  |     BB_CPU_EVENT_MAC_TX_FILL_INFO_ID = 20, | ||
|  |     /* bb cpu tx complete event id */ | ||
|  |     BB_CPU_EVENT_TX_COMP_ID = 21, | ||
|  |     /* bb cpu tx timeout event id */ | ||
|  |     BB_CPU_EVENT_TX_TIMEOUT_ID = 22, | ||
|  |     /* bb cpu bb init event id */ | ||
|  |     BB_CPU_EVENT_BB_INIT_ID = 23, | ||
|  |     /* bb cpu sync spi event id */ | ||
|  |     BB_CPU_EVENT_SYNC_SPI_ID = 24, | ||
|  |     /* bb cpu tx tone event id */ | ||
|  |     BB_CPU_EVENT_TX_TONE_ID = 25, | ||
|  |     /* bb cpu tx cal update event id */ | ||
|  |     BB_CPU_EVENT_TX_CAL_UPDATE_ID = 26, | ||
|  |     BB_CPU_EVENT_MAX, | ||
|  | } BB_CPU_EVENT_ID; | ||
|  | 
 | ||
|  | /* the macros indicate the reason bb cpu enter reset state.
 | ||
|  |  * just enter reset state have this reason. | ||
|  |  */ | ||
|  | /* enter reset mode reason is invaild */ | ||
|  | #define BB_CPU_TO_RST_IS_INVALID        0
 | ||
|  | /* enter reset mode reason is stop schedule */ | ||
|  | #define BB_CPU_TO_RST_IS_STOP_SCHE      1
 | ||
|  | /* enter reset mode reason is rx abort */ | ||
|  | #define BB_CPU_TO_RST_IS_RX_ABORT       2
 | ||
|  | /* enter reset mode reason is cmdlist done */ | ||
|  | #define BB_CPU_TO_RST_IS_CMDLIST_DONE   3
 | ||
|  | /* enter reset mode reason is tx abort */ | ||
|  | #define BB_CPU_TO_RST_IS_TX_ABORT       4
 | ||
|  | 
 | ||
|  | /* the macros indicate the reason bb cpu trigger bb.*/ | ||
|  | /* define bb cpu trigger bb event bit 0/1 to tx */ | ||
|  | #define BB_CPU_TRIGGER_BB_TX            1
 | ||
|  | /* define bb cpu trigger bb event bit 2/3 to rx */ | ||
|  | #define BB_CPU_TRIGGER_BB_RX            2
 | ||
|  | 
 | ||
|  | /* define the margin of tx timeout, uint us */ | ||
|  | #define BB_CPU_TX_TIMEOUT_MARGIN        1000
 | ||
|  | 
 | ||
|  | /* define the margin of vcs by phr calculate, uint us 20ms */ | ||
|  | #define BB_CPU_VCS_MARGIN               (20000)
 | ||
|  | 
 | ||
|  | /* define bbcpu after rx done interval to tx, uint us 400us */ | ||
|  | #define BB_CPU_VCS_INTERVAL             (400)
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_fsm_main()             - bb cpu fsm main. | ||
|  |  * return:                       void. | ||
|  |  */ | ||
|  | void bb_cpu_fsm_main(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_set_event()            - bb set event. | ||
|  |  * event_id                      - event id. see BB_CPU_EVENT_ID. | ||
|  |  * return:                       void. | ||
|  |  */ | ||
|  | void bb_cpu_set_event(uint32_t event_id); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_set_event_from_isr()   - bb set event from isr. | ||
|  |  * event_id                      - event id. see  BB_CPU_TRIGGER_BB_xx. | ||
|  |  * return:                       void. | ||
|  |  */ | ||
|  | void bb_cpu_set_event_from_isr(uint32_t event_id); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_set_vcs_timer_from_isr()   - bb set vcs timer from isr. | ||
|  |  * time_us                           - timer us. | ||
|  |  * is_force                          - is force set or not. | ||
|  |  * return:                           void. | ||
|  |  */ | ||
|  | void bb_cpu_set_vcs_timer_from_isr(uint32_t time_us, uint32_t is_force); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_stop_vcs_working_from_isr() - bb cpu stop vcs working from isr. | ||
|  |  * void                               - void. | ||
|  |  * return:                            void. | ||
|  |  */ | ||
|  | void bb_cpu_stop_vcs_working_from_isr(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_set_isr_vaild_from_isr()   - bb set isr vaild from isr. | ||
|  |  * is_vaild                          - is vaild or not. | ||
|  |  * return:                           void. | ||
|  |  */ | ||
|  | void bb_cpu_set_isr_vaild_from_isr(uint8_t is_vaild); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_trigger_bb()           - bb cpu trigger bb. | ||
|  |  * reason                        - event id. see BB_CPU_EVENT_ID. | ||
|  |  * return:                       void. | ||
|  |  */ | ||
|  | void bb_cpu_trigger_bb(uint32_t reason); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_fsm_init()             - bb cpu fsm init. | ||
|  |  * return:                       void. | ||
|  |  */ | ||
|  | void bb_cpu_fsm_init(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_get_tx_pwr()           -  bb cpu get current wphy tx power. | ||
|  |  * return:                       return tx power, uint is dBm | ||
|  |  */ | ||
|  | int8_t bb_cpu_get_tx_pwr(); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * bb_cpu_get_proto()            -  bb cpu get protocol. | ||
|  |  * return:                       return protocol | ||
|  |  */ | ||
|  | uint32_t bb_cpu_get_proto(); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif // _BB_CPU_FSM_H_
 |