将linux驱动程序转换为android usb api ch341

将linux驱动程序转换为android usb api ch341,android,c,linux-device-driver,Android,C,Linux Device Driver,那么 我正在尝试将ch341 linux驱动程序转换为android usb api。我对那些司机的事情非常了解,请允许我为下面那些愚蠢的问题向你道歉 CH341, know as usb serial cable hl-340 or even 0x1a86/0x7523, vid/pid. 我发现的驱动程序不是libusb,它是一个内核驱动程序(我认为更难阅读)。 是否可以将内核驱动程序转换为Google USB API? 我的意思是,内核驱动程序需要的所有东西都可以完成,或者至少对于这个

那么

我正在尝试将ch341 linux驱动程序转换为android usb api。我对那些司机的事情非常了解,请允许我为下面那些愚蠢的问题向你道歉

CH341, know as usb serial cable hl-340 or even 0x1a86/0x7523, vid/pid.
我发现的驱动程序不是libusb,它是一个内核驱动程序(我认为更难阅读)。

是否可以将内核驱动程序转换为Google USB API?

我的意思是,内核驱动程序需要的所有东西都可以完成,或者至少对于这个特定的驱动程序是这样的

我可以重新编码打开、配置、控制输入和输出。我不知道它是否工作,但我还没有收到错误消息

controlIn
代码部分:

private int controlIn(int request, int value, int index, byte[] buffer, int bufsize)
{
    int r;

    r = mConnection.controlTransfer(UsbConstants.USB_DIR_IN | 0x40, request, value, index,
            buffer, bufsize, DEFAULT_TIMEOUT);
    return r;
}
下面的代码,调用哪些函数来读取和写入设备? 或者,读写usb设备数据的过程是什么

static struct usb_serial_driver ch341_device = {
    .driver = {
        .owner  = THIS_MODULE,
        .name   = "ch341-uart",
    },
    .id_table          = id_table,
    .num_ports         = 1,
    .open              = ch341_open,
    .dtr_rts       = ch341_dtr_rts,
    .carrier_raised    = ch341_carrier_raised,
    .close             = ch341_close,
    .set_termios       = ch341_set_termios,
    .break_ctl         = ch341_break_ctl,
    .tiocmget          = ch341_tiocmget,
    .tiocmset          = ch341_tiocmset,
    .tiocmiwait        = usb_serial_generic_tiocmiwait,
    .read_int_callback = ch341_read_int_callback,
    .port_probe        = ch341_port_probe,
    .port_remove       = ch341_port_remove,
    .reset_resume      = ch341_reset_resume,
};

感谢

从理论上讲,您最终可以调整内核驱动程序(不过要注意许可的影响!),但在实践中,最好使用内核驱动程序作为提示,说明您正在处理的设备类型,或者在极端情况下,是什么必要的操作。USB串行数据线有很多标准方案被广泛复制,现在有机会了解内核驱动程序所做的工作,这将有助于调整其他Android USB API解决方案以适应不同的数据线。通常,USB系列不是很复杂。此外,您可以考虑将这个内核驱动程序与一个可以找到Android示例代码的电缆的内核驱动程序进行比较。如果两个内核驱动程序之间没有很大的风格差异,那么在表单上的不同需要在另一个内核中有类似的不同。