Home | History | Annotate | Download | only in telephony

Lines Matching refs:modem

37 #  define  D_ACTIVE  VERBOSE_CHECK(modem)
84 static const char* _amodem_switch_technology(AModem modem, AModemTech newtech, int32_t newpreferred);
85 static int _amodem_set_cdma_subscription_source( AModem modem, ACdmaSubscriptionSource ss);
86 static int _amodem_set_cdma_prl_version( AModem modem, int prlVersion);
199 AModem modem;
280 * Hold non-volatile ram configuration for modem
305 amodem_unsol( AModem modem, const char* format, ... )
307 if (modem->unsol_func) {
310 vsnprintf( modem->out_buff, sizeof(modem->out_buff), format, args );
313 modem->unsol_func( modem->unsol_opaque, modem->out_buff );
318 amodem_receive_sms( AModem modem, SmsPDU sms )
322 if (modem->unsol_func) {
326 strcpy( modem->out_buff, SMS_UNSOL_HEADER );
327 p = modem->out_buff + (sizeof(SMS_UNSOL_HEADER)-1);
328 max = sizeof(modem->out_buff) - 3 - (sizeof(SMS_UNSOL_HEADER)-1);
338 modem->unsol_func( modem->unsol_opaque, modem->out_buff );
343 amodem_printf( AModem modem, const char* format, ... )
347 vsnprintf( modem->out_buff, sizeof(modem->out_buff), format, args );
350 return modem->out_buff;
354 amodem_begin_line( AModem modem )
356 modem->out_size = 0;
360 amodem_add_line( AModem modem, const char* format, ... )
364 modem->out_size += vsnprintf( modem->out_buff + modem->out_size,
365 sizeof(modem->out_buff) - modem->out_size,
371 amodem_end_line( AModem modem )
373 modem->out_buff[ modem->out_size ] = 0;
374 return modem->out_buff;
393 amodem_load_nvram( AModem modem )
396 D("Using config file: %s\n", modem->nvram_config_filename);
397 if (aconfig_load_file(root, modem->nvram_config_filename)) {
400 aconfig_save_file(root, modem->nvram_config_filename);
406 amodem_nvram_get_int( AModem modem, const char *nvname, int defval)
412 value = aconfig_int(modem->nvram_config, nvname, defval);
419 aconfig_set(modem->nvram_config, nvname, newvalue);
425 amodem_nvram_get_str( AModem modem, const char *nvname, const char *defval)
429 value = aconfig_str(modem->nvram_config, nvname, defval);
437 aconfig_set(modem->nvram_config, nvname, value);
442 static ACdmaSubscriptionSource _amodem_get_cdma_subscription_source( AModem modem )
445 iss = amodem_nvram_get_int( modem, NV_CDMA_SUBSCRIPTION_SOURCE, A_SUBSCRIPTION_RUIM );
453 static ACdmaRoamingPref _amodem_get_cdma_roaming_preference( AModem modem )
456 rp = amodem_nvram_get_int( modem, NV_CDMA_ROAMING_PREF, A_ROAMING_PREF_ANY );
465 amodem_reset( AModem modem )
469 modem->nvram_config = amodem_load_nvram(modem);
470 modem->radio_state = A_RADIO_STATE_OFF;
471 modem->wait_sms = 0;
473 modem->rssi= 7; // Two signal strength bars
474 modem->ber = 99; // Means 'unknown'
476 modem->oper_name_index = amodem_nvram_get_int(modem, NV_OPER_NAME_INDEX, 2);
477 modem->oper_selection_mode = amodem_nvram_get_int(modem, NV_SELECTION_MODE, A_SELECTION_AUTOMATIC);
478 modem->oper_index = amodem_nvram_get_int(modem, NV_OPER_INDEX, 0);
479 modem->oper_count = amodem_nvram_get_int(modem, NV_OPER_COUNT, 2);
480 modem->in_emergency_mode = amodem_nvram_get_int(modem, NV_IN_ECBM, 0);
481 modem->prl_version = amodem_nvram_get_int(modem, NV_PRL_VERSION, 0);
483 modem->emergency_numbers[0] = "911";
487 modem->emergency_numbers[i] = amodem_nvram_get_str(modem,key_name, NULL);
490 modem->area_code = -1;
491 modem->cell_id = -1;
493 strcpy( modem->operators[0].name[0], OPERATOR_HOME_NAME );
494 strcpy( modem->operators[0].name[1], OPERATOR_HOME_NAME );
495 strcpy( modem->operators[0].name[2], OPERATOR_HOME_MCCMNC );
497 modem->operators[0].status = A_STATUS_AVAILABLE;
499 strcpy( modem->operators[1].name[0], OPERATOR_ROAMING_NAME );
500 strcpy( modem->operators[1].name[1], OPERATOR_ROAMING_NAME );
501 strcpy( modem->operators[1].name[2], OPERATOR_ROAMING_MCCMNC );
503 modem->operators[1].status = A_STATUS_AVAILABLE;
505 modem->voice_mode = A_REGISTRATION_UNSOL_ENABLED_FULL;
506 modem->voice_state = A_REGISTRATION_HOME;
507 modem->data_mode = A_REGISTRATION_UNSOL_ENABLED_FULL;
508 modem->data_state = A_REGISTRATION_HOME;
509 modem->data_network = A_DATA_NETWORK_UMTS;
511 tmp = amodem_nvram_get_str( modem, NV_MODEM_TECHNOLOGY, "gsm" );
512 modem->technology = android_parse_modem_tech( tmp );
513 if (modem->technology == A_TECH_UNKNOWN) {
514 modem->technology = aconfig_int( modem->nvram_config, NV_MODEM_TECHNOLOGY, A_TECH_GSM );
517 modem->preferred_mask = amodem_nvram_get_int( modem, NV_PREFERRED_MODE, 0x0f );
519 modem->subscription_source = _amodem_get_cdma_subscription_source( modem );
520 modem->roaming_pref = _amodem_get_cdma_roaming_preference( modem );
523 static AVoiceCall amodem_alloc_call( AModem modem );
524 static void amodem_free_call( AModem modem, AVoiceCall call );
530 AModem modem = opaque;
534 qemu_put_byte(f, modem->call_count);
537 for (nn = modem->call_count - 1; nn >= 0; nn--) {
538 AVoiceCall vcall = modem->calls + nn;
554 AModem modem = opaque;
558 for (nn = modem->call_count - 1; nn >= 0; nn--) {
559 amodem_free_call( modem, modem->calls + nn);
564 modem );
581 AModem modem = _android_modem;
586 modem->base_port = base_port;
587 start = bufprint_config_file( start, end, "modem-nv-ram-" );
588 start = bufprint( start, end, "%d", modem->base_port );
589 modem->nvram_config_filename = strdup( nvfname );
591 amodem_reset( modem );
592 modem->supportsNetworkDataType = 1;
593 modem->unsol_func = unsol_func;
594 modem->unsol_opaque = unsol_opaque;
596 modem->sim = asimcard_create(base_port);
601 android_modem_state_load, modem);
603 aconfig_save_file( modem->nvram_config, modem->nvram_config_filename );
604 return modem;
608 amodem_set_legacy( AModem modem )
610 modem->supportsNetworkDataType = 0;
614 amodem_destroy( AModem modem )
616 asimcard_destroy( modem->sim );
617 modem->sim = NULL;
622 amodem_has_network( AModem modem )
624 return !(modem->radio_state == A_RADIO_STATE_OFF ||
625 modem->oper_index < 0 ||
626 modem->oper_index >= modem->oper_count ||
627 modem->oper_selection_mode == A_SELECTION_DEREGISTRATION );
632 amodem_get_radio_state( AModem modem )
634 return modem->radio_state;
638 amodem_set_radio_state( AModem modem, ARadioState state )
640 modem->radio_state = state;
644 amodem_get_sim( AModem modem )
646 return modem->sim;
650 amodem_get_voice_registration( AModem modem )
652 return modem->voice_state;
656 amodem_set_voice_registration( AModem modem, ARegistrationState state )
658 modem->voice_state = state;
661 modem->oper_index = OPERATOR_HOME_INDEX;
663 modem->oper_index = OPERATOR_ROAMING_INDEX;
665 switch (modem->voice_mode) {
667 amodem_unsol( modem, "+CREG: %d,%d\r",
668 modem->voice_mode, modem->voice_state );
672 amodem_unsol( modem, "+CREG: %d,%d, \"%04x\", \"%04x\"\r",
673 modem->voice_mode, modem->voice_state,
674 modem->area_code & 0xffff, modem->cell_id & 0xffff);
682 amodem_get_data_registration( AModem modem )
684 return modem->data_state;
688 amodem_set_data_registration( AModem modem, ARegistrationState state )
690 modem->data_state = state;
692 switch (modem->data_mode) {
694 amodem_unsol( modem, "+CGREG: %d,%d\r",
695 modem->data_mode, modem->data_state );
699 if (modem->supportsNetworkDataType)
700 amodem_unsol( modem, "+CGREG: %d,%d,\"%04x\",\"%04x\",\"%04x\"\r",
701 modem->data_mode, modem->data_state,
702 modem->area_code & 0xffff, modem->cell_id & 0xffff,
703 modem->data_network );
705 amodem_unsol( modem, "+CGREG: %d,%d,\"%04x\",\"%04x\"\r",
706 modem->data_mode, modem->data_state,
707 modem->area_code & 0xffff, modem->cell_id & 0xffff );
716 amodem_nvram_set( AModem modem, const char *name, const char *value )
718 aconfig_set(modem->nvram_config, name, value);
742 amodem_set_data_network_type( AModem modem, ADataNetworkType type )
745 modem->data_network = type;
746 amodem_set_data_registration( modem, modem->data_state );
748 if (modem->unsol_func && modemTech != A_TECH_UNKNOWN) {
749 if (_amodem_switch_technology( modem, modemTech, modem->preferred_mask )) {
750 modem->unsol_func( modem->unsol_opaque, modem->out_buff );
756 amodem_get_operator_name ( AModem modem, ANameIndex index, char* buffer, int buffer_size )
761 if ( (unsigned)modem->oper_index >= (unsigned)modem->oper_count ||
765 oper = modem->operators + modem->oper_index;
780 amodem_set_operator_name( AModem modem, ANameIndex index, const char* buffer, int buffer_size )
785 if ( (unsigned)modem->oper_index >= (unsigned)modem->oper_count ||
789 oper = modem->operators + modem->oper_index;
803 amodem_get_call_count( AModem modem )
805 return modem->call_count;
809 amodem_get_call( AModem modem, int index )
811 if ((unsigned)index >= (unsigned)modem->call_count)
814 return &modem->calls[index].call;
818 amodem_alloc_call( AModem modem )
821 int count = modem->call_count;
827 for (id = 0; id < modem->call_count; id++) {
831 if ( modem->calls[nn].call.id == (id+1) ) {
839 call = modem->calls + count;
841 call->modem = modem;
843 modem->call_count += 1;
850 amodem_free_call( AModem modem, AVoiceCall call )
860 remote_call_cancel( call->call.number, modem->base_port );
864 for (nn = 0; nn < modem->call_count; nn++) {
865 if ( modem->calls + nn == call )
868 assert( nn < modem->call_count );
870 memmove( modem->calls + nn,
871 modem->calls + nn + 1,
872 (modem->call_count - 1 - nn)*sizeof(*call) );
874 modem->call_count -= 1;
879 amodem_find_call( AModem modem, int id )
883 for (nn = 0; nn < modem->call_count; nn++) {
884 AVoiceCall call = modem->calls + nn;
892 amodem_send_calls_update( AModem modem )
896 amodem_unsol( modem, "RING\r" );
901 amodem_add_inbound_call( AModem modem, const char* number )
903 AVoiceCall vcall = amodem_alloc_call( modem );
924 amodem_send_calls_update( modem );
929 amodem_find_call_by_number( AModem modem, const char* number )
931 AVoiceCall vcall = modem->calls;
932 AVoiceCall vend = vcall + modem->call_count;
945 amodem_set_signal_strength( AModem modem, int rssi, int ber )
947 modem->rssi = rssi;
948 modem->ber = ber;
959 int port = call->modem->base_port;
979 amodem_update_call( AModem modem, const char* fromNumber, ACallState state )
981 AVoiceCall vcall = (AVoiceCall) amodem_find_call_by_number(modem, fromNumber);
987 amodem_send_calls_update(modem);
993 amodem_disconnect_call( AModem modem, const char* number )
995 AVoiceCall vcall = (AVoiceCall) amodem_find_call_by_number(modem, number);
1000 amodem_free_call( modem, vcall );
1001 amodem_send_calls_update(modem);
1009 unknownCommand( const char* cmd, AModem modem )
1011 modem=modem;
1038 chooseTechFromMask( AModem modem, int32_t preferred )
1059 _amodem_switch_technology( AModem modem, AModemTech newtech, int32_t newpreferred )
1062 modem->technology, newtech, modem->preferred_mask,newpreferred);
1064 assert( modem );
1069 if (modem->preferred_mask != newpreferred) {
1071 modem->preferred_mask = newpreferred;
1073 amodem_nvram_set(modem, NV_PREFERRED_MODE, value);
1074 if (!matchPreferredMask(modem->preferred_mask, newtech)) {
1075 newtech = chooseTechFromMask(modem, newpreferred);
1079 if (modem->technology != newtech) {
1080 modem->technology = newtech;
1081 ret = amodem_printf(modem, "+CTEC: %d", modem->technology);
1105 amodem_set_cdma_prl_version( AModem modem, int prlVersion)
1108 if (!_amodem_set_cdma_prl_version( modem, prlVersion)) {
1109 amodem_unsol(modem, "+WPRL: %d", prlVersion);
1114 _amodem_set_cdma_prl_version( AModem modem, int prlVersion)
1117 if (modem->prl_version != prlVersion) {
1118 modem->prl_version = prlVersion;
1125 amodem_set_cdma_subscription_source( AModem modem, ACdmaSubscriptionSource ss)
1128 if (!_amodem_set_cdma_subscription_source( modem, ss)) {
1129 amodem_unsol(modem, "+CCSS: %d", (int)ss);
1135 _amodem_set_cdma_subscription_source( AModem modem, ACdmaSubscriptionSource ss)
1140 if (ss != modem->subscription_source) {
1142 amodem_nvram_set( modem, NV_CDMA_SUBSCRIPTION_SOURCE, value );
1143 modem->subscription_source = ss;
1150 handleSubscriptionSource( const char* cmd, AModem modem )
1159 return amodem_printf( modem, "+CCSS: %d", modem->subscription_source );
1165 _amodem_set_cdma_subscription_source( modem, newsource );
1166 return amodem_printf( modem, "+CCSS: %d", modem->subscription_source );
1170 return amodem_printf( modem, "ERROR: Invalid subscription source");
1174 handleRoamPref( const char * cmd, AModem modem )
1182 return amodem_printf( modem, "+WRMP: %d", modem->roaming_pref );
1186 return amodem_printf( modem, "+WRMP: 0,1,2" );
1193 modem->roaming_pref = roaming_pref;
1194 aconfig_set( modem->nvram_config, NV_CDMA_ROAMING_PREF, cmd );
1195 aconfig_save_file( modem->nvram_config, modem->nvram_config_filename );
1199 return amodem_printf( modem, "ERROR");
1202 handleTech( const char* cmd, AModem modem )
1204 AModemTech newtech = modem->technology;
1205 int pt = modem->preferred_mask;
1211 return amodem_printf( modem, "+CTEC: %d,%x",modem->technology, modem->preferred_mask );
1213 amodem_begin_line( modem );
1215 return amodem_printf( modem, "+CTEC: 0,1,2,3" );
1233 return amodem_printf( modem, "ERROR: invalid preferred mode" );
1234 return _amodem_switch_technology( modem, newtech, pt );
1236 return amodem_printf( modem, "ERROR: %s: Unknown Technology", cmd + 1 );
1240 handleEmergencyMode( const char* cmd, AModem modem )
1247 return amodem_printf( modem, "+WSOS: %d", modem->in_emergency_mode);
1252 return amodem_printf(modem, "+WSOS: (0)");
1255 return amodem_printf(modem, "ERROR");
1260 return amodem_printf(modem, "ERROR");
1265 if ((!arg) != (!modem->in_emergency_mode)) {
1266 modem->in_emergency_mode = arg;
1267 return amodem_printf(modem, "+WSOS: %d", arg);
1270 return amodem_printf(modem, "ERROR");
1274 handlePrlVersion( const char* cmd, AModem modem )
1279 return amodem_printf( modem, "+WPRL: %d", modem->prl_version);
1282 return amodem_printf(modem, "ERROR");
1286 handleRadioPower( const char* cmd, AModem modem )
1291 modem->radio_state = A_RADIO_STATE_OFF;
1296 modem->radio_state = A_RADIO_STATE_ON;
1302 handleRadioPowerReq( const char* cmd, AModem modem )
1304 if (modem->radio_state != A_RADIO_STATE_OFF)
1311 handleSIMStatusReq( const char* cmd, AModem modem )
1315 switch (asimcard_get_status(modem->sim)) {
1330 handleSRegister( const char * cmd, AModem modem )
1341 handleNetworkRegistration( const char* cmd, AModem modem )
1346 if (modem->voice_mode == A_REGISTRATION_UNSOL_ENABLED_FULL)
1347 return amodem_printf( modem, "+CREG: %d,%d, \"%04x\", \"%04x\"",
1348 modem->voice_mode, modem->voice_state,
1349 modem->area_code, modem->cell_id );
1351 return amodem_printf( modem, "+CREG: %d,%d",
1352 modem->voice_mode, modem->voice_state );
1356 modem->voice_mode = A_REGISTRATION_UNSOL_DISABLED;
1360 modem->voice_mode = A_REGISTRATION_UNSOL_ENABLED;
1364 modem->voice_mode = A_REGISTRATION_UNSOL_ENABLED_FULL;
1379 if (modem->supportsNetworkDataType)
1380 return amodem_printf( modem, "+CGREG: %d,%d,\"%04x\",\"%04x\",\"%04x\"",
1381 modem->data_mode, modem->data_state,
1382 modem->area_code, modem->cell_id,
1383 modem->data_network );
1385 return amodem_printf( modem, "+CGREG: %d,%d,\"%04x\",\"%04x\"",
1386 modem->data_mode, modem->data_state,
1387 modem->area_code, modem->cell_id );
1391 modem->data_mode = A_REGISTRATION_UNSOL_DISABLED;
1395 modem->data_mode = A_REGISTRATION_UNSOL_ENABLED;
1399 modem->data_mode = A_REGISTRATION_UNSOL_ENABLED_FULL;
1416 handleSetDialTone( const char* cmd, AModem modem )
1423 handleDeleteSMSonSIM( const char* cmd, AModem modem )
1430 handleSIM_IO( const char* cmd, AModem modem )
1432 return asimcard_io( modem->sim, cmd );
1437 handleOperatorSelection( const char* cmd, AModem modem )
1442 AOperator oper = &modem->operators[ modem->oper_index ];
1444 if ( !amodem_has_network( modem ) )
1447 return amodem_printf( modem, "+CME ERROR: 30" );
1450 oper = &modem->operators[ modem->oper_index ];
1452 if ( modem->oper_name_index == 2 )
1453 return amodem_printf( modem, "+COPS: %d,2,%s",
1454 modem->oper_selection_mode,
1457 return amodem_printf( modem, "+COPS: %d,%d,\"%s\"",
1458 modem->oper_selection_mode,
1459 modem->oper_name_index,
1460 oper->name[ modem->oper_name_index ] );
1465 amodem_begin_line( modem );
1466 for (nn = 0; nn < modem->oper_count; nn++) {
1467 AOperator oper = &modem->operators[nn];
1468 amodem_add_line( modem, "%s(%d,\"%s\",\"%s\",\"%s\")", comma,
1472 return amodem_end_line( modem );
1477 modem->oper_selection_mode = A_SELECTION_AUTOMATIC;
1500 for (nn = 0; nn < modem->oper_count; nn++) {
1501 AOperator oper = modem->operators + nn;
1513 } else if (modem->operators[found].status == A_STATUS_DENIED) {
1517 modem->oper_index = found;
1523 modem->voice_state = A_REGISTRATION_HOME;
1524 modem->data_state = A_REGISTRATION_HOME;
1526 modem->voice_state = A_REGISTRATION_ROAMING;
1527 modem->data_state = A_REGISTRATION_ROAMING;
1533 modem->oper_selection_mode = A_SELECTION_DEREGISTRATION;
1547 modem->oper_name_index = format;
1555 return unknownCommand(cmd,modem);
1559 handleRequestOperator( const char* cmd, AModem modem )
1564 if ( !amodem_has_network(modem) )
1567 oper = modem->operators + modem->oper_index;
1568 modem->oper_name_index = 2;
1569 return amodem_printf( modem, "+COPS: 0,0,\"%s\"\r"
1576 handleSendSMStoSIM( const char* cmd, AModem modem )
1583 handleSendSMS( const char* cmd, AModem modem )
1585 modem->wait_sms = 1;
1649 handleSendSMSText( const char* cmd, AModem modem )
1703 if (modem->sms_receiver == NULL) {
1704 modem->sms_receiver = sms_receiver_create();
1705 if (modem->sms_receiver == NULL) {
1711 index = sms_receiver_add_submit_pdu( modem->sms_receiver, pdu );
1725 snprintf( temp, sizeof(temp), PHONE_PREFIX "%d", modem->base_port );
1728 deliver = sms_receiver_create_deliver( modem->sms_receiver, index, from );
1736 if ( remote_call_sms( number, modem->base_port, deliver[nn] ) < 0 ) {
1781 if ( remote_call_sms( number, modem->base_port, pdu ) < 0 )
1801 handleChangeOrEnterPIN( const char* cmd, AModem modem )
1806 switch (asimcard_get_status(modem->sim)) {
1820 if ( !asimcard_check_pin( modem->sim, pin ) )
1824 asimcard_set_pin( modem->sim, pin );
1831 if ( asimcard_check_pin( modem->sim, cmd ) )
1841 if ( asimcard_check_puk( modem->sim, puk, cmd+5 ) )
1857 handleListCurrentCalls( const char* cmd, AModem modem )
1860 amodem_begin_line( modem );
1861 for (nn = 0; nn < modem->call_count; nn++) {
1862 AVoiceCall vcall = modem->calls + nn;
1865 amodem_add_line( modem, "+CLCC: %d,%d,%d,%d,%d,\"%s\",%d\r\n",
1869 return amodem_end_line( modem );
1885 amodem_addTimeUpdate( AModem modem )
1935 amodem_add_line( modem, "%%CTZV: %02d/%02d/%02d:%02d:%02d:%02d%c%d:%d:%s\r\n",
1944 handleEndOfInit( const char* cmd, AModem modem )
1946 amodem_begin_line( modem );
1947 amodem_addTimeUpdate( modem );
1948 return amodem_end_line( modem );
1953 handleListPDPContexts( const char* cmd, AModem modem )
1957 amodem_begin_line( modem );
1959 ADataContext data = modem->data_contexts + nn;
1962 amodem_add_line( modem, "+CGACT: %d,%d\r\n", data->id, data->active );
1964 return amodem_end_line( modem );
1968 handleDefinePDPContext( const char* cmd, AModem modem )
2009 data = modem->data_contexts + id;
2022 handleQueryPDPContext( const char* cmd, AModem modem )
2025 amodem_begin_line(modem);
2027 ADataContext data = modem->data_contexts + nn;
2030 amodem_add_line( modem, "+CGDCONT: %d,\"%s\",\"%s\",\"%s\",0,0\r\n",
2039 return amodem_end_line(modem);
2043 handleStartPDPContext( const char* cmd, AModem modem )
2054 AModem modem = vcall->modem;
2061 amodem_free_call(modem, vcall);
2062 amodem_send_calls_update(modem);
2079 vcall->modem->base_port,
2086 amodem_free_call( vcall->modem, vcall );
2103 amodem_send_calls_update(vcall->modem);
2106 static int amodem_is_emergency( AModem modem, const char *number )
2112 if ( modem->emergency_numbers[i] && !strcmp( number, modem->emergency_numbers[i] )) break;
2121 handleDial( const char* cmd, AModem modem )
2123 AVoiceCall vcall = amodem_alloc_call( modem );
2161 amodem_begin_line( modem );
2162 if (amodem_is_emergency(modem, call->number)) {
2163 modem->in_emergency_mode = 1;
2164 amodem_add_line( modem, "+WSOS: 1" );
2172 return amodem_end_line( modem );
2177 handleAnswer( const char* cmd, AModem modem )
2180 for (nn = 0; nn < modem->call_count; nn++) {
2181 AVoiceCall vcall = modem->calls + nn;
2194 amodem_free_call( modem, vcall );
2206 handleSignalStrength( const char* cmd, AModem modem )
2208 amodem_begin_line( modem );
2215 amodem_addTimeUpdate( modem );
2221 // TODO: return 99 if modem->radio_state==A_RADIO_STATE_OFF, once radio_state is in snapshot.
2222 int rssi = modem->rssi;
2223 int ber = modem->ber;
2226 amodem_add_line( modem, "+CSQ: %i,%i\r\n", rssi, ber );
2227 return amodem_end_line( modem );
2231 handleHangup( const char* cmd, AModem modem )
2238 for (nn = 0; nn < modem->call_count; nn++) {
2239 AVoiceCall vcall = modem->calls + nn;
2246 amodem_free_call(modem, vcall);
2254 for (nn = 0; nn < modem->call_count; nn++) {
2255 AVoiceCall vcall = modem->calls + nn;
2260 amodem_free_call(modem, vcall);
2270 AVoiceCall vcall = amodem_find_call( modem, id );
2272 amodem_free_call( modem, vcall );
2278 for (nn = 0; nn < modem->call_count; nn++) {
2279 AVoiceCall vcall = modem->calls + nn;
2293 for (nn = 0; nn < modem->call_count; nn++) {
2294 AVoiceCall vcall = modem->calls + nn;
2306 for (nn = 0; nn < modem->call_count; nn++) {
2307 AVoiceCall vcall = modem->calls + nn;
2319 for (nn = 0; nn < modem->call_count; nn++) {
2320 AVoiceCall vcall = modem->calls + nn;
2340 typedef const char* (*ResponseHandler)(const char* cmd, AModem modem);
2476 const char* amodem_send( AModem modem, const char* cmd )
2480 if ( modem->wait_sms != 0 ) {
2481 modem->wait_sms = 0;
2483 answer = handleSendSMSText( cmd, modem );
2532 REPLY( amodem_printf( modem, "%s\rOK", answer ) );
2539 answer = handler( cmd, modem );
2550 if (answer != modem->out_buff)
2551 REPLY( amodem_printf( modem, "%s\rOK", answer ) );
2553 strcat( modem->out_buff, "\rOK" );