|
|
@@ -0,0 +1,182 @@
|
|
|
+#include "usbh_core.h"
|
|
|
+#include "usbh_cdc_acm.h"
|
|
|
+#include "shell.h"
|
|
|
+
|
|
|
+static USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t cdc_buffer[8 * 1024];
|
|
|
+
|
|
|
+int wifi_scan(int argc, char **argv)
|
|
|
+{
|
|
|
+ struct usbh_cdc_acm *cdc_acm_class = usbh_find_class_instance("/dev/ttyACM0");
|
|
|
+ uint32_t len;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (cdc_acm_class == NULL) {
|
|
|
+ printf("cdc acm class not found\r\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ len = snprintf((char *)cdc_buffer, sizeof(cdc_buffer), "ap_scan\r\n");
|
|
|
+ ret = usbh_cdc_acm_bulk_out_transfer(cdc_acm_class, cdc_buffer, len, 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi scan failed1, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = usbh_cdc_acm_bulk_in_transfer(cdc_acm_class, cdc_buffer, sizeof(cdc_buffer), 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi scan failed2, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ cdc_buffer[ret] = '\0';
|
|
|
+ printf("%s\r\n", cdc_buffer);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+CSH_CMD_EXPORT(wifi_scan, wifi_scan);
|
|
|
+
|
|
|
+int wifi_scan_result(int argc, char **argv)
|
|
|
+{
|
|
|
+ struct usbh_cdc_acm *cdc_acm_class = usbh_find_class_instance("/dev/ttyACM0");
|
|
|
+ uint32_t len;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (cdc_acm_class == NULL) {
|
|
|
+ printf("cdc acm class not found\r\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ len = snprintf((char *)cdc_buffer, sizeof(cdc_buffer), "ap_scan_result {\"offset\":0, \"count\":0}\r\n");
|
|
|
+ ret = usbh_cdc_acm_bulk_out_transfer(cdc_acm_class, cdc_buffer, len, 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi scan failed1, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = usbh_cdc_acm_bulk_in_transfer(cdc_acm_class, cdc_buffer, sizeof(cdc_buffer), 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi scan failed2, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ cdc_buffer[ret] = '\0';
|
|
|
+ printf("%s\r\n", cdc_buffer);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+CSH_CMD_EXPORT(wifi_scan_result, wifi_scan_result);
|
|
|
+
|
|
|
+int wifi_connect(int argc, char **argv)
|
|
|
+{
|
|
|
+ struct usbh_cdc_acm *cdc_acm_class = usbh_find_class_instance("/dev/ttyACM0");
|
|
|
+ uint32_t len;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (cdc_acm_class == NULL) {
|
|
|
+ printf("cdc acm class not found\r\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (argc < 3) {
|
|
|
+ printf("please input correct command: wifi_connect ssid password\r\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ len = snprintf((char *)cdc_buffer, sizeof(cdc_buffer), "ap_connect {\"ssid\":\"%s\", \"password\":\"%s\"}\r\n", argv[1], argv[2]);
|
|
|
+ ret = usbh_cdc_acm_bulk_out_transfer(cdc_acm_class, cdc_buffer, len, 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi connect failed1, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ ret = usbh_cdc_acm_bulk_in_transfer(cdc_acm_class, cdc_buffer, sizeof(cdc_buffer), 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi connect failed2, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ cdc_buffer[ret] = '\0';
|
|
|
+ printf("%s\r\n", cdc_buffer);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+CSH_CMD_EXPORT(wifi_connect, wifi_connect);
|
|
|
+
|
|
|
+int wifi_disconnect(int argc, char **argv)
|
|
|
+{
|
|
|
+ struct usbh_cdc_acm *cdc_acm_class = usbh_find_class_instance("/dev/ttyACM0");
|
|
|
+ uint32_t len;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (cdc_acm_class == NULL) {
|
|
|
+ printf("cdc acm class not found\r\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ len = snprintf((char *)cdc_buffer, sizeof(cdc_buffer), "ap_disconnect\r\n");
|
|
|
+ ret = usbh_cdc_acm_bulk_out_transfer(cdc_acm_class, cdc_buffer, len, 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi disconnect failed1, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ ret = usbh_cdc_acm_bulk_in_transfer(cdc_acm_class, cdc_buffer, sizeof(cdc_buffer), 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi disconnect failed2, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ cdc_buffer[ret] = '\0';
|
|
|
+ printf("%s\r\n", cdc_buffer);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+CSH_CMD_EXPORT(wifi_disconnect, wifi_disconnect);
|
|
|
+
|
|
|
+int wifi_status(int argc, char **argv)
|
|
|
+{
|
|
|
+ struct usbh_cdc_acm *cdc_acm_class = usbh_find_class_instance("/dev/ttyACM0");
|
|
|
+ uint32_t len;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (cdc_acm_class == NULL) {
|
|
|
+ printf("cdc acm class not found\r\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ len = snprintf((char *)cdc_buffer, sizeof(cdc_buffer), "ap_status\r\n");
|
|
|
+ ret = usbh_cdc_acm_bulk_out_transfer(cdc_acm_class, cdc_buffer, len, 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi status failed1, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = usbh_cdc_acm_bulk_in_transfer(cdc_acm_class, cdc_buffer, sizeof(cdc_buffer), 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi status failed2, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ cdc_buffer[ret] = '\0';
|
|
|
+ printf("%s\r\n", cdc_buffer);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+CSH_CMD_EXPORT(wifi_status, wifi_status);
|
|
|
+
|
|
|
+int wifi_version(int argc, char **argv)
|
|
|
+{
|
|
|
+ struct usbh_cdc_acm *cdc_acm_class = usbh_find_class_instance("/dev/ttyACM0");
|
|
|
+ uint32_t len;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (cdc_acm_class == NULL) {
|
|
|
+ printf("cdc acm class not found\r\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ len = snprintf((char *)cdc_buffer, sizeof(cdc_buffer), "sys_version\r\n");
|
|
|
+ ret = usbh_cdc_acm_bulk_out_transfer(cdc_acm_class, cdc_buffer, len, 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi status failed1, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = usbh_cdc_acm_bulk_in_transfer(cdc_acm_class, cdc_buffer, sizeof(cdc_buffer), 3000);
|
|
|
+ if (ret < 0) {
|
|
|
+ printf("wifi status failed2, ret:%d\r\n", ret);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ cdc_buffer[ret] = '\0';
|
|
|
+ printf("%s\r\n", cdc_buffer);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+CSH_CMD_EXPORT(wifi_version, wifi_version);
|