Lines Matching +full:group +full:- +full:default

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Helpers for UMP <-> MIDI 1.0 byte stream conversion
66 * UMP -> MIDI 1 byte stream conversion
81 default: in cvt_ump_system_to_legacy()
95 default: in cvt_ump_midi1_to_legacy()
105 unsigned char status = midi2->note.status; in cvt_ump_midi2_to_legacy()
106 unsigned char channel = midi2->note.channel; in cvt_ump_midi2_to_legacy()
113 buf[1] = midi2->note.note; in cvt_ump_midi2_to_legacy()
114 buf[2] = downscale_16_to_7bit(midi2->note.velocity); in cvt_ump_midi2_to_legacy()
119 buf[1] = midi2->paf.note; in cvt_ump_midi2_to_legacy()
120 buf[2] = downscale_32_to_7bit(midi2->paf.data); in cvt_ump_midi2_to_legacy()
123 buf[1] = midi2->cc.index; in cvt_ump_midi2_to_legacy()
124 buf[2] = downscale_32_to_7bit(midi2->cc.data); in cvt_ump_midi2_to_legacy()
127 buf[1] = downscale_32_to_7bit(midi2->caf.data); in cvt_ump_midi2_to_legacy()
130 if (midi2->pg.bank_valid) { in cvt_ump_midi2_to_legacy()
133 buf[2] = midi2->pg.bank_msb; in cvt_ump_midi2_to_legacy()
136 buf[5] = midi2->pg.bank_lsb; in cvt_ump_midi2_to_legacy()
138 buf[7] = midi2->pg.program; in cvt_ump_midi2_to_legacy()
141 buf[1] = midi2->pg.program; in cvt_ump_midi2_to_legacy()
144 v = downscale_32_to_14bit(midi2->pb.data); in cvt_ump_midi2_to_legacy()
152 buf[2] = midi2->rpn.bank; in cvt_ump_midi2_to_legacy()
155 buf[5] = midi2->rpn.index; in cvt_ump_midi2_to_legacy()
158 v = downscale_32_to_14bit(midi2->rpn.data); in cvt_ump_midi2_to_legacy()
164 default: in cvt_ump_midi2_to_legacy()
169 /* convert a UMP 7-bit SysEx message to MIDI 1.0 byte stream */
191 for (; bytes; bytes--, size++) { in cvt_ump_sysex7_to_legacy()
197 offset -= 8; in cvt_ump_sysex7_to_legacy()
209 * snd_ump_convert_from_ump - convert from UMP to legacy MIDI
212 * @group_ret: pointer to store the target group
215 * The target group is stored at @group_ret.
242 * MIDI 1 byte stream -> UMP conversion
246 unsigned char group, u32 *data, bool finish) in cvt_legacy_sysex_to_ump() argument
249 bool start = cvt->in_sysex == 1; in cvt_legacy_sysex_to_ump()
260 *data = ump_compose(UMP_MSG_TYPE_DATA, group, status, cvt->len); in cvt_legacy_sysex_to_ump()
262 for (i = 0; i < cvt->len; i++) { in cvt_legacy_sysex_to_ump()
263 *data |= cvt->buf[i] << offset; in cvt_legacy_sysex_to_ump()
268 offset -= 8; in cvt_legacy_sysex_to_ump()
270 cvt->len = 0; in cvt_legacy_sysex_to_ump()
272 cvt->in_sysex = 0; in cvt_legacy_sysex_to_ump()
274 cvt->in_sysex++; in cvt_legacy_sysex_to_ump()
280 unsigned char group, u32 *data) in cvt_legacy_system_to_ump() argument
282 data[0] = ump_compose(UMP_MSG_TYPE_SYSTEM, group, 0, cvt->buf[0]); in cvt_legacy_system_to_ump()
283 if (cvt->cmd_bytes > 1) in cvt_legacy_system_to_ump()
284 data[0] |= cvt->buf[1] << 8; in cvt_legacy_system_to_ump()
285 if (cvt->cmd_bytes > 2) in cvt_legacy_system_to_ump()
286 data[0] |= cvt->buf[2]; in cvt_legacy_system_to_ump()
292 cc->rpn_set = 0; in reset_rpn()
293 cc->nrpn_set = 0; in reset_rpn()
294 cc->cc_rpn_msb = cc->cc_rpn_lsb = 0; in reset_rpn()
295 cc->cc_data_msb = cc->cc_data_lsb = 0; in reset_rpn()
296 cc->cc_data_msb_set = cc->cc_data_lsb_set = 0; in reset_rpn()
303 if (!(cc->cc_data_lsb_set || cc->cc_data_msb_set)) in fill_rpn()
306 if (!flush && (!cc->cc_data_lsb_set || !cc->cc_data_msb_set)) in fill_rpn()
309 if (cc->rpn_set) { in fill_rpn()
310 midi2->rpn.status = UMP_MSG_STATUS_RPN; in fill_rpn()
311 midi2->rpn.bank = cc->cc_rpn_msb; in fill_rpn()
312 midi2->rpn.index = cc->cc_rpn_lsb; in fill_rpn()
313 } else if (cc->nrpn_set) { in fill_rpn()
314 midi2->rpn.status = UMP_MSG_STATUS_NRPN; in fill_rpn()
315 midi2->rpn.bank = cc->cc_nrpn_msb; in fill_rpn()
316 midi2->rpn.index = cc->cc_nrpn_lsb; in fill_rpn()
321 midi2->rpn.data = upscale_14_to_32bit((cc->cc_data_msb << 7) | in fill_rpn()
322 cc->cc_data_lsb); in fill_rpn()
330 unsigned char group, in cvt_legacy_cmd_to_ump() argument
334 const unsigned char *buf = cvt->buf; in cvt_legacy_cmd_to_ump()
346 group, 0, buf[0]); in cvt_legacy_cmd_to_ump()
355 cc = &cvt->bank[channel]; in cvt_legacy_cmd_to_ump()
357 /* special handling: treat note-on with 0 velocity as note-off */ in cvt_legacy_cmd_to_ump()
363 group, status, channel); in cvt_legacy_cmd_to_ump()
369 midi2->note.note = buf[1]; in cvt_legacy_cmd_to_ump()
370 midi2->note.velocity = upscale_7_to_16bit(buf[2]); in cvt_legacy_cmd_to_ump()
373 midi2->paf.note = buf[1]; in cvt_legacy_cmd_to_ump()
374 midi2->paf.data = upscale_7_to_32bit(buf[2]); in cvt_legacy_cmd_to_ump()
380 cc->rpn_set = 1; in cvt_legacy_cmd_to_ump()
381 cc->cc_rpn_msb = buf[2]; in cvt_legacy_cmd_to_ump()
382 if (cc->cc_rpn_msb == 0x7f && cc->cc_rpn_lsb == 0x7f) in cvt_legacy_cmd_to_ump()
387 cc->rpn_set = 1; in cvt_legacy_cmd_to_ump()
388 cc->cc_rpn_lsb = buf[2]; in cvt_legacy_cmd_to_ump()
389 if (cc->cc_rpn_msb == 0x7f && cc->cc_rpn_lsb == 0x7f) in cvt_legacy_cmd_to_ump()
394 cc->nrpn_set = 1; in cvt_legacy_cmd_to_ump()
395 cc->cc_nrpn_msb = buf[2]; in cvt_legacy_cmd_to_ump()
399 cc->nrpn_set = 1; in cvt_legacy_cmd_to_ump()
400 cc->cc_nrpn_lsb = buf[2]; in cvt_legacy_cmd_to_ump()
403 cc->cc_data_msb_set = 1; in cvt_legacy_cmd_to_ump()
404 cc->cc_data_msb = buf[2]; in cvt_legacy_cmd_to_ump()
407 cc->bank_set = 1; in cvt_legacy_cmd_to_ump()
408 cc->cc_bank_msb = buf[2]; in cvt_legacy_cmd_to_ump()
411 cc->bank_set = 1; in cvt_legacy_cmd_to_ump()
412 cc->cc_bank_lsb = buf[2]; in cvt_legacy_cmd_to_ump()
415 cc->cc_data_lsb_set = 1; in cvt_legacy_cmd_to_ump()
416 cc->cc_data_lsb = buf[2]; in cvt_legacy_cmd_to_ump()
418 default: in cvt_legacy_cmd_to_ump()
419 midi2->cc.index = buf[1]; in cvt_legacy_cmd_to_ump()
420 midi2->cc.data = upscale_7_to_32bit(buf[2]); in cvt_legacy_cmd_to_ump()
425 midi2->pg.program = buf[1]; in cvt_legacy_cmd_to_ump()
426 if (cc->bank_set) { in cvt_legacy_cmd_to_ump()
427 midi2->pg.bank_valid = 1; in cvt_legacy_cmd_to_ump()
428 midi2->pg.bank_msb = cc->cc_bank_msb; in cvt_legacy_cmd_to_ump()
429 midi2->pg.bank_lsb = cc->cc_bank_lsb; in cvt_legacy_cmd_to_ump()
430 cc->bank_set = 0; in cvt_legacy_cmd_to_ump()
434 midi2->caf.data = upscale_7_to_32bit(buf[1]); in cvt_legacy_cmd_to_ump()
437 midi2->pb.data = upscale_14_to_32bit(buf[1] | (buf[2] << 7)); in cvt_legacy_cmd_to_ump()
439 default: in cvt_legacy_cmd_to_ump()
446 static int do_convert_to_ump(struct ump_cvt_to_ump *cvt, unsigned char group, in do_convert_to_ump() argument
449 /* bytes for 0x80-0xf0 */ in do_convert_to_ump()
453 /* bytes for 0xf0-0xff */ in do_convert_to_ump()
460 cvt->in_sysex = 1; in do_convert_to_ump()
461 cvt->len = 0; in do_convert_to_ump()
465 if (!cvt->in_sysex) in do_convert_to_ump()
467 return cvt_legacy_sysex_to_ump(cvt, group, data, true); in do_convert_to_ump()
475 data[0] = ump_compose(UMP_MSG_TYPE_SYSTEM, group, 0, c); in do_convert_to_ump()
478 cvt->buf[0] = c; in do_convert_to_ump()
479 cvt->len = 1; in do_convert_to_ump()
480 cvt->cmd_bytes = bytes; in do_convert_to_ump()
481 cvt->in_sysex = 0; /* abort SysEx */ in do_convert_to_ump()
487 cvt->buf[0] = c; in do_convert_to_ump()
488 cvt->len = 1; in do_convert_to_ump()
489 cvt->cmd_bytes = bytes; in do_convert_to_ump()
490 cvt->in_sysex = 0; /* abort SysEx */ in do_convert_to_ump()
494 if (cvt->in_sysex) { in do_convert_to_ump()
495 cvt->buf[cvt->len++] = c; in do_convert_to_ump()
496 if (cvt->len == 6) in do_convert_to_ump()
497 return cvt_legacy_sysex_to_ump(cvt, group, data, false); in do_convert_to_ump()
501 if (!cvt->len) in do_convert_to_ump()
504 cvt->buf[cvt->len++] = c; in do_convert_to_ump()
505 if (cvt->len < cvt->cmd_bytes) in do_convert_to_ump()
507 cvt->len = 1; in do_convert_to_ump()
508 if ((cvt->buf[0] & 0xf0) == UMP_MIDI1_MSG_REALTIME) in do_convert_to_ump()
509 return cvt_legacy_system_to_ump(cvt, group, data); in do_convert_to_ump()
510 return cvt_legacy_cmd_to_ump(cvt, group, protocol, data, cvt->cmd_bytes); in do_convert_to_ump()
514 * snd_ump_convert_to_ump - convert legacy MIDI byte to UMP packet
516 * @group: target UMP group
523 void snd_ump_convert_to_ump(struct ump_cvt_to_ump *cvt, unsigned char group, in snd_ump_convert_to_ump() argument
526 cvt->ump_bytes = do_convert_to_ump(cvt, group, protocol, c, cvt->ump); in snd_ump_convert_to_ump()