/********************************************************* * @file cm_demo_wifiscan.c * @brief OpenCPU wifiscan示例 * Copyright (c) 2023 China Mobile IOT. * All rights reserved. * created by ShiMingRui 2023/6/29 ********************************************************/ /**************************************************************************** * Included Files ****************************************************************************/ #include #include #include #include "cm_wifiscan.h" #include "cm_demo_uart.h" /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ #define STR_LEN(s) (sizeof(s) - 1) #define STR_ITEM(s) (s), STR_LEN(s) /**************************************************************************** * Private Types ****************************************************************************/ /**************************************************************************** * Private Function Prototypes ****************************************************************************/ /**************************************************************************** * Private Data ****************************************************************************/ /**************************************************************************** * Private Functions ****************************************************************************/ static void __NumToHex(char *inData, int inLen, char *outData) { int i=0; char tmpBuf[10]; memset(tmpBuf, 0, sizeof(tmpBuf)); if (inLen > 0) { for (i = 0; i < inLen; i++) { sprintf(tmpBuf, "%02X", inData[i]); strcat(outData, tmpBuf); } } } static void __wifiscan_callback_demo(cm_wifi_scan_info_t *param, void *user_param) { cm_demo_printf("__wifiscan_callback_demo %s\n", user_param); char macBuf[50]; for (int i = 0; i < param->bssid_number; i++) { memset(macBuf, 0, sizeof(macBuf)); __NumToHex((char*)param->channel_cell_list[i].bssid, sizeof(param->channel_cell_list[i].bssid), macBuf); cm_demo_printf("%d, %s, %d, %d\n", i+1, macBuf, param->channel_cell_list[i].rssi, param->channel_cell_list[i].channel_number); } } /* 执行测试命令 */ void cm_test_wifiscan(unsigned char **cmd, int len) { const char *sub_cmd = (const char *)cmd[2]; /* CM:WIFISCAN:CFG */ /* 测试需首先进行参数配置 */ if (strncmp(sub_cmd, STR_ITEM("CFG")) == 0) { uint8_t round = 3; uint8_t max = 10; uint8_t time_out = 30; uint8_t priority = CM_WIFI_SCAN_WIFI_HIGH; if (cm_wifiscan_cfg(CM_WIFI_SCAN_CFG_ROUND, &round)) { cm_demo_printf("wifiscan cfg round err\n"); } if (cm_wifiscan_cfg(CM_WIFI_SCAN_CFG_MAX_COUNT, &max)) { cm_demo_printf("wifiscan cfg max err\n"); } if (cm_wifiscan_cfg(CM_WIFI_SCAN_CFG_TIMEOUT, &time_out)) { cm_demo_printf("wifiscan cfg time_out err\n"); } if (cm_wifiscan_cfg(CM_WIFI_SCAN_CFG_PRIORITY, &priority)) { cm_demo_printf("wifiscan cfg priority err\n"); } } /* CM:WIFISCAN:START */ /* 开始扫描,扫描结果将从回调函数异步上报,切换CFUN过程中禁止扫描WiFi */ else if (strncmp(sub_cmd, STR_ITEM("START")) == 0) { if(cm_wifiscan_start((cm_wifiscan_callback_t)__wifiscan_callback_demo, "wifiscan")) { cm_demo_printf("wifiscan start err\n"); } } /* CM:WIFISCAN:STOP */ /* 停止扫描,超时时间未到或结果未完全返回时,可中断wifiscan功能 */ else if (strncmp(sub_cmd, STR_ITEM("STOP")) == 0) { if(cm_wifiscan_stop()) { cm_demo_printf("wifiscan stop err\n"); } } /* CM:WIFISCAN:QUERY */ /* 查询扫描结果,查询返回的是最后一次扫描的结果 */ else if (strncmp(sub_cmd, STR_ITEM("QUERY")) == 0) { cm_wifi_scan_info_t *param = NULL; if(cm_wifiscan_query(¶m)) { cm_demo_printf("wifiscan query err\n"); } char macBuf[50]; for(int i = 0; i < param->bssid_number; i++) { memset(macBuf,0,sizeof(macBuf)); __NumToHex((char*)param->channel_cell_list[i].bssid, sizeof(param->channel_cell_list[i].bssid), macBuf); cm_demo_printf("%d, %s, %d, %d\n", i+1, macBuf, param->channel_cell_list[i].rssi, param->channel_cell_list[i].channel_number); } } }