| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- #ifndef _API_WIRELESS_H
- #define _API_WIRELESS_H
- /**
- * @format 216
- * @param con_handle
- * @param address_type
- * @param address
- */
- #define WIRELESS_EVENT_CONNECTED 0x10
- /**
- * @format 21
- * @param con_handle
- * @param disc_reason
- */
- #define WIRELESS_EVENT_DISCONNECTED 0x11
- /**
- * @format 11611N
- * @param advertising_event_type
- * @param address_type
- * @param address
- * @param rssi
- * @param data_length
- * @param data
- */
- #define WIRELESS_EVENT_ADV_REPORT 0x12
- /**
- * @format 1
- * @param reason
- * @var 0x04: init(page) state timeout.
- * @var 0x0c: connection command reject.
- * @var 0x0d: resource limit, bandwidth no enough for new link.
- */
- #define WIRELESS_EVENT_INIT_TERMINATED 0x14
- typedef void (* wireless_event_callback_t)(uint8_t event_type, uint8_t *packet, uint8_t size);
- typedef void (* wireless_receive_callback_t)(uint16_t con_handle, uint8_t *packet, uint8_t size);
- typedef struct PACKED {
- uint8_t length;
- uint8_t type;
- uint8_t data[];
- } wireless_adv_slice_t;
- typedef struct PACKED {
- uint8_t event_type;
- uint8_t addr_type;
- uint8_t addr[6];
- int8_t rssi;
- uint8_t report_len;
- uint8_t report[];
- } wireless_adv_report_t;
- typedef struct PACKED {
- uint8_t reason;
- } wireless_init_terminated_t;
- typedef struct {
- uint16_t intv;
- uint8_t adv_type;
- uint8_t peer_addr_type;
- uint8_t peer_addr[6];
- uint8_t data_len;
- uint8_t data_buf[31];
- } wireless_adv_param_t;
- typedef struct {
- uint8_t conn_nb_support;
- uint8_t conn_phy_forced;
- } wireless_setup_param_t;
- /**
- * @brief Wireless initialize event callback function registration.
- * @param handler: callback function which will be trigger when any event happen.
- * @retval None.
- */
- void wireless_event_handler_register(wireless_event_callback_t handler);
- /**
- * @brief Wireless initialize packet data receive callback function registration.
- * @param handler: callback function which will be trigger when new packet data received.
- * @retval None.
- */
- void wireless_receive_handler_register(wireless_receive_callback_t handler);
- /**
- * @brief Send data according to connection handle.
- * @param con_handle: connection handle.
- * @param buf: data buffer need to xfer.
- * @param size: length of data need to xfer in buf.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_send_for_con(uint16_t con_handle, uint8_t *buf, uint16_t size);
- /**
- * @brief Release rxbuf and prepare for the next reception.
- * @param buffer: rxbuf, must be generated by the `wireless_receive_handler_register` callback func.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_rxbuf_release(uint8_t *buffer);
- /**
- * @brief Wireless master create a connection by address.
- * interval, latency and timeout need to meet the follwing relationships:
- * (timeout * 10) > [(1 + latency) * interval * 1.25 * 2]
- * @param addr: peer device address.
- * @param addr_type: peer device address type.
- * @param interval: 2 - 3200 (unit: 1.25ms).
- * 4 - 3200 (unit: 1.25ms, more connections).
- * @param latency: 0 - 499 (unit: intv)
- * @param timeout: 10 - 3200 (unit: 10ms)
- * @param init_timeout: 1 - 0xfffffffe (unit: 1ms), and -1L means no timeout. timeout ind see `WIRELESS_EVENT_INIT_TERMINATED`
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_connect_by_addr(uint8_t *addr, uint8_t addr_type, uint16_t interval, uint16_t latency, uint16_t timeout, uint32_t init_timeout);
- /**
- * @brief Wireless set scan param.
- * @param type: scan type, select the following:
- * @arg 0: passive scanning.
- * @arg 1: active scanning.
- * @param interval: 4 - 16384 (unit: 0.625ms)
- * @param window: 4 - 16384 (unit: 0.625ms), should <= interval.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_scan_param_set(uint8_t type, uint16_t interval, uint16_t window);
- /**
- * @brief Wireless scan control function.
- * @param enable: true will start scan if allow, or stop.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_scan_ctrl(bool enable);
- /**
- * @brief Wireless scan state check, async exec by le msg.
- * @retval Return true if scan active, else is stopped.
- */
- bool wireless_scan_state_get(void);
- /**
- * @brief Wireless set advertisement param.
- * @param wireless_adv_param: adv param, see struct "wireless_adv_param_t".
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_adv_param_set(wireless_adv_param_t wireless_adv_param);
- /**
- * @brief Wireless adv control function.
- * @param enable: true will start adv if allow, or stop.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_adv_ctrl(bool enable);
- /**
- * @brief Wireless adv state check, async exec by le msg.
- * @retval Return true if ADV active, else is stopped.
- */
- bool wireless_adv_state_get(void);
- /**
- * @brief Wireless config if prefem a latency.
- * @param con_handle: connection handle.
- * @param applied: true will allow wireless perform latency, or disallow.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_latency_applied(uint16_t con_handle, bool applied);
- /**
- * @brief disconnect connection according to connect handle
- * @param con_handle
- */
- int wireless_disconnect(uint16_t con_handle);
- /**
- * @brief Update connection parameter according to connection handle.
- * @param con_handle: connection handle.
- * @param intv_min: 2 - 3200(unit: 1.25ms)
- * 4 - 3200(unit: 1.25ms, more connection)
- * @param intv_max: 2 - 3200(unit: 1.25ms) interval_min <= interval_max
- * 4 - 3200(unit: 1.25ms, more connection)
- * @param lat: 0 - 499 (unit: intv)
- * @param sup_to: 10 - 3200 (unit: 10ms)
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_conn_update(uint16_t con_handle, uint16_t intv_min, uint16_t intv_max, uint16_t lat, uint16_t sup_to);
- /**
- * @brief Query connection parameter according to connction handle.
- * @param con_handle: connection handle.
- * @param intv: return conn interval value.
- * @param lat: return conn latency value.
- * @param sup_to: return conn supervise timeout value.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_conn_query(uint16_t con_handle, uint16_t *intv, uint16_t *lat, uint16_t *sup_to);
- /**
- * @brief Query maximum transmission unit according to connection handle.
- * @param con_handle: connection handle.
- * @param mtu[out]: return mtu value.
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_mtu_get(uint16_t con_handle, uint8_t *mtu);
- /**
- * @brief Register a function that will be invoke before each active frame start.
- * @param con_handle: connection handle.
- * @param callback: callback function when before frame start. It would be voke
- * @retval Return 0 if OK, other is wrong.
- */
- int wireless_frame_start_hook_register(uint16_t con_handle, void (*callback)(void));
- /**
- * @brief Initialize wireless module.
- * @param param: parameter configuration for wireless core setup.
- * @retval None.
- */
- void wireless_setup(wireless_setup_param_t const *param);
- /**
- * @brief De-initialize wireless module.
- * @retval None.
- */
- void wireless_off(void);
- /**
- * @brief ble fcc test mode config
- * @param rf_mode: FCC_RF_MODE
- * @param tx_power: [0,7]
- * @param tx_freq: [0,39],freq = 2402 + tx_freq * 2
- * @param tx_freq: [0,39],freq = 2402 + tx_freq * 2
- * @param phy_type: 0:1M 1:2M
- * @param todo: 1
- */
- int fcc_test_ctrl(fcc_cfg_t *cfg);
- /**
- * @brief Initialize the timer memery pool.
- * @note This function and a series of related functions are invoked after bt init.
- * @param pool: memery pool head address.
- * @param size: byte size of memery pool, one alarm timer need 28Bytes memery.
- * @retval None.
- */
- void bt_alarm_timer_init(void *pool, uint32_t size);
- /**
- * @brief Extend the timer memery pool, it can be used before and after initialization.
- * @param pool: memery pool head address.
- * @param size: byte size of memery pool, one alarm timer need 28Bytes memery.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_mem_extend(void *pool, uint32_t size);
- /**
- * @brief Free the timer memery pool, and all timers in the space are released.
- * @param pool: memery pool head address.
- * @param size: byte size of memery pool, one alarm timer need 28Bytes memery.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_mem_free(void *pool, uint32_t size);
- /**
- * @brief Start specified id alarm timer.
- * @param handle: alarm timer handle.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_start(uint32_t handle);
- /**
- * @brief Stop specified id alarm timer.
- * @param handle: alarm timer handle.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_stop(uint32_t handle);
- /**
- * @brief Acquire a alarm timer.
- * @param handle: alarm timer handle.
- * @param interval: alarm timer trigger interval, unit [1, 0xffffff) ms.
- * @param is_repeat: trigger mode.
- * @param callback: callback function.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_acquire(uint32_t *handle, uint32_t interval, uint8_t is_repeat, void (*callback)(uint32_t handle));
- /**
- * @brief Release specified id alarm timer.
- * @param handle: alarm timer handle.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_release(uint32_t handle);
- /**
- * @brief Query specified id alarm timer remain time.
- * @param handle: alarm timer handle.
- * @param remain: the remain time for specified id alarm timer.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_query_time(uint32_t handle, uint32_t *remain);
- /**
- * @brief Modify specified id alarm timer interval, if the timer is start, it
- * will be re-start after update interval param.
- * @param handle: alarm timer handle.
- * @param interval: new interval, unit [1, 0xffffff) ms.
- * @param is_repeat: new is_repeat mode state.
- * @retval result code.
- */
- uint8_t bt_alarm_timer_modify_interval(uint32_t handle, uint32_t interval, uint8_t is_repeat);
- /* LPWR API */
- void bt_enter_sleep(void);
- bool bt_is_sleep(void);
- uint32_t bt_sleep_proc(void);
- void bt_exit_sleep(void);
- #endif // _API_WIRELESS_H
|