linux - 如何向USB转并口发送字节来控制LED?

标签 linux c

我有一条 USB 转 25 针并行端口电缆。我将它连接到笔记本电脑并在/dev/usb/lp0 处获得一个端口,如果我将并行端口的 pin1/pin25 连接到 +/- LED,它就会亮起。

现在我将 LED 的 + 引脚移动到并行端口的引脚 2,并尝试将字节发送到端口,它应该亮起,但没有。

我使用命令outb(0xff,port),其中端口为0x378。我在这里缺少什么?

这是我的完整程序:

#include<stdlib.h>
#include<stdio.h>
#include<sys/io.h>
void main(void){
    int port=0x378;
    outb(0xff,port);
    outb(0x01,port+2);
    sleep(1);
    outb(0x00,port+2);
    printf("‌​End");
}

我还使用port=0x3bc检查了它,但没有工作。我什至通过连接 LED 的 + 检查了频闪引脚 1,它始终亮起但不会变低。端口地址有问题吗?

最佳答案

端口0x378是旧ISA并行端口所在的I/O位置。 USB 连接的并行端口不会出现在那里。不可能。我真的不太了解如何与 OHCI/UHCI/EHCI/xHCI 进行通信的底层细节,但我知道您所做的一切都必须通过 USB 主 Controller 。因此,在最低级别上,您需要查询 USB 总线,找到设备的 VID,与其打开某种通信,设置通信模式,然后一次发送/接收一个字节。

尝试将数据直接写入 /dev/usb/lp0 并看看会发生什么。您可能需要先执行某些操作来更改 ECP 模式,可能需要执行一些特殊的 ioctl。您可能需要深入研究该驱动程序的源代码才能真正找出要做什么。

如果失败,请查看是否可以为您的笔记本电脑找到一个底座。如果您的笔记本电脑恰好是商务级笔记本电脑,我注意到可用的扩展坞通常带有旧端口,并且当您尝试在此处使用它们时它们就会工作。

关于linux - 如何向USB转并口发送字节来控制LED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206556/

相关文章:

c - GDB 不理解代码

c - 带 ptrace 的内存调试器

Linux 开发 |程序文件的良好实践

linux - 管道错误时 CPU 使用率增加

c++ - 为什么我可以在库中使用 C++ 代码并从 C 程序调用。这是如何运作的?

c - 如何设计一个程序,使 GUI 和程序逻辑分离

C 程序使用 GCC 在 Linux 上仅提供 UTC 时间作为本地时间

linux - 如何一次取消保护跨越多个页面的内存区域?

android - 如何通过adb清除文件?

c - C 中变量和数组中的指针取消引用