MTK
Aaron-Liu
老老实实做人,踏踏实实做事。
展开
-
MTK MMI event 小结 5
昨天说了一下key event 的基本情况,今天直接从代码开始吧先看执行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; // 判断参数是否为原创 2013-03-11 22:03:36 · 543 阅读 · 0 评论 -
MTK HISTROY 小结 3
在上两偏里,主要讲了进入一个app是需要用到的一个函数 EntryNewScreen,今天就说一下主动退出一个应用需要使用的函数 GoBackHistory,这个函数的作用就是退出当前app,回到上一个app。 在 GoBackHistory 这个函数里,没有什么内容,主要是 一个执行一个函数 ExecutePopHistory(),还有就是设置了 mmi_is_orderly_exit_scre原创 2013-03-11 22:03:51 · 468 阅读 · 0 评论 -
MTK MMI event 小结 4
这三天一直没有更新blog,打破了一天一篇的规律。周六日加了两天,再加上一天的通宵,实在有些累。不过再怎么说,感觉是给自己找借口,原来计划是不管多忙,都要更新。以后不会发生了,除非客观原因,比如没网,没电等等。今天就饥饿着总结MMI event,今天打算说说key event。MTK 的 key envent 管理其实跟 MTK MMI event 小结 2 说的protocol event 机制原创 2013-03-11 22:03:34 · 519 阅读 · 0 评论 -
MTK 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_fr原创 2013-03-11 22:03:32 · 470 阅读 · 0 评论 -
MTK task 小结 1
MTK 的 基本执行单元是task,从操作系统的角度来理解,task 有些像线程而不是进程,进程之间的地址空间是相互隔离的,说白点就是进程之间的全局变量是不相互干扰的,而线程之间则是用同一个地址空间,MTK 的task 之间的地址空间也是共同的,也就是在MTK 编程里,定义了一个全局变量,那么在任何一个task里面都能引用,(这里举个例子,在实际编程过程中最好不要用全局变量,实在没有办法避开,那么原创 2013-03-11 22:03:19 · 502 阅读 · 0 评论 -
MTK 内存管理简单总结 4
MTK的ASM一套内存管理机制,也就是当共享内存不足时,可以要求后台应有释放共享内存,从而来保证应用的正常运行。这套机制的实现在AppMemMgr.c里面,下面具体分析一下。1 mmi_frm_appmem_prompt_to_release_mem,当调用 applib_mem_ap_alloc 分配共享内存失败时,调用该函数,弹出“内存不足(out of memory)”提示框,让用户选择想要原创 2013-03-11 22:03:09 · 562 阅读 · 0 评论 -
MTK 内存管理简单总结 3
昨天说到了内存的分配。下面看一下内存释放主要进行了3步:static void applib_mem_ap_free_int(void *mem_ptr) { /*----------------------------------------------------------------*/ /* Local Variables原创 2013-03-11 22:03:07 · 464 阅读 · 0 评论 -
MTK 内存管理简单总结 2
在 MTK 内存管理简单总结 中,大体说了MTK的三种内存分配方式,对于第三种,也就是app buffer,是比较丰富的一种。在 MTK 平台中也有许多具体的实现。在代码里搜索一下 kal_adm_create 就可以发现有许多地方使用了。看一个比较典型的使用:在文件app_mem.c里,有两个memory pool,一个是用于应用之间共享内存,另一个是用于屏幕内存。第一种内存,主要是用于各种应原创 2013-03-11 22:03:05 · 469 阅读 · 0 评论 -
MTK 内存管理简单总结1
MTK 手机用的操作系统是 nucleus, 这是一个rtfs(实时操作系统),这个rtfs本身是不带内存管理功能,所以MTK自己写的内存管理。(nucleus在系统初始化完毕时,会调用Application_Initialize,参数就是可使用内存的起始地址)大体上来分,MTK内存可以分为3种:control buffer 平常使用的OslMalloc就是这个内存。 这个内存内部实现是按块来划分原创 2013-03-11 22:03:03 · 573 阅读 · 0 评论 -
makefile高级用法--make 的运行
make 的运行 —————— 一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。本章节就是讲述如何使用make命令的。 一、make的退出码 make命令执行后有三个退出码: 0 —— 表原创 2013-03-11 22:04:08 · 652 阅读 · 0 评论 -
MTK timer 小结 1
MTK timer 有很多种,从最低层的KAL(kernel adpat layer)到MMI,都有timer的身影。先来看一下KAL的timerKAL timer 是非常底层的timer, 它的实现是直接封装MTK的RTOS(nuleus)的timer,实现方式是由HISR,从而这种timer具有很高的优先级,也就是说,当这个timer 超时时,就会触发一个HISR(高级中断 High Leve原创 2013-03-11 22:03:11 · 515 阅读 · 0 评论 -
MTK平台 获取本机的SIM卡中IMSI号
公司MTK平台做开发,老板要求在MTK的代码上获得本机上SIM卡的手机号码,查了很多资料后,结果是无法获得,原因是手机号码不是直接存储在SIM卡的,而是信号通过移动商(移动、联通或电信)时绑定的;IMSI是sim卡的一个属性号,在移动系统中是跟sim卡号绑定的,开户之后跟手机号绑定,开户的过程就是将你的IMSI和手机号发给交换机HLR,这样子来电话的时候交换机就可以找到你了。 退而求其次原创 2013-03-11 22:04:35 · 1387 阅读 · 0 评论 -
makefile高级用法--使用函数
使用函数————在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $( )或是 ${ }这里,就是函数名,make支持的函数不多。是函数的参数,参数间以逗号“,”分隔原创 2013-03-11 22:04:10 · 835 阅读 · 0 评论 -
MTK HISTORY 小结 5
到这里其实主要history 机制主要得功能都基本ok了,其他的好多接口函数都是换汤不换药,主要就是删除history stack 里面的记录,怎么回调需要被删除的screen 的call back,具体就不说了。GoBacknHistory 返回到前n个screen id,这个函数有时候还是比较有用,比如当写一个公用模块,处理完毕后,直接返回到调用的地方,这样就不用在意到底是哪个模块调用的,要回原创 2013-03-11 22:03:55 · 480 阅读 · 0 评论 -
MTK MMI event 小结 9
到这里 pen event 其实也就差不多了,说一下几个常用的函数:mmi_pen_enable /mmi_pen_disable //打开/关闭 pen 事件mmi_pen_set_calibration_data / mmi_pen_read_calibration_data //设置和读取校准数据,校准数据总共四个值 x = x*x_scale + x_offset, y = y*y_s原创 2013-03-11 22:03:44 · 606 阅读 · 0 评论 -
MTK task 小结 2
今天忽然想到一个配置文件,跟task 有些关系,在实际过程中可能会用到。文件是custom_config.c ,里面有些配置函数,用来配置系统信息,其中最常用的是改变MMI task stack的大小。当集成一些库的时候,用的stack 可能比较大,这时候就需要修改task的大小,函数custom_config_task_stack_sizekal_uint32 custom_config_tas原创 2013-03-11 22:03:30 · 485 阅读 · 0 评论 -
MTK task 小结 2
在 MTK task 小结 2 中 大概描述了下 MMI task 的工作方式:从外部队列获取消息放入内部消息队列,内部消息队列根据消息类型注册的回调函数,进行调用(event 机制,这个又是MMI framework的主要部分之一)。在MTK上,用户(开发人员)可以根据需要,创建task。创建一个task 分为 4 步:1 增加一个task index 到 custom_task_indx_t原创 2013-03-11 22:03:22 · 484 阅读 · 0 评论 -
MTK timer 小结 4
昨天说到回调函数 L4CallBackTimer。static void L4CallBackTimer(void *p) { // 在evshed_set_event 第三个参数中传得 timer noder // 这里转换这个指针 mmi_frm_timer_type *pTimer = (mmi_frm_timer_type *)p; // 得到timer i原创 2013-03-11 22:03:17 · 497 阅读 · 0 评论 -
MTK timer 小结 3
在 MTK timer 小结 2 说道最常用的MMI timer 实现机制的初始化过程。今天继续忘下说,下面要说的是创建一个timer。MMI 层,启动一个timer,最终都会调用到 L4StartTimer 这个函数。具体来分析一下这个函数// 参数 nTimerId 是要自己定义一个timer id,在 timerEvents.h 里的 MMI_TIMER_IDS 定义,用来区分timer原创 2013-03-11 22:03:15 · 622 阅读 · 0 评论 -
MTK 编译命令简介
new:功能:全新开始构建整个工程的ARM版,包括图片、声音、字符串等资源都要重做。在构建工程过程中,清除所有的目标文件,库文件,日志文件等。New指令还会自动创建必要的目录、移除临时文件和中间脚本、更新日志文件。过程简要说明:new->cleanall->sysgen->ckscatter->mmi_feature_check->asngen->codegen->asnregen->operat原创 2013-03-11 22:02:23 · 662 阅读 · 0 评论 -
makefile高级用法--使用函数2
三、文件名操作函数下面我们要介绍的函数主要是处理文件名的。每个函数的参数字符串都会被当做一个或是一系列的文件名来对待。$(dir ) 名称:取目录函数——dir。 功能:从文件名序列中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前的部分。如果没有反斜杠,那么返回“./”。 返回:返回文件名序列的目录部分。 示例: $(dir src/foo.c hacks)返回值是原创 2013-03-11 22:04:12 · 628 阅读 · 0 评论 -
MTK Screen Histroy机制
初涉mtk平台,遇到一个奇怪的问题,假如有这样一段代码:void EntryFristScreen(){ EntryNewScreen(SCR_ID_1,NULL, EntryFristScreen, NULL);//第三个参数newEntryHandler不为空 guiBuffer = GetCurrGuiBuffer_r(SCR_ID_1); ........//为了更好的说明原创 2013-03-11 22:02:48 · 601 阅读 · 0 评论 -
mtk mmi 常用
MTK笔记L4是MMI/AT和协议栈的适配层。ATCI是AT命令解析器。UEM是用于抽象如键盘、LED、通用输入/输出等基本设备,是用户设备模块。PHB就是电话本。SMU是安全管理单元(SIM、STK)。CSM是呼叫服务管理。RAC是登记访问控制。SMSAL是SMS应用层。内核服务包括定时器、任务管理和进程间通信、资源和内存管理、日志和异常处理。OSL是封装OS API的层,而KAL则是封装内核的原创 2013-03-11 22:02:25 · 1628 阅读 · 0 评论 -
MTK开机流程-MMI部分(VC模拟器)
MTK开机流程-MMI部分(VC模拟器)基于53平台09A版本,通过VC模拟器调试,整理出一条大概的MMI开机流程,后续完善。- Hardward boot and setup system statck etc.- Nucleus Plus RTOS initialization- Hardware initialization- Tasks/Modules initialization/con原创 2013-03-11 22:04:20 · 991 阅读 · 0 评论 -
makefile高级用法--使用变量
使用变量————在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方。其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应原创 2013-03-11 22:04:14 · 1389 阅读 · 0 评论 -
MTK socket 小结 2
今天主要讲一下MTK socket 基本接口。MTK socket 主要是基于 Berkeley sockets,用起来也就大同小异。MTK socket 主要有三种模式:block(阻塞),non-block(非阻塞),Asynchronous(异步),组合方式 也只有三种 1 block ,2 non-block,3 non-block + Asynchronous。block模式下,调用相应原创 2013-03-11 22:03:59 · 1075 阅读 · 0 评论 -
MTK HISTROY 小结 2
在 MTK HISTROY 小结 2 介绍了下,当进入一个新的app的时候,MTK 的history 机制 都干了些什么。1 先把当前app屏幕信息保存到历史history stack 里面2 回调当前app设置的退出函数,告知app已经被退出3 清理按键和触摸屏event 和 相应的处理函数。这里需要注意的是对END KEY 进行了特殊处理。4 设置当前active app 为新app。说明一原创 2013-03-11 22:03:49 · 521 阅读 · 0 评论 -
MTK MMI event 小结 8
在 MTK MMI event 小结 7 中,说到,init 时候, 注册了触摸屏消息MSG_ID_TP_EVENT_IND 的处理函数 mmi_pen_touch_panel_event_ind,static void mmi_pen_touch_panel_event_ind(void *param ) { // 这个用于控制 只有一个 MSG_ID_TP_EVENT_IND 在 消原创 2013-03-11 22:03:42 · 528 阅读 · 0 评论 -
MTK MMI event 小结 7
到这,key event 的处理基本上就算完成了。其他几个常用的函数注册key 处理函数了。了解了按键event的处理过程之后(其实也是比较简单的),注册函数就很好了解了,就是把相应key 和 event 的数组里放入一个回调函数的指针。比如void SetKeyHandler(FuncPtr funcPtr, U16 keyCode, U16 keyType) 抛开其他语句,就是一句简单的实现c原创 2013-03-11 22:03:40 · 560 阅读 · 0 评论 -
MTK timer 小结 2
在 MTK timer 小结 1 提到了两种timer,KAL timer 和 stack timer, 这两种timer 在平时用的比较少,在驱动开发,或者时间要求特别精确的情况下,使用 KAL timer, 一般在task要管理一组timer,用 stack timer 加上 event scheduler,后者就是今天要介绍的第三种timer。event scheduler 处理的timer原创 2013-03-11 22:03:13 · 589 阅读 · 0 评论 -
MTK task 小结 3
在 MTK task 小结 3 中写到创建一个MTK task,没有写完,今天把剩下的写完。下面需要介绍 创建task 信息的函数。kal_bool task_test_create(comptask_handler_struct **handle) { static const comptask_handler_struct task_test_handler_info = {原创 2013-03-11 22:03:24 · 579 阅读 · 0 评论 -
MTK socket 小结 4
上次说到Demo的socket 链接,先看HTTP请求。当然要理解这个,得知道一个HTTP请求是什么样子的和HTTP协议的交互过程。要详细了解 可以看 RFC 标准文档。简单来说,HTTP 协议是请求应答模式,客户端发一个请求,服务器短发一个答复。客户端说:要xxx网页,服务器就把xxx网页返回给你。交互就需要一个规范,这个就是请求和应答的头,比如 请求的第一行: GET /index.html原创 2013-03-11 22:04:03 · 604 阅读 · 0 评论 -
MTK socket 小结 3
昨天说了下socket基本几个函数,还有常用的是域名解析函数。// 通过域名获得ip地址 // is_blocking,是否阻塞,现在只支持none block,也最好用none block // mod_id 如果没有立即获得,那么当查询成完毕,将向该mod 发送消息 // request_id 区分不同的DNS 查询结果。比如在同时查询两个以上,在返回的消息中,就可以通过id来进行区分,这个结原创 2013-03-11 22:04:01 · 529 阅读 · 0 评论 -
MTK socket 小结 1
移动互联网也炒了好几年了,现在开发手机也好,单独做应用也好,都会涉及到网络这一块。MTK 提供了网络功能,在GPRS上封装了socket 功能。MTK 上的socket 其实与linux 上的有些相似,其实说到socket 编程,只要封装实现了socket,那么基本上就要实现socket那些接口。先来简单的介绍一下socket,socket 编程是介于 传输层 和 应用层之间,可以简单的理解为so原创 2013-03-11 22:03:57 · 837 阅读 · 0 评论 -
MTK HISTORY 小结 5
还是继续 MTK 的 history 机制吧,主要的执行过程已近些完了。说白里,历史记录就是一个栈,先进后出,当然,严格的按照栈的特性,不够灵活,可能会从一个屏幕跳转到特殊的屏幕,这样就需要特殊接口。先把 GoBackHistory 说完,还有一个函数 decrement。static U8 decrement(void) { // 这个变量是用于判断是否要停止删除 U8 is_s原创 2013-03-11 22:03:53 · 468 阅读 · 0 评论 -
MTK HISTORY 小结 1
MTK 的屏幕历史记录 history 机制也是开发中肯定要遇到的。简单的讲就是应用(界面)切换时,由一个正常的循序。比如A->B->C,那么最长见返回顺序就是C->B->A,这里的ABC可以是应用也可以是应用里的界面,也就是说,当在 某个屏幕按返回键时,能正常地返回到上一界面。从应用开发的角度来讲,应用完全可以自己实现一套机制,让应用自己界面切换顺序正常。但是如果应用之间的切换,那么就需要使用M原创 2013-03-11 22:03:47 · 508 阅读 · 0 评论 -
MTK MMI event 小结 6
在 MTK MMI event 小结 5 中,提到了event 处理函数 mmi_frm_key_handle,这个函数主要作用是判断是否需要处理按键,从按键缓存里面持续的读取按键信息,然后调用 mmi_frm_convert_process_key_event 进行处理。这个函数没有什么可说的,最多是在屏幕旋转的情况下,把 导航键 转换一下,接着它调用了 ProcessKeyEvent, 这个函原创 2013-03-11 22:03:38 · 508 阅读 · 0 评论 -
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原创 2013-03-11 22:03:28 · 512 阅读 · 0 评论 -
MTK task 小结 4
今天继续昨天的,说一下task之间的消息发送。task 之间发送消息,第一是要添加一个消息 id,在custom_sap.h里面,/* Add customization message id here */ MSG_ID_CUSTOM1_CUSTOM2 = CUSTOM_MSG_CODE_BEGIN, MSG_ID_CUSTOM2_CUSTOM1, MSG_ID_MSG_TEST, //添原创 2013-03-11 22:03:26 · 454 阅读 · 0 评论 -
解析手机号码格式
1.1.1 号码组成MDN号码为本网移动用户作被叫时,主叫用户所需拨的号码。采取E.164编码方式;存储在HLR和VLR中,在MAP接口上传送。DN号码的结构如下: CC + MAC + H0 H1 H2 H3 + ABCD其中:CC:是国家码,中国使用86。MAC:是移动接入码,本网采用网号方案,为133。H0H1H2H3:HLR识别码,由联通总部统一分配。ABCD:移动用户号,由各原创 2013-03-11 22:04:37 · 4141 阅读 · 1 评论