Added ability to set custom display address

This commit is contained in:
Mark Qvist 2023-09-19 18:32:29 +02:00
parent 948798cd3e
commit 2536c26f50
6 changed files with 37 additions and 3 deletions

View File

@ -408,6 +408,7 @@
float battery_percent = 0.0; float battery_percent = 0.0;
uint8_t battery_state = 0x00; uint8_t battery_state = 0x00;
uint8_t display_intensity = 0xFF; uint8_t display_intensity = 0xFF;
uint8_t display_addr = 0xFF;
bool display_diagnostics = true; bool display_diagnostics = true;
bool device_init_done = false; bool device_init_done = false;
bool eeprom_ok = false; bool eeprom_ok = false;

View File

@ -25,16 +25,20 @@
#define DISP_ADDR 0x3C #define DISP_ADDR 0x3C
#elif BOARD_MODEL == BOARD_TBEAM #elif BOARD_MODEL == BOARD_TBEAM
#define DISP_RST 13 #define DISP_RST 13
#define DISP_ADDR 0x3D #define DISP_ADDR 0x3C
// #define DISP_ADDR 0x3C #define DISP_CUSTOM_ADDR true
#elif BOARD_MODEL == BOARD_HELTEC32_V2 || BOARD_MODEL == BOARD_LORA32_V1_0 #elif BOARD_MODEL == BOARD_HELTEC32_V2 || BOARD_MODEL == BOARD_LORA32_V1_0
#define DISP_RST 16 #define DISP_RST 16
#define DISP_ADDR 0x3C #define DISP_ADDR 0x3C
#define SCL_OLED 15 #define SCL_OLED 15
#define SDA_OLED 4 #define SDA_OLED 4
#elif BOARD_MODEL == BOARD_RNODE_NG_21
#define DISP_RST -1
#define DISP_ADDR 0x3C
#else #else
#define DISP_RST -1 #define DISP_RST -1
#define DISP_ADDR 0x3C #define DISP_ADDR 0x3C
#define DISP_CUSTOM_ADDR true
#endif #endif
#define SMALL_FONT &Org_01 #define SMALL_FONT &Org_01
@ -105,7 +109,15 @@ bool display_init() {
Wire.begin(SDA_OLED, SCL_OLED); Wire.begin(SDA_OLED, SCL_OLED);
#endif #endif
if(!display.begin(SSD1306_SWITCHCAPVCC, DISP_ADDR)) { #if DISP_CUSTOM_ADDR == true
uint8_t display_address = EEPROM.read(eeprom_addr(ADDR_CONF_DADR));
if (display_address == 0xFF) display_address = DISP_ADDR;
#else
uint8_t display_address = DISP_ADDR;
#endif
if(!display.begin(SSD1306_SWITCHCAPVCC, display_address)) {
return false; return false;
} else { } else {
set_contrast(&display, display_contrast); set_contrast(&display, display_contrast);

View File

@ -52,6 +52,7 @@
#define CMD_FB_WRITE 0x43 #define CMD_FB_WRITE 0x43
#define CMD_FB_READL 0x44 #define CMD_FB_READL 0x44
#define CMD_DISP_INT 0x45 #define CMD_DISP_INT 0x45
#define CMD_DISP_ADDR 0x63
#define CMD_BT_CTRL 0x46 #define CMD_BT_CTRL 0x46
#define CMD_BT_PIN 0x62 #define CMD_BT_PIN 0x62

View File

@ -898,6 +898,21 @@ void serialCallback(uint8_t sbyte) {
di_conf_save(display_intensity); di_conf_save(display_intensity);
} }
#endif
} else if (command == CMD_DISP_ADDR) {
#if HAS_DISPLAY
if (sbyte == FESC) {
ESCAPE = true;
} else {
if (ESCAPE) {
if (sbyte == TFEND) sbyte = FEND;
if (sbyte == TFESC) sbyte = FESC;
ESCAPE = false;
}
display_addr = sbyte;
da_conf_save(display_addr);
}
#endif #endif
} }
} }

1
ROM.h
View File

@ -63,6 +63,7 @@
#define ADDR_CONF_BT 0xB0 #define ADDR_CONF_BT 0xB0
#define ADDR_CONF_DSET 0xB1 #define ADDR_CONF_DSET 0xB1
#define ADDR_CONF_DINT 0xB2 #define ADDR_CONF_DINT 0xB2
#define ADDR_CONF_DADR 0xB3
#define INFO_LOCK_BYTE 0x73 #define INFO_LOCK_BYTE 0x73
#define CONF_OK_BYTE 0x73 #define CONF_OK_BYTE 0x73

View File

@ -1212,6 +1212,10 @@ void di_conf_save(uint8_t dint) {
eeprom_update(eeprom_addr(ADDR_CONF_DINT), dint); eeprom_update(eeprom_addr(ADDR_CONF_DINT), dint);
} }
void da_conf_save(uint8_t dadr) {
eeprom_update(eeprom_addr(ADDR_CONF_DADR), dadr);
}
bool eeprom_have_conf() { bool eeprom_have_conf() {
if (EEPROM.read(eeprom_addr(ADDR_CONF_OK)) == CONF_OK_BYTE) { if (EEPROM.read(eeprom_addr(ADDR_CONF_OK)) == CONF_OK_BYTE) {
return true; return true;