3. TRANSFER DEMO说明

3.1. 工程介绍

  • 通用TRANSFER工程,做蓝牙主机或蓝牙从机,,使用领域:蓝牙多连接(支持蓝牙主从机)、2.4g连接收发(支持蓝牙主从机)

3.2. 配置使用

  • 以下的DEMO的配置与说明均使用CodeBlocks进行演示。

3.2.1. 打开工程

  • 按照 :SDK工程编译与下载 中“SDK工程说明”下载官方SDK。

  • 通过 :开发准备说明 中的“型号介绍”知道自己手中的芯片是哪个型号(比方说我手上的是AW31系列,对应即是BD47的板级)。

  • 去到 AW31N_sdk_release_v1.0.0/apps/demo/transfer/board/bd47 目录下,双击AW31N_transfer.cbp打开工程。

3.3. TRANSFER应用运行流程介绍

以 TRANSFER case为例,TRANSFER的代码结构如下,同时参考启动流程了解: :SDK启动流程

Note

以下只是为演示代码流程,开发者不用去修改代码。以下示例是用默认CONFIG_APP_LE_TRANS例子进行说明,其他例子流程参考如下流程理解。

  • APP 注册运行:打开app_main.c,里面的app_main()函数即做app的注册和运行

    #if CONFIG_APP_LE_TRANS
    it.name = "le_trans";
    it.action = ACTION_LE_TRANS_MAIN;
    
    #elif CONFIG_APP_NONCONN_24G
       it.name = "nonconn_24g";
       it.action = ACTION_NOCONN_24G_MAIN;
    
    #elif CONFIG_APP_MULTI
       it.name = "multi_conn";
       it.action = ACTION_MULTI_MAIN;
    
  • 首先会在 app_main.c 函数中添加 hid_key 应用分支,然后进行应用注册

    REGISTER_APPLICATION(app_le_trans) = {
    .name     = "le_trans",
    .action   = ACTION_LE_TRANS_MAIN,
    .ops      = &app_le_trans_ops,
    .state  = APP_STA_DESTROY,
    };
    
  • 按照上述代码进行APP注册,执行配置好的app。之后进入APP_state_machine(app_keyboard.c文件里),根据状态机的不同状态执行不同的分支,第一次执行时进入APP_STA_CREATE分支后再进入APP_STA_START分支,执行对应的app_start()。开始执行app_start()在该函数内进行时钟初始化,进行蓝牙模式选择,等一些初始化操作。

    static const struct application_operation app_le_trans_ops = {
    .state_machine  = le_trans_state_machine,
    .event_handler    = le_trans_event_handler,
    };
    
  • le_trans应用注册以后,进行以上的进行处理。分为两个模块le_trans_state_machine和le_trans_event_handler。

  • 执行流程大致如下,对应函数位于app_le_trans.c文件:le_trans_state_machine()-app_start()。主要根据应用的状态进行时钟初始化,蓝牙名设置,读取配置信息。

  • le_trans_state_machine(struct application *app, struct sys_event *event)-le_trans_key_event_handler(sys_event *event)

  • 事件处理流程大致如上所示。hidkey_event_handler()根据传入的第二个参数事件类型,选择对应的处理分支,此处选择执行按键事件,然后调用按键事件处理函数根据事件的按键值和按键类型进行对应的事件处理。

简易示意图如下:

3.4. 选择case应用