`
573842281
  • 浏览: 43877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RIL.java

 
阅读更多

E:\android-source\Android-2.3-Real6410-r1\Android-2.3-Real6410-r1\frameworks\base\telephony\java\com\android\internal\telephony\RIL.java

 

 

/*
	 * add for ptt
	 * @see com.tdtech.service.CommandsInterface#closeSocket()
	 */
	public void closeSocket(){
        try {
        	mSocket.shutdownInput();
        	mSocket.shutdownOutput();
        } catch (IOException ex) {
        }
        Log.w(LOG_TAG, "shutdown");
	}
	

	class RILSender extends Handler implements Runnable {
		public RILSender(Looper looper) {
			super(looper);
		}

		// Only allocated once
		byte[] dataLength = new byte[4];

		// ***** Runnable implementation
		public void run() {
			// setup if needed
		}

		// ***** Handler implemementation

		public void handleMessage(Message msg) {
			RILRequest rr = (RILRequest) (msg.obj);
			RILRequest req = null;

			switch (msg.what) {
			case EVENT_SEND:
				/**
				 * mRequestMessagePending++ already happened for every
				 * EVENT_SEND, thus we must make sure mRequestMessagePending--
				 * happens once and only once
				 */
				boolean alreadySubtracted = false;
				try {
					LocalSocket s;

					s = mSocket;

					if (s == null) {
						rr.onError(RADIO_NOT_AVAILABLE, null);
						rr.release();
						if (mRequestMessagesPending > 0)
							mRequestMessagesPending--;
						alreadySubtracted = true;
						return;
					}

					synchronized (mRequestsList) {
						mRequestsList.add(rr);
						mRequestMessagesWaiting++;
						Log.d(LOG_TAG, "mRequestsList size=" 
								+ mRequestsList.size()
								+ " mRequestMessagesWaiting="
								+ mRequestMessagesWaiting
								);
					}

					if (mRequestMessagesPending > 0)
						mRequestMessagesPending--;
					alreadySubtracted = true;

					byte[] data;

					data = rr.mp.marshall();
					rr.mp.recycle();
					rr.mp = null;

					if (data.length > RIL_MAX_COMMAND_BYTES) {
						throw new RuntimeException(
								"Parcel larger than max bytes allowed! "
										+ data.length);
					}

					// parcel length in big endian
					dataLength[0] = dataLength[1] = 0;
					dataLength[2] = (byte) ((data.length >> 8) & 0xff);
					dataLength[3] = (byte) ((data.length) & 0xff);

					// Log.v(LOG_TAG, "writing packet: " + data.length +
					// " bytes");

					s.getOutputStream().write(dataLength);
					s.getOutputStream().write(data);
				} catch (IOException ex) {
					Log.e(LOG_TAG, "IOException", ex);
					req = findAndRemoveRequestFromList(rr.mSerial);
					// make sure this request has not already been handled,
					// eg, if RILReceiver cleared the list.
					if (req != null || !alreadySubtracted) {
						rr.onError(RADIO_NOT_AVAILABLE, null);
						rr.release();
					}
				} catch (RuntimeException exc) {
					Log.e(LOG_TAG, "Uncaught exception ", exc);
					req = findAndRemoveRequestFromList(rr.mSerial);
					// make sure this request has not already been handled,
					// eg, if RILReceiver cleared the list.
					if (req != null || !alreadySubtracted) {
						rr.onError(GENERIC_FAILURE, null);
						rr.release();
					}
				}

				if (!alreadySubtracted && mRequestMessagesPending > 0) {
					mRequestMessagesPending--;
				}

				break;
 
分享到:
评论

相关推荐

    RIL.rar_The New Pool

    在RIL.java文件中,可能会包含以下关键知识点: 1. **RILRequest类**:该类的设计和实现,可能包括成员变量如请求ID(requestId)、原始数据(data)、请求类型(opCode)以及回调函数(onComplete)。 2. **对象池设计**...

    ril.tar.gz

    3. **接口定义**:RIL提供了Java和C++的API接口,供上层应用和服务调用。 4. **配置文件**:包含了设备特定的RIL配置,如网络频段、调制解调器命令集等。 5. **测试工具和脚本**:为了调试和验证RIL功能,通常会包含...

    framework---telephony基本流程

    在短信流程中,Ril.java的processSolicited()方法会将短信请求传递给CommandsInterface.java的sendSms()方法,该方法会将短信请求传递给BaseCommands.java的sendSms()方法,该方法会将短信请求传递给PhoneBase.java...

    2.3.x_libmoto_ril.so_254_13.zip

    "META-INF"是Java和Android应用的标准部分,通常包含关于应用程序或库的元数据,如数字签名信息,用于验证文件的完整性和来源。在更新库文件时,这些信息用于确保安装的文件未被篡改,并且来自可信的源。 "system...

    reference-ril.rar_RIL_android

    - **源代码**:RIL的Java源码,用于处理上层请求和事件,以及C/C++源码,用于与基带处理器交互。 - **配置文件**:针对特定Quectel模块的配置文件,定义了RIL如何与模块通信的细节。 - **库文件**:编译后的动态链接...

    RIL总结.docx

    - **启动eventLoop线程**:`RIL_startEventLoop`开启一个事件循环线程,用于处理来自`ril.java`的命令和第三方库的上报信息。 - **解析函数指针**:通过`dlsym`获取动态库中`reference-ril.c`(或`qcril.c`)的`...

    Android软件流程之App&&Framework&&Ril借鉴.pdf

    在上层与Ril层的通信中,`Ril.java`扮演了关键角色。它定义了`RILRequest`和`Ril`两个类,以及`RILReceiver`和`RILSender`两个内部类。`RILReceiver`线程负责监听Ril层的socket通道,接收上报信息,而`RILSender`则...

    华为模块在android下集成RIL库文件试用2.x 3.x 4.x

    5. **实现RIL接口**:在Java层,你需要创建一个继承自`IRadio`接口的类,比如`HuaweiRadioService`,并实现其中的所有回调方法。这些方法会与底层.so库中的C/C++函数进行交互。 6. **配置硬件抽象层(HAL)**:在...

    phone service and ril layer

    - **RILJ Layer(RIL Java 层):** 作为 Java 层与原生层之间的桥梁,负责处理 RIL 请求。 - **RILD Daemon(RIL 守护进程):** 运行在原生层的进程,直接与硬件通信。 - **Vendor RIL(供应商 RIL):** 设备厂商...

    android中添加AT+CMGL命令

    - `Ril.java`是Android系统的Radio Interface Layer(RIL)的Java层实现,提供了与硬件层交互的API。 - `Ril.java`中的`listSMS()`方法是用于发起读取短信的请求,它会调用`ulc2-ril.c`中的`onRequest()`函数。 -...

    Android中添加AT命令流程[文].pdf

    同样地,`CommandsInterface`也需要在其实现类中实现,包括`RIL.java`和用于模拟测试的`SimulatedCommands.java`。在实际的`RIL.java`类中,我们需要编写具体的实现逻辑,通过构造`RILRequest`对象,设置请求的标识...

    android 关于电话本技术汇总

    一旦SIM卡状态改变,`IccCardStatus.java`中的信息会被更新,通过`RIL.java`(Radio Interface Layer,无线接口层)发送给上层应用,RIL负责与基带处理器通信,获取和管理SIM卡信息。最后,`IccProvider.java`从SIM...

    Android Ril

    GSMPhone的setCallWaiting()方法进一步调用了CommandsInterface的setCallWaiting(),CommandsInterface同样是一个接口,由RIL.java中的RIL类实现。RIL的setCallWaiting()方法创建了一个RILRequest对象,并通过RIL_...

    Android 4.2 电话被动接听流程(MT)分析

    在电话的呼出流程的最后,RIL.java会启动一个RILReceiver的Runnable线程,并在这个线程中使用一个无限循环来监听来自底层的socket信息。这个无限循环实际上是一个连续的查询过程,它会不断从socket中读取数据,这些...

    QCRIL_RIL_架构分析

    RIL.java是Framework侧与RIL层交互的主要接口,它定义了Framework层与RIL层之间的消息格式和处理逻辑。Framework层通过Socket向RIL层发送请求,并接收RIL层返回的响应消息。此外,也可以通过oem_socket接口直接与RIL...

    Android_中添加_AT_命令流程.doc

    - 最后,在上层的`RIL.java`文件中,需要在`processUnsolicited()`或`processSolicited()`方法中处理硬件返回的数据。根据实际需求选择其中一个方法来处理。 #### 六、总结 通过以上步骤,我们可以成功地在Android...

    安卓RIL代码

    这个目录包含了许多与RIL相关的Java和C/C++源文件,这些文件定义了RIL接口、处理RIL消息、解析AT命令响应等功能。例如,`RIL.java`是RIL的主要接口,它提供了诸如注册网络、发起呼叫、发送短信等方法。而`RILRequest...

    dtmf和来电显示

    在RIL.java中,`startDtmf`方法被用来启动DTMF信号的发送。该方法接收一个字符参数`c`和一个消息对象`result`。在参考实现文件`reference-ril.c`中,具体实现了如何通过AT命令向Modem发送DTMF信号。关键代码段如下:...

    Framework层短信收发流程介绍

    1. **接收事件**:短信接收流程从`RIL.java`开始,其中定义了多个事件,例如`RIL_UNSOL_RESPONSE_NEW_SMS`用于GSM短信接收,`RIL_UNSOL_RESPONSE_CDMA_NEW_SMS`用于CDMA短信接收。 2. **解码处理**:接收到短信后,...

    rild Socket 初始化

    rild socket 主用用于接收从RIL.java 中传递过来的数据命令,同时rild的反馈信息也通过该socket返回给RIL.java

Global site tag (gtag.js) - Google Analytics