Source code for pi3d.event.AbsAxisScaling

import array
import fcntl
import struct
from pi3d.event import ioctl

[docs]def EVIOCGABS(axis): return ioctl._IOR(ord('E'), 0x40 + axis, "ffffff") # get abs value/limits
[docs]class AbsAxisScaling(object): """ Fetches and implements the EV_ABS axis scaling. The constructor fetches the scaling values from the given stream for the given axis using an ioctl. There is a scale method, which scales a given value to the range -1..+1. """ def __init__(self, stream, axis): """ Fetch the scale values for this stream and fill in the instance variables accordingly. """ s = array.array("i", [1, 2, 3, 4, 5, 6]) try: x = fcntl.ioctl(stream.filehandle, EVIOCGABS(axis), s) except IOError: self.value = self.minimum = self.maximum = self.fuzz = self.flat = self.resolution = 1 else: self.value, self.minimum, self.maximum, self.fuzz, self.flat, self.resolution = struct.unpack("iiiiii", s) def __str__(self): return "Value {0} Min {1}, Max {2}, Fuzz {3}, Flat {4}, Res {5}".format(self.value, self.minimum, self.maximum, self.fuzz, self.flat, self.resolution)
[docs] def scale(self, value): """ scales the given value into the range -1..+1 """ return (float(value) - float(self.minimum)) / float(self.maximum - self.minimum) * 2.0 - 1.0