SDK架构介绍
1. SDK目录¶
SDK 源程序在开发包proj目录下。
编译时,会在proj目录下新建build目录,\proj\build\316d_32_128_msw\out目录下存放有编译产生的.c,.o,.lib,.map,.axf等等文件。
图 1‑1 proj目录
编译的源码基本上都在proj\sc目录下。
图 1‑2 sc目录
2. SDK目录详情¶
-
\ahc(AIT Host Commands)
-
\ahc\src
SDK共用的函数集
-
-
\application
-
\core(Kernel code of SDK)
-
\core\application
SDK库的应用层接口
-
\core\application\component\src
SDK组件
-
\core\lib\sdk_lib
SDK库集
-
-
Customer
-
\customer\product\common\mak
common_option.mak
compiler_option.mak
lib_paths_i_sw_infinity.mak
paths.mak
-
-
Driver
-
\driver\drv\sensordriver\src
Sensor驱动
-
-
libSourceInc
-
\LibSourceInc\wifi
WIFI驱动
-
-
Middleware
-
project
-
\project\Dvr_CarDV_SDK\cfg
SDK配置集
-
\project\Dvr_CarDV_SDK\cfg\comp
SDK组件配置
-
\project\Dvr_CarDV_SDK\cfg\core
SDK库配置
-
\project\Dvr_CarDV_SDK\cfg\net
SDK网络配置
-
\project\Dvr_CarDV_SDK\cfg\sdk
SDK项目配置
AHC_Config_SDK.h
Config_SDK_EVB_C_TV_Decoder.h
MenuConfig_SDK.h
-
\project\Dvr_CarDV_SDK\cfg\SF
SPI Flash参数配置
-
\project\Dvr_CarDV_SDK\cfg\snr
Sensor参数配置
-
-
-
\project\Dvr_CarDV_SDK\Draw
SDK UI
-
\project\Dvr_CarDV_SDK\Menu
SDK菜单
-
\project\Dvr_CarDV_SDK\OSDIcon
Icon文件
-
\project\Dvr_CarDV_SDK\OSDString
字符串文件
-
\project\Dvr_CarDV_SDK\sd_updater
通过SD卡升级固件
-
\project\Dvr_CarDV_SDK\tools\DownloadTool_M5
SDK Boot: mercury5_ipl.bin
SDK Kernel: 316d_32_128_msw.bin
菜单设置: \FactRes\defset.txt
Wifi设置: \FactRes\defnetconf.txt
固件生成工具DownloadTool.exe
-
\project\Dvr_CarDV_SDK\tools\GUI_Tool
uC-GUI-BitmapConvert.exe
-
\project\Dvr_CarDV_SDK\UI
GUI框架源码
-
System
-
vendor
-
\vendor\gps
GPS源码
-
\vendor\gsensor
Gsensor源码
-
\vendor\panel
LCD驱动
-
\vendor\speech
语音识别
-
3. 函数命名规则¶
-
AHC_xxx (AIT host control) 接口或文件名
GUI 根据case来切换不同的State,而这些State将调用AHC_xxx接口来实现所有功能。
StateSwitchMode()
图 3‑1 UI State
-
MMPS_xxx (Multi-media processor system) 接口或文件名
接口级,驱动函数(FW Function)简单控制流。
-
MMPD_xxx (Multi-media processor device) 接口或文件名
通常被设计为访问底层函数或FW寄存器,我们不希望GUI框架直接访问它们。原因之一是它会干扰底层函数状态机。
4. SDK流程¶
4.1. 启动流程¶
图 1‑1 SDK 启动流程
4.2. 按键检测¶
图 1‑2 Video模式下按键检测
4.3. 数据流¶
-
Bayer Sensor + TV Rear Cam
图 1‑3 Bayer Sensor和TV Cam的数据流
-
Bayer Sensor + TV Rear Cam(Rotate)
图 1‑4 Bayer Sensor和TV Cam的数据流2
5. UI框架¶
5.1. UI任务(AHC_Main_Task)¶
-
使用uc/GUI来设计UI
-
通过case来切换state,每一个state将处理图形显示、音频、设备信息和事件触发器
-
软件或硬件的中断将通过事件(Event)来触发
图 2‑1 UI Task
5.2. 用户界面框图¶
图 2‑2 用户界面框图
5.3. 消息队列¶
-
配置
#define AHC_MSG_QUEUE_SIZE (0xC0) #define AHC_HP_MSG_QUEUE_SIZE (0x10)
-
接口函数
AHC_BOOL AHC_SendAHLMessageEnable(AHC_BOOL Enable); AHC_BOOL AHC_SendAHLMessage(UINT32 ulMsgID, UINT32 ulParam1, UINT32 ulParam2); AHC_BOOL AHC_SendAHLMessage_HP(UINT32 ulMsgID, UINT32 ulParam1, UINT32 ulParam2); AHC_BOOL AHC_GetAHLMessage(UINT32* ulMsgID, UINT32* ulParam1, UINT32* ulParam2); AHC_BOOL AHC_GetAHLMessage_HP(UINT32* ulMsgID, UINT32* ulParam1, UINT32* ulParam2);
图 2‑3 消息队列
5.4. 状态机¶
图 2‑4 状态机
5.5. 菜单树构建¶
-
菜单文件
MenuStateXXXMenu.c(h)
MenuDrawingXXXFunc.c(h)
-
相关函数
TopMenuEventHandler ()
MainMenuEventHandler()
SubMenuEventHandler()
QuickMenuMenuEventHandler()
QuickMenuSubMenuEventHandler()
-
菜单树
TopMenu / MainMenu / SubMenu / QuickMenu ...
图 2‑5 菜单
-
相关定义
图 2‑6 菜单定义
图 2‑7 菜单定义2