from adafruit_macropad import MacroPad
import usb_cdc, asyncio, random

macropad = MacroPad()
macropad.pixels.brightness = 0.3
run_color = 0xad20b4
wait_color = 0x21f312

# déclaration de notre Mutex
blink_mutex = asyncio.Lock()

async def get_key(taskslist):
    while True:
        key_event = macropad.keys.events.get()
        if key_event:
            if key_event.pressed:
                taskslist.append(asyncio.create_task(blink(key_event.key_number)))
        await asyncio.sleep(0)

async def blink(led):
    timer = random.random() * 3
    macropad.pixels[led] = wait_color
    if blink_mutex.locked():
        print("Wait for mutex l:{}".format(led))

    await blink_mutex.acquire()

    print("Aquire mutex l:{}".format(led))
    for _ in range(5):
        macropad.pixels[led] = run_color
        await asyncio.sleep(timer)
        macropad.pixels[led] = 0x0
        await asyncio.sleep(timer)

    blink_mutex.release()

async def manage_tasks(taskslist):
    tasks = 0
    while True:
        for task_number in range(0, len(taskslist)):
            if taskslist[task_number].done():
                taskslist.pop(task_number)
                break
        await asyncio.sleep(0)

async def main():
    tasks = []
    tasks.append(asyncio.create_task(get_key(tasks)))
    tasks.append(asyncio.create_task(manage_tasks(tasks)))
    await asyncio.gather(*tasks)

asyncio.run(main())
