当前位置:文档之家› 有关MTK事件的文章

有关MTK事件的文章

有关MTK事件的文章
有关MTK事件的文章

MTK MMI event 小结 1

在MTK MMI 里面有各种event,最常见的有跟交互相关的按键event,触摸屏event。跟各种具体事件比如电话event,短信event,电量event,信号量event,timer event等等。

MTK 都有相应的处理方式,跟交互相关的按键(KeyBrd.c)和触摸屏(TouchScreen.c) 各有一套自己的机子,timer event 已经在MTK timer 小结 3 介绍过,还有一套机制就是处理各种其他事件,它主要分为普通事件和interrupt event,interrupt event 主要用于需要弹出的对话框的event。

M T K MMI event 小结2

今天主要看分析,常用事件机制。做过MTK开发的童鞋应该知道要接受MTK L4 层的消息,用一个注册函数Set Protocol Event Handler,注册一个event 的处理函数。比如短信,电话,电池电量,信号量等等都是通过这个函数来注册消息。当L4 层处理完封装事件后,就会把这个event 发送到MMI task 里来(消息发送可以看MTK task 小结5 ),然后MMI task 通过这个event 机制,找到相应的处理函数,进行处理。实现这种机制,也是考虑到零活性和扩张性。如果都在MMI task 里面,用switch case 来处理,那就很疯狂了,长度不说,写个应用,定义个消息,都要去改MMI task,所以这个机制实现虽然比较简单,但是还是很有必要的。

昨天也说到,这个机制的event 主要有两种,普通event 和intrrupt event(中断事件),这些主要是一些需要中断当前应用的事件(主要是看那些弹出框),比如电话,有些应用需要提前处理这个消息,还有些应用需要在这个事件处理完毕后处理。还是看代码吧

在MMI task 最后,会调用函数ProtocolEventHandler,这个函数就是找到相应event 的相应处理函数(平台不一样,可能实际的函数名字有些区别,但是流程基本上一样的,我这里被#define 到mmi_frm_execute_current_protocol_handler)

注意:event的处理函数使用Set Protocol Event Handler来注册。

// MsgStruct 是具体事件的消息体

void mmi_frm_execute_current_protocol_handler(U16 eventID, void *MsgStruct, int mod_src, void *peerBuf)

{

U16 count = 0;

PsExtPeerFuncPtr currFuncPtr = NULL;

U8 interrup_result = MMI_FALSE; /* False not handle interrupt, True will handle */

MMI_BOOL query_result = MMI_FALSE, execute_result = MMI_FALSE;

interrupt_event_hdlr int_func = NULL, post_int_func = NULL;

mmi_frm_int_event_type current_frm_int_event;

idx = mmi_frm_search_event();

{

// 遍历protocolEventHandler 查找是否有event 注册了回调函数

// 虽然这个方法感觉比较笨,就一个数组,实际上对速度没有什么影响

for (count = 0; count < maxProtocolEvent; count++)

{

if (protocolEventHandler[count].eventID == eventID)

{

//找到处理函数

currFuncPtr = (PsExtPeerFuncPtr)

protocolEventHandler[count].entryFuncPtr;

// 这个地方时,一个优化

// 处理的事情就是把刚才现在处理的event id 往前移动一个单位

// 这是考虑到程序的局部性原理,这个优化还是很有必要的

if (count > 0)

{

protocolEventHandler[count].eventID = protocolEventHandler[count - 1].eventID;

protocolEventHandler[count].entryFuncPtr = protocolEventHandler[count - 1].entryFuncPtr;

protocolEventHandler[count - 1].eventID = eventID;

protocolEventHandler[count - 1].entryFuncPtr = (PsFuncPtr) currFuncPtr;

}

break;

}

}

}

// 这个就是查找是否是中断事件

current_frm_int_event = mmi_frm_interrupt_event_converter(eventID, MsgStruct);

if (current_frm_int_event > 0)

{

// 查看该中断事件是否有注册提前处理函数

query_result = mmi_frm_query_interrupt_event_information(current_frm_int_event, &int_func, &post_int_func);

}

// 如果有调用该函数

if (query_result && int_func)

{

/* New interruption mechanism */

execute_result = (*int_func)(current_frm_int_event);

}

//根据event 相应的回调函数以及前面处理的结果,来决定是否处理该事件

// 要注意的是,如果interrput 提前处理函数返回true,那么这里就不会执行

if ((currFuncPtr) && (!interrup_result) && (!execute_result))

{

(*currFuncPtr) (MsgStruct, mod_src, peerBuf);

}

else

{

MMI_TRACE(MMI_FW_TRC_G1_FRM,

MMI_FRM_INFO_EVENT_EXECURPTO_NO_HDLR, eventID);

}

// interrupt event 最后处理函数

if (query_result && post_int_func)

{

execute_result = (*post_int_func)(current_frm_int_event);

}

}

看完这个,其实觉得挺简单的,对吧。就是一个数组,数组里关联了event id 和对应的处理函数。

还有就是增加了一种intrrupt event。可以注册这种event 的pre_handler and post_handler。这样如果需要,可以提前做处理或者不响应该事件。

M T K MMI event 小结3

昨天大概的说了下,普通event 的执行过程。中间还有几个函数没有介绍,这里简单介绍一下

// 这个函数就是简单把L4c 的interrupt消息,转换成MMI 层interrupt的消息

static mmi_frm_int_event_type mmi_frm_interrupt_event_converter(U16 event_id, void *msg) {

mmi_frm_int_event_type frm_interrupt_event = 0;

switch (event_id)

{

// GPIO 消息

case PRT_EQ_GPIO_DETECT_IND:

{

mmi_eq_gpio_detect_ind_struct *gpio_detect_ind =

(mmi_eq_gpio_detect_ind_struct *)msg;

switch (gpio_detect_ind->gpio_device)

{

// 翻盖关闭

case EXT_DEV_CLAM_CLOSE:

{

frm_interrupt_event = MMI_FRM_INT_CLAM_CLOSE;

break;

}

// 翻盖打开

case EXT_DEV_CLAM_OPEN:

{

frm_interrupt_event = MMI_FRM_INT_CLAM_OPEN;

break;

}

// 耳机插入拔出

case EXT_DEV_EARPHONE:

{

if (gpio_detect_ind->on_off == 1)

{

frm_interrupt_event = MMI_FRM_INT_EARPHONE_PLUG_IN;

}

else

{

frm_interrupt_event =

MMI_FRM_INT_EARPHONE_PLUG_OUT;

}

break;

}

}

break;

}

// 充电信息,

case PRT_BA TTERY_STA TUS_IND:

{

mmi_eq_battery_status_ind_struct *battery_status_ind =

(mmi_eq_battery_status_ind_struct*)msg;

frm_interrupt_event = mmi_frm_get_frm_int_event_macro(

battery_status_ind->battery_status,

mmi_frm_int_event_battery_table,

sizeof(mmi_frm_int_event_battery_table) / sizeof(mmi_frm_int_event_battery_table[0]));

/* For low battery indication */

if (battery_status_ind->battery_status == PMIC_VBA T_STA TUS)

{

if (battery_status_ind->battery_voltage == BA TTERY_LOW_WARNING)

{

frm_interrupt_event = MMI_FRM_INT_BA TTERY_LOW_WARNING;

}

else if (battery_status_ind->battery_voltage ==

BA TTERY_LOW_TX_PROHIBIT)

{

frm_interrupt_event =

MMI_FRM_INT_BA TTERY_LOW_TX_PROHIBIT;

}

}

break;

}

case MSG_ID_TIMER_EXPIRY:

case MSG_ID_MMI_EQ_POWER_ON_IND:

case MSG_ID_MMI_EQ_KEYPAD_DETECT_IND:

{

break;

}

default:

{

//其他interrupt event,主要是弹出框相关,短信报告等等

frm_interrupt_event = mmi_frm_get_frm_int_event_macro(

event_id,

mmi_frm_int_event_convert_table,

sizeof(mmi_frm_int_event_convert_table) /

sizeof(mmi_frm_int_event_convert_table[0]));

break;

}

}

return frm_interrupt_event;

}

这个函数就是把L4C 的消息转换到MMI 的消息,然后通过

mmi_frm_query_interrupt_event_information 这个函数去查找,是否有相应的注册。这个函数比较简单,就是数组里去比较。

还有一个常用的函数是SetProtocolEventHandler,也就是注册一个消息的地回调函数。具体也没有什么可说的,无非就是循环查找是否有这个event。

1,如果有,看func 是否为空,为空表示去掉这个event 的注册,不为空,就直接修改这个event 的func(定时器到时时所要实现的功能函数)

2,没有,就增加一个event。

这里注意,由一个小小的优化,就是判断,event 数组的最后是否为无效的event,如果无

protocol event 机制也差不了多少,简单来说,就是app 通过注册某一个key 的回调函数,当这个key事件产生是,该机制就去找到相应的回调函数,进行回调。

先说说key 的event 有哪些:

1 key down 按键按下KEY_EVENT_DOWN

2 key up 按键弹起KEY_EVENT_UP

3 key long press 按键长按KEY_LONG_PRESS。默认好像是长按1.5 记不清楚了,可以自己设置,函数Kbd_SetLongPressTime,不过除非必不得已,不要去随便修改,可能会引起其他应用出问题,要修改,也要先获得当前值,退出应用时设置回原来的值。

4 key repeat 按键按下一直不放,发送该消息KEY_REPEA T。举个简单例子,pc 上当输入

时,如果长按 a 键,那么回不停的增加a,这个就是repeat动作。这个的时间好像是0.5s,也就是按住键0.5 s 之后,每隔0.5s,就会发送一个repeat 消息。设置函数

Kbd_SetRepeatTime还有两个不常用的KEY_HALF_PRESS_DOWN和

KEY_HALF_PRESS_UP,也就是说的2step 可以。

先讲一下按键的处理流程。

当按键被按键之后,MMI task 会收到MSG_ID_MMI_EQ_KEYPAD_DETECT_IND这个消息,在系统初始化的时候,已经注册了这个消息的处理函数mmi_frm_key_handle。也就是说mmi_frm_key_handle 是处理按键过程的函数。这个函数mmi_frm_key_handle 收到这个消息后,会通过该消息带的函数,去取当前发生的按键事件(实际这个函数就是一个按键缓存队列里去第一个,用一个按键缓存队列,可以防止按键大量的丢失,可以起到同步驱动和MMI层,驱动产生按键事件很快而MMI有可能比较慢,可以简单的理解为生产者和消费者的关系,跑题了)。取到当前按键后,看当前是否可以进行操作,比如是否有触摸笔按下等等。

先看执行key event 函数mmi_frm_key_handle

void mmi_frm_key_handle(void *paraBuff)

{

kbd_data k;

U32 msg_count;

mmi_eq_keypad_detect_ind_struct *p;

// 判断参数是否为空

// 在初始化时,系统就注册了MSG_ID_MMI_EQ_KEYPAD_DETECT_IND 的回调函数为mmi_frm_key_handle

// 当收到这个消息是,表示有按键事件要处理,

// 这个paraBuff 是keyTask 传过来的参数,里面的内容是获取按键信息的函数指针if (paraBuff != NULL)

{

drv_get_key_func new_key_ptr;

p = (mmi_eq_keypad_detect_ind_struct*) paraBuff;

new_key_ptr = (drv_get_key_func) (p->func);

//判断是否是新的函数指针,如果是的话,需要进行一些清理工作

if (new_key_ptr != keypad_ptr)

{

// 新的函数指针,则进行清理,并且判断是否有按键需要处理

if (!mmi_kbd_process_keyptr_change((void *)new_key_ptr))

{

return;

}

//清理按键事件缓存buffer

ClearKeyEvents();

keypad_ptr = new_key_ptr;

}

}

// 通过while (1)来不停的从按键缓存里获取按键信息

// 当然这里不会无限死循环,后面会进行相应处理

while (1)

{

//1)判读是否是挂起,2)是否key需要处理

if ((g_mmi_suspend_key_flag == MMI_FALSE) && keypad_ptr

&&((*(keypad_ptr))(&k) == MMI_TRUE))

{

if (k.Keydata[0] != KEY_INV ALID)

{

#if defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__)

kal_bool is_pen_enabled, is_pen_down;

// 获得触摸屏状态

mmi_pen_get_state(&is_pen_enabled, &is_pen_down);

#endif /* defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__) */

#if defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__)

//如果触摸屏按下,那么保存状态

if (is_pen_down && (k.Keyevent == WM_KEYPRESS))

{

U16 KeyMapIndex;

// 不允许按键处理

is_allow_key_action = MMI_FALSE;

// 把驱动的按键和MMI 按键进行转换

KeyMapIndex =

mmi_frm_get_idx_from_device_key_code(k.Keydata[0]);

if (nKeyPadStatus[KeyMapIndex] == KEY_EVENT_UP)

{

KEYBRD_MESSAGE KeyBrdMsg;

KeyBrdMsg.nKeyCode =

nKeyPadMap[KeyMapIndex].nMMIKeyCode;

if (mmi_frm_is_2step_keyCode(KeyBrdMsg.nKeyCode))

{

nKeyPadStatus[KeyMapIndex] =

KEY_HALF_PRESS_DOWN;

pressKey = HALF_DOWN_STA TUS;

key_is_pressing_count++;

}

else

{

nKeyPadStatus[KeyMapIndex] = KEY_EVENT_DOWN;

pressKey = FULL_DOWN_STA TUS;

key_is_pressing_count++;

}

}

}

else

#endif /* defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__) */

//如果按键是弹起,那么还原原来按键状态,也就是弹起状态

if ((k.Keyevent == WM_KEYRELEASE) && (is_allow_key_action == MMI_FALSE))

{

#if defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__)

/* Reset allow key flag and Update key status even if pen is down*/

U16 KeyMapIndex;

KeyMapIndex =

mmi_frm_get_idx_from_device_key_code(k.Keydata[0]);

if ((nKeyPadStatus[KeyMapIndex] == KEY_EVENT_DOWN)

|| (nKeyPadStatus[KeyMapIndex] ==

KEY_HALF_PRESS_DOWN)

|| (nKeyPadStatus[KeyMapIndex] == KEY_LONG_PRESS)

|| (nKeyPadStatus[KeyMapIndex] == KEY_REPEA T))

{

nKeyPadStatus[KeyMapIndex] = KEY_EVENT_UP;

key_is_pressing_count--;

}

prevKeyMapIndex = prevKeyMapIndex;

#endif /* defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__) */

is_allow_key_action = MMI_TRUE;

}

// 按键是否可以处理

if (is_allow_key_action == MMI_TRUE)

{

if (((k.Keyevent == WM_KEYPRESS) &&

(mmi_kbd_get_key_is_pressing_count() == 0))

|| k.Keyevent == DRV_WM_KEYLONGPRESS || k.Keyevent == DRV_WM_KEYREPEA TED || k.Keyevent == DRV_WM_KEYFULLPRESS)

{

#if defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__)

//关闭触摸屏

mmi_pen_disable();

#endif

}

//真正处理按键事件

mmi_frm_convert_process_key_event(k.Keyevent, k.Keydata[0]);

if ((k.Keyevent == WM_KEYRELEASE) &&

(mmi_kbd_get_key_is_pressing_count() == 0))

{

#if defined(__MMI_TOUCH_SCREEN__) ||

defined(__MMI_HANDWRITING_PAD__)

//重新打开触摸屏

mmi_pen_enable();

#endif

}

}

}

// 获得MMI task 消息队列消息个数

msg_get_ext_queue_info(mmi_ext_qid, &msg_count);

//如果外部有消息或者内部消息,则跳出该循环

if (msg_count > 0 || OslNumOfCircularQMsgs() > 0)

{

//表示还有key需要处理,在MMI task 里会直接调用这个函数进行再处理

g_keypad_flag = MMI_TRUE;

break;

}

}

else

{

// 没有key消息要处理

g_keypad_flag = MMI_FALSE;

break;

}

} /* while(1) */

MMI_TRACE(MMI_FW_TRC_G1_FRM, MMI_FRM_KEY_HDLR_END);

}

1)这里key 用while (1)来处理,不停的从key 消息buffer里取出按键信息,然后处理,这么做可以防止task中不停的发送消息,可以理解为共享内存。同样当有其他消息来时,需要跳出来处理其他消息,处理完毕后还需要再来处理。

2)这里跟触摸屏的事件进行了冲突处理,也就是按键和触摸屏不能同时工作,这两者也没有优先级。

3)实际真正处理按键是在mmi_frm_convert_process_key_event里面,下次在分析

在MTK MMI event 小结 5 中,提到了event 处理函数mmi_frm_key_handle,这个函数主

要作用是判断是否需要处理按键,从按键缓存里面持续的读取按键信息,然后调用

mmi_frm_convert_process_key_event 进行处理。这个函数没有什么可说的,最多是在屏幕旋转的情况下,把导航键转换一下,接着它调用了ProcessKeyEvent,这个函数主要是对于一些状态的处理,防止key down 和up 不成对,出现混乱。

void ProcessKeyEvent(U32 MsgType, U16 DeviceKeyCode)

{

MMI_BOOL isKeyPaired;

U16 KeyMapIndex;

/*----------------------------------------------------------------*/

/* Code Body */

/*----------------------------------------------------------------*/

// 按键影射,把驱动的按键码,转换成MMI 的按键消息

KeyMapIndex = mmi_frm_get_idx_from_device_key_code(DeviceKeyCode);

if (KeyMapIndex >= MAX_KEYS)

{

return;

}

// 处理各种按键事件,没有什么可以多说的,

// 主体结构都一样,

// 1 判断状态是否正常

// 2 正常则调用KeyEventHandler 处理,否则忽略该事件

if (MsgType == WM_KEYPRESS)

{

// 这里处理多按键同时按下的情况。这里需要硬件支持

if ((KeyMapIndex != prevKeyMapIndex) && (g_kbd_concurrent_key_mode == CONCURRENT_KEY_MODE_1_KEY))

{

isKeyPaired = (nKeyPadStatus[prevKeyMapIndex] == KEY_EVENT_UP);

prevKeyMapIndex = KeyMapIndex;

}

//判断案件状态是否正常,防止不匹配

if (nKeyPadStatus[KeyMapIndex] == KEY_EVENT_UP)

{

KEYBRD_MESSAGE KeyBrdMsg;

KeyBrdMsg.nKeyCode = nKeyPadMap[KeyMapIndex].nMMIKeyCode;

if (mmi_frm_is_2step_keyCode(KeyBrdMsg.nKeyCode))

{

nKeyPadStatus[KeyMapIndex] = KEY_HALF_PRESS_DOWN;

key_is_pressing_count++;

KeyBrdMsg.nMsgType = KEY_HALF_PRESS_DOWN;

}

else

{

nKeyPadStatus[KeyMapIndex] = KEY_EVENT_DOWN; /* same with KEY_FULL_PRESS_DOWN */

key_is_pressing_count++;

KeyBrdMsg.nMsgType = KEY_EVENT_DOWN;

}

// 处理按键事件

KeyEventHandler((KEYBRD_MESSAGE*) & KeyBrdMsg); } else

{

/* Ignore the event */

}

}

else if (MsgType == WM_KEYRELEASE)

{

if ((nKeyPadStatus[KeyMapIndex] == KEY_EVENT_DOWN)

|| (nKeyPadStatus[KeyMapIndex] == KEY_LONG_PRESS)

|| (nKeyPadStatus[KeyMapIndex] == KEY_REPEA T) ||

(nKeyPadStatus[KeyMapIndex] == KEY_HALF_PRESS_DOWN))

{

KEYBRD_MESSAGE KeyBrdMsg;

nKeyPadStatus[KeyMapIndex] = KEY_EVENT_UP;

key_is_pressing_count--;

KeyBrdMsg.nMsgType = KEY_EVENT_UP;

KeyBrdMsg.nKeyCode = nKeyPadMap[KeyMapIndex].nMMIKeyCode;

KeyEventHandler((KEYBRD_MESSAGE*) & KeyBrdMsg);

}

else

{

/* Ignore the event */

}

}

/* ++Robin, modified by Max Chen */

else if (MsgType == DRV_WM_KEYLONGPRESS)

{

if (nKeyPadStatus[KeyMapIndex] == KEY_EVENT_DOWN)

{

KEYBRD_MESSAGE KeyBrdMsg;

nKeyPadStatus[KeyMapIndex] = KEY_LONG_PRESS;

KeyBrdMsg.nMsgType = KEY_LONG_PRESS;

KeyBrdMsg.nKeyCode = nKeyPadMap[KeyMapIndex].nMMIKeyCode;

KeyEventHandler((KEYBRD_MESSAGE*) & KeyBrdMsg);

}

else

{

/* Ignore the event */

}

}

else if (MsgType == DRV_WM_KEYREPEA TED)

{

if ((nKeyPadStatus[KeyMapIndex] == KEY_LONG_PRESS) ||

(nKeyPadStatus[KeyMapIndex] == KEY_REPEA T))

{

KEYBRD_MESSAGE KeyBrdMsg;

nKeyPadStatus[KeyMapIndex] = KEY_REPEA T;

KeyBrdMsg.nMsgType = KEY_REPEA T;

KeyBrdMsg.nKeyCode = nKeyPadMap[KeyMapIndex].nMMIKeyCode;

KeyEventHandler((KEYBRD_MESSAGE*) & KeyBrdMsg);

}

else

{

/* Ignore the event */

}

}

else if (MsgType == DRV_WM_KEYFULLPRESS)

{

/*

* Only in two-stage key will have KEY_FULL_PRESS_DOWN, and it followed after KEY_HALF_PRESS_DOWN

*/

if (nKeyPadStatus[KeyMapIndex] == KEY_HALF_PRESS_DOWN)

{

KEYBRD_MESSAGE KeyBrdMsg;

nKeyPadStatus[KeyMapIndex] = KEY_EVENT_DOWN;

KeyBrdMsg.nMsgType = KEY_EVENT_DOWN;

KeyBrdMsg.nKeyCode = nKeyPadMap[KeyMapIndex].nMMIKeyCode;

KeyEventHandler((struct KEYBRD_MESSAGE*)&KeyBrdMsg);

}

else

{

/* Ignore the event */

}

}

else if ((MsgType == DRV_WM_ENABLE_TWOKEY_DETECTION) || (MsgType == DRV_WM_ENABLE_THREEKEY_DETECTION) ||

(MsgType == DRV_WM_DISABLE_MULTIKEY_DETECTION))

{

/* Ignore the event */

}

else

{

MMI_TRACE(MMI_FW_TRC_G6_FRM_DETAIL,

MMI_FRM_ERROR_PROC_KEYEVENT_HDLR);

MMI_ASSERT(0);

}

}

KeyEventHandler 函数主要判断是否要真的处理该事件,可以看成是一个按键事件的拦截,比如应用切换过程中,需要一个切换动画,而这个动画工程中,需要处理忽略这些按键。就需要特殊的处理。

static void KeyEventHandler(KEYBRD_MESSAGE *eventKey)

{

MMI_BOOL is_hdlr_enabled = MMI_TRUE;

// 主要处理一些特殊响应:屏幕背光,屏幕锁定,按键声音

mmi_kbd_app_key_hdlr(eventKey);

// 判断是否有前置处理函数

if (g_mmi_frm_cntx. kbd_pre_func)

{

is_hdlr_enabled = g_mmi_frm_cntx.kbd_pre_func(eventKey);

}

// 根据前置处理函数结果,判断是否要处理该key event

if (is_hdlr_enabled)

{

//处理案件事件

ExecuteCurrKeyHandler((S16) eventKey->nKeyCode, (S16) eventKey->nMsgType);

}

// 是否有后置处理函数,可以进行一些监视

if (g_mmi_frm_cntx.kbd_post_func)

{

g_mmi_frm_cntx.kbd_post_func(eventKey);

}

}

接下来是ExecuteCurrKeyHandler 这个函数就是根据按键事件,获得处理函数,进行处理。

void ExecuteCurrKeyHandler(S16 keyCode, S16 keyType)

{

FuncPtr currFuncPtr = NULL;

// 重新设定键盘锁和屏保timer

mmi_idle_restart_keypad_lock_timer();

mmi_idle_restart_screensaver_timer();

frm_p->currKeyCode = keyCode;

frm_p->currKeyType = keyType;

// 对电话状态下,挂电话键的特殊处理.

if (frm_p->currKeyType == KEY_EVENT_DOWN &&

isInCall() && !GetWapCallPresent() &&

IsBitReset(g_mmi_frm_cntx.end_key_flag, frm_p->currKeyType) )

{

RegisterEndKeyHandlerInCall();

}

// 获得按键处理函数

currFuncPtr = currKeyFuncPtrs[keyCode][keyType];

// 导航的选择键,默认和左功能键的效果一样。

if (keyCode == KEY_ENTER && currFuncPtr == NULL)

{

if (currKeyFuncPtrs[KEY_ENTER][KEY_EVENT_UP] == NULL &&

currKeyFuncPtrs[KEY_ENTER][KEY_EVENT_DOWN] == NULL &&

currKeyFuncPtrs[KEY_ENTER][KEY_HALF_PRESS_DOWN] == NULL &&

currKeyFuncPtrs[KEY_ENTER][KEY_REPEA T] == NULL && currKeyFuncPtrs[KEY_ENTER][KEY_LONG_PRESS] == NULL)

{

currFuncPtr = currKeyFuncPtrs[KEY_LSK][keyType];

}

}

// 处理按键消息

if (currFuncPtr)

{

(*currFuncPtr)();

}

}

// 重置状态

if (keyType == KEY_EVENT_UP)

{

frm_p->currKeyCode = KEY_INV ALID;

frm_p->currKeyType = MAX_KEY_TYPE;

}

}

从整个按键事件的处理流程来看,也没有什么特殊的地方,就是收到消息后,从按键buffer 里取出按键事件,然后处理。如果有有别的事件要处理,那么就break出来,等到处理完这个消息后,在MMI task 调用mmi_frm_key_handle 继续处理剩下的按键事件。这里无非多了很多的判断,是否要进行按键处理,MTK的代码函数名字上虽然看不出什么东西,但是一层一层函数,每一层函数的功能还是比较独立的,所以也不是很难看懂。

到这,key event 的处理基本上就算完成了。其他几个常用的函数注册key 处理函数了。了解了按键event的处理过程之后(其实也是比较简单的),注册函数就很好了解了,就是把相应key 和event 的数组里放入一个回调函数的指针。比如

void SetKeyHandler(FuncPtr funcPtr, U16 keyCode, U16 keyT ype) 抛开其他语句,就是一句简单的实现currKeyFuncPtrs[keyCode][keyT ype] = funcPtr; 还有可以设置一组按键的处理函数,

void SetGroupKeyHandler(FuncPtr funcPtr, PU16 keyCodes, U8 len, U16 keyType),这个很好理解,keyCodes 就是一个按键数组,len是这个数组的长度。实现也很简单,就是一个for循环,把这些keyCodes的回调函数都写成funcPtr。其他还有:

void mmi_frm_kbd_reg_pre_key_hdlr(PsKeyProcessCBPtr func) ; //注册按键预处理函数,MTK MMI event 小结6 解释过

void mmi_frm_kbd_set_tone_state(mmi_frm_kbd_tone_state_enum state); // 设置按键音。需要说明一点,在开发一个应用程序的时候,有些手机状态一般先保存一下进入程序前的状态,在自己的app 退出后还原状态。比如这个按键音,背光长亮等等

接下来简单说一下触摸屏事件,其实触摸屏的实现跟key event 几乎一样。也是通过pen event 缓存队列来获得pen 事件。来看几个代码.

先看一下初始化函数:mmi_pen_init

void mmi_pen_init(void)

{

g_pen_initialized = KAL_TRUE;

// 看到这两个函数指针,是不是感觉很熟悉?对,就是跟key 一样,前置处理和后置处理函数

// 这个看多了,不用细看代码就能猜到了。

g_pen_cntx.pre_pen_callback_fp = NULL;

g_pen_cntx.post_pen_callback_fp = NULL;

// 设置手写输入法的区域,手写输入法在触摸屏这里需要特殊处理。

mmi_pen_stop_capture_strokes();

// 设置触摸屏采样时间间隔,参数一是在普通状态下,采样时间间隔,参数二是手写输入法状态下,采样时间间隔

mmi_pen_config_sampling_period(MMI_PEN_SAMPLING_PERIOD_1,

MMI_PEN_SAMPLING_PERIOD_2);

// 设置超时时间间隔

mmi_pen_config_timeout_period(MMI_PEN_LONGTAP_TIME,

MMI_PEN_REPEA T_TIME, MMI_PEN_STROKE_LONGTAP_TIME);

// 设置move 的间距,也就是两个点之间多少个pixel 算move 事件。

mmi_pen_config_move_offset(

MMI_PEN_SKIP_MOVE_OFFSET,

MMI_PEN_SKIP_STROKE_MOVE_OFFSET,

MMI_PEN_SKIP_LONGTAP_OFFSET,

MMI_PEN_SKIP_STROKE_LONGTAP_OFFSET);

// 设置drv 的回调函数,也就是当产生事件时,会回调这个函数

touch_panel_cb_registration(mmi_pen_touch_panel_sendilm, NULL);

// 设置MMI 层消息MSG_ID_TP_EVENT_IND 的处理函数

SetProtocolEventHandler(mmi_pen_touch_panel_event_ind, MSG_ID_TP_EVENT_IND); }

在驱动drv 这一层,触摸屏有一个task-- MOD_TP_TASK,在处理事件,MOD_TP_TASK 会回调用touch_panel_cb_registration 注册的函数,当pen event 事件产生了,这个pen event 缓存里取,这里注册的是:mmi_pen_touch_panel_sendilm 函数,这个函数就是简单的向MMI task 发送一个消息MSG_ID_TP_EVENT_IND,让MMI task 来处理。这里这么做的原因也很简单,drv 的task 优先级是很高的,要处理的东西也很多,所以希望回调函数能很快处理完这个事情(发送一个消息很快),这里可以想一下pc 上的中断,这两者差不多。当然中断还有更多其他原因,比如内核态和用户态等等,需要回调函数尽可能快处理,发送消息到消息队列(扯远了。。。)。还有一点需要说明的是,现在触摸屏的手机越来越普遍,那么该善触摸屏的体验是非常重要的,可惜的是MTK 的又不是多点触摸,处理起来很费劲。这个时候就需要充分利用好这里的几个设置,采样时间间隔,以及move 事件距离。需要时,让自己app可以捕获尽可能多的点,然后自己进行计算,来判断用户行为。这对改善体验很有帮助。当然这个也是比较耗电的,不需要时,一定要设置回普通状态。

手机指令命令代码大全

MTK平台手机指令大全 设置指令:*#66*# 中文语言:*#0086# + send 查看版本:*#8375# 软件版本:*#8882# 测试:*#87# 调试:*#8899# (?) 默认语言:*#0000#+通话键 设置英文:*#0044#+通话键 繁体中文:*#0886#+通话键 简体中文:*#0086#+通话键 串号查询:*#06# 原厂设置:*#66*# 查看版本:*#8375# 工厂指令:*#3646633# 自动测试:*#87# 软件版本:*#8882# *#035670766*001# *#035670766*002# 有一些机器开机输入*#66*#不进测试的。可以在开机瞬间,在按键灯亮和开机音乐响的时候快速按*#*#............*#就可进入测试 科达Q191(MT6228平台)有些好象不支持,可惜啊.......... 诺基亚是国际知名手机品牌,它在中国市场上一直占据着很大一部分销售份额。诺基亚手机拥有着时尚的外观和强大的功能,尤其是它出色的性能,经久耐用。是赢得很多消费者喜爱的主要原因。不少消费者在购买诺基亚手机之后,都会拿着说明书仔细阅读使用说明。然而,不管是什么牌子的手机除了说明书上的那些说明文字之外,都还有很多用户并不知晓的操作命令!而这些使用命令却能够给我们的使用上提供很大的帮助。 1 输入*#06#:显示IMEI码 2 输入*#0000#:显示软件版本(部分型号如果不起作用,可按*#型号代码#,如*#6110#) 第一行--软件版本; 第二行--软件发布日期; 第三行--手机型号 3 输入*#92702689#查询更多的手机信息。有五个选项(可用上下方向键选择): ①Serial No.:手机的IMEI码。

MTK平台手机解锁指令

手机解锁 MTK平台手机解锁指令 sky 芯片解锁指令*#987*99# *#3424# 选最后一项重起 TI 芯片解锁指令*#*#1705# 互通726p 长按# 超级密码12344321 恢复为8888 AD 芯片解锁指令*2580# (有的需按二次*) *01763*737381# *746*737381# 5阿尔卡特83227423 25228352 ALCATEL+D ###765*05# CECT 天宇系列解锁解锁指令*746*737381#关机再开机密码取消 星玛系列解锁指令*#*#1705# mp3 解锁指令*#66*# 7850 CPU CECT系列的通用密码装卡输入*#2005#*即可*2002*#2002# 7870 cpu 绕过开机密码:*#9999# 英飞凌6850芯片解锁指令*2002*#2002# 7870 解锁指令487742263万能解锁密码 *487742263#可以揭开80%CPU为7870的手机密码*4955#可以进入CPU为7870的工程模式要选倒数第二项,密码就关了*2002*#2002#或*2005*#2005# 亿通48774226 三新防三星E808 6850cpu 解密*2002*#2002# 杂牌机6850芯片大部分通用解锁密码!*2002*#2002# cect e818解锁指令:*200307150401# 按确定等自动关机,上

卡开机等初始化完成 飞利浦S-568解锁指令*01763*737381# TI 用*789#指令解就OK! CECF16解锁不插卡开机按*#*#1705#发射键再按7确认自动关机后即可 亿通用7850CPU的指令,.解所有锁48774226 科建K529 *#*#1705# 桑达HT818*746*737381# LG C210 2945#*# 金立325 *39*737381# **2580*# 7850cpu解信息锁*2002*00#加发射键*#987*99# 泛泰PG8000 手机指令解锁*01763*737381# 华为C2281解锁指令:##258741 恒基伟业F8,F8+,F8C,F8D,F8E,F88解锁指令*929# 选格式化F8,F8+,F8C,F8D,F8E在待机模式下按OK,上,下,左,右,上,下,即可进入测试模式, 可修改听筒话筒音量,查看版本等等 恒基伟业F88,*20030811#,再按呼出键 解决MT芯片手机,打电话出现(确认网络服务) !! 进入设置到通话设置再到本机号码然后选择发送号码OK! 明基。西门子E61的SIM卡密码。直接输入72779673就解掉了手机密码同用指令。绝对OK 步步高*#2002#*#2002#

试谈mtk平台手机指令(doc 10页)

试谈mtk平台手机指令(doc 10页)

mtk平台手机指令 最新MTK工程模式(中文对照版本)和测试模式指令---XXF(天语E60) 首先说明天语E60 使用MTK平台 天语E60 内部恢复出厂设置指令:*#2898#,天语部分手机的解锁方法 *746*737381#关机再开机密码取消 关于MTK:当国产手机与洋品牌捉对厮杀之际,一个巨大的市场正在形成——这个几乎克隆了洋品牌与国产手机各自优势的手机制造行业,不但迅速地抢占了部分市场份额,同时还改变了整个手机产业链的生态,据权威研究机构称,台湾联发科技(MTK)在大陆灰色手机平台市场份额达69% 关于MTK检测指令:目前MP3&MP4手机市场上的手机基本都只换了外壳,主板和平台就那么几个配套公司做的,拿到机器,输入版本指令便可以知道是那家的主板和平台了.为了很好的使用MTK智能王,在拿到用户手机时,通过指令来鉴别手机是否是MTK平台的手机就很有必要了,以下指令只要有一项指令能符合,那么就可以鉴别该手机是MTK平台的. MTK恢复原厂初始密码:1122 35E8D2H ---- 数据(数字):*#3646633#工程模式 *#66*# 35E8E4H ---- 数据(数字):*#87# AUTO TEST 35E8EAH ---- 数据(数字):*#33778#序号 289BFCH ---- 数据(数字):*#0044#设为英文 289C44H ---- 数据(数字):*#0086#设为简体 2BA334H ---- 数据(数字):*#0886#繁体中文

3,PWM(脉宽调制) 4,EINT(未知) 5,ADC(模拟数字转换器) 6,set default level (设置预设标准) ①mainLCD contrast(主屏幕对比度) ②Batterry ( 电池) ③PWM1 ④PWM2 ⑤PWM3 7,1)Set UART(设定通用异步传输器) ①TSTconfig ②PS config ③设定USB序列埠使用方法预设值,有 1,资料2,侦错 2)UART POWER ON/OFF 8,Sleep mode ①Enable ②Disable 9,NAND Format(与非电路格式化),就是磁盘格式化,不要动,不然资料就要丢光 10,DCM mode ①Enable ②Disable 11,SWDBG ①OFF ②DSP LI ③DSP PS ④LI PS ⑤MCU ⑥MCU DSP ⑦RESET( 12,PMIC 6318 ①Reg ister R/W ②Charger Status Set Charger RGB KP LED BL LED Audio Misc Lcm bl setting 13,RTC XOSC(WO) 三,音频 1,设定模式

MTK平台指令

MTK平台 基本信息 MTK手机 设置指令:*#66*# 中文语言:*#0086# + send 查看版本:*#8375# 软件版本:*#8882# 测试:*#87# 调试:*#8899# 默认语言:*#0000#+通话键 设置英文:*#0044#+通话键 繁体中文:*#0886#+通话键 简体中文:*#0086#+通话键 串号查询:*#06# 工程指令:*#3646633# 或*#3698741# 自动测试:*#87# 软件版本:*#8882# MMT芯片的出厂密码为1122 原厂设置 ┳━━Version版本信息 ┃┣━━MCU SW微程序控制器软件 ┃┣━━Melody曲调版本 ┃┣━━Serial No.序列号 ┃┣━━BB Chip基板芯片(MT6218B,还有哪个手机用它的?) ┃┣━━DSP Code数字信号处理器代码 ┃┣━━DSP Patch 数字信号处理器修正版本号 ┃┣━━MS Board MS 板(不太清楚,不知是什么的缩写。Memory System??)┃┗━━Build No. 版本号 ┃ ┣━━Resource BIN 资源BIN(不知道该怎么翻,二进制代码吗?) ┃┣━━Audio音频 ┃┣━━Image图像 ┃┣━━STR字符串(猜的) ┃┗━━Font字体 ┃

┣━━Echo Loop循环显示(不知道翻的准不准)可以开关,但是不知道有啥用┃ ┣━━按键(原本就是中文)按确定进入可以测试键盘上的键是否好使 ┃按下相应的键,屏幕上的字符会消失,证明此键好使 ┃UP:方向键上DN:方向键下LF:方向键左RT:方向键右 ┃LSK:左软键(一点都没觉得软)RSK:有软键(还不如左软键) ┃Snd:接通键End:挂机键Vup:音量大Vdn:音量小 ┃ 1 2 3 4 5 6 7 8 9 0 * # :数字键及*# ┃测试完成后会出现Pass ┃ ┣━━Vibrator震动测试选“开”测试震动功能是否可用 ┃ ┣━━Loud Spk扬声器(我一直想说“喇叭”)测试选“开”测试扬声器是否可以发声┃ ┣━━铃声(原本就是中文)铃声测试选“开”测试铃声功能是否正常 ┃ ┣━━LED发光二极管指示灯(彩灯)测试 ┃┣━━Main LCM BL 主显示屏背光(可开关,选关会熄灭,再按一下左键可再打开) ┃┣━━Sub LCM BL子显示屏背光(可开关,但我得没什么反应,没坏吧?)┃┣━━Keypad LED键盘灯(可开关) ┃┣━━Status LED R状态灯红色 ┃┣━━Status LED G状态灯绿色 ┃┗━━Status LED B状态灯蓝色(我的三种颜色错位了) ┃ ┣━━LCD显示屏测试 ┃┣━━Auto display自动测试自动用红绿蓝白四色填充屏幕,可测出是否有坏点 ┃┣━━Red用红色填充屏幕 ┃┣━━Green用绿色填充屏幕 ┃┣━━Blue用蓝色填充屏幕 ┃┗━━White用白色填充屏幕 ┃ ┣━━LCD Contract显示屏对比度测试 ┃┣━━Main LCD主显示屏对比度,会显示一张图片 ┃┃按方向键上下可调十五级对比度,不过我怎么调都没什么变化 ┃┗━━Sub LCD子(外)显示屏对比度,可以调十五级对比度 ┃调整有变化,但是没有图片,只有文字

MTK工程模式详表

mtk手机工程模式详表 MTK工程模式祥表 MTK平台及各芯片功能简介 MTK芯片是全球排名前十名的专业IC设 计公司——台湾联发科技公司生产。它的主要特点:一是低成本,对于 竟争激烈的手机市场是最好的选择;二是芯片具有音乐和视频功能,满 足了MP3和MP4的需求;三是芯片集成度高,功能较多技术性能好,迎合了市场的需要。 MT6129 射频处理器 MT6305 电源管理芯片 存储器: ) S71PL127JB0BAW9U0 /9Z0 SPANSION VS71PL129JB0BAW9U0 /9Z0 SPANSION MTK芯片2005年占国产手机中使用率的70%,如波导D660采用MT6129平台;波导10和金立GN528采用MT6128平台;桑达Y100采用MT6205平台;康佳D180和康佳S901采用MT6219平台;康佳M929采用MT6128B平台;联想 E308和I720采用MT6127平台。 MTK平台及各芯片功能简介 杂牌手机触摸屏失效的维修方法 触摸屏无效和触摸屏错位(校准失败)的维修,触摸屏无效多为触摸屏损坏,更换即可.若换触摸屏故障依旧的,格式化字库90%可以解决.此方法 适用于MT系列芯片的机子;对于CPU为6525的部分机子可以使用. 格式化方法: 16M字库格式化最后2M,地址是E00000---1000000;8M字库 格式化最后1M.地址是700000----800000 . 注:格式化之前最好先备分,以免不必要的损失! 触摸屏错位(校准失败)多为软件故障,格式化一般无效,刷软件OK.也有 极少数是换触摸屏解决的. 曾经遇到杂牌手写机吉事达T298摔坏,换总成后使用什么都正常,就是进 入短消息阅读或者发信息是会花屏,这种情况是屏的版本不对,因为是第

MTK手机测试模式指令

MTK手机工程模式和测试模式指令 工程模式和测试模式指令 工程模式: *#3646633# 测试模式: *#66*# 老机型 US *#864322# 原厂设置 *#86428# 自动测试 *#864364# 工程模式 *#864798# 查版本 ENEV *#66*# 手动测试 *#87# 自动测试 *#3646633# 工程模式 *#8375# 查版本 *#0413*# 元件信息 *#28526*# 防盗指令密码000000 *#159# 软件测试 *#951# 初始化 *#357# 软件版本 *#753#硬件测试 *#3698741#选出厂设置, 方案配套指令TEST指令 MTK SIMCOM *#189# *#889# MTK 龙旗*#8375# 工程模式*#3646633# 一,网络号码不用介绍,看不懂,最好还是不要乱动,动了也应该没什么用 二,设备 1,LCD-主屏幕:①set contrast(设置对比度)确定后显示set param(设置参数)数字可调整 ②set biasratio(设置偏差比率) ③set line rate(设置线路速率) ④set temperature(设置温度) 2,GPIO ① 3,PWM(脉宽调制)

4,EINT(未知) 5,ADC(模拟数字转换器) 6,set default level (设置预设标准) ①mainLCD contrast(主屏幕对比度) ②Batterry ( 电池) ③PWM1 ④PWM2 ⑤PWM3 7,Set UART(设定通用异步传输器)①TST config ②PS config ③设定USB序列埠使用方法预设值,有1,资料2,侦错 8,Sleep mode ①Enable ②Disable 9,NAND Format(与非电路格式化),就是磁盘格式化,就不要动纳,不然资料就要丢光,我都格式化好几次了,以前的照片全丢了 三,音频 1,设定模式⊙正常(手机设置是正常) ⊙Loudsp mode ⊙Headset mode 2,正常①有限脉冲响应(有1-5五个可选) ②Speech (说话)进行音量调节设定,有七挡,可分别设定值 ③ken Tone (主音调)也可进行音量调节) ④Melody(旋律)调节MP3外放音量 ⑤Sound(应该是调节铃音的,不很确定) ⑥Microphone (麦克风)应该是调节麦克风音量 ⑦Side Tone ) 3,Loudsp mode(象2一样进行调节) 4,Headset mode(象2一样进行调节) 5,铃声(可浏览铃声) 6,SET ECHO Suppression(设定回波抑制) ①Energy Thresh(能量反复)确定显示16384 ②Delay (延迟) 显示0 ③Energy Thresh2 显示0 ④Delay 2(延迟) 显示0 7,Max Swing (最大振幅) 四,GPRS ACT 1,Attach 确定显示:完成,(应该是将GPRS连接上吧) 2,Activate PDP (1—15项,可选,我的已更改,请问初始值是????{ Activate的中文意思是使活动,PDP意义未知} 3Deactivate PDP { Deactivate的中文意思是使.无效,} 4Send Data (数据传输) ①send norm data(传送标准数据)

判定MTK手机是什么芯片平台型号-35页word资料

识别判定MTK手机是什么芯片平台型号的简单方式 标签Tags: 插上数据线,毗连到电脑,当电脑提醒找到硬件时,会有芯片型号提醒,装好USB驱动后,在同步软件里设置到您的手机对应芯片型号即可同步!假如还看不到下载下面的应用程序UnknownDeviceIdentifier.这是一个识别机械里未知设备的小应用程序。 关于MTK的根本常识 国产手机与洋品牌捉对厮杀之际,一个庞大的、暗影般的市场正在形成--这个几乎克隆了洋品牌与国产手机各自上风的灰色手机制造行业,不单敏捷地抢占了部门市场份额,同时还改变了整个手机财产链的生态,据权势巨子研究机构称,联发科技(MTK)在年夜陆灰色手机平台市场份额达69% 关于MTK检测指令: 今朝MP3&MP4手机市场上的手机根基都只换了外壳,主板和平台就那么几个配套公司做的,拿到机械,输进版本指令便可以知道是那家的主板

和平台了.为了很好的利用MTK智能王,在拿到用户手机时,经由过程指令来判别手机是否是MTK平台的手机就很有需要了,以下指令只要有一项指令能合适,那么就可以辨别该手机是MTK平台的。 MTK恢回复复兴厂初始暗码:1122 35E8D2H ---- 数据(数字):*#3646633#工程模式 *#66*# 35E8E4H ---- 数据(数字):*#87# AUTO TEST 35E8EAH ---- 数据(数字):*#33778#序号 289BFCH ---- 数据(数字):*#0044#设为英文 289C44H ---- 数据(数字):*#0086#设为简体 2BA334H ---- 数据(数字):*#0886#繁体中文. 以下测试指令按照分歧手机方案公司指令有所分歧: 方案配套指令 TEST指令

mtk平台手机指令

mtk平台手机指令(2008-11-11 15:16:32) 标签:杂谈 最新MTK工程模式(中文对照版本)和测试模式指令---XXF(天语E60) 首先说明天语E60 使用MTK平台 天语E60 内部恢复出厂设置指令:*#2898#,天语部分手机的解锁方法*746*737381#关机再开机密码取消 关于MTK:当国产手机与洋品牌捉对厮杀之际,一个巨大的市场正在形成——这个几乎克隆了洋品牌与国产手机各自优势的手机制造行业,不但迅速地抢占了部分市场份额,同时还改变了整个手机产业链的生态,据权威研究机构称,台湾联发科技(MTK)在大陆灰色手机平台市场份额达69% 关于MTK检测指令:目前MP3&MP4手机市场上的手机基本都只换了外壳,主板和平台就那么几个配套公司做的,拿到机器,输入版本指令便可以知道是那家的主板和平台了.为了很好的使用MTK智能王,在拿到用户手机时,通过指令来鉴别手机是否是MTK平台的手机就很有必要了,以下指令只要有一项指令能符合,那么就可以鉴别该手机是MTK平台的. MTK恢复原厂初始密码:1122 35E8D2H ---- 数据(数字):*#3646633#工程模式 *#66*# 35E8E4H ---- 数据(数字):*#87# AUTO TEST 35E8EAH ---- 数据(数字):*#33778#序号 289BFCH ---- 数据(数字):*#0044#设为英文 289C44H ---- 数据(数字):*#0086#设为简体 2BA334H ---- 数据(数字):*#0886#繁体中文 以下测试指令根据不同手机方案公司指令有所不同: 方案配套指令 TEST指令 MTK SIMCOM *#189# *#889# MTK 龙旗 *#8375# MTK手机工程模式和测试模式指令 工程模式和测试模式指令 工程模式: *#3646633# *#3656565# 测试模式: *#66*# 老机型 US

mtk手机工程模式参数设置应用

mtk手机工程模式参数设置应用--调整MP3播放音量 mtk手机工程模式下的几个应用 “MP3、MP4播放不论是用耳机还是机内喇叭,音量关到最小仍然觉得大”,解决方法如下: 打开数字键盘,输入*#3646633#进入工程模式菜单 2)选择③“音频”进入音频类型菜单; 3)选择②“正常”进入正常模式菜单; 4)选择④“Melody”;这里有音量0-6代表整个音量分7个级数,音量0代表最小音量级数,它的实际音量数值是64,难怪关不到静音,罪魁祸首就在此了 各音量级数值分别如下:音量0--64 音量1--80 音量2--96 音量3--128 音量4--160 音量5--192 音量6--224。 5)选择①“音量0”,确定进入调整。利用下方向键调整直到0;然后确定,一步一步返回,到提示“修改参数?”的时候选择“是”,然后返回退出工程模式,调整完毕。不过这样一来,音量从级数0到1的变化太大了,因此,可以根据个人喜好将各个音量级数值作适当调整,以适应人耳听力灵敏度。 一句话,不要使音量从某个级数跳到相临级数时让人感到很突然,变化很大,而应该是感到有变化但不大,能够适应。所以需将音量1-6 6个级数值重新调整,当然,如果没必要的话也就罢了。

MTK平台各芯片功能简介和手机工厂模式指令参数详解MTK指令! 设置指令:*#66*#/ 中文语言:*#0086# + send 查看版本:*#8375# 软件版本:*#8882# 测试:*#87# 调试:*#8899# 默认语言:*#0000#+通话键 设置英文:*#0044#+通话键 繁体中文:*#0886#+通话键 简体中文:*#0086#+通话键 串号查询:*#06# 原厂设置:*#66*# 查看版本:*#8375# 工厂指令:*#3646633# 自动测试:*#87# 软件版本:*#8882# *#035670766*001#

各种手机指令命令代码大全

各种手机指令命令代码大全.txt结婚就像是给自由穿件棉衣,活动起来不方便,但会很温暖。谈恋爱就像剥洋葱,总有一层让你泪流。手机内部资料:--------------------------- 国产手机 TI 平台 MTK 平台 ADI 平台展讯平台凯明平台英飞凌平台飞利浦平台摩托罗拉平台 --------------------------- 欢迎大家来顶!!! MTK平台手机指令大全 设置指令:*#66*# 中文语言:*#0086# + send 查看版本:*#8375# 软件版本:*#8882# 测试:*#87# 调试:*#8899# (?) 默认语言:*#0000#+通话键 设置英文:*#0044#+通话键 繁体中文:*#0886#+通话键 简体中文:*#0086#+通话键 串号查询:*#06# 原厂设置:*#66*# 查看版本:*#8375# 工厂指令:*#3646633# 自动测试:*#87# 软件版本:*#8882# *#035670766*001# *#035670766*002# 有一些机器开机输入*#66*#不进测试的。可以在开机瞬间,在按键灯亮和开机音乐响的时候快速按*#*#............*#就可进入测试 科达Q191(MT6228平台)有些好象不支持,可惜啊.......... 诺基亚是国际知名手机品牌,它在中国市场上一直占据着很大一部分销售份额。诺基亚手机拥有着时尚的外观和强大的功能,尤其是它出色的性能,经久耐用。是赢得很多消费者喜爱的主要原因。不少消费者在购买诺基亚手机之后,都会拿着说明书仔细阅读使用说明。然而,不管是什么牌子的手机除了说明书上的那些说明文字之外,都还有很多用户并不知晓的操作命令!而这些使用命令却能够给我们的使用上提供很大的帮助。 1 输入*#06#:显示IMEI码 2 输入*#0000#:显示软件版本 (部分型号如果不起作用,可按*#型号代码#,如*#6110#) 第一行--软件版本; 第二行--软件发布日期; 第三行--手机型号

MT6235平台MTK各种指令

MT6235平台MTK各种指令 苹果手机6235平台MTK各种指令   2009-10-20 13:58*#66*# 原厂设定 *#8375#看芯片 *#3646633#工程模式 苹果手机原厂设定模式说明指令: *#66*# 说明: ┳━━Version版本信息 ┃┣━━MCU SW微程序控制器软件 ┃┣━━Melody曲调版本 ┃┣━━Serial No.序列号 ┃┣━━BB Chip基板芯片 (MT6218B,还有哪个手机用它的?基板芯片)┃┣━━DSP Code数字信号处理器代码┃┣━━DSP Patch 数字信号处理器修正版本号 ┃┣━━MS Board MS 板主存储器 ┃┗━━Build No. 版本号

┃ ┣━━Resource BIN 资源 BIN(不知道该怎么翻,二进制代码吗?) ┃┣━━Audio音频 ┃┣━━Image图像 ┃┣━━STR字符串 ┃┗━━Font 字体 ┃ ┣━━Echo Loop循环显示(不知道翻的准不准)可以开关,但是不知道有啥用 ┃ ┣━━按键 (原本就是中文)按确定进入可以测试键盘上的键是否好使┃按下相应的键,屏幕上的字符会消失,证明此键好使┃UP:方向键上DN:方向键下 LF:方向键左RT:方向键右 ┃LSK:左软键(一点都没觉得软)RSK:有软键(还不如左软键) ┃Snd:接通键End:挂机键 Vup:音量大Vdn:音量小 ┃ 1 2 3 4 5 6 7 8 9 0 * #

:数字键及 ┃测试完成后会出现Pass ┃ ┣━━Vibrator震动测试 选“开”测试震动功能是否可用 ┃ ┣━━Loud Spk扬声器(我一直想说“喇叭 ”)测试 选“开”测试扬声器是否可以发声 ┃ ┣━━铃声(原本就是中文)铃声测试选“开”测试铃声功能是否正常 ┃ ┣━━LED 发光二极管指示灯(彩灯)测试 ┃┣━━Main LCM BL 主显示屏背光 (可开关,选关会熄灭,再按一下左键可再打开) ┃┣━━Sub LCM BL子显示屏背光 (可开关,但我得没什么反应,没坏吧?) ┃┣━━Keypad LED键盘灯(可开关) ┃┣━━Status LED R 状态灯红色

各种手机指令命令代码大全

手机内部资料:--------------------------- 国产手机TI 平台MTK 平台ADI 平台展讯平台凯明平台英飞凌平台飞利浦平台摩托罗拉平台--------------------------- 欢迎大家来顶!!! MTK平台手机指令大全 设置指令:*#66*# 中文语言:*#0086# + send 查看版本:*#8375# 软件版本:*#8882# 测试:*#87# 调试:*#8899# (?) 默认语言:*#0000#+通话键 设置英文:*#0044#+通话键 繁体中文:*#0886#+通话键 简体中文:*#0086#+通话键 串号查询:*#06# 原厂设置:*#66*# 查看版本:*#8375# 工厂指令:*#3646633# 自动测试:*#87# 软件版本:*#8882# *#035670766*001# *#035670766*002# 有一些机器开机输入*#66*#不进测试的。可以在开机瞬间,在按键灯亮和开机音乐响的时候快速按*#*#............*#就可进入测试 科达Q191(MT6228平台)有些好象不支持,可惜啊.......... 诺基亚是国际知名手机品牌,它在中国市场上一直占据着很大一部分销售份额。诺基亚手机拥有着时尚的外观和强大的功能,尤其是它出色的性能,经久耐用。是赢得很多消费者喜爱的主要原因。不少消费者在购买诺基亚手机之后,都会拿着说明书仔细阅读使用说明。然而,不管是什么牌子的手机除了说明书上的那些说明文字之外,都还有很多用户并不知晓的操作命令!而这些使用命令却能够给我们的使用上提供很大的帮助。 1 输入*#06#:显示IMEI码 2 输入*#0000#:显示软件版本(部分型号如果不起作用,可按*#型号代码#,如*#6110#) 第一行--软件版本; 第二行--软件发布日期; 第三行--手机型号

MTK手机暗码大全

国产MT6227指令设置指令: *#66*# 中文语言: *#0086# + send 查看版本: *#8375# 软件版本: *#8882# 测试: *#87# 调试: *#8899#(?) 默认语言: *#00#+通话键 设置英文: *#0044#+通话键 繁体中文: *#0886#+通话键 xx: *#0086#+通话键

串号查询: *#06# 原厂设置: *#66*# 查看版本: *#8375# 工厂指令: *## 自动测试: *#87# 软件版本: *#8882# *#6*001# *#6*002#【 有一些机器开机输入*#66*#不进测试的。可以在开机瞬间,在按键灯亮和开机音乐响的时候快速按*#*#............*#就可进入测试 从网上找的,自己测试了下,绝大多数指令在我机器上有用 还找到一个查看你MRP游戏平台版本的指令*## CPU为6850解锁指令: *2002*#2002#CPU为7850通用密码:或*2005*#2005# CECT系列7850 CPU的通用密码装卡输入*#2005#*即可

cpu为7850解信息锁*2002*00#加发射键 CPU是AD6720的解锁指令: *746*7381# CPU为6527,6528,等AD芯片解锁: 手机不装卡,开机输入*746*7381#*01763*7381#*983*7381#三个指令,百分之50可以解,针对AD6525, 6527,6528,等AD芯片MTK万能密码: *##选出厂设置~OK MTK工程指令: *#66*# MTK 指令: *##、*#8375#、*#0086#、*#87*#、*#00#加发射键手机键盘输入0205#,#既可再解八位特别码 PDA超级码:200212如科建838易美98联想G900 MT系列初始密码为1122 解锁: 快速的输入*## MT的出厂设置指令*2002*#2005#*2002*#2002# *2005*#2005#LG#*#按6 手机工程模式(针对机型,不可乱试) 首先说明天语E60使用MTK平台

Mtk手机工程模式

附:MTK手机工程模式和测试模式指令 工程模式和测试模式指令 工程模式: *#3646633# 测试模式: *#66*# 老机型 US *#864322# 原厂设置 *#86428# 自动测试 *#864364# 工程模式 *#864798# 查版本 ENEV *#66*# 手动测试 *#87# 自动测试 *#3646633# 工程模式 *#8375# 查版本 *#0413*# 元件信息 *#28526*# 防盗指令密码000000 *#159# 软件测试 *#951# 初始化 *#357# 软件版本 *#753#硬件测试 *#3698741#选出厂设置, 方案配套指令 TEST指令 MTK SIMCOM *#189# *#889# MTK 龙旗 *#8375# 工程模式*#3646633# 一,网络号码不用介绍,看不懂,最好还是不要乱动,动了也应该没什么用 二,设备 1,LCD-主屏幕:①set contrast(设置对比度)确定后显示set param(设置参数)数字可调整 ②set biasratio(设置偏差比率) ③set line rate(设置线路速率) ④set temperature(设置温度) 2,GPIO① 3,PWM(脉宽调制) 4,EINT(未知) 5,ADC(模拟数字转换器) 6,set default level (设置预设标准)①mainLCD contrast(主屏幕对比度) ②Batterry ( 电池) ③PWM1 ④PWM2

⑤PWM3 7,Set UART(设定通用异步传输器)①TSTconfig ②PS config ③设定USB序列埠使用方法预设值,有1,资料2,侦错 8,Sleep mode①Enable ②Disable 9,NAND Format(与非电路格式化),就是磁盘格式化,就不要动纳,不然资料就要丢光,我都格式化好几次了,以前的照片全丢了 三,音频 1,设定模式⊙正常(手机设置是正常) ⊙Loudsp mode ⊙Headset mode 2,正常①有限脉冲响应(有1-5五个可选) ②Speech (说话)进行音量调节设定,有七挡,可分别设定值 ③ken Tone (主音调)也可进行音量调节) ④Melody(旋律)调节MP3外放音量 ⑤Sound(应该是调节铃音的,不很确定) ⑥Microphone (麦克风)应该是调节麦克风音量 ⑦Side Tone ) 3,Loudsp mode(象2一样进行调节) 4,Headset mode(象2一样进行调节) 5,铃声(可浏览铃声) 6,SET ECHO Suppression(设定回波抑制) ①Energy Thresh(能量反复)确定显示16384 ②Delay (延迟)显示0 ③Energy Thresh2显示0 ④Delay 2(延迟)显示0 7,Max Swing (最大振幅) 四,GPRSACT 1,Attach 确定显示:完成,(应该是将GPRS连接上吧) 2,Activate PDP (1—15项,可选,我的已更改,请问初始值是????{ Activate的中文意思是使活动,PDP意义未知} 3Deactivate PDP { Deactivate的中文意思是使.无效,} 4Send Data (数据传输) ①send norm data(传送标准数据) ②send RLC (意义未知)data 5PING(应该是"分组网间搜索器")①send norm data(传送标准数据) ②send RLC (意义未知)data 五,频宽选取,这没什么好说的 六,MISC(杂项)1,Auto Answer(自动应答)预设为关,可开启,本人未曾试过2,High speed SIM(高速用户识别卡)可开闭,预设为闭 3PWRDuration(能量持续时间),确定后显示如下: 10/0212:53:48可能是最后开机时间 [Current time ]当前时间

MTK手机指令大全

MTK手机指令大全 *#66*# *#3646633# *#36*# *#65289*# *#8560968# *#82043036# 有一些机器开机输入*#66*#不进测试的。可以在开机瞬间,在按键灯亮和开机音乐响的时候 快速按*#*#............*#就可进入测试 下面几个是国产机常用的工程模式指令,大家可以参考一下!注意有的是无卡状态输入的. 特别提示:对于一些指令可能会使手机进入一些未知的状态,在这种情况下,心中无底的话, 最好不要冒险继续操作. *888*888# *2580*# *888*888# **1234#**80#* *#237546# **0106# *#9960# *983*0# *#0324# *888*888# #*80# *528*0# *#*#1705 *#369# *789再长按# *#301#01 *#123321#* *#301 2945#*# *#*#1705#

MT6225齐乐D600手机可用*#4853*# 天基168.芯片是MTK6225 #6803#. 仿苹果ciphone工程模式*#83646633#;*#83656565# 埃利特仿苹果机*#83646633# *#23642*# 联想288/300输入2945#*进入测试模式 SIMCOM *#189# *#889# 龙旗 *#8375# 中天ZTA606 无卡开机时不停按*#*#*#…进工程模式 仿三星F480 *#65*# 仿三星W699 工程模式: *#66*# 原厂设定 *#8375#看芯片 *#3646633#工程模式 *#220807#mpr 联想I909(MT6228) ####72728439# 进入工程模式。 仿苹果Siphone芯片MTK6225 I68+小S 查看版本:*#8375# 工程模式:*#82043036# MT6226 ####777##.奇怪的是手机没有牌子!

MTK上位机通过串口发送指令操作手机

/*测试的时候是在idleapp.c中测试的,在函数IdleSetLRKey中通过SetKeyHandler(start_uart_echo, KEY_LEFT_ARROW,KEY_EVENT_UP);来启动串口,然后就可以在上位机中通过串口调试助手发送指令操作MTK手机了*/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "stdC.h" #include "MMI_Features.h" /* 编译开关会出现在这个由make update生成的文件里面*/ #include "L4Dr.h" #include "L4Dr1.h" #include "AllAppGprot.h" #include "FrameworkStruct.h" #include "GlobalConstants.h" #include "EventsGprot.h" #include "mmiappfnptrs.h" #include "HistoryGprot.h" #include "MainMenuDef.h" #include "wgui_categories.h" #include "Unicodexdcl.h" #include "gui_data_types.h" #include "Uart_sw.h" #include "SettingProfile.h" // 我们要用到的串口, uart_port1是枚举型数值,usb串口的编号 #define HELLO_WORLD_UART_PORT uart_port1 // 手机接USB下载线的地方 // 定义我们的应用所属系统的哪一个模块 // 这里是MMI模块,实际上我更愿意称MMI为一个子系统,将我们的应用称为模块 #define MOD_HELLO_WORLD MOD_MMI // 数据接收Buffer大小 #define MAX_ECHO_PACKET_LEN 128 // 外部函数申明,没有对应头文件,手动加吧 extern module_type UART_GetOwnerID(UART_PORT port); extern void UART_ClrTxBuffer(UART_PORT port, module_type ownerid); extern void UART_ClrRxBuffer(UART_PORT port, module_type ownerid); extern void playRequestedTone(ALL_TONE_ENUM playtone); // 本程序内部使用的函数申明 static void init_uart(void); static void mmi_HelloWorld_uart_readyToRead_ind_handler(void *msg); static U16 read_from_uart(U8 *pbyBuf, U16 wLenMax, UART_PORT hPort, module_type hOwner); static U8 write_to_uart(U8 *pbyBuf, U16 wLenBuf, UART_PORT hPort, module_type hOwner); static void exit_uart();

MTK手机暗码大全

国产MT6227指令 设置指令:*#66*# 中文语言:*#0086# + send 查看版本:*#8375# 软件版本:*#8882# 测试:*#87# 调试:*#8899# (?) 默认语言:*#0000#+通话键 设置英文:*#0044#+通话键 繁体中文:*#0886#+通话键 简体中文:*#0086#+通话键 串号查询:*#06# 原厂设置:*#66*# 查看版本:*#8375# 工厂指令:*#3646633# 自动测试:*#87# 软件版本:*#8882# *#035670766*001# *#035670766*002#【 有一些机器开机输入*#66*#不进测试的。可以在开机瞬间,在按键灯亮和开机音乐响的时候快速按*#*#............*#就可进入测试 从网上找的,自己测试了下,绝大多数指令在我机器上有用 还找到一个查看你MRP游戏平台版本的指令*#777755999# CPU为6850解锁指令:*2002*#2002#CPU为7850 通用密码:48774226 或*2005*#2005# CECT系列7850 CPU 的通用密码装卡输入*#2005#*即可 cpu为7850解信息锁*2002*00#加发射键 CPU是AD6720的解锁指令: *746*737381# CPU为6527,6528,等AD芯片解锁:手机不装卡,开机输入*746*737381# *01763*737381# *983*737381#三个指令,百分之50可以解,针对AD6525, 6527,6528,等AD芯片MTK万能密码:*#3698741# 选出厂设置~OK MTK工程指令:*#66*# MTK 指令: *#3646633# 、*#8375#、*#0086#、*#87*# 、*#0000#加发射键 手机键盘输入0205#,0205068#既可再解八位特别码 PDA超级码:200212 如科建838 易美98 联想G900 MT系列初始密码为1122 解锁:快速的输入*#3646633# MT的出厂设置指令*2002*#2005# *2002*#2002# *2005*#2005# LG762 2945#*#按6 手机工程模式(针对机型,不可乱试)

MTK手机指令大全

MTK 指令表 设置指令:*#66*# 中文语言:*#0086# + send *#0413*# 元件信息 查看版本:*#8375# 软件版本:*#8882# 测试:*#87# 调试:*#8899# (?) 默认语言:*#0000#+通话键 设置英文:*#0044#+通话键 繁体中文:*#0886#+通话键 简体中文:*#0086#+通话键 串号查询:*#06# 原厂设置:*#66*# 查看硬件版本:*#8375# 查看LCD驱动版本:*#8376# 工厂指令:*#3646633# 自动测试:*#87# 软件版本:*#8882# *#035670766*001# *#035670766*002# 有一些机器开机输入*#66*#不进测试的。可以在开机瞬间,在按键灯亮和开机音乐响的时候快速按*#*#............*#就可进入测试 *#99001# 进入黑匣子软件BUG功能, *#0413*# 元件信息 *#6162*# 是查看内存指令 在待机界面输入“ *#3646633# ”,选择“音频”,在这个菜单依次会看到正常、LoudSp Mode、Headset Mode等。 当前先以“正常”为例。 speech——通话听筒声音大小调整; Melody——音量0~音量6,铃声大小调节;16 level setting,mp3大小调整

(注:MP3 共16个等级,其中,MAX为最高等级;STEP为相邻两个等级之间的音量差值;在melody下的音量0~6对应情景模式音量大小,16 level setting对应mp3声音大小) FM radio——调频广播大小调整; micophone——通话mic大小的调整(即通话时,听到的对方声音大小的调整) 其余一般不会用到。 以上是正常模式,其他如:免提,耳机均可按此方法调整。在所有项均调整好后,逐一按返回键退出(请注意:此时不要直接按挂机键,这样将无法保存调整过的数值),待出现提示“修改参数?”选择“是”。 进入工程模式的方法: 待机界面下按如下键: *#03646633# 进入后菜单显示 网络号码 设备 音频 GPRS Act 频宽选择 Misc Auto Test List PWR Down Control SW PATHC SELECT Debug Info Socket Test Bluetooth 各个命令如下: 网络号码(下面的命令我也弄不清楚,建议不要乱调) RR Cell Sel RR Ch Dscr RR Ctrl Chan RR RACH Ctrl RR LAI Info RR Radio Link RR Meas Rep CC Chan Info CC Call Info CB Info LCD主屏幕 Set Contrast Set Bias Ratio---斜比率

相关主题
文本预览
相关文档 最新文档