def _createGetServerConfigMsg(self, config: dict): logger.debug("MIDI-BLE RESPONSE Get server config - Successful") json = jsonpickle.dumps(config) gzip = zlib.compress(bytes(json, encoding='utf8')) sendMsg = mido.Message('sysex') sendMsg.data = [0x02, 0x00] + sysex_data.encode(gzip) return sendMsg
def _createExportProjSuccessfulMsg(self, proj): logger.debug("MIDI-BLE RESPONSE Export project - Successful") projJson = jsonpickle.dumps(proj) projGzip = zlib.compress(bytes(projJson, encoding='utf8')) sendMsg = mido.Message('sysex') sendMsg.data = [0x00, 0x60] + sysex_data.encode(projGzip) return sendMsg
def test_enc_list1_long(self): to_enc = [ 0xF6, 0xE5, 0xD4, 0xC3, 0xB2, 0xA1, 0x00, 0x00, 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6 ] enc = sysex_data.encode(to_enc) self.assertListEqual(enc, [ 0x76, 0x65, 0x54, 0x43, 0x32, 0x21, 0x00, 0x7E, 0x00, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x3F ])
def test_delete_project(): # Setup f = mock.Mock() ctrl = midi_full.MidiProjectController(callback=f) # Init in-memory config cfg = serverconfiguration.ServerConfiguration() proj = cfg.getActiveProjectOrDefault() proj.stopProcessing() # Get active project metadata testMsg = mido.Message('sysex') testMsg.data = [0x00, 0x70] + sysex_data.encode(proj.id) # Handle message ctrl.handleMidiMsg(testMsg, cfg, proj) assert f.call_count == 1 retMsg = f.call_args[0][0] # Check response message ID assert retMsg.data[0] == 0x00 assert retMsg.data[1] == 0x70
def _createEnabledControllersMsg(self, proj): status = proj.getController() controllerEnabled = {} for controller in modulation.allController: if controller in inverseControllerMap: controllerEnabled[inverseControllerMap[controller]] = False logger.debug("Status: {}".format(status.keys())) for controller in status.keys(): if controller in inverseControllerMap: controllerEnabled[inverseControllerMap[controller]] = True logger.debug( "MIDI-BLE RESPONSE Enabled controllers for active scene: {}". format(controllerEnabled)) sendMsg = mido.Message('sysex') sendMsg.data = [0x01, 0x30] + sysex_data.encode( json.dumps(controllerEnabled)) return sendMsg
def test_activate_project_successful(): # Setup f = mock.Mock() ctrl = midi_full.MidiProjectController(callback=f) # Init in-memory config cfg = serverconfiguration.ServerConfiguration() proj = cfg.getActiveProjectOrDefault() # type: project.Project proj.stopProcessing() # Activate project testMsg = mido.Message('sysex') testMsg.data = [0x00, 0x40] + sysex_data.encode( bytes(proj.id, encoding='utf8')) # Handle message ctrl.handleMidiMsg(testMsg, cfg, proj) assert f.call_count == 1 retMsg = f.call_args[0][0] # Check response message ID assert retMsg.data[0] == 0x00 assert retMsg.data[1] == 0x40
def test_import_project_error(): # Setup f = mock.Mock() ctrl = midi_full.MidiProjectController(callback=f) # Init in-memory config cfg = serverconfiguration.ServerConfiguration() proj = cfg.getActiveProjectOrDefault() # type: project.Project proj.stopProcessing() # Activate project testMsg = mido.Message('sysex') invalidJson = jsonpickle.encode(testMsg) gzip = zlib.compress(bytes(invalidJson, encoding='utf8')) testMsg.data = [0x00, 0x50] + sysex_data.encode(bytes(gzip)) # Handle message ctrl.handleMidiMsg(testMsg, cfg, proj) assert f.call_count == 1 retMsg = f.call_args[0][0] # Check response message ID assert retMsg.data[0] == 0x00 assert retMsg.data[1] == 0x5F
def test_update_server_config(): # Setup f = mock.Mock() ctrl = midi_full.MidiProjectController(callback=f) # Init in-memory config cfg = serverconfiguration.ServerConfiguration() assert not cfg.getConfiguration( serverconfiguration.CONFIG_ADVERTISE_BLUETOOTH) # Get active project metadata j_dict = json.dumps({"advertise_bluetooth": True}) gzip = zlib.compress(bytes(j_dict, encoding='utf8')) testMsg = mido.Message('sysex') testMsg.data = [0x02, 0x10] + sysex_data.encode(bytes(gzip)) # Handle message ctrl.handleMidiMsg(testMsg, cfg, None) assert f.call_count == 1 retMsg = f.call_args[0][0] # Check response message ID assert retMsg.data[0] == 0x02 assert retMsg.data[1] == 0x10 assert cfg.getConfiguration(serverconfiguration.CONFIG_ADVERTISE_BLUETOOTH)
def test_export_project(): # Setup f = mock.Mock() ctrl = midi_full.MidiProjectController(callback=f) # Init in-memory config cfg = serverconfiguration.ServerConfiguration() proj = cfg.getActiveProjectOrDefault() proj.stopProcessing() # Get active project metadata testMsg = mido.Message('sysex') testMsg.data = [0x00, 0x60] + sysex_data.encode(proj.id) # Handle message ctrl.handleMidiMsg(testMsg, cfg, proj) assert f.call_count == 1 retMsg = f.call_args[0][0] # Check response message ID assert retMsg.data[0] == 0x00 assert retMsg.data[1] == 0x60 # Decode data dec = sysex_data.decode(retMsg.data[2:]) dec = zlib.decompress(bytes(dec)) restoredProj = jsonpickle.loads(dec) # type project.Project assert restoredProj is not None assert restoredProj.id == proj.id
def test_import_project_successful(): # Setup f = mock.Mock() ctrl = midi_full.MidiProjectController(callback=f) # Init in-memory config cfg = serverconfiguration.ServerConfiguration() proj = cfg.getActiveProjectOrDefault() proj.stopProcessing() assert len(cfg.getProjectsMetadata().keys()) == 1 proj.id = "testproj" projJson = jsonpickle.dumps(proj) print(projJson) projGzip = zlib.compress(bytes(projJson, encoding='utf8')) # Get active project metadata testMsg = mido.Message('sysex') testMsg.data = [0x00, 0x50] + sysex_data.encode(bytes(projGzip)) # Handle message ctrl.handleMidiMsg(testMsg, cfg, proj) assert f.call_count == 1 retMsg = f.call_args[0][0] # Check response message ID assert retMsg.data[0] == 0x00 assert retMsg.data[1] == 0x50 assert len(cfg.getProjectsMetadata().keys()) == 2
def _createProjectsMsg(self, metadata): data = json.dumps(metadata) logger.debug("MIDI-BLE RESPONSE project metadata: {}".format(data)) sendMsg = mido.Message('sysex') sendMsg.data = [0x00, 0x30] + sysex_data.encode(data) return sendMsg
def _createUpdateVersionAvailableMsg(self, version): logger.debug( "MIDI-BLE RESPONSE Update to version {} available".format(version)) sendMsg = mido.Message('sysex') sendMsg.data = [0x00, 0x11] + sysex_data.encode(version) return sendMsg
def _createGetActiveSceneIdMsg(self, sceneId: int): logger.debug( "MIDI-BLE RESPONSE Get active scene id {}".format(sceneId)) sendMsg = mido.Message('sysex') sendMsg.data = [0x01, 0x00] + sysex_data.encode("{}".format(sceneId)) return sendMsg
def _createActiveSceneMetadataMsg(self, metadata): logger.debug( "MIDI-BLE RESPONSE Get active scene metadata {}".format(metadata)) sendMsg = mido.Message('sysex') sendMsg.data = [0x01, 0x10] + sysex_data.encode(json.dumps(metadata)) return sendMsg
def test_enc_0x80(self): to_enc = [0x80] enc = sysex_data.encode(to_enc) self.assertListEqual(enc, [0x00, 0x40])
def test_enc_list1rev(self): to_enc = [0xF6, 0xE5, 0xD4, 0xC3, 0xB2, 0xA1, 0x00] # 0 1 1 1 1 1 1 0 enc = sysex_data.encode(to_enc) self.assertListEqual(enc, [0x76, 0x65, 0x54, 0x43, 0x32, 0x21, 0x00, 0x7E])
def _createVersionMsg(self): v = version.get_version() logger.debug("MIDI-BLE RESPONSE Current Version {}".format(v)) sendMsg = mido.Message('sysex') sendMsg.data = [0x00, 0x00] + sysex_data.encode(v) return sendMsg
def test_enc_list2(self): to_enc = [0x00, 0xA1] enc = sysex_data.encode(to_enc) self.assertListEqual(enc, [0x00, 0x21, 0x20])
def _createAudioRMSMsg(self, rms): sendMsg = mido.Message('sysex') sendMsg.data = [0x02, 0x20] + sysex_data.encode("{}".format(rms)) return sendMsg