Commit graph

34 commits

Author SHA1 Message Date
Takashi Iwai
d969439813 seq: Avoid strlcat()
strlcat() isn't available in every system, so better to avoid it.
Rewrite the code without strlcat().

Fixes: 6167b8ce3e ("seq: Add API helper functions for creating UMP Endpoint and Blocks")
Link: https://lore.kernel.org/0796c157-1ac3-47a3-9d54-ba86f59d64d5@linux.intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2024-07-31 11:20:16 +02:00
Takashi Iwai
48101de6fa seq: Fix wrong FB direction at snd_seq_create_ump_block()
snd_seq_create_ump_block() receives a snd_ump_block_info_t data at the
creation of a FB and updates its associated sequencer port, but it
handled the port direction incorrectly.  The UMP / port direction
means the connectivity, but the current code translated other way
round.  The correct translation should be that input = receiver, i.e.
a writable port for applications, and output = source, a readable port
for applications.

This patch corrects the translation, and add more comments to the
direction definition.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2024-07-09 07:23:23 +02:00
Takashi Iwai
6167b8ce3e seq: Add API helper functions for creating UMP Endpoint and Blocks
For making it easer for applications to create a virtual UMP Endpoint
and UMP blocks, add two API helper functions.

snd_seq_create_ump_endpoint() creates (unsurprisingly) a UMP Endpoint,
based on the given snd_ump_endpoint_info_t information.  The number of
(max) UMP groups belonging to this Endpoint has to be specified.
This function sets up the Endpoint info on the sequencer client, and
creates a MIDI 2.0 UMP port as well as UMP Group ports automatically.
The name of the sequencer client is updated from the Endpoint name,
too.

After creating a UMP Endpoint, create each UMP Block via
snd_seq_create_ump_block() function with a snd_ump_block_info_t info.
The associated groups for each block have to be specified there.
The port names and capability bits are updated accordingly after
setting each block information.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2024-06-19 17:12:24 +02:00
Jaroslav Kysela
81a7a93636 reshuffle included files to include config.h as first - v2
config.h may contain defines like _FILE_OFFSET_BITS which influence
the system wide include files (off_t types, open -> open64 function
usage etc.).

Fixes: ad3a8b8b ("reshuffle included files to include config.h as first")
Related: https://github.com/alsa-project/alsa-lib/pull/333
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-09-13 12:35:35 +02:00
Takashi Iwai
2aefb5c41c seq: Add UMP support
This patch adds the basic support of UMP on ALSA sequencer API.
An extended event type, snd_seq_ump_event_t, is defined.  It's
compatible with the existing type, snd_seq_event_t, but it has a
larger payload of 16 bytes instead of 12 bytes, for holding the full
128bit UMP packet.

The new snd_seq_ump_event_t must have the bit SND_SEQ_EVENT_UMP in the
event flags.

A few new API functions have been added such as
snd_seq_ump_event_output() and snd_seq_ump_event_input() for
reading/writing this new event object.

The support of UMP in the sequencer client is switched by the function
snd_seq_client_set_midi_version().  It can switch from the default
legacy MIDI to UMP MIDI 1.0 or 2.0 on the fly.

The automatic event conversion among UMP and legacy clients can be
suppressed via snd_seq_client_set_ump_conversion().

The inquiry of the associated UMP Endpoints and UMP Blocks can be done
via snd_seq_get_ump_endpoint_info() and snd_seq_get_ump_block_info().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2023-06-06 15:13:27 +02:00
Jaroslav Kysela
c8f608d674 seq: fix snd_seq_parse_address()
Use safe_strtol() for the integer conversion. Also accept
client name in "" or '' notation.

BugLink: https://github.com/alsa-project/alsa-utils/issues/90
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-05-26 17:29:48 +02:00
Jaroslav Kysela
5b9041bced Change FSF address (Franklin Street)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2017-11-14 14:29:26 +01:00
Clemens Ladisch
e23961df50 seqmid: restore sequencer address prefix match feature
Commit 1989233449 (seq: Fix for snd_seq_parse_address()) removed the
ability to match sequencer client names by any of by their prefixes in
an attempt to avoid wrong matches when one client name is the prefix of
another.

However, the prefix match feature was documented and actually used.

Allow prefixes to match, but only if there is no exact match.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2013-05-13 21:16:36 +02:00
Jaroslav Kysela
49dde08641 Reduce compilation warnings
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2012-10-30 13:09:10 +01:00
Henning Thielemann
1937247439 seqmid - more descriptions on snd_seq_parse_address() behavior
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-03-14 18:45:02 +01:00
Pedro Lopez-Cabanillas
1989233449 seq: Fix for snd_seq_parse_address()
snd_seq_parse_address() uses strncmp() to compare the client name
in the string argument with the existing clients, until it finds one
name matching the same leading characters. This may produce wrong
results when there are two sequencer clients with similar names.

Example: "KMidimon" : "Kmid"

Signed-off-by: Pedro Lopez-Cabanillas <pedro.lopez.cabanillas@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-04-22 16:08:14 +02:00
Patricio Paez
50e9cd9525 Fix typos in ALSA Lib documentation
Signed-off-by: Patricio Paez <pp@pp.com.mx>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-23 10:00:06 +01:00
Aldrin Martoq
72ffc6db77 use snd_seq_client_info_event_filter_*() functions
Change snd_seq_set_client_event_filter to use the new
snd_seq_client_info_event_filter_* API

Signed-off-by: Aldrin Martoq <amartoq@dcc.uchile.cl>
2008-02-22 17:50:01 +01:00
Takashi Iwai
087184b0f9 Fix doxygen documents
Fix the warnings of doxygen parsing.
Add some missing documentation.
2005-05-24 14:14:28 +00:00
Takashi Iwai
e1ae539931 added more documents.
removed the obsolete snd_seq_port_subscribe_set_voices().
2003-10-22 14:25:55 +00:00
Jaroslav Kysela
853304bbf4 Corrections by Kevin Conder <kconder@interaccess.com> 2002-03-12 20:14:33 +00:00
Jaroslav Kysela
3e3df2d32b Updated GNU GPL license (address).
Changed GNU LGPL licence from 2.0 to 2.1.
2001-12-30 09:22:54 +00:00
Takashi Iwai
10fa12eb7d fixed possible segfault in snd_seq_parse_address 2001-09-19 20:10:32 +00:00
Takashi Iwai
0791fb2848 Added snd_seq_sync_output_queue() function.
Rewrote playmidi1 to use this function.  It is no longer necessary
to wait for echoback.
2001-09-03 10:41:18 +00:00
Jaroslav Kysela
3590f6ecd3 More documentation enhancements / removal of non-existent functions. 2001-07-11 15:48:27 +00:00
Takashi Iwai
f1c0e964dd Improved parse_address to accept the string without a port number 2001-07-11 14:18:38 +00:00
Jaroslav Kysela
88e5e45151 Major change to sequencer API.
The sequencer API is totally recoded with the style of "encapsulation"
in other api.
The structure becomes opaque and accessed only via functions.

Other changes:
- There is no longer group in client and port info.
- snd_seq_query_subs_t is renamed to snd_seq_query_subscribe_t.
- snd_seq_delete_port takes only the port id argument instead of
  port_info structure.
- snd_seq_input/output_buffer_size are renamed
  as snd_seq_get_input/output_buffer_size.
  Similarly snd_seq_resize_input/output_buffer are renamed as
  snd_seq_set_input/output_buffer_size.
- snd_seq_get_named_queue is renamed to snd_seq_query_named_queue.
- Sync codes are removed temporarily from API.
- Subscription conditions are accessed via the corresponding functions.
  convert_time is named now as time_update.
- snd_seq_get/set_queue_owner are removed.
  Use snd_seq_get/set_queue_info instead.
- Instrument put/get/remove structure is unified as snd_instr_header_t.
2001-07-04 13:54:13 +00:00
Takashi Iwai
5ce8fbeab5 Added comments for doxygen.
They are half-automated output from the 0.5.x documents.
The sequencer API will be changed in near future
to suit with encapsulation implemented already in pcm api,
so do not trust the comments added here..
They are just for reference.
2001-06-06 17:50:16 +00:00
Abramo Bagnara
5b50ec848a Lot of cleanings with the help of gcc3 2001-03-29 17:50:28 +00:00
Abramo Bagnara
a2d3434961 Completed mixer API. Improved iterators. Renamed control values struct. Rewritten simple elements implementation 2001-02-11 15:45:35 +00:00
Abramo Bagnara
8f0cb26fdf Control API encapsulation. Better names for kernel API. Simpler PCM hw_params API. Added missing const. 2001-02-06 23:48:10 +00:00
Abramo Bagnara
de19407578 Removed card type from devices info. Added card number to devices info. Completed encapsulation of PCM API. Removed snd_pcm_card(). All copy functions now have the form copy(dst, src). 2001-01-31 17:26:56 +00:00
Jaroslav Kysela
41bb7068f2 Merged pcmfinal branch. 2000-11-20 20:10:46 +00:00
Takashi Iwai
bbdff9fce5 Bugfix:
- dead SMP lock in es1968 (maestro2) driver.

Bugfix & enhances of sequencer stuff
    by Scott McNab <sdm@fractalgraphics.com.au>:
 - fix for the insrument list locking in SND_SEQ_EVENT_INSTR_BEGIN
   and SND_SEQ_EVENT_INSTR_END events.
   Note that nothing seems to really take notice of the list locking.
   This is more an issue when we add support for editing instruments
   anyway.

 - added new alsa-lib utility function snd_seq_ev_set_varusr() which
   is similar to snd_seq_ev_set_variable(), but specifies userspace
   extended event data.
   This is required in order to use the SND_SEQ_EVENT_INSTR_PUT
   command (took me bloody ages to work this out btw)

 - minor correction for gus & trident synth drivers
2000-06-08 10:55:34 +00:00
Jaroslav Kysela
70a536e924 snd_seq_timestamp_t->real was renamed to snd_seq_timestamp_t->time
Some code is using real as a variable type.
2000-01-20 12:14:50 +00:00
Jaroslav Kysela
244d345fda Takashi Iwai <iwai@ww.uni-erlangen.de>
Wed, 22 Dec 1999 15:51:37 +0100
Changes in alsa-driver:

1. SND_SEQ_DEST_DIRECT was removed.  For direct dispatching, specify
   the scheduling queue as SND_SEQ_QUEUE_DIRECT.
   Source compatibility is kept if alsa-lib functions are used to set
   or check direct mode.
   Tested: pmidi, playmidi1, aconnect, aseqview, OSS emulation

2. The error event can be bounced to the sender as an encapsulated
   event with SND_SEQ_EVENT_BOUNCE type.  If the orignal event is
   variable length (like SYSEX), the data body is added after the
   copied event data.  (To access to it, use
   snd_seq_event_bounce_ext_data() macro.)
   This feature is enabled only when the sender is opened with read
   flag and has a client-filter flag SND_SEQ_FILTER_BOUNCE, so that
   as default it is disabled.

3. Maximum size of VARIABLE length event is defined as 2048 bytes.
   Larger events will be refused.
   Note that this is not the size of VARUSR nor VARIPC event.

4. Return error code was revised.
   Possible errors for read():
        -ENXIO  invalid client or file open mode
        -ENOSPC FIFO overflow (the flag is cleared after this error report)
        -EINVAL no enough user-space buffer to write the whole event
        -EFAULT seg. fault during copy to user space
   Possible errors for write():
        -ENXIO  invalid client or file open mode
        -ENOMEM malloc failed
        -EFAULT seg. fault during copy from user space
        -EINVAL invalid event
        -EAGAIN no space in output pool
        -EINTR  interrupts while sleep
        -EMLINK too many hops

        others  depends on return value from driver event_input callback

Changes in alsa-lib:

5. Behavior of snd_seq_flush_output() was changed.
   It flushes data in output buffer as much as possible.  This has
   two advantages.  One is that most data can be sent at one call,
   and another is that the error in write() can be detected directly
   from this function.
   The demerit of this implementation is that in non-blocking mode, it
   tries twice write() even if write pool of sequencer is full, which
   is not actually error.  In this case, flush_output() always returns
   -EAGAIN error code.
   After an error is detected (except for -EAGAIN in non-blocking
   mode), you should remove the error event via
   snd_seq_extract_output() as below.  Otherwise, it'll remain in
   output buffer and cause the same error again.

6. Some functions were added:
   snd_seq_exract_output(seq, &event)
        This extracts the first event on *output* buffer.  This will
        be useful to know (and remove) the event which causes error in
        write().
   snd_seq_event_input_pending(seq, fetch)
        Retunrs the number of events on input buffer.
        If no events exist in input buffer, it fetches from sequencer
        (only when flag is true).
   snd_seq_event_input_selective(seq, &ev, type, blocking)
        Retrieve the event from input with the given event type.
        If blocking is true, it waits until the target event is
        received.  It'll be useful for checking bounced error or
        waiting for hand-shake results (eg. loading insruments).
1999-12-22 15:05:51 +00:00
Frank van de Pol
a6cd55dcfe small sequencer fixes 1999-12-15 23:37:12 +00:00
Jaroslav Kysela
a3aaf0582a Takashi Iwai <iwai@ww.uni-erlangen.de>
Frank van de Pol <frank@vande-pol.demon.nl>
Major sequencer changes and cleanups for 1.0.0.
1999-12-15 18:34:12 +00:00
Jaroslav Kysela
682deca370 Takashi Iwai <iwai@ww.uni-erlangen.de>
Fri, 17 Sep 1999 17:24:43 +0200

OK, the attached is the patch to alsa-driver and alsa-lib.
It will really violate the source/binary compatibility as
I wrote :-p

It includes:
 - change of event data for accessing Timer Port
 - new middle-level functions for sequencer in alsa-lib
 - some comments / fixes

The test programs in alsa-lib (playmidi1, aconnect, aseqnet)
were rewritten to use the new functions above.
I included also a patch to pmidi-1.2.2.
1999-09-17 16:17:21 +00:00