diff --git a/unix/README.md b/unix/README.md index 9326e18c..a2c122e0 100644 --- a/unix/README.md +++ b/unix/README.md @@ -25,6 +25,7 @@ wallet (on testnet, always with the same seed). But there are other options: - `-q` => boot and drop into REPL; does nothing else, no setup - `-f -w` => boot like a unit that hasn't left factory yet - `-p` => pretend we don't know the seed words (xprv import) and so menus are different +- `-g` => don't skip login sequence - `--ms` => define a 2-of-4 multisig wallet, and start off in multisig wallet menu; cosigners are "Me", "Myself", "And I" and empty string. BIP45 path. - add `--p2wsh` or `--wrap` for the other two address types @@ -33,7 +34,6 @@ wallet (on testnet, always with the same seed). But there are other options: - `--mk3` => emulate mark3 hardware - `--mk4` => emulate mark4 hardware - `--q1` => emulate Q1 hardware -- `-g` => don't skip login sequence - `--addr` => go to the address explorer at startup - `--xw` => go to the wallet export submenu - `--paper` => go to the Paper Wallet menu at startup diff --git a/unix/simulator.py b/unix/simulator.py index e2b32265..056b3eb3 100755 --- a/unix/simulator.py +++ b/unix/simulator.py @@ -89,7 +89,7 @@ class SimulatedScreen: self.movie.append((dt, img)) def vsync_handler(self, sr, w): - # called at 61Hz, just like the real LCD's TEAR output signal + # subclass thing return class LCDSimulator(SimulatedScreen): @@ -137,6 +137,7 @@ class LCDSimulator(SimulatedScreen): self.busy_bar = False self.cursor = None self.phase = 0 + self.animate = False # GPU stuff needs to know implementation details... because it re-implements self.COL_BLACK = 0 @@ -146,7 +147,7 @@ class LCDSimulator(SimulatedScreen): def vsync_handler(self, spriterenderer, window): # will be called at 61Hz, just like the real LCD's TEAR output signal - if not (self.busy_bar or self.cursor): + if not self.animate: return activity = False @@ -165,6 +166,8 @@ class LCDSimulator(SimulatedScreen): # maybe save if self.movie is not None: + # problem: other stuff may be in mid-update; should look at + # time since last save, and if longer than 60Hz, save then? self.new_frame() # draw to screen @@ -230,7 +233,7 @@ class LCDSimulator(SimulatedScreen): cell_w = CELL_W + (CELL_W if dbl_wide else 0) # make some pixels big enough for either vert or horz lines - colour = self.COL_FOREGROUND if phase else self.COL_BLACK + colour = self.COL_FOREGROUND if not phase else self.COL_BLACK def fill_solid(X,Y, w, h, col): for x in range(X, X+w): @@ -359,23 +362,27 @@ class LCDSimulator(SimulatedScreen): for x in range(X, X+w): self.mv[x][y] = px - elif mode in 'TPBC': + elif mode in 'TPBCG': # emulated GPU commands # see vsync_handler() for implementation if mode == 'T': # stop animating: "taking" the SPI bus away from GPU - self.cursor = None - self.busy_bar = False + self.animate = False + elif mode == 'G': + # continue animating + self.animate = True elif mode == 'P': # test pattern: a fixed bar code is shown in real deal pass elif mode == 'B': # show busy bar (infinite progress bar) self.busy_bar = True + self.animate = True elif mode == 'C': # show a cursor self.cursor = self.CursorSpec(X,Y, cur_type=w) self.phase = 0 # make update happen immediately + self.animate = True else: raise ValueError(mode) diff --git a/unix/variant/gpu.py b/unix/variant/gpu.py index 0c9bfce2..4e13203b 100644 --- a/unix/variant/gpu.py +++ b/unix/variant/gpu.py @@ -24,13 +24,15 @@ class GPUAccess: def take_spi(self): # stop any on-going animation if self.i_have_spi: - return + return False glob.dis.dis.gpu_send('T') self.i_have_spi = True + return True def give_spi(self): - # not used, implicit in other cmds - raise NotImplementedError + # continue previously on-going animation + self.i_have_spi = False + glob.dis.dis.gpu_send('G') def have_spi(self): # do we control the display? @@ -50,7 +52,7 @@ class GPUAccess: self.take_spi() def cursor_at(self, x, y, cur_type): - # use outline to leave most of the cell unaffects (just 1px inside border) + # show a cursor, there are several types and sizes glob.dis.dis.gpu_send('C', x, y, cur_type) self.i_have_spi = False