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