2.4.3. 翻页器
Note
本APP基于HID开发,主要用于浏览当下火爆的抖音等小视频的上下翻页、左右菜单切换、暂停等操作。首先选择需要用到的应用本案例选择,然后进行对应的支持板级选择,具体参考下文的步骤。通过软件编译下载到对应的开发板,打开手机蓝牙进行连接,进入视频浏览界面操作对应按键即可。
2.4.3.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 0//自拍器, #define CONFIG_APP_MOUSE_SINGLE 0//单模切换 需搭配CONFIG_BOARD_AW313A_MOUSE板级 #define CONFIG_APP_KEYPAGE 1//翻页器 #define CONFIG_APP_REMOTE_CONTROL 0//遥控器,需搭配CONFIG_BOARD_AW31A_RC板级 #define CONFIG_APP_IDLE 0//IDLE
打开ADKEY(apps/demo/hid/board/bd47/board aw31n demo cfg.h)
//*********************************************************************************//
// adkey 配置 //
//*********************************************************************************//
#define AD_KEY_IO IO_PORTA_08 // 可用的IO见adc_ch_io_table
#define KEY_AD_EN ENABLE //<AD按键使能
2.4.3.2. 主要代码说明
static void keypage_key_operate(key_op op) { switch (op) { case KEY_UP: if (REMOTE_IS_IOS()) { keypage_send_packect((uint8_t *)key_up_before, sizeof(key_up_before), REPROT_INFO_LEN0); } else { keypage_send_packect((uint8_t *)key_up_click, sizeof(key_up_click), REPROT_INFO_LEN1); } break; case KEY_DOWN: if (REMOTE_IS_IOS()) { keypage_send_packect((uint8_t *)key_down_before, sizeof(key_down_before), REPROT_INFO_LEN0); } else { keypage_send_packect((uint8_t *)key_down_click, sizeof(key_down_click), REPROT_INFO_LEN1); } break; case KEY_LEFT: if (REMOTE_IS_IOS()) { keypage_send_packect((uint8_t *)key_left_before, sizeof(key_left_before), REPROT_INFO_LEN0); } else { keypage_send_packect((uint8_t *)key_left_click, sizeof(key_left_click), REPROT_INFO_LEN1); } break; case KEY_RIGHT: if (REMOTE_IS_IOS()) { keypage_send_packect((uint8_t *)key_right_before, sizeof(key_right_before), REPROT_INFO_LEN0); } else { keypage_send_packect((uint8_t *)key_right_click, sizeof(key_right_click), REPROT_INFO_LEN1); } break; case KEY_PP_PRESS: if (REMOTE_IS_IOS()) { keypage_send_packect((uint8_t *)key_pp_release_before, sizeof(key_pp_release_before), REPROT_INFO_LEN0); keypage_connect_reset_xy(NULL); } else { keypage_send_packect((uint8_t *)key_pp_press, sizeof(key_pp_press), REPROT_INFO_LEN1); keypage_send_packect((uint8_t *)key_pp_release, sizeof(key_pp_release), REPROT_INFO_LEN1); } break; case KEY_ONE_PRESS: if (REMOTE_IS_IOS()) { keypage_send_packect((uint8_t *)key_one_press_before, sizeof(key_one_press_before), REPROT_INFO_LEN0); keypage_send_packect((uint8_t *)key_one_release_before, sizeof(key_one_release_before), REPROT_INFO_LEN0); } else { keypage_send_packect((uint8_t *)key_one_press, sizeof(key_one_press), REPROT_INFO_LEN1); keypage_send_packect((uint8_t *)key_one_release, sizeof(key_one_release), REPROT_INFO_LEN1); } break; default: log_info("Error key op!"); break; } } /*************************************************************************************************/ /*! * \brief 按键事件处理 * * \param [in] * * \return * * \note */ /*************************************************************************************************/ static void keypage_app_key_deal_test(uint8_t key_type, uint8_t key_value) { uint16_t key_msg = 0; log_info("app_key_evnet: %d,%d\n", key_type, key_value); #if TCFG_LED_ENABLE led_operate(LED_KEY_UP); #endif if (key_type == KEY_EVENT_CLICK) { switch (key_value) { case 0: keypage_key_operate(KEY_UP); break; case 1: keypage_key_operate(KEY_DOWN); break; case 2: keypage_key_operate(KEY_LEFT); break; case 3: keypage_key_operate(KEY_RIGHT); break; case 4: keypage_key_operate(KEY_PP_PRESS); break; case 5: keypage_key_operate(KEY_ONE_PRESS); break; default: break; } } ..... }
Note
keypage_key_operate()函数主要是对按键操作的处理,根据不同的按键操作,发送不同的数据包。 keypage_app_key_deal_test()函数主要是对按键事件的处理,根据不同的按键事件,调用不同的按键操作函数。
增加处理公共消息
跟据识别不同的手机系统,来切换描述符(app_keypage.c)。
static int keypage_common_event_handler(struct device_event *bt) { log_info("----%s reason %x %x", __FUNCTION__, bt->event, bt->value); switch (bt->event) { case COMMON_EVENT_BLE_REMOTE_TYPE: log_info(" COMMON_EVENT_BLE_REMOTE_TYPE,%d \n", bt->value); keypage_remote_type = bt->value; if (keypage_remote_type == REMOTE_DEV_IOS) { le_hogp_set_ReportMap((uint8_t *)keypage_report_map_ios, sizeof(keypage_report_map_ios)); } else { le_hogp_set_ReportMap((uint8_t *)keypage_report_map, sizeof(keypage_report_map)); } break; case COMMON_EVENT_SHUTDOWN_DISABLE: keypage_auto_shutdown_disable(); break; default: break; } return 0; }
2.4.3.3. case默认应用资源(默认使用AW31N DEMO开发板)
Note
demo默认占用外设资源如下,具体可以查看board_aw31n_demo_cfg.h
I/O口占用情况
PA口 I/O
默认占用情况
PA3
默认打印UART0引脚
PA8
adkey检测引脚
PA9
LED控制引脚
硬件定时器占用情况
定时器
默认占用情况
TIMER0
暂无使用
TIMER1
暂无使用
TIMER2
暂无使用
TIMER3
暂无使用
串口占用情况
串口
默认占用情况
UART0
SDK打印
UART1
暂无使用
UART2
暂无使用
2.4.3.4. case默认应用功能现象
(默认使用AW31N DEMO开发板 LED-PA9 ADKEY-PA8)
操作
现象结果
连接,使用手机后 台进行绑定操作,name为AW31N_HID
能够成功绑定连接
连接后 打开抖音等短视频竖屏app,K1单击
下滑
K2单击
上滑
K3单击
左滑
K4单击
右滑
K5单击
暂停和播放
k5双击
点赞
LED现象
ble未连接闪亮
LED现象
ble连上后灭
LED现象
连接过程长亮
LED现象
按键点亮
电量检测
低电提示,低 电关机,低电10s后将打开低电提醒 ,灯快速闪烁,60s后将进入软关机