#!/usr/bin/env python

import time

import ardurpc
from ardurpc.connector.serial import Serial

import psutil


def run():
    con = Serial('/dev/rfcomm0', 19200)

    rpc = ardurpc.ArduRPC(connector=con)

    print('Version(Protocol): {0}'.format(rpc.getProtocolVersion()))
    print(rpc.getLibraryVersion())
    print('Version(Library): {0}'.format('.'.join([str(i) for i in rpc.getLibraryVersion()])))
    print('Handlers: {0}'.format(', '.join(rpc.get_handler_names())))

    display = rpc.get_handler_by_name("matrix")

    display.setAutoSwapBuffers(False)

    width = display.getWidth()
    height = display.getHeight()
    print(width, height)
    cpu_usage_buffer = [0 for i in range(0, width -2)]

    while True:
        cpu_usage = psutil.cpu_percent(interval=1)
        virt_mem = psutil.virtual_memory()
        virt_mem_usage = virt_mem.percent
        swap_mem = psutil.swap_memory()
        swap_mem_usage = swap_mem.percent
        print("CPU: {0} Mem: {1} Swap: {2}".format(cpu_usage, virt_mem_usage, swap_mem_usage))
        cpu_usage_buffer.pop(0)
        cpu_usage_buffer.append(int(height / 100.0 * cpu_usage))
        display.fillScreen((0,0,0))
        for i, v in enumerate(cpu_usage_buffer):
            if v == 0:
                continue
            display.drawLine(i, 8 - v, i, 8, (255, 0, 0))
        display.drawLine(width - 2, 8 - int(height / 100.0 * virt_mem_usage), width - 2, 8, (0, 255, 0))
        display.drawLine(width - 1, 8 - int(height / 100.0 * swap_mem_usage), width - 1, 8, (0, 0, 255))
        display.swapBuffers()

if __name__ == "__main__":
    run()
