android_modem.h revision 1a000857bb7eef298efa787699050884f92311fe
1/* Copyright (C) 2007-2008 The Android Open Source Project
2**
3** This software is licensed under the terms of the GNU General Public
4** License version 2, as published by the Free Software Foundation, and
5** may be copied, distributed, and modified under those terms.
6**
7** This program is distributed in the hope that it will be useful,
8** but WITHOUT ANY WARRANTY; without even the implied warranty of
9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10** GNU General Public License for more details.
11*/
12#ifndef _android_modem_h_
13#define _android_modem_h_
14
15#include "sim_card.h"
16#include "sms.h"
17
18/** MODEM OBJECT
19 **/
20typedef struct AModemRec_*    AModem;
21
22/* a function used by the modem to send unsolicited messages to the channel controller */
23typedef void (*AModemUnsolFunc)( void*  opaque, const char*  message );
24
25extern AModem      amodem_create( int  base_port, AModemUnsolFunc  unsol_func, void*  unsol_opaque );
26extern void        amodem_set_legacy( AModem  modem );
27extern void        amodem_destroy( AModem  modem );
28
29/* send a command to the modem */
30extern const char*  amodem_send( AModem  modem, const char*  cmd );
31
32/* simulate the receipt on an incoming SMS message */
33extern void         amodem_receive_sms( AModem  modem, SmsPDU  pdu );
34
35/** RADIO STATE
36 **/
37typedef enum {
38    A_RADIO_STATE_OFF = 0,          /* Radio explictly powered off (eg CFUN=0) */
39    A_RADIO_STATE_ON,               /* Radio on */
40} ARadioState;
41
42extern ARadioState  amodem_get_radio_state( AModem modem );
43extern void         amodem_set_radio_state( AModem modem, ARadioState  state );
44
45/** SIM CARD STATUS
46 **/
47extern ASimCard    amodem_get_sim( AModem  modem );
48
49/** VOICE AND DATA NETWORK REGISTRATION
50 **/
51
52/* 'stat' for +CREG/+CGREG commands */
53typedef enum {
54    A_REGISTRATION_UNREGISTERED = 0,
55    A_REGISTRATION_HOME = 1,
56    A_REGISTRATION_SEARCHING,
57    A_REGISTRATION_DENIED,
58    A_REGISTRATION_UNKNOWN,
59    A_REGISTRATION_ROAMING
60} ARegistrationState;
61
62typedef enum {
63    A_DATA_NETWORK_UNKNOWN = 0,
64    A_DATA_NETWORK_GPRS,
65    A_DATA_NETWORK_EDGE,
66    A_DATA_NETWORK_UMTS,
67    A_DATA_NETWORK_LTE,
68    A_DATA_NETWORK_CDMA1X,
69    A_DATA_NETWORK_EVDO, // TODO: Should REV0, REVA and REVB be added?
70} ADataNetworkType;
71// TODO: Merge the usage of these two structs and rename ADataNetworkType
72typedef enum {
73    A_TECH_GSM = 0,
74    A_TECH_WCDMA,
75    A_TECH_CDMA,
76    A_TECH_EVDO,
77    A_TECH_LTE,
78    A_TECH_UNKNOWN // This must always be the last value in the enum
79} AModemTech;
80
81typedef enum {
82    A_SUBSCRIPTION_NVRAM = 0,
83    A_SUBSCRIPTION_RUIM,
84    A_SUBSCRIPTION_UNKNOWN // This must always be the last value in the enum
85} ACdmaSubscriptionSource;
86
87typedef enum {
88    A_ROAMING_PREF_HOME = 0,
89    A_ROAMING_PREF_AFFILIATED,
90    A_ROAMING_PREF_ANY,
91    A_ROAMING_PREF_UNKNOWN // This must always be the last value in the enum
92} ACdmaRoamingPref;
93
94extern ARegistrationState  amodem_get_voice_registration( AModem  modem );
95extern void                amodem_set_voice_registration( AModem  modem, ARegistrationState    state );
96
97extern ARegistrationState  amodem_get_data_registration( AModem  modem );
98extern void                amodem_set_data_registration( AModem  modem, ARegistrationState    state );
99extern void                amodem_set_data_network_type( AModem  modem, ADataNetworkType   type );
100
101extern ADataNetworkType    android_parse_network_type( const char*  speed );
102extern AModemTech          android_parse_modem_tech( const char*  tech );
103extern void                amodem_set_cdma_subscription_source( AModem modem, ACdmaSubscriptionSource ssource );
104extern void                amodem_set_cdma_prl_version( AModem modem, int prlVersion);
105
106
107/** OPERATOR NAMES
108 **/
109typedef enum {
110    A_NAME_LONG = 0,
111    A_NAME_SHORT,
112    A_NAME_NUMERIC,
113    A_NAME_MAX  /* don't remove */
114} ANameIndex;
115
116/* retrieve operator name into user-provided buffer. returns number of writes written, including terminating zero */
117extern int   amodem_get_operator_name ( AModem  modem, ANameIndex  index, char*  buffer, int  buffer_size );
118
119/* reset one operator name from a user-provided buffer, set buffer_size to -1 for zero-terminated strings */
120extern void  amodem_set_operator_name( AModem  modem, ANameIndex  index, const char*  buffer, int  buffer_size );
121
122/** CALL STATES
123 **/
124
125typedef enum {
126    A_CALL_OUTBOUND = 0,
127    A_CALL_INBOUND  = 1,
128} ACallDir;
129
130typedef enum {
131    A_CALL_ACTIVE = 0,
132    A_CALL_HELD,
133    A_CALL_DIALING,
134    A_CALL_ALERTING,
135    A_CALL_INCOMING,
136    A_CALL_WAITING
137} ACallState;
138
139typedef enum {
140    A_CALL_VOICE = 0,
141    A_CALL_DATA,
142    A_CALL_FAX,
143    A_CALL_UNKNOWN = 9
144} ACallMode;
145
146#define  A_CALL_NUMBER_MAX_SIZE  16
147
148typedef struct {
149    int         id;
150    ACallDir    dir;
151    ACallState  state;
152    ACallMode   mode;
153    int         multi;
154    char        number[ A_CALL_NUMBER_MAX_SIZE+1 ];
155} ACallRec, *ACall;
156
157extern int    amodem_get_call_count( AModem  modem );
158extern ACall  amodem_get_call( AModem  modem,  int  index );
159extern ACall  amodem_find_call_by_number( AModem  modem, const char*  number );
160extern int    amodem_add_inbound_call( AModem  modem, const char*  number );
161extern int    amodem_update_call( AModem  modem, const char*  number, ACallState  state );
162extern int    amodem_disconnect_call( AModem  modem, const char*  number );
163
164/**/
165
166#endif /* _android_modem_h_ */
167