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

Reply via email to