123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /*
- * adv0.c
- * BLE通道0广播相关
- */
- #include "include.h"
- //adv0配置变量,如果使用PUBLIC地址,需要或上BLE_ADV0_ADDR_PUBIC_BIT
- const uint8_t cfg_ble_adv0_en = (LE_ADV0_EN*BLE_ADV0_EN_BIT) | BLE_ADV0_ADDR_PUBIC_BIT;
- #if (LE_ADV0_EN && !AB_MATE_ADV0_EN)
- #if LE_WIN10_POPUP
- const uint8_t window_adv_data[] = {
- 0x1E, //Lenght
- 0xff, //Vendor Defined Flag
- 0x06, 0x00,//Mircosoft Vendor ID
- 0x03,//Mircosoft Beacon ID
- 0x01,//Mircosoft Beacon Sub Scenario
- 0x80,//Reserved RSSI Byte
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//BR/EDR Address(little-endian )
- 0x18, 0x04, 0x24,//Classic Device lcon appearance
- //'B','T','8','8','9','2',//Display Name
- 'B', 'l', 'u', 'e','t','r','u','m','-','B','T','8','9','2','A'
- };
- #endif // LE_WIN10_POPUP
- //-------------------------------------------------------------------
- //------------------libbtstack.a回调函数-----------------------------
- //-------------------------------------------------------------------
- //设置adv0 PUBIC广播地址
- void ble_adv0_get_local_bd_addr(u8 *addr)
- {
- bt_get_local_bd_addr(addr);
- }
- //tws时通常由主耳广播,该回调函数决定是否广播
- //返回值: true=广播, false=不广播
- bool ble_adv0_get_tws_role(void) {
- #if (CHARGE_BOX_TYPE == CBOX_SSW)
- if(!charge_box_popup_is_enable()) {
- return true;
- }
- #endif
- if(bt_tws_is_slave()) {
- return true;
- }
- return false;
- }
- //主从切换前回调,获取主耳广播相关数据
- //u8 ble_adv0_get_tws_loc_var(uint8_t *ptr)
- //{
- // ptr[0] = sys_cb.loc_house_state & 0x03;
- // ptr[1] = sys_cb.loc_house_bat;
- // ptr[2] = sys_cb.loc_bat;
- // return 3;
- //}
- //主从切换后回调,广播相关数据设置到新主耳
- //void ble_adv0_set_tws_rem_var(uint8_t *ptr)
- //{
- // sys_cb.rem_house_state = ptr[0] & 0x03;
- // sys_cb.rem_house_bat = ptr[1];
- // sys_cb.rem_bat = ptr[2];
- //}
- //设置广播内容格式,返回内容长度(最长31byte)
- uint8_t ble_adv0_get_adv_data_cb(uint8_t *adv_data)
- {
- // //示例
- // adv_data[0] = 0x09, //[0] len
- // adv_data[1] = 0xff, //[1] data_type
- // adv_data[2] = 0x42, //[2:3] comany_id
- // adv_data[3] = 0x06, //[2:3] comany_id
- // adv_data[4] = 0x00, //[7] headset_type
- // adv_data[5] = 0x00, //[20] color
- // adv_data[6] = 0x00, //[20] state
- // adv_data[7] = 100, //[16] battery_left
- // adv_data[8] = 100, //[17] battery_right
- // adv_data[9] = 100 , //[18] battery_house
- // return 10;
- #if LE_WIN10_POPUP
- uint8_t mac_buf[6];
- memcpy(adv_data,window_adv_data,sizeof(window_adv_data));
- bt_get_local_bd_addr(mac_buf);
- adv_data[7] = mac_buf[5];
- adv_data[8] = mac_buf[4];
- adv_data[9] = mac_buf[3];
- adv_data[10]= mac_buf[2];
- adv_data[11]= mac_buf[1];
- adv_data[12]= mac_buf[0];
- return sizeof(window_adv_data);
- #else
- return 0;
- #endif // LE_WIN10_POPUP
- }
- #if LE_ADV0_CON_EN
- //设置广播内容格式,返回内容长度(最长31byte)
- uint8_t ble_adv0_get_scan_rsp_data_cb(uint8_t *scan_rsp_data)
- {
- return 0;
- }
- AT(.text.bb.ble.adv0)
- void ble_adv0_get_type_cb(uint8_t *adv_type)
- {
- *adv_type = 0; //0=可连接,3=不可连接
- }
- #endif
- //-------------------------------------------------------------------
- //----------------------APP调用的api函数-----------------------------
- //-------------------------------------------------------------------
- //更新广播
- void ble_adv0_update_adv(void)
- {
- ble_adv0_set_ctrl(2);
- #if LE_ADV0_3BAT_EN
- if(bt_tws_is_slave()) {
- bt_tws_sync_setting(); //副耳的数据同步到主耳,由主耳来广播
- } else {
- }
- #endif
- }
- #if LE_ADV0_CON_EN
- //更新扫描响应
- void ble_adv0_update_scan_rsp(void)
- {
- ble_adv0_set_ctrl(3);
- }
- #endif
- #endif //LE_ADV0_EN
|