#!/usr/bin/python3 import pykms import sys card = pykms.Card() res = pykms.ResourceManager(card) conn1 = False conn2 = False for conn in card.connectors: if not conn1: conn1 = conn elif not conn2: conn2 = conn else: break crtc1 = res.reserve_crtc(conn1) mode1 = conn1.get_default_mode() modeb1 = mode1.to_blob(card) print("CRTC idx %d goes to %s connector" % (crtc1.idx, conn1.fullname)) if conn2: crtc2 = res.reserve_crtc(conn2) mode2 = conn2.get_default_mode() modeb2 = mode2.to_blob(card) print("CRTC idx %d goes to %s connector" % (crtc2.idx, conn2.fullname)) fbwidth = 480 fbheight = 270 fb = pykms.DumbFramebuffer(card, fbwidth, fbheight, "AR24"); pykms.draw_test_pattern(fb); # Disable request card.disable_planes() plane_list = [] while True: plane = res.reserve_generic_plane(crtc1) if plane: print("Got plane idx %d" % plane.idx) plane_list.append(plane) else: break print("Got %d planes" % len(plane_list)) req = pykms.AtomicReq(card) req.add(conn1, "CRTC_ID", crtc1.id) req.add(crtc1, {"ACTIVE": 1, "MODE_ID": modeb1.id}) input("Press enter to enable crtc idx %d at %s" % (crtc1.idx, conn1.fullname)) r = req.commit_sync(allow_modeset = True) print("Crtc enable request returned %d\n" % r) x = 0 y = 0 z = 0 for plane in plane_list: input("Press enter to enable plane idx %d on crtc idx %d" % (plane.idx, crtc1.idx)) req = pykms.AtomicReq(card) req.add(plane, {"FB_ID": fb.id, "CRTC_ID": crtc1.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": x, "CRTC_Y": y, "CRTC_W": fb.width, "CRTC_H": fb.height, "zorder": z}) r = req.commit_sync() print("Plane enable request returned %d\n" % r) x = x + 50 y = y + 50 z = z + 1 if not conn2: sys.exit() req = pykms.AtomicReq(card) req.add(conn2, "CRTC_ID", crtc2.id) req.add(crtc2, {"ACTIVE": 1, "MODE_ID": modeb2.id}) input("Press enter to enable crtc idx %d at %s" % (crtc2.idx, conn2.fullname)) r = req.commit_sync(allow_modeset = True) print("Crtc enable request returned %d\n" % r) x = 0 y = 0 z = 0 # Code assumes that planes for crtc1 also work for crtc2 for plane in reversed(plane_list): input("Press enter to disable plane idx %d on crtc idx %d" % (plane.idx, crtc1.idx)) req = pykms.AtomicReq(card) req.add(plane, {"FB_ID": 0, "CRTC_ID": 0}) r = req.commit_sync(allow_modeset = True) print("Plane disable request returned %d\n" % r) input("Press enter to enable plane idx %d on crtc idx %d" % (plane.idx, crtc2.idx)) req = pykms.AtomicReq(card) req.add(plane, {"FB_ID": fb.id, "CRTC_ID": crtc2.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": x, "CRTC_Y": y, "CRTC_W": fb.width, "CRTC_H": fb.height, "zorder": z}) r = req.commit_sync(allow_modeset = True) print("Plane enable request returned %d\n" % r) x = x + 50 y = y + 50 z = z + 1 input("press enter to exit\n")