예제 #1
0
파일: device.py 프로젝트: EMATech/BBS1
 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
예제 #2
0
파일: device.py 프로젝트: EMATech/BBS1
 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
예제 #3
0
    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)
예제 #4
0
파일: device.py 프로젝트: EMATech/BBS1
 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
예제 #5
0
    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))
예제 #6
0
파일: device.py 프로젝트: EMATech/BBS1
 def clear_tempomaps(self):
     """Clear the device's tempo maps storage"""
     logging.debug("Clear tempo maps")
     self.com.send(SysexMessage.build_msg_del_tm())
예제 #7
0
파일: device.py 프로젝트: EMATech/BBS1
 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