1*07aecc06STakashi Iwai=============================== 2*07aecc06STakashi IwaiOSS Sequencer Emulation on ALSA 3*07aecc06STakashi Iwai=============================== 4*07aecc06STakashi Iwai 5*07aecc06STakashi IwaiCopyright (c) 1998,1999 by Takashi Iwai 6*07aecc06STakashi Iwai 7*07aecc06STakashi Iwaiver.0.1.8; Nov. 16, 1999 8*07aecc06STakashi Iwai 9*07aecc06STakashi IwaiDescription 10*07aecc06STakashi Iwai=========== 11*07aecc06STakashi Iwai 12*07aecc06STakashi IwaiThis directory contains the OSS sequencer emulation driver on ALSA. Note 13*07aecc06STakashi Iwaithat this program is still in the development state. 14*07aecc06STakashi Iwai 15*07aecc06STakashi IwaiWhat this does - it provides the emulation of the OSS sequencer, access 16*07aecc06STakashi Iwaivia ``/dev/sequencer`` and ``/dev/music`` devices. 17*07aecc06STakashi IwaiThe most of applications using OSS can run if the appropriate ALSA 18*07aecc06STakashi Iwaisequencer is prepared. 19*07aecc06STakashi Iwai 20*07aecc06STakashi IwaiThe following features are emulated by this driver: 21*07aecc06STakashi Iwai 22*07aecc06STakashi Iwai* Normal sequencer and MIDI events: 23*07aecc06STakashi Iwai 24*07aecc06STakashi Iwai They are converted to the ALSA sequencer events, and sent to the 25*07aecc06STakashi Iwai corresponding port. 26*07aecc06STakashi Iwai 27*07aecc06STakashi Iwai* Timer events: 28*07aecc06STakashi Iwai 29*07aecc06STakashi Iwai The timer is not selectable by ioctl. The control rate is fixed to 30*07aecc06STakashi Iwai 100 regardless of HZ. That is, even on Alpha system, a tick is always 31*07aecc06STakashi Iwai 1/100 second. The base rate and tempo can be changed in ``/dev/music``. 32*07aecc06STakashi Iwai 33*07aecc06STakashi Iwai* Patch loading: 34*07aecc06STakashi Iwai 35*07aecc06STakashi Iwai It purely depends on the synth drivers whether it's supported since 36*07aecc06STakashi Iwai the patch loading is realized by callback to the synth driver. 37*07aecc06STakashi Iwai 38*07aecc06STakashi Iwai* I/O controls: 39*07aecc06STakashi Iwai 40*07aecc06STakashi Iwai Most of controls are accepted. Some controls 41*07aecc06STakashi Iwai are dependent on the synth driver, as well as even on original OSS. 42*07aecc06STakashi Iwai 43*07aecc06STakashi IwaiFurthermore, you can find the following advanced features: 44*07aecc06STakashi Iwai 45*07aecc06STakashi Iwai* Better queue mechanism: 46*07aecc06STakashi Iwai 47*07aecc06STakashi Iwai The events are queued before processing them. 48*07aecc06STakashi Iwai 49*07aecc06STakashi Iwai* Multiple applications: 50*07aecc06STakashi Iwai 51*07aecc06STakashi Iwai You can run two or more applications simultaneously (even for OSS 52*07aecc06STakashi Iwai sequencer)! 53*07aecc06STakashi Iwai However, each MIDI device is exclusive - that is, if a MIDI device 54*07aecc06STakashi Iwai is opened once by some application, other applications can't use 55*07aecc06STakashi Iwai it. No such a restriction in synth devices. 56*07aecc06STakashi Iwai 57*07aecc06STakashi Iwai* Real-time event processing: 58*07aecc06STakashi Iwai 59*07aecc06STakashi Iwai The events can be processed in real time without using out of bound 60*07aecc06STakashi Iwai ioctl. To switch to real-time mode, send ABSTIME 0 event. The followed 61*07aecc06STakashi Iwai events will be processed in real-time without queued. To switch off the 62*07aecc06STakashi Iwai real-time mode, send RELTIME 0 event. 63*07aecc06STakashi Iwai 64*07aecc06STakashi Iwai* ``/proc`` interface: 65*07aecc06STakashi Iwai 66*07aecc06STakashi Iwai The status of applications and devices can be shown via 67*07aecc06STakashi Iwai ``/proc/asound/seq/oss`` at any time. In the later version, 68*07aecc06STakashi Iwai configuration will be changed via ``/proc`` interface, too. 69*07aecc06STakashi Iwai 70*07aecc06STakashi Iwai 71*07aecc06STakashi IwaiInstallation 72*07aecc06STakashi Iwai============ 73*07aecc06STakashi Iwai 74*07aecc06STakashi IwaiRun configure script with both sequencer support (``--with-sequencer=yes``) 75*07aecc06STakashi Iwaiand OSS emulation (``--with-oss=yes``) options. A module ``snd-seq-oss.o`` 76*07aecc06STakashi Iwaiwill be created. If the synth module of your sound card supports for OSS 77*07aecc06STakashi Iwaiemulation (so far, only Emu8000 driver), this module will be loaded 78*07aecc06STakashi Iwaiautomatically. 79*07aecc06STakashi IwaiOtherwise, you need to load this module manually. 80*07aecc06STakashi Iwai 81*07aecc06STakashi IwaiAt beginning, this module probes all the MIDI ports which have been 82*07aecc06STakashi Iwaialready connected to the sequencer. Once after that, the creation and deletion 83*07aecc06STakashi Iwaiof ports are watched by announcement mechanism of ALSA sequencer. 84*07aecc06STakashi Iwai 85*07aecc06STakashi IwaiThe available synth and MIDI devices can be found in proc interface. 86*07aecc06STakashi IwaiRun ``cat /proc/asound/seq/oss``, and check the devices. For example, 87*07aecc06STakashi Iwaiif you use an AWE64 card, you'll see like the following: 88*07aecc06STakashi Iwai:: 89*07aecc06STakashi Iwai 90*07aecc06STakashi Iwai OSS sequencer emulation version 0.1.8 91*07aecc06STakashi Iwai ALSA client number 63 92*07aecc06STakashi Iwai ALSA receiver port 0 93*07aecc06STakashi Iwai 94*07aecc06STakashi Iwai Number of applications: 0 95*07aecc06STakashi Iwai 96*07aecc06STakashi Iwai Number of synth devices: 1 97*07aecc06STakashi Iwai synth 0: [EMU8000] 98*07aecc06STakashi Iwai type 0x1 : subtype 0x20 : voices 32 99*07aecc06STakashi Iwai capabilties : ioctl enabled / load_patch enabled 100*07aecc06STakashi Iwai 101*07aecc06STakashi Iwai Number of MIDI devices: 3 102*07aecc06STakashi Iwai midi 0: [Emu8000 Port-0] ALSA port 65:0 103*07aecc06STakashi Iwai capability write / opened none 104*07aecc06STakashi Iwai 105*07aecc06STakashi Iwai midi 1: [Emu8000 Port-1] ALSA port 65:1 106*07aecc06STakashi Iwai capability write / opened none 107*07aecc06STakashi Iwai 108*07aecc06STakashi Iwai midi 2: [0: MPU-401 (UART)] ALSA port 64:0 109*07aecc06STakashi Iwai capability read/write / opened none 110*07aecc06STakashi Iwai 111*07aecc06STakashi IwaiNote that the device number may be different from the information of 112*07aecc06STakashi Iwai``/proc/asound/oss-devices`` or ones of the original OSS driver. 113*07aecc06STakashi IwaiUse the device number listed in ``/proc/asound/seq/oss`` 114*07aecc06STakashi Iwaito play via OSS sequencer emulation. 115*07aecc06STakashi Iwai 116*07aecc06STakashi IwaiUsing Synthesizer Devices 117*07aecc06STakashi Iwai========================= 118*07aecc06STakashi Iwai 119*07aecc06STakashi IwaiRun your favorite program. I've tested playmidi-2.4, awemidi-0.4.3, gmod-3.1 120*07aecc06STakashi Iwaiand xmp-1.1.5. You can load samples via ``/dev/sequencer`` like sfxload, 121*07aecc06STakashi Iwaitoo. 122*07aecc06STakashi Iwai 123*07aecc06STakashi IwaiIf the lowlevel driver supports multiple access to synth devices (like 124*07aecc06STakashi IwaiEmu8000 driver), two or more applications are allowed to run at the same 125*07aecc06STakashi Iwaitime. 126*07aecc06STakashi Iwai 127*07aecc06STakashi IwaiUsing MIDI Devices 128*07aecc06STakashi Iwai================== 129*07aecc06STakashi Iwai 130*07aecc06STakashi IwaiSo far, only MIDI output was tested. MIDI input was not checked at all, 131*07aecc06STakashi Iwaibut hopefully it will work. Use the device number listed in 132*07aecc06STakashi Iwai``/proc/asound/seq/oss``. 133*07aecc06STakashi IwaiBe aware that these numbers are mostly different from the list in 134*07aecc06STakashi Iwai``/proc/asound/oss-devices``. 135*07aecc06STakashi Iwai 136*07aecc06STakashi IwaiModule Options 137*07aecc06STakashi Iwai============== 138*07aecc06STakashi Iwai 139*07aecc06STakashi IwaiThe following module options are available: 140*07aecc06STakashi Iwai 141*07aecc06STakashi Iwaimaxqlen 142*07aecc06STakashi Iwai specifies the maximum read/write queue length. This queue is private 143*07aecc06STakashi Iwai for OSS sequencer, so that it is independent from the queue length of ALSA 144*07aecc06STakashi Iwai sequencer. Default value is 1024. 145*07aecc06STakashi Iwai 146*07aecc06STakashi Iwaiseq_oss_debug 147*07aecc06STakashi Iwai specifies the debug level and accepts zero (= no debug message) or 148*07aecc06STakashi Iwai positive integer. Default value is 0. 149*07aecc06STakashi Iwai 150*07aecc06STakashi IwaiQueue Mechanism 151*07aecc06STakashi Iwai=============== 152*07aecc06STakashi Iwai 153*07aecc06STakashi IwaiOSS sequencer emulation uses an ALSA priority queue. The 154*07aecc06STakashi Iwaievents from ``/dev/sequencer`` are processed and put onto the queue 155*07aecc06STakashi Iwaispecified by module option. 156*07aecc06STakashi Iwai 157*07aecc06STakashi IwaiAll the events from ``/dev/sequencer`` are parsed at beginning. 158*07aecc06STakashi IwaiThe timing events are also parsed at this moment, so that the events may 159*07aecc06STakashi Iwaibe processed in real-time. Sending an event ABSTIME 0 switches the operation 160*07aecc06STakashi Iwaimode to real-time mode, and sending an event RELTIME 0 switches it off. 161*07aecc06STakashi IwaiIn the real-time mode, all events are dispatched immediately. 162*07aecc06STakashi Iwai 163*07aecc06STakashi IwaiThe queued events are dispatched to the corresponding ALSA sequencer 164*07aecc06STakashi Iwaiports after scheduled time by ALSA sequencer dispatcher. 165*07aecc06STakashi Iwai 166*07aecc06STakashi IwaiIf the write-queue is full, the application sleeps until a certain amount 167*07aecc06STakashi Iwai(as default one half) becomes empty in blocking mode. The synchronization 168*07aecc06STakashi Iwaito write timing was implemented, too. 169*07aecc06STakashi Iwai 170*07aecc06STakashi IwaiThe input from MIDI devices or echo-back events are stored on read FIFO 171*07aecc06STakashi Iwaiqueue. If application reads ``/dev/sequencer`` in blocking mode, the 172*07aecc06STakashi Iwaiprocess will be awaked. 173*07aecc06STakashi Iwai 174*07aecc06STakashi IwaiInterface to Synthesizer Device 175*07aecc06STakashi Iwai=============================== 176*07aecc06STakashi Iwai 177*07aecc06STakashi IwaiRegistration 178*07aecc06STakashi Iwai------------ 179*07aecc06STakashi Iwai 180*07aecc06STakashi IwaiTo register an OSS synthesizer device, use snd_seq_oss_synth_register() 181*07aecc06STakashi Iwaifunction: 182*07aecc06STakashi Iwai:: 183*07aecc06STakashi Iwai 184*07aecc06STakashi Iwai int snd_seq_oss_synth_register(char *name, int type, int subtype, int nvoices, 185*07aecc06STakashi Iwai snd_seq_oss_callback_t *oper, void *private_data) 186*07aecc06STakashi Iwai 187*07aecc06STakashi IwaiThe arguments ``name``, ``type``, ``subtype`` and ``nvoices`` 188*07aecc06STakashi Iwaiare used for making the appropriate synth_info structure for ioctl. The 189*07aecc06STakashi Iwaireturn value is an index number of this device. This index must be remembered 190*07aecc06STakashi Iwaifor unregister. If registration is failed, -errno will be returned. 191*07aecc06STakashi Iwai 192*07aecc06STakashi IwaiTo release this device, call snd_seq_oss_synth_unregister() function: 193*07aecc06STakashi Iwai:: 194*07aecc06STakashi Iwai 195*07aecc06STakashi Iwai int snd_seq_oss_synth_unregister(int index) 196*07aecc06STakashi Iwai 197*07aecc06STakashi Iwaiwhere the ``index`` is the index number returned by register function. 198*07aecc06STakashi Iwai 199*07aecc06STakashi IwaiCallbacks 200*07aecc06STakashi Iwai--------- 201*07aecc06STakashi Iwai 202*07aecc06STakashi IwaiOSS synthesizer devices have capability for sample downloading and ioctls 203*07aecc06STakashi Iwailike sample reset. In OSS emulation, these special features are realized 204*07aecc06STakashi Iwaiby using callbacks. The registration argument oper is used to specify these 205*07aecc06STakashi Iwaicallbacks. The following callback functions must be defined: 206*07aecc06STakashi Iwai:: 207*07aecc06STakashi Iwai 208*07aecc06STakashi Iwai snd_seq_oss_callback_t: 209*07aecc06STakashi Iwai int (*open)(snd_seq_oss_arg_t *p, void *closure); 210*07aecc06STakashi Iwai int (*close)(snd_seq_oss_arg_t *p); 211*07aecc06STakashi Iwai int (*ioctl)(snd_seq_oss_arg_t *p, unsigned int cmd, unsigned long arg); 212*07aecc06STakashi Iwai int (*load_patch)(snd_seq_oss_arg_t *p, int format, const char *buf, int offs, int count); 213*07aecc06STakashi Iwai int (*reset)(snd_seq_oss_arg_t *p); 214*07aecc06STakashi Iwai 215*07aecc06STakashi IwaiExcept for ``open`` and ``close`` callbacks, they are allowed to be NULL. 216*07aecc06STakashi Iwai 217*07aecc06STakashi IwaiEach callback function takes the argument type ``snd_seq_oss_arg_t`` as the 218*07aecc06STakashi Iwaifirst argument. 219*07aecc06STakashi Iwai:: 220*07aecc06STakashi Iwai 221*07aecc06STakashi Iwai struct snd_seq_oss_arg_t { 222*07aecc06STakashi Iwai int app_index; 223*07aecc06STakashi Iwai int file_mode; 224*07aecc06STakashi Iwai int seq_mode; 225*07aecc06STakashi Iwai snd_seq_addr_t addr; 226*07aecc06STakashi Iwai void *private_data; 227*07aecc06STakashi Iwai int event_passing; 228*07aecc06STakashi Iwai }; 229*07aecc06STakashi Iwai 230*07aecc06STakashi IwaiThe first three fields, ``app_index``, ``file_mode`` and ``seq_mode`` 231*07aecc06STakashi Iwaiare initialized by OSS sequencer. The ``app_index`` is the application 232*07aecc06STakashi Iwaiindex which is unique to each application opening OSS sequencer. The 233*07aecc06STakashi Iwai``file_mode`` is bit-flags indicating the file operation mode. See 234*07aecc06STakashi Iwai``seq_oss.h`` for its meaning. The ``seq_mode`` is sequencer operation 235*07aecc06STakashi Iwaimode. In the current version, only ``SND_OSSSEQ_MODE_SYNTH`` is used. 236*07aecc06STakashi Iwai 237*07aecc06STakashi IwaiThe next two fields, ``addr`` and ``private_data``, must be 238*07aecc06STakashi Iwaifilled by the synth driver at open callback. The ``addr`` contains 239*07aecc06STakashi Iwaithe address of ALSA sequencer port which is assigned to this device. If 240*07aecc06STakashi Iwaithe driver allocates memory for ``private_data``, it must be released 241*07aecc06STakashi Iwaiin close callback by itself. 242*07aecc06STakashi Iwai 243*07aecc06STakashi IwaiThe last field, ``event_passing``, indicates how to translate note-on 244*07aecc06STakashi Iwai/ off events. In ``PROCESS_EVENTS`` mode, the note 255 is regarded 245*07aecc06STakashi Iwaias velocity change, and key pressure event is passed to the port. In 246*07aecc06STakashi Iwai``PASS_EVENTS`` mode, all note on/off events are passed to the port 247*07aecc06STakashi Iwaiwithout modified. ``PROCESS_KEYPRESS`` mode checks the note above 128 248*07aecc06STakashi Iwaiand regards it as key pressure event (mainly for Emu8000 driver). 249*07aecc06STakashi Iwai 250*07aecc06STakashi IwaiOpen Callback 251*07aecc06STakashi Iwai------------- 252*07aecc06STakashi Iwai 253*07aecc06STakashi IwaiThe ``open`` is called at each time this device is opened by an application 254*07aecc06STakashi Iwaiusing OSS sequencer. This must not be NULL. Typically, the open callback 255*07aecc06STakashi Iwaidoes the following procedure: 256*07aecc06STakashi Iwai 257*07aecc06STakashi Iwai#. Allocate private data record. 258*07aecc06STakashi Iwai#. Create an ALSA sequencer port. 259*07aecc06STakashi Iwai#. Set the new port address on ``arg->addr``. 260*07aecc06STakashi Iwai#. Set the private data record pointer on ``arg->private_data``. 261*07aecc06STakashi Iwai 262*07aecc06STakashi IwaiNote that the type bit-flags in port_info of this synth port must NOT contain 263*07aecc06STakashi Iwai``TYPE_MIDI_GENERIC`` 264*07aecc06STakashi Iwaibit. Instead, ``TYPE_SPECIFIC`` should be used. Also, ``CAP_SUBSCRIPTION`` 265*07aecc06STakashi Iwaibit should NOT be included, too. This is necessary to tell it from other 266*07aecc06STakashi Iwainormal MIDI devices. If the open procedure succeeded, return zero. Otherwise, 267*07aecc06STakashi Iwaireturn -errno. 268*07aecc06STakashi Iwai 269*07aecc06STakashi IwaiIoctl Callback 270*07aecc06STakashi Iwai-------------- 271*07aecc06STakashi Iwai 272*07aecc06STakashi IwaiThe ``ioctl`` callback is called when the sequencer receives device-specific 273*07aecc06STakashi Iwaiioctls. The following two ioctls should be processed by this callback: 274*07aecc06STakashi Iwai 275*07aecc06STakashi IwaiIOCTL_SEQ_RESET_SAMPLES 276*07aecc06STakashi Iwai reset all samples on memory -- return 0 277*07aecc06STakashi Iwai 278*07aecc06STakashi IwaiIOCTL_SYNTH_MEMAVL 279*07aecc06STakashi Iwai return the available memory size 280*07aecc06STakashi Iwai 281*07aecc06STakashi IwaiFM_4OP_ENABLE 282*07aecc06STakashi Iwai can be ignored usually 283*07aecc06STakashi Iwai 284*07aecc06STakashi IwaiThe other ioctls are processed inside the sequencer without passing to 285*07aecc06STakashi Iwaithe lowlevel driver. 286*07aecc06STakashi Iwai 287*07aecc06STakashi IwaiLoad_Patch Callback 288*07aecc06STakashi Iwai------------------- 289*07aecc06STakashi Iwai 290*07aecc06STakashi IwaiThe ``load_patch`` callback is used for sample-downloading. This callback 291*07aecc06STakashi Iwaimust read the data on user-space and transfer to each device. Return 0 292*07aecc06STakashi Iwaiif succeeded, and -errno if failed. The format argument is the patch key 293*07aecc06STakashi Iwaiin patch_info record. The buf is user-space pointer where patch_info record 294*07aecc06STakashi Iwaiis stored. The offs can be ignored. The count is total data size of this 295*07aecc06STakashi Iwaisample data. 296*07aecc06STakashi Iwai 297*07aecc06STakashi IwaiClose Callback 298*07aecc06STakashi Iwai-------------- 299*07aecc06STakashi Iwai 300*07aecc06STakashi IwaiThe ``close`` callback is called when this device is closed by the 301*07aecc06STakashi Iwaiapplication. If any private data was allocated in open callback, it must 302*07aecc06STakashi Iwaibe released in the close callback. The deletion of ALSA port should be 303*07aecc06STakashi Iwaidone here, too. This callback must not be NULL. 304*07aecc06STakashi Iwai 305*07aecc06STakashi IwaiReset Callback 306*07aecc06STakashi Iwai-------------- 307*07aecc06STakashi Iwai 308*07aecc06STakashi IwaiThe ``reset`` callback is called when sequencer device is reset or 309*07aecc06STakashi Iwaiclosed by applications. The callback should turn off the sounds on the 310*07aecc06STakashi Iwairelevant port immediately, and initialize the status of the port. If this 311*07aecc06STakashi Iwaicallback is undefined, OSS seq sends a ``HEARTBEAT`` event to the 312*07aecc06STakashi Iwaiport. 313*07aecc06STakashi Iwai 314*07aecc06STakashi IwaiEvents 315*07aecc06STakashi Iwai====== 316*07aecc06STakashi Iwai 317*07aecc06STakashi IwaiMost of the events are processed by sequencer and translated to the adequate 318*07aecc06STakashi IwaiALSA sequencer events, so that each synth device can receive by input_event 319*07aecc06STakashi Iwaicallback of ALSA sequencer port. The following ALSA events should be 320*07aecc06STakashi Iwaiimplemented by the driver: 321*07aecc06STakashi Iwai 322*07aecc06STakashi Iwai============= =================== 323*07aecc06STakashi IwaiALSA event Original OSS events 324*07aecc06STakashi Iwai============= =================== 325*07aecc06STakashi IwaiNOTEON SEQ_NOTEON, MIDI_NOTEON 326*07aecc06STakashi IwaiNOTE SEQ_NOTEOFF, MIDI_NOTEOFF 327*07aecc06STakashi IwaiKEYPRESS MIDI_KEY_PRESSURE 328*07aecc06STakashi IwaiCHANPRESS SEQ_AFTERTOUCH, MIDI_CHN_PRESSURE 329*07aecc06STakashi IwaiPGMCHANGE SEQ_PGMCHANGE, MIDI_PGM_CHANGE 330*07aecc06STakashi IwaiPITCHBEND SEQ_CONTROLLER(CTRL_PITCH_BENDER), 331*07aecc06STakashi Iwai MIDI_PITCH_BEND 332*07aecc06STakashi IwaiCONTROLLER MIDI_CTL_CHANGE, 333*07aecc06STakashi Iwai SEQ_BALANCE (with CTL_PAN) 334*07aecc06STakashi IwaiCONTROL14 SEQ_CONTROLLER 335*07aecc06STakashi IwaiREGPARAM SEQ_CONTROLLER(CTRL_PITCH_BENDER_RANGE) 336*07aecc06STakashi IwaiSYSEX SEQ_SYSEX 337*07aecc06STakashi Iwai============= =================== 338*07aecc06STakashi Iwai 339*07aecc06STakashi IwaiThe most of these behavior can be realized by MIDI emulation driver 340*07aecc06STakashi Iwaiincluded in the Emu8000 lowlevel driver. In the future release, this module 341*07aecc06STakashi Iwaiwill be independent. 342*07aecc06STakashi Iwai 343*07aecc06STakashi IwaiSome OSS events (``SEQ_PRIVATE`` and ``SEQ_VOLUME`` events) are passed as event 344*07aecc06STakashi Iwaitype SND_SEQ_OSS_PRIVATE. The OSS sequencer passes these event 8 byte 345*07aecc06STakashi Iwaipackets without any modification. The lowlevel driver should process these 346*07aecc06STakashi Iwaievents appropriately. 347*07aecc06STakashi Iwai 348*07aecc06STakashi IwaiInterface to MIDI Device 349*07aecc06STakashi Iwai======================== 350*07aecc06STakashi Iwai 351*07aecc06STakashi IwaiSince the OSS emulation probes the creation and deletion of ALSA MIDI 352*07aecc06STakashi Iwaisequencer ports automatically by receiving announcement from ALSA 353*07aecc06STakashi Iwaisequencer, the MIDI devices don't need to be registered explicitly 354*07aecc06STakashi Iwailike synth devices. 355*07aecc06STakashi IwaiHowever, the MIDI port_info registered to ALSA sequencer must include 356*07aecc06STakashi Iwaia group name ``SND_SEQ_GROUP_DEVICE`` and a capability-bit 357*07aecc06STakashi Iwai``CAP_READ`` or ``CAP_WRITE``. Also, subscription capabilities, 358*07aecc06STakashi Iwai``CAP_SUBS_READ`` or ``CAP_SUBS_WRITE``, must be defined, too. If 359*07aecc06STakashi Iwaithese conditions are not satisfied, the port is not registered as OSS 360*07aecc06STakashi Iwaisequencer MIDI device. 361*07aecc06STakashi Iwai 362*07aecc06STakashi IwaiThe events via MIDI devices are parsed in OSS sequencer and converted 363*07aecc06STakashi Iwaito the corresponding ALSA sequencer events. The input from MIDI sequencer 364*07aecc06STakashi Iwaiis also converted to MIDI byte events by OSS sequencer. This works just 365*07aecc06STakashi Iwaia reverse way of seq_midi module. 366*07aecc06STakashi Iwai 367*07aecc06STakashi IwaiKnown Problems / TODO's 368*07aecc06STakashi Iwai======================= 369*07aecc06STakashi Iwai 370*07aecc06STakashi Iwai* Patch loading via ALSA instrument layer is not implemented yet. 371*07aecc06STakashi Iwai 372