EM55_切换语音通道相关修改RIL7(A20)-20130329

来源:互联网 发布:新站怎么做站外优化 编辑:程序博客网 时间:2024/05/21 20:25

---- Jet add for earphone mode Matches (13 in 13 files) ----
CommandsInterface.java (telephony\java\com\android\internal\telephony):    //Jet add for earphone mode
Phone.java (telephony\java\com\android\internal\telephony):    //Jet add for earphone mode
PhoneBase.java (telephony\java\com\android\internal\telephony):    //Jet add for earphone mode
PhoneProxy.java (telephony\java\com\android\internal\telephony):    //Jet add for earphone mode
PhoneUtils.java (phone\src\com\android\phone): //Jet add for earphone mode
RIL.java (telephony\java\com\android\internal\telephony):    //Jet add for earphone mode
RILConstants.java (telephony\java\com\android\internal\telephony):    //Jet add for earphone mode
SipCommandInterface.java (telephony\java\com\android\internal\telephony\sip):    //Jet add for earphone mode

Ril.cpp (ril\libril): //Jet add for earphone mode
Ril.h (ril\include\telephony)://Jet add for earphone mode
Ril_commands.h (ril\libril):    //Jet add for earphone mode
SimulatedCommands.java (telephony\java\com\android\internal\telephony\test):    //Jet add for earphone mode
UsimDataDownloadCommands.java (telephony\tests\telephonytests\src\com\android\internal\telephony\gsm):    //Jet add for earphone mode
--------------------------------------------------------------------------------------

 


======================================================================================
总结分析:以下流程仅供参考
PhoneUtils.java里面调用app.phone.switchToEarphoneMode----->
PhoneProxy.java中调用--->phone.java(只有定义)---->PhoneBase.java(实现)--->调用CommandsInterface.java函数--->RIL.java
1.RILConstants.java这个文件什么时候被调用?
2.重点看ril.java层以下。
rr= RILRequest.obtain(RIL_REQUEST_SWITCH_EARPHONE, result)---将3001发送给rr。
switchToEarphoneMode(1, null)-----RIL_REQUEST_SWITCH_EARPHONE-

---------------------------------------------------------------------------------------
1.Phone.java----------------------public interface Phone 接口中添加
  public void switchToEarphoneMode(int mode, Message result);
2.RIL.java------实现了这个接口CommandsInterface
   case RIL_REQUEST_SWITCH_EARPHONE: ret = responseVoid(p); break; //2290----返回ok?
   case RIL_REQUEST_SWITCH_EARPHONE: return "RIL_REQUEST_SWITCH_EARPHONE"; //3501----调试RILJ_LOGD的作用。
  
     //Jet add for earphone mode
    public void switchToEarphoneMode(int mode, Message result) {
        RILRequest rr = RILRequest.obtain(RIL_REQUEST_SWITCH_EARPHONE, result);//请求放在RILRequest rr 中了。

        rr.mp.writeInt(1);
        rr.mp.writeInt(mode);

        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

        send(rr);//发送给hardware层了。。。。。
    } 
---------------------------------------------------------------------------------------
3.ril_commands.h
添加   //Jet add for earphone mode
  {RIL_REQUEST_SWITCH_EARPHONE, dispatchInts, responseVoid},
---------------------------------------------------------------------------------------
4.ril.h新有
#define RIL_REQUEST_SWITCH_EARPHONE 3001

5.UsimDataDownloadCommands.java   SimulatedCommands.java  都是测试用的,直接添加接口就可以了。
   public void switchToEarphoneMode(int mode, Message result) {}

7.SipCommandInterface.java  
public void switchToEarphoneMode(int mode, Message result) {}
---------------------------------------------------------------------------------------
8.RILConstants.java :和下层的标号是一样的。
int RIL_REQUEST_SWITCH_EARPHONE = 3001;

9.ril.cpp是重点:

10.PhoneUtil.java
static void turnOnSpeaker(Context context, boolean flag, boolean store)======这个函数是系统有的函数为添加代码起始位置
  if(flag)
            app.phone.switchToEarphoneMode(2, null);
        else
        {
            //app.phone.switchToEarphoneMode(0, null);
            log("audioManager.isWiredHeadsetOn(): "+audioManager.isWiredHeadsetOn()); 
            if(!audioManager.isWiredHeadsetOn())
             app.phone.switchToEarphoneMode(0, null);            
            else
             app.phone.switchToEarphoneMode(1, null); 
        }
注:PhoneApp app = PhoneApp.getInstance();
PhoneApp是Phone应用层的程序,
---------------------------------------------------------------------------------------
11.PhoneProxy.java
    //Jet add for earphone mode
    public void switchToEarphoneMode(int mode, Message result) {
        mCommandsInterface.switchToEarphoneMode(mode, null);
    }  
12.PhoneBase.java
    public void switchToEarphoneMode(int mode, Message result) {
        mCM.switchToEarphoneMode(mode, null);//public CommandsInterface mCM;
    }
 
13.CommandsInterface.java //只是提供接口,具体实现在Ril.java中。
public void switchToEarphoneMode(int mode, Message result);
-----------------------------------------------------------------------------------------
=========================================================================================
二、ril层的分析:

1.ril.h (ril\include\telephony):
#define RIL_REQUEST_SWITCH_EARPHONE 3001

2.ril_commands.h (ril\libril):
  {RIL_REQUEST_SWITCH_EARPHONE, dispatchInts, responseVoid},

----------------------------------------------------------------------------------------
3.Ril.cpp (ril\libril): //Jet add for earphone mode


case RIL_REQUEST_SWITCH_EARPHONE: return "SWITCH_EAR_MODE";
-----------------------------------------------------------------------------------------