Example #1
0
TEST_F (ElektronDataBothFixture, ElektronDataBoth8Bit) {
	uint8_t data[1024];
	encoder.init(DATA_ENCODER_INIT(data, countof(data)));
	for (uint16_t i = 0; i < 512; i++) {
		CHECK_DATA_ENCODE(encoder.pack8(i & 0xFF));
	}
	uint16_t len = encoder.finish();

	decoder.init(DATA_ENCODER_INIT(data, len));
	for (uint16_t i = 0; i < 512; i++) {
		uint8_t tmp;
		CHECK_DATA_ENCODE(decoder.get8(&tmp));
		CHECK_EQUAL(i & 0xFF, (int)tmp);
	}
}
Example #2
0
void MNMDataToSysexEncoder::init(DATA_ENCODER_INIT(uint8_t *_sysex, uint16_t _sysexLen), MidiUartParent *_uart)
{
  ElektronDataToSysexEncoder::init(DATA_ENCODER_INIT(_sysex, _sysexLen), _uart);
  lastByte = 0;
  lastCnt = 0;
  isFirstByte = true;
}
Example #3
0
bool MDSong::fromSysex(uint8_t *data, uint16_t len) {
	if (len < 0x1a - 7)
		return false;
	
	if (!ElektronHelper::checkSysexChecksum(data, len)) {
		return false;
	}
	
	numRows = (len - (0x1A - 7)) / 12;
	
	origPosition = data[3];
	ElektronSysexDecoder decoder(DATA_ENCODER_INIT(data + 4, len - 4));
	decoder.stop7Bit();
	decoder.get((uint8_t *)name, 16);
	name[16] = '\0';
	
	for (int i = 0; i < numRows; i++) {
		decoder.start7Bit();
		decoder.get((uint8_t *)&rows[i], 4);
		decoder.get16(&rows[i].mutes);
		decoder.get16(&rows[i].tempo);
		decoder.get(&rows[i].startPosition, 2);
		decoder.stop7Bit();
	}
	
	return true;
}
Example #4
0
uint16_t MDSong::toSysex(uint8_t *data, uint16_t len) {
	ElektronDataToSysexEncoder encoder(DATA_ENCODER_INIT(data, len));
	if (len < (uint16_t)(0x1F + numRows * 12 ))
		return 0;
	
	return toSysex(encoder);
}
Example #5
0
bool compareMonoSysex(uint8_t *buf, uint8_t *buf2) {
	uint8_t buftmp[8192];
	uint8_t buftmp2[8192];
	uint16_t len = 0x1978;
	MNMSysexDecoder decoder(DATA_ENCODER_INIT(buf + 10, len - 10));
	decoder.get(buftmp + 1, len - 10);
	MNMSysexDecoder decoder2(DATA_ENCODER_INIT(buf2 + 10,  - 10));
	decoder2.get(buftmp2 + 1, len - 10);
	for (uint16_t i = 1; i < len - 10; i++) {
		if (buftmp[i] != buftmp2[i]) {
			printf("mono sysex different at 0x%x, %x != %x\n", i, buftmp[i], buftmp2[i]);
			return false;
		}
	}
	return true;
}
Example #6
0
TEST_F (ElektronDataBothFixture, ElektronDataBoth16Bit) {
	uint8_t data[8192];
	encoder.init(DATA_ENCODER_INIT(data, countof(data)));
	uint16_t cnt = 1024;
	uint16_t start = 0;
	for (uint16_t i = start; i < start + cnt; i++) {
		CHECK_DATA_ENCODE(encoder.pack16(i));
	}
	uint16_t len = encoder.finish();

	decoder.init(DATA_ENCODER_INIT(data, len));
	for (uint16_t i = start; i < start + cnt; i++) {
		uint16_t tmp;
		CHECK_DATA_ENCODE(decoder.get16(&tmp));
		CHECK_EQUAL(i, (uint16_t)tmp);
	}
}
Example #7
0
void MNMSysexDecoder::init(DATA_ENCODER_INIT(uint8_t *_data, uint16_t _maxLen)) {
	DataDecoder::init(DATA_ENCODER_INIT(_data, _maxLen));
	cnt7 = 0;
	cnt = 0;
	repeatCount = 0;
	repeatByte = 0;
	totalCnt = 0;
}
Example #8
0
TEST_F (ElektronDataToSysexFixture, ElektronDataToSysexByteHigh) {
	uint8_t data[16];
	encoder.init(DATA_ENCODER_INIT(data, countof(data)));
	CHECK_DATA_ENCODE(encoder.pack8(128));
	uint16_t len = encoder.finish();
	CHECK_EQUAL(2, len);
	CHECK_EQUAL((1 << 6), (int)data[0]);
	CHECK_EQUAL(0, (int)data[1]);
}
Example #9
0
TEST_F (ElektronDataBothFixture, ElektronDataBoth8BitMore) {
	uint8_t data[65000];
	encoder.init(DATA_ENCODER_INIT(data, countof(data)));
	for (uint16_t i = 0; i < 55000; i++) {
		CHECK_DATA_ENCODE(encoder.pack8(i & 0xFF));
	}
	uint16_t len = encoder.finish();

	decoder.init(DATA_ENCODER_INIT(data, len));
	for (uint16_t i = 0; i < 55000; i++) {
		uint8_t tmp;
		CHECK_DATA_ENCODE(decoder.get8(&tmp));
		if (tmp != (i & 0xFF)) {
			printf("error at %d\n", i);
			//			printf("%p, %p: %d\n", encoder.data + encoder.maxLen - 8, encoder.ptr,
			//						 encoder.data + encoder.maxLen - 8 - encoder.ptr);
		}
		CHECK_EQUAL(i & 0xFF, (int)tmp);
	}
}
Example #10
0
TEST_F (ElektronDataToSysexFixture, ElektronDataTestOverflow2) {
	uint8_t data[8];
	encoder.init(DATA_ENCODER_INIT(data, countof(data)));
	CHECK_DATA_ENCODE(encoder.pack8(0));
	CHECK_DATA_ENCODE(encoder.pack8(1));
	CHECK_DATA_ENCODE(encoder.pack8(2));
	CHECK_DATA_ENCODE(encoder.pack8(3));
	CHECK_DATA_ENCODE(encoder.pack8(4));
	CHECK_DATA_ENCODE(encoder.pack8(5));
	CHECK_DATA_ENCODE(encoder.pack8(6));
	CHECK_DATA_ENCODE_NOT(encoder.pack8(0));
}
void ElektronDataToSysexEncoder::init(DATA_ENCODER_INIT(uint8_t *_sysex, uint16_t _sysexLen),
																MidiUartParent *_uart) {
	DataEncoder::init(DATA_ENCODER_INIT(_sysex, _sysexLen));
	uart = _uart;
	if (uart != NULL) {
		data = ptr = buf;
	}

	inChecksum = false;
	checksum = 0;
	retLen = 0;
	start7Bit();
}
Example #12
0
TEST_F (ElektronDataToSysexFixture, ElektronDataToSysexBytes) {
	uint8_t data[16];
	encoder.init(DATA_ENCODER_INIT(data, countof(data)));
	for (uint8_t i = 0; i < 7; i++) {
		CHECK_DATA_ENCODE(encoder.pack8(128));
	}
	uint16_t len = encoder.finish();
	CHECK_EQUAL(8, len);
	CHECK_EQUAL(0x7F, (int)data[0]);
	for (uint8_t i = 0; i < 7; i++) {
		CHECK_EQUAL(0, (int)data[1 + i]);
	}
}
Example #13
0
TEST_F (ElektronDataToSysexFixture, ElektronDataToSysex32Bit2) {
	uint8_t data[16];
	encoder.init(DATA_ENCODER_INIT(data, countof(data)));
	uint32_t tmp = 0x01;
	encoder.pack32(tmp);
	uint16_t len = encoder.finish();
	CHECK_EQUAL(5, len);
	CHECK_EQUAL(0, (int)data[0]);
	CHECK_EQUAL(0, (int)data[1]);
	CHECK_EQUAL(0, (int)data[2]);
	CHECK_EQUAL(0, (int)data[3]);
	CHECK_EQUAL(1, (int)data[4]);
}
Example #14
0
bool MDKit::fromSysex(uint8_t *data, uint16_t len) {
  if (len != (0x4d1 - 7)) {
    GUI.flash_strings_fill("WRONG LEN", "");
    GUI.setLine(GUI.LINE2);
    GUI.flash_put_value16(0, len);
    return false;
  }

  if (!ElektronHelper::checkSysexChecksum(data, len)) {
    GUI.flash_strings_fill("WRONG CKSUM", "");
    return false;
  }

  origPosition = data[3];

  ElektronSysexDecoder decoder(DATA_ENCODER_INIT(data + 4, len - 4));
  GUI.setLine(GUI.LINE2);
  decoder.stop7Bit();
  decoder.get((uint8_t *)name, 16);
  name[16] = '\0';

  decoder.get((uint8_t *)params, 16 * 24);
  decoder.get(levels, 16);

  decoder.start7Bit();
  decoder.get32(models, 16);
  decoder.stop7Bit(); // reset 7 bit
  decoder.start7Bit();
  for (uint8_t i = 0; i < 16; i++) {
    decoder.get((uint8_t *)&lfos[i], 36);
  }
  decoder.stop7Bit();

  decoder.get(reverb, 8);
  decoder.get(delay, 8);
  decoder.get(eq, 8);
  decoder.get(dynamics, 8);

  decoder.start7Bit();
  decoder.get(trigGroups, 16);
  decoder.get(muteGroups, 16);

  return true;
}
Example #15
0
bool MDGlobal::fromSysex(uint8_t *data, uint16_t len) {
	if (len != 0xC4 - 6)  {
		//		printf("wrong length\n");
		// wrong length 
		return false;
	}
	
	if (!ElektronHelper::checkSysexChecksum(data, len)) {
		//		printf("wrong checksum\n");
		return false;
	}
	
	origPosition = data[3];
	ElektronSysexDecoder decoder(DATA_ENCODER_INIT(data + 4, len - 4));
	decoder.stop7Bit();
	decoder.get(drumRouting, 16);
	
	decoder.start7Bit();
	decoder.get(keyMap, 128);
	decoder.stop7Bit();
	
	decoder.get8(&baseChannel);
	decoder.get8(&unused);
	decoder.get16(&tempo);
	decoder.getb(&extendedMode);
	
	uint8_t byte = 0;
	decoder.get8(&byte);
	clockIn = IS_BIT_SET(byte, 0);
	transportIn = IS_BIT_SET(byte, 4);
	clockOut = IS_BIT_SET(byte, 5);
	transportOut = IS_BIT_SET(byte, 6);
	decoder.getb(&localOn);
	
	decoder.get(&drumLeft, 12);
	
	for (int i = 0; i < 128; i++) {
		if (keyMap[i] < 16) {
			drumMapping[keyMap[i]] = i;
		}
	}
	
	return true;
}
Example #16
0
bool MDKitShort::fromSysex(uint8_t *data, uint16_t len) {
	if (len != (0x4d1 - 7)) {
		//    GUI.flash_strings_fill("WRONG LEN", "");
		//    GUI.setLine(GUI.LINE2);
		//    GUI.flash_put_value16(0, len);
		return false;
	}
	
	if (!ElektronHelper::checkSysexChecksum(data, len)) {
		return false;
	}
	
	origPosition = data[3];
	ElektronSysexDecoder decoder(DATA_ENCODER_INIT(data + 4, len - 4));
	decoder.stop7Bit();
	decoder.get((uint8_t *)name, 16);
	name[16] = '\0';
	
	decoder.skip(24 * 16 + 16);
	decoder.start7Bit();
	decoder.get32(models, 16);
	
	return true;
}
Example #17
0
uint16_t MDGlobal::toSysex(uint8_t *data, uint16_t len) {
	ElektronDataToSysexEncoder encoder(DATA_ENCODER_INIT(data, len));
	return toSysex(encoder);
	if (len < 0xC5)
		return 0;
}
Example #18
0
void MNMSysexToDataEncoder::init(DATA_ENCODER_INIT(uint8_t *_data, uint16_t _maxLen)) {
  ElektronSysexToDataEncoder::init(DATA_ENCODER_INIT(_data, _maxLen));
  repeat = 0;
	totalCnt = 0;
}
Example #19
0
void dumpMonoSysex(uint8_t *buf, uint16_t len) {
	uint8_t buftmp[8192];
	MNMSysexDecoder decoder(DATA_ENCODER_INIT(buf + 10, len - 10));
	decoder.get(buftmp + 1, len - 10);
	hexdump(buftmp, len - 9);
}