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_
							 |