diff --git a/docs/img/Open_Pill_Mini_Models.JPG b/docs/img/Open_Pill_Mini_Models.JPG
new file mode 100644
index 00000000..47f69a84
Binary files /dev/null and b/docs/img/Open_Pill_Mini_Models.JPG differ
diff --git a/docs/img/Open_Pill_Mini_w_Faceplate.JPG b/docs/img/Open_Pill_Mini_w_Faceplate.JPG
new file mode 100644
index 00000000..68a9ceff
Binary files /dev/null and b/docs/img/Open_Pill_Mini_w_Faceplate.JPG differ
diff --git a/docs/img/Open_Pill_Models.JPG b/docs/img/Open_Pill_Models.JPG
new file mode 100644
index 00000000..f687faa0
Binary files /dev/null and b/docs/img/Open_Pill_Models.JPG differ
diff --git a/docs/img/Open_Pill_w_Comfort_Joystick.png b/docs/img/Open_Pill_w_Comfort_Joystick.png
new file mode 100644
index 00000000..c4d21f76
Binary files /dev/null and b/docs/img/Open_Pill_w_Comfort_Joystick.png differ
diff --git a/docs/img/Orange_Pill_Models.JPG b/docs/img/Orange_Pill_Models.JPG
new file mode 100644
index 00000000..40a5015f
Binary files /dev/null and b/docs/img/Orange_Pill_Models.JPG differ
diff --git a/docs/img/Simple_Pill_Models.JPG b/docs/img/Simple_Pill_Models.JPG
new file mode 100644
index 00000000..5a4a36fd
Binary files /dev/null and b/docs/img/Simple_Pill_Models.JPG differ
diff --git a/docs/seed_qr/README.md b/docs/seed_qr/README.md
index f22905a3..d35bb805 100644
--- a/docs/seed_qr/README.md
+++ b/docs/seed_qr/README.md
@@ -70,7 +70,7 @@ It's important to note here that QR codes can encode data in a number of differe
QR codes are typically used to encode a website url, in which case the "Alphanumeric" format has to be used (the encoded data can consist of upper- and lowercase letters, numbers, and certain allowed symbols).
-If you have a long url like `https://ohnoihavealongurl.com` (29 characters), the chart shows that it would not fit in a 21x21 QR code; its max capacity is 25 alphanumeric chars. But it's within the 47-char capacity of the 29x29 size.
+If you have a long url like `https://ohnoihavealongurl.com` (29 characters), the chart shows that it would not fit in a 21x21 QR code; its max capacity is 25 alphanumeric chars. But it's within the 47-char capacity of the 25x25 size.
### Bit efficiency matters
Notice that the "Numeric" column has greater capacity. This is because when you have fewer possible characters to encode, it takes less data to specify each one.
diff --git a/enclosures/open_pill/open_pill_notes.md b/enclosures/open_pill/open_pill_notes.md
new file mode 100644
index 00000000..a7245ca3
--- /dev/null
+++ b/enclosures/open_pill/open_pill_notes.md
@@ -0,0 +1,27 @@
+## The Open Pill Enclosure
+
+The "Open Pill" was the second officially released SeedSigner enclosure. Given some of the challenges associated with the "Orange Pill", the Open Pill was designed for quick, inexpensive, and simple deployment. No secondary hardware components are required for assembly and the design consists of a single printed part that can be produced with even basic 3D printers. This simpler design was intended to put the focus back on the project's software, which was improving by leaps and bounds when the enclosure was released.
+
+
+
+### Characterisics:
+- Supported Camera? Legacy RPi Camera (w/ gold Pi Zero Cable)
+- Supported HAT? Waveshare 240x240 pixel LCD display + controls
+- Recommended printing process? FDM
+- Recommended printing materials? PLA
+- Secondary Hardware Required? No
+- Data-enabled USB Port accessible? Yes
+- Mini-HDMI port accessible? Yes
+- Removeable Memory Card? Yes
+- Comfortable controls? No (see note below)
+
+### Assembly Demonstration:
+https://www.youtube.com/watch?v=gXPFJygZobE
+
+
+### Comfortable Controls Optional Upgrade:
+The bare joystick on an open pill or open pill mini design can be uncomfortable for some thumbs. Twitter user @Vulcan21com developed a DIY solution to add comfort to the exposed joystick using a M2.5 knurled nut standardized under DIN 466, widely available at many hardware stores. The joystick itself has no threading, but it is possible to screw the M2.5 nut onto the joystick with a bit of precision and patience. While screwing it on for the first time it will cut a light thread into the plastic. Be gentle as to not transfer too much torque into the joystick. The result will look like this:
+
+
+
+
diff --git a/enclosures/open_pill_mini/open_pill_mini_notes.md b/enclosures/open_pill_mini/open_pill_mini_notes.md
new file mode 100644
index 00000000..f399d496
--- /dev/null
+++ b/enclosures/open_pill_mini/open_pill_mini_notes.md
@@ -0,0 +1,26 @@
+## The Open Pill Mini Enclosure
+
+The "Open Pill Mini" is simply a smaller version of the original "Open Pill" that is designed to incorporate a more compact camera specifically designed for the Raspberry Pi Zero -- this enclosure is just about as small as a SeedSigner can conceivably get. It is pictured below, alongside the original Open Pill enclosure.
+
+
+
+### Characterisics:
+- Supported Camera? "ZeroCam" designed specifically for RPi Zero
+- Supported HAT? Waveshare 240x240 pixel LCD display + controls
+- Recommended printing process? FDM
+- Recommended printing materials? PLA
+- Secondary Hardware Required? No
+- Data-enabled USB Port accessible? Yes
+- Mini-HDMI port accessible? Yes
+- Removeable Memory Card? Yes
+- Comfortable controls? No (see note below)
+
+### Assembly Demonstration:
+(assembly is very similar to the original Open Pill assembly, depicted below)
+https://www.youtube.com/watch?v=aIIc2DiZYcI
+
+### Comfortable Controls Optional Upgrade:
+The bare joystick on an open pill or open pill mini design can be uncomfortable for some thumbs. Twitter user @Vulcan21com developed a DIY solution to add comfort to the exposed joystick using a M2.5 knurled nut standardized under DIN 466, widely available at many hardware stores. The joystick itself has no threading, but it is possible to screw the M2.5 nut onto the joystick with a bit of precision and patience. While screwing it on for the first time it will cut a light thread into the plastic. Be gentle as to not transfer too much torque into the joystick. The result will look like this:
+
+
+(image displayed is Open Pill, not Open Pill Mini)
diff --git a/enclosures/open_pill_mini_w_coverplate/open_pill_mini_w_coverplate_notes.md b/enclosures/open_pill_mini_w_coverplate/open_pill_mini_w_coverplate_notes.md
new file mode 100644
index 00000000..5bd9d62f
--- /dev/null
+++ b/enclosures/open_pill_mini_w_coverplate/open_pill_mini_w_coverplate_notes.md
@@ -0,0 +1,19 @@
+## The Open Pill Mini w/ Coverplate Enclosure
+
+The "Open Pill Mini w/ Coverplate" was designed as an attempt to incorporate the best of the "Orange Pill" and the "Open Pill" enclosures into a single design. It is fully enclosed for improved aesthetics and protection of electronic components, yet is compact and can be manufactured with a simple FDM printer, also not requiring any additional hardware components. A first for this enclosure was preventing access to the SeedSigner's data-enabled USB port as an additional security assurance for users.
+
+
+
+### Characterisics:
+- Supported Camera? "ZeroCam" designed specifically for RPi Zero
+- Supported HAT? Waveshare 240x240 pixel LCD display + controls
+- Recommended printing process? FDM for enclosure & controls
+- Recommended printing materials? PLA for enclosure, TPU for controls
+- Secondary Hardware Required? No
+- Data-enabled USB Port accessible? No
+- Mini-HDMI port accessible? No
+- Removeable Memory Card? Yes
+- Comfortable controls? Yes
+
+### Assembly Demonstration:
+https://www.youtube.com/watch?v=6-5cDneXoWs
diff --git a/enclosures/orange_pill/orange_pill_notes.md b/enclosures/orange_pill/orange_pill_notes.md
new file mode 100644
index 00000000..a3348aae
--- /dev/null
+++ b/enclosures/orange_pill/orange_pill_notes.md
@@ -0,0 +1,24 @@
+## The Orange Pill Enclosure
+
+The "Orange Pill" was the first SeedSigner enclosure. It's eye-catching design is the enclosure most commonly associated with the SeedSigner project for many. While aesthetically appealing and fun to showcase to others, the thumbstick topper's sub-optimal design, the need for secondary hardware components, and other drawbacks make this enclosure a less desirable choice for every day SeedSigner use.
+
+
+
+### Characterisics:
+- Supported Camera? Legacy RPi Camera (w/ gold Pi Zero Cable)
+- Supported HAT? Waveshare 240x240 pixel LCD display + controls
+- Recommended printing process? FDM for enclosure, SLA for controls
+- Recommended printing materials? PLA for enclosure, resin for controls
+- Secondary Hardware Required? Yes
+- Data-enabled USB Port accessible? Yes
+- Mini-HDMI port accessible? Yes
+- Removeable Memory Card? Requires partial disassembly
+- Comfortable controls? Yes (but thumbstick can be clumsy)
+
+### Secondary Hardware Required:
+- Four (4): 10mm M2.5 F-F spacers
+- Four (4): 6mm M2.5 screws
+- Four (4): 12mm M2.5 screws
+
+### Assembly Demonstration:
+https://www.youtube.com/watch?v=aIIc2DiZYcI
diff --git a/enclosures/simple_pill/simple_pill_notes.md b/enclosures/simple_pill/simple_pill_notes.md
new file mode 100644
index 00000000..8bbc83af
--- /dev/null
+++ b/enclosures/simple_pill/simple_pill_notes.md
@@ -0,0 +1,25 @@
+## The Simple Pill Enclosure
+
+The "Simple Pill" is a community-contributed design by @blackcoffeebtc. The most significant innovation of this design was the adaptation of a DPAD-stype thumbstick topper for a SeedSigner enclosure, offering a much more comfortable and responsive control experience. The Simple Pill was also the first enclosure to allow for easy access to the device's memory card.
+
+
+
+### Characterisics:
+- Supported Camera? Legacy RPi Camera (w/ gold Pi Zero Cable)
+- Supported HAT? Waveshare 240x240 pixel LCD display + controls
+- Recommended printing process? FDM for enclosure, SLA for controls
+- Recommended printing materials? PLA for enclosure, resin for controls
+- Secondary Hardware Required? Yes
+- Data-enabled USB Port accessible? Yes
+- Mini-HDMI port accessible? Yes
+- Removeable Memory Card? Yes
+- Comfortable controls? Yes
+
+### Secondary Hardware Required:
+- Four (4): 10mm M2.5 F-F spacers
+- Four (4): 6mm M2.5 screws
+- Four (4): 12mm M2.5 screws
+
+### Assembly Demonstration:
+(assembly is similar to that of the original Orange Pill)
+https://www.youtube.com/watch?v=aIIc2DiZYcI
diff --git a/src/seedsigner/hardware/ST7789.py b/src/seedsigner/hardware/ST7789.py
index e1e1fade..c9cb1cdb 100644
--- a/src/seedsigner/hardware/ST7789.py
+++ b/src/seedsigner/hardware/ST7789.py
@@ -1,7 +1,7 @@
import spidev
import RPi.GPIO as GPIO
import time
-import numpy as np
+import array
@@ -153,11 +153,10 @@ class ST7789(object):
if imwidth != self.width or imheight != self.height:
raise ValueError('Image must be same dimensions as display \
({0}x{1}).' .format(self.width, self.height))
- img = np.asarray(Image)
- pix = np.zeros((self.width,self.height,2), dtype = np.uint8)
- pix[...,[0]] = np.add(np.bitwise_and(img[...,[0]],0xF8),np.right_shift(img[...,[1]],5))
- pix[...,[1]] = np.add(np.bitwise_and(np.left_shift(img[...,[1]],3),0xE0),np.right_shift(img[...,[2]],3))
- pix = pix.flatten().tolist()
+ # convert 24-bit RGB-8:8:8 to gBRG-3:5:5:3; then per-pixel byteswap to 16-bit RGB-5:6:5
+ arr = array.array("H", Image.convert("BGR;16").tobytes())
+ arr.byteswap()
+ pix = arr.tobytes()
self.SetWindows ( 0, 0, self.width, self.height)
GPIO.output(self._dc,GPIO.HIGH)
for i in range(0,len(pix),4096):