unitree_sdk2_python/unitree_sdk2py/utils/timerfd.py

46 lines
1.3 KiB
Python

import math
import ctypes
from .clib_lookup import CLIBLookup
class timespec(ctypes.Structure):
_fields_ = [("sec", ctypes.c_long), ("nsec", ctypes.c_long)]
__slots__ = [name for name,type in _fields_]
@classmethod
def from_seconds(cls, secs):
c = cls()
c.seconds = secs
return c
@property
def seconds(self):
return self.sec + self.nsec / 1000000000
@seconds.setter
def seconds(self, secs):
x, y = math.modf(secs)
self.sec = int(y)
self.nsec = int(x * 1000000000)
class itimerspec(ctypes.Structure):
_fields_ = [("interval", timespec),("value", timespec)]
__slots__ = [name for name,type in _fields_]
@classmethod
def from_seconds(cls, interval, value):
spec = cls()
spec.interval.seconds = interval
spec.value.seconds = value
return spec
# function timerfd_create
timerfd_create = CLIBLookup("timerfd_create", ctypes.c_int, (ctypes.c_long, ctypes.c_int))
# function timerfd_settime
timerfd_settime = CLIBLookup("timerfd_settime", ctypes.c_int, (ctypes.c_int, ctypes.c_int, ctypes.POINTER(itimerspec), ctypes.POINTER(itimerspec)))
# function timerfd_gettime
timerfd_gettime = CLIBLookup("timerfd_gettime", ctypes.c_int, (ctypes.c_int, ctypes.POINTER(itimerspec)))