#!/usr/bin/env python
from __future__ import print_function
import os
import sys
import time
import select

sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), ".."))
from panda import Panda

setcolor = ["\033[1;32;40m", "\033[1;31;40m"]
unsetcolor = "\033[00m"

if __name__ == "__main__":
  port_number = int(os.getenv("PORT", 0))
  claim = os.getenv("CLAIM") is not None

  serials = Panda.list()
  if os.getenv("SERIAL"):
    serials = filter(lambda x: x==os.getenv("SERIAL"), serials)

  pandas = list(map(lambda x: Panda(x, claim=claim), serials))

  if not len(pandas):
    sys.exit("no pandas found")

  if os.getenv("BAUD") is not None:
    for panda in pandas:
      panda.set_uart_baud(port_number, int(os.getenv("BAUD")))

  while True:
    for i, panda in enumerate(pandas):
      while True:
        ret = panda.serial_read(port_number)
        if len(ret) > 0:
          sys.stdout.write(setcolor[i] + str(ret) + unsetcolor)
          sys.stdout.flush()
        else:
          break
      if select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
        ln = sys.stdin.readline()
        if claim:
          panda.serial_write(port_number, ln)
      time.sleep(0.01)