esp_sdp_api.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*
  2. * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <string.h>
  7. #include "esp_bt_main.h"
  8. #include "btc/btc_manage.h"
  9. #include "btc_sdp.h"
  10. #include "esp_sdp_api.h"
  11. #include "common/bt_target.h"
  12. #if (defined BTC_SDP_INCLUDED && BTC_SDP_INCLUDED == TRUE)
  13. esp_err_t esp_sdp_register_callback(esp_sdp_cb_t callback)
  14. {
  15. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  16. if (callback == NULL) {
  17. return ESP_FAIL;
  18. }
  19. btc_profile_cb_set(BTC_PID_SDP, callback);
  20. return ESP_OK;
  21. }
  22. esp_err_t esp_sdp_init(void)
  23. {
  24. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  25. btc_msg_t msg;
  26. bt_status_t stat;
  27. msg.sig = BTC_SIG_API_CALL;
  28. msg.pid = BTC_PID_SDP;
  29. msg.act = BTC_SDP_ACT_INIT;
  30. /* Switch to BTC context */
  31. stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
  32. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  33. }
  34. esp_err_t esp_sdp_deinit(void)
  35. {
  36. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  37. btc_msg_t msg;
  38. bt_status_t stat;
  39. msg.sig = BTC_SIG_API_CALL;
  40. msg.pid = BTC_PID_SDP;
  41. msg.act = BTC_SDP_ACT_DEINIT;
  42. /* Switch to BTC context */
  43. stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
  44. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  45. }
  46. esp_err_t esp_sdp_search_record(esp_bd_addr_t bd_addr, esp_bt_uuid_t uuid)
  47. {
  48. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  49. btc_msg_t msg;
  50. bt_status_t stat;
  51. btc_sdp_args_t arg;
  52. msg.sig = BTC_SIG_API_CALL;
  53. msg.pid = BTC_PID_SDP;
  54. msg.act = BTC_SDP_ACT_SEARCH;
  55. memset(&arg, 0, sizeof(btc_sdp_args_t));
  56. memcpy(arg.search.bd_addr, bd_addr, ESP_BD_ADDR_LEN);
  57. arg.search.sdp_uuid.len = uuid.len;
  58. memcpy(&arg.search.sdp_uuid.uu, &uuid.uuid, sizeof(uuid.uuid));
  59. /* Switch to BTC context */
  60. stat = btc_transfer_context(&msg, &arg, sizeof(btc_sdp_args_t), NULL, NULL);
  61. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  62. }
  63. esp_err_t esp_sdp_create_record(esp_bluetooth_sdp_record_t *record)
  64. {
  65. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  66. if (record == NULL || record->hdr.service_name_length > ESP_SDP_SERVER_NAME_MAX
  67. || strlen(record->hdr.service_name)+1 != record->hdr.service_name_length) {
  68. LOG_ERROR("Invalid server name!\n");
  69. return ESP_ERR_INVALID_ARG;
  70. }
  71. btc_msg_t msg;
  72. bt_status_t stat;
  73. btc_sdp_args_t arg;
  74. msg.sig = BTC_SIG_API_CALL;
  75. msg.pid = BTC_PID_SDP;
  76. msg.act = BTC_SDP_ACT_CREATE_RECORD;
  77. memset(&arg, 0, sizeof(btc_sdp_args_t));
  78. arg.creat_record.record = (bluetooth_sdp_record *)record;
  79. /* Switch to BTC context */
  80. stat = btc_transfer_context(&msg, &arg, sizeof(btc_sdp_args_t),
  81. btc_sdp_arg_deep_copy, btc_sdp_arg_deep_free);
  82. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  83. }
  84. esp_err_t esp_sdp_remove_record(int record_handle)
  85. {
  86. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  87. btc_msg_t msg;
  88. bt_status_t stat;
  89. btc_sdp_args_t arg;
  90. msg.sig = BTC_SIG_API_CALL;
  91. msg.pid = BTC_PID_SDP;
  92. msg.act = BTC_SDP_ACT_REMOVE_RECORD;
  93. arg.remove_record.record_handle = record_handle;
  94. /* Switch to BTC context */
  95. stat = btc_transfer_context(&msg, &arg, sizeof(btc_sdp_args_t), NULL, NULL);
  96. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  97. }
  98. #endif ///defined BTC_SDP_INCLUDED && BTC_SDP_INCLUDED == TRUE