int Udp_Onboarding( u8* buf ,int datalength ) { unsigned char* passwdlength = NULL; char StaSsid[32]; char StaPass[32]; memset(StaSsid,0,32); memset(StaPass,0,32); memset(g_stGAgentConfigData.wifi_ssid,0,32); memset(g_stGAgentConfigData.wifi_key,0,32); passwdlength = buf+(10+buf[9]+1); strncpy(StaSsid, buf+10,buf[9]); StaSsid[buf[9]+1] = '\0'; strncpy(StaPass,buf+(10+buf[9]+2),*passwdlength); StaPass[(*passwdlength)+1]='\0'; memcpy(g_stGAgentConfigData.wifi_ssid,StaSsid,buf[9]); memcpy(g_stGAgentConfigData.wifi_key,StaPass,*passwdlength); g_stGAgentConfigData.flag |= XPG_CFG_FLAG_CONNECTED; DRV_GAgent_SaveConfigData(&g_stGAgentConfigData); DRV_WiFi_StationCustomModeStart(StaSsid, StaPass); return 1; }
void GAgent_SaveSSIDAndKey(char *pSSID, char *pKey) { //memcpy(&wNetConfig, nwkpara, sizeof(network_InitTypeDef_st)); memset(g_stGAgentConfigData.wifi_ssid,0,32); memset(g_stGAgentConfigData.wifi_key,0,32); memcpy(g_stGAgentConfigData.wifi_ssid, pSSID, 32); memcpy(g_stGAgentConfigData.wifi_key, pKey, 32); DRV_WiFi_StationCustomModeStart(pSSID , pKey); g_stGAgentConfigData.flag=g_stGAgentConfigData.flag|XPG_CFG_FLAG_CONNECTED; DRV_GAgent_SaveConfigData(&g_stGAgentConfigData); GAgent_Printf(GAGENT_INFO,"Configuration is successful."); return; }
/* 如果有SSID和KEY, 以Station模式运行,并连接到指定的SSID; * 否则作为AP模式运行; */ void Connect2LateWiFi(void) { if ((g_stGAgentConfigData.flag & XPG_CFG_FLAG_CONNECTED) == XPG_CFG_FLAG_CONNECTED) { //flash 里面有要加入的网络名称 //wifiStatus = WIFI_MODE_STATION; wifiStatus = wifiStatus | WIFI_STATION_STATUS | WIFI_MODE_STATION; log_info("try to connect wifi...[%08x]\n", g_stGAgentConfigData.flag); log_info("SSID: %s\n",g_stGAgentConfigData.wifi_ssid); log_info("KEY: %s\n",g_stGAgentConfigData.wifi_key); DRV_WiFi_StationCustomModeStart(g_stGAgentConfigData.wifi_ssid,g_stGAgentConfigData.wifi_key); } else { wifiStatus = WIFI_MODE_AP; log_info("Connect2LateWiFi, Working at AP mode\r\n"); DRV_WiFi_SoftAPModeStart(); } return; }
/* * === FUNCTION ====================================================================== * Name: GAgent_SetDevNetWork * Description: Start to connect to a network when used DirectConfig mode or STA mode, * otherwise, Create a network with AP mode. * Note: This interface will check the gpio 10 level, when it was press, then * set to DirectConfig mode, else read flag from norflash, and judge launch * SoftAP mode or STA mode. * ===================================================================================== */ void GAgent_SetDevNetWork(void) { UINT8 gpio_val; /* if the Directconfig button was pressed(gpio is low level), then set to Directconfig * mode. * */ gpio_val = BSP_GPIOGetValue(USER_GPIO_DIRECTCONFIG); if (gpio_val == 0) { OSTimeDly(20); /* delay 200ms filter button shake */ gpio_val = BSP_GPIOGetValue(USER_GPIO_DIRECTCONFIG); if (gpio_val == 0) { /* Set system to directConfig status */ sys_status.status = SYS_STATUS_WIFI_DIRECTCONFING; /* Launch directconfig mode */ TestDirectConfig(); g_stGAgentConfigData.flag |= XPG_CFG_FLAG_CONNECTED; nl6621_SaveConfigData(&g_stGAgentConfigData); wifiStatus = wifiStatus | WIFI_STATION_STATUS | WIFI_MODE_STATION; /* Set system to STA mode */ sys_status.status = SYS_STATUS_WIFI_STA_CONNECTED; return; } } if (nl6621_GetConfigData(&g_stGAgentConfigData) != 0) { log_info("Get GAgentConfig Data error.\n"); } /* 启动Wifi连接,根据是否获得保存数据, 决定使用AP或者Station模式 * */ if ((g_stGAgentConfigData.flag & XPG_CFG_FLAG_CONNECTED) == XPG_CFG_FLAG_CONNECTED) { //flash 里面有要加入的网络名称 /* Set system to STA status */ sys_status.status = SYS_STATUS_WIFI_DIRECTCONFING; wifiStatus |= WIFI_STATION_STATUS | WIFI_MODE_STATION; log_info("Try to connect wifi...[%08x]\n", g_stGAgentConfigData.flag); log_info("SSID: %s\n", g_stGAgentConfigData.wifi_ssid); log_info("KEY: %s\n", g_stGAgentConfigData.wifi_key); DRV_WiFi_StationCustomModeStart(g_stGAgentConfigData.wifi_ssid, g_stGAgentConfigData.wifi_key); if (wifi_sta_connect_ap_flag != 0) { /* switch to softAP mode */ goto SOFTAP; } /* Set system status to STA mode */ sys_status.status = SYS_STATUS_WIFI_STA_CONNECTED; } else { SOFTAP: wifiStatus = WIFI_MODE_AP; log_info("Connect2LateWiFi, Working at AP mode\r\n"); DRV_WiFi_SoftAPModeStart(); /* Set system status to STA mode */ sys_status.status = SYS_STATUS_WIFI_SOFTAP; } return; }