esp_hidd_api.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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 <string.h>
  15. #include "esp_err.h"
  16. #include "esp_bt_main.h"
  17. #include "btc/btc_manage.h"
  18. #include "btc_hd.h"
  19. #include "esp_hidd_api.h"
  20. #if (defined BTC_HD_INCLUDED && BTC_HD_INCLUDED == TRUE)
  21. esp_err_t esp_bt_hid_device_register_callback(esp_hd_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_HD, callback);
  28. return ESP_OK;
  29. }
  30. esp_err_t esp_bt_hid_device_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_HD;
  36. msg.act = BTC_HD_INIT_EVT;
  37. /* Switch to BTC context */
  38. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL);
  39. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  40. }
  41. esp_err_t esp_bt_hid_device_deinit(void)
  42. {
  43. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  44. btc_msg_t msg;
  45. msg.sig = BTC_SIG_API_CALL;
  46. msg.pid = BTC_PID_HD;
  47. msg.act = BTC_HD_DEINIT_EVT;
  48. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL);
  49. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  50. }
  51. esp_err_t esp_bt_hid_device_register_app(esp_hidd_app_param_t* app_param, esp_hidd_qos_param_t* in_qos, esp_hidd_qos_param_t* out_qos)
  52. {
  53. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  54. btc_msg_t msg;
  55. btc_hidd_args_t args;
  56. memset(&args, 0, sizeof(btc_hidd_args_t));
  57. args.register_app.app_param = app_param;
  58. args.register_app.in_qos = in_qos;
  59. args.register_app.out_qos = out_qos;
  60. msg.sig = BTC_SIG_API_CALL;
  61. msg.pid = BTC_PID_HD;
  62. msg.act = BTC_HD_REGISTER_APP_EVT;
  63. bt_status_t stat = btc_transfer_context(&msg, &args, sizeof(btc_hidd_args_t), NULL);
  64. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  65. }
  66. esp_err_t esp_bt_hid_device_unregister_app(void)
  67. {
  68. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  69. btc_msg_t msg;
  70. msg.sig = BTC_SIG_API_CALL;
  71. msg.pid = BTC_PID_HD;
  72. msg.act = BTC_HD_UNREGISTER_APP_EVT;
  73. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL);
  74. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  75. }
  76. esp_err_t esp_bt_hid_device_connect(esp_bd_addr_t bd_addr)
  77. {
  78. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  79. btc_msg_t msg;
  80. btc_hidd_args_t args;
  81. memset(&args, 0, sizeof(btc_hidd_args_t));
  82. memcpy(args.connect.bd_addr, bd_addr, sizeof(esp_bd_addr_t));
  83. msg.sig = BTC_SIG_API_CALL;
  84. msg.pid = BTC_PID_HD;
  85. msg.act = BTC_HD_CONNECT_EVT;
  86. bt_status_t stat = btc_transfer_context(&msg, &args, sizeof(btc_hidd_args_t), NULL);
  87. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  88. }
  89. esp_err_t esp_bt_hid_device_disconnect(void)
  90. {
  91. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  92. btc_msg_t msg;
  93. msg.sig = BTC_SIG_API_CALL;
  94. msg.pid = BTC_PID_HD;
  95. msg.act = BTC_HD_DISCONNECT_EVT;
  96. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL);
  97. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  98. }
  99. esp_err_t esp_bt_hid_device_send_report(esp_hidd_report_type_t type, uint8_t id, uint16_t len, uint8_t* data)
  100. {
  101. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  102. btc_msg_t msg;
  103. msg.sig = BTC_SIG_API_CALL;
  104. msg.pid = BTC_PID_HD;
  105. msg.act = BTC_HD_SEND_REPORT_EVT;
  106. btc_hidd_args_t args;
  107. memset(&args, 0, sizeof(btc_hidd_args_t));
  108. args.send_report.type = type;
  109. args.send_report.id = id;
  110. args.send_report.len = len;
  111. args.send_report.data = data;
  112. bt_status_t stat = btc_transfer_context(&msg, &args, sizeof(btc_hidd_args_t), btc_hd_arg_deep_copy);
  113. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  114. }
  115. esp_err_t esp_bt_hid_device_report_error(esp_hidd_handshake_error_t error)
  116. {
  117. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  118. btc_msg_t msg;
  119. msg.sig = BTC_SIG_API_CALL;
  120. msg.pid = BTC_PID_HD;
  121. msg.act = BTC_HD_REPORT_ERROR_EVT;
  122. btc_hidd_args_t args;
  123. memset(&args, 0, sizeof(btc_hidd_args_t));
  124. args.error = error;
  125. bt_status_t stat = btc_transfer_context(&msg, &args, sizeof(btc_hidd_args_t), NULL);
  126. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  127. }
  128. esp_err_t esp_bt_hid_device_virtual_cable_unplug(void)
  129. {
  130. ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
  131. btc_msg_t msg;
  132. msg.sig = BTC_SIG_API_CALL;
  133. msg.pid = BTC_PID_HD;
  134. msg.act = BTC_HD_UNPLUG_EVT;
  135. bt_status_t stat = btc_transfer_context(&msg, NULL, 0, NULL);
  136. return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
  137. }
  138. #endif /* defined BTC_HD_INCLUDED && BTC_HD_INCLUDED == TRUE */