Source code for bibliopixel.drivers.SimPixel.driver

import struct, webbrowser
from . import websocket
from .. server_driver import ServerDriver
from ... main import args

DEFAULT_SIMPIXEL_URL = 'http://simpixel.io'


[docs]class SimPixelOpenerServer(websocket.Server): def __init__(self, port, selectInterval): super().__init__(port, selectInterval) url = args.ARGS and ( args.ARGS.simpixel or (args.ARGS.s and DEFAULT_SIMPIXEL_URL)) if url is True: url = DEFAULT_SIMPIXEL_URL SimPixel.open_browser(url)
[docs]class SimPixel(ServerDriver): """ Output a simulation of your display to your browser at http://simpixel.io Provides the same parameters of :py:class:`bibliopixel.drivers.driver_base.DriverBase` as well as those below: :param int port: Port to serve websocket server on. :param pixel_positions: Override the automatic generation of physical pixel layout. This value can be generated via the methods in :py:mod:`bibliopixel.layout.geometry` """ SERVER_CLASS = SimPixelOpenerServer SERVER_KWDS = {'selectInterval': 0.001}
[docs] @staticmethod def open_browser(url=DEFAULT_SIMPIXEL_URL, new=0, autoraise=True): if url and not url.startswith('no'): webbrowser.open(url, new=new, autoraise=autoraise)
def __init__(self, num=32, port=1337, **kwds): """ Args: num: number of LEDs being visualizer. port: the port on which the SimPixel server is running. pixel_positions: the positions of the LEDs in 3-d space. **kwds: keywords passed to DriverBase. """ super().__init__(num, address=port, **kwds) def _on_positions(self): # Flatten list of led positions. if self.server: pl = [c for p in self.pixel_positions for c in p] positions = bytearray(struct.pack('<%sh' % len(pl), *pl)) self.server.update(positions=positions) def _send_packet(self): if not self.server: raise ValueError( 'Tried to send a packet before Layout.start() was called') self.server.update(pixels=self._buf)
from ... util import deprecated if deprecated.allowed(): # pragma: no cover open_browser = SimPixel.open_browser DriverSimPixel = SimPixel