summaryrefslogtreecommitdiff
path: root/main/display.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2022-10-19 15:36:47 +1100
committerjacqueline <me@jacqueline.id.au>2022-10-19 15:36:47 +1100
commita7915753c6f99de3ce97bf2992a6627cd6cb2618 (patch)
tree38b01648a6220f16abf0f8bf42cf2efcd1fb0eb8 /main/display.cpp
parentcc45d1ead00a585ddc064df9339b092b91678f22 (diff)
downloadtangara-fw-a7915753c6f99de3ce97bf2992a6627cd6cb2618.tar.gz
WIP sketch out init sequence
Diffstat (limited to 'main/display.cpp')
-rw-r--r--main/display.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/main/display.cpp b/main/display.cpp
new file mode 100644
index 00000000..551400bd
--- /dev/null
+++ b/main/display.cpp
@@ -0,0 +1,63 @@
+#include "display.hpp"
+#include <cstdint>
+#include "driver/gpio.h"
+#include "driver/spi_master.h"
+#include "hal/gpio_types.h"
+#include "hal/spi_types.h"
+
+namespace gay_ipod {
+
+static const gpio_num_t kCommandOrDataPin = GPIO_NUM_21;
+static const gpio_num_t kLedPin = GPIO_NUM_22;
+
+static const uint8_t kDisplayWidth = 128;
+static const uint8_t kDisplayHeight = 160;
+
+auto Display::create(GpioExpander* expander)
+ -> cpp::result<std::unique_ptr<Display>, Error> {
+ // First, set up our GPIOs
+#define SPI_QUADWP_IO (GPIO_NUM_22)
+#define SPI_QUADHD_IO (GPIO_NUM_21)
+ gpio_config_t gpio_cfg = {
+ .intr_type = GPIO_INTR_DISABLE,
+ .mode = GPIO_MODE_OUTPUT,
+ .pin_bit_mask = (1 << GPIO_OUTPUT_22) | (1 << GPIO_OUTPUT_21),
+ .pull_down_en = 0,
+ .pull_up_en = 0,
+ }
+ gpio_config(&gpio_cfg);
+
+ gpio_set_level(kLedPin, 1);
+ gpio_set_level(kCommandOrDataPin, 1);
+
+ // Next, init the SPI device
+ auto lock = expander->AcquireSpiBus(GpioExpander::DISPLAY);
+ spi_device_interface_config_t spi_cfg = {
+ .command_bits = 0, // Unused
+ .address_bits = 0, // Unused
+ .dummy_bits = 0,
+ .mode = 0,
+ .duty_cycle_pos = 0, // Unused
+ .cs_ena_pretrans = 0,
+ .cs_ena_posttrans = 0,
+ .clock_speed_hz = 32000000,
+ .input_delay_ns = 0,
+ .spics_io_num = -1,
+ .flags = 0,
+ .queue_size = 0,
+ .pre_cb = NULL,
+ .post_cb = NULL,
+ };
+ spi_device_handle_t handle;
+ spi_bus_add_device(VSPI_HOST, &spi_cfg, &handle);
+
+ // Now we reset the display into a known state, then configure it
+ // https://github.com/adafruit/Adafruit-ST7735-Library/blob/master/Adafruit_ST77xx.cpp
+ // https://github.com/adafruit/Adafruit-ST7735-Library/blob/master/Adafruit_ST7735.cpp
+ // commonInit with Rcmd1
+ // displayInit with Rcmd2green
+ // displayInit with Rcmd3
+ // setRotation
+}
+
+} // namespace gay_ipod