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

AT32 HOGP开发指南

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Terran 于 2022-10-20 10:02 编辑
+ M7 i0 U$ ^1 S; _+ z/ U
2 ]9 ?* f6 Y# T3 J; ?( ?8 I+ CAT32 HOGP开发指南1 Y2 n, |* y2 A. v$ l

- }- Q6 U3 @$ F& ~1 C& e3 b前言& i0 C- D' x: R0 l. m
人机接口设备(Human InteRFace Devices, HID)的主要目的是基于USB实现者论坛所维护的规格书,提供用户与计算器之间的接口。HID涵盖了显示器、键盘、网络摄影机和鼠标甚至到VR耳机、游戏手把和触控屏幕的各种装置。HID传统上通过USB接口连接到计算器,然而,HID设备也可以通过使用无线技术与计算器连接。通过使用HID规范,可以开发出符合通用标准的计算器外设,从而与大多数装置兼容。
( n/ @. ?/ [0 h: \* \支持型号 列表:
9 }1 s% \: J- h2 qAT32WB415
$ h' {2 F% ?* H( N8 K- ~
/ u3 Z- N& j0 X5 {, [" @' r" N1 HOGP概述8 Y6 h5 ?' c& S* A$ V& x
HOGP(HID over GATT)是由Bluetooth SIG维护的蓝牙配置文件规范,通过低功耗蓝牙实现HID的配置文件并作为与计算器之间的接口,消除HID中对电线或物理连接的需求。1 P% T8 e) \+ Q. H
: j& L. a8 L! g  r
1.1 HID 角色
( f& T* u# q4 ~2 |. k5 U9 G& s5 ~在HID 中,以及在 HOGP 的延伸中,定义了两个角色,这些角色是 HID 主机和 HID 设备。 HID 设备
4 m, `* i6 p2 Y. b8 N一次只能主动连接到单个 HID 主机;然而一个 HID 主机可以连接到多个 HID 设备。有关主机和设备
7 U) |& M- [9 \! _2 W% ~如何交互的细节,请参阅 HOGP 规范 中的第 3 章 HID 设备需求和第 4 章 HID 主机需求和行为。
& U9 q( x  M2 Q- v. W
8 z9 I( I5 C2 V) i/ i$ }8 |, i1.2 HID 主机
/ U1 P/ x" y! Z7 k$ K5 uHID主机实现蓝牙 GAP 中的中心 ( 角色,接收输入讯息并使用提供的数据进行更进一步的处
( k; w4 W, y& M1 `  ~- f/ r% t+ O理。例如,计算器会是 HID 主机,因为这是接收 HID 数据的设备。 HID 主机对 HID 功能的正确执行9 Q: p' a$ D4 y+ P- f
有许多责任与需求,但在此开发指南中所提供的范例仅实现了 HID 设备,因此本文檔不涉及这些内; E  K& O( f5 m' y1 |
容。想要了解 HID 主机的职责和需求,请参阅 HOGP 规范中的第 2 章配置、第 4 章 HID 主机需求和9 _0 O5 U( C7 V7 D+ o) z- g
行为、第 5 章连线建立。+ Y. S6 B' z8 O( h8 i5 x7 d9 z

! C/ u: i+ i+ I: Y" N1.3 HID 设备; v9 F5 ^) e+ s/ q0 C
HID设备实现蓝牙 GAP 中的外设 ( 角色,负责将输入信息传输到中央计算器。例如,鼠标. C- }* q% g0 E  Q
或键盘会是 HID 设备,因为它们将输入数据发送到计算器设备。. p$ W6 V  n* ?* v# W/ d0 k! E

3 ~" h6 v9 X& e/ b  H8 t) |$ _
& d! s2 ?6 [$ x; n7 [2 例 蓝牙键盘实做
; D* U  Q- w; _; {, B; EHOGP工程是一个在 AT32WB415 上实现 HOGP 规范的低功耗蓝牙工程,该工程使用 HOGP 规范 指, x6 e9 G  q/ t6 f/ d) ~+ v1 m
定的 蓝牙 外设角色,演示了 HOGP 的键盘。通过使用通知 ( 和 GATT 配置文件,该项目能
+ O7 Y( M7 ^; y3 C3 t$ Q' e够通过低功耗蓝牙 HID 装置并与 HID 主机正确连接。 HOGP 工程中有几个复杂的部份,在本文档中
9 P% W* U1 c# S" c$ ?进行了讨论,这些部份组合在一起以实现整体功能。8 H% U5 J' N" t2 T& Y
* f" N; y% @) j9 k1 N! n3 L7 {
2.1 报告映射讨论% i$ x6 k7 K  X- z6 y, S
HOGP工程依赖于报告映像,报告映射是 HOGP 用于实现低功耗蓝牙 HID 功能的结构。报告映像用
5 g$ v! ~: T6 J6 ?于告诉主机许要从 HID 设备获得什么功能和什么样的数据,在原始的 HID USB 规范中,报告映射称
  K! g. L, _7 c2 B* R. t为报告描述符,报告映射和报告描述符是相同的,它们之间唯一的区别是报告映射用于 HOGP, 报告  q' i0 E4 n5 ~! {4 P% H. ]9 J
描述符用于 HID USB 。
2 e: n; _8 p) J2 t% y, j/ h- W该工程使用的报告映像可以在# G8 z# P$ f3 l) e8 K
app_hid.c 文件中找到,并且包含在 gHIDReportDescriptor 变量中,此
' r" s* |6 A- h/ k* n- x3 B工程中的报告映像包含键盘的输入信息。该结构分为多个部份,应用程序以及 HID 主机能够通过使用( V; G$ Q9 z9 f! o
报告 ID 字段找到所需的部份。可以轻松修改报告映像以包含不同的输入或修改已经存在的输入,, |- u. h0 f. ^  ^" |! {
USB 实现者论坛的设备工作组有一个报告描述符建构器工具,可以用于轻松创建报告映射。 图 3 显) x) G% B4 }4 O  S& F
示了报告映像结构的片段,所有字段都有标签,可以轻松修改。例如,如果需要不同数量的键盘按0 T$ t* Z; s5 h1 E4 w! q  |
键,则可以轻松修改相关字段。
& g1 C% r! B! i( x# [
, r2 E5 l+ |7 R2.2 资源准备
* S0 \( Q" |$ T5 G$ q; B1) 硬件环境:# i; i& r) r: ~# M& r
对应产品型号的AT-START BOARD; b: U, }, C+ |3 U% v$ A) N
2) 软件环境
$ d, ?6 r) c1 i# N  zwb415_hogp_bt_demo\projects\ble_app_remote
; r+ \& |. I5 v: E% s/ U2 ewb415_hogp_mcu_demo\utilities\wb415_hogp_mcu_demo\mdk_v56 y4 p, c! ^0 s

/ M) r; E* B7 f3 n9 k9 h! M2.3 软件设计) C/ u' O: j2 K0 q2 [; q4 d2 s" a) M
1) 配置流程2 B5 n6 C$ M5 b1 e( V+ s3 w& J& K
a) MCU端$ r9 H* K3 E, E3 l1 a0 _
 配置USER KEY作为击键
& S2 L* s3 j3 B  n7 \. |' Y) v2 b, T 编写USART3通讯函数$ J0 [' ^9 k* v1 {
 轮询USER KEY是否按下
1 Y8 D+ K, r4 M5 e1 L0 l' P$ b 根据需求去配置USER KEY按下后发出的AT command  _4 C! R- [1 {: ?: K) [9 E
b) BT端5 j9 m# {$ h5 M! f, C
 将HOGP的Profile加入database' X1 [6 k: W" W* e- {7 Y4 j
 编写应用层与GATT之间的界面
, L. O, b$ E* ~ 在应用层中轮询AT command
2 q* E" k1 ~+ E+ x: D% F( G6 [ 透过HOGP将不同的key function发给host端
( ]& y% D) U1 L+ g2) 代码介绍) D) g. j9 [8 m8 }
 MCU端7 l5 v9 d/ D, y4 N3 J- A3 i/ p+ j
 main函数代码描述
. x+ J2 x' k. R% @* I7 ?$ 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();
  • ....
    - z+ _8 U2 n" ~, r3 H3 O

# F+ |- o# {( B; \ BT端9 N' F$ ?0 @% b* N; R/ s1 b- @
原则上不需要去修改Profile层的内容,由APP层去设定HID装置的内容即可
/ K8 K6 S$ @, m6 T: `8 X* h 初始化HOGP装置变量
1 q. A9 T6 t  ]$ 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);
  • }) F- I8 c" u5 @8 N+ d0 c* [& F
0 _. K2 v" ^% ]. i
 将HOGP加入database1 z4 w7 a% _* s" b
  • 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;
  • ....
    7 U' X) U2 ~- y
, K) P1 k7 [- i/ f' [( |+ |/ r; g. k# u
在main函数之中的while loop不断轮询app_user_entry()来确认有无收到AT command,如果收到有收到AT command则执行该命令的内容。8 M$ L: I! K0 w+ u$ {5 \+ B( H& w1 h
 解析AT command并执行对应的程序
9 W- I8 P  E* I$ @. T9 [" z: i5 H
  • 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();
  • }
  • ....
    3 w- V  D1 H- E; W
2 e4 b, L4 u" P1 J* `
2.4 实验效果( a  d3 D! _% H+ e; ^( \3 M. u& F
 按下AT-START板上的USER KEY发送www back按键,则浏览器页面返回上一页1 H/ V( {! R, H, z4 t! Q
 按下AT-START板上的USER KEY发送volume up按键,则音量提高(需要修改AT command)
6 i- F+ V0 o* J. u 按下AT-START板上的USER KEY发送volume down按键,则音量降低(需要修改AT command)
1 u2 C) b4 ]( Z6 c1 K# S1 N, b, |4 Q  {0 `+ k' t( S- u1 v! {. h
2.5 按键定义2 L* N4 C" O7 i  f$ E
本应用指南以多媒体按键为例,在代码中定义了多媒体按键值的数组,用户可以在app_key.c 中找到以下代码:# {* b2 l+ l. O4 a3 i

: K/ r- c, M7 T* N 多媒体按键值定义/ b7 h9 n; E4 n4 v0 f8 F  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
  • ....& _8 W! n0 D7 ?% {0 M9 P+ I

, @- i: _+ B8 G. a在app.c 中的 app_user_entry 函数,每当添加一个新的按键实例,必须透过 app_hid_send_report' [# K: k9 I1 O/ G) Y( J) P
这个函数,将按键值及长度发送给主机端,主机才能根据按键值做出对应的行为; 举例来说,要发出% H$ [' u+ `3 }0 f0 l
降低音量的按键功能,从上面的注释可以看到 volume down 对应到第九列,是整个数组的第 18 个
: _2 N$ B! U' b& j) B% E" B" i数,因此调用发送函数时写成 app_hid_send_report(&key_copy[18], 2) 2),其他按键也是如此使用。
+ Z8 Z  k& S5 i& U! o$ u! ?0 E- w8 _/ ?- t2 I
2.6 HOGP 相关 AT command: t# n6 B, c1 }$ B/ B( a# w
本应用指南中,已经建立部分的AT command ,
9 F, o# b. p1 ^- }* z& g* r. A& d$ I6 f
用户自行添加 AT command 时,需要在 MCU 端及 BT 端同时增加对应的实例; MCU 端要在- m& P6 M6 R9 u3 m+ K- ?
at_cmd.h 中新增 AT command 的请求及期待的响应; BT 端要在 app.h 中新增要解析的 AT
* ~4 k/ p4 G, z4 f4 fcommand 字符串、 command 的枚举以及回复的枚举,数量上如果对不上的话则发出的按键功能可
! K, R# K# A# E; _  W$ J能会不正常。4 ~+ ]0 @) B$ a# e

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, 2026-4-18 22:11 , Processed in 0.109375 second(s), 27 queries , Gzip On.

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

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

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