// The task to process SMS events static void sms_task(iptr_t timer) { //Silence "args not used" warning. (void)timer; int8_t smsIndex = 0; DB(LOG_INFO("\r\nChecking SMS...\r\n")); // Update signal level GSM(updateCSQ()); // Flush SMS buffer GSM(gsmBufferCleanup(&msg)); // Retrive the first SMS into memory GSM(smsIndex = gsmSMSByIndex(&msg, 1)); if (smsIndex==1) { command_parse(&dbg_port.fd, msg.text); DELAY(500); GSM(gsmSMSDel(1)); } // Process SMS commands smsSplitAndParse(msg.from, msg.text); // Restart GSM at each countdown if (--gsmRestartCountdown == 0) { LOG_INFO("\r\nRestarting GSM..."); GSM(gsmPowerOff()); gsmRestartCountdown = GSM_RESTART_COUNTDOWN; } // Reschedule this timer synctimer_add(&sms_tmr, &timers_lst); }
void NORETURN gsmTesting(Serial *port) { gsmInit(port); gsmPowerOn(); gsmSMSConf(0); //gsmUpdateConf(); //DELAY(1000); //DELAY(5000); //gsmSMSSend("+393473153808", "Test message from RFN"); while (1) { gsmUpdateCSQ(); DELAY(5000); //gsmSMSSend("+393473153808", "Test message from RFN"); //gsmSMSSend("+393357963938", "Test message from RFN"); //DELAY(10000); } // Prova invio messaggio molto lungo, che impiega tutti i 160 caratteri a // disposizione per un singolo SMS. Vediamo se i buffer disponibili sono // sufficienti. Ciao for(uint8_t i=1; i<100; i++) { LOG_INFO("Iteration %d/100\n", i); gsmSMSList(); DELAY(1000); //gsmSMSLast(&msg); for (uint8_t j=1; j<10; j++) { gsmSMSByIndex(&msg,j); DELAY(500); } gsmSMSDelRead(); if (!(i%3)) gsmSMSSend("+393357963938", "Test message from RFN"); DELAY(10000); } DELAY(15000); gsmPowerOff(); }
int gsmSendStatus( int flag ){ char gsm[30]; if (flag == 1 ) return 1; strcpy(gsm, "#M#Something wrong"); if (flag == 3 ) strcpy(gsm, "#M#Device reloaded"); if (flag == 2 ) strcpy(gsm, "#M#Device reconnected"); if (flag == 4 ) strcpy(gsm, "#M#Hundreds points send to server. All ok"); if (flag == 0 ) strcpy(gsm, "#M#Device started. Wait GPS."); if (flag == 5 ) strcpy(gsm, "#M#No GPS...Waiting that..."); if (flag == 6 ) strcpy(gsm, "#M#Restart device"); if (flag == 7 ) strcpy(gsm, "#M#Coords not found. Device underground. Sleep..."); if ( wialonSend(gsm) == WN_DATAOK ){ //Go to sleep if ( flag == 7 ){ gsmPowerOff(); return -1;} flag = 1; return flag; } return -1; }
/* * Task running */ void gsmTask(void const *arg){ int i; unsigned int reloadcnt = 0; int flag = 0; int cnt = 0; int gps_fail = 0; osDelay(3000); //osSignalWait (0x01, osWaitForever); while(1){ if (reloadcnt > 3 ){ reloadcnt = 0; osDelay(1000); gsmPowerOff(); flag = 6; //osSignalWait (0x01, osWaitForever); } //gsmPowerOff(); gsmPowerOn(); reloadcnt++; if ( gsmInitModem() == AT_OK ){ osDelay(1000); if ( gsmInitGPRS() == AT_STATE_IP_STATUS ){ while(1){ osDelay(100); if ( gsmConnect(GSM_SERVER_IP,GSM_SERVER_PORT) == AT_STATE_IP_CONNECT ){ osDelay(100); #ifdef WIALON_TRACKER if ( wialonLogin (GSM_SERVER_IMEI, GSM_SERVER_PASSWORD ) == WN_LOGIN ){ #endif flag = gsmSendStatus( flag ); if ( flag < 0 ) break; flag = gsmWork( flag ); if ( flag < 0 ) break; #ifdef WIALON_TRACKER if ( flag == 8 ) gps_fail++; else { gps_fail = 0; cnt++; } //No GPS? add that if (cnt > 100 ) {flag = 4; cnt = 0;} //Some message 100point if (cnt == 0 && flag == 1 ) flag = 5; //No GPS if (gps_fail > 50 ) flag = 7; #endif // } #ifdef WIALON_TRACKER flag = 2; } #endif } } } } flag = 3; //gsm[254] = 0; } }