如何在Linux中的USB设备端使一个(或一个)(API或驱动程序)处理所有USB串行请求?

时间:2018-10-11 08:48:03

标签: linux linux-kernel usb linux-device-driver usbserial

两天来,我一直在寻找一种方法来编写程序或制作驱动程序来处理USB设备端的USB串行请求。我是特制的USB设备,唯一的连接方法是通过USB串行端口,在我的PC上,我正在使用Google的Webusb API访问该设备上的终端控制台。因此,我可以发送Linux命令(即ifconfig),因此我想做的是构建可以在设备上运行的内容,以侦听通过USB串行端口发出的请求并发送适当的响应。例如,我有一个在Arduino上运行的 C 代码完全可以实现我想要的功能,但是问题是该代码仅适用于Arduino,而不能在我的设备上使用,这是c代码:

// Third-party WebUSB Arduino library
#include <WebUSB.h>

WebUSB WebUSBSerial(1 /* https:// */, "webusb.github.io/arduino/demos");

#define Serial WebUSBSerial

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // Wait for serial port to connect.
  }
  Serial.write("WebUSB FTW!");
  Serial.flush();
}

void loop()
{
  if (webUsbSerial)
  {
    if (webUsbSerial.available())
    {
      int byte = webUsbSerial.read();
      if (byte == 'h')
      {
        webUsbSerial.write("hallo from Arduino");
      }
      else
        webUsbSerial.write("sorry not a function yet!!!!");
      webUsbSerial.flush();
    }
  }
}

如本例所示,我检查命令是否为“ h ”,然后发送hello world。我想在装有Linux操作系统的设备上执行相同的操作, 我尝试了libusb,但我认为它是USB主机API,而不是USB设备。 预先谢谢你。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用类似的方法(如果可以使用Python):

import serial
#Assuming you're connecting an Arduino
try:
   ser = serial.Serial("/dev/ttyACM0",9600)
except:
   ser = serial.Serial("/dev/ttyACM1",9600)

while True:   
    print("Start")
    print("Waiting...")

    command = ser.read()
    try: command = str(command, "utf-8")
    except: command = str(command, "utf-16")

    if (command =="h"): print("Hello")

希望有帮助。