Turning USB into a terminal

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
0
down vote

favorite












I have a hardware device that connects via USB without creating a specific /dev/something. It does change the time on /dev/ptmx and /dev/char but that's about it. All I know are the VID:PID of the device and the documentation says that the USB (should) act as a serial device at 921600 8N1. If I were able to connect I should be able to send simple text commands (SCSI) to it, like on a serial interface.



I'm pretty sure I can use libusd or libhid to connect to it, but it's time consuming writing communication code from scratch. Isn't there some linux trick to create a /dev/ttySomething so I can communicate with minicom or simple C programs ?



$ dmesg
usb 1-2: new full-speed USB device number 7 using xhci_hcd
usb 1-2: New USB device found, idVendor=104d, idProduct=3001
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: ESP301 Motion Control
usb 1-2: Manufacturer: NEWPORT Corp.
usb 1-2: SerialNumber: 0000000000000000

$ lsusb -v
Bus 001 Device 007: ID 104d:3001 Newport Corporation
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x104d Newport Corporation
idProduct 0x3001
bcdDevice 1.01
iManufacturer 1 NEWPORT Corp.
iProduct 2 ESP301 Motion Control
iSerial 3 0000000000000000
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 2
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval 1
Device Status: 0x0001
Self Powered









share|improve this question























  • If it should act as a serial device, it likely implements one of the standard USB classes. First step is to use lsusb -v etc. to find out if the descriptors say that it actually does, second step is to check dmesg after plugin to find out if the correct modules get loaded. Depending on the outcome, you know where the problem is (device providing non-standard descriptors, kernel modules not present etc.).
    – dirkt
    Nov 29 at 10:27










  • I added lsusb to my question
    – dargaud
    Nov 29 at 10:41










  • As you can see, it's a vendor specific class. So either there is a vendor specific way to switch the USB interface to a standard class (did you get any Windows programs for the device?), or you do have to implement the vendor specific protocol (whatever it is) yourself, via libusb or otherwise. In the current configuration, it's also not a HID device (though HID devices are not usually used for serial devices in the first place).
    – dirkt
    Nov 29 at 11:31







  • 1




    Googling finds this manual with a code example at the end, using Newport.ESP301.CommandInterface.dll, which seems to implement a virtual Windows COM-port. In your place I'd run this example in a VM and monitor USB traffic to see how the protocol works, and if it switches to a standard USB configuration first.
    – dirkt
    Nov 29 at 11:35










  • OK, thanks, I can use libusb or even more simply a direct physical serial cable on another port of the device; so I guess I was wrong that there was a simple linux way to turn a USB into a pseudo-serial terminal.
    – dargaud
    Nov 30 at 9:46














up vote
0
down vote

favorite












I have a hardware device that connects via USB without creating a specific /dev/something. It does change the time on /dev/ptmx and /dev/char but that's about it. All I know are the VID:PID of the device and the documentation says that the USB (should) act as a serial device at 921600 8N1. If I were able to connect I should be able to send simple text commands (SCSI) to it, like on a serial interface.



I'm pretty sure I can use libusd or libhid to connect to it, but it's time consuming writing communication code from scratch. Isn't there some linux trick to create a /dev/ttySomething so I can communicate with minicom or simple C programs ?



$ dmesg
usb 1-2: new full-speed USB device number 7 using xhci_hcd
usb 1-2: New USB device found, idVendor=104d, idProduct=3001
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: ESP301 Motion Control
usb 1-2: Manufacturer: NEWPORT Corp.
usb 1-2: SerialNumber: 0000000000000000

$ lsusb -v
Bus 001 Device 007: ID 104d:3001 Newport Corporation
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x104d Newport Corporation
idProduct 0x3001
bcdDevice 1.01
iManufacturer 1 NEWPORT Corp.
iProduct 2 ESP301 Motion Control
iSerial 3 0000000000000000
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 2
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval 1
Device Status: 0x0001
Self Powered









share|improve this question























  • If it should act as a serial device, it likely implements one of the standard USB classes. First step is to use lsusb -v etc. to find out if the descriptors say that it actually does, second step is to check dmesg after plugin to find out if the correct modules get loaded. Depending on the outcome, you know where the problem is (device providing non-standard descriptors, kernel modules not present etc.).
    – dirkt
    Nov 29 at 10:27










  • I added lsusb to my question
    – dargaud
    Nov 29 at 10:41










  • As you can see, it's a vendor specific class. So either there is a vendor specific way to switch the USB interface to a standard class (did you get any Windows programs for the device?), or you do have to implement the vendor specific protocol (whatever it is) yourself, via libusb or otherwise. In the current configuration, it's also not a HID device (though HID devices are not usually used for serial devices in the first place).
    – dirkt
    Nov 29 at 11:31







  • 1




    Googling finds this manual with a code example at the end, using Newport.ESP301.CommandInterface.dll, which seems to implement a virtual Windows COM-port. In your place I'd run this example in a VM and monitor USB traffic to see how the protocol works, and if it switches to a standard USB configuration first.
    – dirkt
    Nov 29 at 11:35










  • OK, thanks, I can use libusb or even more simply a direct physical serial cable on another port of the device; so I guess I was wrong that there was a simple linux way to turn a USB into a pseudo-serial terminal.
    – dargaud
    Nov 30 at 9:46












up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have a hardware device that connects via USB without creating a specific /dev/something. It does change the time on /dev/ptmx and /dev/char but that's about it. All I know are the VID:PID of the device and the documentation says that the USB (should) act as a serial device at 921600 8N1. If I were able to connect I should be able to send simple text commands (SCSI) to it, like on a serial interface.



I'm pretty sure I can use libusd or libhid to connect to it, but it's time consuming writing communication code from scratch. Isn't there some linux trick to create a /dev/ttySomething so I can communicate with minicom or simple C programs ?



$ dmesg
usb 1-2: new full-speed USB device number 7 using xhci_hcd
usb 1-2: New USB device found, idVendor=104d, idProduct=3001
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: ESP301 Motion Control
usb 1-2: Manufacturer: NEWPORT Corp.
usb 1-2: SerialNumber: 0000000000000000

$ lsusb -v
Bus 001 Device 007: ID 104d:3001 Newport Corporation
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x104d Newport Corporation
idProduct 0x3001
bcdDevice 1.01
iManufacturer 1 NEWPORT Corp.
iProduct 2 ESP301 Motion Control
iSerial 3 0000000000000000
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 2
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval 1
Device Status: 0x0001
Self Powered









share|improve this question















I have a hardware device that connects via USB without creating a specific /dev/something. It does change the time on /dev/ptmx and /dev/char but that's about it. All I know are the VID:PID of the device and the documentation says that the USB (should) act as a serial device at 921600 8N1. If I were able to connect I should be able to send simple text commands (SCSI) to it, like on a serial interface.



I'm pretty sure I can use libusd or libhid to connect to it, but it's time consuming writing communication code from scratch. Isn't there some linux trick to create a /dev/ttySomething so I can communicate with minicom or simple C programs ?



$ dmesg
usb 1-2: new full-speed USB device number 7 using xhci_hcd
usb 1-2: New USB device found, idVendor=104d, idProduct=3001
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: ESP301 Motion Control
usb 1-2: Manufacturer: NEWPORT Corp.
usb 1-2: SerialNumber: 0000000000000000

$ lsusb -v
Bus 001 Device 007: ID 104d:3001 Newport Corporation
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x104d Newport Corporation
idProduct 0x3001
bcdDevice 1.01
iManufacturer 1 NEWPORT Corp.
iProduct 2 ESP301 Motion Control
iSerial 3 0000000000000000
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 2
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval 1
Device Status: 0x0001
Self Powered






usb c serial-port minicom






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 29 at 10:41

























asked Nov 28 at 13:55









dargaud

2211310




2211310











  • If it should act as a serial device, it likely implements one of the standard USB classes. First step is to use lsusb -v etc. to find out if the descriptors say that it actually does, second step is to check dmesg after plugin to find out if the correct modules get loaded. Depending on the outcome, you know where the problem is (device providing non-standard descriptors, kernel modules not present etc.).
    – dirkt
    Nov 29 at 10:27










  • I added lsusb to my question
    – dargaud
    Nov 29 at 10:41










  • As you can see, it's a vendor specific class. So either there is a vendor specific way to switch the USB interface to a standard class (did you get any Windows programs for the device?), or you do have to implement the vendor specific protocol (whatever it is) yourself, via libusb or otherwise. In the current configuration, it's also not a HID device (though HID devices are not usually used for serial devices in the first place).
    – dirkt
    Nov 29 at 11:31







  • 1




    Googling finds this manual with a code example at the end, using Newport.ESP301.CommandInterface.dll, which seems to implement a virtual Windows COM-port. In your place I'd run this example in a VM and monitor USB traffic to see how the protocol works, and if it switches to a standard USB configuration first.
    – dirkt
    Nov 29 at 11:35










  • OK, thanks, I can use libusb or even more simply a direct physical serial cable on another port of the device; so I guess I was wrong that there was a simple linux way to turn a USB into a pseudo-serial terminal.
    – dargaud
    Nov 30 at 9:46
















  • If it should act as a serial device, it likely implements one of the standard USB classes. First step is to use lsusb -v etc. to find out if the descriptors say that it actually does, second step is to check dmesg after plugin to find out if the correct modules get loaded. Depending on the outcome, you know where the problem is (device providing non-standard descriptors, kernel modules not present etc.).
    – dirkt
    Nov 29 at 10:27










  • I added lsusb to my question
    – dargaud
    Nov 29 at 10:41










  • As you can see, it's a vendor specific class. So either there is a vendor specific way to switch the USB interface to a standard class (did you get any Windows programs for the device?), or you do have to implement the vendor specific protocol (whatever it is) yourself, via libusb or otherwise. In the current configuration, it's also not a HID device (though HID devices are not usually used for serial devices in the first place).
    – dirkt
    Nov 29 at 11:31







  • 1




    Googling finds this manual with a code example at the end, using Newport.ESP301.CommandInterface.dll, which seems to implement a virtual Windows COM-port. In your place I'd run this example in a VM and monitor USB traffic to see how the protocol works, and if it switches to a standard USB configuration first.
    – dirkt
    Nov 29 at 11:35










  • OK, thanks, I can use libusb or even more simply a direct physical serial cable on another port of the device; so I guess I was wrong that there was a simple linux way to turn a USB into a pseudo-serial terminal.
    – dargaud
    Nov 30 at 9:46















If it should act as a serial device, it likely implements one of the standard USB classes. First step is to use lsusb -v etc. to find out if the descriptors say that it actually does, second step is to check dmesg after plugin to find out if the correct modules get loaded. Depending on the outcome, you know where the problem is (device providing non-standard descriptors, kernel modules not present etc.).
– dirkt
Nov 29 at 10:27




If it should act as a serial device, it likely implements one of the standard USB classes. First step is to use lsusb -v etc. to find out if the descriptors say that it actually does, second step is to check dmesg after plugin to find out if the correct modules get loaded. Depending on the outcome, you know where the problem is (device providing non-standard descriptors, kernel modules not present etc.).
– dirkt
Nov 29 at 10:27












I added lsusb to my question
– dargaud
Nov 29 at 10:41




I added lsusb to my question
– dargaud
Nov 29 at 10:41












As you can see, it's a vendor specific class. So either there is a vendor specific way to switch the USB interface to a standard class (did you get any Windows programs for the device?), or you do have to implement the vendor specific protocol (whatever it is) yourself, via libusb or otherwise. In the current configuration, it's also not a HID device (though HID devices are not usually used for serial devices in the first place).
– dirkt
Nov 29 at 11:31





As you can see, it's a vendor specific class. So either there is a vendor specific way to switch the USB interface to a standard class (did you get any Windows programs for the device?), or you do have to implement the vendor specific protocol (whatever it is) yourself, via libusb or otherwise. In the current configuration, it's also not a HID device (though HID devices are not usually used for serial devices in the first place).
– dirkt
Nov 29 at 11:31





1




1




Googling finds this manual with a code example at the end, using Newport.ESP301.CommandInterface.dll, which seems to implement a virtual Windows COM-port. In your place I'd run this example in a VM and monitor USB traffic to see how the protocol works, and if it switches to a standard USB configuration first.
– dirkt
Nov 29 at 11:35




Googling finds this manual with a code example at the end, using Newport.ESP301.CommandInterface.dll, which seems to implement a virtual Windows COM-port. In your place I'd run this example in a VM and monitor USB traffic to see how the protocol works, and if it switches to a standard USB configuration first.
– dirkt
Nov 29 at 11:35












OK, thanks, I can use libusb or even more simply a direct physical serial cable on another port of the device; so I guess I was wrong that there was a simple linux way to turn a USB into a pseudo-serial terminal.
– dargaud
Nov 30 at 9:46




OK, thanks, I can use libusb or even more simply a direct physical serial cable on another port of the device; so I guess I was wrong that there was a simple linux way to turn a USB into a pseudo-serial terminal.
– dargaud
Nov 30 at 9:46















active

oldest

votes











Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f484668%2fturning-usb-into-a-terminal%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f484668%2fturning-usb-into-a-terminal%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown






Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?