Mtk功能机,项目编译与宏控制
2018-11-05 本文已影响0人
Guoke24
流程简介
- 声明一个开关
- 检测到开关,定义宏
- 宏控制着代码的引入编译
声明一个开关
- 文件:EC618AE_ENG_GPRS.mak (make)
- 代码:
POS_XXX_APP = TRUE
- 代码逻辑:打开开关: POS_XXX_APP
检测到开关,定义宏
第一个宏
- 文件:Option_HAL.mak (make)
- 代码:
ifdef POS_XXX_APP
ifeq ($(strip $(POS_XXX_APP)),TRUE)
COM_DEFS += __POS_XXX_APP__
endif
endif
代码逻辑:如果打开了开关:POS_XXX_APP ,定义宏:
__POS_XXX_APP__
第二个宏
- 文件:MMI_features.h (plutommi\mmi\inc)
- 代码:
// 第一处,定义加MMI前缀的宏
#if defined(__POS_XXX_APP__)
#ifndef __MMI_POS_XXX_APP__
#define __MMI_POS_XXX_APP__
#endif
#endif
- 代码逻辑:定义加上 MMI 前缀的宏:
__MMI_POS_XXX_APP__
到此,宏定义完成,接着是用宏控制代码的引入编译
以 TOPQRPAY 这个应用为例,定义的宏为:
__MMI_POS_TOPQRPAY_APP__
头文件和源码文件的引入编译:
- Mmi_app.mak (make\plutommi\mmi_app)
- 代码:
ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
SRC_LIST += plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayMain.c \
plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayScrnInquiry.c \
。。。。。。
plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayNfcSearch.c
endif
ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
INC_DIR += plutommi\mmi\TopQRPay\TopQRPayInc
endif
ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
SRC_PATH += plutommi\mmi\TopQRPay\TopQRPaySrc
endif
- 代码逻辑:如果发现开关:MMI_POS_TOPQRPAY_APP ,就引入 TopQRPay 项目的头文件和源码文件
资源文件的引入:
- 文件:Mmi_pluto_res_range_def.h (plutommi\mmi\inc)
- 代码:
#ifdef __MMI_POS_TOPQRPAY_APP__
MMI_RES_DECLARE(APP_ID_TOPQRPAY, 400, ".\\MMI\\TopQRPay\\TopQRPayRes\\")
#define TOPQRPAY_BASE ((U16) GET_RESOURCE_BASE(APP_ID_TOPQRPAY))
#define TOPQRPAY_BASE_MAX ((U16) GET_RESOURCE_MAX(APP_ID_TOPQRPAY))
#endif
- 代码逻辑:如果发现开关:MMI_POS_TOPQRPAY_APP ,就引入 TopQRPay 项目的资源文件
- 并且声明 APP_ID_TOPQRPAY 指向 TopQRPay 项目的资源文件
- 声明两个宏:TOPQRPAY_BASE ,TOPQRPAY_BASE_MAX 表示 APP_ID_TOPQRPAY 的基本值和最大基本值
资源文件的id声明
- 文件:TopQRPayRes.res( plutommi\mmi\TopPandaPay\TopPandaPayRes ) // 资源文件的本体
- 文件:TopQRPayRes.c (plutommi\customer\resgenerator\temp\res) // 编译时生成的临时文件,代码跟本体一样
- 代码:
#include "mmi_features.h"
#include "custresdef.h"
/* Need this line to tell parser that XML start, must after all #include. */
<?xml version="1.0" encoding="UTF-8"?>
<APP id="APP_ID_TOPQRPAY">
<INCLUDE file="mmi_rp_app_mainmenu_def.h"/>
<INCLUDE file="GlobalResDef.h,SettingResDef.h,GlobalMenuItems.h"/>
<INCLUDE file="Mmi_rp_all_defs.h"/>
<STRING id="TOPQRPAY_STR_ID_XIAOFEI"/>
<STRING id="TOPQRPAY_STR_ID_XIANJIN"/>
。。。。。。
<SCREEN id="SCREEN_ID_TOPQRPAY_MAINMENU"/>
<SCREEN id="SCREEN_ID_CONSUME_MAIN"/>
。。。。。。
<TIMER id="TIMER_LOGIN_TIMEROUT_ID"/>
。。。。。。
<IMAGE id="IMAGE_ID_TOPQRPAY_UNIONPAY_ICON">CUST_IMG_PATH"\\\\MainLCD\\\\TopQRPay\\\\union_icon.png"</IMAGE>
<IMAGE id="IMAGE_ID_TOPQRPAY_MAINMENU_BG">CUST_IMG_PATH"\\\\MainLCD\\\\TopQRPay\\\\topqrpay_mainmenu_bg.jpg"</IMAGE>
。。。。。。
<AUDIO id="AUD_ID_AMOUNT_NUM_0" flag="MULTIBIN">CUST_ADO_PATH"\\\\Amount\\\\tts_0.mp3"</AUDIO>
<AUDIO id="AUD_ID_AMOUNT_NUM_1" flag="MULTIBIN">CUST_ADO_PATH"\\\\Amount\\\\tts_1.mp3"</AUDIO>
。。。。。。
<CACHEDATA type="short" id="NVRAM_SAOMA_DATASIZE" restore_flag="TRUE">
<DEFAULT_VALUE> [0x00, 0x00] </DEFAULT_VALUE>
</CACHEDATA>
。。。。。。
<MENU id="MENU_ID_LOGIN_TIME_SETTING_MENU" type="APP_SUB" str="TOPQRPAY_STR_ID_LOGIN_TIMEOUT">
<MENUITEM_ID>TOPQRPAY_MENU_ID_LOGIN_SETTING_2_MIN</MENUITEM_ID>
。。。。。。
</MENU>
<MENUITEM id="TOPQRPAY_MENU_ID_LOGIN_SETTING_2_MIN" str="TOPQRPAY_STR_ID_SLK_2_MIN"/>
。。。。。。
<RECEIVER id="EVT_ID_GPIO_LCD_SLEEP_OUT" proc="topqrpay_mmi_lcd_sleep_out_handler"/>
</APP>
- 代码逻辑:定义了字符串,屏幕,TIMER,IMAGE,AUDIO,MENU,
RECEIVER等的id
然后就是在.h和.c文件中,用宏控制代码段是否引入编译