人说现代社会,计算机锁住了人类的双手,为什么呢?因为基本上一个人一天上班8小时手是不断的在键盘鼠标上面工作的。我们能不能让电脑更智能一些,例如电脑放弃人类的双手,更智能的工作,这里pcDuino跟你提过一个建议。让兼容arduino的各种传感器去采集信号,让pcDuino帮你实现鼠标键盘的各种工作。 一,修改内核vim vim linux-sunxi/drivers/usb/gadget/hid.c hid.c (10.81 KB, 下载次数: 0, 售价: 5 金钱)
# 在里面添加几个结构体和几行代码
结构体是需要添加的,后面两个函数里面要加上结构注册。这里说明一下,根据usb协议,每一个设备都要有描述符,两个结构体就是hid 鼠标键盘的描述符。下面配置内核。 Device Drivers ---> USB support ---> <M> USB Gadget Support ---> <M> SoftWinner SUN4I USB Peripheral Controller < > Dummy HCD(DEVELOPMENT) USB GadgetDrivers < > Gadget Zero(DEVELOPMENT) < > Audio Gadget(EXPERIMENTAL) <M> Ethernet Gadget (with CDC Ethernetsupport) RNDIS support [ ] Ethernet Emulation Model(EEM) support < > Network ControlModel (NCM) support < > Gadget Filesystem(EXPERIMENTAL) < > Function Filesystem(EXPERIMENTAL) < > File-backed StorageGadget (DEPRECATED) < > Mass StorageGadget <M> Serial Gadget (withCDC ACM and CDC OBEX support) <M> MIDI Gadget(EXPERIMENTAL) <M> Printer Gadget < > CDC Composite Device(Ethernet and ACM) < > CDC Composite Device(ACM and mass storage) < > MultifunctionComposite Gadget (EXPERIMENTAL) <M> HID Gadget < > EHCI Debug DeviceGadget < > USB Webcam Gadget
二,加载内核关于怎么使用编译生成的内核,已经写过好多文章了。这里大致提一下。 sudo mount /dev/nanda /mnt tar xvf pcduino_a10_hwpack_20131129.tar.xz cp kernel/* /mnt -f cp rootfs/lib/modules/3.4.29+ /lib/modules/ vim /etc/modules #添加下面内容 sw_usb_udc g_hid
三,测试驱动这里测试用到的是linux-sunxi/Documentation/usb gadget_hid.c (7.04 KB, 下载次数: 0, 售价: 5 金钱) 里面的测试程序。
编译:gcc gadget_hid.c 运行: root@ubuntu:/home/ubuntu# ./a.out/dev/hidg0 k # 键盘 keyboardoptions: --hold --left-ctrl --right-ctrl --left-shift --right-shift --left-alt --right-alt --left-meta --right-meta
keyboardvalues: [a-z]or --return --esc --bckspc --tab --spacebar --caps-lock --f1 --f2 --f3 --f4 --f5 --f6 --f7 --f8 --f9 --f10 --f11 --f12 --insert --home --pageup --del --end --pagedown --right --left --down --kp-enter --up --num-lock 根据提示输入: a b c d e f 你电脑上可以看到已经有显示了。 root@ubuntu:/home/ubuntu# ./a.out/dev/hidg1 m #鼠标 mouseoptions: --hold --b1 --b2 --b3
mousevalues: Twosigned numbers --quit to close 说明一下 --b1 10 10 执行这个的时候,相当于鼠标左键。 --b2 1 执行这个的时候,相等于鼠标右键 --b3 -10 100 这个相当于移动鼠标。 四,用joystick做鼠标 这里代码太多了,今天写了一天,我就不贴,你可以到 https://github.com/Pillar1989/arduino 我git上面下载,直接运行output/test/usb joystick接的是pcDuino的A4和A5,由于里面有个delay(500)。所有移动的时候桌面有些卡顿。具体的演示,就看你自己的了。 四,补充USB协议下面是自己整理的鼠标键盘的通信格式,如果你有兴趣可以研究一下。 鼠标发送给PC的数据每次4个字节 BYTE1 BYTE2 BYTE3 BYTE4 定义分别是: BYTE1 -- |--bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 |--bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 |--bit5: &n
|