adv0.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. * adv0.c
  3. * BLE通道0广播相关
  4. */
  5. #include "include.h"
  6. //adv0配置变量,如果使用PUBLIC地址,需要或上BLE_ADV0_ADDR_PUBIC_BIT
  7. const uint8_t cfg_ble_adv0_en = (LE_ADV0_EN*BLE_ADV0_EN_BIT) | BLE_ADV0_ADDR_PUBIC_BIT;
  8. #if (LE_ADV0_EN && !AB_MATE_ADV0_EN)
  9. #if LE_WIN10_POPUP
  10. const uint8_t window_adv_data[] = {
  11. 0x1E, //Lenght
  12. 0xff, //Vendor Defined Flag
  13. 0x06, 0x00,//Mircosoft Vendor ID
  14. 0x03,//Mircosoft Beacon ID
  15. 0x01,//Mircosoft Beacon Sub Scenario
  16. 0x80,//Reserved RSSI Byte
  17. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//BR/EDR Address(little-endian )
  18. 0x18, 0x04, 0x24,//Classic Device lcon appearance
  19. //'B','T','8','8','9','2',//Display Name
  20. 'B', 'l', 'u', 'e','t','r','u','m','-','B','T','8','9','2','A'
  21. };
  22. #endif // LE_WIN10_POPUP
  23. //-------------------------------------------------------------------
  24. //------------------libbtstack.a回调函数-----------------------------
  25. //-------------------------------------------------------------------
  26. //设置adv0 PUBIC广播地址
  27. void ble_adv0_get_local_bd_addr(u8 *addr)
  28. {
  29. bt_get_local_bd_addr(addr);
  30. }
  31. //tws时通常由主耳广播,该回调函数决定是否广播
  32. //返回值: true=广播, false=不广播
  33. bool ble_adv0_get_tws_role(void) {
  34. #if (CHARGE_BOX_TYPE == CBOX_SSW)
  35. if(!charge_box_popup_is_enable()) {
  36. return true;
  37. }
  38. #endif
  39. if(bt_tws_is_slave()) {
  40. return true;
  41. }
  42. return false;
  43. }
  44. //主从切换前回调,获取主耳广播相关数据
  45. //u8 ble_adv0_get_tws_loc_var(uint8_t *ptr)
  46. //{
  47. // ptr[0] = sys_cb.loc_house_state & 0x03;
  48. // ptr[1] = sys_cb.loc_house_bat;
  49. // ptr[2] = sys_cb.loc_bat;
  50. // return 3;
  51. //}
  52. //主从切换后回调,广播相关数据设置到新主耳
  53. //void ble_adv0_set_tws_rem_var(uint8_t *ptr)
  54. //{
  55. // sys_cb.rem_house_state = ptr[0] & 0x03;
  56. // sys_cb.rem_house_bat = ptr[1];
  57. // sys_cb.rem_bat = ptr[2];
  58. //}
  59. //设置广播内容格式,返回内容长度(最长31byte)
  60. uint8_t ble_adv0_get_adv_data_cb(uint8_t *adv_data)
  61. {
  62. // //示例
  63. // adv_data[0] = 0x09, //[0] len
  64. // adv_data[1] = 0xff, //[1] data_type
  65. // adv_data[2] = 0x42, //[2:3] comany_id
  66. // adv_data[3] = 0x06, //[2:3] comany_id
  67. // adv_data[4] = 0x00, //[7] headset_type
  68. // adv_data[5] = 0x00, //[20] color
  69. // adv_data[6] = 0x00, //[20] state
  70. // adv_data[7] = 100, //[16] battery_left
  71. // adv_data[8] = 100, //[17] battery_right
  72. // adv_data[9] = 100 , //[18] battery_house
  73. // return 10;
  74. #if LE_WIN10_POPUP
  75. uint8_t mac_buf[6];
  76. memcpy(adv_data,window_adv_data,sizeof(window_adv_data));
  77. bt_get_local_bd_addr(mac_buf);
  78. adv_data[7] = mac_buf[5];
  79. adv_data[8] = mac_buf[4];
  80. adv_data[9] = mac_buf[3];
  81. adv_data[10]= mac_buf[2];
  82. adv_data[11]= mac_buf[1];
  83. adv_data[12]= mac_buf[0];
  84. return sizeof(window_adv_data);
  85. #else
  86. return 0;
  87. #endif // LE_WIN10_POPUP
  88. }
  89. #if LE_ADV0_CON_EN
  90. //设置广播内容格式,返回内容长度(最长31byte)
  91. uint8_t ble_adv0_get_scan_rsp_data_cb(uint8_t *scan_rsp_data)
  92. {
  93. return 0;
  94. }
  95. AT(.text.bb.ble.adv0)
  96. void ble_adv0_get_type_cb(uint8_t *adv_type)
  97. {
  98. *adv_type = 0; //0=可连接,3=不可连接
  99. }
  100. #endif
  101. //-------------------------------------------------------------------
  102. //----------------------APP调用的api函数-----------------------------
  103. //-------------------------------------------------------------------
  104. //更新广播
  105. void ble_adv0_update_adv(void)
  106. {
  107. ble_adv0_set_ctrl(2);
  108. #if LE_ADV0_3BAT_EN
  109. if(bt_tws_is_slave()) {
  110. bt_tws_sync_setting(); //副耳的数据同步到主耳,由主耳来广播
  111. } else {
  112. }
  113. #endif
  114. }
  115. #if LE_ADV0_CON_EN
  116. //更新扫描响应
  117. void ble_adv0_update_scan_rsp(void)
  118. {
  119. ble_adv0_set_ctrl(3);
  120. }
  121. #endif
  122. #endif //LE_ADV0_EN