目标

在openharmony 3.2release完成蓝牙鼠标的适配。

备注:此蓝牙鼠标为BR设备,非BLE设备。

准备工作

在蓝牙列表里配对并连接蓝牙鼠标,并取出对应的hilog和kmsg

一、在输入设备中添加蓝牙鼠标

1. 首先查看对应的hilog,在hilog中发现

行 9620: 01-01 08:04:17.049   397  1663 E C02800/PointerDrawingManager: in GetSurfaceBuffer, Request buffer ret:<504 binder occur error>
行 9757: 01-01 08:04:17.055   397  1663 E C02800/PointerDrawingManager: in InitLayer, Init layer is failed, buffer or virAddr is nullptr

   根据layer初始化失败判断设备input没适配;

2. 在输入设备中添加蓝牙鼠标

   首先,查看蓝牙鼠标对应的设备。使用 cat /proc/bus/input/devices找到蓝牙鼠标对应的设备。比如,这里蓝牙鼠标是第6个设备,记录Name为"Bluetooth HID"。具体可参考:https://gitee.com/tanpengju/openharmonydevice#%E6%AD%A5%E9%AA%A47-%E8%A7%A6%E6%91%B8%E5%B1%8F%E7%9A%84%E9%80%82%E9%85%8D

# cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sc27xx:vibrator"
P: Phys=
S: Sysfs=/devices/platform/soc/soc:aon/64400000.spi/spi_master/spi4/spi4.0/64400000.spi:pmic@0:vibrator@2390/input/input0
U: Uniq=
H: Handlers=event0
B: PROP=0
B: EV=200001
B: FF=107030000 0

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/gpio-keys/input/input1
U: Uniq=
H: Handlers=event1 sysdump
B: PROP=0
B: EV=3
B: KEY=1c000000000000 0

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sprdphone-sc2730 Headset Jack"
P: Phys=ALSA
S: Sysfs=/devices/platform/sound@0/sound/card0/input2
U: Uniq=
H: Handlers=event2
B: PROP=0
B: EV=21
B: SW=14

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="sprdphone-sc2730 Headset Keyboard"
P: Phys=ALSA
S: Sysfs=/devices/platform/sound@0/sound/card0/input3
U: Uniq=
H: Handlers=event3 sysdump
B: PROP=0
B: EV=3
B: KEY=18 400000000 0 c000000000000 0

I: Bus=0003 Vendor=6006 Product=6006 Version=0001
N: Name="VSoC touchscreen"
P: Phys=
S: Sysfs=/devices/virtual/input/input4
U: Uniq=
H: Handlers=event4 sysdump
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=773000001000003

I: Bus=001c Vendor=0000 Product=0000 Version=0000
N: Name="NVTCapacitiveTouchScreen"
P: Phys=input/ts
S: Sysfs=/devices/virtual/input/input5
U: Uniq=
H: Handlers=event5 sysdump
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=661800000000000

I: Bus=0005 Vendor=ae24 Product=8618 Version=0001
N: Name="Bluetooth HID"
P: Phys=
S: Sysfs=/devices/virtual/misc/uhid/0005:AE24:8618.0001/input/input6
U: Uniq=B4:EE:25:41:27:21
H: Handlers=event6 sysdump
B: PROP=0
B: EV=17
B: KEY=1f0000 0 0 0 0
B: REL=903
B: MSC=10

然后在third_party\eudev\rules.d\touchscreen.rules中添加Bluetooth HID设备

ATTRS{name}=="VSoC touchscreen", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1"
ATTRS{name}=="VSoC keyboard", ENV{ID_INPUT}="1", ENV{ID_INPUT_KEYBOARD}="1"
DRIVERS=="hid-multitouch", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1"
ATTRS{name}=="Bluetooth HID", ENV{ID_INPUT}="1", ENV{ID_INPUT_KEYBOARD}="1"        --此处为添加的蓝牙鼠标设备

二、修改selinux规则

1.在hilog读取到以下日志

01-01 08:04:16.215   315   372 E C02f02/Selinux: avc:  denied  { get } for service=401 pid=397 scontext=u:r:multimodalinput:s0 tcontext=u:object_r:sa_foundation_bms:s0 tclass=samgr_class permissive=0

2.在kmsg中读取到以下日志

01-01 08:01:37.928     0     0 F K02600/kmsg: 5,8831,159131886,-,caller=T74@C1;audit: type=1400 audit(257.043:9): avc:  denied  { write } for  pid=974 comm="IPC_3_1652" path=2F646174612F6173686D656D2F616E64726F69642D6173686D656D2D3831352D5858584A4B4B68694B202864656C6574656429 dev="mmcblk0p63" ino=4431 scontext=u:r:multimodalinput:s0 tcontext=u:object_r:data_file:s0 tclass=file permissive=0

根据selinux修改规则,参考:https://laval.csdn.net/64ee90df4165333c3076badb.html

在base\security\selinux\sepolicy\ohos_policy\multimodalinput\input\system\multimodalinput.te中添加

allow multimodalinput sa_foundation_bms:samgr_class { get };      --此处修改hilog中的报错
allow multimodalinput data_file:file { write };                   --此处修改kmsg中的报错

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐