- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
一段时间以来,我一直在努力寻找一种方法来控制游戏 Buzz(有线,来自 Playstation 2)中的一组 Controller 上的灯。您可以在 Stack Overflow 上的问题中看到我的一些失败尝试
所以我转向了一种更基本的 linux 发送消息的方法,但通过将数据管道传输到/dev/hidraw0 也失败了。
然后我在 linux 存储库中发现了一个文件,它专门提到了蜂鸣器 Controller ( /linux/drivers/hid/hid-sony.c ),以及它们有灯的事实。它甚至有一个名为 buzz_set_leds 的方法(第 1512 行):
static void buzz_set_leds(struct sony_sc *sc)
所以我 100% 确定这是我正在尝试做的代码。
我尝试过将其包含在 c 文件中,但我无法包含 hid-sony,因为我似乎缺少这些文件。
#include <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/leds.h>
#include <linux/power_supply.h>
#include <linux/spinlock.h>
#include <linux/list.h>
#include <linux/idr.h>
#include <linux/input/mt.h>
#include "hid-ids.h"
在编译时,我得到这个错误:
hid-sony.c:29:26: fatal error: linux/device.h: No such file or directory
#include <linux/device.h>
^
compilation terminated.
抱歉,我是一名没有 C 语言背景的 Ruby 程序员。
如何获取这些缺失的“linux/”文件并从我的 C 库中引用它们?
最佳答案
非常感谢@brian-malehorn、@alan-au 和@colonel-thirty-two。我自己回答这个问题,因为他们都没有告诉我确切的答案,但他们引导我找到了答案。
这个具体问题的答案是“不要”。
潜在的问题是“我如何在 Linux 中打开这些灯?”我就是这样做的。
在/sys/class/leds中,当 Controller 被插入时,里面有这4个文件夹(不是实际文件夹,而是表示为文件系统中的文件夹)。
0003:054C:0002.0007::buzz1
0003:054C:0002.0007::buzz2
0003:054C:0002.0007::buzz3
0003:054C:0002.0007::buzz4
中间2个十六进制数字是来自lsusb的设备描述符的元素
Bus 002 Device 011: ID 054c:0002 Sony Corp. Standard HUB
最后一个数字似乎是 USB 设备和实例插入时的标识符。如果我拔下此设备并重新插入,最后一个数字会递增。
我现在无法弄清楚第一个是什么,但从理论上讲,它可能是 HID 接口(interface)类。这是来自 lsusb -vd 054c:0002
bInterfaceClass 3 Human Interface Device
这些文件夹中的每一个都包含一个包含数字 1 的 max_brightness"file",以及一个可用于控制它的亮度"file"。
我不得不打开这些的权限(这有点笨拙,但它做到了):
cd /sys/class/leds
sudo chmod 777 */brightness
然后我可以像这样点亮 LED:
echo 1 > 0003\:054C\:0002.0007\:\:buzz1/brightness
然后像这样关闭 LED:
echo 0 > 0003\:054C\:0002.0007\:\:buzz1/brightness
我还可以绕过所有那些复杂的数字变化和转义冒号:
echo 1 > *buzz1/brightness
关于c - 如何从 Linux 存储库调用此方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640120/
我是一名优秀的程序员,十分优秀!