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;
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值