`
java-mans
  • 浏览: 11389402 次
文章分类
社区版块
存档分类
最新评论

Android RIL源码研究笔记 の ril (二)

 
阅读更多

这篇文章介绍ril.cpp中实现部分代码中的四个字符串输出函数及其相应的枚举类型。首先看requestToString()函数的

代码,它的功能是将将ril_command.h和ril_unsol_commands.h中的命令转换成字符串描述:

	const char * requestToString(int request) {
	    switch(request) {
	        case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
	        case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
	        case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
	        case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
	        case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
	        case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
	        case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
	        case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
	        case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
	        case RIL_REQUEST_DIAL: return "DIAL";
	        case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
	        case RIL_REQUEST_HANGUP: return "HANGUP";
	        case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
	        case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
	        case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
	        case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
	        case RIL_REQUEST_UDUB: return "UDUB";
	        case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
	        case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
	        case RIL_REQUEST_REGISTRATION_STATE: return "REGISTRATION_STATE";
	        case RIL_REQUEST_GPRS_REGISTRATION_STATE: return "GPRS_REGISTRATION_STATE";
	        case RIL_REQUEST_OPERATOR: return "OPERATOR";
	        case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
	        case RIL_REQUEST_DTMF: return "DTMF";
	        case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
	        case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
	        case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
	        case RIL_REQUEST_SIM_IO: return "SIM_IO";
	        case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
	        case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
	        case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
	        case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
	        case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
	        case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
	        case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
	        case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
	        case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
	        case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
	        case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
	        case RIL_REQUEST_ANSWER: return "ANSWER";
	        case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
	        case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
	        case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
	        case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
	        case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
	        case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
	        case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
	        case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
	        case RIL_REQUEST_DTMF_START: return "DTMF_START";
	        case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
	        case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
	        case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
	        case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "SET_PREFERRED_NETWORK_TYPE";
	        case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "GET_PREFERRED_NETWORK_TYPE";
	        case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "GET_NEIGHBORING_CELL_IDS";
	        case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
	        case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
	        case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
	        case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
	        case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
	        case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
	        case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
	        case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
	        case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
	        case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
	        case RIL_REQUEST_STK_GET_PROFILE: return "STK_GET_PROFILE";
	        case RIL_REQUEST_STK_SET_PROFILE: return "STK_SET_PROFILE";
	        case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "STK_SEND_ENVELOPE_COMMAND";
	        case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "STK_SEND_TERMINAL_RESPONSE";
	        case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
	        case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
	        case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "EXPLICIT_CALL_TRANSFER";
	        case RIL_REQUEST_SET_LOCATION_UPDATES: return "SET_LOCATION_UPDATES";
	        case RIL_REQUEST_CDMA_SET_SUBSCRIPTION:return"CDMA_SET_SUBSCRIPTION";
	        case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:return"CDMA_SET_ROAMING_PREFERENCE";
	        case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:return"CDMA_QUERY_ROAMING_PREFERENCE";
	        case RIL_REQUEST_SET_TTY_MODE:return"SET_TTY_MODE";
	        case RIL_REQUEST_QUERY_TTY_MODE:return"QUERY_TTY_MODE";
	        case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
	        case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
	        case RIL_REQUEST_CDMA_FLASH:return"CDMA_FLASH";
	        case RIL_REQUEST_CDMA_BURST_DTMF:return"CDMA_BURST_DTMF";
	        case RIL_REQUEST_CDMA_SEND_SMS:return"CDMA_SEND_SMS";
	        case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:return"CDMA_SMS_ACKNOWLEDGE";
	        case RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG:return"GSM_GET_BROADCAST_SMS_CONFIG";
	        case RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG:return"GSM_SET_BROADCAST_SMS_CONFIG";
	        case RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG:return "CDMA_GET_BROADCAST_SMS_CONFIG";
	        case RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG:return "CDMA_SET_BROADCAST_SMS_CONFIG";
	        case RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION:return "CDMA_SMS_BROADCAST_ACTIVATION";
	        case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return"CDMA_VALIDATE_AND_WRITE_AKEY";
	        case RIL_REQUEST_CDMA_SUBSCRIPTION: return"CDMA_SUBSCRIPTION";
	        case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "CDMA_WRITE_SMS_TO_RUIM";
	        case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "CDMA_DELETE_SMS_ON_RUIM";
	        case RIL_REQUEST_DEVICE_IDENTITY: return "DEVICE_IDENTITY";
	        case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "EXIT_EMERGENCY_CALLBACK_MODE";
	        case RIL_REQUEST_GET_SMSC_ADDRESS: return "GET_SMSC_ADDRESS";
	        case RIL_REQUEST_SET_SMSC_ADDRESS: return "SET_SMSC_ADDRESS";
	        case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "REPORT_SMS_MEMORY_STATUS";
	        case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "REPORT_STK_SERVICE_IS_RUNNING";
	        case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
	        case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
	        case RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_NETWORK_STATE_CHANGED";
	        case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
	        case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
	        case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
	        case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
	        case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST(obsolete)";
	        case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
	        case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
	        case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
	        case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
	        case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
	        case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
	        case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FUL";
	        case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
	        case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
	        case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
	        case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
	        case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_NEW_CDMA_SMS";
	        case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_NEW_BROADCAST_SMS";
	        case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
	        case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
	        case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
	        case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
	        case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
	        case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
	        case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
	        case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONE";
	        case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
	        default: return "<unknown request>";
	    }
	}


第二个函数是将枚举类型RIL_Error中定义的错误码转换成字符串形式,先看RIL_Error的代码,它定义在

(hardware\ril\include\telephony\Ril.h)中:

	typedef enum {
	    RIL_E_SUCCESS = 0,
	    RIL_E_RADIO_NOT_AVAILABLE = 1,     /* 无线模块未打开或者被重置 */
	    RIL_E_GENERIC_FAILURE = 2,         /*  一般错误 */
	    RIL_E_PASSWORD_INCORRECT = 3,      /* 只用于PIN/PIN2相关的函数 */
	    RIL_E_SIM_PIN2 = 4,                /* 指示本次操作需要输入SIM PIN2码 */
	    RIL_E_SIM_PUK2 = 5,                /* 指示本次操作需要输入SIM PUK2码 */
	    RIL_E_REQUEST_NOT_SUPPORTED = 6,  /* 请求类型不支持 */
	    RIL_E_CANCELLED = 7,              /* 操作被取消 */
	    RIL_E_OP_NOT_ALLOWED_DURING_VOICE_CALL = 8, /* C级GPRS设备上不允许在语音通话期间进行数据操作 */
	    RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW = 9,  /* 在设备注册到网络前不允许数据操作 */
	    RIL_E_SMS_SEND_FAIL_RETRY = 10,             /* 发送短信息失败,需要重试 */
	    RIL_E_SIM_ABSENT = 11,                      /* SIM卡或RUIM卡不存在,导致获取CDMA套餐并设定位置失败 */
	    RIL_E_SUBSCRIPTION_NOT_AVAILABLE = 12,      /* 从某一位置获取CDMA套餐失败 */
	    RIL_E_MODE_NOT_SUPPORTED = 13,            /* 首选网络类型不支持 */
	    RIL_E_FDN_CHECK_FAILURE = 14,          /* 接收者不在FDN列表中导致命令失效 */
	    RIL_E_ILLEGAL_SIM_OR_ME = 15          /* 非法的SIM或者ME导致网络选择失效 */
	} RIL_Errno;
	
	// 将枚举类型RIL_Error中的值转换成字符串描述
	const char * failCauseToString(RIL_Errno e) {
	    switch(e) {
	        case RIL_E_SUCCESS: return "E_SUCCESS";
	        case RIL_E_RADIO_NOT_AVAILABLE: return "E_RAIDO_NOT_AVAILABLE";
	        case RIL_E_GENERIC_FAILURE: return "E_GENERIC_FAILURE";
	        case RIL_E_PASSWORD_INCORRECT: return "E_PASSWORD_INCORRECT";
	        case RIL_E_SIM_PIN2: return "E_SIM_PIN2";
	        case RIL_E_SIM_PUK2: return "E_SIM_PUK2";
	        case RIL_E_REQUEST_NOT_SUPPORTED: return "E_REQUEST_NOT_SUPPORTED";
	        case RIL_E_CANCELLED: return "E_CANCELLED";
	        case RIL_E_OP_NOT_ALLOWED_DURING_VOICE_CALL: return "E_OP_NOT_ALLOWED_DURING_VOICE_CALL";
	        case RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW: return "E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW";
	        case RIL_E_SMS_SEND_FAIL_RETRY: return "E_SMS_SEND_FAIL_RETRY";
	        case RIL_E_SIM_ABSENT:return "E_SIM_ABSENT";
	        case RIL_E_ILLEGAL_SIM_OR_ME:return "E_ILLEGAL_SIM_OR_ME";
	#ifdef FEATURE_MULTIMODE_ANDROID
	        case RIL_E_SUBSCRIPTION_NOT_AVAILABLE:return "E_SUBSCRIPTION_NOT_AVAILABLE";
	        case RIL_E_MODE_NOT_SUPPORTED:return "E_MODE_NOT_SUPPORTED";
	#endif
	        default: return "<unknown error>";
	    }
	}


第三个函数是将枚举类型RIL_CallState中定义的值转换成字符串描述,先看枚举类型的定义,同样位于文件

(hardware\ril\include\telephony\Ril.h)中:

	typedef enum {
	    RIL_CALL_ACTIVE = 0,     /* 通话激活 */
	    RIL_CALL_HOLDING = 1,    /* 保持通话 */
	    RIL_CALL_DIALING = 2,    /* 只适用MO(Mobile Original)呼叫 */
	    RIL_CALL_ALERTING = 3,   /* 只适用MO(Mobile Original)呼叫 */
	    RIL_CALL_INCOMING = 4,   /* 只适用MT(Mobile Terminated)呼叫 */
	    RIL_CALL_WAITING = 5     /* 只适用MT(Mobile Terminated)呼叫 */
	} RIL_CallState;
	
	// 将枚举类型RIL_CallState中的值转换成字符串描述
	const char * callStateToString(RIL_CallState s) {
	    switch(s) {
	        case RIL_CALL_ACTIVE : return "ACTIVE";
	        case RIL_CALL_HOLDING: return "HOLDING";
	        case RIL_CALL_DIALING: return "DIALING";
	        case RIL_CALL_ALERTING: return "ALERTING";
	        case RIL_CALL_INCOMING: return "INCOMING";
	        case RIL_CALL_WAITING: return "WAITING";
	        default: return "<unknown state>";
	    }
	}


第四个函数是将枚举类型RIL_RadioState中定义的值转换成字符串描述,枚举类型定义如下,位于文件

(hardware\ril\include\telephony\Ril.h)中:

	typedef enum {
	    RADIO_STATE_OFF = 0,               /* 无线模块显示掉电(如CFUN=0) */
	    RADIO_STATE_UNAVAILABLE = 1,        /* 无线模块不可用(如重置或没启动) */
	    RADIO_STATE_SIM_NOT_READY = 2,      /* 无线模块已启动,但SIM接口未准备好 */
	    RADIO_STATE_SIM_LOCKED_OR_ABSENT = 3,  /* SIM PIN码被锁定,需要输入PUK码,或者网络个人识别码被锁定,或者SIM卡不存在 */
	    RADIO_STATE_SIM_READY = 4,             /* 无线模块已启动,SIM接口可用 */
	    RADIO_STATE_RUIM_NOT_READY = 5,        /* 无线模块已启动,但RUIM接口未准备好 */
	    RADIO_STATE_RUIM_READY = 6,            /* 无线模块已启动,RUIM接口可用 */
	    RADIO_STATE_RUIM_LOCKED_OR_ABSENT = 7, /* RUIM PIN码被锁定,需要输入PUNK码,或者网络个人识别码被锁定,或者RUIM卡不存在 */
	    RADIO_STATE_NV_NOT_READY = 8,          /* 无线模块已启动,但NV接口未准备好 */
	    RADIO_STATE_NV_READY = 9               /* 无线模块已启动,NV接口可用 */
	} RIL_RadioState;
	
	// 将枚举类型RIL_RadioState的值转换成字符串描述
	const char * radioStateToString(RIL_RadioState s) {
	    switch(s) {
	        case RADIO_STATE_OFF: return "RADIO_OFF";
	        case RADIO_STATE_UNAVAILABLE: return "RADIO_UNAVAILABLE";
	        case RADIO_STATE_SIM_NOT_READY: return "RADIO_SIM_NOT_READY";
	        case RADIO_STATE_SIM_LOCKED_OR_ABSENT: return "RADIO_SIM_LOCKED_OR_ABSENT";
	        case RADIO_STATE_SIM_READY: return "RADIO_SIM_READY";
	        case RADIO_STATE_RUIM_NOT_READY:return"RADIO_RUIM_NOT_READY";
	        case RADIO_STATE_RUIM_READY:return"RADIO_RUIM_READY";
	        case RADIO_STATE_RUIM_LOCKED_OR_ABSENT:return"RADIO_RUIM_LOCKED_OR_ABSENT";
	        case RADIO_STATE_NV_NOT_READY:return"RADIO_NV_NOT_READY";
	        case RADIO_STATE_NV_READY:return"RADIO_NV_READY";
	        default: return "<unknown state>";
	    }
	}


To Be Continued

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics