===》表示该函数主要调用关系
vendor\mstar\common\apps\MTvPlayer\src\com\mstar\tv\tvplayer\ui\RootActivity.java
===》onKeyDown()
===》sendCecKey(keyCode)
====>mTvCecManager.sendCecKey(keyCode);
=====> native final boolean sendCecKey(int keyCode)
JNI调用
vendor\mstar\common\libraries\tvapi\jni\com_mstar_android_tvapi_common_CecManager.cpp
====>jboolean com_mstar_android_tvapi_common_CecManager_sendCecKey()
此处会把android的key值做一次转换
android2MufKey const astCECKeyTranslate[] = {
// Note: except the null IR key, all other IR keys should appear once.
{AKEYCODE_DPAD_UP, MVK_UP},
{AKEYCODE_DPAD_DOWN, MVK_DOWN},
{AKEYCODE_DPAD_LEFT, MVK_LEFT},
....
}
AKEYCODE_DPAD_UP等按键值与Android传输下来的一致,其定义文件在:
frameworks\native\include\android\Keycodes.h
MVK_UP等数值表示转换后发送下去的值,其定义文件在
vendor\mstar\common\libraries\tvapi\jni\muf\CustomerKeycode.h
===》srv->sendCecKey(astCECKeyTranslate[i].mufKeyCode)
....CecManager调用sendCecKey...
....CecManagerService::...
=====》BOOL MSrv_CEC::SendCECKey(U32 keycode)
=====》SendCECKeyFromTVtoDev(MUF_Keycode keycode)
=====》transferIrKeyToCecKey(keycode)
SendCECKey与SendCECKeyFromTVtoDev和transferIrKeyToCecKey都位于MSrv_CEC.cpp文件中
路径为:project\msrv\commom\src\MSrv_CEC.cpp
transferIrKeyToCecKey会再次将接收到的keycode转换为自定义的keycode
EN_MAPI_CEC_MSG_USER_CTRL_PARM MSrv_CEC::transferIrKeyToCecKey(MUF_Keycode IRKey)
{
.......
//Get customer key mapping
stKeyMap = getCecKeyFromTvtoDevCustomerTable();
if((stKeyMap == NULL) || (stKeyMap[0].CECKey == E_MAPI_MSB_UNKNOW))
{
// Default key mapping
stKeyMap = CECTxUICommandTable;
}
...........
return CECKey;
}
默认使用CECTxUICommandTable其定义为
// Default Key mapping for sending key from TV to HDMI device
_ST_CEC_IR_KEY_PAIR_T CECTxUICommandTable[] =
{
{E_MAPI_MSG_UI_PLAY, MVK_PLAY},
{E_MAPI_MSG_UI_STOP, MVK_STOP},
{E_MAPI_MSG_UI_PAUSE, MVK_PAUSE},
....
}
E_MAPI_MSG_UI_XXX的定义位于:
MStarSDK/src/datatype/mapi_cec_datatype.h