USB-OTG "virtual hub" some help/ideas/comments please.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've looked around the net and not found anything, although that might
be because I'm using the wrong search words, for something similar to
the following.

What I'm looking for is, kind of, in two parts.

One is some form of USB-OTG gadget driver virtual hub, so that a
peripheral device connected to a PC would fake it's self into appearing
as a standard physical hub. Obviously such a hub would either have to
fake its device id's/types/sub/etc. to pretend to be an existing hub, or
would require a new id, etc; properly registered.

I guess the main question to the above is "why?" Well as devices are
becoming more and more capable they are no longer either individual
devices, keyboard/disk/printer/etc. or limited to being accessed as a
couple of types, eg. a camera can be a capture device and/or a mass
storage device.

Buy presenting the device as a hub it would be possible in user-space,
both on the host and the device, to allow... 
(a) a simple consistent interface and run-time selection and set-up of
multiple device types.
(b) physical/virtual device pass-through. 
(c) potentially true two way independent simultaneous control of both
host controlling device and device controlling host.


Practical uses/implications/problems.


	(a) is obvious and I'm guessing quite easy to implement, a hub is a hub
even if virtual. It would reduce the requirement for both a single and
multiple type/function gadget interface(s) so all the interfaces are
single function interfaces as far as gadget drivers are concerned. For
multi-device hardware devices, such as a camera, the specification
doesn't change but there is no reason such a device couldn't implement a
virtual hub approach.


	The following is kind of the second part.
	(b) at present the device types are fairly limited:- Ethernet/
RNDIS/mass storage/serial/gadgetfs. However if a device has other
physical/virtual devices, USB keyboard/USB LCD screen/USB touch-screen
component/virtual keyboard/etc; it would be useful to allow these
devices to be shown and used by the host and/or the gadget either by
direct pass-through or an intermediate task.



	Direct passthough:-

	To explain direct pass-through I guess I should give an example. I have
a beagleboard, connected to the beagleboard is a real USB keyboard and
mouse, a virtual on-screen keyboard, an external USB HD, and a 7"
touch-screen. Somehow magically this, including battery, is not much
bigger than the 7" touch-screen and I can use this set-up to store RAW
photographs directly from my DSLR and do limited edits and type notes
while out and about and convert from RAW to JPEG.

	When I get home I plug this into my PC host, at this point the
beagleboard and PC negotiate and decide that the keyboards (USB &
Virtual) and screens (LCD and touch component) will become direct
pass-though devices. The beagleboard then de-allocates these devices
from its self and attaches them to the virtual hub. Now while the
beagleboard has to do some processing of these devices its not much more
than read/store/forward. The PC sees 2 new keyboards, a USB display, and
a USB touch-screen component and handles them as if they were directly
attached via a standard hub.



	Intermediate tasks:-

	At the same time the above was going on the beagleboard also presented
an Ethernet gadget, established a network IP, and fired up samba to
share the USB HD.
	Alternatively it set up a USB mass storage device.




	(c) This part is the hardest to explain, and would possibly require
changes to other parts of the kernel/X11/god knows what else... but then
again, maybe not!

	Using my above example I package the whole lot up and call it a
Graphical Storage and Editing Tablet, GSET. When the GSET is connected
to the PC this time they decide that the LCD and touch-screen component
will be shared somehow. Some of the work will be handled by the PC some
by the GSET.
	
	Double clicking the blank GSET screen opens a file edit dialogue and
shows the content of the GSET disk, upon opening a file GIMP bursts into
life on the PC and displays the picture on the large display connected
to the PC. The GSET also displays just the picture (none of the GIMP
menus etc.) scaled down with 4 borders. Touching and scrolling the left
border scales the picture displayed on the GSET, top border scales the
picture on the PC monitor. Bottom border scrolls the picture on the GSET
and PC monitor left/right and likewise right border scrolls the picture
up/down. Picture scrolling is proportionate to the relative scaling
between the PC and GSET displays.

	Doing anything inside the borders with the GSET screen acts in the same
way a normal graphics tablet does conversing with the PC, which acts and
then updates the PC display returns the changed data to the the GSET
display which then updates the sub-window within the borders.

	The corners of the GSET could be programmed to do specific tasks, both
in collaboration with the PC or independently just on the GSET depending
on what application is running on the PC side.


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux