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 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))