#Gage Condon and Dan Flores
#Campus School Project
#CPB Host Code

import time
import board
import busio
import digitalio
import analogio
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService

#setup Bluetooth
ble = BLERadio()
uart_connection = None
# See if any existing connections are providing UARTService.
if ble.connected:
    for connection in ble.connections:
        if UARTService in connection:
            uart_connection = connection
        break

#set up button
button = digitalio.DigitalInOut(board.A4)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP

#setup LEDs
red_led = digitalio.DigitalInOut(board.A2)
red_led.direction = digitalio.Direction.OUTPUT
green_led = digitalio.DigitalInOut(board.A3)
green_led.direction = digitalio.Direction.OUTPUT
red_led.value = True


# Use a timeout of zero so we don't delay while waiting for a message.
matrix_portal = busio.UART(board.TX, board.RX, baudrate=9600, timeout=0)

message_started = False
while True:

    if not uart_connection:
            for adv in ble.start_scan(ProvideServicesAdvertisement, timeout=5):
                if UARTService in adv.services:
                    uart_connection = ble.connect(adv)
                    break
            print("Not connected :(")
            ble.stop_scan()
    while not ble.connected:
        red_led.value = True
        green_led.value = False
        pass

    print("Connected!")
    while uart_connection and uart_connection.connected:
        red_led.value = False
        green_led.value = True

        # Check for incoming message
        incoming_bytes = uart_connection[UARTService].in_waiting
        if incoming_bytes:
            bytes_in = uart_connection[UARTService].read(incoming_bytes)
            print("Received: ", bytes_in)
            message = bytes_in.decode()
            matrix_portal.write(str.encode("a"))

        if not button.value:
            uart_connection[UARTService].write(str.encode("a"))
            time.sleep(0.1)



















