def test_read_write(): event = Event() event.write(0x6) assert event.size() == 1 assert event.read(0x2) == 0x2 assert event.read(0x4) == 0x4
def test_poll(): poll = select.poll() queue = Queue() event = Event() can = Can(board.CAN_0) uart = Uart(1) # Register both event channels. poll.register(queue) poll.register(event) poll.register(can) poll.register(uart) # Timeout waiting for event. assert poll.poll(0.01) == [] # Event write, poll and read. event.write(0x1) assert poll.poll() == [(event, select.POLLIN)] assert event.read(0x1) == 0x1 # Queue write, poll and read. queue.write(b'foo') assert poll.poll() == [(queue, select.POLLIN)] assert queue.read(3) == b'foo'
def test_bad_arguments(): event = Event() with assert_raises(TypeError, "can't convert NoneType to int"): event.read(None) with assert_raises(TypeError, "can't convert NoneType to int"): event.write(None)
def test_poll(): poll = select.poll() queue = Queue() event = Event() # Register both event channels. poll.register(queue) poll.register(event) # Timeout waiting for event. assert poll.poll(0.01) == [] # Event write, poll and read. event.write(0x1) assert poll.poll() == [(event, select.POLLIN)] assert event.read(0x1) == 0x1 # Queue write, poll and read. queue.write(b"foo") assert poll.poll() == [(queue, select.POLLIN)] assert queue.read(3) == b"foo"
class MusicPlayer(object): def __init__(self): self.state = STATE_STOPPED self.dac = Dac([Board.PIN_DAC0, Board.PIN_DAC1], 10000) self.event = Event() self.playlist = os.listdir() self.index = 0 self.fsong = None self.timer = None self.identity = None def main(self): # Start the periodic fill timer. self.timer = Timer(0.1, self.event, EVENT_TIMEOUT, flags=Timer.PERIODIC) self.timer.start() print('Pumbaa Music Player!') print('Playlist:') for number, song in enumerate(self.playlist, 1): print("{}: {}".format(number, song)) # Start the main loop of the music player. while True: mask = self.event.read(EVENT_ALL) if mask & EVENT_STOP: self.handle_event_stop() if mask & EVENT_PAUSE: self.handle_event_pause() if mask & EVENT_NEXT: self.handle_event_next() if mask & EVENT_PREV: self.handle_event_prev() if mask & EVENT_PLAY: self.handle_event_play() # Play if the state in playing, eyy! if self.state == STATE_PLAYING: self.play_chunk() def start(self): if self.identity is None: self.identity = _thread.start_new_thread(self.main, ()) def play(self): self.event.write(EVENT_PLAY) def pause(self): self.event.write(EVENT_PAUSE) def stop(self): self.event.write(EVENT_STOP) def next(self): self.event.write(EVENT_NEXT) def prev(self): self.event.write(EVENT_PREV) def handle_event_play(self): path = self.playlist[self.index] if self.state == STATE_STOPPED: self.fsong = open(path, "rb") self.state = STATE_PLAYING print("Playing |", path) def handle_event_pause(self): if self.state == STATE_PLAYING: print("Paused |", self.playlist[self.index]) self.state = STATE_PAUSED def handle_event_stop(self): if self.state in [STATE_PLAYING, STATE_PAUSED]: self.fsong.close() self.state = STATE_STOPPED def handle_event_next(self): if self.state in [STATE_PLAYING, STATE_PAUSED]: self.fsong.close() self.index += 1 self.index %= len(self.playlist) self.fsong = open(self.playlist[self.index], "rb") def handle_event_prev(self): if self.state in [STATE_PLAYING, STATE_PAUSED]: self.fsong.close() self.index -= 1 self.index %= len(self.playlist) self.fsong = open(self.playlist[self.index], "rb") def play_chunk(self): samples = self.fsong.read(1024) if len(samples) > 0: self.dac.async_convert(samples) else: self.handle_event_next() print("Playing |", self.playlist[self.index])