"""Scan for and display nearby bluetooth devices"""

___title___        = "Bluetooth Scan"
___license___      = "MIT"	
___dependencies___ = ["sleep", "app", "sim800"]
___categories___   = ["Other", "System"]

import ugfx, app
from machine import Neopix
np = Neopix()

import sim800
from tilda import Buttons
from time import sleep

btrestore = False
duration = 10
status_height = 20

ugfx.init()
ugfx.clear()
ugfx.set_default_font(ugfx.FONT_FIXED)

def instructions(duration):
    ugfx.Label(5, 180, 240, 30, "Press A to start, B to change scan length or MENU to exit")
    ugfx.Label(5, 210, 240, 15, "Scan requires ~{0} seconds".format(duration))

if not sim800.btison():
    sim800.btpoweron()
    btrestore = True

instructions(duration)
# while (not Buttons.is_pressed(Buttons.BTN_A)) and (not Buttons.is_pressed(Buttons.BTN_B)) and (not Buttons.is_pressed(Buttons.BTN_Menu)):
while not Buttons.is_pressed(Buttons.BTN_Menu):
    a = Buttons.is_pressed(Buttons.BTN_A)
    b = Buttons.is_pressed(Buttons.BTN_B)
    if not a and not  b:
        ugfx.poll()
        continue

    if b:
        duration = duration + 5
        if duration > 60:
            duration = 5
        ugfx.clear()
        instructions(duration)
        continue

    ugfx.clear()

    np.display([0,0])
    np.display([0x000099, 0x000099])
    devs = sim800.btscan(duration*1000)
    np.display([0x00, 0x00])
    
    if len(devs) == 0:
        ugfx.Label(0, 0, 240, 25, "No devices found")
        np.display([0x110000,0x110000])
        sleep(1)
        np.display([0,0])
    else:
        if type(devs[0]) == int: 
            devs = [devs]

        y = 0
        for dev in devs[:20]:
            ugfx.Label(0, y, 240, 25, "{3}dB {1}".format(*dev))
            y += status_height
    instructions(duration)
            
## App quitting... 
if btrestore:
    sim800.btpoweroff()

ugfx.clear()
app.restart_to_default()
