From e06480e474c5e1704ec56911fbe02996396dd0e0 Mon Sep 17 00:00:00 2001
From: "mohesh.mohan" <moheshmohan@gmail.com>
Date: Fri, 13 Dec 2019 10:33:41 +0400
Subject: [PATCH] Waveshare213bc hung issues workaround

---
 .../ui/hw/libs/waveshare/v213bc/epd2in13bc.py | 32 +++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/pwnagotchi/ui/hw/libs/waveshare/v213bc/epd2in13bc.py b/pwnagotchi/ui/hw/libs/waveshare/v213bc/epd2in13bc.py
index 6f3e685..39e986a 100644
--- a/pwnagotchi/ui/hw/libs/waveshare/v213bc/epd2in13bc.py
+++ b/pwnagotchi/ui/hw/libs/waveshare/v213bc/epd2in13bc.py
@@ -44,6 +44,7 @@ class EPD:
         self.width = EPD_WIDTH
         self.height = EPD_HEIGHT
 
+
     lut_vcomDC = [
         0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
         0x60, 0x28, 0x28, 0x00, 0x00, 0x01,
@@ -183,15 +184,42 @@ class EPD:
         if (epdconfig.module_init() != 0):
             return -1
 
+        logging.debug("e-Paper 2.13bc preboot hang check")
+        while(epdconfig.digital_read(self.busy_pin) == 0):      # 0: idle, 1: busy
+            epdconfig.delay_ms(100)
+            self.reset()
+            self.send_command(0X50)
+            self.send_data(0xf7)
+            self.send_command(0X02) # power off
+            self.send_command(0X07) # deep sleep
+            self.send_data(0xA5)
+            epdconfig.GPIO.output(epdconfig.RST_PIN, 0)
+            epdconfig.GPIO.output(epdconfig.DC_PIN, 0)
+            epdconfig.GPIO.output(epdconfig.CS_PIN, 0)
+            logging.debug("Reset, powerdown, voltage off done")
+        logging.debug("e-Paper did not hungup")
+
+
         self.reset()
 
+        self.send_command(0x01)	# POWER SETTING
+        self.send_data(0x03)
+        self.send_data(0x00)
+        self.send_data(0x2b)
+        self.send_data(0x2b)
+        self.send_data(0x03)
+
         self.send_command(0x06) # BOOSTER_SOFT_START
         self.send_data(0x17)
         self.send_data(0x17)
         self.send_data(0x17)
 
         self.send_command(0x04) # POWER_ON
-        self.ReadBusy()
+        logging.debug("e-Paper 2.13bc bootup busy")
+        while(epdconfig.digital_read(self.busy_pin) == 0):      # 0: idle, 1: busy
+            epdconfig.delay_ms(100)
+        logging.debug("e-Paper booted")
+
 
 #        self.send_command(0x00) # PANEL_SETTING
 #        self.send_data(0x8F)
@@ -210,7 +238,7 @@ class EPD:
         self.send_data(0x3a) # 3a 100HZ   29 150Hz 39 200HZ	31 171HZ
 
         self.send_command(0x61)	# resolution setting
-        self.send_data(self.width)
+        self.send_data(self.width & 0xff)
         self.send_data((self.height >> 8) & 0xff)
         self.send_data(self.height& 0xff)