Lines Matching defs:dev

59 typedef void (*event_encode_t)(snd_midi_event_t *dev, snd_seq_event_t *ev);
67 static void note_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
68 static void one_param_ctrl_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
69 static void pitchbend_ctrl_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
70 static void two_param_ctrl_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
71 static void one_param_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
72 static void songpos_event(snd_midi_event_t *dev, snd_seq_event_t *ev);
118 static int extra_decode_ctrl14(snd_midi_event_t *dev, unsigned char *buf, int len, const snd_seq_event_t *ev);
119 static int extra_decode_xrpn(snd_midi_event_t *dev, unsigned char *buf, int count, const snd_seq_event_t *ev);
123 int (*decode)(snd_midi_event_t *dev, unsigned char *buf, int len, const snd_seq_event_t *ev);
154 snd_midi_event_t *dev;
157 dev = (snd_midi_event_t *)calloc(1, sizeof(snd_midi_event_t));
158 if (dev == NULL)
161 dev->buf = malloc(bufsize);
162 if (dev->buf == NULL) {
163 free(dev);
167 dev->bufsize = bufsize;
168 dev->lastcmd = 0xff;
169 dev->type = ST_INVALID;
170 *rdev = dev;
176 * \param dev MIDI event parser.
183 void snd_midi_event_free(snd_midi_event_t *dev)
185 if (dev != NULL) {
186 free(dev->buf);
187 free(dev);
193 * \param dev MIDI event parser.
202 void snd_midi_event_no_status(snd_midi_event_t *dev, int on)
204 dev->nostat = on ? 1 : 0;
210 inline static void reset_encode(snd_midi_event_t *dev)
212 dev->read = 0;
213 dev->qlen = 0;
214 dev->type = ST_INVALID;
219 * \param dev MIDI event parser.
221 * This function resets the MIDI encoder of the parser \a dev.
228 void snd_midi_event_reset_encode(snd_midi_event_t *dev)
230 reset_encode(dev);
235 * \param dev MIDI event parser.
237 * This function resets the MIDI decoder of the parser \a dev.
244 void snd_midi_event_reset_decode(snd_midi_event_t *dev)
246 dev->lastcmd = 0xff;
251 * \param dev MIDI event parser.
259 void snd_midi_event_init(snd_midi_event_t *dev)
261 snd_midi_event_reset_encode(dev);
262 snd_midi_event_reset_decode(dev);
267 * \param dev MIDI event parser.
282 int snd_midi_event_resize_buffer(snd_midi_event_t *dev, size_t bufsize)
286 if (bufsize == dev->bufsize)
291 old_buf = dev->buf;
292 dev->buf = new_buf;
293 dev->bufsize = bufsize;
294 reset_encode(dev);
301 * \param[in] dev MIDI event parser.
313 * The buffer in \a dev is used to hold any bytes of a not-yet-complete MIDI
362 long snd_midi_event_encode(snd_midi_event_t *dev, const unsigned char *buf, long count, snd_seq_event_t *ev)
370 rc = snd_midi_event_encode_byte(dev, *buf++, ev);
383 * \param[in] dev MIDI event parser.
400 int snd_midi_event_encode_byte(snd_midi_event_t *dev, int c, snd_seq_event_t *ev)
415 (c != MIDI_CMD_COMMON_SYSEX_END || dev->type != ST_SYSEX)) {
417 dev->buf[0] = c;
419 dev->type = (c & 0x0f) + ST_SPECIAL;
421 dev->type = (c >> 4) & 0x07;
422 dev->read = 1;
423 dev->qlen = status_event[dev->type].qlen;
425 if (dev->qlen > 0) {
427 dev->buf[dev->read++] = c;
428 if (dev->type != ST_SYSEX)
429 dev->qlen--;
432 dev->buf[1] = c;
433 dev->qlen = status_event[dev->type].qlen - 1;
434 dev->read = 2;
437 if (dev->qlen == 0) {
438 ev->type = status_event[dev->type].event;
441 if (status_event[dev->type].encode) /* set data values */
442 status_event[dev->type].encode(dev, ev);
443 if (dev->type >= ST_SPECIAL)
444 dev->type = ST_INVALID;
446 } else if (dev->type == ST_SYSEX) {
448 dev->read >= dev->bufsize) {
452 ev->data.ext.len = dev->read;
453 ev->data.ext.ptr = dev->buf;
455 dev->read = 0; /* continue to parse */
457 reset_encode(dev); /* all parsed */
466 static void note_event(snd_midi_event_t *dev, snd_seq_event_t *ev)
468 ev->data.note.channel = dev->buf[0] & 0x0f;
469 ev->data.note.note = dev->buf[1];
470 ev->data.note.velocity = dev->buf[2];
474 static void one_param_ctrl_event(snd_midi_event_t *dev, snd_seq_event_t *ev)
476 ev->data.control.channel = dev->buf[0] & 0x0f;
477 ev->data.control.value = dev->buf[1];
481 static void pitchbend_ctrl_event(snd_midi_event_t *dev, snd_seq_event_t *ev)
483 ev->data.control.channel = dev->buf[0] & 0x0f;
484 ev->data.control.value = (int)dev->buf[2] * 128 + (int)dev->buf[1] - 8192;
488 static void two_param_ctrl_event(snd_midi_event_t *dev, snd_seq_event_t *ev)
490 ev->data.control.channel = dev->buf[0] & 0x0f;
491 ev->data.control.param = dev->buf[1];
492 ev->data.control.value = dev->buf[2];
496 static void one_param_event(snd_midi_event_t *dev, snd_seq_event_t *ev)
498 ev->data.control.value = dev->buf[1];
502 static void songpos_event(snd_midi_event_t *dev, snd_seq_event_t *ev)
504 ev->data.control.value = (int)dev->buf[2] * 128 + (int)dev->buf[1];
509 * \param[in] dev MIDI event parser.
559 long snd_midi_event_decode(snd_midi_event_t *dev, unsigned char *buf, long count, const snd_seq_event_t *ev)
574 return extra_event[type].decode(dev, buf, count, ev);
587 snd_midi_event_reset_decode(dev);
600 if ((cmd & 0xf0) == 0xf0 || dev->lastcmd != cmd || dev->nostat) {
601 dev->lastcmd = cmd;
657 static int extra_decode_ctrl14(snd_midi_event_t *dev, unsigned char *buf, int count, const snd_seq_event_t *ev)
666 if (dev->nostat && count < 6)
668 if (cmd != dev->lastcmd || dev->nostat) {
671 buf[idx++] = dev->lastcmd = cmd;
675 if (dev->nostat)
682 if (cmd != dev->lastcmd || dev->nostat) {
685 buf[idx++] = dev->lastcmd = cmd;
694 static int extra_decode_xrpn(snd_midi_event_t *dev, unsigned char *buf, int count, const snd_seq_event_t *ev)
711 if (dev->nostat && count < 12)
718 if (cmd != dev->lastcmd && !dev->nostat) {
721 buf[idx++] = dev->lastcmd = cmd;
725 if (dev->nostat)
726 buf[idx++] = dev->lastcmd = cmd;