hidtools.hidraw module

class HidrawDevice(device)

Bases: object

A device as exposed by the kernel hidraw module. hidraw allows direct access to the HID device, both for reading and writing.

with open('/dev/hidraw0', 'r+b') as fd:
    dev = HidrawDevice(fd)
    while True:
        dev.read_events()  # this blocks
        print(f'We received {len(dev.events)} events so far')
Parameters

device (File) – a file-like object pointing to /dev/hidrawX

name

The device name

bustype

The numerical bus type (0x3 for USB, 0x5 for Bluetooth, see linux/input.h)

vendor_id

16-bit numerical vendor ID

product_id

16-bit numerical product ID

report_descriptor

The hidtools.hid.ReportDescriptor for this device

events

All events accumulated so far, a list of HidrawEvent

… attribute:: time_offset

The offset to be used for recording events. By default the offset is the timestamp of the first event. When recording multiple devices, the time_offset from the first device to receive an event should be copied to the other device to ensure all recordings are in sync.

dump(file=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, from_the_beginning=False)

Format this device in a file format in the form of

R: 123 43 5 52 2 ... # the report descriptor size, followed by the integers
N: the device name
I: 3 124 abcd # bustype, vendor, product
# comments are allowed
E: 00001.000002 AB 12 34 56 # sec, usec, length, data
...

This method is designed to be called repeatedly and only print the new events on each call. To repeat the dump from the beginning, set from_the_beginning to True.

Parameters
  • file (File) – the output file to write to

  • from_the_beginning (bool) – if True, print everything again instead of continuing where we left off

read_events()

Read events from the device and store them in the device.

This function simply calls os.read(), it is the caller’s task to either make sure the device is set nonblocking or to handle any KeyboardInterrupt if this call does end up blocking.

Returns

a tuple of (index, count) of the events added.

class HidrawEvent(sec, usec, bytes)

Bases: object

A single event from a hidraw device. The first event always has a timestamp of 0.0, all other events are offset accordingly.

sec

Timestamp seconds

usec

Timestamp microseconds

bytes

The data bytes read for this event