def get_tempomaps(self): """Get tempo maps from the device""" logging.debug("Get tempo maps?") infos = self.com.get_data(SysexMessage.build_msg_req_tm()) # TODO: decode infos (seem to always be 13 zeros) tm = self.com.get_data(SysexMessage.build_msg_ack_ok(), SysexMessage.is_last_tm_page) tempofile = SysexMessage.parse_tempo_maps_pages(tm) return tempofile
def present(self): """Tests if the hardware is present and if communication is possible""" logging.debug("Hardware Present?") reply = self.com.get_data(SysexMessage.build_msg_req_con()) if reply == ('ok', 'connected'): return True return False
def _wait_for_data(self): """ Wait for and get input data :return: Answer :rtype: str, mixed """ # Wait for answer while not self.midi_in.poll(): pass # Read answer raw_answers = list() answer = list() while self.midi_in.poll(): raw_answers.append(self.midi_in.read(1)) for raw_answer in raw_answers: for event in raw_answer: for data in event[0]: answer.append(data) # Strip remaining garbage data after sysex end if data == 0xf7: break # TODO: Timeout on no reply return SysexMessage.parse(answer)
def get_mode(self): """Gets the current mode (Normal/Firmware upload)""" logging.debug("Get mode?") reply = self.com.get_data(SysexMessage.build_msg_req_mode()) if reply[0] == 'ok': return reply[1] else: raise Warning
def send(self, msg): """ Sends out SysEx message :param msg: Message :type msg: list """ logging.debug("->") if logging.getLogger().getEffectiveLevel() == logging.DEBUG: # Parse messages for debugging SysexMessage.parse(msg) try: self.midi_out.write_sys_ex(0, msg) except TypeError: # We must be running Python 3, let's send bytes self.midi_out.write_sys_ex(0, bytes(msg))
def clear_tempomaps(self): """Clear the device's tempo maps storage""" logging.debug("Clear tempo maps") self.com.send(SysexMessage.build_msg_del_tm())
def get_firmware_version(self): """Returns the firmware version in human readable form""" logging.debug("Get FW version?") self.__fw_vers = self._get_version(SysexMessage.build_msg_req_fw_vers()) return self.__fw_vers