官网地址:https://www.fengke.club/GeekMart/views/mall/goodsDetails.html?productId%3D33
配套书籍:https://www.fengke.club/GeekMart/views/mall/goodsDetails.html?productId%3D73
配套视频:http://www.fengke.club/GeekMart/su_fihsGbMhu.jsp
淘宝地址:http://shop115904315.taobao.com/
QQ群:457586268
第一个程序
首先,建立 source insight工程(使用方法,请自己查阅资料)。然后在CMD命令行窗口切换到工程源码根目录,执行make FengKe2502C_11C GPRS new 生成二进制bin文件,然后再执行make -debug FengKe2502C_11C GPRS gen_modis 生称 VS2008 工程文件。再用 VS2008 打开MoDIS_VC9\ MoDIS.sln 文件,编译生称模拟器。模拟器运行界面如下图:
图中红色字符标注了几个常用的按键值,在后面的编码过程中会经常提到。其中KEY_LSK叫确认键,KEY_RSK叫返回键。KEY_SEND 系统默认用于拨号按键,KEY_END称之为退出按键,在任何界面都可以返回idle界面。idle界面也叫待机界面,即上图中看到的界面。
按键功能注册每一个按键在不同的屏幕中都有不同的功能,这些功能都可以自己定义。常见的按键定义函数有如下几个:
1、 void SetKeyHandler (FuncPtr funcPtr,U16 keyCode,U16 keyType)
funcPtr : 按键执行的功能函数指针。
keyCode: 按键值。取值范围见GlobalConstants.h文件中的枚举mmi_keypads_enum
keyType: 按键方式,取值范围见GlobalConstants.h 文件中的枚举mmi_key_types_enum
比如:SetKeyHandler (mmi_scr_locker_launch, KEY_RSK, KEY_EVENT_UP); 含义为按住KEY_RSK(右软键),弹起的时候执行mmi_scr_locker_launch 函数。如果KEY_EVENT_UP 改为KEY_EVENT_DOWN,则表示按下KEY_RSK 键立即执行mmi_scr_locker_launch 函数。
SetKeyHandler实际上是对mmi_frm_set_key_handler 的封装,另外还有一些按键注册函数,比如SetKeyDownHandler(注册按下事件)、SetKeyUpHandler(注册弹起事件) 都是对mmi_frm_set_key_handler 函数的封装,最终执行按键注册都会在mmi_frm_set_key_handler 函数中进行。
2、 void SetLeftSoftkeyFunction(void (*f) (void), MMI_key_event_type k)
f:按键执行的功能函数指针。
k:按键方式,取值范围见GlobalConstants.h 文件中的枚举mmi_key_types_enum
这个函数只能用于注册左软键按键功能,实际上等同于SetKeyHandler (FuncPtr funcPtr, KEY_LSK, U16 keyType)。另外还有一个专用于注册右软键功能的函数——SetRightSoftkeyFunction。已经一个注册KEY_CSK的函数——SetCenterSoftkeyFunction。
3、 void SetGroupKeyHandler(FuncPtr funcPtr, PU16 keyCodes, U8 len, U16 keyType)
funcPtr : 按键执行的功能函数指针。
keyCodes:按键值数组。取值范围见GlobalConstants.h文件中的枚举mmi_keypads_enum
keyType: 按键方式,取值范围见GlobalConstants.h 文件中的枚举mmi_key_types_enum
这个函数用于注册多个按键执行同一个函数时使用,比如在idle界面按0~9 个数字时,都会进入拨号界面。这个函数使用的比较少,在穿戴设备开发中,基本不会用到。
接下来,我们在代码中实现按键注册功能。在 souce insight 工程中打开IdleCommon.c 文件,在mmi_idle_set_handler 函数函数上面添加一个我们自己的函数,函数名为mmi_my_mtk_func,简单实现一个显示“hello MTK !”字符的功能,代码如下:
然后在mmi_idle_set_handler 函数的最后一行添加代码,注册 KEY_LSK 按键的弹起功能执行函数mmi_my_mtk_func。
运行模拟器,鼠标单击 左软键(KEY_LSK,位置如图红色框中),是否发现屏幕上显示有“hello MTK!”
这是一个很简单的函数,代码中都有详细的注释。MTK的编码规范完全遵循C语言的编码规范,本书的读者也必须有一定的C 语言基础。下面简单介绍几个MTK的函数接口。
1、 gui_set_text_color
设置字符显示的颜色。可以调用系统定义的一些颜色常量,比如UI_COLOR_RED、UI_COLOR_BLACK等。也可以使用gui_color(U8 r, U8 g, U8 b)自己生成,比如gui_color(255,0,0)为红色。
2、 gui_move_text_cursor
设置字符显示的坐标。屏幕上有一个坐标系,以左上角为原点(0,0),右下角坐标为屏幕尺寸(LCD_WIDTH, LCD_HEIGHT)。宽为X轴,高为Y轴。
3、 gui_set_font
设置字符打印的字体。MTK 的字体跟字库有关,此处我们不讲解斜体、下划线等特效,只讲解字体大小。系统中定义有一些字体全局变量,常用的有MMI_small_font、MMI_medium_font、MMI_large_font。
4、 gui_print_text
在屏幕上显示字符。是否发现字符常量"Hello MTK !"前面有一个大写的L?因为MTK的手机屏幕上能够显示的所有字符,不管是英文、中文还是日文,都必须是UCS2编码,而L的作用就是把字符常量强制转换成UCS2编码。特别注意,L只能转换字符常量,不能转换变量。有兴趣的读者可以试一下不加L打印出来的效果。
5、 gui_BLT_double_buffer
屏幕上显示的内容只要有变更,都必须调用这个函数刷新屏幕,否则看不到任何效果。屏幕中的四个参数为要刷新的矩形区域,这个矩形区域必须包含你绘画的内容,此处为全屏刷新。当然也可以不使用全屏刷新,此函数中字符显示的坐标为(100,150),假设字符串的宽度为50,高度为20,则改gui_BLT_double_buffer(100, 150, 100+50, 15+20) 也是同样的效果。有兴趣的读者可以改为gui_BLT_double_buffer(0, 0, 50,50),试试看能否显示出"Hello MTK !"。
特别说明:
定义屏幕宽度的常量或全局变量有:UI_DEVICE_WIDTH、LCD_WIDTH、UI_device_width
定义屏幕高度的常量或全局变量有:UI_DEVICE_HEIGHT、LCD_HEIGHT、UI_device_height