/** @brief callback method for +CGEG unsolicted messages * * @par * Handler function which handles the +CREG indicaiton. This * function is used to suppress the unsolicited +CREG * indications so that the external mapping software does not * gets confused with these indications. * * @param paras * * @return FALSE */ bool CREGHandler(adl_atUnsolicited_t *paras) { ascii respNum[10]; ascii para1[10]; ascii para2[10]; TRACE((1, "Inside of CREG Handler")); wm_strGetParameterString(respNum, paras->StrData, 1); if ((strcmp(respNum, "1") == 0) || (strcmp(respNum, "5") == 0)) { TRACE((1, "We got a 1 or a 5")); if (wm_strGetParameterString(para1, paras->StrData, 2) == NULL) { TRACE((1, "Region ID was null")); } else if (wm_strGetParameterString(para2, paras->StrData, 3) == NULL) { TRACE((1, "Cell ID was Null")); } else { TRACE((1, "We have GPRS available")); memcpy(&(g_status.LocationArea[0]), ¶1, 4); memcpy(&(g_status.CellID[0]), ¶2, 4); Status_setGSMStatus(GSM_WORKING); } } else { Status_setGSMStatus(GSM_NOT_WORKING); } return false; }
static bool cbPollCreg ( adl_atResponse_t *Rsp ) { ascii *rsp; ascii regStateString [ 3 ]; s32 regStateInt; TRACE ( ( NORMAL_TRACE_LEVEL, "(cbPollCreg) Enter." ) ) ; rsp = ( ascii * ) adl_memGet ( Rsp->StrLength ); wm_strRemoveCRLF ( rsp, Rsp->StrData, Rsp->StrLength ); TRACE ( ( NORMAL_TRACE_LEVEL, rsp ) ) ; wm_strGetParameterString ( regStateString, Rsp->StrData, 2 ); regStateInt = wm_atoi ( regStateString ); TRACE ( ( NORMAL_TRACE_LEVEL, regStateString ) ) ; if ( REG_STATE_REG == regStateInt || REG_STATE_ROAM == regStateInt ) { TRACE( ( NORMAL_TRACE_LEVEL, "(cbPollCreg) Registered on GPRS network." ) ) ; /* Registration is complete so open and start bearer */ OpenAndStartBearer ( ) ; } else { /* Not ready yet, we'll check again later. Set a one-off timer. */ adl_tmrSubscribe ( FALSE, CREG_POLLING_PERIOD, ADL_TMR_TYPE_100MS, (adl_tmrHandler_t ) PollCreg ); } adl_memRelease(rsp); return FALSE; }
bool poll_creg_handler (adl_atResponse_t *Rsp) { ascii *rsp; ascii regStateString[3]; s32 regStateInt; info("Warten auf GPRS Verbindung..."); rsp = (ascii *)adl_memGet(Rsp->StrLength); wm_strRemoveCRLF(rsp, Rsp->StrData, Rsp->StrLength); wm_strGetParameterString(regStateString, Rsp->StrData, 2); regStateInt = wm_atoi(regStateString); if ( 1 == regStateInt || 5 ==regStateInt) { initGprs(); } else { /* Not ready yet, we'll check again later. Set a one-off timer. */ adl_tmrSubscribe( FALSE, 10, ADL_TMR_TYPE_100MS, poll_creg); } return FALSE; }
static bool poll_creg_callback(adl_atResponse_t *Rsp) { ascii *rsp; ascii regStateString[3]; s32 regStateInt; TRACE (( 1, "(poll_creg_callback) Enter." )); rsp = (ascii *)adl_memGet(Rsp->StrLength); wm_strRemoveCRLF(rsp, Rsp->StrData, Rsp->StrLength); wm_strGetParameterString(regStateString, Rsp->StrData, 2); regStateInt = wm_atoi(regStateString); if ( 1 == regStateInt || 5 ==regStateInt) { TRACE (( 1, "(poll_creg_callback) Registered on GPRS network." )); open_and_start_bearer(); } else { /* Not ready yet, we'll check again later. Set a one-off timer. */ adl_tmrSubscribe( FALSE, CREG_POLLING_PERIOD, ADL_TMR_TYPE_100MS, poll_creg); } return FALSE; }
/** @brief callback method for +CSQ unsolicted messages * * @par * Handler function which handles the +CSQ indicaiton. * This handler provides the signal strength. * * @param paras * * @return FALSE */ bool CSQHandler(adl_atUnsolicited_t *paras) { ascii rssi[10]; int rssi_int; static char GSMAlarmGenerated = 0; wm_strGetParameterString(rssi, paras->StrData, 1); rssi_int = atoi(rssi); // rssi has a range from 0 - 31. // we have 6 ranges. Use the defines to define the 0-5 signal. if (rssi_int < RSSI_0) { g_status.GSMSignalStrength = '0'; } else if (rssi_int < RSSI_1) { g_status.GSMSignalStrength = '1'; } else if (rssi_int < RSSI_2) { g_status.GSMSignalStrength = '2'; } else if (rssi_int < RSSI_3) { g_status.GSMSignalStrength = '3'; } else if (rssi_int < RSSI_4) { g_status.GSMSignalStrength = '4'; } else if (rssi_int == RSSI_ERROR) { g_status.GSMSignalStrength = '0'; } else { g_status.GSMSignalStrength = '5'; } wm_sprintf(g_traceBuf, "Sig strength = %c\r\n", g_status.GSMSignalStrength); DumpMessage(g_traceBuf); if (g_config.GSMAlertThresh != 'N') { if ((g_status.GSMSignalStrength <= g_config.GSMAlertThresh) && !GSMAlarmGenerated) { g_status.GSMAlarm = 'Y'; GSMAlarmGenerated = 1; alarm_suppress_set_alarm_time(GSM_ALARM_SUP); } else if ((g_status.GSMSignalStrength > g_config.GSMAlertThresh) && (alarm_suppress_status(GSM_ALARM_SUP) == ALARM_EXPIRED)) { GSMAlarmGenerated = 0; } } else { GSMAlarmGenerated = 0; } return FALSE; }