ctrl_api.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /*
  2. * Espressif Systems Wireless LAN device driver
  3. *
  4. * Copyright (C) 2015-2022 Espressif Systems (Shanghai) PTE LTD
  5. * SPDX-License-Identifier: GPL-2.0-only OR Apache-2.0
  6. */
  7. #include "ctrl_api.h"
  8. #include "ctrl_core.h"
  9. #define CTRL_SEND_REQ(msGiD) do { \
  10. req.msg_id = msGiD; \
  11. if(SUCCESS != ctrl_app_send_req(&req)) { \
  12. printf("Failed to send control req %u\n", req.msg_id); \
  13. return NULL; \
  14. } \
  15. } while(0);
  16. #define CTRL_DECODE_RESP_IF_NOT_ASYNC() do { \
  17. if (CALLBACK_AVAILABLE == is_async_resp_callback_registered(req)) \
  18. return NULL; \
  19. return ctrl_wait_and_parse_sync_resp(&req); \
  20. } while(0);
  21. extern int init_hosted_control_lib_internal(void);
  22. extern int deinit_hosted_control_lib_internal(void);
  23. int init_hosted_control_lib(void)
  24. {
  25. return init_hosted_control_lib_internal();
  26. }
  27. int deinit_hosted_control_lib(void)
  28. {
  29. return deinit_hosted_control_lib_internal();
  30. }
  31. /** Control Req->Resp APIs **/
  32. ctrl_cmd_t * wifi_get_mac(ctrl_cmd_t req)
  33. {
  34. CTRL_SEND_REQ(CTRL_REQ_GET_MAC_ADDR);
  35. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  36. }
  37. ctrl_cmd_t * wifi_set_mac(ctrl_cmd_t req)
  38. {
  39. CTRL_SEND_REQ(CTRL_REQ_SET_MAC_ADDR);
  40. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  41. }
  42. ctrl_cmd_t * wifi_get_mode(ctrl_cmd_t req)
  43. {
  44. CTRL_SEND_REQ(CTRL_REQ_GET_WIFI_MODE);
  45. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  46. }
  47. ctrl_cmd_t * wifi_set_mode(ctrl_cmd_t req)
  48. {
  49. CTRL_SEND_REQ(CTRL_REQ_SET_WIFI_MODE);
  50. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  51. }
  52. ctrl_cmd_t * wifi_set_power_save_mode(ctrl_cmd_t req)
  53. {
  54. CTRL_SEND_REQ(CTRL_REQ_SET_PS_MODE);
  55. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  56. }
  57. ctrl_cmd_t * wifi_get_power_save_mode(ctrl_cmd_t req)
  58. {
  59. CTRL_SEND_REQ(CTRL_REQ_GET_PS_MODE);
  60. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  61. }
  62. ctrl_cmd_t * wifi_ap_scan_list(ctrl_cmd_t req)
  63. {
  64. CTRL_SEND_REQ(CTRL_REQ_GET_AP_SCAN_LIST);
  65. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  66. }
  67. ctrl_cmd_t * wifi_get_ap_config(ctrl_cmd_t req)
  68. {
  69. CTRL_SEND_REQ(CTRL_REQ_GET_AP_CONFIG);
  70. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  71. }
  72. ctrl_cmd_t * wifi_connect_ap(ctrl_cmd_t req)
  73. {
  74. CTRL_SEND_REQ(CTRL_REQ_CONNECT_AP);
  75. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  76. }
  77. ctrl_cmd_t * wifi_disconnect_ap(ctrl_cmd_t req)
  78. {
  79. CTRL_SEND_REQ(CTRL_REQ_DISCONNECT_AP);
  80. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  81. }
  82. ctrl_cmd_t * wifi_start_softap(ctrl_cmd_t req)
  83. {
  84. CTRL_SEND_REQ(CTRL_REQ_START_SOFTAP);
  85. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  86. }
  87. ctrl_cmd_t * wifi_get_softap_config(ctrl_cmd_t req)
  88. {
  89. CTRL_SEND_REQ(CTRL_REQ_GET_SOFTAP_CONFIG);
  90. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  91. }
  92. ctrl_cmd_t * wifi_stop_softap(ctrl_cmd_t req)
  93. {
  94. CTRL_SEND_REQ(CTRL_REQ_STOP_SOFTAP);
  95. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  96. }
  97. ctrl_cmd_t * wifi_get_softap_connected_station_list(ctrl_cmd_t req)
  98. {
  99. CTRL_SEND_REQ(CTRL_REQ_GET_SOFTAP_CONN_STA_LIST);
  100. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  101. }
  102. ctrl_cmd_t * wifi_set_vendor_specific_ie(ctrl_cmd_t req)
  103. {
  104. CTRL_SEND_REQ(CTRL_REQ_SET_SOFTAP_VND_IE);
  105. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  106. }
  107. ctrl_cmd_t * wifi_set_max_tx_power(ctrl_cmd_t req)
  108. {
  109. CTRL_SEND_REQ(CTRL_REQ_SET_WIFI_MAX_TX_POWER);
  110. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  111. }
  112. ctrl_cmd_t * wifi_get_curr_tx_power(ctrl_cmd_t req)
  113. {
  114. CTRL_SEND_REQ(CTRL_REQ_GET_WIFI_CURR_TX_POWER);
  115. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  116. }
  117. ctrl_cmd_t * config_heartbeat(ctrl_cmd_t req)
  118. {
  119. CTRL_SEND_REQ(CTRL_REQ_CONFIG_HEARTBEAT);
  120. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  121. }
  122. ctrl_cmd_t * ota_begin(ctrl_cmd_t req)
  123. {
  124. CTRL_SEND_REQ(CTRL_REQ_OTA_BEGIN);
  125. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  126. }
  127. ctrl_cmd_t * ota_write(ctrl_cmd_t req)
  128. {
  129. CTRL_SEND_REQ(CTRL_REQ_OTA_WRITE);
  130. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  131. }
  132. ctrl_cmd_t * ota_end(ctrl_cmd_t req)
  133. {
  134. CTRL_SEND_REQ(CTRL_REQ_OTA_END);
  135. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  136. }
  137. ctrl_cmd_t * feature_config(ctrl_cmd_t req)
  138. {
  139. CTRL_SEND_REQ(CTRL_REQ_ENABLE_DISABLE);
  140. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  141. }
  142. ctrl_cmd_t * get_fw_version(ctrl_cmd_t req)
  143. {
  144. CTRL_SEND_REQ(CTRL_REQ_GET_FW_VERSION);
  145. CTRL_DECODE_RESP_IF_NOT_ASYNC();
  146. }