123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- #ifndef ANT_BSC_H__
- #define ANT_BSC_H__
- #include <stdint.h>
- #include <stdbool.h>
- #include "sdk_errors.h"
- #include "ant_parameters.h"
- #include "nrf_sdh_ant.h"
- #include "ant_channel_config.h"
- #include "ant_bsc_pages.h"
- #define BSC_ANTPLUS_RF_FREQ 0x39u
- #define BSC_SPEED_DEVICE_TYPE 0x7B
- #define BSC_CADENCE_DEVICE_TYPE 0x7A
- #define BSC_COMBINED_DEVICE_TYPE 0x79
- #define BSC_MSG_PERIOD_4Hz 1u
- #define BSC_MSG_PERIOD_2Hz 2u
- #define BSC_MSG_PERIOD_1Hz 4u
- #define BSC_MSG_PERIOD_SPEED 0x1FB6u
- #define BSC_MSG_PERIOD_CADENCE 0x1FA6u
- #define BSC_MSG_PERIOD_COMBINED 0x1F96u
- #define BSC_EXT_ASSIGN 0x00
- #define BSC_DISP_CHANNEL_TYPE CHANNEL_TYPE_SLAVE_RX_ONLY
- #define BSC_SENS_CHANNEL_TYPE CHANNEL_TYPE_MASTER
- #define BSC_DEVICE_TICKS(DEVICE_TYPE) \
- ((DEVICE_TYPE) == (BSC_SPEED_DEVICE_TYPE) ? (BSC_MSG_PERIOD_SPEED) : \
- ((DEVICE_TYPE) == (BSC_CADENCE_DEVICE_TYPE) ? (BSC_MSG_PERIOD_CADENCE) : \
- ((DEVICE_TYPE) == (BSC_COMBINED_DEVICE_TYPE) ? (BSC_MSG_PERIOD_COMBINED) : 0u)))
- #define BSC_PERIOD_TICKS(DEVICE_TYPE, BSC_MSG_PERIOD) \
- ((BSC_DEVICE_TICKS(DEVICE_TYPE)) * (BSC_MSG_PERIOD))
- #define BSC_DISP_CHANNEL_CONFIG_DEF(NAME, \
- CHANNEL_NUMBER, \
- TRANSMISSION_TYPE, \
- DEVICE_TYPE, \
- DEVICE_NUMBER, \
- NETWORK_NUMBER, \
- BSC_MSG_PERIOD) \
- static const ant_channel_config_t CONCAT_2(NAME, _channel_bsc_disp_config) = \
- { \
- .channel_number = (CHANNEL_NUMBER), \
- .channel_type = BSC_DISP_CHANNEL_TYPE, \
- .ext_assign = BSC_EXT_ASSIGN, \
- .rf_freq = BSC_ANTPLUS_RF_FREQ, \
- .transmission_type = (TRANSMISSION_TYPE), \
- .device_type = (DEVICE_TYPE), \
- .device_number = (DEVICE_NUMBER), \
- .channel_period = BSC_PERIOD_TICKS(DEVICE_TYPE, BSC_MSG_PERIOD), \
- .network_number = (NETWORK_NUMBER), \
- }
- #define BSC_DISP_CHANNEL_CONFIG(NAME) &CONCAT_2(NAME, _channel_bsc_disp_config)
- #define BSC_SENS_CHANNEL_CONFIG_DEF(NAME, \
- CHANNEL_NUMBER, \
- TRANSMISSION_TYPE, \
- DEVICE_TYPE, \
- DEVICE_NUMBER, \
- NETWORK_NUMBER) \
- static const ant_channel_config_t NAME##_channel_bsc_sens_config = \
- { \
- .channel_number = (CHANNEL_NUMBER), \
- .channel_type = BSC_SENS_CHANNEL_TYPE, \
- .ext_assign = BSC_EXT_ASSIGN, \
- .rf_freq = BSC_ANTPLUS_RF_FREQ, \
- .transmission_type = (TRANSMISSION_TYPE), \
- .device_type = (DEVICE_TYPE), \
- .device_number = (DEVICE_NUMBER), \
- .channel_period = BSC_PERIOD_TICKS(DEVICE_TYPE, BSC_MSG_PERIOD_4Hz), \
- .network_number = (NETWORK_NUMBER), \
- }
- #define BSC_SENS_CHANNEL_CONFIG(NAME) &NAME##_channel_bsc_sens_config
- #define BSC_DISP_PROFILE_CONFIG_DEF(NAME, \
- EVT_HANDLER) \
- static ant_bsc_disp_cb_t CONCAT_2(NAME, _bsc_disp_cb); \
- static const ant_bsc_disp_config_t CONCAT_2(NAME, _profile_bsc_disp_config) = \
- { \
- .p_cb = &CONCAT_2(NAME, _bsc_disp_cb), \
- .evt_handler = (EVT_HANDLER), \
- }
- #define BSC_DISP_PROFILE_CONFIG(NAME) &CONCAT_2(NAME, _profile_bsc_disp_config)
- #define BSC_SENS_PROFILE_CONFIG_DEF(NAME, \
- PAGE_1_PRESENT, \
- PAGE_4_PRESENT, \
- MAIN_PAGE_NUMBER, \
- EVT_HANDLER) \
- static ant_bsc_sens_cb_t CONCAT_2(NAME, _bsc_sens_cb); \
- static const ant_bsc_sens_config_t CONCAT_2(NAME, _profile_bsc_sens_config) = \
- { \
- .page_1_present = (PAGE_1_PRESENT), \
- .page_4_present = (PAGE_4_PRESENT), \
- .main_page_number = (MAIN_PAGE_NUMBER), \
- .p_cb = &CONCAT_2(NAME, _bsc_sens_cb), \
- .evt_handler = (EVT_HANDLER), \
- }
- #define BSC_SENS_PROFILE_CONFIG(NAME) &CONCAT_2(NAME, _profile_bsc_sens_config)
- typedef enum{
- ANT_BSC_PAGE_0,
- ANT_BSC_PAGE_1,
- ANT_BSC_PAGE_2,
- ANT_BSC_PAGE_3,
- ANT_BSC_PAGE_4,
- ANT_BSC_PAGE_5,
- ANT_BSC_COMB_PAGE_0
- } ant_bsc_page_t;
- typedef enum{
- ANT_BSC_PAGE_0_UPDATED = ANT_BSC_PAGE_0,
- ANT_BSC_PAGE_1_UPDATED = ANT_BSC_PAGE_1,
- ANT_BSC_PAGE_2_UPDATED = ANT_BSC_PAGE_2,
- ANT_BSC_PAGE_3_UPDATED = ANT_BSC_PAGE_3,
- ANT_BSC_PAGE_4_UPDATED = ANT_BSC_PAGE_4,
- ANT_BSC_PAGE_5_UPDATED = ANT_BSC_PAGE_5,
- ANT_BSC_COMB_PAGE_0_UPDATED = ANT_BSC_COMB_PAGE_0,
- } ant_bsc_evt_t;
- typedef struct ant_bsc_profile_s ant_bsc_profile_t;
- typedef void (* ant_bsc_evt_handler_t) (ant_bsc_profile_t *, ant_bsc_evt_t);
- #include "ant_bsc_local.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef struct
- {
- ant_bsc_disp_cb_t * p_cb;
- ant_bsc_evt_handler_t evt_handler;
- } ant_bsc_disp_config_t;
- typedef struct
- {
- bool page_1_present;
- bool page_4_present;
- ant_bsc_page_t main_page_number;
- ant_bsc_sens_cb_t * p_cb;
- ant_bsc_evt_handler_t evt_handler;
- } ant_bsc_sens_config_t;
- struct ant_bsc_profile_s
- {
- uint8_t channel_number;
- union {
- ant_bsc_disp_cb_t * p_disp_cb;
- ant_bsc_sens_cb_t * p_sens_cb;
- } _cb;
- ant_bsc_evt_handler_t evt_handler;
- ant_bsc_page0_data_t page_0;
- ant_bsc_page1_data_t page_1;
- ant_bsc_page2_data_t page_2;
- ant_bsc_page3_data_t page_3;
- ant_bsc_page4_data_t page_4;
- ant_bsc_page5_data_t page_5;
- ant_bsc_combined_page0_data_t page_comb_0;
- };
- #define BSC_PROFILE_event_time page_0.event_time
- #define BSC_PROFILE_rev_count page_0.rev_count
- #define BSC_PROFILE_operating_time page_1.operating_time
- #define BSC_PROFILE_manuf_id page_2.manuf_id
- #define BSC_PROFILE_serial_num page_2.serial_num
- #define BSC_PROFILE_hw_version page_3.hw_version
- #define BSC_PROFILE_sw_version page_3.sw_version
- #define BSC_PROFILE_model_num page_3.model_num
- #define BSC_PROFILE_fract_bat_volt page_4.fract_bat_volt
- #define BSC_PROFILE_coarse_bat_volt page_4.coarse_bat_volt
- #define BSC_PROFILE_bat_status page_4.bat_status
- #define BSC_PROFILE_stop_indicator page_5.stop_indicator
- #define BSC_PROFILE_cadence_event_time page_comb_0.cadence_event_time
- #define BSC_PROFILE_cadence_rev_count page_comb_0.cadence_rev_count
- #define BSC_PROFILE_speed_event_time page_comb_0.speed_event_time
- #define BSC_PROFILE_speed_rev_count page_comb_0.speed_rev_count
- ret_code_t ant_bsc_disp_init(ant_bsc_profile_t * p_profile,
- ant_channel_config_t const * p_channel_config,
- ant_bsc_disp_config_t const * p_disp_config);
- ret_code_t ant_bsc_sens_init(ant_bsc_profile_t * p_profile,
- ant_channel_config_t const * p_channel_config,
- ant_bsc_sens_config_t const * p_sens_config);
- ret_code_t ant_bsc_disp_open(ant_bsc_profile_t * p_profile);
- ret_code_t ant_bsc_sens_open(ant_bsc_profile_t * p_profile);
- void ant_bsc_sens_evt_handler(ant_evt_t * p_ant_evt, void * p_context);
- void ant_bsc_disp_evt_handler(ant_evt_t * p_ant_evt, void * p_context);
- #ifdef __cplusplus
- }
- #endif
- #endif
|