/[openvortex]/alsa/alsa-kernel/core/seq/seq_midi_event.c
ViewVC logotype

Diff of /alsa/alsa-kernel/core/seq/seq_midi_event.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by vizard, Tue Apr 15 21:53:15 2003 UTC revision 1.2 by vizard, Mon Aug 11 00:06:38 2003 UTC
# Line 98  static struct status_event_list_t { Line 98  static struct status_event_list_t {
98  };  };
99    
100  static int extra_decode_ctrl14(snd_midi_event_t *dev, unsigned char *buf, int len, snd_seq_event_t *ev);  static int extra_decode_ctrl14(snd_midi_event_t *dev, unsigned char *buf, int len, snd_seq_event_t *ev);
101    static int extra_decode_xrpn(snd_midi_event_t *dev, unsigned char *buf, int count, snd_seq_event_t *ev);
102    
103  static struct extra_event_list_t {  static struct extra_event_list_t {
104          int event;          int event;
105          int (*decode)(snd_midi_event_t *dev, unsigned char *buf, int len, snd_seq_event_t *ev);          int (*decode)(snd_midi_event_t *dev, unsigned char *buf, int len, snd_seq_event_t *ev);
106  } extra_event[] = {  } extra_event[] = {
107          {SNDRV_SEQ_EVENT_CONTROL14, extra_decode_ctrl14},          {SNDRV_SEQ_EVENT_CONTROL14, extra_decode_ctrl14},
108          /*{SNDRV_SEQ_EVENT_NONREGPARAM, extra_decode_nrpn},*/          {SNDRV_SEQ_EVENT_NONREGPARAM, extra_decode_xrpn},
109          /*{SNDRV_SEQ_EVENT_REGPARAM, extra_decode_rpn},*/          {SNDRV_SEQ_EVENT_REGPARAM, extra_decode_xrpn},
110  };  };
111    
112  /*  /*
# Line 441  static int extra_decode_ctrl14(snd_midi_ Line 442  static int extra_decode_ctrl14(snd_midi_
442          unsigned char cmd;          unsigned char cmd;
443          int idx = 0;          int idx = 0;
444    
445          if (ev->data.control.param < 32) {          cmd = MIDI_CMD_CONTROL|(ev->data.control.channel & 0x0f);
446            if (ev->data.control.param < 0x20) {
447                  if (count < 4)                  if (count < 4)
448                          return -ENOMEM;                          return -ENOMEM;
449                  if (dev->nostat && count < 6)                  if (dev->nostat && count < 6)
450                          return -ENOMEM;                          return -ENOMEM;
                 cmd = MIDI_CMD_CONTROL|(ev->data.control.channel & 0x0f);  
451                  if (cmd != dev->lastcmd || dev->nostat) {                  if (cmd != dev->lastcmd || dev->nostat) {
452                          if (count < 5)                          if (count < 5)
453                                  return -ENOMEM;                                  return -ENOMEM;
# Line 456  static int extra_decode_ctrl14(snd_midi_ Line 457  static int extra_decode_ctrl14(snd_midi_
457                  buf[idx++] = (ev->data.control.value >> 7) & 0x7f;                  buf[idx++] = (ev->data.control.value >> 7) & 0x7f;
458                  if (dev->nostat)                  if (dev->nostat)
459                          buf[idx++] = cmd;                          buf[idx++] = cmd;
460                  buf[idx++] = ev->data.control.param + 32;                  buf[idx++] = ev->data.control.param + 0x20;
461                  buf[idx++] = ev->data.control.value & 0x7f;                  buf[idx++] = ev->data.control.value & 0x7f;
                 return idx;  
462          } else {          } else {
463                  if (count < 2)                  if (count < 2)
464                          return -ENOMEM;                          return -ENOMEM;
                 cmd = MIDI_CMD_CONTROL|(ev->data.control.channel & 0x0f);  
465                  if (cmd != dev->lastcmd || dev->nostat) {                  if (cmd != dev->lastcmd || dev->nostat) {
466                          if (count < 3)                          if (count < 3)
467                                  return -ENOMEM;                                  return -ENOMEM;
# Line 470  static int extra_decode_ctrl14(snd_midi_ Line 469  static int extra_decode_ctrl14(snd_midi_
469                  }                  }
470                  buf[idx++] = ev->data.control.param & 0x7f;                  buf[idx++] = ev->data.control.param & 0x7f;
471                  buf[idx++] = ev->data.control.value & 0x7f;                  buf[idx++] = ev->data.control.value & 0x7f;
                 return idx;  
472          }          }
473            return idx;
474    }
475    
476    /* decode reg/nonreg param */
477    static int extra_decode_xrpn(snd_midi_event_t *dev, unsigned char *buf, int count, snd_seq_event_t *ev)
478    {
479            unsigned char cmd;
480            char *cbytes;
481            static char cbytes_nrpn[4] = { MIDI_CTL_NONREG_PARM_NUM_MSB,
482                                           MIDI_CTL_NONREG_PARM_NUM_LSB,
483                                           MIDI_CTL_MSB_DATA_ENTRY,
484                                           MIDI_CTL_LSB_DATA_ENTRY };
485            static char cbytes_rpn[4] =  { MIDI_CTL_REGIST_PARM_NUM_MSB,
486                                           MIDI_CTL_REGIST_PARM_NUM_LSB,
487                                           MIDI_CTL_MSB_DATA_ENTRY,
488                                           MIDI_CTL_LSB_DATA_ENTRY };
489            unsigned char bytes[4];
490            int idx = 0, i;
491    
492            if (count < 8)
493                    return -ENOMEM;
494            if (dev->nostat && count < 12)
495                    return -ENOMEM;
496            cmd = MIDI_CMD_CONTROL|(ev->data.control.channel & 0x0f);
497            bytes[0] = ev->data.control.param & 0x007f;
498            bytes[1] = (ev->data.control.param & 0x3f80) >> 7;
499            bytes[2] = ev->data.control.value & 0x007f;
500            bytes[3] = (ev->data.control.value & 0x3f80) >> 7;
501            if (cmd != dev->lastcmd && !dev->nostat) {
502                    if (count < 9)
503                            return -ENOMEM;
504                    buf[idx++] = dev->lastcmd = cmd;
505            }
506            cbytes = ev->type == SNDRV_SEQ_EVENT_NONREGPARAM ? cbytes_nrpn : cbytes_rpn;
507            for (i = 0; i < 4; i++) {
508                    if (dev->nostat)
509                            buf[idx++] = dev->lastcmd = cmd;
510                    buf[idx++] = cbytes[i];
511                    buf[idx++] = bytes[i];
512            }
513            return idx;
514  }  }
515    
516  /*  /*

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26