from machine import Pin
from ws2812 import WS2812

class Led:
    red = 0
    green = 0
    blue =  0
    brightness = 0

    def __init__(self):
        Pin(11, Pin.OUT).value(1) # power up RGB led
        self._led = WS2812(12, 1)
        self.show()

    def show(self):
        self._led.pixels_fill(self.color())
        self._led.pixels_show()

    def color(self):
        # color with brightness applied
        return tuple([round(v / 100 * self.brightness) for v in (self.red, self.green, self.blue)])

led = Led()

from steptime import STEPTIME

class Pad:
    # magic numbers from qpad code
    loop = 200
    settle = 20000

    def __init__(self, sm_id, pin):
        Pin(pin, Pin.IN, Pin.PULL_UP)
        self._steptime = STEPTIME(sm_id, pin)

        # determine base value
        self._steptime.put(self.loop)
        self._steptime.put(self.settle)
        self._base = self._steptime.get() # TODO take a bigger sample

    def get(self):
        self._steptime.put(self.loop)
        self._steptime.put(self.settle)
        return self._base - self._steptime.get()

pad0 = Pad(1, 26) # sm id 0 already taken by ws2812
pad1 = Pad(2, 0)

import sys, select, time

poll = select.poll()
poll.register(sys.stdin, select.POLLIN)

while True:

    if poll.poll(0):
        cmd =  sys.stdin.readline().strip()

        if cmd[:4] == "red:":
            led.red = int(cmd[4:])
            led.show()
        elif cmd[:6] == "green:":
            led.green = int(cmd[6:])
            led.show()
        elif cmd[:5] == "blue:":
            led.blue = int(cmd[5:])
            led.show()
        elif cmd[:11] == "brightness:":
            led.brightness = int(cmd[11:])
            led.show()

    else:
        print(pad0.get(), pad1.get())
