def new_color(self): r = random.randrange(255) g = random.randrange(255) b = random.randrange(255) self.color = pykms.RGB(r, g, b) self.color2 = pykms.RGB(r // 2, g // 2, b // 2) self.color3 = pykms.RGB(r // 3, g // 3, b // 3)
if len(planes) != 3: print("Need 3 planes!") exit(1) disable_planes(card) w = mode.hdisplay h = mode.vdisplay fbs = [] for i in range(len(planes)): fbs.append(pykms.DumbFramebuffer(card, w, h, "AR24")) pykms.draw_rect(fbs[0], 50, 50, 200, 200, pykms.RGB(128, 255, 0, 0)) pykms.draw_rect(fbs[1], 150, 50, 200, 200, pykms.RGB(128, 0, 255, 0)) pykms.draw_rect(fbs[2], 50, 150, 200, 200, pykms.RGB(128, 0, 0, 255)) set_props(crtc, { "trans-key-mode": 0, "trans-key": 0, "background": 0, "alpha_blender": 1, }) for i in range(len(planes)): plane = planes[i] fb = fbs[i] print("set crtc {}, plane {}, fb {}".format(crtc.id, p.id, fbs[i].id))
def test_am4_normal_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fb = fbs[0] pykms.draw_rect(fb, 0, 0, w, h, pykms.RGB(128, 255, 255)) pykms.draw_rect(fb, 200, 100, 50, 200, pykms.red) pykms.draw_rect(fb, w - 200 - 50, 100, 50, 200, pykms.green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.blue) pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, pykms.purple) fb = fbs[2] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, pykms.purple) crtc.set_props({ "trans-key-mode": 2, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) time.sleep(1) plane = planes[0] fb = fbs[0] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": w, "CRTC_H": h, }) time.sleep(1) plane = planes[1] fb = fbs[1] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": 0, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) time.sleep(1) plane = planes[2] fb = fbs[2] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": w - fb.width, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, })
#!/usr/bin/python3 import pykms import random import time import sys import select import argparse import selectors black = pykms.RGB(0, 0, 0) parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('--flipmode', choices=['single', 'separate'], default='single', required=False, help="""Page flip method to use: single: Page flip on all displays with one request (default) separate: Separate page flip on the displays""") args = parser.parse_args() card = pykms.Card() if not card.has_atomic: print('Atomic mode settings is not supported :(') sys.exit() if args.flipmode == 'single': print('Page flip on all displays with one request')
def set_props(ob, map): if ob.card.has_atomic: areq = pykms.AtomicReq(ob.card) for key, value in map.items(): areq.add(ob, key, value) if areq.commit_sync() != 0: print("commit failed") else: for propid,propval in map.items(): if ob.set_prop_value(propid, propval) != 0: print("setting property failed") red = pykms.RGB(255, 0, 0) green = pykms.RGB(0, 255, 0) blue = pykms.RGB(0, 0, 255) yellow = pykms.RGB(255, 255, 0) purple = pykms.RGB(255, 0, 255) white = pykms.RGB(255, 255, 255) cyan = pykms.RGB(0, 255, 255) def disable_planes(card): areq = pykms.AtomicReq(card) for p in card.planes: areq.add(p, "FB_ID", 0) areq.add(p, "CRTC_ID", 0) if areq.commit_sync() != 0:
return result card = pykms.Card() res = pykms.ResourceManager(card) conn = res.reserve_connector() crtc = res.reserve_crtc(conn) mode = conn.get_default_mode() plane = res.reserve_generic_plane(crtc) card.disable_planes() crtc.set_mode(conn, mode) fb = pykms.DumbFramebuffer(card, 256, 256, "AR24") pykms.draw_rect(fb, 0, 0, 256, 256, pykms.RGB(255, 255, 0, 0)) print("set crtc {}, plane {}, fb {}".format(crtc.id, plane.id, fb.id)) size = 50 x = 100 y = 100 while True: plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": size << 16, "SRC_Y": size << 16, "SRC_W": (fb.width - size) << 16, "SRC_H": (fb.height - size) << 16,