Update of /cvsroot/alsa/alsa-kernel/core/seq
In directory sc8-pr-cvs1:/tmp/cvs-serv3601/core/seq
Modified Files:
seq_midi_event.c
Log Message:
Reverted back (N)RPN decoding - it is difficult to do this job here
Index: seq_midi_event.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/seq/seq_midi_event.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- seq_midi_event.c 16 Jun 2003 11:19:12 -0000 1.11
+++ seq_midi_event.c 16 Jun 2003 18:35:44 -0000 1.12
@@ -36,11 +36,9 @@
/* from 0 to 7 are normal commands (note off, on, etc.) */
#define ST_NOTEOFF 0
#define ST_NOTEON 1
-#define ST_CONTROLLER 3
#define ST_SPECIAL 8
#define ST_SYSEX ST_SPECIAL
/* from 8 to 15 are events for 0xf0-0xf7 */
-#define ST_XREG_PARM 16
/* status event types */
@@ -56,8 +54,6 @@
static void two_param_ctrl_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
static void one_param_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
static void songpos_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
-static unsigned char get_xreg_hit_bit(unsigned char c);
-static void xreg_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
static void note_decode(snd_seq_event_t *ev, unsigned char *buf);
static void one_param_decode(snd_seq_event_t *ev, unsigned char *buf);
static void pitchbend_decode(snd_seq_event_t *ev, unsigned char *buf);
@@ -102,7 +98,7 @@
};
static int extra_decode_ctrl14(snd_midi_event_t *dev, unsigned char *buf, int len,
snd_seq_event_t *ev);
-static int extra_decode_xrpn(snd_midi_event_t *dev, unsigned char *buf, int len,
snd_seq_event_t *ev);
+static int extra_decode_xrpn(snd_midi_event_t *dev, unsigned char *buf, int count,
snd_seq_event_t *ev);
static struct extra_event_list_t {
int event;
@@ -258,20 +254,11 @@
spin_lock_irqsave(&dev->lock, flags);
if (dev->qlen > 0) {
/* rest of command */
- if (c & 0x80) { /* error? state inside data? */
- if (dev->type == ST_XREG_PARM) {
- if (c != dev->buf[0])
- goto __new_command;
- goto __end;
- }
- goto __new_command;
- }
dev->buf[dev->read++] = c;
if (dev->type != ST_SYSEX)
dev->qlen--;
} else {
/* new command */
- __new_command:
dev->read = 1;
if (c & 0x80) {
dev->buf[0] = c;
@@ -287,42 +274,13 @@
}
}
if (dev->qlen == 0) {
- /* handle xrpn special case here */
- if (dev->type == ST_CONTROLLER &&
- dev->buf[1] >= MIDI_CTL_NONREG_PARM_NUM_LSB &&
- dev->buf[1] <= MIDI_CTL_REGIST_PARM_NUM_MSB) {
- dev->type = ST_XREG_PARM;
- dev->xreg_hit = get_xreg_hit_bit(dev->buf[1]);
- dev->qlen = 2; /* we need more bytes */
- goto __end;
- }
- if (dev->type == ST_XREG_PARM) {
- rc = get_xreg_hit_bit(dev->buf[1]);
- if (rc == 0 || (rc & dev->xreg_hit)) {
- reset_encode(dev);
- dev->type = ST_CONTROLLER;
- dev->read = 1;
- rc = 0;
- goto __end;
- }
- dev->xreg_hit |= rc;
- if (dev->xreg_hit == 0x0f) { /* finished */
- xreg_event(dev, ev);
- rc = 1;
- goto __end;
- }
- dev->qlen = 2; /* we need more bytes */
- rc = 0;
- goto __end;
- }
- /* handle standard midi events */
ev->type = status_event[dev->type].event;
ev->flags &= ~SNDRV_SEQ_EVENT_LENGTH_MASK;
ev->flags |= SNDRV_SEQ_EVENT_LENGTH_FIXED;
if (status_event[dev->type].encode) /* set data values */
status_event[dev->type].encode(dev, ev);
rc = 1;
- } else if (dev->type == ST_SYSEX) {
+ } else if (dev->type == ST_SYSEX) {
if (c == MIDI_CMD_COMMON_SYSEX_END ||
dev->read >= dev->bufsize) {
ev->flags &= ~SNDRV_SEQ_EVENT_LENGTH_MASK;
@@ -338,7 +296,6 @@
}
}
- __end:
spin_unlock_irqrestore(&dev->lock, flags);
return rc;
}
@@ -385,44 +342,6 @@
ev->data.control.value = (int)dev->buf[2] * 128 + (int)dev->buf[1];
}
-static unsigned char get_xreg_hit_bit(unsigned char c)
-{
- switch (c) {
- case MIDI_CTL_NONREG_PARM_NUM_MSB:
- case MIDI_CTL_REGIST_PARM_NUM_MSB:
- return 1;
- case MIDI_CTL_NONREG_PARM_NUM_LSB:
- case MIDI_CTL_REGIST_PARM_NUM_LSB:
- return 2;
- case MIDI_CTL_MSB_DATA_ENTRY:
- return 4;
- case MIDI_CTL_LSB_DATA_ENTRY:
- return 8;
- default:
- return 0;
- }
-}
-
-/* encode xreg event */
-static void xreg_event(snd_midi_event_t *dev, snd_seq_event_t *ev)
-{
- int i;
-
- ev->type = (dev->buf[1] == MIDI_CTL_NONREG_PARM_NUM_MSB ||
- dev->buf[1] == MIDI_CTL_NONREG_PARM_NUM_LSB) ?
- SNDRV_SEQ_EVENT_NONREGPARAM : SNDRV_SEQ_EVENT_REGPARAM;
- ev->data.control.param = 0;
- ev->data.control.value = 0;
- for (i = 1; i < 9; i += 2) {
- switch (get_xreg_hit_bit(dev->buf[i])) {
- case 1: ev->data.control.param |= dev->buf[i+1] << 7; break;
- case 2: ev->data.control.param |= dev->buf[i+1]; break;
- case 4: ev->data.control.value |= dev->buf[i+1] << 7; break;
- case 8: ev->data.control.value |= dev->buf[i+1]; break;
- }
- }
-}
-
/*
* decode from a sequencer event to midi bytes
* return the size of decoded midi events
@@ -524,7 +443,7 @@
int idx = 0;
cmd = MIDI_CMD_CONTROL|(ev->data.control.channel & 0x0f);
- if (ev->data.control.param < 32) {
+ if (ev->data.control.param < 0x20) {
if (count < 4)
return -ENOMEM;
if (dev->nostat && count < 6)
@@ -538,7 +457,7 @@
buf[idx++] = (ev->data.control.value >> 7) & 0x7f;
if (dev->nostat)
buf[idx++] = cmd;
- buf[idx++] = ev->data.control.param + 32;
+ buf[idx++] = ev->data.control.param + 0x20;
buf[idx++] = ev->data.control.value & 0x7f;
} else {
if (count < 2)
-------------------------------------------------------
This SF.NET email is sponsored by: eBay
Great deals on office technology -- on eBay now! Click here:
http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog