Linux Serial Device Server over USB? - c

I have an embedded Linux solution and want to create a command service over serial USB. The idea being that when a computer connects to my embedded via USB, they see a serial device and send serial commands to me through that port and I send responses back.
I need some help in the direction to proceed. Do I need to emulate a serial device so they see me as a COM port? Is there build in Linux solutions to broadcast my details as a serial device? Are there code examples? I can see block devices connect with my embedded solution like a USB storage device. When I plug into another computer, I would like it to see me as a serial COM port.
I just need help in the direction of which path I should go down to solve this.
Thanks in advance.

What you are looking for is the Linux USB serial gadget. The Linux USB gadgets framework allows devices to behave as a variety of standard USB devices, including serial devices, Ethernet adapters, and mass storage devices.
Note that USB gadgets will only work on targets with a USB controller that can be set to operate as a USB device. Not all USB controllers and target devices are compatible with this configuration. For instance, most PCs have a host-only USB controller, and the Raspberry Pi Model B is not compatible with gadgets because it contains an embedded USB hub upstream of the USB ports. (However, the Pi Zero is fully compatible with gadgets.)

Related

Is there any way to make an embedded ARM Linux device(as a USB device) aware that it's been enumerated by a USB host?

Is there any way to make an embedded ARM Linux device(as a USB device) aware that it's been enumerated by a USB host?
I'm developing a printer based on an embedded ARM Linux in C. When the USB cable is plugged in, I need to know whether the USB is plugged into a power adapter or a computer that has a driver on it.
Is there any way to achieve that?

USB host hotplug detection in embedded usb gadget device

We are developing an embedded device running Linux, which needs to act as a usb serial gadget and connect to android phones for different types of data transfer. In order to initiate the communication with the host usb (android phone), I need to detect whenever the USB host is connected to the device. I came to know about writing udev rules in order to run an executable on usb host insertion/removal, but We already have a main C program that manages all of the device's main functionality. I would be running a thread in this program which would be responsible for this communication. Is there any way by which I can receive the USB hotplug event in this thread. I am really trying to avoid using loops in this thread so that it doesn't get CPU intensive. So is there any way by which I can receive the USB hotplug event?

Verify whether two usb devices are connected on the same hub

I have a microcontroller board which has a USB hub to which several CP2108 USB to serial modules are connected and one PIC Microcontroller is connected.
The USB hub is connected to Laptop USB Port..
The CP2108 devices are assigned /dev/ttyUSB0, /dev/ttyUSB1 ID's, whereas the PIC Microcontroller is assigned a /dev/usb/abc.
If I connect another USB device to Laptop USB Port, it will get /dev/ttyUSB2
I want to verify whether /dev/ttyUSB and /dev/usb/abc are on the same hub and not on different one..
Is there any way to find out through code.. I tried to look into sysfs , but I am unable to find out the difference

How to dump/burn program into LPC2148

I have LPC2148 daughter board but I am not able to dump/burn code into it, and it doesn't have any usb connector to dump code.
I read on internet by using FT232RL I can able dump code into LPC2148 but I am not able to do so.
please give me solution
thank you..!
The chip supports In-System Programming (ISP) via an on-chip boot loader ROM.
From the User Manual UM10139:
Programming of the Flash memory may be accomplished in several ways:
over the serial built-in JTAG interface, using In System Programming
(ISP) and UART0, or by means of In Application Programming (IAP)
capabilities.
The function of the FT232RL you mentioned is to act as a USB/UART bridge and is necessary primarily because modern PCs lack legacy RS-232 serial ports. You can in fact purchase a USB-Serial cable or adapter which will contain a bridge chip such as the FT232RL. Most of these use RS-232 line level signals, so you would still need an RS-232 line driver/receiver to connect then to your board (if your board has a serial port, it probably already has a line transceiver and you can connect directly to that). It is possible from specialist suppliers including FTDI themselves to get a USB cable with integrated FT232 and bare TTL level connections to connect directly to LPC2148 UART0 Rx/Tx lines.
If your board does not already expose a UART0 serial port and the necessart control to start the boot loader, a Serial Port Bootloader Interface board is available. For that you may then also need a USB/Serial adapter or a PC with a legacy serial ports.
Once you have a suitable serial connection, you will need the LPC2000 Flash Utility software to run on the PC.
The JTAG option is however faster, and more powerful since the JTAG is both a programming and debugging port. With a suitable toolchain and JTAG adapter it is possible to program and execute code with source-level PC hosted debugging including break pointing, data watching and single stepping of the code.

How to do this: embedded USB-Host communication with plugged USB-Device

I am currently practising with USB programming on an AT91SAM9G20-Evaluation Kit. I learned much about USB devices and USB device port drivers while "playing" with the ATMEL provided USB device port projects (CDC-driver, ..).
But now I'd like to write a small driver to controll a wireless stick
which I plugged into one of the boards USB-A Host Ports.
I read a lot on Stack Overflow, the OpenHCI specification and even found some libraries on the net, but I am not sure if it's a good way to implement my own stack without any "good" knowledge in USB Host Port programming.
Is there a small and easy way to control the wireless-stick at the boards USB Host port? (like using the USART-Interfaces?).
I am also keen to hear hints on how to implement RTUSB or libUSB in to the AT91.
You can download AT91LIB version 1.9 from atmel from this page
The usb host libraries are under at91lib/usb/host. They're not the complete package you need though since they're just the OHCI driver -- you still need a USB driver and class drivers to implement what you want.
You could try an RTOS with USB Host support like rt-usb32

Resources