Re: [PATCHv2 0/7] Equivalent of g_midi with configfs

2014-11-03 Thread Andrzej Pietrasiewicz

W dniu 16.10.2014 o 13:33, Andrzej Pietrasiewicz pisze:

This series aims at integrating configfs into midi, 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.



Have you got any comments about the series?

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


[PATCHv2 0/7] Equivalent of g_midi with configfs

2014-10-16 Thread Andrzej Pietrasiewicz
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 1248.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
 PortClient name  Port name
 14:0Midi Through Midi Through Port-0
 24:0MIDI Gadget  MIDI Gadget MIDI 1
$ arecordmidi -p 24:0 from_gadget.mid

gadget)

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

$ aplaymidi -p 20:0 to_host.mid

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

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

$ arecordmidi -p 20:0 from_host.mid

host)

$ aplaymidi -l
 PortClient name  Port name
 14:0Midi Through Midi Through Port-0
 24:0MIDI 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
 PortClient name  Port name
 14:0Midi Through Midi Through Port-0
 24:0MIDI Gadget  MIDI Gadget MIDI 1
128:0TiMidity TiMidity port 0
128:1TiMidity TiMidity port 1
128:2TiMidity TiMidity port 2
128:3TiMidity 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