コード例 #1
0
ファイル: agent_core.c プロジェクト: NL6621/Yeelink
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);
	}
}
コード例 #2
0
/* 
 * ===  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;	
}
コード例 #3
0
/**************************************************
 **************************************************
 建立和云端服务器的连接
 MQTT业务处理(订阅/登陆/数据等)由MQTT handle
 在此期间建立socket短链接
 WIFI           CLOUD(HTTP)          CLOUD(MQTT)
 =================================================
 REQ_DID        ------->    handle
 REQ_DID_ACK    <----    DID_INFO
 REQ_M2MINFO    ------>    handle
 REQ_M2MINFO_ACK  <--  M2M_INFO
 MQTT_LOGIN   --------     (END)            ----------->     mqtt handle(login)
 
 **************************************************/
void GAgent_Login_Cloud(void)
{
    int ret;
	char *p_Did = NULL;

    /* WIFI STATION模式下才能接入cloud */
    if( (wifiStatus & WIFI_MODE_STATION) != WIFI_MODE_STATION ||
        (wifiStatus & WIFI_STATION_STATUS) != WIFI_STATION_STATUS)
    {
        return ;
    }

    switch(g_ConCloud_Status)
    {
        case CONCLOUD_REQ_DID:
            if( nl6621_GetTime_S() - g_Xpg_GlobalVar.connect2CloudLastTime < 1 )
            {
                return ;
            }
            g_Xpg_GlobalVar.connect2CloudLastTime = nl6621_GetTime_S();
            if((Mqtt_Register2Server(&g_stMQTTBroker)==0))
            {
                g_ConCloud_Status = CONCLOUD_REQ_DID_ACK;
                g_Xpg_GlobalVar.send2HttpLastTime = nl6621_GetTime_S();
                log_info("MQTT_Register2Server OK!\n");
            }
            else
            {
                log_info("Mqtt_Register2Server Fail!\n");
            }
            break;

        case CONCLOUD_REQ_DID_ACK:
            /* time out, or socket isn't created , resent  CONCLOUD_REQ_DID */
            if( nl6621_GetTime_S()-g_Xpg_GlobalVar.send2HttpLastTime>=HTTP_TIMEOUT || 
                g_Xpg_GlobalVar.http_socketid<=0 )
            {
                g_ConCloud_Status = CONCLOUD_REQ_DID_ACK;
                break;
            }

            ret = Http_Recive_Did(g_Xpg_GlobalVar.DID);
            if (ret == 0)
            {
                p_Did = g_Xpg_GlobalVar.DID;
                DIdLen = GAGENT_DID_LEN;
                memcpy((unsigned char*)g_stGAgentConfigData.Cloud_DId, (unsigned char*)p_Did, DIdLen);
                g_stGAgentConfigData.Cloud_DId[DIdLen] = '\0';
                nl6621_SaveConfigData(&g_stGAgentConfigData);
                
                g_ConCloud_Status = CONCLOUD_REQ_M2MINFO;
                log_info( "Http Receive DID is:%s[len:%d]\n", p_Did, DIdLen); 
                log_info( "ConCloud Status[%04x]\n", g_ConCloud_Status);
            }
            break;

        case CONCLOUD_REQ_M2MINFO:
            if( nl6621_GetTime_S()-g_Xpg_GlobalVar.connect2CloudLastTime < 1 )
            {
                return ;
            }
            g_Xpg_GlobalVar.connect2CloudLastTime = nl6621_GetTime_S();
            if( Http_Sent_Provision()==0 )
            {
                g_Xpg_GlobalVar.send2HttpLastTime = nl6621_GetTime_S();
                g_ConCloud_Status = CONCLOUD_REQ_M2MINFO_ACK;
                GAgent_Printf( GAGENT_INFO,"Http_Sent_Provision OK! ");
            }                
            else
            {
                GAgent_Printf( GAGENT_INFO,"Http_Sent_Provision Fail!");
            }
            break;
        case CONCLOUD_REQ_M2MINFO_ACK:
            /* time out, or socket isn't created ,resent  CONCLOUD_REQ_M2MINFO */
            if( nl6621_GetTime_S()-g_Xpg_GlobalVar.send2HttpLastTime>=HTTP_TIMEOUT || 
                g_Xpg_GlobalVar.http_socketid<=0 )
            {
                g_ConCloud_Status = CONCLOUD_REQ_M2MINFO;
                break;
            }

            ret = Http_Recive_M2minfo(g_Xpg_GlobalVar.m2m_SERVER, &g_Xpg_GlobalVar.m2m_Port);
            if( ret==0 ) 
            {
    			g_ConCloud_Status = CONCLOUD_REQ_LOGIN;
                GAgent_Printf(GAGENT_WARNING, "--HTTP response OK. Goto MQTT LOGIN");

            }
            break;
        case CONCLOUD_REQ_LOGIN:
            if( nl6621_GetTime_S() - g_Xpg_GlobalVar.connect2CloudLastTime < 1 )
            {
                return ;
            }
            g_Xpg_GlobalVar.connect2CloudLastTime = nl6621_GetTime_S();
            if((Mqtt_Login2Server(&g_stMQTTBroker)==0))
            {
                g_ConCloud_Status = CONCLOUD_RUNNING;
                g_MQTTStatus = MQTT_STATUS_LOGIN;
                log_info( "Mqtt_Login2Server OK!\n");
            }
            else
            {
                log_info("Mqtt_Login2Server Fail!\n");
            }
            break;
        case CONCLOUD_RUNNING:
            /* mqtt handle */
            if(g_MQTTStatus == MQTT_STATUS_LOGIN)
            {
                if( nl6621_GetTime_S() - g_Xpg_GlobalVar.connect2CloudLastTime >= MQTT_CONNECT_TIMEOUT )
                {
					log_info("MQTT connect timeout.\n");
                    g_ConCloud_Status = CONCLOUD_REQ_LOGIN;
                    break;
                }
            }
            MQTT_handlePacket();
            break;
        case CONCLOUD_INVALID:
        default:
            break;
    }
}