diff options
-rw-r--r-- | drm.py | 29 | ||||
-rwxr-xr-x | main.py | 35 |
2 files changed, 35 insertions, 29 deletions
@@ -0,0 +1,29 @@ +#!/usr/bin/env python +from ctypes import * + +class drm_api(Structure): + pass + +drm_api._fields_ = [ + ("destroy", CFUNCTYPE(None, POINTER(drm_api))), + ("name", c_char_p), + ("driver_name", c_char_p), + ("create_screen", + CFUNCTYPE(c_void_p, POINTER(drm_api), c_int, c_void_p)), +] + +class DrmApi(object): + + def __init__(self, handle): + self.drm_api = handle.drm_api_create() + + def __del__(self): + self.drm_api[0].destroy(self.drm_api) + + def create_screen(self, fd): + screen = self.drm_api[0].create_screen(self.drm_api, fd, None) + print screen + + @property + def name(self): + return self.drm_api[0].name @@ -3,44 +3,21 @@ from ctypes import * import os import sys +import drm + os.environ["LD_BIND_NOW"] = "Yes, please!" raw = CDLL(sys.argv[1]) -class drm_api(Structure): - pass - -drm_api._fields_ = [ - ("destroy", CFUNCTYPE(None, POINTER(drm_api))), - ("name", c_char_p), - ("driver_name", c_char_p), - ("create_screen", - CFUNCTYPE(c_void_p, POINTER(drm_api), c_int, c_void_p)), -] - raw.drmOpen.argtypes = [c_char_p, c_char_p] raw.drmOpen.restype = c_int -raw.drm_api_create.restype = POINTER(drm_api) - -class DrmApi(object): - - def __init__(self, handle): - self.drm_api = handle.drm_api_create() +raw.drm_api_create.restype = POINTER(drm.drm_api) - def __del__(self): - self.drm_api[0].destroy(self.drm_api) - - def create_screen(self, fd): - screen = self.drm_api[0].create_screen(self.drm_api, fd, None) - print screen - - @property - def name(self): - return self.drm_api[0].name - -da = DrmApi(raw) +da = drm.DrmApi(raw) print "Loaded drm_api object, name %s" % da.name screen = da.create_screen(raw.drmOpen(da.name, None)) + +del da |