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

AT32 HOGP开发指南

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Terran 于 2022-10-20 10:02 编辑 6 x6 K2 v3 s# _
! D2 I  e: a( T& _' }( r
AT32 HOGP开发指南) Z8 u  Q0 D! {$ E! R4 q
( z9 v' q1 X0 ^- v/ J. C
前言" g6 @7 K' j0 v+ t+ S% X
人机接口设备(Human InteRFace Devices, HID)的主要目的是基于USB实现者论坛所维护的规格书,提供用户与计算器之间的接口。HID涵盖了显示器、键盘、网络摄影机和鼠标甚至到VR耳机、游戏手把和触控屏幕的各种装置。HID传统上通过USB接口连接到计算器,然而,HID设备也可以通过使用无线技术与计算器连接。通过使用HID规范,可以开发出符合通用标准的计算器外设,从而与大多数装置兼容。
3 t5 O8 u3 a) X4 T支持型号 列表:! ]6 Q# S# J- \( |$ }
AT32WB4151 n9 N+ v' p0 ?: X

+ w: I9 a6 R1 z2 q& I/ U1 HOGP概述( ~2 P3 X( p* v* T7 ]* j1 I$ m
HOGP(HID over GATT)是由Bluetooth SIG维护的蓝牙配置文件规范,通过低功耗蓝牙实现HID的配置文件并作为与计算器之间的接口,消除HID中对电线或物理连接的需求。( T% H2 W' h1 v: z( H# T. M9 ]
1 f  y; ?2 `) d9 A: W
1.1 HID 角色7 k$ q# ]; T! d9 S
在HID 中,以及在 HOGP 的延伸中,定义了两个角色,这些角色是 HID 主机和 HID 设备。 HID 设备4 i: |7 Z5 O  ]/ s9 J1 F% m  ~0 g
一次只能主动连接到单个 HID 主机;然而一个 HID 主机可以连接到多个 HID 设备。有关主机和设备
" i3 d4 m: E% b' t; c8 p如何交互的细节,请参阅 HOGP 规范 中的第 3 章 HID 设备需求和第 4 章 HID 主机需求和行为。
1 [7 m# d% K$ N) i& P5 b3 w0 A7 V9 w' \+ ?
1.2 HID 主机! ]% L3 {# d5 r. M  z1 c# ?6 v
HID主机实现蓝牙 GAP 中的中心 ( 角色,接收输入讯息并使用提供的数据进行更进一步的处4 O; ^7 f' g# W6 o% z% z
理。例如,计算器会是 HID 主机,因为这是接收 HID 数据的设备。 HID 主机对 HID 功能的正确执行
  w1 W9 z. |8 d有许多责任与需求,但在此开发指南中所提供的范例仅实现了 HID 设备,因此本文檔不涉及这些内8 j, |6 t( n# }0 h+ R8 F' q( K
容。想要了解 HID 主机的职责和需求,请参阅 HOGP 规范中的第 2 章配置、第 4 章 HID 主机需求和* j! @8 C) i, b" F9 `9 m
行为、第 5 章连线建立。
; _# x- J' j- ~& u9 ]/ F% Y  d1 f! T# X% Z1 U- F- t& T+ s
1.3 HID 设备5 Z- m- V4 o: f( g: z4 O+ `1 X
HID设备实现蓝牙 GAP 中的外设 ( 角色,负责将输入信息传输到中央计算器。例如,鼠标2 ]0 W, `( N; W8 C$ \
或键盘会是 HID 设备,因为它们将输入数据发送到计算器设备。! l4 J4 }( r2 q$ B$ d& F# H
8 m4 l# O8 `" A/ k* Z% E. B4 G
4 O0 O: b7 B9 V3 v
2 例 蓝牙键盘实做, C( ^1 t8 ]. v0 Z
HOGP工程是一个在 AT32WB415 上实现 HOGP 规范的低功耗蓝牙工程,该工程使用 HOGP 规范 指
- H% J, w8 U: i8 z" S, K2 a定的 蓝牙 外设角色,演示了 HOGP 的键盘。通过使用通知 ( 和 GATT 配置文件,该项目能
; F) Z4 c6 u1 z' T+ w+ {  J够通过低功耗蓝牙 HID 装置并与 HID 主机正确连接。 HOGP 工程中有几个复杂的部份,在本文档中
# G2 L# n+ H. X+ n/ e! [进行了讨论,这些部份组合在一起以实现整体功能。
$ M5 d0 l7 ^  @4 S0 E8 X. B) I: D/ b
2.1 报告映射讨论
. ]& t9 }" c/ t% Q( q! @HOGP工程依赖于报告映像,报告映射是 HOGP 用于实现低功耗蓝牙 HID 功能的结构。报告映像用
% O* C. G% |3 ]3 q于告诉主机许要从 HID 设备获得什么功能和什么样的数据,在原始的 HID USB 规范中,报告映射称# M. D9 E# |6 ^) t3 t
为报告描述符,报告映射和报告描述符是相同的,它们之间唯一的区别是报告映射用于 HOGP, 报告
  ^; l" j" Z: w描述符用于 HID USB 。
* }9 A$ N2 H% y4 x8 ^该工程使用的报告映像可以在/ _" D0 f! a, ~& }7 D
app_hid.c 文件中找到,并且包含在 gHIDReportDescriptor 变量中,此1 ^+ m  c" j8 ?0 O1 m3 J, h/ q
工程中的报告映像包含键盘的输入信息。该结构分为多个部份,应用程序以及 HID 主机能够通过使用
" }4 j, U$ Y" \) ?& Z9 y报告 ID 字段找到所需的部份。可以轻松修改报告映像以包含不同的输入或修改已经存在的输入,
7 A: l! E$ Q3 `+ ]1 j  G3 R( RUSB 实现者论坛的设备工作组有一个报告描述符建构器工具,可以用于轻松创建报告映射。 图 3 显- }/ ?1 s0 p* E9 f+ V8 D! }: o
示了报告映像结构的片段,所有字段都有标签,可以轻松修改。例如,如果需要不同数量的键盘按
, K1 m: E- G% N4 d$ A0 g$ w键,则可以轻松修改相关字段。
0 g% b8 l4 s8 E5 G4 N9 Y. o
$ u# i' e0 F; b5 w1 Y! Y2.2 资源准备4 M) g/ t( V: w3 @
1) 硬件环境:+ s* l1 ]) W7 P# Y% o7 r4 r
对应产品型号的AT-START BOARD' ~9 o$ q6 R5 {& Q% W
2) 软件环境8 w( n- Q3 Q. e, x. S& x, [
wb415_hogp_bt_demo\projects\ble_app_remote
0 ?3 `1 ^' |! X& g! {( D" \# J2 Bwb415_hogp_mcu_demo\utilities\wb415_hogp_mcu_demo\mdk_v5
1 L9 I. e! p% J8 K# @0 ^0 z5 _2 ~5 L( ^& |1 }7 D( {1 D9 L' N
2.3 软件设计
: f. r8 L% Q3 ?6 i- S1) 配置流程0 m4 M& Z1 t" K* ^  O+ z
a) MCU端
: S+ n# V9 G$ I 配置USER KEY作为击键
: @9 q( J- C0 m4 g3 ~ 编写USART3通讯函数9 f3 I5 x& I5 g6 p/ C$ R& g
 轮询USER KEY是否按下
& o& I8 B/ t6 V  ~ 根据需求去配置USER KEY按下后发出的AT command7 p3 R, u6 H4 |6 U) ~" B
b) BT端( q+ {: ~* W* J
 将HOGP的Profile加入database8 I4 L( ~# k1 L; C! h! r
 编写应用层与GATT之间的界面8 I3 g* I! D6 O2 t  E) H( B( o
 在应用层中轮询AT command3 o8 }5 r. @0 V% `, i% z4 x7 n
 透过HOGP将不同的key function发给host端0 ]. r* J; ^# O& z& r
2) 代码介绍
/ H/ T4 H! q6 Y+ V MCU端, u4 j. u* u4 b4 M4 ]
 main函数代码描述9 T5 v3 Y- U- ?2 j* {
  • 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();
  • ....
    8 H( ^3 O# [, q; Y9 Y+ ]

% I$ p, Z1 d- `5 Z  @ BT端# l( b9 d% h/ ]
原则上不需要去修改Profile层的内容,由APP层去设定HID装置的内容即可: z/ e! s. u/ d! m; _# P# J
 初始化HOGP装置变量
  E" \, a$ Q* T8 Y3 F$ m
  • 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);
  • }
    8 v+ i/ u: A# C5 n

3 f! T1 v, H$ r& n6 M2 W( i; Y 将HOGP加入database! h# A, i4 j" t& R* v, n
  • 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;
  • ....; I8 d+ H  b  K; l
2 s- a" F. W! ?; D- ?6 }6 a
在main函数之中的while loop不断轮询app_user_entry()来确认有无收到AT command,如果收到有收到AT command则执行该命令的内容。
. B) h# E5 K4 {0 x7 t# N9 d, s" U 解析AT command并执行对应的程序
) g" v. b* l: l" T3 M
  • 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();
  • }
  • ....
    / w2 C" X3 P2 D' i1 F( m( Z/ \5 Q6 k
) B7 w/ B2 r! p; E$ u
2.4 实验效果
! K1 C1 u, M' f  @3 n( L 按下AT-START板上的USER KEY发送www back按键,则浏览器页面返回上一页
1 h, T8 k$ |' ]$ {* n/ I$ U 按下AT-START板上的USER KEY发送volume up按键,则音量提高(需要修改AT command)
- f) a3 \  V. C+ ?0 L  n- f 按下AT-START板上的USER KEY发送volume down按键,则音量降低(需要修改AT command)
5 @& a  B) Q5 s  V2 w
' a8 R3 @; x+ b3 Y/ x2.5 按键定义
/ x4 M9 \) \. W& h本应用指南以多媒体按键为例,在代码中定义了多媒体按键值的数组,用户可以在app_key.c 中找到以下代码:
$ @2 j( F2 y" |( p5 H' }
: K0 x( H, B7 X 多媒体按键值定义% E% j( \1 ^/ ~- E1 s
  • 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
  • ....0 Y( ]" p1 i  n$ h

+ d8 a. {7 }2 F* o' K在app.c 中的 app_user_entry 函数,每当添加一个新的按键实例,必须透过 app_hid_send_report+ T6 W5 c9 t9 {+ w
这个函数,将按键值及长度发送给主机端,主机才能根据按键值做出对应的行为; 举例来说,要发出- E9 Y  c" s: C) p1 y9 T
降低音量的按键功能,从上面的注释可以看到 volume down 对应到第九列,是整个数组的第 18 个
. U9 F) c/ h. o- ?数,因此调用发送函数时写成 app_hid_send_report(&key_copy[18], 2) 2),其他按键也是如此使用。  Y5 s0 x! p- o$ A" v

5 P3 z4 @1 i( q$ u0 K* L* f' O+ O2.6 HOGP 相关 AT command
/ S' _0 P, U: Y; Z2 |" w本应用指南中,已经建立部分的AT command ,
! [% Z1 N4 q1 U, P1 y% m' Q
. O2 H- e# E. p6 s4 b用户自行添加 AT command 时,需要在 MCU 端及 BT 端同时增加对应的实例; MCU 端要在
' B5 |/ V( D' Eat_cmd.h 中新增 AT command 的请求及期待的响应; BT 端要在 app.h 中新增要解析的 AT( _6 d. D$ m' h& H
command 字符串、 command 的枚举以及回复的枚举,数量上如果对不上的话则发出的按键功能可
: Q/ P4 U8 c" O6 G8 g( R能会不正常。( F& r9 U9 ~2 T+ C

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-7-11 18:15 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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