mirror of
https://github.com/markqvist/RNode_Firmware.git
synced 2025-05-06 00:25:11 -04:00
Basic T-Deck display support
This commit is contained in:
parent
2c93b2a1de
commit
fef27b194c
4 changed files with 89 additions and 17 deletions
8
Boards.h
8
Boards.h
|
@ -395,7 +395,7 @@
|
||||||
#define HAS_BUSY true
|
#define HAS_BUSY true
|
||||||
#define HAS_TCXO true
|
#define HAS_TCXO true
|
||||||
|
|
||||||
#define HAS_DISPLAY false
|
#define HAS_DISPLAY true
|
||||||
#define HAS_CONSOLE false
|
#define HAS_CONSOLE false
|
||||||
#define HAS_BLUETOOTH false
|
#define HAS_BLUETOOTH false
|
||||||
#define HAS_BLE true
|
#define HAS_BLE true
|
||||||
|
@ -425,7 +425,13 @@
|
||||||
const int SD_MOSI = 41;
|
const int SD_MOSI = 41;
|
||||||
const int SD_CLK = 40;
|
const int SD_CLK = 40;
|
||||||
const int SD_CS = 39;
|
const int SD_CS = 39;
|
||||||
|
|
||||||
|
const int DISPLAY_DC = 11;
|
||||||
const int DISPLAY_CS = 12;
|
const int DISPLAY_CS = 12;
|
||||||
|
const int DISPLAY_MISO = 38;
|
||||||
|
const int DISPLAY_MOSI = 41;
|
||||||
|
const int DISPLAY_CLK = 40;
|
||||||
|
const int DISPLAY_BL_PIN = 42;
|
||||||
|
|
||||||
#if HAS_NP == false
|
#if HAS_NP == false
|
||||||
#if defined(EXTERNAL_LEDS)
|
#if defined(EXTERNAL_LEDS)
|
||||||
|
|
89
Display.h
89
Display.h
|
@ -14,9 +14,15 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "Graphics.h"
|
#include "Graphics.h"
|
||||||
#include <Wire.h>
|
|
||||||
#include <Adafruit_GFX.h>
|
#include <Adafruit_GFX.h>
|
||||||
#include <Adafruit_SSD1306.h>
|
|
||||||
|
#if BOARD_MODEL == BOARD_TDECK
|
||||||
|
#include <Adafruit_ST7789.h>
|
||||||
|
#else
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <Adafruit_SSD1306.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "Fonts/Org_01.h"
|
#include "Fonts/Org_01.h"
|
||||||
#define DISP_W 128
|
#define DISP_W 128
|
||||||
#define DISP_H 64
|
#define DISP_H 64
|
||||||
|
@ -53,7 +59,13 @@
|
||||||
|
|
||||||
#define SMALL_FONT &Org_01
|
#define SMALL_FONT &Org_01
|
||||||
|
|
||||||
Adafruit_SSD1306 display(DISP_W, DISP_H, &Wire, DISP_RST);
|
#if BOARD_MODEL == BOARD_TDECK
|
||||||
|
Adafruit_ST7789 display = Adafruit_ST7789(DISPLAY_CS, DISPLAY_DC, -1);
|
||||||
|
#define SSD1306_WHITE ST77XX_WHITE
|
||||||
|
#define SSD1306_BLACK ST77XX_BLACK
|
||||||
|
#else
|
||||||
|
Adafruit_SSD1306 display(DISP_W, DISP_H, &Wire, DISP_RST);
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DISP_MODE_UNKNOWN 0x00
|
#define DISP_MODE_UNKNOWN 0x00
|
||||||
#define DISP_MODE_LANDSCAPE 0x01
|
#define DISP_MODE_LANDSCAPE 0x01
|
||||||
|
@ -102,10 +114,37 @@ void update_area_positions() {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t display_contrast = 0x00;
|
uint8_t display_contrast = 0x00;
|
||||||
void set_contrast(Adafruit_SSD1306 *display, uint8_t contrast) {
|
#if BOARD_MODEL != BOARD_TDECK
|
||||||
|
void set_contrast(Adafruit_SSD1306 *display, uint8_t contrast) {
|
||||||
display->ssd1306_command(SSD1306_SETCONTRAST);
|
display->ssd1306_command(SSD1306_SETCONTRAST);
|
||||||
display->ssd1306_command(contrast);
|
display->ssd1306_command(contrast);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
void set_contrast(Adafruit_ST7789 *display, uint8_t value) {
|
||||||
|
static uint8_t level = 0;
|
||||||
|
static uint8_t steps = 16;
|
||||||
|
if (value > 15) value = 15;
|
||||||
|
if (value == 0) {
|
||||||
|
digitalWrite(DISPLAY_BL_PIN, 0);
|
||||||
|
delay(3);
|
||||||
|
level = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (level == 0) {
|
||||||
|
digitalWrite(DISPLAY_BL_PIN, 1);
|
||||||
|
level = steps;
|
||||||
|
delayMicroseconds(30);
|
||||||
|
}
|
||||||
|
int from = steps - level;
|
||||||
|
int to = steps - value;
|
||||||
|
int num = (steps + to - from) % steps;
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
digitalWrite(DISPLAY_BL_PIN, 0);
|
||||||
|
digitalWrite(DISPLAY_BL_PIN, 1);
|
||||||
|
}
|
||||||
|
level = value;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool display_init() {
|
bool display_init() {
|
||||||
#if HAS_DISPLAY
|
#if HAS_DISPLAY
|
||||||
|
@ -161,7 +200,13 @@ bool display_init() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(!display.begin(SSD1306_SWITCHCAPVCC, display_address)) {
|
#if BOARD_MODEL == BOARD_TDECK
|
||||||
|
display.init(240, 320);
|
||||||
|
display.setSPISpeed(80e6);
|
||||||
|
if (false) {
|
||||||
|
#else
|
||||||
|
if (!display.begin(SSD1306_SWITCHCAPVCC, display_address)) {
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
set_contrast(&display, display_contrast);
|
set_contrast(&display, display_contrast);
|
||||||
|
@ -188,10 +233,10 @@ bool display_init() {
|
||||||
display.setRotation(1);
|
display.setRotation(1);
|
||||||
#elif BOARD_MODEL == BOARD_HELTEC32_V3
|
#elif BOARD_MODEL == BOARD_HELTEC32_V3
|
||||||
disp_mode = DISP_MODE_PORTRAIT;
|
disp_mode = DISP_MODE_PORTRAIT;
|
||||||
// Antenna conx up
|
|
||||||
display.setRotation(1);
|
display.setRotation(1);
|
||||||
// USB-C up
|
#elif BOARD_MODEL == BOARD_TDECK
|
||||||
// display.setRotation(3);
|
disp_mode = DISP_MODE_PORTRAIT;
|
||||||
|
display.setRotation(3);
|
||||||
#else
|
#else
|
||||||
disp_mode = DISP_MODE_PORTRAIT;
|
disp_mode = DISP_MODE_PORTRAIT;
|
||||||
display.setRotation(3);
|
display.setRotation(3);
|
||||||
|
@ -216,6 +261,10 @@ bool display_init() {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if BOARD_MODEL == BOARD_TDECK
|
||||||
|
display.fillScreen(SSD1306_BLACK);
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -587,6 +636,7 @@ void draw_disp_area() {
|
||||||
|
|
||||||
void update_disp_area() {
|
void update_disp_area() {
|
||||||
draw_disp_area();
|
draw_disp_area();
|
||||||
|
|
||||||
display.drawBitmap(p_ad_x, p_ad_y, disp_area.getBuffer(), disp_area.width(), disp_area.height(), SSD1306_WHITE, SSD1306_BLACK);
|
display.drawBitmap(p_ad_x, p_ad_y, disp_area.getBuffer(), disp_area.width(), disp_area.height(), SSD1306_WHITE, SSD1306_BLACK);
|
||||||
if (disp_mode == DISP_MODE_LANDSCAPE) {
|
if (disp_mode == DISP_MODE_LANDSCAPE) {
|
||||||
if (device_init_done && !firmware_update_mode && !disp_ext_fb) {
|
if (device_init_done && !firmware_update_mode && !disp_ext_fb) {
|
||||||
|
@ -617,8 +667,14 @@ void update_display(bool blank = false) {
|
||||||
display_contrast = display_intensity;
|
display_contrast = display_intensity;
|
||||||
set_contrast(&display, display_contrast);
|
set_contrast(&display, display_contrast);
|
||||||
}
|
}
|
||||||
display.clearDisplay();
|
|
||||||
display.display();
|
#if BOARD_MODEL != BOARD_TDECK
|
||||||
|
display.clearDisplay();
|
||||||
|
display.display();
|
||||||
|
#else
|
||||||
|
// TODO: Clear screen
|
||||||
|
#endif
|
||||||
|
|
||||||
last_disp_update = millis();
|
last_disp_update = millis();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -627,10 +683,17 @@ void update_display(bool blank = false) {
|
||||||
display_contrast = display_intensity;
|
display_contrast = display_intensity;
|
||||||
set_contrast(&display, display_contrast);
|
set_contrast(&display, display_contrast);
|
||||||
}
|
}
|
||||||
display.clearDisplay();
|
|
||||||
|
#if BOARD_MODEL != BOARD_TDECK
|
||||||
|
display.clearDisplay();
|
||||||
|
#endif
|
||||||
|
|
||||||
update_stat_area();
|
update_stat_area();
|
||||||
update_disp_area();
|
update_disp_area();
|
||||||
display.display();
|
|
||||||
|
#if BOARD_MODEL != BOARD_TDECK
|
||||||
|
display.display();
|
||||||
|
#endif
|
||||||
last_disp_update = millis();
|
last_disp_update = millis();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
5
Makefile
5
Makefile
|
@ -33,6 +33,7 @@ prep-esp32:
|
||||||
arduino-cli core update-index --config-file arduino-cli.yaml
|
arduino-cli core update-index --config-file arduino-cli.yaml
|
||||||
arduino-cli core install esp32:esp32@$(ARDUINO_ESP_CORE_VER) --config-file arduino-cli.yaml
|
arduino-cli core install esp32:esp32@$(ARDUINO_ESP_CORE_VER) --config-file arduino-cli.yaml
|
||||||
arduino-cli lib install "Adafruit SSD1306"
|
arduino-cli lib install "Adafruit SSD1306"
|
||||||
|
arduino-cli lib install "Adafruit ST7735 and ST7789 Library"
|
||||||
arduino-cli lib install "Adafruit NeoPixel"
|
arduino-cli lib install "Adafruit NeoPixel"
|
||||||
arduino-cli lib install "XPowersLib"
|
arduino-cli lib install "XPowersLib"
|
||||||
arduino-cli lib install "Crypto"
|
arduino-cli lib install "Crypto"
|
||||||
|
@ -173,8 +174,8 @@ upload-tdeck:
|
||||||
arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:esp32s3
|
arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:esp32s3
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32s3/RNode_Firmware.ino.bin)
|
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32s3/RNode_Firmware.ino.bin)
|
||||||
@sleep 3
|
#@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32-s3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
#python ./Release/esptool/esptool.py --chip esp32-s3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-rnode_ng_20:
|
upload-rnode_ng_20:
|
||||||
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:ttgo-lora32
|
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:ttgo-lora32
|
||||||
|
|
|
@ -61,6 +61,8 @@ void setup() {
|
||||||
pinMode(DISPLAY_CS, OUTPUT);
|
pinMode(DISPLAY_CS, OUTPUT);
|
||||||
digitalWrite(SD_CS, HIGH);
|
digitalWrite(SD_CS, HIGH);
|
||||||
digitalWrite(DISPLAY_CS, HIGH);
|
digitalWrite(DISPLAY_CS, HIGH);
|
||||||
|
|
||||||
|
pinMode(DISPLAY_BL_PIN, OUTPUT);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue