2.4.2. 自拍杆
Note
本案例主要用于蓝牙自拍器实现,进行以下配置后,打开手机蓝牙连接设备可进行对应的拍照操作。
2.4.2.1. 自拍杆case使用
先配置板级(apps/demo/hid/board/bd47/board_config.h)
#ifndef BOARD_CONFIG_H #define BOARD_CONFIG_H #define CONFIG_BOARD_AW31N_DEMO #include "board_aw31n_demo_cfg.h" #endif
配置app选择:在工程代码中找到对应的文件(apps/demo/hid/include/app_config.h)进行APP选择
//app case 选择,只选1,要配置对应的board_config.h #define CONFIG_APP_KEYBOARD 0//hid按键 ,default case #define CONFIG_APP_KEYFOB 1//自拍器, #define CONFIG_APP_MOUSE_SINGLE 0//单模切换 需搭配CONFIG_BOARD_AW313A_MOUSE板级 #define CONFIG_APP_KEYPAGE 0//翻页器 #define CONFIG_APP_REMOTE_CONTROL 0//遥控器,需搭配CONFIG_BOARD_AW31A_RC板级 #define CONFIG_APP_IDLE 0//IDLE
需要打开iokey配置(apps/demo/hid/board/bd47/board aw31n demo cfg.h)
//*********************************************************************************// // iokey 配置 // //*********************************************************************************// #define KEY_IO_EN ENABLE //<IO按键使能 #define MOUSE_KEY_SCAN_MODE DISABLE_THIS_MOUDLE #define TCFG_IOKEY_POWER_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO #define TCFG_IOKEY_POWER_ONE_PORT IO_PORTA_00 //IO按键端口 #define TCFG_IOKEY_POWER_ONE_PORT_VALUE 0x0 //power port键值 #define TCFG_IOKEY_PREV_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO #define TCFG_IOKEY_PREV_ONE_PORT IO_PORTA_01 #define TCFG_IOKEY_PREV_ONE_PORT_VALUE 0x1 //prev port键值
开发者可以操作板子IO key1、IO key2实现蓝牙自拍器的功能。
2.4.2.2. 主要代码说明
数据发送:
KEYFOB 属于 HID 设备范畴,数据的定义与发送要根据 HID 设备描述符的内容进行确定,由下 图的描述符可知,该描述符是一个用户自定义描述符,可以组合实现各种需要的功能,一共有两个 Input 实体描述符。其中每个功能按键对应一个 bit,一共 11bit,剩余一个 13bit 的常数输入实体,所以 自定义描述符的数据包长度位 3byte.如果用户需要在自拍器的基础上增加不同按键类型的事件,可 以在下面的描述符中先添加该功能,然后在按键处理函数分支进行对应的按键值和按键类型的设置, 来实现对应的功能。
用户自定义的描述符组成本案例的 KEYFOB 描述符,实现对应的按键功能(app_keyfob.c)。
static const u8 keyfob_report_map[] = { //通用按键 0x05, 0x0C, // Usage Page (Consumer) 0x09, 0x01, // Usage (Consumer Control) 0xA1, 0x01, // Collection (Application) 0x85, 0x03, // Report ID (3) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x0B, // Report Count (11) 0x0A, 0x23, 0x02, // Usage (AC Home) 0x0A, 0x21, 0x02, // Usage (AC Search) 0x0A, 0xB1, 0x01, // Usage (AL Screen Saver) 0x09, 0xB8, // Usage (Eject) 0x09, 0xB6, // Usage (Scan Previous Track) 0x09, 0xCD, // Usage (Play/Pause) 0x09, 0xB5, // Usage (Scan Next Track) 0x09, 0xE2, // Usage (Mute) 0x09, 0xEA, // Usage (Volume Decrement) 0x09, 0xE9, // Usage (Volume Increment) 0x09, 0x30, // Usage (Power) 0x0A, 0xAE, 0x01, // Usage (AL Keyboard Layout) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x01, // Report Count (1) 0x75, 0x0D, // Report Size (13) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection // 119 bytes };
下列即发送模块,发送的数据是按照上面的 HID 设备描述符 格式进行发送的(app_keyfob.c)。
/*************************************************************************************************/ /*! * \brief 按键发送数据 * * \param [in] key_value:按键值 mode: 按键类型 * * \return * * \note */ /*************************************************************************************************/ static void keyfob_send_value(uint8_t key_value, u8 mode) { if (key_value == KEY_BIG_ID) { if (mode == KEYFOB_CLICK || mode == KEYFOB_CLICK_HOLD) { ble_hid_data_send(KEYFOB_REPORT_ID, (uint8_t *)keyfob_big_press, sizeof(keyfob_big_press)); } if (mode == KEYFOB_CLICK || mode == KEYFOB_CLICK_UP) { ble_hid_data_send(KEYFOB_REPORT_ID, (uint8_t *)keyfob_big_null, sizeof(keyfob_big_null)); } } else if (key_value == KEY_SMALL_ID) { if (mode == KEYFOB_CLICK || mode == KEYFOB_CLICK_HOLD) { ble_hid_data_send(KEYFOB_REPORT_ID, (uint8_t *)keyfob_small_press, sizeof(keyfob_small_press)); } if (mode == KEYFOB_CLICK || mode == KEYFOB_CLICK_UP) { ble_hid_data_send(KEYFOB_REPORT_ID, (uint8_t *)keyfob_small_null, sizeof(keyfob_small_null)); } } }
2.4.2.3. case默认应用资源(默认使用AW31N DEMO开发板)
Note
demo默认占用外设资源如下,具体可以查看board_aw31n_demo_cfg.h
I/O口占用情况
PA口 I/O
默认占用情况
PA0
IOKEY1
PA1
IOKEY2
PA3
默认打印UART0引脚
PA8
adkey检测引脚
PA9
LED控制引脚
硬件定时器占用情况
定时器
默认占用情况
TIMER0
暂无使用
TIMER1
暂无使用
TIMER2
暂无使用
TIMER3
暂无使用
串口占用情况
串口
默认占用情况
UART0
SDK打印
UART1
暂无使用
UART2
暂无使用
2.4.2.4. case默认应用功能现象
(默认使用AW31N DEMO开发板 LED-PA9 IOKEY1-PA0 IOKEY2-PA1)
操作
现象结果
连接,使用手机后 台进行绑定操作,name为AW31N_HID
能够成功绑定连接
连接后打开摄像头,K1单击
拍照1
k1三击
软关机,进入软 关机后任意IO按键从软关机唤醒设备
连接后打开摄像头,K1长按
连拍
连接后打开摄像头,K2单击
拍照2
LED现象
ble未连接闪亮
LED现象
ble连上后灭
LED现象
连接过程长亮
LED现象
按键点亮
电量检测
低电提示,低 电关机,低电10s后将打开低电提醒 ,灯快速闪烁,60s后将进入软关机