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