wireless_init.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "include.h"
  2. #include "wireless_client.h"
  3. #include "wireless_service.h"
  4. // #define WIRELESS_ADV_DATA_GET(buf, size) ble_get_adv_data(buf, size)
  5. #define WIRELESS_ADV_DATA_GET(buf, size) wireless_get_adv_data(buf, size)
  6. static const uint8_t adv_match_seq[4] = {0x03, 0xff, 0x42, 0x06};
  7. BT_WORK_MODE cfg_bt_work_mode = MODE_NORMAL;
  8. void ble_set_work_mode(BT_WORK_MODE mode)
  9. {
  10. cfg_bt_work_mode = mode;
  11. }
  12. BT_WORK_MODE ble_get_work_mode(void)
  13. {
  14. return cfg_bt_work_mode;
  15. }
  16. static uint8_t wireless_get_adv_data(uint8_t *buf, uint8_t size)
  17. {
  18. uint8_t len = sizeof(adv_match_seq);
  19. if (len <= size) {
  20. memset(buf, 0x00, size);
  21. memcpy(buf, adv_match_seq, len);
  22. return len;
  23. } else {
  24. return 0;
  25. }
  26. }
  27. void bsp_wireless_init(void)
  28. {
  29. #ifdef wireless_setup
  30. wireless_setup();
  31. #else
  32. wireless_setup_param_t param;
  33. memset(&param, 0x00, sizeof(param));
  34. param.conn_nb_support = 1;
  35. param.conn_phy_forced = 2;
  36. wireless_setup(&param);
  37. #endif
  38. #if WIRELESS_TRANSMIT_EN
  39. wireless_client_init();
  40. wireless_scan_param_set(1, 100, 50);
  41. wireless_scan_ctrl(true);
  42. #else
  43. wireless_service_init();
  44. /* ADV Initialize */
  45. wireless_adv_init(true);
  46. #endif
  47. }
  48. void bsp_wireless_link_info_write(wireless_addr_info_typedef *addr_info)
  49. {
  50. bsp_param_write((u8 *)addr_info, PARAM_WL_ADDR_INFO, PARAM_WL_ADDR_INFO_LEN);
  51. bsp_param_sync();
  52. }
  53. bool bsp_wireless_link_info_read(wireless_addr_info_typedef *addr_info)
  54. {
  55. u8 buf[7] = {0};
  56. bsp_param_read((u8 *)addr_info, PARAM_WL_ADDR_INFO, PARAM_WL_ADDR_INFO_LEN);
  57. return (0 != memcmp(buf, (u8 *)addr_info, 7));
  58. }
  59. void wireless_adv_init(bool adv_en)
  60. {
  61. wireless_addr_info_typedef wireless_addr_info;
  62. wireless_adv_param_t wireless_adv_param;
  63. memset(&wireless_adv_param, 0x00, sizeof(wireless_adv_param));
  64. wireless_adv_param.intv = 0x30;
  65. wireless_adv_param.data_len = WIRELESS_ADV_DATA_GET(wireless_adv_param.data_buf, sizeof(wireless_adv_param.data_buf));
  66. if (bsp_wireless_link_info_read(&wireless_addr_info)) {
  67. wireless_adv_param.adv_type = ADV_TYPE_DIRECT_LO_IND;
  68. wireless_adv_param.peer_addr_type = wireless_addr_info.address_type;
  69. memcpy(wireless_adv_param.peer_addr, wireless_addr_info.addr, 6);
  70. printf("direct - tyep: %d addr: ", wireless_addr_info.address_type);
  71. print_r(wireless_addr_info.addr, 6);
  72. } else {
  73. wireless_adv_param.adv_type = ADV_TYPE_IND;
  74. }
  75. wireless_adv_param_set(wireless_adv_param);
  76. if (adv_en) {
  77. wireless_adv_ctrl(true);
  78. }
  79. }