18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Copyright (C) 2007-2008 The Android Open Source Project 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This software is licensed under the terms of the GNU General Public 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** License version 2, as published by the Free Software Foundation, and 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** may be copied, distributed, and modified under those terms. 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This program is distributed in the hope that it will be useful, 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** but WITHOUT ANY WARRANTY; without even the implied warranty of 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** GNU General Public License for more details. 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/ 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _android_modem_h_ 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _android_modem_h_ 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "sim_card.h" 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "sms.h" 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** MODEM OBJECT 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct AModemRec_* AModem; 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* a function used by the modem to send unsolicited messages to the channel controller */ 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*AModemUnsolFunc)( void* opaque, const char* message ); 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern AModem amodem_create( int base_port, AModemUnsolFunc unsol_func, void* unsol_opaque ); 266f290f2b9d23e763d78a0e0f2c203c3b28f095e7David Turnerextern void amodem_set_legacy( AModem modem ); 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void amodem_destroy( AModem modem ); 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* send a command to the modem */ 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern const char* amodem_send( AModem modem, const char* cmd ); 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* simulate the receipt on an incoming SMS message */ 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void amodem_receive_sms( AModem modem, SmsPDU pdu ); 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** RADIO STATE 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_RADIO_STATE_OFF = 0, /* Radio explictly powered off (eg CFUN=0) */ 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_RADIO_STATE_ON, /* Radio on */ 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} ARadioState; 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern ARadioState amodem_get_radio_state( AModem modem ); 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void amodem_set_radio_state( AModem modem, ARadioState state ); 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 454c6b10a4f385c04dbd7226e10a86a1f5cbd34f2aTim Baverstock/* Set the received signal strength indicator and bit error rate */ 464c6b10a4f385c04dbd7226e10a86a1f5cbd34f2aTim Baverstockextern void amodem_set_signal_strength( AModem modem, int rssi, int ber ); 474c6b10a4f385c04dbd7226e10a86a1f5cbd34f2aTim Baverstock 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** SIM CARD STATUS 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern ASimCard amodem_get_sim( AModem modem ); 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** VOICE AND DATA NETWORK REGISTRATION 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 'stat' for +CREG/+CGREG commands */ 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_REGISTRATION_UNREGISTERED = 0, 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_REGISTRATION_HOME = 1, 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_REGISTRATION_SEARCHING, 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_REGISTRATION_DENIED, 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_REGISTRATION_UNKNOWN, 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_REGISTRATION_ROAMING 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} ARegistrationState; 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 661a000857bb7eef298efa787699050884f92311feJaime Lopez A_DATA_NETWORK_UNKNOWN = 0, 671a000857bb7eef298efa787699050884f92311feJaime Lopez A_DATA_NETWORK_GPRS, 681a000857bb7eef298efa787699050884f92311feJaime Lopez A_DATA_NETWORK_EDGE, 691a000857bb7eef298efa787699050884f92311feJaime Lopez A_DATA_NETWORK_UMTS, 701a000857bb7eef298efa787699050884f92311feJaime Lopez A_DATA_NETWORK_LTE, 711a000857bb7eef298efa787699050884f92311feJaime Lopez A_DATA_NETWORK_CDMA1X, 721a000857bb7eef298efa787699050884f92311feJaime Lopez A_DATA_NETWORK_EVDO, // TODO: Should REV0, REVA and REVB be added? 731a000857bb7eef298efa787699050884f92311feJaime Lopez} ADataNetworkType; 741a000857bb7eef298efa787699050884f92311feJaime Lopez// TODO: Merge the usage of these two structs and rename ADataNetworkType 751a000857bb7eef298efa787699050884f92311feJaime Lopeztypedef enum { 761a000857bb7eef298efa787699050884f92311feJaime Lopez A_TECH_GSM = 0, 771a000857bb7eef298efa787699050884f92311feJaime Lopez A_TECH_WCDMA, 781a000857bb7eef298efa787699050884f92311feJaime Lopez A_TECH_CDMA, 791a000857bb7eef298efa787699050884f92311feJaime Lopez A_TECH_EVDO, 801a000857bb7eef298efa787699050884f92311feJaime Lopez A_TECH_LTE, 811a000857bb7eef298efa787699050884f92311feJaime Lopez A_TECH_UNKNOWN // This must always be the last value in the enum 821a000857bb7eef298efa787699050884f92311feJaime Lopez} AModemTech; 831a000857bb7eef298efa787699050884f92311feJaime Lopez 841a000857bb7eef298efa787699050884f92311feJaime Lopeztypedef enum { 851a000857bb7eef298efa787699050884f92311feJaime Lopez A_SUBSCRIPTION_NVRAM = 0, 861a000857bb7eef298efa787699050884f92311feJaime Lopez A_SUBSCRIPTION_RUIM, 871a000857bb7eef298efa787699050884f92311feJaime Lopez A_SUBSCRIPTION_UNKNOWN // This must always be the last value in the enum 881a000857bb7eef298efa787699050884f92311feJaime Lopez} ACdmaSubscriptionSource; 891a000857bb7eef298efa787699050884f92311feJaime Lopez 901a000857bb7eef298efa787699050884f92311feJaime Lopeztypedef enum { 911a000857bb7eef298efa787699050884f92311feJaime Lopez A_ROAMING_PREF_HOME = 0, 921a000857bb7eef298efa787699050884f92311feJaime Lopez A_ROAMING_PREF_AFFILIATED, 931a000857bb7eef298efa787699050884f92311feJaime Lopez A_ROAMING_PREF_ANY, 941a000857bb7eef298efa787699050884f92311feJaime Lopez A_ROAMING_PREF_UNKNOWN // This must always be the last value in the enum 951a000857bb7eef298efa787699050884f92311feJaime Lopez} ACdmaRoamingPref; 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern ARegistrationState amodem_get_voice_registration( AModem modem ); 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void amodem_set_voice_registration( AModem modem, ARegistrationState state ); 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern ARegistrationState amodem_get_data_registration( AModem modem ); 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void amodem_set_data_registration( AModem modem, ARegistrationState state ); 1021a000857bb7eef298efa787699050884f92311feJaime Lopezextern void amodem_set_data_network_type( AModem modem, ADataNetworkType type ); 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1041a000857bb7eef298efa787699050884f92311feJaime Lopezextern ADataNetworkType android_parse_network_type( const char* speed ); 1051a000857bb7eef298efa787699050884f92311feJaime Lopezextern AModemTech android_parse_modem_tech( const char* tech ); 1061a000857bb7eef298efa787699050884f92311feJaime Lopezextern void amodem_set_cdma_subscription_source( AModem modem, ACdmaSubscriptionSource ssource ); 1071a000857bb7eef298efa787699050884f92311feJaime Lopezextern void amodem_set_cdma_prl_version( AModem modem, int prlVersion); 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** OPERATOR NAMES 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_NAME_LONG = 0, 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_NAME_SHORT, 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_NAME_NUMERIC, 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_NAME_MAX /* don't remove */ 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} ANameIndex; 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* retrieve operator name into user-provided buffer. returns number of writes written, including terminating zero */ 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int amodem_get_operator_name ( AModem modem, ANameIndex index, char* buffer, int buffer_size ); 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* reset one operator name from a user-provided buffer, set buffer_size to -1 for zero-terminated strings */ 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void amodem_set_operator_name( AModem modem, ANameIndex index, const char* buffer, int buffer_size ); 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** CALL STATES 1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_OUTBOUND = 0, 1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_INBOUND = 1, 1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} ACallDir; 1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_ACTIVE = 0, 1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_HELD, 1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_DIALING, 1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_ALERTING, 1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_INCOMING, 1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_WAITING 1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} ACallState; 1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_VOICE = 0, 1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_DATA, 1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_FAX, 1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project A_CALL_UNKNOWN = 9 1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} ACallMode; 1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define A_CALL_NUMBER_MAX_SIZE 16 1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int id; 1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ACallDir dir; 1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ACallState state; 1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ACallMode mode; 1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int multi; 1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project char number[ A_CALL_NUMBER_MAX_SIZE+1 ]; 1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} ACallRec, *ACall; 1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int amodem_get_call_count( AModem modem ); 1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern ACall amodem_get_call( AModem modem, int index ); 1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern ACall amodem_find_call_by_number( AModem modem, const char* number ); 1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int amodem_add_inbound_call( AModem modem, const char* number ); 1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int amodem_update_call( AModem modem, const char* number, ACallState state ); 1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int amodem_disconnect_call( AModem modem, const char* number ); 1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/**/ 1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _android_modem_h_ */ 170