---- 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";
-----------------------------------------------------------------------------------------