wireless_cmd.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "include.h"
  2. #include "wireless_cmd.h"
  3. #include "wireless_service.h"
  4. #include "fota_proc.h"
  5. static struct {
  6. struct {
  7. uint8_t type;
  8. uint8_t length;
  9. uint8_t value[CTRL_CMD_PACKET_SIZE - 2];
  10. } cmd_data[CTRL_CMD_PACKET_NUM];
  11. uint8_t rptr;
  12. uint8_t wptr;
  13. } wireless_cmd_cb AT(.user_buf.wireless.cmd);
  14. void wireless_user_event_handle(uint8_t *buf, uint32_t size)
  15. {
  16. switch (buf[WIRELESS_CMD_DATA_TYPE_POS]) {
  17. #if BSP_SDADC_EN
  18. case WIRELESS_CTRL_CMD_CODE_MIC_DISALLOW:
  19. bsp_audio_mic_allow_set(false);
  20. break;
  21. case WIRELESS_CTRL_CMD_CODE_MIC_ALLOW:
  22. bsp_audio_mic_allow_set(true);
  23. break;
  24. #endif // BSP_SDADC_EN
  25. case WIRELESS_CTRL_CMD_CODE_USB_CONNECTED:
  26. sys_cb.peer_usb_is_active = 1;
  27. printf("[CMD] peer usb insert\n");
  28. break;
  29. case WIRELESS_CTRL_CMD_CODE_USB_DISCONNECTED:
  30. sys_cb.peer_usb_is_active = 0;
  31. printf("[CMD] peer usb remove\n");
  32. break;
  33. case WIRELESS_CTRL_CMD_CODE_CAPS_LOCK_CHANGE:
  34. break;
  35. default:
  36. break;
  37. }
  38. }
  39. AT(.com_text.wireless.cmd.query)
  40. uint8_t wireless_cmd_get_buf(uint8_t *buf)
  41. {
  42. u8 curr_rptr = wireless_cmd_cb.rptr;
  43. u8 buf_size;
  44. if (curr_rptr == wireless_cmd_cb.wptr) {
  45. return 0;
  46. }
  47. buf_size = wireless_cmd_cb.cmd_data[curr_rptr].length + 2;
  48. memcpy(buf, &wireless_cmd_cb.cmd_data[curr_rptr], buf_size);
  49. wireless_cmd_cb.rptr = (curr_rptr + 1) % CTRL_CMD_PACKET_NUM;
  50. return buf_size;
  51. }
  52. /* Not single packet, it will compose with HID or AUDIO */
  53. void wireless_cmd_send_ctrl_command_asyn(uint8_t type, uint8_t length, uint8_t *value)
  54. {
  55. u8 next_wptr = (wireless_cmd_cb.wptr + 1) % CTRL_CMD_PACKET_NUM;
  56. if (next_wptr == wireless_cmd_cb.rptr || length > (CTRL_CMD_PACKET_SIZE - 2)) {
  57. return;
  58. }
  59. wireless_cmd_cb.cmd_data[wireless_cmd_cb.wptr].type = type;
  60. wireless_cmd_cb.cmd_data[wireless_cmd_cb.wptr].length = length;
  61. if (length && value) {
  62. memcpy(wireless_cmd_cb.cmd_data[wireless_cmd_cb.wptr].value, value, length);
  63. }
  64. wireless_cmd_cb.wptr = next_wptr;
  65. }
  66. void wireless_cmd_init(void)
  67. {
  68. memset(&wireless_cmd_cb, 0x00, sizeof(wireless_cmd_cb));
  69. }