找回密码
 注册
关于网站域名变更的通知
查看: 246|回复: 2
打印 上一主题 下一主题

AT32 HOGP开发指南

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-10-20 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Terran 于 2022-10-20 10:02 编辑 4 ]) a, S) b$ Z

- J+ x+ T7 t* s8 n9 j% @AT32 HOGP开发指南0 @1 }) w7 G; E

/ S  h9 \/ o5 V' ]前言4 z( D) o. ?5 J6 J$ h
人机接口设备(Human InteRFace Devices, HID)的主要目的是基于USB实现者论坛所维护的规格书,提供用户与计算器之间的接口。HID涵盖了显示器、键盘、网络摄影机和鼠标甚至到VR耳机、游戏手把和触控屏幕的各种装置。HID传统上通过USB接口连接到计算器,然而,HID设备也可以通过使用无线技术与计算器连接。通过使用HID规范,可以开发出符合通用标准的计算器外设,从而与大多数装置兼容。( a- O6 Q9 y3 J5 t0 B4 h/ E
支持型号 列表:
- U8 U* \7 q% r. V0 X2 d0 FAT32WB4159 t4 S# M" V; ]/ D
! E* d, J, s8 p( N. F2 a" {
1 HOGP概述: R# N' s. ?- k! |, Q
HOGP(HID over GATT)是由Bluetooth SIG维护的蓝牙配置文件规范,通过低功耗蓝牙实现HID的配置文件并作为与计算器之间的接口,消除HID中对电线或物理连接的需求。6 X5 x+ H8 m  Q  Y. h8 X
& r9 d  M7 I1 }8 ~5 i% ]
1.1 HID 角色7 M8 f: ~  R8 U
在HID 中,以及在 HOGP 的延伸中,定义了两个角色,这些角色是 HID 主机和 HID 设备。 HID 设备/ K. N) Z7 q9 c, T9 T0 D# v
一次只能主动连接到单个 HID 主机;然而一个 HID 主机可以连接到多个 HID 设备。有关主机和设备% L/ b" z: \/ V5 `% K/ }
如何交互的细节,请参阅 HOGP 规范 中的第 3 章 HID 设备需求和第 4 章 HID 主机需求和行为。4 a1 ?; @' D( R. t
( A9 m; I6 L) R
1.2 HID 主机
+ l8 p7 O# y$ d# d$ pHID主机实现蓝牙 GAP 中的中心 ( 角色,接收输入讯息并使用提供的数据进行更进一步的处
' e/ C% B4 H& s! n2 {理。例如,计算器会是 HID 主机,因为这是接收 HID 数据的设备。 HID 主机对 HID 功能的正确执行
5 d: f/ ]. x: b: z; d9 O8 b8 r有许多责任与需求,但在此开发指南中所提供的范例仅实现了 HID 设备,因此本文檔不涉及这些内% A7 j4 a9 e. W/ g
容。想要了解 HID 主机的职责和需求,请参阅 HOGP 规范中的第 2 章配置、第 4 章 HID 主机需求和
7 g. u. }+ h/ x行为、第 5 章连线建立。
/ c6 M1 Z/ V2 y$ f
; G. n/ b+ ^* ?' F1 A0 L1.3 HID 设备6 v5 T4 n7 B* M4 M1 w( V/ g% x7 S* I
HID设备实现蓝牙 GAP 中的外设 ( 角色,负责将输入信息传输到中央计算器。例如,鼠标
% h. K' N$ v, Z$ c4 S5 }# F* X' X或键盘会是 HID 设备,因为它们将输入数据发送到计算器设备。
) `: a# R/ f& c8 L* X% J
4 q$ O0 |  N% N6 U: P9 |( `% |# f, `4 B
2 例 蓝牙键盘实做
' `& ~  o  M/ SHOGP工程是一个在 AT32WB415 上实现 HOGP 规范的低功耗蓝牙工程,该工程使用 HOGP 规范 指
% |6 G" a* P% n' r1 e定的 蓝牙 外设角色,演示了 HOGP 的键盘。通过使用通知 ( 和 GATT 配置文件,该项目能* H6 @+ r% r$ ^/ @' `3 w2 [8 L
够通过低功耗蓝牙 HID 装置并与 HID 主机正确连接。 HOGP 工程中有几个复杂的部份,在本文档中
$ F9 b7 C* U6 q8 W进行了讨论,这些部份组合在一起以实现整体功能。
" i  L* z& Y: B( R3 K
: R% ?9 a( Y" m: t; O2.1 报告映射讨论' u& i0 U& {8 e
HOGP工程依赖于报告映像,报告映射是 HOGP 用于实现低功耗蓝牙 HID 功能的结构。报告映像用2 {* E8 e- K, U0 ^; o3 I
于告诉主机许要从 HID 设备获得什么功能和什么样的数据,在原始的 HID USB 规范中,报告映射称( D* R  E/ A2 K8 o
为报告描述符,报告映射和报告描述符是相同的,它们之间唯一的区别是报告映射用于 HOGP, 报告
: D4 d) G5 T2 z描述符用于 HID USB 。
7 k% b8 q0 C- [& H* H该工程使用的报告映像可以在
" D! o# q. ?9 I  E  O7 b" p' S( D' Gapp_hid.c 文件中找到,并且包含在 gHIDReportDescriptor 变量中,此7 {% P0 ~: g7 Z1 X
工程中的报告映像包含键盘的输入信息。该结构分为多个部份,应用程序以及 HID 主机能够通过使用5 R0 h. _: T) B/ ]% W+ i, K
报告 ID 字段找到所需的部份。可以轻松修改报告映像以包含不同的输入或修改已经存在的输入,+ t+ [% b1 l9 J  h7 B. z
USB 实现者论坛的设备工作组有一个报告描述符建构器工具,可以用于轻松创建报告映射。 图 3 显- K, Z2 m1 |( @( ~6 i! }, F
示了报告映像结构的片段,所有字段都有标签,可以轻松修改。例如,如果需要不同数量的键盘按
% q1 _, A% Z$ p7 s% y键,则可以轻松修改相关字段。" o6 r7 Q0 Y* E: I% B
' U7 P  k- t. I7 O& X" I; h- k' q
2.2 资源准备. N. p) o" O0 a0 e4 |( I
1) 硬件环境:
, J+ w7 f- l( K: b3 w) n# ?对应产品型号的AT-START BOARD/ {6 ]& ~' x7 T# m) y
2) 软件环境
1 I7 k" {  B' ?" D( e8 v/ \* ]. dwb415_hogp_bt_demo\projects\ble_app_remote
) b) F3 f2 f/ C; @7 q5 Y6 T9 R6 x+ W' Xwb415_hogp_mcu_demo\utilities\wb415_hogp_mcu_demo\mdk_v5
" P4 H6 p8 r1 z5 J5 O! c2 A' Y  [  Z# ?/ r4 p' ^
2.3 软件设计1 U* ], [4 \  g# M  a: }+ O* Z" P
1) 配置流程9 Q' a" \* U0 M( V/ S
a) MCU端( J1 a6 h: s0 [; S; U% g
 配置USER KEY作为击键
  r% M( u& N+ o3 m 编写USART3通讯函数$ C6 u2 w) G) w: b7 b
 轮询USER KEY是否按下
4 }2 u! F1 u% L9 @/ l0 d  K" h  T1 ` 根据需求去配置USER KEY按下后发出的AT command
. g0 E( t" \0 A; nb) BT端3 t8 z8 E4 C$ D
 将HOGP的Profile加入database
1 s8 b; t' t# n* E1 M4 z" L 编写应用层与GATT之间的界面& b) N  H. b, Q5 {' ~
 在应用层中轮询AT command4 X. [3 M; T2 W2 U. S
 透过HOGP将不同的key function发给host端# \' n3 _' P* f1 H% T
2) 代码介绍
" U% L; _: v4 X8 o$ J6 c MCU端
2 z, ]! E  H' b! s main函数代码描述
* E& Z) [0 c! o& K% g2 J8 e7 c
  • int main(void)
  • {
  • gpio_init_type gpio_init_struct;
  • #ifdef BT_FLASH_WR_TEST
  • uint8_t data;
  • #endif
  • /* 配置系统时钟 */
  • system_clock_config();
  • /* 初始化开发板资源 */
  • at32_board_init();
  • /* 初始化USER Key */
  • at32_button_init();
  • ....4 x- d/ x6 y3 ~3 G

/ H, n# y% V; y4 P  L BT端
. {/ Q5 c# _4 _- s9 {原则上不需要去修改Profile层的内容,由APP层去设定HID装置的内容即可
* [8 X, r/ ]& H! h: p 初始化HOGP装置变量
) Y: ]; a' q5 |) {7 d) ?8 m+ w
  • void app_hid_init(void)
  • {
  • // Reset the environment
  • memset(&app_hid_env, 0, sizeof(app_hid_env));
  • app_hid_env.state = APP_HID_IDLE;
  • app_hid_set_send_flag(true);
  • }; H! z8 y3 a8 ~3 r5 C( Y) H

4 U' S* T4 U: Z: n6 B! e 将HOGP加入database
/ P' c! J8 z, U7 |
  • void app_hid_add_hids(void)
  • {
  • struct hogpd_db_cfg *db_cfg;
  • // Prepare the HOGPD_CREATE_DB_REQ message
  • struct gapm_profile_task_add_cmd *req = KE_MSG_ALLOC_DYN(GAPM_PROFILE_TASK_ADD_CMD,
  • TASK_GAPM, TASK_APP,
  • gapm_profile_task_add_cmd, sizeof(struct hogpd_db_cfg));
  • // Fill message
  • req->operation = GAPM_PROFILE_TASK_ADD;
  • req->sec_lvl = 0;
  • req->prf_task_id = TASK_ID_HOGPD;
  • req->app_task = TASK_APP;
  • req->start_hdl = 0;
  • ....2 B( J4 @: Q5 e2 N3 ]

! A- H1 s* \! q( O+ B: f在main函数之中的while loop不断轮询app_user_entry()来确认有无收到AT command,如果收到有收到AT command则执行该命令的内容。
; c/ r) k& T, M. x( _% b 解析AT command并执行对应的程序
1 m& r0 T; F* P* i+ H- F+ P
  • void app_user_entry(void)
  • {
  • uint8_t without_prefix_len;
  • // GPIO_int_enable();
  • if (ke_state_get(TASK_APP) == APPM_READY)
  • {
  • UART_PRINTF("start advertising\r\n");
  • appm_start_advertising();
  • }
  • ....
    ' d5 S% [# s: ^" `

. Z+ d& u& u% V: O2.4 实验效果
2 C4 L7 f, c5 I0 Z) }8 [  [ 按下AT-START板上的USER KEY发送www back按键,则浏览器页面返回上一页8 d6 w7 y# Q' _/ s
 按下AT-START板上的USER KEY发送volume up按键,则音量提高(需要修改AT command)
( f% E. H3 ]7 x( I4 G* k! M 按下AT-START板上的USER KEY发送volume down按键,则音量降低(需要修改AT command)/ B6 k. F( m% D2 K- A5 j. m
. o3 L2 t4 O- p4 N: g6 d4 x; X1 g
2.5 按键定义
9 y6 F! n! Q. k7 w+ a) ?8 M本应用指南以多媒体按键为例,在代码中定义了多媒体按键值的数组,用户可以在app_key.c 中找到以下代码:' c. r# k. _. @+ v& V, l

) \. |9 @0 n1 \9 p7 X  v2 h 多媒体按键值定义
- \4 L( \1 a$ z, f$ D9 Q
  • const uint8_t media_key[47][2] =
  • {
  • {0x24, 0x02}, // WWW back 0
  • {0x25, 0x02}, // WWW forward 1
  • {0x26, 0x02}, // WWW Stop 2
  • {0x27, 0x02}, // WWW Refresh 3
  • ....
      d4 W! C# H; y

3 K6 Z! a* V9 T, z% w2 o, ^在app.c 中的 app_user_entry 函数,每当添加一个新的按键实例,必须透过 app_hid_send_report
5 D% I+ _3 r& @3 [这个函数,将按键值及长度发送给主机端,主机才能根据按键值做出对应的行为; 举例来说,要发出) C, L# b2 M7 f% a' u
降低音量的按键功能,从上面的注释可以看到 volume down 对应到第九列,是整个数组的第 18 个# v/ G; ^6 I: G3 @5 \3 _8 l
数,因此调用发送函数时写成 app_hid_send_report(&key_copy[18], 2) 2),其他按键也是如此使用。/ q  H' D( F6 K
- c7 x3 I/ }5 K" @
2.6 HOGP 相关 AT command
' |8 c/ i  K1 @; g本应用指南中,已经建立部分的AT command ,9 l+ |2 ~- I; N  A6 ^

6 _$ n4 L5 [  o% X  n- r用户自行添加 AT command 时,需要在 MCU 端及 BT 端同时增加对应的实例; MCU 端要在4 G$ V3 O: B. T& O0 E, G. {
at_cmd.h 中新增 AT command 的请求及期待的响应; BT 端要在 app.h 中新增要解析的 AT
, F& ^* z1 z+ D. R. L: ~' j9 C6 h& x3 K6 @command 字符串、 command 的枚举以及回复的枚举,数量上如果对不上的话则发出的按键功能可
; l+ V6 g  Y# E, C% G1 X; ~能会不正常。
" ]4 }2 m$ `6 J

AN0145_AT32WB415_HOGP_Development_Guide.zip

1.77 MB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-10-20 13:15 | 只看该作者
常见的物联网应用,小至家庭,大至整个城市系统网络,无线则是串起IoT系统中最重要的通讯方式。AT32都能够用得到!

该用户从未签到

3#
发表于 2022-10-20 15:02 | 只看该作者
终端装置进行联网时,会产生的大量隐私数据,要确保用户隐私和数据安全,MCU在数据储存中的受保护区管理(带有硬件的访问控制)和严格的编程流程规划,以及操作中管理访问权限的应用,非常重要。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-12 07:42 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表