小萌新想把蓝牙键盘的键盘信号通过手机SOCKET通讯传给电脑,用的是写入 /dev/input/event 的方法
碰到的第一个坑,是权限问题,open函数写入的权限代码不管用,最后是生成文件后,用SUDO权限跑起来的
open("/dev/input/event4",O_RDWR,0777);//除了0777,也试过好几个其他的组合,全都perror显示权限不足
碰到的第二个坑,是一开始直接抄别人的代码,用的event0,结果跑起来按键基本没反应,原本以为是完全失败了,意外按下F2和F5的时候,弹出关机…
然后去查了查,学到了用 cat /proc/bus/input/devices 来查看对应的event和设备,原来我的event0和1都是POWER BUTTON……
而且键盘显示也是两个:
I: Bus=0003 Vendor=046d Product=c31c Version=0110
N: Name="Logitech USB Keyboard"
P: Phys=usb-0000:00:14.0-12/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-12/3-12:1.0/0003:046D:C31C.0002/input/input4
U: Uniq=
H: Handlers=sysrq kbd event4 leds
B: PROP=0
B: EV=120013
B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=1f
I: Bus=0003 Vendor=046d Product=c31c Version=0110
N: Name="Logitech USB Keyboard"
P: Phys=usb-0000:00:14.0-12/input1
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-12/3-12:1.1/0003:046D:C31C.0003/input/input5
U: Uniq=
H: Handlers=kbd event5
B: PROP=0
B: EV=1b
B: KEY=2010000 397ad801d001 1e000000000000 0
B: ABS=100000000
B: MSC=10
一开始看到LEDS…我以为event5才是输入,结果试了之后,发现event4才是…
找到了键盘的event,发现还是不行,按键奇奇怪怪的,显然是键码问题,于是听了一遍实际键盘的键码,把蓝牙的键码全部switch一遍
#include <QCoreApplication>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include &l