Exemple #1
0
void SysResetThread(void *arg)
{
	UINT8 gpio_val;
	int i;
	Agent_config_t  pConfigData;

	while (1) 
	{
		if (system_reset_flag == 0x12345678) 
		{
			gpio_val = BSP_GPIOGetValue(USER_GPIO_RESET_BUTTON);
			if (gpio_val == USER_RESET_BUTTON_PRESS) {
				for (i = 0; i < USER_RESET_PRESS_TIMEOUT; i++) {
					OSTimeDly(50);		/* delay 500ms filter button shake */
					gpio_val = BSP_GPIOGetValue(USER_GPIO_RESET_BUTTON);
					if (gpio_val != USER_RESET_BUTTON_PRESS) {
						break;
					}
				}
				
				if (i == USER_RESET_PRESS_TIMEOUT) {
					
					memcpy(&pConfigData, &Agent_config_data, sizeof(Agent_config_t));
					pConfigData.flag = 0;
					memset(pConfigData.wifi_ssid, 0x0, sizeof(pConfigData.wifi_ssid));
					memset(pConfigData.wifi_key, 0x0, sizeof(pConfigData.wifi_key));
	
					nl6621_SaveConfigData(&pConfigData);
					/* reset module */
					log_warn("RESET button press more than 4 seconds, reseting System.\n");
					OSTimeDly(100);
					nl6621_Reset();
				} 
			}				
		}
		OSTimeDly(100);
	}
}
Exemple #2
0
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  Agent_network_init
 *  Description:  Initialize agent system system connection status.
 *         Note:  This interface will check the gpio 10 level, when it was press, then
 *              set to DirectConfig mode, else change gpio to reset button. 
 * =====================================================================================
 */
void Agent_network_init(void)
{
    UINT8 gpio_val;
	int ret = 0;

	/* DirectConfig gpio is valied when set to low level */
	BSP_GPIOPinMux(USER_GPIO_DIRECTCONFIG);  
	BSP_GPIOSetDir(USER_GPIO_DIRECTCONFIG, GPIO_DIRECTION_INPUT);

	Yeelink_Init();

    /* 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 status */
			sys_status.status = SYS_STATUS_WIFI_DIRECTCONFING;	
            
			/* Directconfig mode */
            ret = StartDirectConfigConn();
			if (ret == 0) {			
				/* Set system to STA mode */
				sys_status.status = SYS_STATUS_WIFI_STA_CONNECTED;
	
				Agent_reset_init();
	            return;
			}
        } 
    }	
	
	/* If directconfig function is not triggered, initialize device reset function */
	Agent_reset_init();

    /* Start the Wifi connection, setup AP or Station mode according to last connection 
	 * status store in nor flash. Otherwise, switch to softap mode if connected AP
	 * failed in station mode.
	 * */	
	if (nl6621_GetConfigData(&Agent_config_data) != 0) {
		log_info("Get GAgentConfig Data error.\n");
	}
	//测试用
	//调试用的
#define wifissid   "NUFRONT-test03"//"nu2.4" 
#define wifikey	   "nufront.iopjklbnm" //"google.com.k" 

	Agent_config_data.flag |= XPG_CFG_FLAG_CONNECTED;
	memcpy(Agent_config_data.wifi_ssid,wifissid,strlen(wifissid));
	Agent_config_data.wifi_ssid[strlen(wifissid)] = 0;
 	memcpy(Agent_config_data.wifi_key,wifikey,strlen(wifikey));
  	Agent_config_data.wifi_key[strlen(wifikey)] = 0;
	//测试用
	if ((Agent_config_data.flag & XPG_CFG_FLAG_CONNECTED) == XPG_CFG_FLAG_CONNECTED) {
        /* setup station mode */
		sys_status.status = SYS_STATUS_WIFI_DIRECTCONFING;
		
		ret = DRV_WiFi_StaModeConnStart(Agent_config_data.wifi_ssid, Agent_config_data.wifi_key, 1);
		if (ret != 0) { 	/* switch to softAP mode */
			goto SOFTAP;
		}
		sys_status.status = SYS_STATUS_WIFI_STA_CONNECTED;

	} else {
		/* setup softap mode */
SOFTAP:
		log_info("Device Working at AP mode\r\n");
        DRV_WiFi_SoftAPModeStart();
		sys_status.status = SYS_STATUS_WIFI_SOFTAP;
	}

    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;	
}