蓝牙测试

QuecPi Alpha 单板电脑支持 QCA1023 HCI UART 蓝牙模块, 可以支持蓝牙外设连接。 本文将介绍如何使用蓝牙模块连接键鼠进行测试。

蓝牙模块启动

蓝牙模块为 HCI UART 连接主控, 通过HCI H4协议进行通信。
首先通过设备节点给外设供电,当往节点echo 0 时,则给蓝牙外设下电。

echo 1 > /sys/devices/platform/rfkill/bt_en

通过 hciattach 命令,通过串口初始化蓝牙模块。

hciattach /dev/ttyHS1 qca 3000000 flow

通过 hciconfig 命令,查询并且启用 hci 蓝牙设备。

hciconfig hci0 up

查询 hci 设备状态,通过 hciconfig 查询,当状态为 UP RUNNING 的情况下,说明hci蓝牙设备已经启用。

root@qcm6490-idp:~# hciconfig 
hci0:	Type: Primary  Bus: UART
    BD Address: 00:00:00:00:5A:AD  ACL MTU: 1024:7  SCO MTU: 60:8
    UP RUNNING 
    RX bytes:783665 acl:1106 sco:0 events:18678 errors:0
    TX bytes:4072 acl:57 sco:0 commands:305 errors:0

连接蓝牙外设

执行 bluetoothctl 命令,进入蓝牙配置工具,命令提示符变成[bluetooth]#,表示已经进入蓝牙控制模式。

root@qcm6490-idp:~# bluetoothctl 
[bluetooth]# 

执行 scan on 命令,此时会执行蓝牙扫描命令,会显示周边蓝牙设备信息,此时需要打开蓝牙设备的配对模式 ,放在旁边。

[bluetooth]# scan on

扫描到一定时间后,执行 scan off,停止 scan。

[bluetooth]# scan off

执行 devices 指令,列出扫描到的设备,找到你的蓝牙外设,此处以蓝牙鼠标为例。

[bluetooth]# devices
Device C3:3E:68:5E:E7:1F MX Master 2S

使用 pair 命令,进行连接,地址为你的外设地址。

[bluetooth]# pair C3:3E:68:5E:E7:1F

当输出 CHG 的日志时,说明pair成功。此时可以发现,我们的鼠标被注册到 input 设备下,这里是input5(根据实际注册地址为准)。

[CHG] Device C3:3E:68:5E:E7:1F Modalias: usb:v046DpB019d0006
[MX Master 2S]# [ 1157.381232][ T1737] input: MX Master 2S Keyboard as /devices/virtual/misc/uhid/0005:046D:B019.0001/input/input4
[ 1157.392409][ T1737] input: MX Master 2S Mouse as /devices/virtual/misc/uhid/0005:046D:B019.0001/input/input5

将设备添加为 trust 并且连接(可选:如果设备自动连接则可跳过)。

[MX Master 2S]# trust C3:3E:68:5E:E7:1F
Changing C3:3E:68:5E:E7:1F trust succeeded
[MX Master 2S]# connect C3:3E:68:5E:E7:1F
Attempting to connect to C3:3E:68:5E:E7:1F
Connection successful

验证外设

此时,我们可以用 evtest工具来验证外设是否可用,输入 evtest 命令,会显示可使用的 event 设备,这时我们选择我们的鼠标编号 5。

root@qcm6490-idp:~# evtest 
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	pm8xxx_vib_ffmemless
/dev/input/event1:	gpio-keys
/dev/input/event2:	pmic_pwrkey
/dev/input/event3:	pmic_resin
/dev/input/event4:	MX Master 2S Keyboard
/dev/input/event5:	MX Master 2S Mouse
Select the device event number [0-5]: 

当出现如下打印则大功告成,可以通过移动鼠标按键来测试是否有事件上报。

Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x46d product 0xb019 version 0x6
Input device name: "MX Master 2S Mouse"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 275 (BTN_SIDE)
    Event code 276 (BTN_EXTRA)
    Event code 277 (BTN_FORWARD)
    Event code 278 (BTN_BACK)
    Event code 279 (BTN_TASK)
    Event code 280 (?)
    Event code 281 (?)
    Event code 282 (?)
    Event code 283 (?)
    Event code 284 (?)
    Event code 285 (?)
    Event code 286 (?)
    Event code 287 (?)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
    Event code 6 (REL_HWHEEL)
    Event code 8 (REL_WHEEL)
    Event code 11 (REL_WHEEL_HI_RES)
    Event code 12 (REL_HWHEEL_HI_RES)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 2618.445029, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 2618.445029, type 1 (EV_KEY), code 272 (BTN_LEFT), value 1
Event: time 2618.445029, -------------- SYN_REPORT ------------
Event: time 2618.610162, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 2618.610162, type 1 (EV_KEY), code 272 (BTN_LEFT), value 0
Event: time 2618.610162, -------------- SYN_REPORT ------------