// Connect to the MQTT broker. Call this function whenever connection needs // to be re-established. // returns: 0 - everything OK // -1 - packet error // -2 - failed to get connack int App_ConnectMqtt() { int packet_length; mqtt_init(&broker, WIO_CLIENTID); mqtt_init_auth(&broker, WIO_USERNAME, WIO_PASSWORD); mqtt_connect(&broker); // wait for CONNACK packet_length = mqtt_read_packet(6000); if(packet_length < 0) { DisplayLCD(LCD_LINE4, "MQTT packet error"); return -1; } if(MQTTParseMessageType(rxm.message) != MQTT_MSG_CONNACK) { return -2; } if(rxm.message[3] != 0x00) { return -2; } App_PrepareIncomingData(); AtLibGs_FlushIncomingMessage(); mqttConnected=1; return 0; }
/*---------------------------------------------------------------------------* * Routine: App_InitModule *---------------------------------------------------------------------------* * Description: * Setup the mode by first checking if there is a link and either * report or continue to the rest of the program. * Inputs: * void * Outputs: * void *---------------------------------------------------------------------------*/ void App_InitModule(void) { ATLIBGS_MSG_ID_E r = ATLIBGS_MSG_ID_NONE; DisplayLCD(LCD_LINE7, " Preparing"); DisplayLCD(LCD_LINE8, " Init Mod"); /* Give the unit a little time to start up */ /* (300 ms for GS1011 and 1000 ms for GS1500) */ MSTimerDelay(1000); /* Check the link */ #ifdef ATLIBGS_DEBUG_ENABLE ConsolePrintf("Checking link\r\n"); #endif /* Wait for the banner (if any) */ MSTimerDelay(500); /* Clear out the buffers */ AtLibGs_FlushRxBuffer(); /* Send command to check */ do { AtLibGs_FlushIncomingMessage(); DisplayLCD(LCD_LINE8, "Checking..."); r = AtLibGs_Check(); } while (ATLIBGS_MSG_ID_OK != r); /* Send command to DISABLE echo */ do { DisplayLCD(LCD_LINE8, "Echo Off..."); r = AtLibGs_SetEcho(ATLIBGS_DISABLE); } while (ATLIBGS_MSG_ID_OK != r); /* Done */ DisplayLCD(LCD_LINE7, ""); DisplayLCD(LCD_LINE8, ""); }
/*---------------------------------------------------------------------------* * Routine: WIFI_init *---------------------------------------------------------------------------* * Description: * Initial setting + DHCP and show status on the LCD. * * Inputs: * void * Outputs: * ATLIBGS_MSG_ID_E *---------------------------------------------------------------------------*/ ATLIBGS_MSG_ID_E WIFI_init(int16_t showMessage) { ATLIBGS_MSG_ID_E rxMsgId = ATLIBGS_MSG_ID_NONE; char wifi_mac[20]; // Check the link #ifdef HOST_APP_DEBUG_ENABLE ConsolePrintf("Checking link\r\n"); #endif AtLibGs_Init(); // Wait for the banner MSTimerDelay(500); // Send command to check do { AtLibGs_FlushIncomingMessage(); DisplayLCD(LCD_LINE8, "Checking..."); rxMsgId = AtLibGs_Check(); } while (ATLIBGS_MSG_ID_OK != rxMsgId); do { rxMsgId = AtLibGs_SetEcho(0); // disable Echo }while (ATLIBGS_MSG_ID_OK != rxMsgId); do { rxMsgId = AtLibGs_Version(); // check the GS version }while (ATLIBGS_MSG_ID_OK != rxMsgId); // Get MAC Address & Show rxMsgId = AtLibGs_GetMAC(wifi_mac); if (rxMsgId == ATLIBGS_MSG_ID_OK) AtLibGs_ParseGetMacResponse(wifi_mac); memset(&wifi_mac[12], 0, 7); if (showMessage > 0) { DisplayLCD(LCD_LINE5, "MAC ADDRESS"); DisplayLCD(LCD_LINE6, (const uint8_t *)wifi_mac); DisplayLCD(LCD_LINE2, (const uint8_t *)AppVersion); MSTimerDelay(2000); DisplayLCD(LCD_LINE2, " "); } do { AtLibGs_FlushIncomingMessage(); DisplayLCD(LCD_LINE8, "Disassociate"); rxMsgId = AtLibGs_DisAssoc(); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Enable DHCP do { DisplayLCD(LCD_LINE8, "DHCP On..."); rxMsgId = AtLibGs_DHCPSet(1); } while (ATLIBGS_MSG_ID_OK != rxMsgId); if(strlen(GNV_Setting.webprov.ssid) > 0) { if(GNV_Setting.webprov.security == ATLIBGS_PROVSECU_WEP) { do { DisplayLCD(LCD_LINE8, " Setting WEP"); rxMsgId = AtLibGs_SetWEP1((int8_t*)GNV_Setting.webprov.password); } while (ATLIBGS_MSG_ID_OK != rxMsgId); DisplayLCD(LCD_LINE8, " WEP Set"); } else if(GNV_Setting.webprov.security == ATLIBGS_PROVSECU_WPA_PER) { do { DisplayLCD(LCD_LINE8, " Setting PSK"); rxMsgId = AtLibGs_CalcNStorePSK(GNV_Setting.webprov.ssid, GNV_Setting.webprov.password); } while (ATLIBGS_MSG_ID_OK != rxMsgId); DisplayLCD(LCD_LINE8, " PSK Set"); } else if(GNV_Setting.webprov.security == ATLIBGS_PROVSECU_WPA_ENT) { // Set AT+WAUTH=0 for WPA or WPA2 do { DisplayLCD(LCD_LINE8, " " ); rxMsgId = AtLibGs_SetAuthentictionMode(ATLIBGS_AUTHMODE_NONE_WPA); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Security Configuration do { DisplayLCD(LCD_LINE8, "Set Security"); rxMsgId = AtLibGs_SetSecurity(ATLIBGS_SMAUTO); } while (ATLIBGS_MSG_ID_OK != rxMsgId); } } else { #ifdef HOST_APP_SEC_WEP // Set AT+WAUTH=2 for WEP do { DisplayLCD(LCD_LINE8, " WEP AUTH " ); rxMsgId = AtLibGs_SetAuthentictionMode(2); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Set WEP do { rxMsgId = AtLibGs_SetWEP1(HOST_APP_AP_SEC_WEP); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Security Configuration do { rxMsgId = AtLibGs_SetSecurity(2); // WEP } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_SEC_PSK // Store the PSK value. This call takes might take few seconds to return do { DisplayLCD(LCD_LINE8, "Setting PSK"); rxMsgId = AtLibGs_CalcNStorePSK(HOST_APP_AP_SSID, HOST_APP_AP_SEC_PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_SEC_OPEN // Store the PSK value. This call takes might take few seconds to return do { DisplayLCD(LCD_LINE8, "No Security" ); rxMsgId = AtLibGs_SetAuthentictionMode(1); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_WPA // Set AT+WAUTH=0 for WPA or WPA2 do { DisplayLCD(LCD_LINE8, " WPA " ); rxMsgId = AtLibGs_SetAuthentictionMode(0); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Store the PSK value. This call takes might take few seconds to return do { DisplayLCD(LCD_LINE8, "Setting PSK"); rxMsgId = AtLibGs_CalcNStorePSK(HOST_APP_AP_SSID, HOST_APP_AP_SEC_PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Security Configuration do { DisplayLCD(LCD_LINE8, " WPA "); rxMsgId = AtLibGs_SetSecurity(4); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_WPA2 // Set AT+WAUTH=0 for WPA or WPA2 do { DisplayLCD(LCD_LINE8, " WPA2 " ); rxMsgId = AtLibGs_SetAuthentictionMode(ATLIBGS_AUTHMODE_NONE_WPA); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Store the PSK value. This call takes might take few seconds to return do { DisplayLCD(LCD_LINE8, "Setting PSK"); rxMsgId = AtLibGs_CalcNStorePSK(HOST_APP_AP_SSID, HOST_APP_AP_SEC_PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Security Configuration do { DisplayLCD(LCD_LINE8, " Set WPA "); rxMsgId = AtLibGs_SetSecurity(ATLIBGS_SMWPA2PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif } // Clear MAC Address and show WIFI DisplayLCD(LCD_LINE6, " WIFI "); DisplayLCD(LCD_LINE5, " "); return rxMsgId; }
ATLIBGS_MSG_ID_E WIFI_init(int16_t showMessage) { ATLIBGS_MSG_ID_E rxMsgId = ATLIBGS_MSG_ID_NONE; // Check the link #ifdef HOST_APP_DEBUG_ENABLE ConsolePrintf("Checking link\r\n"); #endif AtLibGs_Init(); // Wait for the banner MSTimerDelay(500); /* Send command to check */ do { AtLibGs_FlushIncomingMessage(); DisplayLCD(LCD_LINE4, "wl_check.. "); rxMsgId = AtLibGs_Check(); } while (ATLIBGS_MSG_ID_OK != rxMsgId); do { rxMsgId = AtLibGs_SetEcho(0); // disable Echo }while (ATLIBGS_MSG_ID_OK != rxMsgId); do { rxMsgId = AtLibGs_Version(); // check the GS version }while (ATLIBGS_MSG_ID_OK != rxMsgId); #if 0 if(strstr((const char *)MRBuffer, "2.3.")) // still debug why receive 2 extra bytes: ESC S { G_Extra2B = 2; } #endif do{ rxMsgId = AtLibGs_EnableRadio(1); // enable radio }while(rxMsgId != ATLIBGS_MSG_ID_OK); /* Get MAC Address & Show */ rxMsgId = AtLibGs_GetMAC(WiFiMAC); if (rxMsgId == ATLIBGS_MSG_ID_OK) AtLibGs_ParseGetMacResponse(WifiMAC); if (showMessage > 0) { DisplayLCD(LCD_LINE3, (const uint8_t *)WifiMAC); MSTimerDelay(2000); } do { AtLibGs_FlushIncomingMessage(); DisplayLCD(LCD_LINE4, "wl_disass.. "); rxMsgId = AtLibGs_DisAssoc(); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Enable DHCP do { DisplayLCD(LCD_LINE4, "wl_dhcpon.. "); rxMsgId = AtLibGs_DHCPSet(1); } while (ATLIBGS_MSG_ID_OK != rxMsgId); if(strlen(GNV_Setting.webprov.ssid) > 0) { if(GNV_Setting.webprov.security == ATLIBGS_PROVSECU_WEP) { do { DisplayLCD(LCD_LINE4, "wl_setwep.. "); rxMsgId = AtLibGs_SetWEP1((int8_t*)GNV_Setting.webprov.password); } while (ATLIBGS_MSG_ID_OK != rxMsgId); DisplayLCD(LCD_LINE4, "wl_wepset.. "); } else if(GNV_Setting.webprov.security == ATLIBGS_PROVSECU_WPA_PER) { do { DisplayLCD(LCD_LINE4, "wl_setpsk.. "); rxMsgId = AtLibGs_CalcNStorePSK(GNV_Setting.webprov.ssid, GNV_Setting.webprov.password); } while (ATLIBGS_MSG_ID_OK != rxMsgId); DisplayLCD(LCD_LINE4, "wl_pskset.. "); } else if(GNV_Setting.webprov.security == ATLIBGS_PROVSECU_WPA_ENT) { /* Set AT+WAUTH=0 for WPA or WPA2 */ do { DisplayLCD(LCD_LINE4, " " ); rxMsgId = AtLibGs_SetAuthentictionMode(ATLIBGS_AUTHMODE_NONE_WPA); } while (ATLIBGS_MSG_ID_OK != rxMsgId); /* Security Configuration */ do { DisplayLCD(LCD_LINE4, "wl_setsec.. "); rxMsgId = AtLibGs_SetSecurity(ATLIBGS_SMAUTO); } while (ATLIBGS_MSG_ID_OK != rxMsgId); } } else { #ifdef HOST_APP_SEC_WEP // Set AT+WAUTH=2 for WEP do { DisplayLCD(LCD_LINE4, "wl_wepauth.." ); rxMsgId = AtLibGs_SetAuthentictionMode(2); } while (ATLIBGS_MSG_ID_OK != rxMsgId); // Set WEP do { rxMsgId = AtLibGs_SetWEP1(HOST_APP_AP_SEC_WEP); } while (ATLIBGS_MSG_ID_OK != rxMsgId); /* Security Configuration */ do { rxMsgId = AtLibGs_SetSecurity(2); // WEP } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_SEC_PSK /* Store the PSK value. This call takes might take few seconds to return */ do { DisplayLCD(LCD_LINE4, "wl_setpsk.. "); rxMsgId = AtLibGs_CalcNStorePSK(HOST_APP_AP_SSID, HOST_APP_AP_SEC_PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_SEC_OPEN /* Store the PSK value. This call takes might take few seconds to return */ do { DisplayLCD(LCD_LINE4, "wl_nosec.. " ); rxMsgId = AtLibGs_SetAuthentictionMode(1); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_WPA // Set AT+WAUTH=0 for WPA or WPA2 do { DisplayLCD(LCD_LINE4, "wl_wpa.. " ); rxMsgId = AtLibGs_SetAuthentictionMode(0); } while (ATLIBGS_MSG_ID_OK != rxMsgId); /* Store the PSK value. This call takes might take few seconds to return */ do { DisplayLCD(LCD_LINE4, "wl_setpsk.. "); rxMsgId = AtLibGs_CalcNStorePSK(HOST_APP_AP_SSID, HOST_APP_AP_SEC_PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); /* Security Configuration */ do { DisplayLCD(LCD_LINE4, "wl_wpa.. "); rxMsgId = AtLibGs_SetSecurity(4); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif #ifdef HOST_APP_WPA2 // Set AT+WAUTH=0 for WPA or WPA2 do { DisplayLCD(LCD_LINE4, "wl_wpa2.. " ); rxMsgId = AtLibGs_SetAuthentictionMode(ATLIBGS_AUTHMODE_NONE_WPA); } while (ATLIBGS_MSG_ID_OK != rxMsgId); /* Store the PSK value. This call takes might take few seconds to return */ do { DisplayLCD(LCD_LINE4, "wl_setpsk.. "); rxMsgId = AtLibGs_CalcNStorePSK(HOST_APP_AP_SSID, HOST_APP_AP_SEC_PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); /* Security Configuration */ do { DisplayLCD(LCD_LINE4, "wl_setwpa.. "); rxMsgId = AtLibGs_SetSecurity(ATLIBGS_SMWPA2PSK); } while (ATLIBGS_MSG_ID_OK != rxMsgId); #endif } return rxMsgId; }
/*---------------------------------------------------------------------------* * Routine: App_StartupADKDemo *---------------------------------------------------------------------------* * Description: * Put the unit into a limited AP mode, enable XML parse, and setup mDNS * * Inputs: * void * Outputs: * void *---------------------------------------------------------------------------*/ void App_StartupADKDemo(void) { ATLIBGS_MSG_ID_E r; // DisplayLCD(LCD_LINE3, "Limited AP"); // DisplayLCD(LCD_LINE4, ATLIBGS_LIMITED_AP_SSID); // VirginCheck(); #if 1 DisplayLCD(LCD_LINE3, (const uint8_t *) "192.168.240."); DisplayLCD(LCD_LINE4, (const uint8_t *) "1/rdk.html"); #else DisplayLCD(LCD_LINE3, (const uint8_t *) "192.168.1.1/"); DisplayLCD(LCD_LINE4, (const uint8_t *) "rdk.html"); #endif #ifdef ATLIBGS_DEBUG_ENABLE ConsolePrintf("Starting Limited AP: %s\n", ATLIBGS_LIMITED_AP_SSID); #endif /* Try to disassociate if not already associated */ AtLibGs_DisAssoc(); while (1) { DisplayLCD(LCD_LINE6, " Setting up"); r =AtLibGs_EnableRadio(1); // enable radio if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Bad Mode!"); MSTimerDelay(2000); continue; } #if 0 r = AtLibGs_ConfigAntenna(1); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Configure Antenna Fail!"); MSTimerDelay(2000); continue; } #endif r = AtLibGs_Mode(ATLIBGS_STATIONMODE_LIMITED_AP); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Bad Mode!"); MSTimerDelay(2000); continue; } r = AtLibGs_IPSet(ATLIBGS_ADK_IP, ATLIBGS_ADK_MASK, ATLIBGS_ADK_GATEWAY); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Bad IP!"); MSTimerDelay(2000); continue; } AtLibGs_DisableDHCPServer(); r = AtLibGs_EnableDHCPServer(); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Bad DHCPSrv!"); MSTimerDelay(2000); continue; } #if 0 r = AtLibGs_SetRegulatoryDomain(ATLIBGS_REGDOMAIN_TELEC); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Set Domain Fail"); MSTimerDelay(2000); continue; } #endif r = AtLibGs_GetMAC(WiFiMAC); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Get MAC Failed!"); MSTimerDelay(2000); continue; } if(r == ATLIBGS_MSG_ID_OK) AtLibGs_ParseGetMacResponse(WiFiMACStr); strcpy(str_config_ssid, (char const*)ATLIBGS_ADK_SSID); strcat(str_config_ssid, &WiFiMACStr[6]); // concatenate last 6 digis of MAC as SSID DisplayLCD(LCD_LINE1, (const uint8_t *)str_config_ssid); r = AtLibGs_Assoc(str_config_ssid /*ATLIBGS_ADK_SSID*/, 0, ATLIBGS_ADK_CHANNEL); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "AP Failed!"); MSTimerDelay(2000); continue; } r = AtLibGs_WebServer(1, "", "", "", ""); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "Server Failed!"); MSTimerDelay(2000); continue; } r = AtLibGs_SetXMLParse(1);; if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "XML Failed!"); MSTimerDelay(2000); continue; } #if 1 // mDNS_ENABLED // now start mNDS service r = AtLibGs_StartMDNS(); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "MDNS1 Failed!"); MSTimerDelay(2000); continue; } r = AtLibGs_RegisterMDNSHost("xyz","local"); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "MDNS2 Failed!"); MSTimerDelay(2000); continue; } r = AtLibGs_RegisterMDNSService(ATLIBGS_ADK_MDNS_SERVER,"","_http","_tcp","local","80","path=/gainspan/profile/mcu"); // r = AtLibGs_RegisterMDNSService(ATLIBGS_ADK_MDNS_SERVER,"","_http","_tcp","local","80","path=/rdk.html"); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "MDNS3 Failed!"); MSTimerDelay(2000); continue; } r = AtLibGs_AnnounceMDNS(); if (r != ATLIBGS_MSG_ID_OK) { DisplayLCD(LCD_LINE6, "MDNS4 Failed!"); MSTimerDelay(2000); continue; } #endif break; } DisplayLCD(LCD_LINE6, ""); MSTimerDelay(2000); AtLibGs_FlushIncomingMessage(); #ifdef ATLIBGS_DEBUG_ENABLE ConsolePrintf("ADK Demo Started\n"); #endif }
/*--------------------------------------------------------------------------*/ T_uezError GainSpan_CmdLib_ConfigureForSPI( const T_GainSpan_CmdLib_SPISettings *aSettings) { T_uezError error; ATLIBGS_MSG_ID_E r; int i; G_GSCmdLibSettings = *aSettings; G_GSSPITemplate.iBitsPerTransfer = 8; G_GSSPITemplate.iCSPolarity = EFalse; // Falling edge G_GSSPITemplate.iClockOutPolarity = EFalse; // Falling edge G_GSSPITemplate.iClockOutPhase = EFalse; // ETrue; G_GSSPITemplate.iDataMISO = 0; G_GSSPITemplate.iDataMISO = 0; G_GSSPITemplate.iNumTransferredIn = 0; G_GSSPITemplate.iNumTransferredOut = 0; G_GSSPITemplate.iRate = aSettings->iRate / 1000; G_GSSPITemplate.iCSGPIOPort = GPIO_TO_HAL_PORT(aSettings->iSPIChipSelect); G_GSSPITemplate.iCSGPIOBit = GPIO_TO_PIN_BIT(aSettings->iSPIChipSelect); error = UEZSPIOpen(G_GSCmdLibSettings.iSPIDeviceName, &G_GSSPI); if (error) return error; // Ensure these pins are not configured elsewhere UEZGPIOLock(G_GSCmdLibSettings.iDataReadyIO); if (G_GSCmdLibSettings.iSRSTn != GPIO_NONE ){ UEZGPIOLock(G_GSCmdLibSettings.iSRSTn); UEZGPIOOutput(G_GSCmdLibSettings.iSRSTn); // WIFI_SRSTn } UEZGPIOInput(G_GSCmdLibSettings.iDataReadyIO); // WIFI IRQ if (G_GSCmdLibSettings.iProgramMode != GPIO_NONE ) { UEZGPIOLock(G_GSCmdLibSettings.iProgramMode); UEZGPIOClear(G_GSCmdLibSettings.iProgramMode); // WIFI PROGRAM OFF UEZGPIOOutput(G_GSCmdLibSettings.iProgramMode); // WIFI PROGRAM OFF } if (G_GSCmdLibSettings.iSPIMode != GPIO_NONE ) { UEZGPIOLock(G_GSCmdLibSettings.iSPIMode); UEZGPIOSet(G_GSCmdLibSettings.iSPIMode); // WIFI_MODE SPI UEZGPIOOutput(G_GSCmdLibSettings.iSPIMode); // WIFI_MODE SPI } UEZTaskDelay(1250); if (G_GSCmdLibSettings.iSRSTn != GPIO_NONE ) UEZGPIOSet(G_GSCmdLibSettings.iSRSTn); // WIFI_SRSTn UEZTaskDelay(1000); // Initialize the GainSpan SPI routines GainSpan_SPI_Start(); // Flush anything there AtLibGs_FlushIncomingMessage(); /* Send command to check 5 times for module */ for (i = 0; i < 5; i++){ AtLibGs_FlushIncomingMessage(); r = AtLibGs_Check(GAINSPAN_AT_DEFAULT_TIMEOUT); if(ATLIBGS_MSG_ID_OK == r){ break; } } if(ATLIBGS_MSG_ID_RESPONSE_TIMEOUT == r){ return UEZ_ERROR_NOT_FOUND; } /* Send command to DISABLE echo */ do { r = AtLibGs_SetEcho(ATLIBGS_DISABLE); } while (ATLIBGS_MSG_ID_OK != r); // For now, just report it is not found if (r != ATLIBGS_MSG_ID_OK) return UEZ_ERROR_NOT_FOUND; return UEZ_ERROR_NONE; }