android 系统上做GC双模的--modem 的被动消息处理

本文深入探讨了在Android设备上进行双模手机开发时,CDMA EVDO模块如何主动上报消息,并详细阐述了这些消息从modem通过C++部分的readerLoop函数上报到Java层的流程。重点分析了unsolicited消息处理过程,包括其在不同场景下的响应机制及Java层的处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

在android 上做双模手机,CDMA EVDO模块主动上报消息在ril 层,应用层必须要做处理;

 

ril层主要是解析 URAT 上报指令,通过socket 传给java层,有java 来提示给用户

 

 

二、unsolicited 消息从modem上报到java的流程。

  c++部份

 

readerLoop()

 

  line = readline();

 

  processLine(line);

 

    handleUnsolicited(line);

 

      if (s_unsolHandler != NULL) {

 

        s_unsolHandler (line1, line2);//实际执行的是void onUnsolicited (const char *s, const char *sms_pdu)

 

          if (strStartsWith(s,"+CRING:")

 

                || strStartsWith(s,"RING")

 

                || strStartsWith(s,"NO CARRIER")

 

                || strStartsWith(s,"+CCWA")

 

          ) 

 

            RIL_onUnsolicitedResponse (RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED, NULL, 0);

 

              p.writeInt32 (RESPONSE_UNSOLICITED);

 

              p.writeInt32 (unsolResponse);

 

              ret = s_unsolResponses[unsolResponseIndex].responseFunction(p, data, datalen);

 

              ret = sendResponse(p);

 

                sendResponseRaw(p.data(), p.dataSize());

 

                  ret = blockingWrite(fd, (void *)&header, sizeof(header));

 

                  blockingWrite(fd, data, dataSize);

 

 

 

  java部份

 

  ril.java->RILReceiver.run()

 

    for(;;)

 

    {

 

      ...

 

      length = readRilMessage(is, buffer);

 

      p = Parcel.obtain();

 

      p.unmarshall(buffer, 0, length);

 

      p.setDataPosition(0);

 

      processResponse(p);

 

        processUnsolicited (p);

 

          response = p.readInt();

 

          switch(response) {

 

          ...

 

          case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret =  responseVoid(p); break;

 

          ...

 

          }

 

          switch(response) {

 

              case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:

 

                if (RILJ_LOGD) unsljLog(response);

 

 

 

                mCallStateRegistrants

 

                    .notifyRegistrants(new AsyncResult(null, null, null));

 

              ...

 

          }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值