Source code for pi3d.event.EventStruct

import struct

from pi3d.event import Format

[docs]class EventStruct(object): """ A single event from the linux input event system. Events are tuples: (Time, Type, Code, Value) In addition we remember the stream it came from. Externally, only the unhandled event handler gets passed the whole event, but the SYN handler gets the code and value. (Also the keyboard handler, but those are renamed to key and value.) This class is responsible for converting the Linux input event structure into one of these objects and back again. """ def __init__(self, stream, time=None, eventType=None, eventCode=None, eventValue=None): """ Create a new event. Generally all but the stream parameter are left out; we will want to populate the object from a Linux input event using decode. """ self.stream = stream self.time = time self.eventType = eventType self.eventCode = eventCode self.eventValue = eventValue def __str__(self): """ Uses the stream to give the device type and whether it is currently grabbed. """ return "Input event %s[%d], %d -- %f: 0x%x(0x%x) = 0x%x" % ( self.stream.deviceType, self.stream.deviceIndex, self.stream.grabbed, self.time, self.eventType, self.eventCode, self.eventValue) def __repr__(self): return "EventStruct(%s, %f, 0x%x, 0x%x, 0x%x)" % ( repr(self.stream), self.time, self.eventType, self.eventCode, self.eventValue)
[docs] def encode(self): """ Encode this event into a Linux input event structure. The output is packed into a string. It is unlikely that this function will be required, but it might as well be here. """ tint = long(self.time) tfrac = long((self.time - tint)*1000000) return struct.pack(Format.Event, tsec, tfrac, self.eventType, self.eventCode, self.eventValue)
[docs] def decode(self, s): """ Decode a Linux input event into the fields of this object. Arguments: *s* A binary structure packed into a string. """ (tsec, tfrac, self.eventType, self.eventCode, self.eventValue) = struct.unpack(Format.Event, s) self.time = tsec + tfrac / 1000000.0