                                                             -*- org -*-

* Overview

The Multifunction Composite Gadget (or g_multi) is a composite gadget
that makes extensive use of the composite framework to provide
a... multifunction gadget.

In it's standard configuration it provides a single USB configuration
with RNDIS[1] (that is Ethernet), USB CDC[2] ACM (that is serial) and
USB Mass Storage functions.

A CDC ECM (Ethernet) function may be turned on via a Kconfig option
and RNDIS can be turned off.  If they are both enabled the gadget will
have two configurations -- one with RNDIS and another with CDC ECM[3].

Please not that if you use non-standard configuration (that is enable
CDC ECM) you may need to change vendor and/or product ID.

* Host drivers

To make use of the gadget one needs to make it work on host side --
without that there's no hope of achieving anything with the gadget.
As one might expect, things one need to do very from system to system.

** Linux host drivers

Since the gadget uses standard composite framework and appears as such
to Linux host it does not need any additional drivers on Linux host
side.  All the functions are handled by respective drivers developed
for them.

This is also true for two configuration set-up with RNDIS
configuration being the first one.  Linux host will use the second
configuration with CDC ECM which should work better under Linux.

** Windows host drivers

For the gadget two work under Windows two conditions have to be met:

*** Detecting as composite gadget

First of all, Windows need to detect the gadget as an USB composite
gadget which on its own have some conditions[4].  If they are met,
Windows lets USB Generic Parent Driver[5] handle the device which then
tries to much drivers for each individual interface (sort of, don't
get into too many details).

The good news is: you do not have to worry about most of the
conditions!

The only thing to worry is that the gadget has to have a single
configuration so a dual RNDIS and CDC ECM gadget won't work unless you
create a proper INF -- and of course, if you do submit it!

*** Installing drivers for each function

The other, trickier thing is making Windows install drivers for each
individual function.

For mass storage it is trivial since Windows detect it's an interface
implementing USB Mass Storage class and selects appropriate driver.

Things are harder with RDNIS and CDC ACM.

**** RNDIS

To make Windows select RNDIS drivers for the first function in the
gadget, one needs to use the [[file:linux.inf]] file provided with this
document.  It "attaches" Window's RNDIS driver to the first interface
of the gadget.

Please note, that while testing we encountered some issues[6] when
RNDIS was not the first interface.  You do not need to worry abut it
unless you are trying to develop your own gadget in which case watch
out for this bug.

**** CDC ACM

Similarly, [[file:linux-cdc-acm.inf]] is provided for CDC ACM.

**** Customising the gadget

If you intend to hack the g_multi gadget be advised that rearranging
functions will obviously change interface numbers for each of the
functionality.  As an effect provided INFs won't work since they have
interface numbers hard-coded in them (it's not hard to change those
though[7]).

This also means, that after experimenting with g_multi and changing
provided functions one should change gadget's vendor and/or product ID
so there will be no collision with other customised gadgets or the
original gadget.

Failing to comply may cause brain damage after wondering for hours why
things don't work as intended before realising Windows have cached
some drivers information (changing USB port may sometimes help plus
you might try using USBDeview[8] to remove the phantom device).

**** INF testing

Provided INF files have been tested on Windows XP SP3, Windows Vista
and Windows 7, all 32-bit versions.  It should work on 64-bit versions
as well.  It most likely won't work on Windows prior to Windows XP
SP2.

** Other systems

At this moment, drivers for any other systems have not been tested.
Knowing how MacOS is based on BSD and BSD is an Open Source it is
believed that it should (read: "I have no idea whether it will") work
out-of-the-box.

For more exotic systems I have even less to say...

Any testing and drivers *are* *welcome*!

* Authors

This document has been written by Michal Nazarewicz
([[mailto:mina86@mina86.com]]).  INF files have been hacked with
support of Marek Szyprowski ([[mailto:m.szyprowski@samsung.com]]) and
Xiaofan Chen ([[mailto:xiaofanc@gmail.com]]) basing on the MS RNDIS
template[9], Microchip's CDC ACM INF file and David Brownell's
([[mailto:dbrownell@users.sourceforge.net]]) original INF files.

* Footnotes

[1] Remote Network Driver Interface Specification,
[[http://msdn.microsoft.com/en-us/library/ee484414.aspx]].

[2] Communications Device Class Abstract Control Model, spec for this
and other USB classes can be found at
[[http://www.usb.org/developers/devclass_docs/]].

[3] CDC Ethernet Control Model.

[4] [[http://msdn.microsoft.com/en-us/library/ff537109(v=VS.85).aspx]]

[5] [[http://msdn.microsoft.com/en-us/library/ff539234(v=VS.85).aspx]]

[6] To put it in some other nice words, Windows failed to respond to
any user input.

[7] You may find [[http://www.cygnal.org/ubb/Forum9/HTML/001050.html]]
useful.

[8] http://www.nirsoft.net/utils/usb_devices_view.html

[9] [[http://msdn.microsoft.com/en-us/library/ff570620.aspx]]
