Home | History | Annotate | Download | only in telephony
      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  **/
     20 typedef struct AModemRec_*    AModem;
     21 
     22 /* a function used by the modem to send unsolicited messages to the channel controller */
     23 typedef void (*AModemUnsolFunc)( void*  opaque, const char*  message );
     24 
     25 extern AModem      amodem_create( int  base_port, AModemUnsolFunc  unsol_func, void*  unsol_opaque );
     26 extern void        amodem_set_legacy( AModem  modem );
     27 extern void        amodem_destroy( AModem  modem );
     28 
     29 /* send a command to the modem */
     30 extern const char*  amodem_send( AModem  modem, const char*  cmd );
     31 
     32 /* simulate the receipt on an incoming SMS message */
     33 extern void         amodem_receive_sms( AModem  modem, SmsPDU  pdu );
     34 
     35 /** RADIO STATE
     36  **/
     37 typedef enum {
     38     A_RADIO_STATE_OFF = 0,          /* Radio explictly powered off (eg CFUN=0) */
     39     A_RADIO_STATE_ON,               /* Radio on */
     40 } ARadioState;
     41 
     42 extern ARadioState  amodem_get_radio_state( AModem modem );
     43 extern void         amodem_set_radio_state( AModem modem, ARadioState  state );
     44 
     45 /** SIM CARD STATUS
     46  **/
     47 extern ASimCard    amodem_get_sim( AModem  modem );
     48 
     49 /** VOICE AND DATA NETWORK REGISTRATION
     50  **/
     51 
     52 /* 'stat' for +CREG/+CGREG commands */
     53 typedef 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 
     62 typedef enum {
     63     A_GPRS_NETWORK_UNKNOWN = 0,
     64     A_GPRS_NETWORK_GPRS,
     65     A_GPRS_NETWORK_EDGE,
     66     A_GPRS_NETWORK_UMTS
     67 } AGprsNetworkType;
     68 
     69 extern ARegistrationState  amodem_get_voice_registration( AModem  modem );
     70 extern void                amodem_set_voice_registration( AModem  modem, ARegistrationState    state );
     71 
     72 extern ARegistrationState  amodem_get_data_registration( AModem  modem );
     73 extern void                amodem_set_data_registration( AModem  modem, ARegistrationState    state );
     74 extern void                amodem_set_data_network_type( AModem  modem, AGprsNetworkType   type );
     75 
     76 extern AGprsNetworkType    android_parse_network_type( const char*  speed );
     77 
     78 
     79 /** OPERATOR NAMES
     80  **/
     81 typedef enum {
     82     A_NAME_LONG = 0,
     83     A_NAME_SHORT,
     84     A_NAME_NUMERIC,
     85     A_NAME_MAX  /* don't remove */
     86 } ANameIndex;
     87 
     88 /* retrieve operator name into user-provided buffer. returns number of writes written, including terminating zero */
     89 extern int   amodem_get_operator_name ( AModem  modem, ANameIndex  index, char*  buffer, int  buffer_size );
     90 
     91 /* reset one operator name from a user-provided buffer, set buffer_size to -1 for zero-terminated strings */
     92 extern void  amodem_set_operator_name( AModem  modem, ANameIndex  index, const char*  buffer, int  buffer_size );
     93 
     94 /** CALL STATES
     95  **/
     96 
     97 typedef enum {
     98     A_CALL_OUTBOUND = 0,
     99     A_CALL_INBOUND  = 1,
    100 } ACallDir;
    101 
    102 typedef enum {
    103     A_CALL_ACTIVE = 0,
    104     A_CALL_HELD,
    105     A_CALL_DIALING,
    106     A_CALL_ALERTING,
    107     A_CALL_INCOMING,
    108     A_CALL_WAITING
    109 } ACallState;
    110 
    111 typedef enum {
    112     A_CALL_VOICE = 0,
    113     A_CALL_DATA,
    114     A_CALL_FAX,
    115     A_CALL_UNKNOWN = 9
    116 } ACallMode;
    117 
    118 #define  A_CALL_NUMBER_MAX_SIZE  16
    119 
    120 typedef struct {
    121     int         id;
    122     ACallDir    dir;
    123     ACallState  state;
    124     ACallMode   mode;
    125     int         multi;
    126     char        number[ A_CALL_NUMBER_MAX_SIZE+1 ];
    127 } ACallRec, *ACall;
    128 
    129 extern int    amodem_get_call_count( AModem  modem );
    130 extern ACall  amodem_get_call( AModem  modem,  int  index );
    131 extern ACall  amodem_find_call_by_number( AModem  modem, const char*  number );
    132 extern int    amodem_add_inbound_call( AModem  modem, const char*  number );
    133 extern int    amodem_update_call( AModem  modem, const char*  number, ACallState  state );
    134 extern int    amodem_disconnect_call( AModem  modem, const char*  number );
    135 
    136 /**/
    137 
    138 #endif /* _android_modem_h_ */
    139