Skip to content

Commit 693e709

Browse files
committed
Adding support for RM2
1 parent ac56d4e commit 693e709

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

src/rmview/rmview.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,22 +201,24 @@ def connected(self, ssh):
201201
# cat /sys/devices/soc0/machine -> reMarkable 1.x
202202
_,out,_ = ssh.exec_command("cat /sys/devices/soc0/machine")
203203
rmv = out.read().decode("utf-8")
204-
ver = re.fullmatch(r"reMarkable (\d+)\..*\n", rmv)
205-
if ver is None or ver[1] != "1":
206-
log.error("Device is unsupported: '%s' [%s]", rmv, ver[1] if ver else "unknown device")
204+
version = re.fullmatch(r"reMarkable (\d+)\..*\n", rmv)
205+
if version is None or version[1] not in ["1", "2"]:
206+
log.error("Device is unsupported: '%s' [%s]", rmv, version[1] if version else "unknown device")
207207
QMessageBox.critical(None, "Unsupported device", 'The detected device is %s.\nrmView currently only supports reMarkable 1.' % rmv)
208208
self.quit()
209209
return
210210

211+
version = int(version[1])
212+
211213
# check needed files are in place
212-
_,out,_ = ssh.exec_command("[ -x $HOME/rM-vnc-server ] && [ -e $HOME/mxc_epdc_fb_damage.ko ]")
214+
_,out,_ = ssh.exec_command("[ -x $HOME/rM-vnc-server-standalone ]")
213215
if out.channel.recv_exit_status() != 0:
214216
mbox = QMessageBox(QMessageBox.NoIcon, 'Missing components', 'Your reMarkable is missing some needed components.')
215217
icon = QPixmap(":/assets/problem.svg")
216218
icon.setDevicePixelRatio(self.devicePixelRatio())
217219
mbox.setIconPixmap(icon)
218220
mbox.setInformativeText(
219-
"To work properly, rmView needs the rM-vnc-server and mxc_epdc_fb_damage.ko files "\
221+
"To work properly, rmView needs the rM-vnc-server-standalone program "\
220222
"to be installed on your tablet.\n"\
221223
"You can install them manually, or let rmView do the work for you by pressing 'Auto Install' below.\n\n"\
222224
"If you are unsure, please consult the documentation.")
@@ -232,15 +234,11 @@ def connected(self, ssh):
232234
try:
233235
sftp = ssh.open_sftp()
234236
from stat import S_IXUSR
235-
fo = QFile(':bin/rM-vnc-server')
236-
fo.open(QIODevice.ReadOnly)
237-
sftp.putfo(fo, 'rM-vnc-server')
238-
fo.close()
239-
sftp.chmod('rM-vnc-server', S_IXUSR)
240-
fo = QFile(':bin/mxc_epdc_fb_damage.ko')
237+
fo = QFile(':bin/rM%d-vnc-server-standalone' % version)
241238
fo.open(QIODevice.ReadOnly)
242-
sftp.putfo(fo, 'mxc_epdc_fb_damage.ko')
239+
sftp.putfo(fo, 'rM-vnc-server-standalone')
243240
fo.close()
241+
sftp.chmod('rM-vnc-server-standalone', S_IXUSR)
244242
log.info("Installation successful!")
245243
except Exception as e:
246244
log.error('%s %s', type(e), e)
@@ -263,7 +261,7 @@ def connected(self, ssh):
263261
self.fbworker.signals.onFatalError.connect(self.frameError)
264262
self.threadpool.start(self.fbworker)
265263

266-
self.penworker = PointerWorker(ssh)
264+
self.penworker = PointerWorker(ssh, path="/dev/input/event%d" % (version-1))
267265
self.threadpool.start(self.penworker)
268266
self.pen = self.viewer.scene.addEllipse(0,0,self.pen_size,self.pen_size,
269267
pen=QPen(QColor('white')),

src/rmview/workers.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@ def vncConnectionMade(self):
4141
self.setEncodings([
4242
HEXTILE_ENCODING,
4343
CORRE_ENCODING,
44+
PSEUDO_CURSOR_ENCODING,
4445
RRE_ENCODING,
4546
RAW_ENCODING ])
47+
time.sleep(.1) # get first image without artifacts
4648
self.framebufferUpdateRequest()
4749

4850
def sendPassword(self, password):
@@ -89,11 +91,11 @@ def stop(self):
8991
log.info("Stopping framebuffer thread...")
9092
reactor.callFromThread(reactor.stop)
9193
try:
92-
self.ssh.exec_command("killall rM-vnc-server", timeout=3)
94+
self.ssh.exec_command("killall rM-vnc-server-standalone", timeout=3)
9395
except Exception as e:
9496
log.warning("VNC could not be stopped on the reMarkable.")
9597
log.warning("Although this is not a big problem, it may consume some resources until you restart the tablet.")
96-
log.warning("You can manually terminate it by running `ssh %s killall rM-vnc-server`.", self.ssh.hostname)
98+
log.warning("You can manually terminate it by running `ssh %s killall rM-vnc-server-standalone`.", self.ssh.hostname)
9799
log.error(e)
98100
log.info("Framebuffer thread stopped")
99101

@@ -102,7 +104,7 @@ def run(self):
102104
try:
103105
_,out,_ = self.ssh.exec_command("/sbin/insmod $HOME/mxc_epdc_fb_damage.ko")
104106
log.debug("Insmod returned %d", out.channel.recv_exit_status())
105-
_,_,out = self.ssh.exec_command("$HOME/rM-vnc-server")
107+
_,_,out = self.ssh.exec_command("$HOME/rM-vnc-server-standalone")
106108
log.info(next(out))
107109
except Exception as e:
108110
self.signals.onFatalError.emit(e)
@@ -133,8 +135,9 @@ class PointerWorker(QRunnable):
133135

134136
_stop = False
135137

136-
def __init__(self, ssh, threshold=1000):
138+
def __init__(self, ssh, path="/dev/input/event0", threshold=1000):
137139
super(PointerWorker, self).__init__()
140+
self.event = path
138141
self.ssh = ssh
139142
self.threshold = threshold
140143
self.signals = PWSignals()
@@ -145,7 +148,7 @@ def stop(self):
145148

146149
@pyqtSlot()
147150
def run(self):
148-
penkill, penstream, _ = self.ssh.exec_command('cat /dev/input/event0 & { read ; kill %1; }')
151+
penkill, penstream, _ = self.ssh.exec_command('cat %s & { read ; kill %%1; }' % self.event)
149152
self._penkill = penkill
150153
new_x = new_y = False
151154
state = LIFTED

0 commit comments

Comments
 (0)