mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-25 22:20:27 +00:00
Merge branch 'master' into tft-gui-work
This commit is contained in:
commit
bf7f9bacdf
@ -121,6 +121,30 @@ static uint16_t displayWidth, displayHeight;
|
|||||||
|
|
||||||
#define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2)
|
#define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2)
|
||||||
|
|
||||||
|
/// Check if the display can render a string (detect special chars; emoji)
|
||||||
|
static bool haveGlyphs(const char *str)
|
||||||
|
{
|
||||||
|
#if defined(OLED_UA) || defined(OLED_RU)
|
||||||
|
// Don't want to make any assumptions about custom language support
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Check each character with the lookup function for the OLED library
|
||||||
|
// We're not really meant to use this directly..
|
||||||
|
bool have = true;
|
||||||
|
for (uint16_t i = 0; i < strlen(str); i++) {
|
||||||
|
uint8_t result = Screen::customFontTableLookup((uint8_t)str[i]);
|
||||||
|
// If font doesn't support a character, it is substituted for ¿
|
||||||
|
if (result == 191 && (uint8_t)str[i] != 191) {
|
||||||
|
have = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_DEBUG("haveGlyphs=%d\n", have);
|
||||||
|
return have;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw the icon with extra info printed around the corners
|
* Draw the icon with extra info printed around the corners
|
||||||
*/
|
*/
|
||||||
@ -144,13 +168,15 @@ static void drawIconScreen(const char *upperMsg, OLEDDisplay *display, OLEDDispl
|
|||||||
if (upperMsg)
|
if (upperMsg)
|
||||||
display->drawString(x + 0, y + 0, upperMsg);
|
display->drawString(x + 0, y + 0, upperMsg);
|
||||||
|
|
||||||
// Draw version in upper right
|
// Draw version and short name in upper right
|
||||||
char buf[16];
|
char buf[25];
|
||||||
snprintf(buf, sizeof(buf), "%s",
|
snprintf(buf, sizeof(buf), "%s\n%s", xstr(APP_VERSION_SHORT), haveGlyphs(owner.short_name) ? owner.short_name : "");
|
||||||
xstr(APP_VERSION_SHORT)); // Note: we don't bother printing region or now, it makes the string too long
|
|
||||||
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(buf), y + 0, buf);
|
display->setTextAlignment(TEXT_ALIGN_RIGHT);
|
||||||
|
display->drawString(x + SCREEN_WIDTH, y + 0, buf);
|
||||||
screen->forceDisplay();
|
screen->forceDisplay();
|
||||||
// FIXME - draw serial # somewhere?
|
|
||||||
|
display->setTextAlignment(TEXT_ALIGN_LEFT); // Restore left align, just to be kind to any other unsuspecting code
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drawOEMIconScreen(const char *upperMsg, OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
static void drawOEMIconScreen(const char *upperMsg, OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
@ -185,14 +211,15 @@ static void drawOEMIconScreen(const char *upperMsg, OLEDDisplay *display, OLEDDi
|
|||||||
if (upperMsg)
|
if (upperMsg)
|
||||||
display->drawString(x + 0, y + 0, upperMsg);
|
display->drawString(x + 0, y + 0, upperMsg);
|
||||||
|
|
||||||
// Draw version in upper right
|
// Draw version and shortname in upper right
|
||||||
char buf[16];
|
char buf[25];
|
||||||
snprintf(buf, sizeof(buf), "%s",
|
snprintf(buf, sizeof(buf), "%s\n%s", xstr(APP_VERSION_SHORT), haveGlyphs(owner.short_name) ? owner.short_name : "");
|
||||||
xstr(APP_VERSION_SHORT)); // Note: we don't bother printing region or now, it makes the string too long
|
|
||||||
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(buf), y + 0, buf);
|
display->setTextAlignment(TEXT_ALIGN_RIGHT);
|
||||||
|
display->drawString(x + SCREEN_WIDTH, y + 0, buf);
|
||||||
screen->forceDisplay();
|
screen->forceDisplay();
|
||||||
|
|
||||||
// FIXME - draw serial # somewhere?
|
display->setTextAlignment(TEXT_ALIGN_LEFT); // Restore left align, just to be kind to any other unsuspecting code
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drawOEMBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
static void drawOEMBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
@ -218,7 +245,6 @@ static void drawBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int1
|
|||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
// Draw region in upper left
|
|
||||||
const char *region = myRegion ? myRegion->name : NULL;
|
const char *region = myRegion ? myRegion->name : NULL;
|
||||||
drawIconScreen(region, display, state, x, y);
|
drawIconScreen(region, display, state, x, y);
|
||||||
}
|
}
|
||||||
@ -281,40 +307,19 @@ static void drawFunctionOverlay(OLEDDisplay *display, OLEDDisplayUiState *state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if the display can render a string (detect special chars; emoji)
|
|
||||||
static bool haveGlyphs(const char *str)
|
|
||||||
{
|
|
||||||
#if defined(OLED_UA) || defined(OLED_RU)
|
|
||||||
// Don't want to make any assumptions about custom language support
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Check each character with the lookup function for the OLED library
|
|
||||||
// We're not really meant to use this directly..
|
|
||||||
bool have = true;
|
|
||||||
for (uint16_t i = 0; i < strlen(str); i++) {
|
|
||||||
uint8_t result = Screen::customFontTableLookup((uint8_t)str[i]);
|
|
||||||
// If font doesn't support a character, it is substituted for ¿
|
|
||||||
if (result == 191 && (uint8_t)str[i] != 191) {
|
|
||||||
have = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_DEBUG("haveGlyphs=%d\n", have);
|
|
||||||
return have;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_EINK
|
#ifdef USE_EINK
|
||||||
/// Used on eink displays while in deep sleep
|
/// Used on eink displays while in deep sleep
|
||||||
static void drawDeepSleepScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
static void drawDeepSleepScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Next frame should use full-refresh, and block while running, else device will sleep before async callback
|
// Next frame should use full-refresh, and block while running, else device will sleep before async callback
|
||||||
EINK_ADD_FRAMEFLAG(display, COSMETIC);
|
EINK_ADD_FRAMEFLAG(display, COSMETIC);
|
||||||
EINK_ADD_FRAMEFLAG(display, BLOCKING);
|
EINK_ADD_FRAMEFLAG(display, BLOCKING);
|
||||||
|
|
||||||
LOG_DEBUG("Drawing deep sleep screen\n");
|
LOG_DEBUG("Drawing deep sleep screen\n");
|
||||||
drawIconScreen("Sleeping...", display, state, x, y);
|
|
||||||
|
// Display displayStr on the screen
|
||||||
|
drawIconScreen("Sleeping", display, state, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used on eink displays when screen updates are paused
|
/// Used on eink displays when screen updates are paused
|
||||||
|
@ -8,6 +8,14 @@
|
|||||||
|
|
||||||
// Make sure that we never let our packets grow too large for one BLE packet
|
// Make sure that we never let our packets grow too large for one BLE packet
|
||||||
#define MAX_TO_FROM_RADIO_SIZE 512
|
#define MAX_TO_FROM_RADIO_SIZE 512
|
||||||
|
|
||||||
|
#if meshtastic_FromRadio_size > MAX_TO_FROM_RADIO_SIZE
|
||||||
|
#error "meshtastic_FromRadio_size is too large for our BLE packets"
|
||||||
|
#endif
|
||||||
|
#if meshtastic_ToRadio_size > MAX_TO_FROM_RADIO_SIZE
|
||||||
|
#error "meshtastic_ToRadio_size is too large for our BLE packets"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SPECIAL_NONCE 69420
|
#define SPECIAL_NONCE 69420
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -63,7 +63,8 @@ static void initBrownout()
|
|||||||
// We don't bother with setting up brownout if soft device is disabled - because during production we always use softdevice
|
// We don't bother with setting up brownout if soft device is disabled - because during production we always use softdevice
|
||||||
}
|
}
|
||||||
|
|
||||||
static const bool useSoftDevice = true; // Set to false for easier debugging
|
// This is a public global so that the debugger can set it to false automatically from our gdbinit
|
||||||
|
bool useSoftDevice = true; // Set to false for easier debugging
|
||||||
|
|
||||||
#if !MESHTASTIC_EXCLUDE_BLUETOOTH
|
#if !MESHTASTIC_EXCLUDE_BLUETOOTH
|
||||||
void setBluetoothEnable(bool enable)
|
void setBluetoothEnable(bool enable)
|
||||||
|
@ -79,6 +79,7 @@ debug_extra_cmds =
|
|||||||
commands 1
|
commands 1
|
||||||
echo Breakpoint at setup() has semihosting console, connect to it with "telnet localhost 5555"
|
echo Breakpoint at setup() has semihosting console, connect to it with "telnet localhost 5555"
|
||||||
set wantSemihost = true
|
set wantSemihost = true
|
||||||
|
set useSoftDevice = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,5 +15,19 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/wio-sdk-wm1110>
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
|
;debug_tool = stlink
|
||||||
|
;debug_speed = 4000
|
||||||
|
; No need to reflash if the binary hasn't changed
|
||||||
|
debug_load_mode = modified
|
||||||
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
||||||
upload_protocol = jlink
|
upload_protocol = jlink
|
||||||
|
;upload_protocol = stlink
|
||||||
|
; we prefer to stop in setup() because we are an 'ardiuno' app
|
||||||
|
debug_init_break = tbreak setup
|
||||||
|
|
||||||
|
; we need to turn off BLE/soft device if we are debugging otherwise it will watchdog reset us.
|
||||||
|
debug_extra_cmds =
|
||||||
|
echo Running .gdbinit script
|
||||||
|
commands 1
|
||||||
|
set useSoftDevice = false
|
||||||
|
end
|
@ -3,7 +3,7 @@
|
|||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = xiao_ble_sense
|
board = xiao_ble_sense
|
||||||
board_level = extra
|
board_level = extra
|
||||||
build_flags = ${nrf52840_base.build_flags} -Ivariants/xiao_ble -Ivariants/xiao_ble/softdevice -Ivariants/xiao_ble/softdevice/nrf52 -D EBYTE_E22 -DEBYTE_E22_900M30S -DPRIVATE_HW
|
build_flags = ${nrf52840_base.build_flags} -Ivariants/xiao_ble -Ivariants/xiao_ble/softdevice -Ivariants/xiao_ble/softdevice/nrf52 -DEBYTE_E22 -DEBYTE_E22_900M30S -DPRIVATE_HW
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
board_build.ldscript = variants/xiao_ble/nrf52840_s140_v7.ld
|
board_build.ldscript = variants/xiao_ble/nrf52840_s140_v7.ld
|
||||||
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/xiao_ble>
|
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/xiao_ble>
|
||||||
|
Loading…
Reference in New Issue
Block a user