esp_hidh_api.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
  2. // Copyright 2019 Blake Felt
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #include "btc/btc_manage.h"
  15. #include "btc_hh.h"
  16. #include "esp_bt_main.h"
  17. #include "esp_err.h"
  18. #include "esp_hidh_api.h"
  19. #include <string.h>
  20. #if (defined BTC_HH_INCLUDED && BTC_HH_INCLUDED == TRUE)
  21. esp_err_t esp_bt_hid_host_register_callback(esp_hh_cb_t *callback)
  22. {
  23. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  24. if (callback == NULL) {
  25. return ESP_FAIL;
  26. }
  27. btc_profile_cb_set(BTC_PID_HH, callback);
  28. return ESP_OK;
  29. }
  30. esp_err_t esp_bt_hid_host_init(void)
  31. {
  32. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  33. btc_msg_t msg;
  34. msg.sig = BTC_SIG_API_CALL;
  35. msg.pid = BTC_PID_HH;
  36. msg.act = BTC_HH_INIT_EVT;
  37. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL);
  38. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  39. }
  40. esp_err_t esp_bt_hid_host_deinit(void)
  41. {
  42. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  43. btc_msg_t msg;
  44. msg.sig = BTC_SIG_API_CALL;
  45. msg.pid = BTC_PID_HH;
  46. msg.act = BTC_HH_DEINIT_EVT;
  47. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL);
  48. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  49. }
  50. esp_err_t esp_bt_hid_host_connect(esp_bd_addr_t bd_addr)
  51. {
  52. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  53. btc_msg_t msg;
  54. btc_hidh_args_t arg;
  55. msg.sig = BTC_SIG_API_CALL;
  56. msg.pid = BTC_PID_HH;
  57. msg.act = BTC_HH_CONNECT_EVT;
  58. memcpy(arg.connect.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  59. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  60. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  61. }
  62. esp_err_t esp_bt_hid_host_disconnect(esp_bd_addr_t bd_addr)
  63. {
  64. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  65. btc_msg_t msg;
  66. btc_hidh_args_t arg;
  67. msg.sig = BTC_SIG_API_CALL;
  68. msg.pid = BTC_PID_HH;
  69. msg.act = BTC_HH_DISCONNECT_EVT;
  70. memcpy(arg.disconnect.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  71. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  72. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  73. }
  74. esp_err_t esp_bt_hid_host_virtual_cable_unplug(esp_bd_addr_t bd_addr)
  75. {
  76. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  77. btc_msg_t msg;
  78. btc_hidh_args_t arg;
  79. msg.sig = BTC_SIG_API_CALL;
  80. msg.pid = BTC_PID_HH;
  81. msg.act = BTC_HH_UNPLUG_EVT;
  82. memcpy(arg.unplug.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  83. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  84. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  85. }
  86. esp_err_t esp_bt_hid_host_set_info(esp_bd_addr_t bd_addr, esp_hidh_hid_info_t *hid_info)
  87. {
  88. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  89. btc_msg_t msg;
  90. btc_hidh_args_t arg;
  91. msg.sig = BTC_SIG_API_CALL;
  92. msg.pid = BTC_PID_HH;
  93. msg.act = BTC_HH_SET_INFO_EVT;
  94. memcpy(arg.set_info.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  95. arg.set_info.hid_info = hid_info;
  96. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), btc_hh_arg_deep_copy);
  97. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  98. }
  99. esp_err_t esp_bt_hid_host_get_protocol(esp_bd_addr_t bd_addr)
  100. {
  101. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  102. btc_msg_t msg;
  103. btc_hidh_args_t arg;
  104. msg.sig = BTC_SIG_API_CALL;
  105. msg.pid = BTC_PID_HH;
  106. msg.act = BTC_HH_GET_PROTO_EVT;
  107. memcpy(arg.get_protocol.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  108. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  109. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  110. }
  111. esp_err_t esp_bt_hid_host_set_protocol(esp_bd_addr_t bd_addr, esp_hidh_protocol_mode_t protocol_mode)
  112. {
  113. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  114. btc_msg_t msg;
  115. btc_hidh_args_t arg;
  116. msg.sig = BTC_SIG_API_CALL;
  117. msg.pid = BTC_PID_HH;
  118. msg.act = BTC_HH_SET_PROTO_EVT;
  119. memcpy(arg.set_protocol.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  120. arg.set_protocol.protocol_mode = protocol_mode;
  121. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  122. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  123. }
  124. esp_err_t esp_bt_hid_host_get_idle(esp_bd_addr_t bd_addr)
  125. {
  126. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  127. btc_msg_t msg;
  128. btc_hidh_args_t arg;
  129. msg.sig = BTC_SIG_API_CALL;
  130. msg.pid = BTC_PID_HH;
  131. msg.act = BTC_HH_GET_IDLE_EVT;
  132. memcpy(arg.get_idle.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  133. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  134. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  135. }
  136. esp_err_t esp_bt_hid_host_set_idle(esp_bd_addr_t bd_addr, uint16_t idle_time)
  137. {
  138. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  139. btc_msg_t msg;
  140. btc_hidh_args_t arg;
  141. msg.sig = BTC_SIG_API_CALL;
  142. msg.pid = BTC_PID_HH;
  143. msg.act = BTC_HH_SET_IDLE_EVT;
  144. memcpy(arg.set_idle.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  145. arg.set_idle.idle_time = idle_time;
  146. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  147. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  148. }
  149. 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,
  150. int buffer_size)
  151. {
  152. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  153. btc_msg_t msg;
  154. btc_hidh_args_t arg;
  155. msg.sig = BTC_SIG_API_CALL;
  156. msg.pid = BTC_PID_HH;
  157. msg.act = BTC_HH_GET_REPORT_EVT;
  158. memcpy(arg.get_report.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  159. arg.get_report.report_type = report_type;
  160. arg.get_report.report_id = report_id;
  161. arg.get_report.buffer_size = buffer_size;
  162. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), NULL);
  163. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  164. }
  165. 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,
  166. size_t len)
  167. {
  168. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  169. btc_msg_t msg;
  170. btc_hidh_args_t arg;
  171. msg.sig = BTC_SIG_API_CALL;
  172. msg.pid = BTC_PID_HH;
  173. msg.act = BTC_HH_SET_REPORT_EVT;
  174. memcpy(arg.set_report.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  175. arg.set_report.report_type = report_type;
  176. arg.set_report.len = len;
  177. arg.set_report.report = report;
  178. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), btc_hh_arg_deep_copy);
  179. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  180. }
  181. esp_err_t esp_bt_hid_host_send_data(esp_bd_addr_t bd_addr, uint8_t *data, size_t len)
  182. {
  183. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  184. btc_msg_t msg;
  185. btc_hidh_args_t arg;
  186. msg.sig = BTC_SIG_API_CALL;
  187. msg.pid = BTC_PID_HH;
  188. msg.act = BTC_HH_SEND_DATA_EVT;
  189. memcpy(arg.send_data.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  190. arg.send_data.len = len;
  191. arg.send_data.data = data;
  192. bt_status_t stat = btc_transfer_context(&msg, &arg, sizeof(btc_hidh_args_t), btc_hh_arg_deep_copy);
  193. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  194. }
  195. #endif /* defined BTC_HH_INCLUDED && BTC_HH_INCLUDED == TRUE */