1027 |
|
|
1028 |
switch (id) { |
switch (id) { |
1029 |
case 0x41: { // Roland |
case 0x41: { // Roland |
1030 |
|
dmsg(3,("Roland Sysex\n")); |
1031 |
uint8_t device_id, model_id, cmd_id; |
uint8_t device_id, model_id, cmd_id; |
1032 |
if (!reader.pop(&device_id)) goto free_sysex_data; |
if (!reader.pop(&device_id)) goto free_sysex_data; |
1033 |
if (!reader.pop(&model_id)) goto free_sysex_data; |
if (!reader.pop(&model_id)) goto free_sysex_data; |
1040 |
const RingBuffer<uint8_t>::NonVolatileReader checksum_reader = reader; // so we can calculate the check sum later |
const RingBuffer<uint8_t>::NonVolatileReader checksum_reader = reader; // so we can calculate the check sum later |
1041 |
if (reader.read(&addr[0], 3) != 3) goto free_sysex_data; |
if (reader.read(&addr[0], 3) != 3) goto free_sysex_data; |
1042 |
if (addr[0] == 0x40 && addr[1] == 0x00) { // System Parameters |
if (addr[0] == 0x40 && addr[1] == 0x00) { // System Parameters |
1043 |
|
dmsg(3,("\tSystem Parameter\n")); |
1044 |
} |
} |
1045 |
else if (addr[0] == 0x40 && addr[1] == 0x01) { // Common Parameters |
else if (addr[0] == 0x40 && addr[1] == 0x01) { // Common Parameters |
1046 |
|
dmsg(3,("\tCommon Parameter\n")); |
1047 |
} |
} |
1048 |
else if (addr[0] == 0x40 && (addr[1] & 0xf0) == 0x10) { // Part Parameters (1) |
else if (addr[0] == 0x40 && (addr[1] & 0xf0) == 0x10) { // Part Parameters (1) |
1049 |
switch (addr[3]) { |
dmsg(3,("\tPart Parameter\n")); |
1050 |
|
switch (addr[2]) { |
1051 |
case 0x40: { // scale tuning |
case 0x40: { // scale tuning |
1052 |
|
dmsg(3,("\t\tScale Tuning\n")); |
1053 |
uint8_t scale_tunes[12]; // detuning of all 12 semitones of an octave |
uint8_t scale_tunes[12]; // detuning of all 12 semitones of an octave |
1054 |
if (reader.read(&scale_tunes[0], 12) != 12) goto free_sysex_data; |
if (reader.read(&scale_tunes[0], 12) != 12) goto free_sysex_data; |
1055 |
uint8_t checksum; |
uint8_t checksum; |
1056 |
if (!reader.pop(&checksum)) goto free_sysex_data; |
if (!reader.pop(&checksum)) goto free_sysex_data; |
1057 |
if (GSCheckSum(checksum_reader, 12) != checksum) goto free_sysex_data; |
// some are not sending a GS checksum, so we ignore it for now |
1058 |
|
//if (GSCheckSum(checksum_reader, 12)) goto free_sysex_data; |
1059 |
for (int i = 0; i < 12; i++) scale_tunes[i] -= 64; |
for (int i = 0; i < 12; i++) scale_tunes[i] -= 64; |
1060 |
AdjustScale((int8_t*) scale_tunes); |
AdjustScale((int8_t*) scale_tunes); |
1061 |
|
dmsg(3,("\t\t\tNew scale applied.\n")); |
1062 |
break; |
break; |
1063 |
} |
} |
1064 |
} |
} |
1199 |
} |
} |
1200 |
|
|
1201 |
String Engine::Version() { |
String Engine::Version() { |
1202 |
String s = "$Revision: 1.34 $"; |
String s = "$Revision: 1.35 $"; |
1203 |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
1204 |
} |
} |
1205 |
|
|