[PATCHv2 0/7] Equivalent of g_midi with configfs

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

 



This series aims at integrating configfs into hid, the way
it has been done for acm, ncm, ecm, eem, ecm subset, rndis, obex, phonet,
mass_storage, FunctionFS, loopback, sourcesink, uac1, uac2, uvc and hid.
It concludes converting functions explicitly available as f_xyz.c files
to configfs.

Rebased onto Felipe's testing/next.

Since Felipe has closed his tree for 3.18, this is meant for 3.19.

v1..v2:
-fixed Kconfig entry for standalone function module building

BACKWARD COMPATIBILITY
======================

Please note that the old g_midi.ko is still available and works.

USING THE NEW "GADGET"
======================

Please refer to this post:

http://www.spinics.net/lists/linux-usb/msg76388.html

for general information from Sebastian on how to use configfs-based
gadgets (*).

With configfs the procedure is as follows, compared to the information
mentioned above (*):

instead of mkdir functions/acm.ttyS1 do

mkdir functions/hid.<instance name>

e.g. mkdir functions/midi.usb0.

In the midi.usb0 directory there will be the following attributes:

	buflen		- MIDI buffer length
	id		- ID string for the USB MIDI adapter
	in_ports	- number of MIDI input ports
	index		- index value for the USB MIDI adapter
	out_ports	- number of MIDI output ports
	qlen		- USB read request queue length

Below is a script which creates a midi gadget:

# modprobe libcomposite
# mount none cfg -t configfs
# mkdir cfg/usb_gadget/g1
# cd cfg/usb_gadget/g1
# mkdir configs/c.1
# mkdir functions/midi.usb0
# mkdir strings/0x409
# mkdir configs/c.1/strings/0x409
# echo 0x0004 > idProduct
# echo 0x17b3 > idVendor
# echo serial > strings/0x409/serialnumber
# echo manufacturer > strings/0x409/manufacturer
# echo MIDI Gadget > strings/0x409/product
# echo "Conf 1" > configs/c.1/strings/0x409/configuration
# echo 120 > configs/c.1/MaxPower
# ln -s functions/midi.usb0 configs/c.1
# echo 12480000.hsotg > UDC

TESTING THE FUNCTION
====================

Run the gadget as above. There are two cases: playing a mid from the gadget to
the host and playing a mid from the host to the gadget.

1) Playing a mid from the gadget to the host
host)

$ arecordmidi -l
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 24:0    MIDI Gadget                      MIDI Gadget MIDI 1
$ arecordmidi -p 24:0 from_gadget.mid

gadget)

$ aplaymidi -l
 Port    Client name                      Port name
 20:0    f_midi                           f_midi

$ aplaymidi -p 20:0 to_host.mid

2) Playing a mid from the host to the gadget
gadget)

$ arecordmidi -l
 Port    Client name                      Port name
 20:0    f_midi                           f_midi

$ arecordmidi -p 20:0 from_host.mid

host)

$ aplaymidi -l
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 24:0    MIDI Gadget                      MIDI Gadget MIDI 1

$ aplaymidi -p24:0 to_gadget.mid

The from_gadget.mid should sound identical to the to_host.mid.
The from_host.id should sound identical to the to_gadget.mid.

MIDI files can be played to speakers/headphones with e.g. timidity installed

$ aplaymidi -l
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 24:0    MIDI Gadget                      MIDI Gadget MIDI 1
128:0    TiMidity                         TiMidity port 0
128:1    TiMidity                         TiMidity port 1
128:2    TiMidity                         TiMidity port 2
128:3    TiMidity                         TiMidity port 3

$ aplaymidi -p 128:0 file.mid

MIDI ports can be logically connected using the aconnect utility, e.g.:

$ aconnect 24:0 128:0 # try it on the host

After the gadget's MIDI port is connected to timidity's MIDI port,
whatever is played at the gadget side with aplaymidi -l is audible
in host's speakers/headphones.

Andrzej Pietrasiewicz (7):
  usb: gadget: f_midi: enable use of the index parameter
  usb: gadget: f_midi: check kstrdup() return value
  usb: gadget: f_midi: convert to new function interface with backward
    compatibility
  usb: gadget: midi: convert to new interface of f_midi
  usb: gadget: f_midi: remove compatibility layer
  usb: gadget: f_midi: use usb_gstrings_attach
  usb: gadget: f_midi: add configfs support

 Documentation/ABI/testing/configfs-usb-gadget-midi |  12 +
 drivers/usb/gadget/Kconfig                         |  17 +
 drivers/usb/gadget/function/Makefile               |   2 +
 drivers/usb/gadget/function/f_midi.c               | 364 ++++++++++++++++-----
 drivers/usb/gadget/function/u_midi.h               |  40 +++
 drivers/usb/gadget/legacy/Kconfig                  |   1 +
 drivers/usb/gadget/legacy/gmidi.c                  |  43 ++-
 7 files changed, 383 insertions(+), 96 deletions(-)
 create mode 100644 Documentation/ABI/testing/configfs-usb-gadget-midi
 create mode 100644 drivers/usb/gadget/function/u_midi.h

-- 
1.9.1

--
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