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

AT32 HOGP开发指南

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Terran 于 2022-10-20 10:02 编辑 ; f+ Y3 e8 ^8 K! }5 P. ^; w

; N% w/ N. l+ v0 A  v7 Z3 AAT32 HOGP开发指南
4 c2 M" q7 g8 K& J- L8 Z! c: T6 d& |" \0 u; k& d* l& a
前言+ i3 s1 J5 @$ l4 I# u) C
人机接口设备(Human InteRFace Devices, HID)的主要目的是基于USB实现者论坛所维护的规格书,提供用户与计算器之间的接口。HID涵盖了显示器、键盘、网络摄影机和鼠标甚至到VR耳机、游戏手把和触控屏幕的各种装置。HID传统上通过USB接口连接到计算器,然而,HID设备也可以通过使用无线技术与计算器连接。通过使用HID规范,可以开发出符合通用标准的计算器外设,从而与大多数装置兼容。
/ h& `; J4 ~( z" ~2 l. E, \- ]3 y支持型号 列表:) c6 z; i. `! R; v9 B2 ~" a0 [; ]# A
AT32WB415
1 L2 r; z: q7 p* @( l2 ]& J1 a; h
/ ~! Y  X8 \9 o" b7 C* T1 HOGP概述
5 U" Q) n5 o" OHOGP(HID over GATT)是由Bluetooth SIG维护的蓝牙配置文件规范,通过低功耗蓝牙实现HID的配置文件并作为与计算器之间的接口,消除HID中对电线或物理连接的需求。0 }6 `4 P& p1 g

( D- R+ E+ \8 b% i% E  n! I1.1 HID 角色( O  o" U/ l* d  n
在HID 中,以及在 HOGP 的延伸中,定义了两个角色,这些角色是 HID 主机和 HID 设备。 HID 设备
4 M) M4 r- J5 H/ Y; G一次只能主动连接到单个 HID 主机;然而一个 HID 主机可以连接到多个 HID 设备。有关主机和设备
, m* b( I7 j+ ~: P" b% A$ S* K' E" M4 R如何交互的细节,请参阅 HOGP 规范 中的第 3 章 HID 设备需求和第 4 章 HID 主机需求和行为。
- K$ g( J" v5 r$ t5 j
5 O. Y( Z; Y! ?. }: B/ k1.2 HID 主机! P' M7 U8 w. `- C% @* x" n
HID主机实现蓝牙 GAP 中的中心 ( 角色,接收输入讯息并使用提供的数据进行更进一步的处1 j4 _7 s! z  A; V$ T* h0 K
理。例如,计算器会是 HID 主机,因为这是接收 HID 数据的设备。 HID 主机对 HID 功能的正确执行6 P8 e, F5 [0 Q( |% {
有许多责任与需求,但在此开发指南中所提供的范例仅实现了 HID 设备,因此本文檔不涉及这些内0 N4 B0 H0 l# J" R2 b
容。想要了解 HID 主机的职责和需求,请参阅 HOGP 规范中的第 2 章配置、第 4 章 HID 主机需求和: K1 l5 U$ m3 l7 a" Y
行为、第 5 章连线建立。' ]' m4 [+ B8 P0 m5 B' t
4 H1 `& D  ^' F7 e; v% R2 x
1.3 HID 设备  x5 K7 Q$ \3 A; I
HID设备实现蓝牙 GAP 中的外设 ( 角色,负责将输入信息传输到中央计算器。例如,鼠标& X# [5 x2 Y( s, }
或键盘会是 HID 设备,因为它们将输入数据发送到计算器设备。
0 z$ R/ G* Q$ h0 Q# d; k2 `+ b: _* g4 A& ^6 s: D1 S
) e/ w7 ]( @, _- b+ ^: j
2 例 蓝牙键盘实做. z! ?5 s" P* ~1 {$ m" c5 A
HOGP工程是一个在 AT32WB415 上实现 HOGP 规范的低功耗蓝牙工程,该工程使用 HOGP 规范 指! p4 w( y* X) y" p
定的 蓝牙 外设角色,演示了 HOGP 的键盘。通过使用通知 ( 和 GATT 配置文件,该项目能
, ~4 t% I" F% N' H够通过低功耗蓝牙 HID 装置并与 HID 主机正确连接。 HOGP 工程中有几个复杂的部份,在本文档中
* s% _8 p( h8 t; p$ u' I* `进行了讨论,这些部份组合在一起以实现整体功能。
% q7 o# O+ O# f7 i" ?6 I) L  C2 a) z, ^! @8 W
2.1 报告映射讨论- \& n- Z6 D) i; l+ P) f; i
HOGP工程依赖于报告映像,报告映射是 HOGP 用于实现低功耗蓝牙 HID 功能的结构。报告映像用
5 l9 ]8 |) b8 v* |于告诉主机许要从 HID 设备获得什么功能和什么样的数据,在原始的 HID USB 规范中,报告映射称
6 p/ c$ `$ d" D/ ?" a为报告描述符,报告映射和报告描述符是相同的,它们之间唯一的区别是报告映射用于 HOGP, 报告
; T& r3 R4 F9 N! u* ]描述符用于 HID USB 。7 I9 C# f( u- t9 Y( u: U
该工程使用的报告映像可以在. V! i: q. \5 n& \# {
app_hid.c 文件中找到,并且包含在 gHIDReportDescriptor 变量中,此
: y" H; \5 z' N0 w工程中的报告映像包含键盘的输入信息。该结构分为多个部份,应用程序以及 HID 主机能够通过使用3 E- ?, |  O. `# F
报告 ID 字段找到所需的部份。可以轻松修改报告映像以包含不同的输入或修改已经存在的输入,
5 r: S' y' [& \, A. D" a/ bUSB 实现者论坛的设备工作组有一个报告描述符建构器工具,可以用于轻松创建报告映射。 图 3 显6 I% ]3 j6 c- {' w2 @- s4 {. A2 K
示了报告映像结构的片段,所有字段都有标签,可以轻松修改。例如,如果需要不同数量的键盘按
4 u/ g$ u# _9 @, J: K7 a& \键,则可以轻松修改相关字段。
+ N/ W7 N& J- x' e  L- f: p: m. i% J* L0 d2 s
2.2 资源准备$ ~: r) U9 l3 e3 F2 p9 C2 q
1) 硬件环境:6 @/ L- T6 f; O# Z, g
对应产品型号的AT-START BOARD
. \) F2 s5 v( ~& ~1 k) _2) 软件环境; J3 P9 K1 {5 v. I# a5 L! h! ^1 M
wb415_hogp_bt_demo\projects\ble_app_remote
; r: P) X. R) X( ^8 ]5 hwb415_hogp_mcu_demo\utilities\wb415_hogp_mcu_demo\mdk_v5' M" s2 v. N- [) C) i
& ^, \& o. B' M) g5 a+ G
2.3 软件设计
* S) Y4 m0 A) M/ z. X4 Q1 j1) 配置流程2 O" |5 C* n$ C5 N1 ]5 Y
a) MCU端
3 A9 Z  H/ I' Q  I 配置USER KEY作为击键0 o0 n4 t" r1 j9 ~
 编写USART3通讯函数- V4 h% P+ [# o* M3 O+ y+ U- X
 轮询USER KEY是否按下( `: {! c- O4 ^. I( S
 根据需求去配置USER KEY按下后发出的AT command
' G) G7 {# N& b0 r8 Zb) BT端1 l) U* U* x% r& o) k; J* J; ^
 将HOGP的Profile加入database
4 b% t* m' E) m' K' ^) }! g, M 编写应用层与GATT之间的界面
" w3 c* u8 @  x% n 在应用层中轮询AT command
- x& G, Z" k& ~1 n6 s, Q 透过HOGP将不同的key function发给host端
5 ~( g0 g' d7 T+ ?+ B; G- S$ J2) 代码介绍. v3 z" c/ Z# K/ i
 MCU端# L3 e& }' q0 {2 z( M  m
 main函数代码描述8 Q! N; k: u( N2 E3 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();
  • ....
    ( c$ u* ?: }3 K) v. V% I" ?9 v

& M/ ?; B8 Q6 @, a/ A BT端
7 L+ W# P) d3 E4 S- O! h0 R原则上不需要去修改Profile层的内容,由APP层去设定HID装置的内容即可8 e0 a. V1 a' S; N
 初始化HOGP装置变量6 {* D0 ^8 O8 \; D- i" A
  • 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);
  • }
    0 t9 D+ h  u: T1 p2 c

+ g  G& N! O/ Z. X; j1 h2 e* i5 y 将HOGP加入database
+ S3 B' \1 c/ T$ H; z/ u
  • 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;
  • ....
    : v, L" O; c3 F: J1 m3 O4 E8 m. H' l* ~

# t; W8 s- z8 M( ~5 _在main函数之中的while loop不断轮询app_user_entry()来确认有无收到AT command,如果收到有收到AT command则执行该命令的内容。
2 o! t) H% O! s8 L9 c2 t/ A 解析AT command并执行对应的程序( J3 W7 X7 |+ X9 K. W
  • 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();
  • }
  • ....9 Q4 ?7 }( |% j7 M5 ?% C
$ C4 A1 s! N3 j
2.4 实验效果
) d) y4 V7 w9 u0 j 按下AT-START板上的USER KEY发送www back按键,则浏览器页面返回上一页
7 ^4 _& J3 L0 w' R 按下AT-START板上的USER KEY发送volume up按键,则音量提高(需要修改AT command)
- E& M1 Z: R$ f9 c% v 按下AT-START板上的USER KEY发送volume down按键,则音量降低(需要修改AT command)0 k/ s& H7 M1 H

$ I* e: u- W4 A/ X5 ~6 n2.5 按键定义" o, Y( d1 Q* A  W
本应用指南以多媒体按键为例,在代码中定义了多媒体按键值的数组,用户可以在app_key.c 中找到以下代码:
& z! X0 m/ X0 ?# D# d6 u1 T# B  H' T9 Z. W
 多媒体按键值定义
/ |6 R( P! {3 K; ~6 j# `; D$ F
  • 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
  • ....% C' V8 G$ _, {3 Y( Z3 m
$ e3 C% i$ ?3 p/ O
在app.c 中的 app_user_entry 函数,每当添加一个新的按键实例,必须透过 app_hid_send_report
0 E& ^7 V3 o7 l这个函数,将按键值及长度发送给主机端,主机才能根据按键值做出对应的行为; 举例来说,要发出
$ b- `9 V: q! u/ M; p6 \) F; h降低音量的按键功能,从上面的注释可以看到 volume down 对应到第九列,是整个数组的第 18 个2 ^+ ]6 E5 {" q' z. t8 T/ d
数,因此调用发送函数时写成 app_hid_send_report(&key_copy[18], 2) 2),其他按键也是如此使用。/ r, `8 l; V6 C1 [+ n9 d" y6 z

) C4 I, A6 h1 G9 e5 L+ v2.6 HOGP 相关 AT command
+ t, ^8 A5 ~% g$ R8 l0 p# ^  f本应用指南中,已经建立部分的AT command ,
5 D; f, p5 S: g1 Z  }; Z
% h  H8 ~5 S; t9 g& P" b用户自行添加 AT command 时,需要在 MCU 端及 BT 端同时增加对应的实例; MCU 端要在! M  W" E4 g3 o: s
at_cmd.h 中新增 AT command 的请求及期待的响应; BT 端要在 app.h 中新增要解析的 AT# x2 u: f4 j: ?$ Q7 p
command 字符串、 command 的枚举以及回复的枚举,数量上如果对不上的话则发出的按键功能可- M) u- S7 v9 T7 m8 k8 _7 g
能会不正常。
5 r1 `3 ~0 V( G: k% k

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 20:45 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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