Skip to content

Commit 4e67b0d

Browse files
committed
This might fix an issue with the touch being mirrored
1 parent 41a0bc6 commit 4e67b0d

File tree

3 files changed

+86
-16
lines changed

3 files changed

+86
-16
lines changed

api_drivers/py_api_drivers/frozen/indev/pointer_framework.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ def is_calibrated(self):
6363
cal.deltaX,
6464
cal.alphaY,
6565
cal.betaY,
66-
cal.deltaY
66+
cal.deltaY,
67+
cal.mirrorX,
68+
cal.mirrorY
6769
)
6870

6971
def _get_coords(self):
@@ -77,6 +79,11 @@ def _calc_coords(self, x, y):
7779
cal = self._cal
7880
x = int(round(x * cal.alphaX + y * cal.betaX + cal.deltaX))
7981
y = int(round(x * cal.alphaY + y * cal.betaY + cal.deltaY))
82+
83+
if cal.mirrorX:
84+
x = self._orig_width - x - 1
85+
if cal.mirrorY:
86+
y = self._orig_height - y - 1
8087
else:
8188
if (
8289
self._startup_rotation == lv.DISPLAY_ROTATION._180 or # NOQA
@@ -114,9 +121,15 @@ def _read(self, drv, data): # NOQA
114121

115122
if (
116123
self._debug and
117-
(x != self._last_x or y != self._last_y or self._last_state != state) # NOQA
124+
(x != self._last_x or
125+
y != self._last_y or
126+
self._last_state != state)
118127
):
119-
print(f'{self.__class__.__name__}(raw_x={self._last_x}, raw_y={self._last_y}, x={data.point.x}, y={data.point.y}, state={"PRESSED" if data.state else "RELEASED"})') # NOQA
128+
template = '{}(raw_x={}, raw_y={}, x={}, y={}, state={})'
129+
print(template.format(
130+
self.__class__.__name__,
131+
x, y, data.point.x, data.point.y,
132+
"PRESSED" if data.state else "RELEASED"))
120133

121134
self._last_state = state
122135
self._last_x, self._last_y = x, y

api_drivers/py_api_drivers/frozen/indev/touch_calibration/touch_cal_data.py

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,6 @@ def __init__(self, name):
9898
blob = bytearray(24)
9999
try:
100100
self._config.get_blob("ts_config", blob)
101-
(
102-
alphaX, betaX, deltaX, alphaY, betaY, deltaY
103-
) = struct.unpack("<IIIIII", blob)
104-
105-
self._alphaX = round(lcd_utils.int_float_converter(alphaX), 7)
106-
self._betaX = round(lcd_utils.int_float_converter(betaX), 7)
107-
self._deltaX = round(lcd_utils.int_float_converter(deltaX), 7)
108-
self._alphaY = round(lcd_utils.int_float_converter(alphaY), 7)
109-
self._betaY = round(lcd_utils.int_float_converter(betaY), 7)
110-
self._deltaY = round(lcd_utils.int_float_converter(deltaY), 7)
111101

112102
except OSError:
113103
self._alphaX = None
@@ -116,6 +106,19 @@ def __init__(self, name):
116106
self._alphaY = None
117107
self._betaY = None
118108
self._deltaY = None
109+
self._mirror = None
110+
else:
111+
(
112+
alphaX, betaX, deltaX, alphaY, betaY, deltaY, mirror
113+
) = struct.unpack("<IIIIIIB", blob)
114+
115+
self._alphaX = round(lcd_utils.int_float_converter(alphaX), 7)
116+
self._betaX = round(lcd_utils.int_float_converter(betaX), 7)
117+
self._deltaX = round(lcd_utils.int_float_converter(deltaX), 7)
118+
self._alphaY = round(lcd_utils.int_float_converter(alphaY), 7)
119+
self._betaY = round(lcd_utils.int_float_converter(betaY), 7)
120+
self._deltaY = round(lcd_utils.int_float_converter(deltaY), 7)
121+
self._mirror = mirror
119122

120123
self._is_dirty = False
121124

@@ -127,7 +130,8 @@ def save(self):
127130
self._deltaX,
128131
self._alphaY,
129132
self._betaY,
130-
self._deltaY
133+
self._deltaY,
134+
self._mirror
131135
):
132136
self._config.erase('ts_config')
133137

@@ -140,14 +144,52 @@ def save(self):
140144
deltaY = lcd_utils.int_float_converter(self._deltaY)
141145

142146
blob = struct.pack(
143-
'<IIIIII',
144-
alphaX, betaX, deltaX, alphaY, betaY, deltaY
147+
'<IIIIIIB',
148+
alphaX, betaX, deltaX, alphaY, betaY, deltaY, self._mirror
145149
)
146150

147151
self._config.set_blob("ts_config", blob)
148152

149153
self._config.commit()
150154

155+
@property
156+
def mirrorX(self):
157+
if self._mirror is None:
158+
return None
159+
160+
return bool(self._mirror >> 1 & 0x1)
161+
162+
@mirrorX.setter
163+
def mirrorX(self, value):
164+
if self._mirror is None:
165+
self._mirror = 0
166+
167+
if value:
168+
self._mirror |= 0x2
169+
else:
170+
self._mirror &= ~0x2
171+
172+
self._is_dirty = True
173+
174+
@property
175+
def mirrorY(self):
176+
if self._mirror is None:
177+
return None
178+
179+
return bool(self._mirror & 0x1)
180+
181+
@mirrorY.setter
182+
def mirrorY(self, value):
183+
if self._mirror is None:
184+
self._mirror = 0
185+
186+
if value:
187+
self._mirror |= 0x1
188+
else:
189+
self._mirror &= ~0x1
190+
191+
self._is_dirty = True
192+
151193
@property
152194
def alphaX(self):
153195
return self._alphaX
@@ -233,4 +275,5 @@ def reset(self):
233275
self.alphaY = None
234276
self.betaY = None
235277
self.deltaY = None
278+
self._mirror = None
236279
self.save()

api_drivers/py_api_drivers/frozen/indev/touch_calibration/touch_calibrate.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ def calibrate(indev, cal_data):
115115

116116
print(' ', j + 1, 'of 8:', (x, y))
117117

118+
118119
print()
119120
print('averaged trimmed points')
120121
for i, points in enumerate(captured_points):
@@ -128,6 +129,16 @@ def calibrate(indev, cal_data):
128129

129130
print(' point', i + 1, 'of 3:', (points['x'], points['y']))
130131

132+
if captured_points[0]['x'] > captured_points[1]['x']:
133+
mirror_x = True
134+
else:
135+
mirror_x = False
136+
137+
if captured_points[0]['y'] > captured_points[2]['y']:
138+
mirror_y = True
139+
else:
140+
mirror_y = False
141+
131142
tp1, tp2, tp3 = captured_points
132143
sp1, sp2, sp3 = target_points
133144
print()
@@ -177,6 +188,9 @@ def calibrate(indev, cal_data):
177188
cal_data.betaY = betaY
178189
cal_data.deltaY = deltaY
179190

191+
cal_data.mirrorX = mirror_x
192+
cal_data.mirrorY = mirror_y
193+
180194
except ZeroDivisionError:
181195
print('Error in calculation please try again.')
182196
res = False

0 commit comments

Comments
 (0)