You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.6 KiB
129 lines
3.6 KiB
#!/usr/bin/python3
|
|
|
|
import pykms
|
|
import random
|
|
import time
|
|
import sys
|
|
import select
|
|
import selectors
|
|
|
|
if len(sys.argv) != 3:
|
|
print('Usage: plane_move.py <connector0> <connector1>')
|
|
sys.exit()
|
|
|
|
card = pykms.Card()
|
|
|
|
if not card.has_atomic:
|
|
print('Atomic modesetting is not supported')
|
|
sys.exit(-1)
|
|
|
|
res = pykms.ResourceManager(card)
|
|
|
|
conn_list = []
|
|
crtc_list = []
|
|
mode_list = []
|
|
rootplane_list = []
|
|
fb_list = []
|
|
colors = []
|
|
|
|
src_w = 300
|
|
src_h = 300
|
|
|
|
for i in range(2):
|
|
conn = res.reserve_connector(sys.argv[i + 1])
|
|
if conn is None:
|
|
print('Invalid connector: {}'.format(sys.argv[i + 1]))
|
|
sys.exit(-1)
|
|
|
|
if conn.connected() == True:
|
|
conn_list.append(conn)
|
|
else:
|
|
print('connector: {} is not connected'.format(sys.argv[i + 1]))
|
|
sys.exit(-1)
|
|
|
|
crtc = res.reserve_crtc(conn)
|
|
crtc_list.append(crtc)
|
|
|
|
mode = conn.get_default_mode()
|
|
mode_list.append(mode)
|
|
|
|
fb_tmp = pykms.DumbFramebuffer(card, src_w, src_h, 'XR24');
|
|
fb_list.append(fb_tmp)
|
|
|
|
rootplane = res.reserve_primary_plane(crtc, pykms.PixelFormat.XRGB8888)
|
|
rootplane_list.append(rootplane)
|
|
|
|
card.disable_planes()
|
|
|
|
print('Using the following connectors:')
|
|
for i in range(2):
|
|
print(' {}: {} ({}x{})'.format(conn_list[i].idx, conn_list[i].fullname,
|
|
mode_list[i].hdisplay, mode_list[i].vdisplay))
|
|
|
|
colors.append(pykms.red)
|
|
colors.append(pykms.green)
|
|
|
|
for i in range(2):
|
|
pykms.draw_rect(fb_list[i], 0, 0, src_w, src_h, colors[i])
|
|
|
|
for i in range(2):
|
|
req = pykms.AtomicReq(card)
|
|
modeb = mode_list[i].to_blob(card)
|
|
req.add(conn_list[i], 'CRTC_ID', crtc_list[i].id)
|
|
req.add(crtc_list[i], {'ACTIVE': 1,
|
|
'MODE_ID': modeb.id})
|
|
req.add(rootplane_list[i], {'FB_ID': fb_list[i].id,
|
|
'CRTC_ID': crtc_list[i].id,
|
|
'SRC_W': src_w << 16,
|
|
'SRC_H': src_h << 16,
|
|
'CRTC_W': src_w,
|
|
'CRTC_H': src_h})
|
|
|
|
req.commit_sync(allow_modeset = True)
|
|
|
|
print('\nRed box on {}, Green box on {}.'.format(conn_list[0].fullname,
|
|
conn_list[1].fullname))
|
|
input('ENTER to continue\n')
|
|
|
|
# FIXME: it should be possible to move plane without disabling it, but the
|
|
# omapdrm driver does not supports it at the moment.
|
|
req = pykms.AtomicReq(card)
|
|
req.add(rootplane_list[0], {"FB_ID": 0,
|
|
"CRTC_ID": 0})
|
|
req.commit_sync(allow_modeset = True)
|
|
|
|
req = pykms.AtomicReq(card)
|
|
req.add(rootplane_list[0], {'FB_ID': fb_list[0].id,
|
|
'CRTC_ID': crtc_list[1].id,
|
|
'SRC_W': src_w << 16,
|
|
'SRC_H': src_h << 16,
|
|
'CRTC_X': 150,
|
|
'CRTC_Y': 150,
|
|
'CRTC_W': src_w,
|
|
'CRTC_H': src_h})
|
|
req.commit_sync(allow_modeset = True)
|
|
|
|
print('The red box from {} is moved underneath the green box on {}.'.format(
|
|
conn_list[0].fullname, conn_list[1].fullname))
|
|
input('ENTER to continue\n')
|
|
|
|
# FIXME: it should be possible to move plane without disabling it, but the
|
|
# omapdrm driver does not supports it at the moment.
|
|
req = pykms.AtomicReq(card)
|
|
req.add(rootplane_list[1], {"FB_ID": 0,
|
|
"CRTC_ID": 0})
|
|
req.commit_sync(allow_modeset = True)
|
|
|
|
req = pykms.AtomicReq(card)
|
|
req.add(rootplane_list[1], {'FB_ID': fb_list[1].id,
|
|
'CRTC_ID': crtc_list[0].id,
|
|
'SRC_W': src_w << 16,
|
|
'SRC_H': src_h << 16,
|
|
'CRTC_W': src_w,
|
|
'CRTC_H': src_h})
|
|
req.commit_sync(allow_modeset = True)
|
|
|
|
print('Green box on {}, Red box on {}.'.format(conn_list[0].fullname,
|
|
conn_list[1].fullname))
|
|
input('ENTER to exit\n')
|