summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--py/gamma.py39
-rw-r--r--py/helpers.py19
2 files changed, 51 insertions, 7 deletions
diff --git a/py/gamma.py b/py/gamma.py
new file mode 100644
index 0000000..69722ce
--- /dev/null
+++ b/py/gamma.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python3
+
+import pykms
+from helpers import *
+
+# This hack makes drm initialize the fbcon, setting up the default connector
+card = pykms.Card()
+card = 0
+
+card = pykms.Card()
+
+conn = card.get_first_connected_connector()
+mode = conn.get_default_mode()
+crtc = conn.get_current_crtc()
+
+arr = bytearray(256*2*4)
+view = memoryview(arr).cast("H")
+
+for i in range(256):
+ g = round(255 * pow(i / 255.0, 1 / 2.2))
+
+ view[i * 4 + 0] = g << 8
+ view[i * 4 + 1] = g << 8
+ view[i * 4 + 2] = g << 8
+ view[i * 4 + 3] = 0
+
+gamma = pykms.Blob(card, arr);
+
+set_props(crtc, {
+ "GAMMA_LUT": gamma.id,
+})
+
+input("press enter to remove gamma\n")
+
+set_props(crtc, {
+ "GAMMA_LUT": 0,
+})
+
+input("press enter to exit\n")
diff --git a/py/helpers.py b/py/helpers.py
index c523523..456efcd 100644
--- a/py/helpers.py
+++ b/py/helpers.py
@@ -12,13 +12,18 @@ def props(o):
print("%-15s %d (%#x)" % (prop.name, propval, propval))
def set_props(ob, map):
- areq = pykms.AtomicReq(ob.card)
-
- for key, value in map.items():
- areq.add(ob, key, value)
-
- if areq.commit_sync() != 0:
- print("commit failed")
+ 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)