wireless_init.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 (bTransmitEn) //transmitting set
  39. {
  40. wireless_client_init();
  41. wireless_scan_param_set(1, 10, 50);
  42. wireless_scan_ctrl(true);
  43. }
  44. else
  45. {
  46. wireless_service_init();
  47. /* ADV Initialize */
  48. wireless_adv_init(true);
  49. }
  50. }
  51. void bsp_wireless_link_info_write(wireless_addr_info_typedef *addr_info)
  52. {
  53. bsp_param_write((u8 *)addr_info, PARAM_WL_ADDR_INFO, PARAM_WL_ADDR_INFO_LEN);
  54. bsp_param_sync();
  55. }
  56. bool bsp_wireless_link_info_read(wireless_addr_info_typedef *addr_info)
  57. {
  58. u8 buf[7] = {0};
  59. bsp_param_read((u8 *)addr_info, PARAM_WL_ADDR_INFO, PARAM_WL_ADDR_INFO_LEN);
  60. return (0 != memcmp(buf, (u8 *)addr_info, 7));
  61. }
  62. void wireless_adv_init(bool adv_en)
  63. {
  64. printf("[slave]wireless_adv_init\n");
  65. wireless_addr_info_typedef wireless_addr_info;
  66. wireless_adv_param_t wireless_adv_param;
  67. memset(&wireless_adv_param, 0x00, sizeof(wireless_adv_param));
  68. wireless_adv_param.intv = 0x30;
  69. wireless_adv_param.data_len = WIRELESS_ADV_DATA_GET(wireless_adv_param.data_buf, sizeof(wireless_adv_param.data_buf));
  70. if (bsp_wireless_link_info_read(&wireless_addr_info)) {
  71. wireless_adv_param.adv_type = ADV_TYPE_DIRECT_LO_IND;
  72. wireless_adv_param.peer_addr_type = wireless_addr_info.address_type;
  73. memcpy(wireless_adv_param.peer_addr, wireless_addr_info.addr, 6);
  74. printf("direct - tyep: %d addr: ", wireless_addr_info.address_type);
  75. print_r(wireless_addr_info.addr, 6);
  76. } else {
  77. wireless_adv_param.adv_type = ADV_TYPE_IND;
  78. }
  79. wireless_adv_param_set(wireless_adv_param);
  80. if (adv_en) {
  81. wireless_adv_ctrl(true);
  82. printf("[slave] wireless adv start\n");
  83. }
  84. }