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