1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# -*- python -*-
'''
pylibgamma — Python 3 wrapper for libgamma
Copyright © 2014 Mattias Andrée (maandree@member.fsf.org)
This library is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this library. If not, see <http://www.gnu.org/licenses/>.
'''
from libgamma_method import MethodCapabilities
def list_methods(operation : int) -> list:
'''
List available adjustment methods by their order of preference based on the environment.
@param operation Allowed values:
0: Methods that the environment suggests will work, excluding fake.
1: Methods that the environment suggests will work, including fake.
2: All real non-fake methods.
3: All real methods.
4: All methods.
Other values invoke undefined behaviour.
@return :list<int> A list of available adjustment methods.
'''
from libgamma_native_facade import libgamma_native_list_methods
return libgamma_native_list_methods(operation)
def is_method_available(method : int) -> bool:
'''
Check whether an adjustment method is available, non-existing (invalid) methods will be
identified as not available under the rationale that the library may be out of date.
@param method The adjustment method.
@return Whether the adjustment method is available.
'''
from libgamma_native_facade import libgamma_native_is_method_available
return not libgamma_native_is_method_available(method) == 0
def method_capabilities(method : int) -> MethodCapabilities:
'''
Return the capabilities of an adjustment method.
@param this The data structure to fill with the method's capabilities
@param method The adjustment method (display server and protocol).
'''
from libgamma_native_facade import libgamma_native_method_capabilities
caps = libgamma_native_method_capabilities(method)
return MethodCapabilities(*caps)
def method_default_site(method : int) -> str:
'''
Return the default site for an adjustment method.
@param method The adjustment method (display server and protocol.)
@return The default site, `None` if it cannot be determined or
if multiple sites are not supported by the adjustment
method.
'''
from libgamma_native_facade import libgamma_native_method_default_site
return libgamma_native_method_default_site(method)
def method_default_site_variable(method : int) -> str:
'''
Return the default variable that determines
the default site for an adjustment method.
@param method The adjustment method (display server and protocol.)
@return The environ variables that is used to determine the
default site. `None` if there is none, that is, if
the method does not support multiple sites.
'''
from libgamma_native_facade import libgamma_native_method_default_site_variable
return libgamma_native_method_default_site_variable(method)
def behex_edid(edid : bytes) -> str:
'''
Convert a raw representation of an EDID to a lowercase hexadecimal representation.
@param edid The EDID in raw representation.
@return The EDID in lowercase hexadecimal representation.
'''
return behex_edid_lowercase(edid)
def behex_edid_lowercase(edid : bytes) -> str:
'''
Convert a raw representation of an EDID to a lowercase hexadecimal representation.
@param edid The EDID in raw representation.
@return The EDID in lowercase hexadecimal representation.
'''
rc = ''
for b in edid:
rc += '0123456789abcdef'[(b >> 4) & 15]
rc += '0123456789abcdef'[(b >> 0) & 15]
return rc
def behex_edid_uppercase(edid : bytes) -> str:
'''
Convert a raw representation of an EDID to an uppercase hexadecimal representation.
@param edid The EDID in raw representation.
@return The EDID in uppercase hexadecimal representation.
'''
rc = ''
for b in edid:
rc += '0123456789ABCDEF'[(b >> 4) & 15]
rc += '0123456789ABCDEF'[(b >> 0) & 15]
return rc
def unhex_edid(edid : str) -> bytes:
'''
Convert an hexadecimal representation of an EDID to a raw representation.
@param edid The EDID in hexadecimal representation.
@return The EDID in raw representation.
'''
rc = []
edid = edid.lower()
for i in range(0, len(edid), 2):
a, b = edid[i + 0], edid[i + 1]
a = '0123456789abcdef'.find(a) << 4
b = '0123456789abcdef'.find(b) << 0
rc.append(a | b)
return bytes(rc)
|