summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO.rst5
-rw-r--r--res/simulator_skin.pngbin0 -> 6451 bytes
-rw-r--r--wasp/boards/simulator/display.py68
3 files changed, 65 insertions, 8 deletions
diff --git a/TODO.rst b/TODO.rst
index 9cad328..320dab5 100644
--- a/TODO.rst
+++ b/TODO.rst
@@ -144,3 +144,8 @@ Wasp-os
* [ ] Debugging and troubleshooting guide
* [ ] Screenshots for bootloader and all applications
* [ ] Improve the install guide
+
+* [X] Simulator
+
+ * [X] Add a simple skin for better screenshots
+ * [X] Full swipe detection (avoid keyboard)
diff --git a/res/simulator_skin.png b/res/simulator_skin.png
new file mode 100644
index 0000000..1f6de64
--- /dev/null
+++ b/res/simulator_skin.png
Binary files differ
diff --git a/wasp/boards/simulator/display.py b/wasp/boards/simulator/display.py
index 11b4701..9e5c622 100644
--- a/wasp/boards/simulator/display.py
+++ b/wasp/boards/simulator/display.py
@@ -14,6 +14,13 @@ RAMWR = 0x2c
WIDTH = 240
HEIGHT = 240
+SKIN = {
+ 'fname' : 'res/simulator_skin.png',
+ 'size' : (337, 427),
+ 'button_profile' : 9,
+ 'offset' : (53, 93)
+}
+
class ST7789Sim(object):
def __init__(self):
@@ -60,7 +67,9 @@ class ST7789Sim(object):
((rgb & 0x07e0) << 5) +
((rgb & 0x001f) << 3))
- pixelview[self.x][self.y] = pixel
+ pv_x = self.x + SKIN['adjust'][0]
+ pv_y = self.y + SKIN['adjust'][1]
+ pixelview[pv_x][pv_y] = pixel
self.x += 1
if self.x > self.colclip[1]:
@@ -118,20 +127,61 @@ class CST816SSim():
self.regs[3] = 0x80
self.raise_interrupt(pins)
- def handle_mousebutton(self, button, pins):
- self.regs[1] = 5
- self.regs[4] = button.x
- self.regs[6] = button.y
+ def handle_mousebuttondown(self, button, pins):
+ self.down_x = button.x
+ self.down_y = button.y
+
+ if self.down_x < 50:
+ pins['BUTTON'].value(0)
+
+
+ def handle_mousebuttonup(self, button, pins):
+ if self.down_x < 50:
+ pins['BUTTON'].value(1)
+ return
+
+ down_x = max(0, min(239, self.down_x-SKIN['adjust'][0]))
+ down_y = max(0, min(239, self.down_y-SKIN['adjust'][1]))
+ up_x = max(0, min(239, button.x-SKIN['adjust'][0]))
+ up_y = max(0, min(239, button.y-SKIN['adjust'][1]))
+ mv_x = up_x - down_x
+ mv_y = up_y - down_y
+
+ # Swipe detection
+ if abs(mv_x) + abs(mv_y) < 24:
+ self.regs[1] = 5
+ elif abs(mv_x) > abs(mv_y):
+ self.regs[1] = 4 if mv_x > 0 else 3
+ else:
+ self.regs[1] = 2 if mv_y > 0 else 1
+
+ self.regs[4] = up_x;
+ self.regs[6] = up_y;
self.raise_interrupt(pins)
def raise_interrupt(self, pins):
pins['TP_INT'].raise_irq()
+# Derive some extra values for padding the display
+SKIN['left_pad'] = 9
+SKIN['right_pad'] = SKIN['left_pad'] + SKIN['button_profile']
+SKIN['top_pad'] = 3
+SKIN['bottom_pad'] = 3
+SKIN['window'] = (SKIN['size'][0] + SKIN['left_pad'] + SKIN['right_pad'],
+ SKIN['size'][1] + SKIN['top_pad'] + SKIN['bottom_pad'])
+SKIN['adjust'] = (SKIN['offset'][0] + SKIN['left_pad'],
+ SKIN['offset'][1] + SKIN['top_pad'])
+
sdl2.ext.init()
-window = sdl2.ext.Window("ST7789", size=(WIDTH, HEIGHT))
+window = sdl2.ext.Window("ST7789", size=SKIN['window'])
window.show()
windowsurface = window.get_surface()
-sdl2.ext.fill(windowsurface, (0, 0, 0))
+sdl2.ext.fill(windowsurface, (0xff, 0xff, 0xff))
+skin = sdl2.ext.load_image(SKIN['fname'])
+sdl2.SDL_BlitSurface(skin, None, windowsurface, sdl2.SDL_Rect(
+ SKIN['left_pad'], SKIN['top_pad'], SKIN['size'][0], SKIN['size'][1]))
+sdl2.SDL_FreeSurface(skin)
+window.refresh()
spi_st7789_sim = ST7789Sim()
i2c_cst816s_sim = CST816SSim()
@@ -143,7 +193,9 @@ def tick(pins):
sdl2.ext.quit()
sys.exit(0)
elif event.type == sdl2.SDL_MOUSEBUTTONDOWN:
- i2c_cst816s_sim.handle_mousebutton(event.button, pins)
+ i2c_cst816s_sim.handle_mousebuttondown(event.button, pins)
+ elif event.type == sdl2.SDL_MOUSEBUTTONUP:
+ i2c_cst816s_sim.handle_mousebuttonup(event.button, pins)
elif event.type == sdl2.SDL_KEYDOWN:
if event.key.keysym.sym == sdl2.SDLK_TAB:
pins['BUTTON'].value(0)