esp_hidh_api.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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);
  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);
  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);
  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);
  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);
  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), btc_hh_arg_deep_copy);
  91. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  92. }
  93. esp_err_t esp_bt_hid_host_get_protocol(esp_bd_addr_t bd_addr)
  94. {
  95. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  96. btc_msg_t msg;
  97. btc_hidh_args_t arg;
  98. msg.sig = BTC_SIG_API_CALL;
  99. msg.pid = BTC_PID_HH;
  100. msg.act = BTC_HH_GET_PROTO_EVT;
  101. memcpy(arg.get_protocol.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  102. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  103. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  104. }
  105. esp_err_t esp_bt_hid_host_set_protocol(esp_bd_addr_t bd_addr, esp_hidh_protocol_mode_t protocol_mode)
  106. {
  107. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  108. btc_msg_t msg;
  109. btc_hidh_args_t arg;
  110. msg.sig = BTC_SIG_API_CALL;
  111. msg.pid = BTC_PID_HH;
  112. msg.act = BTC_HH_SET_PROTO_EVT;
  113. memcpy(arg.set_protocol.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  114. arg.set_protocol.protocol_mode = protocol_mode;
  115. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  116. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  117. }
  118. esp_err_t esp_bt_hid_host_get_idle(esp_bd_addr_t bd_addr)
  119. {
  120. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  121. btc_msg_t msg;
  122. btc_hidh_args_t arg;
  123. msg.sig = BTC_SIG_API_CALL;
  124. msg.pid = BTC_PID_HH;
  125. msg.act = BTC_HH_GET_IDLE_EVT;
  126. memcpy(arg.get_idle.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  127. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  128. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  129. }
  130. esp_err_t esp_bt_hid_host_set_idle(esp_bd_addr_t bd_addr, uint16_t idle_time)
  131. {
  132. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  133. btc_msg_t msg;
  134. btc_hidh_args_t arg;
  135. msg.sig = BTC_SIG_API_CALL;
  136. msg.pid = BTC_PID_HH;
  137. msg.act = BTC_HH_SET_IDLE_EVT;
  138. memcpy(arg.set_idle.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  139. arg.set_idle.idle_time = idle_time;
  140. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  141. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  142. }
  143. 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,
  144. int buffer_size)
  145. {
  146. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  147. btc_msg_t msg;
  148. btc_hidh_args_t arg;
  149. msg.sig = BTC_SIG_API_CALL;
  150. msg.pid = BTC_PID_HH;
  151. msg.act = BTC_HH_GET_REPORT_EVT;
  152. memcpy(arg.get_report.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  153. arg.get_report.report_type = report_type;
  154. arg.get_report.report_id = report_id;
  155. arg.get_report.buffer_size = buffer_size;
  156. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  157. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  158. }
  159. 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,
  160. size_t len)
  161. {
  162. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  163. btc_msg_t msg;
  164. btc_hidh_args_t arg;
  165. msg.sig = BTC_SIG_API_CALL;
  166. msg.pid = BTC_PID_HH;
  167. msg.act = BTC_HH_SET_REPORT_EVT;
  168. memcpy(arg.set_report.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  169. arg.set_report.report_type = report_type;
  170. arg.set_report.len = len;
  171. arg.set_report.report = report;
  172. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), btc_hh_arg_deep_copy);
  173. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  174. }
  175. esp_err_t esp_bt_hid_host_send_data(esp_bd_addr_t bd_addr, uint8_t *data, size_t len)
  176. {
  177. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  178. btc_msg_t msg;
  179. btc_hidh_args_t arg;
  180. msg.sig = BTC_SIG_API_CALL;
  181. msg.pid = BTC_PID_HH;
  182. msg.act = BTC_HH_SEND_DATA_EVT;
  183. memcpy(arg.send_data.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  184. arg.send_data.len = len;
  185. arg.send_data.data = data;
  186. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), btc_hh_arg_deep_copy);
  187. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  188. }
  189. #endif /* defined BTC_HH_INCLUDED && BTC_HH_INCLUDED == TRUE */