def fetch(self):
self.type_name = "enum"
arg = DrmModeObjGetPropertyC()
arg.prop_id = self.id
fcntl.ioctl(self._drm.fd, DRM_IOCTL_MODE_GETPROPERTY, arg)
if not (arg.count_enum_blobs and (arg.flags & DRM_MODE_PROP_ENUM)):
raise ValueError("not an enum property")
if arg.count_values != arg.count_enum_blobs:
raise ValueError("count_values != count_enum_blobs")
values = (ctypes.c_uint64*arg.count_values)()
arg.values_ptr = ctypes.cast(ctypes.pointer(values), ctypes.c_void_p).value
enum_blobs = (DrmModePropertyEnumC*arg.count_enum_blobs)()
arg.enum_blob_ptr = ctypes.cast(ctypes.pointer(enum_blobs), ctypes.c_void_p).value
fcntl.ioctl(self._drm.fd, DRM_IOCTL_MODE_GETPROPERTY, arg)
self.enum = {}
for i in range(arg.count_enum_blobs):
self.enum[int(values[i])] = enum_blobs[i].name
self._arg = arg
self.name = arg.name
self.flags = arg.flags
self.immutable = True if (arg.flags & DRM_MODE_PROP_IMMUTABLE) else False
评论列表
文章目录