C、C++ 通过 USB 适配器写入并口 (LINUX)

C,C++ write on parallel port via USB adapter (LINUX)

正如我在标题中所说,我在 Lubuntu 上使用并行端口时遇到了一些问题。(我使用的是 USB 到并行适配器) 我写了一些在我的另一台 linux PC(有 parport)上运行良好的代码:

#include <stdio.h>
#include <unistd.h> //sleep()
#include <sys/io.h> //outb() ioperm()

#define LPT1 0x0378
#define HIGH 255
#define LOW 0

int main() 
{
    if (ioperm(LPT1,1,1) == -1) //set LPT permissions
    {
        printf("PORTE CHIUSE, ESCO!\n");
        return -1;
    }
    printf("PORTE APERTE SU %d\n", LPT1);
    while (1)
    {
        outb(HIGH, LPT1); //LED blinking on D0-D7
        sleep(5);
        outb(LOW, LPT1);
        sleep(5);
    }
    return 0;
}

不幸的是,此代码在带有适配器的 PC 上不起作用。我认为这是由于虚拟端口与物理端口的地址不同,但无论如何我不知道如何解决虚拟端口.. 那么,我应该在代码中更改什么以使其与适配器一起工作?我应该将什么地址(如果有的话)放入成本表 "LPT1"?

在此先感谢大家! ;) 晚上好,Matteo。

由于您的计算机上没有实际的并行端口,因此 I/O 地址 0x0378 没有任何内容。由于您使用的是 USB 转并口适配器,因此并口是适配器,而不是您的 PC。对于 Linux 内核,您的 USB 适配器看起来像一个标准的 USB 打印机设备。要访问您需要通过内核的 USB 打印机设备驱动程序。不幸的是,我不知道它是否提供了您正在寻找的低级别访问权限。您可以通过向它发送数据流来使用它来打印内容,但我认为您无法操纵各个引脚的状态。

在查看 USB Printer Class Specification 后,它似乎没有提供任何方式来按照您想要的方式操作数据引脚。