esp_hidh_api.c 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. /*
  2. * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * SPDX-FileContributor: Blake Felt
  7. */
  8. #include "btc/btc_manage.h"
  9. #include "btc_hh.h"
  10. #include "esp_bt_main.h"
  11. #include "esp_err.h"
  12. #include "esp_hidh_api.h"
  13. #include <string.h>
  14. #if (defined BTC_HH_INCLUDED && BTC_HH_INCLUDED == TRUE)
  15. esp_err_t esp_bt_hid_host_register_callback(esp_hh_cb_t callback)
  16. {
  17. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  18. if (callback == NULL) {
  19. return ESP_FAIL;
  20. }
  21. btc_profile_cb_set(BTC_PID_HH, callback);
  22. return ESP_OK;
  23. }
  24. esp_err_t esp_bt_hid_host_init(void)
  25. {
  26. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  27. btc_msg_t msg;
  28. msg.sig = BTC_SIG_API_CALL;
  29. msg.pid = BTC_PID_HH;
  30. msg.act = BTC_HH_INIT_EVT;
  31. bt_status_t 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_bt_hid_host_deinit(void)
  35. {
  36. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  37. btc_msg_t msg;
  38. msg.sig = BTC_SIG_API_CALL;
  39. msg.pid = BTC_PID_HH;
  40. msg.act = BTC_HH_DEINIT_EVT;
  41. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL, NULL);
  42. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  43. }
  44. esp_err_t esp_bt_hid_host_connect(esp_bd_addr_t bd_addr)
  45. {
  46. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  47. btc_msg_t msg;
  48. btc_hidh_args_t arg;
  49. msg.sig = BTC_SIG_API_CALL;
  50. msg.pid = BTC_PID_HH;
  51. msg.act = BTC_HH_CONNECT_EVT;
  52. memcpy(arg.connect.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  53. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  54. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  55. }
  56. esp_err_t esp_bt_hid_host_disconnect(esp_bd_addr_t bd_addr)
  57. {
  58. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  59. btc_msg_t msg;
  60. btc_hidh_args_t arg;
  61. msg.sig = BTC_SIG_API_CALL;
  62. msg.pid = BTC_PID_HH;
  63. msg.act = BTC_HH_DISCONNECT_EVT;
  64. memcpy(arg.disconnect.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  65. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  66. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  67. }
  68. esp_err_t esp_bt_hid_host_virtual_cable_unplug(esp_bd_addr_t bd_addr)
  69. {
  70. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  71. btc_msg_t msg;
  72. btc_hidh_args_t arg;
  73. msg.sig = BTC_SIG_API_CALL;
  74. msg.pid = BTC_PID_HH;
  75. msg.act = BTC_HH_UNPLUG_EVT;
  76. memcpy(arg.unplug.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  77. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  78. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  79. }
  80. esp_err_t esp_bt_hid_host_set_info(esp_bd_addr_t bd_addr, esp_hidh_hid_info_t *hid_info)
  81. {
  82. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  83. btc_msg_t msg;
  84. btc_hidh_args_t arg;
  85. msg.sig = BTC_SIG_API_CALL;
  86. msg.pid = BTC_PID_HH;
  87. msg.act = BTC_HH_SET_INFO_EVT;
  88. memcpy(arg.set_info.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  89. arg.set_info.hid_info = hid_info;
  90. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t),
  91. btc_hh_arg_deep_copy, btc_hh_cb_arg_deep_free);
  92. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  93. }
  94. esp_err_t esp_bt_hid_host_get_protocol(esp_bd_addr_t bd_addr)
  95. {
  96. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  97. btc_msg_t msg;
  98. btc_hidh_args_t arg;
  99. msg.sig = BTC_SIG_API_CALL;
  100. msg.pid = BTC_PID_HH;
  101. msg.act = BTC_HH_GET_PROTO_EVT;
  102. memcpy(arg.get_protocol.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  103. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  104. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  105. }
  106. esp_err_t esp_bt_hid_host_set_protocol(esp_bd_addr_t bd_addr, esp_hidh_protocol_mode_t protocol_mode)
  107. {
  108. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  109. btc_msg_t msg;
  110. btc_hidh_args_t arg;
  111. msg.sig = BTC_SIG_API_CALL;
  112. msg.pid = BTC_PID_HH;
  113. msg.act = BTC_HH_SET_PROTO_EVT;
  114. memcpy(arg.set_protocol.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  115. arg.set_protocol.protocol_mode = protocol_mode;
  116. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  117. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  118. }
  119. esp_err_t esp_bt_hid_host_get_idle(esp_bd_addr_t bd_addr)
  120. {
  121. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  122. btc_msg_t msg;
  123. btc_hidh_args_t arg;
  124. msg.sig = BTC_SIG_API_CALL;
  125. msg.pid = BTC_PID_HH;
  126. msg.act = BTC_HH_GET_IDLE_EVT;
  127. memcpy(arg.get_idle.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  128. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  129. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  130. }
  131. esp_err_t esp_bt_hid_host_set_idle(esp_bd_addr_t bd_addr, uint16_t idle_time)
  132. {
  133. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  134. btc_msg_t msg;
  135. btc_hidh_args_t arg;
  136. msg.sig = BTC_SIG_API_CALL;
  137. msg.pid = BTC_PID_HH;
  138. msg.act = BTC_HH_SET_IDLE_EVT;
  139. memcpy(arg.set_idle.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  140. arg.set_idle.idle_time = idle_time;
  141. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  142. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  143. }
  144. esp_err_t esp_bt_hid_host_get_report(esp_bd_addr_t bd_addr, esp_hidh_report_type_t report_type, uint8_t report_id,
  145. int buffer_size)
  146. {
  147. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  148. btc_msg_t msg;
  149. btc_hidh_args_t arg;
  150. msg.sig = BTC_SIG_API_CALL;
  151. msg.pid = BTC_PID_HH;
  152. msg.act = BTC_HH_GET_REPORT_EVT;
  153. memcpy(arg.get_report.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  154. arg.get_report.report_type = report_type;
  155. arg.get_report.report_id = report_id;
  156. arg.get_report.buffer_size = buffer_size;
  157. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL, NULL);
  158. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  159. }
  160. esp_err_t esp_bt_hid_host_set_report(esp_bd_addr_t bd_addr, esp_hidh_report_type_t report_type, uint8_t *report,
  161. size_t len)
  162. {
  163. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  164. btc_msg_t msg;
  165. btc_hidh_args_t arg;
  166. msg.sig = BTC_SIG_API_CALL;
  167. msg.pid = BTC_PID_HH;
  168. msg.act = BTC_HH_SET_REPORT_EVT;
  169. memcpy(arg.set_report.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  170. arg.set_report.report_type = report_type;
  171. arg.set_report.len = len;
  172. arg.set_report.report = report;
  173. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t),
  174. btc_hh_arg_deep_copy, btc_hh_cb_arg_deep_free);
  175. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  176. }
  177. esp_err_t esp_bt_hid_host_send_data(esp_bd_addr_t bd_addr, uint8_t *data, size_t len)
  178. {
  179. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  180. btc_msg_t msg;
  181. btc_hidh_args_t arg;
  182. msg.sig = BTC_SIG_API_CALL;
  183. msg.pid = BTC_PID_HH;
  184. msg.act = BTC_HH_SEND_DATA_EVT;
  185. memcpy(arg.send_data.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  186. arg.send_data.len = len;
  187. arg.send_data.data = data;
  188. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t),
  189. btc_hh_arg_deep_copy, btc_hh_cb_arg_deep_free);
  190. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  191. }
  192. #endif /* defined BTC_HH_INCLUDED && BTC_HH_INCLUDED == TRUE */