analgauge.py

Fri, 17 Feb 2017 13:26:39 +0100

author
mbayer
date
Fri, 17 Feb 2017 13:26:39 +0100
changeset 6
b84252fe69c6
parent 4
99a5439f349f
permissions
-rw-r--r--

changes to run client on windows platform too via libusb dev

"""
Simple CPU load Display

On Linux simply run with
    python analgauge.py &

On Windows:
    Make sure to install libusb-win32-devel-filter-1.2.6.0.exe
    from here: https://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/1.2.6.0/
    Then assign a filter to the connected device matching VENDOR_ID and PRODUCT_ID

    pythonw.exe analgauge.py
"""
import usb.core
from psutil import cpu_percent
from time import sleep
from random import random
from sys import exit, platform

#VALUE_MIN = 0x00 # TODO
VALUE_MAX = 0x78

VENDOR_ID = 0x16c0
PRODUCT_ID = 0x05df

class AnalGauge:
    def __init__(self):
        self.dev = usb.core.find(
            idVendor = VENDOR_ID,
            idProduct = PRODUCT_ID
        )
        if not self.dev:
            print "AnalGauge Device not found!"
            exit(1)
        self.dev.set_configuration()

    def update(self, d):
        try:
            data = [int(d)]
            result = self.dev.ctrl_transfer(
                0x21, 0x9,
                wValue = 0x200, wIndex = 0x00,
                data_or_wLength = data
                )
        except usb.core.USBError, e:
            if platform == "linux":
                self.dev.detach_kernel_driver(0)
            else:
                exit(1)
            print(e)

if __name__ == "__main__":
    g = AnalGauge()

    #g.update(VALUE_MAX)
    #exit()

    #while True:
    #    g.update(random() * VALUE_MAX)
    #    sleep(0.5)

    while True:
        pct = cpu_percent(interval=1)
        g.update((VALUE_MAX * pct)/100)

mercurial