From 32784e6eebb0d7a8917e70a4ac79b86cd899db97 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Mon, 20 Jul 2026 15:37:42 +0200 Subject: [PATCH 01/85] drivers/speaker: map SF32LB volume to attenuation-only DAC gain The DAC-path volume was converted from the 0-100 UI scale as (vol - 36) * 2 half-dB, i.e. -36..+64 dB. Any volume above 36 applied positive digital gain, which hard-clips full-scale content: alarm tones (volume 60, +24 dB) played as a digital-full-scale square wave, at maximum loudness regardless of the speaker volume preference, and overdriving the speaker well past the level the factory test validates. Volumes above 90 exceeded the HAL's +54 dB limit, so HAL_AUDCODEC_Config_DACPath_Volume failed without writing the gain registers and the error was ignored, leaving the 0 dB baseline and making the volume curve non-monotonic (90 was louder than 100). The mapping had been dead code until 0e2afbddb started re-applying the volume after DAC path setup (v4.20.0), which is when alarms became loud and distorted in the field. Map 1..100 linearly to -36..0 dB instead (0 still mutes), and log a warning if the HAL rejects the value. Fixes HARD-711 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/drivers/speaker/sf32lb52/audec.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/fw/drivers/speaker/sf32lb52/audec.c b/src/fw/drivers/speaker/sf32lb52/audec.c index 44d072cacb..0d0ad3f260 100644 --- a/src/fw/drivers/speaker/sf32lb52/audec.c +++ b/src/fw/drivers/speaker/sf32lb52/audec.c @@ -275,10 +275,13 @@ static void prv_apply_volume(AudioDevice* audio_device) { } HAL_AUDCODEC_Mute_DACPath(haudcodec, 0); - // convert to HAL decoder range (-36~54)*2 - int volume = ((int)state->volume - 36) * 2; - HAL_AUDCODEC_Config_DACPath_Volume(haudcodec, 0, volume); - HAL_AUDCODEC_Config_DACPath_Volume(haudcodec, 1, volume); + // Map 1..100 to -36..0 dB in the HAL's 0.5 dB units. Never apply positive + // digital gain: it clips full-scale content and overdrives the speaker. + int atten_half_db = ((MAX_VOLUME - (int)state->volume) * 72) / MAX_VOLUME; + if ((HAL_AUDCODEC_Config_DACPath_Volume(haudcodec, 0, -atten_half_db) != HAL_OK) || + (HAL_AUDCODEC_Config_DACPath_Volume(haudcodec, 1, -atten_half_db) != HAL_OK)) { + PBL_LOG_WRN("Failed to apply DAC volume (%d half-dB)", -atten_half_db); + } } static bool prv_allocate_buffers(AudioDeviceState *state) { From 8eea38a950300d7987f15ad40d0d5f26d7382ad7 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Mon, 20 Jul 2026 15:37:52 +0200 Subject: [PATCH 02/85] popups: play alarm tones at full speaker volume With the SF32LB volume mapping fixed to attenuation-only, the previous constant of 60 now really means -14.4 dB instead of the clipped +24 dB it produced before, which would make alarms noticeably quiet. Play alarms at volume 100 (0 dB DAC gain) - the loudest undistorted level and the same drive level the factory speaker test runs at. The user's global speaker volume preference scales alarms down from there. Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/popups/alarm_popup.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fw/popups/alarm_popup.h b/src/fw/popups/alarm_popup.h index 8471da9705..10a532af6b 100644 --- a/src/fw/popups/alarm_popup.h +++ b/src/fw/popups/alarm_popup.h @@ -6,9 +6,9 @@ #include "kernel/events.h" #ifdef CONFIG_SPEAKER -// Volume 60/100 is a moderate first cut; tunable, and a per-user volume -// preference can be added in a follow-up. -#define ALARM_SPEAKER_VOLUME 60 +// Full volume = 0 dB DAC gain, the loudest undistorted level; the user's +// global speaker-volume preference scales it down from there. +#define ALARM_SPEAKER_VOLUME 100 #endif void alarm_popup_push_window(PebbleAlarmClockEvent* e); From 1fabb980ff000b7cbb1d61c97ff3e6f12ae10237 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Mon, 20 Jul 2026 16:08:29 +0200 Subject: [PATCH 03/85] services/speaker: add absolute-volume preview tone API Signed-off-by: Joshua Jun --- .../pbl/services/speaker/speaker_service.h | 7 ++++ src/fw/services/speaker/speaker_service.c | 37 +++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/include/pbl/services/speaker/speaker_service.h b/include/pbl/services/speaker/speaker_service.h index 8642ec2659..24468812f9 100644 --- a/include/pbl/services/speaker/speaker_service.h +++ b/include/pbl/services/speaker/speaker_service.h @@ -57,6 +57,13 @@ bool speaker_service_play_tone(uint16_t freq_hz, uint16_t duration_ms, uint8_t waveform, uint8_t velocity, SpeakerPriority pri, uint8_t vol); +//! Play a short fixed tone at an absolute output volume, bypassing the user's +//! speaker-volume preference, so settings UIs can preview a candidate volume +//! before it is saved. Mute still applies. +//! @param vol Absolute output volume (0-100) +//! @return true if playback started +bool speaker_service_play_volume_preview(uint8_t vol); + //! Play N monophonic tracks in parallel, mixed together. //! Track arrays and any sample data are copied into kernel memory. //! @param tracks Array of tracks. For each, its notes array and (optional) diff --git a/src/fw/services/speaker/speaker_service.c b/src/fw/services/speaker/speaker_service.c index 1c032d6e7d..3bd659dc98 100644 --- a/src/fw/services/speaker/speaker_service.c +++ b/src/fw/services/speaker/speaker_service.c @@ -29,6 +29,10 @@ PBL_LOG_MODULE_DEFINE(service_speaker, CONFIG_SERVICE_SPEAKER_LOG_LEVEL); #define SPEAKER_SAMPLE_RATE 16000 #define SPEAKER_REFILL_SAMPLES 512 +// Volume-preview tone: square, to match the perceived loudness +#define VOLUME_PREVIEW_FREQ_HZ 660 +#define VOLUME_PREVIEW_DURATION_MS 200 + // The audio drivers queue up to ~64 ms ahead of the DAC (double-buffered // DMA/I2S pipe + circular buffer). Once the source runs dry, pad with 80 ms // of silence before stopping so the queued audio actually plays. @@ -40,6 +44,7 @@ typedef struct { SpeakerPriority priority; PebbleTask owner_task; uint8_t volume; + bool volume_absolute; // Note sequence source NoteSequenceState note_seq; @@ -117,6 +122,9 @@ static uint8_t prv_effective_volume(uint8_t vol) { if (prv_is_speaker_muted()) { return 0; } + if (s_state.volume_absolute) { + return vol; + } const uint8_t cap = alerts_preferences_get_speaker_volume(); return (uint32_t)vol * cap / 100; } @@ -211,6 +219,7 @@ static void prv_stop_internal(SpeakerFinishReason reason) { s_state.source_type = SpeakerSourceNone; s_state.owner_task = PebbleTask_Unknown; s_state.pipeline_draining = false; + s_state.volume_absolute = false; if (reason == SpeakerFinishReasonPreempted) { PBL_ANALYTICS_ADD(speaker_preempted_count, 1); @@ -507,9 +516,10 @@ bool speaker_service_play_note_seq(const SpeakerNote *notes, uint32_t num_notes, return true; } -bool speaker_service_play_tone(uint16_t freq_hz, uint16_t duration_ms, - uint8_t waveform, uint8_t velocity, - SpeakerPriority pri, uint8_t vol) { +static bool prv_play_tone_internal(uint16_t freq_hz, uint16_t duration_ms, + uint8_t waveform, uint8_t velocity, + SpeakerPriority pri, uint8_t vol, + bool volume_absolute) { mutex_lock(s_lock); if (!s_state.initialized || duration_ms == 0) { @@ -539,6 +549,7 @@ bool speaker_service_play_tone(uint16_t freq_hz, uint16_t duration_ms, s_state.source_type = SpeakerSourceTone; s_state.priority = pri; s_state.volume = vol; + s_state.volume_absolute = volume_absolute; prv_start_audio(vol); prv_refill_locked(); @@ -547,6 +558,22 @@ bool speaker_service_play_tone(uint16_t freq_hz, uint16_t duration_ms, return true; } +bool speaker_service_play_tone(uint16_t freq_hz, uint16_t duration_ms, + uint8_t waveform, uint8_t velocity, + SpeakerPriority pri, uint8_t vol) { + return prv_play_tone_internal(freq_hz, duration_ms, waveform, velocity, pri, vol, + false /* volume_absolute */); +} + +bool speaker_service_play_volume_preview(uint8_t vol) { + if (vol > 100) { + vol = 100; + } + return prv_play_tone_internal(VOLUME_PREVIEW_FREQ_HZ, VOLUME_PREVIEW_DURATION_MS, + SpeakerWaveformSquare, 0 /* velocity: full */, + SpeakerPriorityApp, vol, true /* volume_absolute */); +} + bool speaker_service_play_tracks(const SpeakerTrack *tracks, uint32_t num_tracks, SpeakerPriority pri, uint8_t vol) { mutex_lock(s_lock); @@ -817,6 +844,10 @@ bool speaker_service_play_tone(uint16_t freq_hz, uint16_t duration_ms, return false; } +bool speaker_service_play_volume_preview(uint8_t vol) { + return false; +} + bool speaker_service_play_tracks(const SpeakerTrack *tracks, uint32_t num_tracks, SpeakerPriority pri, uint8_t vol) { return false; From 28da0c9cf0000131b42677ef7b0a23dd964a3671 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Mon, 20 Jul 2026 16:08:39 +0200 Subject: [PATCH 04/85] settings: redesign speaker volume window Signed-off-by: Joshua Jun --- .../system/settings/speaker_volume_window.c | 150 ++++++++++++++++++ .../system/settings/speaker_volume_window.h | 8 + src/fw/apps/system/settings/vibe_patterns.c | 32 +--- 3 files changed, 160 insertions(+), 30 deletions(-) create mode 100644 src/fw/apps/system/settings/speaker_volume_window.c create mode 100644 src/fw/apps/system/settings/speaker_volume_window.h diff --git a/src/fw/apps/system/settings/speaker_volume_window.c b/src/fw/apps/system/settings/speaker_volume_window.c new file mode 100644 index 0000000000..770c7cc6eb --- /dev/null +++ b/src/fw/apps/system/settings/speaker_volume_window.c @@ -0,0 +1,150 @@ +/* SPDX-FileCopyrightText: 2026 Core Devices LLC */ +/* SPDX-License-Identifier: Apache-2.0 */ + +#include "speaker_volume_window.h" + +#ifdef CONFIG_SPEAKER + +#include "menu.h" + +#include "applib/fonts/fonts.h" +#include "applib/ui/ui.h" +#include "kernel/pbl_malloc.h" +#include "kernel/pebble_tasks.h" +#include "kernel/ui/system_icons.h" +#include "pbl/services/i18n/i18n.h" +#include "pbl/services/notifications/alerts_preferences.h" +#include "pbl/services/speaker/speaker_service.h" + +#include +#include + +#define VOLUME_STEP 5 +#define BUTTON_REPEAT_INTERVAL_MS 100 + +typedef struct SpeakerVolumeWindowData { + Window window; //!< Must be first: the base layer is cast back to this struct. + ActionBarLayer action_bar; + int16_t value; +} SpeakerVolumeWindowData; + +static void prv_play_preview(SpeakerVolumeWindowData *data) { + // Restart the preview on every step so rapid clicks aren't rejected as + // same-priority playback. + speaker_service_stop_for_task(PebbleTask_App); + speaker_service_set_owner_task(PebbleTask_App); + speaker_service_play_volume_preview((uint8_t)data->value); +} + +static void prv_update_proc(Layer *layer, GContext *ctx) { + _Static_assert(offsetof(Window, layer) == 0, ""); + _Static_assert(offsetof(SpeakerVolumeWindowData, window) == 0, ""); + SpeakerVolumeWindowData *data = (SpeakerVolumeWindowData *)layer; + + graphics_context_set_fill_color(ctx, GColorWhite); + graphics_fill_rect(ctx, &layer->bounds); + graphics_context_set_text_color(ctx, GColorBlack); + + const int16_t x_margin = 5; + const GRect content = grect_inset( + layer->bounds, GEdgeInsets(0, ACTION_BAR_WIDTH + x_margin, 0, x_margin)); + + GRect title_frame = content; + title_frame.origin.y = PBL_IF_ROUND_ELSE(24, 16); + title_frame.size.h = 30; + graphics_draw_text(ctx, i18n_get("Volume", data), + fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD), title_frame, + GTextOverflowModeTrailingEllipsis, GTextAlignmentCenter, NULL); + + char value_text[8]; + snprintf(value_text, sizeof(value_text), "%d%%", (int)data->value); + + GFont value_font = fonts_get_system_font(FONT_KEY_LECO_38_BOLD_NUMBERS); + const int16_t value_height = fonts_get_font_height(value_font); + GRect value_frame = content; + value_frame.origin.y = (layer->bounds.size.h - value_height) / 2; + value_frame.size.h = value_height + 4; // slack so nothing clips + graphics_draw_text(ctx, value_text, value_font, value_frame, + GTextOverflowModeTrailingEllipsis, GTextAlignmentCenter, NULL); +} + +static void prv_set_value(SpeakerVolumeWindowData *data, int new_value) { + if (new_value < 0) { + new_value = 0; + } else if (new_value > 100) { + new_value = 100; + } + if (new_value == data->value) { + return; + } + data->value = (int16_t)new_value; + layer_mark_dirty(&data->window.layer); + prv_play_preview(data); +} + +static void prv_up_click_handler(ClickRecognizerRef recognizer, + SpeakerVolumeWindowData *data) { + prv_set_value(data, data->value + VOLUME_STEP); +} + +static void prv_down_click_handler(ClickRecognizerRef recognizer, + SpeakerVolumeWindowData *data) { + prv_set_value(data, data->value - VOLUME_STEP); +} + +static void prv_select_click_handler(ClickRecognizerRef recognizer, + SpeakerVolumeWindowData *data) { + alerts_preferences_set_speaker_volume((uint8_t)data->value); + speaker_service_handle_audio_prefs_changed(); + settings_menu_mark_dirty(SettingsMenuItemVibrations); + app_window_stack_remove(&data->window, true /* animated */); +} + +static void prv_click_config_provider(SpeakerVolumeWindowData *data) { + window_single_repeating_click_subscribe(BUTTON_ID_UP, BUTTON_REPEAT_INTERVAL_MS, + (ClickHandler)prv_up_click_handler); + window_single_repeating_click_subscribe(BUTTON_ID_DOWN, BUTTON_REPEAT_INTERVAL_MS, + (ClickHandler)prv_down_click_handler); + // Multi-click setup so the action bar's inverted segment stays visible for a + // moment as press feedback (same work-around as NumberWindow). + window_multi_click_subscribe(BUTTON_ID_SELECT, 1, 2, 25, true, + (ClickHandler)prv_select_click_handler); +} + +static void prv_window_load(Window *window) { + SpeakerVolumeWindowData *data = (SpeakerVolumeWindowData *)window; + ActionBarLayer *action_bar = &data->action_bar; + action_bar_layer_init(action_bar); + action_bar_layer_set_context(action_bar, data); + action_bar_layer_set_icon(action_bar, BUTTON_ID_UP, &s_bar_icon_up_bitmap); + action_bar_layer_set_icon(action_bar, BUTTON_ID_DOWN, &s_bar_icon_down_bitmap); + action_bar_layer_set_icon(action_bar, BUTTON_ID_SELECT, &s_bar_icon_check_bitmap); + action_bar_layer_set_click_config_provider( + action_bar, (ClickConfigProvider)prv_click_config_provider); + action_bar_layer_add_to_window(action_bar, window); +} + +static void prv_window_unload(Window *window) { + SpeakerVolumeWindowData *data = (SpeakerVolumeWindowData *)window; + // Stop any in-flight preview tone. + speaker_service_stop_for_task(PebbleTask_App); + action_bar_layer_deinit(&data->action_bar); + i18n_free_all(data); + app_free(data); +} + +void speaker_volume_window_push(void) { + SpeakerVolumeWindowData *data = app_zalloc_check(sizeof(*data)); + data->value = alerts_preferences_get_speaker_volume(); + + window_init(&data->window, WINDOW_NAME("Speaker Volume")); + window_set_window_handlers(&data->window, &(WindowHandlers) { + .load = prv_window_load, + .unload = prv_window_unload, + }); + layer_set_update_proc(&data->window.layer, prv_update_proc); + + app_window_stack_push(&data->window, true /* animated */); +} + +#endif // CONFIG_SPEAKER diff --git a/src/fw/apps/system/settings/speaker_volume_window.h b/src/fw/apps/system/settings/speaker_volume_window.h new file mode 100644 index 0000000000..6e7f4e4432 --- /dev/null +++ b/src/fw/apps/system/settings/speaker_volume_window.h @@ -0,0 +1,8 @@ +/* SPDX-FileCopyrightText: 2026 Core Devices LLC */ +/* SPDX-License-Identifier: Apache-2.0 */ + +#pragma once + +//! Push the speaker volume editor window. Each volume change plays a preview +//! tone at the candidate level; Select saves it to the alerts preferences. +void speaker_volume_window_push(void); diff --git a/src/fw/apps/system/settings/vibe_patterns.c b/src/fw/apps/system/settings/vibe_patterns.c index 435484ac49..8825a32b10 100644 --- a/src/fw/apps/system/settings/vibe_patterns.c +++ b/src/fw/apps/system/settings/vibe_patterns.c @@ -2,9 +2,9 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "vibe_patterns.h" +#include "speaker_volume_window.h" #include "window.h" -#include "applib/ui/number_window.h" #include "applib/ui/ui.h" #include "kernel/pbl_malloc.h" #include "pbl/services/i18n/i18n.h" @@ -175,34 +175,6 @@ static void prv_selection_changed_cb(SettingsCallbacks *context, uint16_t new_ro vibe_score_destroy(score); } -#ifdef CONFIG_SPEAKER -static void prv_volume_window_selected(NumberWindow *number_window, void *context) { - const int32_t value = number_window_get_value(number_window); - alerts_preferences_set_speaker_volume((uint8_t)value); - speaker_service_handle_audio_prefs_changed(); - settings_menu_mark_dirty(SettingsMenuItemVibrations); - app_window_stack_remove(&number_window->window, true /* animated */); -} - -static void prv_push_volume_window(SettingsVibePatternsData *data) { - NumberWindow *number_window = number_window_create( - i18n_get("Volume", data), - (NumberWindowCallbacks) { - .selected = prv_volume_window_selected, - }, - data); - if (!number_window) { - return; - } - number_window_set_min(number_window, 0); - number_window_set_max(number_window, 100); - number_window_set_step_size(number_window, 5); - number_window_set_value(number_window, - (int32_t)alerts_preferences_get_speaker_volume()); - app_window_stack_push(&number_window->window, true /* animated */); -} -#endif - static void prv_select_click_cb(SettingsCallbacks *context, uint16_t row) { vibes_cancel(); @@ -217,7 +189,7 @@ static void prv_select_click_cb(SettingsCallbacks *context, uint16_t row) { return; } case VibeSettingsRow_SpeakerVolume: { - prv_push_volume_window((SettingsVibePatternsData *)context); + speaker_volume_window_push(); return; } #endif From c8e7bf6c746a3faa4772f2bb90b5f57de45b8749 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Fri, 17 Jul 2026 14:46:50 +0200 Subject: [PATCH 05/85] fw/light: keep Getafix brightness presets distinct Round scaled intensity upward so each preset reaches a distinct hardware step. Retain the board's 25 percent ceiling. Fixes FIRM-3337 Co-authored-by: GPT-5 Codex Signed-off-by: Joshua Jun --- src/fw/services/light/service.c | 4 +- tests/fw/services/test_light.c | 29 ++++++++++- tests/fw/services/wscript_build | 2 +- .../overrides/getafix_backlight/board/board.h | 49 +++++++++++++++++++ 4 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 tests/overrides/getafix_backlight/board/board.h diff --git a/src/fw/services/light/service.c b/src/fw/services/light/service.c index 69807430d4..66dac1474f 100644 --- a/src/fw/services/light/service.c +++ b/src/fw/services/light/service.c @@ -15,6 +15,7 @@ #include "pbl/services/analytics/analytics.h" #include "pbl/services/battery/battery_monitor.h" #include "pbl/services/new_timer/new_timer.h" +#include "pbl/util/math.h" #include "services/light/als_screen_compensation.h" #include "syscall/syscall_internal.h" #include "system/logging.h" @@ -292,7 +293,8 @@ static void prv_apply_rgb_color(void) { static void prv_change_brightness(uint8_t new_brightness) { // Scale the 0-100% to the maximum value allowed in hardware - uint8_t scaled_brightness = (new_brightness * (uint16_t)BOARD_CONFIG.backlight_on_percent) / 100U; + uint8_t scaled_brightness = + DIVIDE_CEIL(new_brightness * (uint16_t)BOARD_CONFIG.backlight_on_percent, 100U); // Bleed-through gate around backlight 0↔on edges: while the LED is // illuminating the cover glass, the W1160 photodiode would latch diff --git a/tests/fw/services/test_light.c b/tests/fw/services/test_light.c index 453c38e3b8..949f8572e0 100644 --- a/tests/fw/services/test_light.c +++ b/tests/fw/services/test_light.c @@ -6,6 +6,8 @@ #include "board/board.h" #include "drivers/backlight.h" #include "pbl/services/light.h" +#include "pbl/util/math.h" +#include "pbl/util/size.h" #include "system/passert.h" #include "fake_new_timer.h" @@ -102,7 +104,7 @@ void backlight_set_intensity(uint8_t percent_intensity) { /////////////////////////////////////////////////////////// static uint8_t get_expected_brightness() { - return backlight_get_intensity(); + return DIVIDE_CEIL(backlight_get_intensity() * (uint16_t)BOARD_CONFIG.backlight_on_percent, 100U); } static void check_on(void) { @@ -121,7 +123,10 @@ static void check_on_timed_and_consume_partial(void) { stub_new_timer_fire(s_light_timer); - cl_assert_equal_i(s_backlight_brightness, 100 - (100 / LIGHT_FADE_STEPS)); + const uint8_t fade_brightness = 100 - (100 / LIGHT_FADE_STEPS); + const uint8_t scaled_fade = + DIVIDE_CEIL(fade_brightness * (uint16_t)BOARD_CONFIG.backlight_on_percent, 100U); + cl_assert_equal_i(s_backlight_brightness, scaled_fade); cl_assert(stub_new_timer_is_scheduled(s_light_timer)); } @@ -160,6 +165,26 @@ void test_light__cleanup(void) { stub_new_timer_delete(s_light_timer); } +void test_light__scales_getafix_presets_upward(void) { + static const struct { + uint8_t intensity; + uint8_t scaled; + } cases[] = { + { 0, 0 }, + { 10, 3 }, + { 25, 7 }, + { 50, 13 }, + { 100, 25 }, + }; + + for (size_t i = 0; i < ARRAY_LENGTH(cases); i++) { + s_backlight_intensity = cases[i].intensity; + light_enable(true); + cl_assert_equal_i(s_backlight_brightness, cases[i].scaled); + light_enable(false); + } +} + void test_light__button_press_and_release(void) { light_button_pressed(); check_on(); diff --git a/tests/fw/services/wscript_build b/tests/fw/services/wscript_build index 2f546f228c..401dcc9e15 100644 --- a/tests/fw/services/wscript_build +++ b/tests/fw/services/wscript_build @@ -92,7 +92,7 @@ clar(ctx, sources_ant_glob = \ " src/fw/services/light/service.c", test_sources_ant_glob = "test_light.c", - override_includes=['dummy_board']) + override_includes=['getafix_backlight']) clar(ctx, sources_ant_glob = \ diff --git a/tests/overrides/getafix_backlight/board/board.h b/tests/overrides/getafix_backlight/board/board.h new file mode 100644 index 0000000000..09738dfbcd --- /dev/null +++ b/tests/overrides/getafix_backlight/board/board.h @@ -0,0 +1,49 @@ +/* SPDX-FileCopyrightText: 2026 Core Devices LLC */ +/* SPDX-License-Identifier: Apache-2.0 */ + +#pragma once + +// Keep this minimal board override aligned with dummy_board, but use Getafix's +// hardware backlight ceiling for scaling tests. +#include + +typedef struct { + const uint8_t backlight_on_percent; + const uint32_t ambient_light_dark_threshold; +} BoardConfig; + +typedef struct { +} BoardConfigBTCommon; + +typedef struct { + const uint8_t low_power_threshold; + const uint8_t battery_capacity_hours; +} BoardConfigPower; + +static const BoardConfig BOARD_CONFIG = { + .backlight_on_percent = 25, +}; + +static const BoardConfigBTCommon BOARD_CONFIG_BT_COMMON = { +}; + +static const BoardConfigPower BOARD_CONFIG_POWER = { + .low_power_threshold = 5, + .battery_capacity_hours = 144, +}; + +typedef struct { + uint8_t default_motion_sensitivity; +} BoardConfigAccel; + +static const BoardConfigAccel BOARD_CONFIG_ACCEL = { + .default_motion_sensitivity = 0, +}; + +typedef const struct MicDevice MicDevice; +static MicDevice *const MIC = (void *)0; + +typedef const struct HRMDevice HRMDevice; +static HRMDevice *const HRM = (void *)0; + +static const struct AudioDevice *const AUDIO = (void *)0; From 6d1edcb377f8f44e13bc66730c89da17b7a3c337 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Fri, 17 Jul 2026 14:49:11 +0200 Subject: [PATCH 06/85] fw/battery: set Getafix warning percentages Allow boards to select percentage-based warning points. Retain the existing time-based defaults for other boards. Configure Getafix warnings at 12 and 8 percent. Fixes FIRM-3325 Co-authored-by: GPT-5 Codex Signed-off-by: Joshua Jun --- boards/getafix/defconfig | 2 + src/fw/services/battery/Kconfig | 16 ++++ src/fw/shell/normal/battery_ui_fsm.c | 21 +++-- tests/fw/shell/normal/test_battery_ui_fsm.c | 93 ++++++++++++++------- tests/fw/shell/normal/wscript_build | 12 +++ 5 files changed, 108 insertions(+), 36 deletions(-) diff --git a/boards/getafix/defconfig b/boards/getafix/defconfig index f6f0aad954..254ba0a6f9 100644 --- a/boards/getafix/defconfig +++ b/boards/getafix/defconfig @@ -56,6 +56,8 @@ CONFIG_ACCEL_LIS2DW12_WK_THS_MIN=1 CONFIG_ACCEL_LIS2DW12_WK_THS_MAX=40 CONFIG_ACCEL_LIS2DW12_WK_THS_DEFAULT=16 CONFIG_ACCEL_LIS2DW12_SCALE_MG=4000 +CONFIG_BATTERY_WARNING_FIRST_PERCENT=12 +CONFIG_BATTERY_WARNING_SECOND_PERCENT=8 CONFIG_MAG=y CONFIG_MAG_MMC5603NJ=y diff --git a/src/fw/services/battery/Kconfig b/src/fw/services/battery/Kconfig index f70f87f9c0..120b00fd4e 100644 --- a/src/fw/services/battery/Kconfig +++ b/src/fw/services/battery/Kconfig @@ -17,6 +17,22 @@ config NRF_FUEL_GAUGE if SERVICE_BATTERY +config BATTERY_WARNING_FIRST_PERCENT + int "First battery warning threshold (%)" + range 0 100 + default 0 + help + Battery percentage for the first warning. A value of 0 uses the + default time-based threshold of 18 hours remaining. + +config BATTERY_WARNING_SECOND_PERCENT + int "Second battery warning threshold (%)" + range 0 100 + default 0 + help + Battery percentage for the second warning. A value of 0 uses the + default time-based threshold of 12 hours remaining. + module = SERVICE_BATTERY module-str = Battery source "src/fw/Kconfig.template.log_level" diff --git a/src/fw/shell/normal/battery_ui_fsm.c b/src/fw/shell/normal/battery_ui_fsm.c index 3fb69dac18..1dcfc3751f 100644 --- a/src/fw/shell/normal/battery_ui_fsm.c +++ b/src/fw/shell/normal/battery_ui_fsm.c @@ -85,8 +85,17 @@ static const BatteryUIState ui_states[] = { static BatteryUIStateID s_state = BatteryGood; static BatteryUIWarningLevel s_warning_points_index = -1; -/* first warning is at 18 hours remaining, second at 12 hours remaining */ +/* Default warnings are at 18 and 12 hours remaining. */ static const uint8_t s_warning_points[] = { 18, 12 }; +static const uint8_t s_warning_percentages[] = { + CONFIG_BATTERY_WARNING_FIRST_PERCENT, + CONFIG_BATTERY_WARNING_SECOND_PERCENT, +}; + +static uint8_t prv_get_warning_percent(BatteryUIWarningLevel level) { + const uint8_t configured = s_warning_percentages[level]; + return configured ? configured : battery_curve_get_percent_remaining(s_warning_points[level]); +} // Minimum hours of headroom above the next warning threshold required to show // the current warning. If battery crosses a warning point already close to the @@ -102,15 +111,16 @@ static void prv_display_warning(void *data) { bool new_warning = false; const BatteryUIWarningLevel num_points = ARRAY_LENGTH(s_warning_points) - 1; - while (s_warning_points_index < num_points && (percent <= - battery_curve_get_percent_remaining(s_warning_points[s_warning_points_index + 1]))) { + while (s_warning_points_index < num_points && + percent <= prv_get_warning_percent(s_warning_points_index + 1)) { s_warning_points_index++; new_warning = true; } if (new_warning && s_warning_points_index < num_points) { const uint32_t hours_remaining = battery_curve_get_hours_remaining(percent); - const uint32_t next_point_hours = s_warning_points[s_warning_points_index + 1]; + const uint32_t next_point_hours = + battery_curve_get_hours_remaining(prv_get_warning_percent(s_warning_points_index + 1)); if (hours_remaining < next_point_hours + BATTERY_WARNING_MIN_HOURS_HEADROOM) { new_warning = false; } @@ -235,8 +245,7 @@ static BatteryUIStateID prv_get_state(PreciseBatteryChargeState *state) { return BatteryCritical; } else if (low_power_is_active()) { return BatteryLowPower; - } else if (ratio32_to_percent(state->charge_percent) <= - battery_curve_get_percent_remaining(s_warning_points[0])) { + } else if (ratio32_to_percent(state->charge_percent) <= prv_get_warning_percent(0)) { return BatteryWarning; } else { return BatteryGood; diff --git a/tests/fw/shell/normal/test_battery_ui_fsm.c b/tests/fw/shell/normal/test_battery_ui_fsm.c index 2f444deb7d..246973dbcc 100644 --- a/tests/fw/shell/normal/test_battery_ui_fsm.c +++ b/tests/fw/shell/normal/test_battery_ui_fsm.c @@ -159,6 +159,16 @@ void prv_change_state(PreciseBatteryChargeState new_state) { battery_ui_handle_state_change_event(new_state); } +static uint8_t prv_warning_percent(BatteryUIWarningLevel level) { + static const uint8_t configured_percentages[] = { + CONFIG_BATTERY_WARNING_FIRST_PERCENT, + CONFIG_BATTERY_WARNING_SECOND_PERCENT, + }; + static const uint8_t default_hours[] = { 18, 12 }; + return configured_percentages[level] ? configured_percentages[level] : + battery_curve_get_percent_remaining(default_hours[level]); +} + // Tests //////////////////////////////////// @@ -166,10 +176,10 @@ void test_battery_ui_fsm__transitions(void) { PreciseBatteryChargeState charging = prv_make_state(100, true, true), fully_charged = prv_make_state(100, false, true), nop = prv_make_state(50, false, false); - PreciseBatteryChargeState warning_18h = - prv_make_state(battery_curve_get_percent_remaining(18), false, false); - PreciseBatteryChargeState warning_12h = - prv_make_state(battery_curve_get_percent_remaining(12), false, false); + PreciseBatteryChargeState first_warning = + prv_make_state(prv_warning_percent(BatteryUIWarningLevel_Low), false, false); + PreciseBatteryChargeState second_warning = + prv_make_state(prv_warning_percent(BatteryUIWarningLevel_VeryLow), false, false); // Good - shouldn't do anything prv_change_state(nop); @@ -188,10 +198,11 @@ void test_battery_ui_fsm__transitions(void) { cl_assert(!s_modal_onscreen); // Warning - Should trigger various modals - prv_change_state(warning_18h); - cl_assert(s_modal_onscreen && s_modal_percent == battery_curve_get_percent_remaining(18)); - prv_change_state(warning_12h); - cl_assert(s_modal_onscreen && s_modal_percent == battery_curve_get_percent_remaining(12)); + prv_change_state(first_warning); + cl_assert(s_modal_onscreen && s_modal_percent == prv_warning_percent(BatteryUIWarningLevel_Low)); + prv_change_state(second_warning); + cl_assert(s_modal_onscreen && + s_modal_percent == prv_warning_percent(BatteryUIWarningLevel_VeryLow)); // Low Power - should enter low power watchface, modal should have closed prv_set_state(PowerLow); @@ -213,7 +224,7 @@ void test_battery_ui_fsm__transitions(void) { cl_assert(!s_modal_onscreen && s_entered_standby); // Shouldn't be able to transition out - prv_change_state(warning_18h); + prv_change_state(first_warning); cl_assert(!s_modal_onscreen); } @@ -235,25 +246,46 @@ void test_battery_ui_fsm__shutdown(void) { void test_battery_ui_fsm__warning(void) { PreciseBatteryChargeState nop = prv_make_state(50, false, false); - PreciseBatteryChargeState warning_18h = - prv_make_state(battery_curve_get_percent_remaining(18), false, false); - PreciseBatteryChargeState warning_12h = - prv_make_state(battery_curve_get_percent_remaining(12), false, false); + PreciseBatteryChargeState first_warning = + prv_make_state(prv_warning_percent(BatteryUIWarningLevel_Low), false, false); + PreciseBatteryChargeState second_warning = + prv_make_state(prv_warning_percent(BatteryUIWarningLevel_VeryLow), false, false); // Make sure warning modals don't go back up - prv_change_state(warning_12h); - prv_change_state(warning_18h); - // We started at 12h warning, so only update once + prv_change_state(second_warning); + prv_change_state(first_warning); + // We started at the second warning, so only update once cl_assert(s_modal_onscreen); - cl_assert_equal_i(s_modal_percent, battery_curve_get_percent_remaining(12)); + cl_assert_equal_i(s_modal_percent, prv_warning_percent(BatteryUIWarningLevel_VeryLow)); cl_assert_equal_i(s_vibe_count, 1); // But we can jump around as long as we switch first prv_change_state(nop); cl_assert(!s_modal_onscreen); - prv_change_state(warning_12h); - cl_assert(s_modal_onscreen && s_modal_percent == battery_curve_get_percent_remaining(12)); + prv_change_state(second_warning); + cl_assert(s_modal_onscreen && + s_modal_percent == prv_warning_percent(BatteryUIWarningLevel_VeryLow)); +} + +void test_battery_ui_fsm__uses_configured_warning_percentages(void) { +#if CONFIG_BATTERY_WARNING_FIRST_PERCENT && CONFIG_BATTERY_WARNING_SECOND_PERCENT + prv_change_state(prv_make_state(20, false, false)); + cl_assert(!s_modal_onscreen); + + prv_change_state(prv_make_state(12, false, false)); + cl_assert(s_modal_onscreen); + cl_assert_equal_i(s_modal_percent, 12); + + prv_change_state(prv_make_state(8, false, false)); + cl_assert(s_modal_onscreen); + cl_assert_equal_i(s_modal_percent, 8); +#else + cl_assert_equal_i(prv_warning_percent(BatteryUIWarningLevel_Low), + battery_curve_get_percent_remaining(18)); + cl_assert_equal_i(prv_warning_percent(BatteryUIWarningLevel_VeryLow), + battery_curve_get_percent_remaining(12)); +#endif } void test_battery_ui_fsm__skip_first_warning_when_next_is_close(void) { @@ -261,21 +293,22 @@ void test_battery_ui_fsm__skip_first_warning_when_next_is_close(void) { // BATTERY_WARNING_MIN_HOURS_HEADROOM (3h) of the next threshold, the // gray warning is skipped so the user doesn't get contradictory daypart // messages (e.g. "Powered 'til tomorrow" followed by "Powered 'til tonight"). - PreciseBatteryChargeState nop = prv_make_state(50, false, false); - // 14h remaining is within 3h of the 12h red threshold -> gray should be skipped. - PreciseBatteryChargeState warning_14h = - prv_make_state(battery_curve_get_percent_remaining(14), false, false); - PreciseBatteryChargeState warning_12h = - prv_make_state(battery_curve_get_percent_remaining(12), false, false); - - prv_change_state(warning_14h); + const uint8_t second_warning_percent = prv_warning_percent(BatteryUIWarningLevel_VeryLow); + const uint32_t near_second_warning_hours = + battery_curve_get_hours_remaining(second_warning_percent) + 2; + PreciseBatteryChargeState near_second_warning = prv_make_state( + battery_curve_get_percent_remaining(near_second_warning_hours), false, false); + PreciseBatteryChargeState second_warning = + prv_make_state(second_warning_percent, false, false); + + prv_change_state(near_second_warning); cl_assert(!s_modal_onscreen); cl_assert_equal_i(s_vibe_count, 0); // Dropping below the red threshold should fire red normally. - prv_change_state(warning_12h); + prv_change_state(second_warning); cl_assert(s_modal_onscreen); - cl_assert_equal_i(s_modal_percent, battery_curve_get_percent_remaining(12)); + cl_assert_equal_i(s_modal_percent, second_warning_percent); cl_assert_equal_i(s_vibe_count, 1); } @@ -283,7 +316,7 @@ void test_battery_ui_fsm__honor_dnd(void) { PreciseBatteryChargeState nop = prv_make_state(50, false, false), charging = prv_make_state(50, true, true), warning = prv_make_state( - battery_curve_get_percent_remaining(18), false, false); + prv_warning_percent(BatteryUIWarningLevel_Low), false, false); s_dnd_on = true; prv_change_state(charging); cl_assert(s_modal_onscreen && s_modal_charging); diff --git a/tests/fw/shell/normal/wscript_build b/tests/fw/shell/normal/wscript_build index f8351a5ce1..53a2e3d67a 100644 --- a/tests/fw/shell/normal/wscript_build +++ b/tests/fw/shell/normal/wscript_build @@ -9,6 +9,18 @@ clar(ctx, " src/fw/services/battery/voltage/battery_curve.c", test_sources_ant_glob = 'test_battery_ui_fsm.c', override_includes=['dummy_board'], + defines=['CONFIG_BATTERY_WARNING_FIRST_PERCENT=0', + 'CONFIG_BATTERY_WARNING_SECOND_PERCENT=0'], + platforms = ['obelix']) + +clar(ctx, + sources_ant_glob = " src/fw/shell/normal/battery_ui_fsm.c" + " src/fw/services/battery/voltage/battery_curve.c", + test_sources_ant_glob = 'test_battery_ui_fsm.c', + test_name='test_battery_ui_fsm_percent', + override_includes=['dummy_board'], + defines=['CONFIG_BATTERY_WARNING_FIRST_PERCENT=12', + 'CONFIG_BATTERY_WARNING_SECOND_PERCENT=8'], platforms = ['obelix']) # vim:filetype=python From f08b7114049a31631f89f95ef352fc947fcd14b6 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Fri, 17 Jul 2026 14:50:09 +0200 Subject: [PATCH 07/85] boards/getafix: increase shake sensitivity Narrow the LIS2DW12 wake threshold range and lower its default threshold. Keep the existing Low, Medium, and High preference values unchanged. Fixes FIRM-2573 Co-authored-by: GPT-5 Codex Signed-off-by: Joshua Jun --- boards/getafix/defconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boards/getafix/defconfig b/boards/getafix/defconfig index 254ba0a6f9..b9b75a52f4 100644 --- a/boards/getafix/defconfig +++ b/boards/getafix/defconfig @@ -53,8 +53,8 @@ CONFIG_TOUCH_CST816=y CONFIG_ACCEL_LIS2DW12=y CONFIG_ACCEL_LIS2DW12_WK_DUR_DEFAULT=1 CONFIG_ACCEL_LIS2DW12_WK_THS_MIN=1 -CONFIG_ACCEL_LIS2DW12_WK_THS_MAX=40 -CONFIG_ACCEL_LIS2DW12_WK_THS_DEFAULT=16 +CONFIG_ACCEL_LIS2DW12_WK_THS_MAX=28 +CONFIG_ACCEL_LIS2DW12_WK_THS_DEFAULT=14 CONFIG_ACCEL_LIS2DW12_SCALE_MG=4000 CONFIG_BATTERY_WARNING_FIRST_PERCENT=12 CONFIG_BATTERY_WARNING_SECOND_PERCENT=8 From 76249c528223d1843742d3798665674d555292ae Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 18:03:08 +0200 Subject: [PATCH 08/85] doxygen: deduplicate Doxyfile-all-graphs via @INCLUDE Replace the full 1792-line copy with an @INCLUDE of the base Doxyfile plus the nine settings it overrides. Verified with doxygen -x_noenv that the effective configuration is byte-identical to the previous file. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- Doxyfile-all-graphs | 1784 +------------------------------------------ 1 file changed, 2 insertions(+), 1782 deletions(-) diff --git a/Doxyfile-all-graphs b/Doxyfile-all-graphs index 00b0daa9ce..124cc4e2de 100644 --- a/Doxyfile-all-graphs +++ b/Doxyfile-all-graphs @@ -1,1792 +1,12 @@ -# Doxyfile 1.8.1.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or sequence of words) that should -# identify the project. Note that if you do not use Doxywizard you need -# to put quotes around the project name if it contains spaces. - -PROJECT_NAME = "tintin-fw" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = build/doxygen - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = YES - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) +# Same as Doxyfile, but with all dependency graphs enabled (see `waf docs-all`). +@INCLUDE = Doxyfile JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all -# comments according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you -# can mix doxygen, HTML, and XML commands with Markdown formatting. -# Disable only in case of backward compatibilities issues. - -MARKDOWN_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and -# unions with only public data fields will be shown inline in the documentation -# of the scope in which they are defined (i.e. file, namespace, or group -# documentation), provided this scope is documented. If set to NO (the default), -# structs, classes, and unions are shown on a separate page (for HTML and Man -# pages) or section (for LaTeX and RTF). - -INLINE_SIMPLE_STRUCTS = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = YES - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -SYMBOL_CACHE_SIZE = 0 - -# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be -# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given -# their name and scope. Since this can be an expensive process and often the -# same symbol appear multiple times in the code, doxygen keeps a cache of -# pre-resolved symbols. If the cache is too small doxygen will become slower. -# If the cache is too large, memory is wasted. The cache size is given by this -# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. - -EXTRACT_PACKAGE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files -# containing the references data. This must be a list of .bib files. The -# .bib extension is automatically appended if omitted. Using this command -# requires the bibtex tool to be installed. See also -# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style -# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this -# feature you need bibtex and perl available in the search path. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = src - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - FILE_PATTERNS = *.c *.h - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = src/fw/vendor src/core/vendor src/boot/vendor - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - INLINE_SOURCES = YES - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C, C++ and Fortran comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is advised to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# style sheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the style sheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of -# entries shown in the various tree structured indices initially; the user -# can expand and collapse entries dynamically later on. Doxygen will expand -# the tree to such a level that at most the specified number of entries are -# visible (unless a fully collapsed tree already exceeds this amount). -# So setting the number of entries 1 will produce a full collapsed tree by -# default. 0 is a special value representing an infinite number of entries -# and will result in a full expanded tree by default. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you may also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to -# the MathJax Content Delivery Network so you can quickly see the result without -# installing MathJax. -# However, it is strongly recommended to install a local -# copy of MathJax from http://www.mathjax.org before deployment. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. - -MATHJAX_EXTENSIONS = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvantages are that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See -# http://en.wikipedia.org/wiki/BibTeX for more info. - -LATEX_BIB_STYLE = plain - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load style sheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. For each -# tag file the location of the external documentation should be added. The -# format of a tag file without this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths -# or URLs. Note that each tag file must have a unique name (where the name does -# NOT include the path). If a tag file is not located in the directory in which -# doxygen is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - HAVE_DOT = YES - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will use the Helvetica font for all dot files that -# doxygen generates. When you want a differently looking font you can specify -# the font name using DOT_FONTNAME. You need to make sure dot is able to find -# the font, which can be done by putting it in a standard location or by setting -# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the Helvetica font. -# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to -# set the path where dot can find it. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside -# the class node. If there are many fields or methods and many nodes the -# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS -# threshold limits the number of items for each type to make the size more -# managable. Set this to 0 for no limit. Note that the threshold may be -# exceeded by 50% before the limit is enforced. - -UML_LIMIT_NUM_FIELDS = 10 - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. If you choose svg you need to set -# HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible in IE 9+ (other browsers do not have this requirement). - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# Note that this requires a modern browser other than Internet Explorer. -# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you -# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible. Older versions of IE do not have SVG support. - -INTERACTIVE_SVG = NO - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES From 513861f5c3090d55c488271328af388076ee848a Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 18:03:08 +0200 Subject: [PATCH 09/85] doxygen: drop obsolete tags and update project name Remove the fifteen tags that modern doxygen flags as obsolete (TCL_SUBST, SYMBOL_CACHE_SIZE, COLS_IN_ALPHA_INDEX, HTML_TIMESTAMP, FORMULA_TRANSPARENT, LATEX_SOURCE_CODE, XML_SCHEMA, XML_DTD, PERL_PATH, CLASS_DIAGRAMS, MSCGEN_PATH, DOT_FONTNAME, DOT_FONTSIZE, DOT_TRANSPARENT, DOT_MULTI_TARGETS) and rename the project from the old tintin-fw codename to PebbleOS. Only behavior change: the obsolete HTML_TIMESTAMP=YES no longer maps to TIMESTAMP=YES, so generated pages lose the embedded timestamp, which also makes doc builds reproducible. Everything else verified identical via doxygen -x_noenv before/after. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- Doxyfile | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/Doxyfile b/Doxyfile index 43dcdb2931..9757ed236a 100644 --- a/Doxyfile +++ b/Doxyfile @@ -26,7 +26,7 @@ DOXYFILE_ENCODING = UTF-8 # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. -PROJECT_NAME = "tintin-fw" +PROJECT_NAME = PebbleOS # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or @@ -200,8 +200,6 @@ ALIASES = # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list @@ -333,8 +331,6 @@ TYPEDEF_HIDES_STRUCT = YES # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. -SYMBOL_CACHE_SIZE = 0 - # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given # their name and scope. Since this can be an expensive process and often the @@ -843,8 +839,6 @@ ALPHABETICAL_INDEX = YES # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that @@ -939,8 +933,6 @@ HTML_COLORSTYLE_GAMMA = 80 # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. -HTML_TIMESTAMP = YES - # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. @@ -1161,8 +1153,6 @@ FORMULA_FONTSIZE = 10 # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. -FORMULA_TRANSPARENT = YES - # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not @@ -1300,8 +1290,6 @@ LATEX_HIDE_INDICES = NO # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. @@ -1398,14 +1386,10 @@ XML_OUTPUT = xml # which can be used by a validating XML parser to check the # syntax of the XML files. -XML_SCHEMA = - # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. -XML_DTD = - # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that @@ -1565,8 +1549,6 @@ EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -1577,8 +1559,6 @@ PERL_PATH = /usr/bin/perl # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. -CLASS_DIAGRAMS = YES - # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the @@ -1586,8 +1566,6 @@ CLASS_DIAGRAMS = YES # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. -MSCGEN_PATH = - # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. @@ -1616,13 +1594,9 @@ DOT_NUM_THREADS = 0 # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. -DOT_FONTNAME = Helvetica - # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. -DOT_FONTSIZE = 10 - # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. @@ -1770,15 +1744,11 @@ MAX_DOT_GRAPH_DEPTH = 0 # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. -DOT_MULTI_TARGETS = NO - # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. From 62d5b5016adef63202a772b0f6213b56084fa0d2 Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 18:03:08 +0200 Subject: [PATCH 10/85] pbl: forward menuconfig to waf Kconfig options are documented as tweakable via menuconfig, but pbl did not forward the command, forcing a drop back to ./waf for that one step. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- pbl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbl b/pbl index ee599d0a16..2c4d2cea17 100755 --- a/pbl +++ b/pbl @@ -28,7 +28,7 @@ BUILD_DIR = os.path.join(REPO_ROOT, "build") LANG_DIR_REL = "resources/normal/base/lang" # Commands forwarded verbatim to ./waf (no build env / waflib needed). -WAF_PASSTHROUGH = ("configure", "build", "bundle", "clean", "test", "waf") +WAF_PASSTHROUGH = ("configure", "menuconfig", "build", "bundle", "clean", "test", "waf") # QEMU SDL decorations per board. The first entry is used as the default. QEMU_DECORATIONS = { From 8fc95ba9d392fab385f8ad1cb6ab58d973601821 Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 18:03:08 +0200 Subject: [PATCH 11/85] docs: use ./pbl consistently instead of ./waf The development docs mixed ./waf and ./pbl invocations, sometimes on the same page. Standardize on ./pbl, which forwards all the referenced commands (configure, menuconfig, build, bundle) to waf. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- docs/development/building_fw.md | 6 +++--- docs/development/moddable.md | 2 +- docs/development/options.md | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/development/building_fw.md b/docs/development/building_fw.md index 125eb7128c..8334ab5860 100644 --- a/docs/development/building_fw.md +++ b/docs/development/building_fw.md @@ -1,9 +1,9 @@ # Building firmware -Before building, make sure you've configured {doc}`./waf <../development/options>`. Then, run the following: +Before building, make sure you've configured {doc}`./pbl <../development/options>`. Then, run the following: ```shell -./waf build +./pbl build ``` ## Loading firmware with a firmware development kit @@ -41,7 +41,7 @@ If you don't have a firmware development kit, you may bundle a `.pbz` file for s onto your sealed watch: ```shell -./waf bundle +./pbl bundle ``` The resulting `.pbz` file will be located in the `build/` directory. Transfer this file diff --git a/docs/development/moddable.md b/docs/development/moddable.md index 7ae5dc0712..9c8be3d7c8 100644 --- a/docs/development/moddable.md +++ b/docs/development/moddable.md @@ -8,7 +8,7 @@ The Moddable integration provides a lightweight sandbox for runningJavaScript ap Moddable is enabled by default on platforms whose board defconfig sets `CONFIG_MODDABLE_XS=y`. You can override this at configure time by passing `-DCONFIG_MODDABLE_XS=y` or `-DCONFIG_MODDABLE_XS=n` to -`./waf configure`. PRF (recovery) builds always disable the engine. +`./pbl configure`. PRF (recovery) builds always disable the engine. ## Installable applications diff --git a/docs/development/options.md b/docs/development/options.md index 4da1191747..a2e4e414cd 100644 --- a/docs/development/options.md +++ b/docs/development/options.md @@ -25,13 +25,13 @@ Keep in mind that some targets may not currently compile as-is. :`-DCONFIG_RELEASE=y`: Build a release-mode firmware. Strips debug aids, enables shipping defaults (e.g. Memfault crash reporting), and reduces battery usage - compared to a debug build. Pass this to `./waf configure`. + compared to a debug build. Pass this to `./pbl configure`. ## Main features :`-DCONFIG_MODDABLE_XS=y` / `-DCONFIG_MODDABLE_XS=n`: Force the Moddable SDK's XS JavaScript engine on or off, overriding - the board defconfig. Pass to `./waf configure`. See {doc}`moddable`. + the board defconfig. Pass to `./pbl configure`. See {doc}`moddable`. PRF (recovery) builds always disable the engine regardless of this value. @@ -79,4 +79,4 @@ the OpenOCD runner, the probe and target configuration lives in the board's This will increase ROM usage, but will not require a dictionary file to decode logs. These and many more options can also be browsed and changed interactively with -`./waf menuconfig` after configuring. +`./pbl menuconfig` after configuring. From 9d4b436ef65cfdee0476b65d8ba9ae26774dbaba Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 18:03:09 +0200 Subject: [PATCH 12/85] treewide: remove unused gdb.cmd The two-line OpenOCD gdb script is referenced nowhere; the openocd runner uses .gdbinit instead. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- gdb.cmd | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 gdb.cmd diff --git a/gdb.cmd b/gdb.cmd deleted file mode 100644 index 8a693c6a03..0000000000 --- a/gdb.cmd +++ /dev/null @@ -1,2 +0,0 @@ -target remote localhost:3333 -monitor reset halt From dca1f767c6b35920b6a457b47b49b4bf23fa9bb6 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 20 Jul 2026 17:58:55 +0200 Subject: [PATCH 13/85] comm/ble: request connection parameter update sooner after connect iOS creates connections with a 720ms supervision timeout and only relaxes it once the peripheral requests new parameters. We waited the full TGAP(conn_pause_peripheral) = 5s before sending the request, so any RF fade during that window killed the link. Logs from a getafix unit showed reconnect storms where most connections died of supervision timeout (0x208) within 1-6s of connecting, i.e. before the update could be requested, while connections that reached the 6s supervision timeout stayed up for hours. Shorten the initial pause to 1s. The 5s pause is a spec recommendation ("should", not "shall"), and Apple has confirmed relaxed handling of TGAP timings (see the pre-existing note about the 30s Tgap timeout). Related to FIRM-3330. Co-authored-by: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- src/fw/comm/ble/gap_le_connect_params.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/fw/comm/ble/gap_le_connect_params.c b/src/fw/comm/ble/gap_le_connect_params.c index 9c3e7ed61d..f233fd39d7 100644 --- a/src/fw/comm/ble/gap_le_connect_params.c +++ b/src/fw/comm/ble/gap_le_connect_params.c @@ -64,7 +64,11 @@ //! See v4.2 "9.3.12 Connection Interval Timing Parameters": //! "The Peripheral device should not perform a Connection Parameter Update procedure //! within TGAP(conn_pause_peripheral = 5 seconds) after establishing a connection." -#define REQUIRED_INIT_PAUSE_S (5) +//! We deliberately deviate from this recommendation ("should", not "shall"): iOS +//! creates the connection with a 720ms supervision timeout and never raises it on +//! its own, so the link is fragile until our first update request is granted. See +//! also the note below about Apple's relaxed handling of TGAP timings. +#define REQUIRED_INIT_PAUSE_S (1) #define REQUIRED_INIT_PAUSE_TICKS (REQUIRED_INIT_PAUSE_S * RTC_TICKS_HZ) //! Try 3 times before giving up. From 5dd4e57f7cf45bc753feff43b0986add10575ee5 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 20 Jul 2026 17:59:04 +0200 Subject: [PATCH 14/85] comm/ble: back off reconnect advertising during connection churn When the link repeatedly drops right after connecting (e.g. supervision timeouts in bad RF conditions), every disconnection restarted reconnect advertising with a 30s short-interval (20ms) burst. A getafix unit hitting a reconnect storm went through ~130 connect/disconnect cycles in 70 minutes, each paying the full burst. Track how often plain reconnect advertising is (re)started: after 3 starts within a 60s window, schedule only the long-interval (~1s) term. One attempt per window still gets the short-interval burst, so reconnection latency recovers as soon as the churn stops. BLE HRM reconnection advertising is user-initiated and time-bounded, so it is not backed off. Related to FIRM-3330. Co-authored-by: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- src/fw/comm/ble/gap_le_slave_reconnect.c | 34 +++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/fw/comm/ble/gap_le_slave_reconnect.c b/src/fw/comm/ble/gap_le_slave_reconnect.c index cdb38ff449..cf03cce8ba 100644 --- a/src/fw/comm/ble/gap_le_slave_reconnect.c +++ b/src/fw/comm/ble/gap_le_slave_reconnect.c @@ -12,6 +12,7 @@ #include "system/logging.h" #include "comm/bt_lock.h" +#include "drivers/rtc.h" #include "kernel/event_loop.h" #include "pbl/services/bluetooth/bluetooth_persistent_storage.h" #include "pbl/services/regular_timer.h" @@ -31,6 +32,28 @@ typedef enum { ReconnectType_BleHrm // Advertising for reconnection with HRM payload } ReconnectType; +//! When the master reconnects and drops repeatedly (e.g. supervision timeouts +//! in bad RF conditions), skip the initial short-interval advertising term to +//! bound the radio duty cycle. The window resets after +//! RECONNECT_CHURN_WINDOW_SECS, so during sustained churn one attempt per +//! window still gets the fast short-interval burst. +#define RECONNECT_CHURN_WINDOW_SECS (60) +#define RECONNECT_CHURN_THRESHOLD (3) + +//! bt_lock() needs to be taken before accessing these variables. +static RtcTicks s_churn_window_start_ticks; +static uint32_t s_churn_count; + +static bool prv_should_skip_short_interval(void) { + const RtcTicks now = rtc_get_ticks(); + if ((now - s_churn_window_start_ticks) > (RECONNECT_CHURN_WINDOW_SECS * RTC_TICKS_HZ)) { + s_churn_window_start_ticks = now; + s_churn_count = 0; + } + ++s_churn_count; + return (s_churn_count > RECONNECT_CHURN_THRESHOLD); +} + // ----------------------------------------------------------------------------- //! Static, internal helper functions static void prv_advert_job_unscheduled_callback(GAPLEAdvertisingJobRef job, @@ -124,8 +147,17 @@ static void prv_evaluate(ReconnectType prev_type) { }, }; + const GAPLEAdvertisingJobTerm *terms = advert_terms; + uint8_t num_terms = ARRAY_LENGTH(advert_terms); + // HRM reconnection is user-initiated and time-bounded, don't back it off. + if (!use_hrm_payload && prv_should_skip_short_interval()) { + PBL_LOG_WRN("Reconnect churn: advertising at long interval only"); + terms = &advert_terms[1]; + num_terms = 1; + } + s_reconnect_advert_job = gap_le_advert_schedule( - ad, advert_terms, sizeof(advert_terms) / sizeof(GAPLEAdvertisingJobTerm), + ad, terms, num_terms, prv_advert_job_unscheduled_callback, NULL, GAPLEAdvertisingJobTagReconnection); if (use_hrm_payload) { From 048371799cc4003f6828aa3d96f30e7c781d3d33 Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 14:45:49 +0200 Subject: [PATCH 15/85] applib/ui, settings/time: fix reboot from wrap-around onto timezone row With menu scroll wrap-around enabled and automatic timezone source, pressing up from the top of the Date & Time menu wrapped the selection onto the non-selectable Timezone row; selecting it hit PBL_ASSERTN(clock_timezone_source_is_manual()) and rebooted the watch. Two changes: - The menu layer wrap-around path called menu_layer_set_selected_index() directly, which skips the selection_will_change callback, so wrap-around could land on rows the callback would have redirected away from. Run the callback on the wrap destination like normal scrolling does, and cancel the wrap if the callback locks the selection in place. Covered by two new unit tests. - Per review feedback on an earlier attempt (#1543), a visible but non-selectable row is confusing, so hide the Timezone row entirely while the timezone source is automatic, mirroring how Set Time and Set Date are hidden for the automatic time source. The active region is still shown as the Timezone Source subtitle, and the assert is replaced with a plain guard so selecting the row can never reboot the watch. Fixes #1521 Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- src/fw/applib/ui/menu_layer.c | 14 ++++++ src/fw/apps/system/settings/time.c | 76 +++++++++++++++++------------- tests/fw/ui/test_menu_layer.c | 58 +++++++++++++++++++++++ 3 files changed, 115 insertions(+), 33 deletions(-) diff --git a/src/fw/applib/ui/menu_layer.c b/src/fw/applib/ui/menu_layer.c index 30efc511d2..c51e642787 100644 --- a/src/fw/applib/ui/menu_layer.c +++ b/src/fw/applib/ui/menu_layer.c @@ -135,6 +135,20 @@ static bool prv_menu_scroll_handle_wrap_around(MenuLayer *menu_layer, ClickRecog return false; } + // Honor selection_will_change, like normal scrolling does, so the wrap + // destination can be redirected away from non-selectable rows. + MenuLayerSelectionWillChangeCallback will_change_cb = + menu_layer->callbacks.selection_will_change; + if (will_change_cb) { + MenuIndex new_index = *wraparound_dest_index; + will_change_cb(menu_layer, &new_index, current_index, menu_layer->callback_context); + if (menu_index_compare(&new_index, ¤t_index) == 0) { + // Callback locked the selection in place; don't wrap. + return false; + } + *wraparound_dest_index = new_index; + } + const bool animated = true; menu_layer_set_selected_index(menu_layer, *wraparound_dest_index, MenuRowAlignCenter, animated); if (menu_layer->scroll_vibe_on_wrap_around) { diff --git a/src/fw/apps/system/settings/time.c b/src/fw/apps/system/settings/time.c index 653703dbd3..c0d0a7c11c 100644 --- a/src/fw/apps/system/settings/time.c +++ b/src/fw/apps/system/settings/time.c @@ -28,6 +28,7 @@ #include "pbl/services/timezone_database.h" #include "shell/prefs.h" +#include #include // 9 (TZ) continents: Africa, America, Antarctica, Asia, Atlantic, Australia, @@ -71,33 +72,38 @@ typedef enum { TimeRowNum, } TimeRow; -//! Rows that remain visible when time source is automatic (Set Time and Set Date are hidden). -static const TimeRow s_auto_visible_rows[] = { - TimeRow_TimeSource, - TimeRow_Format, - TimeRow_TimezoneSource, - TimeRow_Timezone, -}; +//! Set Time and Set Date are hidden when the time source is automatic; +//! Timezone is hidden when the timezone source is automatic. +static bool prv_row_visible(TimeRow row) { + switch (row) { + case TimeRow_SetTime: + case TimeRow_SetDate: + return clock_time_source_is_manual(); + case TimeRow_Timezone: + return clock_timezone_source_is_manual(); + default: + return true; + } +} //! Map a visible row index to its TimeRow enum value. -//! When time source is automatic, Set Time and Set Date rows are hidden. static TimeRow prv_row_for_index(uint16_t index) { - if (clock_time_source_is_manual()) { - // All rows visible - return (TimeRow)index; - } - // Automatic mode: map through the reduced row list - if (index < ARRAY_LENGTH(s_auto_visible_rows)) { - return s_auto_visible_rows[index]; + for (TimeRow row = 0; row < TimeRowNum; row++) { + if (prv_row_visible(row) && (index-- == 0)) { + return row; + } } return TimeRowNum; } static uint16_t prv_visible_row_count(void) { - if (clock_time_source_is_manual()) { - return TimeRowNum; + uint16_t count = 0; + for (TimeRow row = 0; row < TimeRowNum; row++) { + if (prv_row_visible(row)) { + count++; + } } - return ARRAY_LENGTH(s_auto_visible_rows); + return count; } @@ -328,12 +334,15 @@ static void prv_select_click_cb(SettingsCallbacks *context, uint16_t row) { prv_cycle_clock_style(); break; case TimeRow_TimezoneSource: - // Time settings (automatic / manual) + // Toggle automatic / manual timezone; the Timezone row is shown/hidden prv_cycle_clock_timezone_source(); - break; + settings_menu_reload_data(SettingsMenuItemDateTime); + return; case TimeRow_Timezone: - // Set Timezone Region - PBL_ASSERTN(clock_timezone_source_is_manual()); + // Set Timezone Region; row is hidden while source is automatic + if (!clock_timezone_source_is_manual()) { + return; + } prv_continent_menu_push(data); break; default: @@ -349,6 +358,7 @@ static void prv_draw_row_cb(SettingsCallbacks *context, GContext *ctx, const char *title = NULL; const char *subtitle = NULL; char current_timezone_region[TIMEZONE_NAME_LENGTH]; + char tz_source_buf[TIMEZONE_NAME_LENGTH + 32]; char time_buf[TIME_STRING_TIME_LENGTH]; char date_buf[16]; @@ -383,8 +393,17 @@ static void prv_draw_row_cb(SettingsCallbacks *context, GContext *ctx, } case TimeRow_TimezoneSource: { title = i18n_noop("Timezone Source"); - subtitle = clock_timezone_source_is_manual() ? i18n_noop("Manual") : - i18n_noop("Automatic"); + if (clock_timezone_source_is_manual()) { + subtitle = i18n_noop("Manual"); + } else if (clock_is_timezone_set()) { + // Show the active timezone since the Timezone row is hidden + clock_get_timezone_region(current_timezone_region, TIMEZONE_NAME_LENGTH); + snprintf(tz_source_buf, sizeof(tz_source_buf), "%s (%s)", + i18n_get("Automatic", data), current_timezone_region); + subtitle = tz_source_buf; + } else { + subtitle = i18n_noop("Automatic"); + } break; } case TimeRow_Timezone: { @@ -400,14 +419,6 @@ static void prv_draw_row_cb(SettingsCallbacks *context, GContext *ctx, menu_cell_basic_draw(ctx, cell_layer, i18n_get(title, data), i18n_get(subtitle, data), NULL); } -static void prv_selection_will_change_cb(SettingsCallbacks *context, uint16_t *new_row, - uint16_t old_row) { - if (!clock_timezone_source_is_manual() && - prv_row_for_index(*new_row) == TimeRow_Timezone) { - *new_row = old_row; - } -} - static uint16_t prv_num_rows_cb(SettingsCallbacks *context) { return prv_visible_row_count(); } @@ -432,7 +443,6 @@ static Window *prv_init(void) { .draw_row = prv_draw_row_cb, .select_click = prv_select_click_cb, .num_rows = prv_num_rows_cb, - .selection_will_change = prv_selection_will_change_cb, }; prv_init_continent_and_region_names(data); diff --git a/tests/fw/ui/test_menu_layer.c b/tests/fw/ui/test_menu_layer.c index 1599cc19eb..1bcaef1834 100644 --- a/tests/fw/ui/test_menu_layer.c +++ b/tests/fw/ui/test_menu_layer.c @@ -327,6 +327,64 @@ void test_menu_layer__center_focused_handles_skipped_rows(void) { cl_assert_equal_i(4 * basic_cell_height, l.selection.y); } +// Not declared in menu_layer.h; normally reached via the window click config +extern void menu_up_click_handler(ClickRecognizerRef recognizer, MenuLayer *menu_layer); +extern void menu_down_click_handler(ClickRecognizerRef recognizer, MenuLayer *menu_layer); + +static void prv_redirect_off_last_row(struct MenuLayer *menu_layer, + MenuIndex *new_index, + MenuIndex old_index, + void *callback_context) { + if (new_index->row == s_num_rows - 1) { + new_index->row = s_num_rows - 2; + } +} + +void test_menu_layer__wrap_around_honors_selection_will_change(void) { + MenuLayer l; + menu_layer_init(&l, &GRect(10, 10, DISP_COLS, DISP_ROWS)); + menu_layer_set_callbacks(&l, NULL, &(MenuLayerCallbacks) { + .draw_row = prv_draw_row, + .get_num_rows = prv_get_num_rows, + .selection_will_change = prv_redirect_off_last_row, + }); + menu_layer_set_scroll_wrap_around(&l, true); + menu_layer_reload_data(&l); + cl_assert_equal_i(0, menu_layer_get_selected_index(&l).row); + + // Wrapping up from the first row must honor the redirect away from the + // non-selectable last row + menu_up_click_handler(NULL, &l); + cl_assert_equal_i(s_num_rows - 2, menu_layer_get_selected_index(&l).row); + + // Scrolling down from there stays put: not at the true last index, so no + // wrap, and normal scrolling is redirected back + menu_down_click_handler(NULL, &l); + cl_assert_equal_i(s_num_rows - 2, menu_layer_get_selected_index(&l).row); +} + +static void prv_lock_selection(struct MenuLayer *menu_layer, + MenuIndex *new_index, + MenuIndex old_index, + void *callback_context) { + *new_index = old_index; +} + +void test_menu_layer__wrap_around_cancelled_when_selection_locked(void) { + MenuLayer l; + menu_layer_init(&l, &GRect(10, 10, DISP_COLS, DISP_ROWS)); + menu_layer_set_callbacks(&l, NULL, &(MenuLayerCallbacks) { + .draw_row = prv_draw_row, + .get_num_rows = prv_get_num_rows, + .selection_will_change = prv_lock_selection, + }); + menu_layer_set_scroll_wrap_around(&l, true); + menu_layer_reload_data(&l); + + menu_up_click_handler(NULL, &l); + cl_assert_equal_i(0, menu_layer_get_selected_index(&l).row); +} + void test_menu_layer__center_focused_handles_skipped_rows_animated(void) { MenuLayer l; menu_layer_init(&l, &GRect(10, 10, DISP_COLS, DISP_ROWS)); From 6644a8eeda507824fe60013b2a5e71dd980f221d Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 20 Jul 2026 19:12:15 +0200 Subject: [PATCH 16/85] fw/linker: show static kernel RAM usage in the memory report The .kernel_heap section used to advance the location counter to the end of KERNEL_RAM, so the linker's --print-memory-usage report always showed the region as 100% used. Keep the section empty and assign _heap_end outside of it instead: the report now shows only the statically allocated portion (data, bss and kernel stacks), with the remainder implicitly available as kernel heap. The _heap_start and _heap_end symbols are unchanged. Co-authored-by: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- src/fw/linker/sections/kernel-ram.ld | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/fw/linker/sections/kernel-ram.ld b/src/fw/linker/sections/kernel-ram.ld index 39f222c37e..15d92c0d9a 100644 --- a/src/fw/linker/sections/kernel-ram.ld +++ b/src/fw/linker/sections/kernel-ram.ld @@ -64,8 +64,9 @@ } >REGION_KERNEL_STACKS __kernel_bg_stack_size__ = . - __kernel_bg_stack_start__; + /* The heap gets whatever is left. Keep the section empty so the memory + usage report shows static usage only. */ .kernel_heap (NOLOAD) : { _heap_start = .; - . = ORIGIN(REGION_KERNEL_HEAP) + LENGTH(REGION_KERNEL_HEAP); - _heap_end = .; } >REGION_KERNEL_HEAP + _heap_end = ORIGIN(REGION_KERNEL_HEAP) + LENGTH(REGION_KERNEL_HEAP); From 40ff6a57acef4d9b1ac6e3bb402bfcd43560d1ce Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 20:28:17 +0200 Subject: [PATCH 17/85] build: prune dead packages from requirements.txt Remove twelve packages with no remaining users: ply, pyusb, GitPython, pycryptodome, mock, nose, boto, enum34, pep8, protobuf (transitive dep of nanopb), certifi (transitive dep of requests) and pathlib. Several are Python-2-era relics: pathlib and enum34 are stdlib backports that can shadow the standard library, nose cannot even be imported on Python >= 3.12, and the GitPython pin predated the CVE-2022-24439 fix. The only nose user was an inline self-test in extract_comments.py, now using plain asserts. Also pin sh<2: the waf tooling uses the sh 1.x API and a fresh install today resolves sh 2.x, which has breaking API changes. Raise the prompt_toolkit floor to the 3.x line actually in use, unpin cobs (pulse2's own dependency is unpinned) and group the file by purpose. Verified with a fresh venv: pip install succeeds (72 packages), ./pbl configure && ./pbl build (qemu_emery) both pass. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- requirements.txt | 46 +++++++++---------- tools/generate_native_sdk/extract_comments.py | 8 ++-- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3636d57326..b1be6dc7be 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,38 +1,34 @@ +# Resource/font/image generation pillow freetype-py -ply==3.4 -pyusb==1.3.1 -pyserial -sh pypng -pexpect -cobs==1.0.0 svg.path -requests -GitPython==1.0.1 -pyelftools -pycryptodome -mock -nose -boto -prompt_toolkit>=0.55 -enum34 bitarray -pep8 polib -intelhex>=2.1,<3 -protobuf -grpcio-tools -nanopb + +# Build system (waf) tooling +sh<2 +packaging +PyYAML kconfiglib +intelhex>=2.1,<3 +pyelftools +libclang meson ninja -certifi -libclang -packaging -PyYAML + +# Protobuf codegen: nanopb_generator; grpcio-tools provides protoc where +# there is no system protoc (e.g. brew setups) +nanopb +grpcio-tools + +# Device communication / debugging +pyserial +pexpect +cobs +prompt_toolkit>=3 +requests libpebble2>=0.0.16 -pathlib -e tools/libs/pebble-commander -e tools/libs/pulse2 diff --git a/tools/generate_native_sdk/extract_comments.py b/tools/generate_native_sdk/extract_comments.py index 25ea8bf8c8..5bebb93541 100644 --- a/tools/generate_native_sdk/extract_comments.py +++ b/tools/generate_native_sdk/extract_comments.py @@ -122,11 +122,9 @@ def __init__(self, name): scan_file_content_for_defines(test_input, defines) - from nose.tools import eq_ - - eq_(defines[0].comment, "//! This is a documented MACRO") - eq_(defines[1].comment, "//! This is a documented define") - eq_(defines[2].comment, "//! This is a multiline\n//! documented define.") + assert defines[0].comment == "//! This is a documented MACRO" + assert defines[1].comment == "//! This is a documented define" + assert defines[2].comment == "//! This is a multiline\n//! documented define." assert defines[3].comment is None From c9ea3fb052f3aeac1ce4507bf3cbe26592c88eae Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 21:45:07 +0200 Subject: [PATCH 18/85] docs: promote PULSEv2 protocol docs out of legacy The legacy directory was created as a staging area with the intent to eventually bring the content onto the docs platform. The PULSEv2 protocol specs match the live implementation (src/fw/console/pulse*, tools/pulse/), so move the four pages into the built documentation under reference/. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- docs/index.md | 11 +++---- docs/reference/index.md | 29 +++++++++++++++++++ .../pulse2/flash-imaging.md | 0 docs/{legacy => reference}/pulse2/history.md | 0 docs/{legacy => reference}/pulse2/pulse2.md | 0 .../pulse2/reliable-transport.md | 0 6 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 docs/reference/index.md rename docs/{legacy => reference}/pulse2/flash-imaging.md (100%) rename docs/{legacy => reference}/pulse2/history.md (100%) rename docs/{legacy => reference}/pulse2/pulse2.md (100%) rename docs/{legacy => reference}/pulse2/reliable-transport.md (100%) diff --git a/docs/index.md b/docs/index.md index a4cd2bd47b..2fc2178690 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,9 @@ ```{raw} html
``` + # PebbleOS documentation + ```{raw} html
``` @@ -68,18 +70,17 @@ Browse the PebbleOS sources! ::: :::{grid-item-card} -:link: reference/external +:link: reference/index :link-type: doc 📖 Reference ^^^ -Learn more about PebbleOS: podcasts, developer documents and more! +Look things up: protocol specifications, podcasts, developer documents and more! ::: :::: - ```{toctree} :hidden: :caption: 🛠️ Development @@ -98,6 +99,6 @@ boards/index.md ```{toctree} :hidden: -:caption: 📖 Reference -reference/external.md +:caption: 📖 Reference +reference/index.md ``` diff --git a/docs/reference/index.md b/docs/reference/index.md new file mode 100644 index 0000000000..a28a70e881 --- /dev/null +++ b/docs/reference/index.md @@ -0,0 +1,29 @@ +# Reference + +Lookup material: external talks and documents about PebbleOS, and +specifications for the protocols used by the firmware and its tooling. + +## External resources + +Podcasts, presentations and developer documents from the Pebble community. + +```{toctree} +:maxdepth: 1 + +external.md +``` + +## PULSEv2 protocol suite + +PULSE is the serial protocol spoken between the firmware and the host +tooling (`./pbl console`, flash imaging, `tools/pulse/`). These pages +specify the wire format and its transports. + +```{toctree} +:maxdepth: 1 + +pulse2/pulse2.md +pulse2/reliable-transport.md +pulse2/flash-imaging.md +pulse2/history.md +``` diff --git a/docs/legacy/pulse2/flash-imaging.md b/docs/reference/pulse2/flash-imaging.md similarity index 100% rename from docs/legacy/pulse2/flash-imaging.md rename to docs/reference/pulse2/flash-imaging.md diff --git a/docs/legacy/pulse2/history.md b/docs/reference/pulse2/history.md similarity index 100% rename from docs/legacy/pulse2/history.md rename to docs/reference/pulse2/history.md diff --git a/docs/legacy/pulse2/pulse2.md b/docs/reference/pulse2/pulse2.md similarity index 100% rename from docs/legacy/pulse2/pulse2.md rename to docs/reference/pulse2/pulse2.md diff --git a/docs/legacy/pulse2/reliable-transport.md b/docs/reference/pulse2/reliable-transport.md similarity index 100% rename from docs/legacy/pulse2/reliable-transport.md rename to docs/reference/pulse2/reliable-transport.md From aba2c8daef2028d2dd6d45416a4f435f760104ec Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Mon, 20 Jul 2026 21:45:07 +0200 Subject: [PATCH 19/85] docs: drop remaining legacy files Remove the five files not worth promoting: battery_state.dot describes a ten-state charge state machine that no longer exists (the current battery_state.c has three connection states), legacy_flash_imaging.txt is self-declared obsolete and superseded by PULSE flash imaging, docstring-help.md points at paths that moved to sdk/docs/ years ago, tasks.txt predates the current PebbleTask_* naming and cites removed APIs, and porting-bluetooth.md documents the bt_driver layer that is slated for removal. With the legacy directory gone, drop it from the Sphinx exclude list. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- docs/conf.py | 2 +- docs/legacy/battery_state.dot | 65 ---------- docs/legacy/docstring-help.md | 11 -- docs/legacy/legacy_flash_imaging.txt | 85 ------------- docs/legacy/porting-bluetooth.md | 179 --------------------------- docs/legacy/tasks.txt | 37 ------ 6 files changed, 1 insertion(+), 378 deletions(-) delete mode 100644 docs/legacy/battery_state.dot delete mode 100644 docs/legacy/docstring-help.md delete mode 100644 docs/legacy/legacy_flash_imaging.txt delete mode 100644 docs/legacy/porting-bluetooth.md delete mode 100644 docs/legacy/tasks.txt diff --git a/docs/conf.py b/docs/conf.py index d68b29fccf..014ab1abc4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -22,7 +22,7 @@ "sphinx_design", ] -exclude_patterns = ["_build", "legacy", "Thumbs.db", ".DS_Store"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] nitpicky = True diff --git a/docs/legacy/battery_state.dot b/docs/legacy/battery_state.dot deleted file mode 100644 index 1b905732bb..0000000000 --- a/docs/legacy/battery_state.dot +++ /dev/null @@ -1,65 +0,0 @@ -digraph G { - compound=true; - Initialized [label=<Initialized (0)
q is unknown>]; - PreStandby [label=<PreStandby (8)
q < 2 mAh>]; - Standby [label=<Standby (9)
q < 2 mAh (unless manually entered)>]; - - /* Charging flow */ - subgraph cluster0 { - {rank=same; - FullPlugged [label=<FullPlugged (4)
q ~= 130mAh>, group="charging"]; - O1[style=invis]; - } - {rank=same; - HighCharging [label=<HighCharging (5)
25 mAh <= q < 130 mAh>, group="charging"]; - O2[style=invis]; - } - {rank=same; - LowCharging [label=<LowCharging (6)
5 mAh <= q < 25 mAh>, group="charging"]; - O3[style=invis]; - } - {rank=same; - CriticalCharging [label=<CriticalCharging (7)
q < 5 mAh>, group="charging"]; - O4[style=invis]; - } - - CriticalCharging -> LowCharging [label=">3.2V", constraint=false, weight=100]; - LowCharging -> HighCharging [label=">3.8V", constraint=false, weight=100]; - HighCharging -> FullPlugged [color=green, constraint=false, weight=100]; - - edge[style=invis]; - O1->O2->O3->O4; - - color=blue; - } - - subgraph cluster1 { - FullDischarging [label=<FullDischarging (1)
q > 30mAh (~125h)>, group="discharging"]; - LowDischarging [label=<LowDischarging (2)
5 mAh <= q < 30mAh (~31h)>, group="discharging"]; - CriticalDischarging [label=<CriticalDischarging (3)
2 mAh <= q < 5 mAh (~3h)>, group="discharging"]; - - FullDischarging -> LowDischarging [label="<=3.7V"]; - LowDischarging -> CriticalDischarging [label="<=3.3V"]; - CriticalDischarging -> PreStandby [label="<=3.1V"]; - - color=red; - } - - Initialized -> FullDischarging [color=red, lhead=cluster1]; - Initialized -> FullPlugged [color=blue, lhead=cluster0, constraint=false]; - - - FullPlugged -> FullDischarging [color=red] - CriticalCharging -> PreStandby [color=red, weight=0.1]; - HighCharging -> FullDischarging [color=red, constraint=false, weight=0.1]; - LowCharging -> FullDischarging [color=red, constraint=false, weight=0.1]; - - FullDischarging -> LowCharging [color=blue, weight=0.01]; - FullDischarging -> HighCharging [color=blue, constraint=false, weight=0.1]; - LowDischarging -> LowCharging [color=blue, constraint=false, weight=0.1]; - CriticalDischarging -> LowCharging [color=blue, constraint=false, weight=0.1]; - - - PreStandby -> CriticalCharging [color=blue, weight=0.1]; - PreStandby -> Standby [label="30s timeout", weight=0.1]; -} diff --git a/docs/legacy/docstring-help.md b/docs/legacy/docstring-help.md deleted file mode 100644 index 91705e9d3c..0000000000 --- a/docs/legacy/docstring-help.md +++ /dev/null @@ -1,11 +0,0 @@ -Doxygen pro tips ---- - -- Define top-level groups and other doxygen constructs in `docs/common.dox`. -- The main page can be found in `docs/mainpage_sdk.dox` -- Use \ref to create a cross reference in the documentation to another group, function, struct, or any kind of symbol, for example: `Use \ref app_event_loop() to do awesome shit.` will create a clickable link to the documentation of app_event_loop. Don't forget to add the () parens if the symbol is a function! Using angle brackets like doesn't seem to work reliably, nor does the automatic detection of symbols. -- Use the directive `@internal` to indicate that a piece of documentation is internal and should not be included in the public SDK documentation. You can add the @internal halfway, so that the first part of your docstrings will be included in the public SDK documentation, and the part after the @internal directive will also get included in our internal docs. -- Use `@param param_name Description of param` to document a function parameter. -- Use `@return Description of return value` to document the return value of a function. -- If you need to add a file or directory that doxygen should index, add its path to `INPUT` in the Doxyfile-SDK configuration file. -- If you want to make a cross-reference to an external doc page (the conceptual pages on developer.getpebble.com), create an .html file in /docs/external_refs, containing only a link to the page. Then use `\htmlinclude my_ref.html` to include that link in the docs. This extra level of indirection will make it easy to relocate external pages later on. diff --git a/docs/legacy/legacy_flash_imaging.txt b/docs/legacy/legacy_flash_imaging.txt deleted file mode 100644 index 17d6f6466c..0000000000 --- a/docs/legacy/legacy_flash_imaging.txt +++ /dev/null @@ -1,85 +0,0 @@ -SPI Flash Imaging Using The Serial Console -========================================== - -NOTE: This document describes the original method of flash imaging -over the serial console. It is no longer used and has been superseded by -newer, faster methods. - -By default the serial console is in logging mode, where log messages -are echoed to the screen as they are issued. To enter the serial -prompt, send a CTRL-C character to the serial console. The prompt -looks like a single right angle bracket ('>'). Commands may be typed -at this prompt and executed using the enter key. - -There are several commands available that can be used to manipulate -the SPI flash contents. - -dump flash
-============================= - -This command will dump a section of SPI flash. The address must be specified -in hex with a leading '0x'. The length is in bytes. - -Ex: - ->dump flash 0x200000 128 -[00:26:38.263] ../src/core/console/prompt.c:115> Data at address 0x200000 -[00:26:38.271] ../src/core/util/hexdump.c:11> 0000 0c 00 00 00 74 bf 03 00 32 9a 8a 4b 90 81 00 20 ....t... 2..K... -[00:26:38.283] ../src/core/util/hexdump.c:11> 0010 2d a0 01 08 7d a0 01 08 19 93 01 08 7d a0 01 08 -...}... ....}... -[00:26:38.294] ../src/core/util/hexdump.c:11> 0020 7d a0 01 08 7d a0 01 08 00 00 00 00 00 00 00 00 }...}... ........ -[00:26:38.307] ../src/core/util/hexdump.c:11> 0030 00 00 00 00 00 00 00 00 01 8a 01 08 7d a0 01 08 ........ ....}... -[00:26:38.319] ../src/core/util/hexdump.c:11> 0040 00 00 00 00 9d 8a 01 08 d9 8a 01 08 7d a0 01 08 ........ ....}... -[00:26:38.332] ../src/core/util/hexdump.c:11> 0050 7d a0 01 08 7d a0 01 08 7d c9 01 08 7d a0 01 08 }...}... }...}... -[00:26:38.343] ../src/core/util/hexdump.c:11> 0060 7d a0 01 08 29 59 01 08 3b 59 01 08 4d 59 01 08 }...)Y.. ;Y..MY.. -[00:26:38.355] ../src/core/util/hexdump.c:11> 0070 5f 59 01 08 7d a0 01 08 7d a0 01 08 7d a0 01 08 _Y..}... }...}... -> - -erase flash
-============================== - -This command will erase a section of SPI flash in 64k chunks. The address must be -specified in hex with a leading '0x'. The address must be 64k aligned. The length -is in bytes, and will be rounded up to the next 64k boundary. 'OK' will be echoed to -the console once the erase operation is complete. - -Ex: - ->erase flash 0x0 128 -Erasing 64k flash sectors starting at address 0x0 for 128 bytes (rounded up to 65536 bytes) -OK -> - -write flash
-===================== - -This command allows a user to write bytes to SPI flash. Please ensure -the region being written to has already been erased. The address must -be specified in hex with a leading '0x'. - -Bytes must be written using base64 encoding. The base64 characters are -not echoed back to the console as they are written. Bytes are written -to flash in chunks of 1024 base64 characters, corresponding to 768 -decoded bytes. The watch will echo a '#' character to acknowledge -receipt of a chunk, followed by echoing 'OK' when the watch is ready -to receive the next chunk. The end of the final chunk is indicated by -sending a CTRL-D character (EOF). The current chunk will be flushed to -SPI flash upon receiving an EOF character. Remember to pad the final -chunk with '=' characters if it's not a multiple of 3 bytes, as per -the base64 encoding standard. To exit the 'write flash' mode without -flushing the current chunk, enter a CTRL-C character. - -If a chunk is malformed due to invalid characters or incorrect -padding, 'Decoding Error' will be printed to the serial port and the -normal serial prompt will return. Note that any previous chunks that -were well formed have already been written to SPI flash. - -Ex: - ->write flash 0x0 -Flash imaging mode, CTRL-D to stop -#OK -> - -(NB: Your base64 data is not echoed back when writing to flash. The #OK will show up -when a chunk is complete or CTRL-D is used.) - diff --git a/docs/legacy/porting-bluetooth.md b/docs/legacy/porting-bluetooth.md deleted file mode 100644 index 1a953587f5..0000000000 --- a/docs/legacy/porting-bluetooth.md +++ /dev/null @@ -1,179 +0,0 @@ -# Porting a new Bluetooth stack into PebbleOS - -## Build notes - -Unlike many other things in the build, a platform textually selects a -Bluetooth controller using the `waf` environment variable, -`conf.env.bt_controller`. This ends up pulling in a whole sublibrary -(essentially), in `src/bluetooth-fw`. This is somewhat cleaner than the -rest of the driver stack, but it is a change from what you might expect from -the respect of PebbleOS! - -## API surface - -A Bluetooth driver exports 70-ish APIs, and has a handful of callbacks that -it needs to trigger at appropriate times. I group these below in terms of -API families that one should implement, roughly in order of how critical it -is to implement them to get anything at all working. - -### Power and identity - -* bt_driver_init -* bt_driver_start -* bt_driver_stop -* bt_driver_power_down_controller_on_boot -* bt_driver_id_set_local_device_name -* bt_driver_id_copy_local_identity_address -* bt_driver_id_copy_chip_info_string -* bt_driver_id_generate_private_resolvable_address -* bt_driver_supports_bt_classic -* bt_driver_set_local_address - -* bt_driver_comm_schedule_send_next_job -- you probably just want to have - these run on KernelMain, unless you have your own thread that sends should - happen from. copy from qemu -* bt_driver_comm_is_current_task_send_next_task - -### Advertising - -* bt_driver_advert_advertising_disable -* bt_driver_advert_client_get_tx_power -* bt_driver_advert_set_advertising_data -* bt_driver_advert_advertising_enable - - -### GAP - -* bt_driver_gap_le_disconnect -* bt_driver_gap_le_device_name_request -* bt_driver_gap_le_device_name_request_all -* bt_driver_le_connection_parameter_update -* bt_driver_handle_le_connection_handle_update_address_and_irk -* bt_driver_handle_peer_version_info_event -* bt_driver_handle_le_connection_complete_event -* bt_driver_handle_le_disconnection_complete_event -* bt_driver_handle_le_encryption_change_event -* bt_driver_handle_le_conn_params_update_event - - -### Pairing and pairing service - -Bond database in-memory is managed by the controller. Bond database in -flash is managed by the OS. - -* bt_driver_cb_pairing_confirm_handle_request -- a GAP LE connection wants - to bond, post message to UI to say so -* bt_driver_pairing_confirm -- UI agrees to do it -* bt_driver_cb_pairing_confirm_handle_completed -- bond is complete, from - BLE controller -* bt_driver_handle_host_added_bonding -- OS has booted, add bond from - in-flash database to in-controller database (make sure to kill these in - bt_driver_stop when reinitting) -* bt_driver_handle_host_removed_bonding -- user requested bond remove from - UI -* bt_driver_cb_handle_create_bonding -- controller has exchanged keys and - would like OS to store a bond in flash - -### Pebble Pairing Service - -Pebble Pairing Service is an internal GATT service managed not by the OS but -by the controller (done in firmware on Dialog, obviously done as a Bluetopia -client on TI). Implicit in this API is an init that actually sets up the -Pebble Pairing Service, called within BLE stack! - -See at least one implementation: -https://github.com/pebble-dev/RebbleOS/blob/master/hw/drivers/nrf52_bluetooth/nrf52_bluetooth_ppogatt.c#L352-L417 - -* bt_driver_pebble_pairing_service_handle_status_change -* bt_driver_cb_pebble_pairing_service_handle_connection_parameter_write -* bt_driver_cb_pebble_pairing_service_handle_ios_app_termination_detected - -### GATT server / client shim - -* bt_driver_gatt_respond_read_subscription -* bt_driver_gatt_send_changed_indication -* bt_driver_gatt_start_discovery_range -* bt_driver_gatt_stop_discovery -* bt_driver_gatt_handle_discovery_abandoned -* bt_driver_cb_gatt_client_discovery_handle_indication -* bt_driver_cb_gatt_client_discovery_complete -* bt_driver_cb_gatt_client_operations_handle_response -* bt_driver_cb_gatt_service_changed_server_confirmation -* bt_driver_cb_gatt_service_changed_server_subscribe -* bt_driver_cb_gatt_service_changed_server_read_subscription -* bt_driver_cb_gatt_client_discovery_handle_service_changed -* bt_driver_gatt_write_without_response -* bt_driver_gatt_write -* bt_driver_gatt_read -* bt_driver_cb_gatt_handle_connect -* bt_driver_cb_gatt_handle_disconnect -* bt_driver_cb_gatt_handle_mtu_update -* bt_driver_cb_gatt_handle_notification -* bt_driver_cb_gatt_handle_indication -* bt_driver_cb_gatt_handle_buffer_empty - -### Heart rate monitor - -The controller implements the GATT functionality for the heart rate monitor, -rather than the OS. Not implemented on TI. - -* bt_driver_is_hrm_service_supported -* bt_driver_cb_hrm_service_update_subscription -* bt_driver_hrm_service_handle_measurement - -### Scanning - -Scanning was only used by APIs that never became public. - -* bt_driver_start_le_scan -* bt_driver_stop_le_scan -* bt_driver_cb_le_scan_handle_report - -### Bluetooth Classic - -These apply only to Bluetooth Classic and are no-ops on BLE. - -* bt_driver_classic_disconnect -* bt_driver_classic_is_connected -* bt_driver_classic_copy_connected_address -* bt_driver_classic_copy_connected_device_name -* bt_driver_classic_update_connectability -* bt_driver_reconnect_pause -* bt_driver_reconnect_resume -* bt_driver_reconnect_try_now -* bt_driver_reconnect_reset_interval -* bt_driver_reconnect_notify_platform_bitfield -* bt_driver_le_pairability_set_enabled -- not implemented even on Dialog -* bt_driver_classic_pairability_set_enabled -* sys_app_comm_get_sniff_interval - -### Analytics - -* bt_driver_analytics_get_connection_quality -* bt_driver_analytics_collect_ble_parameters -* bt_driver_analytics_external_collect_chip_specific_parameters -* bt_driver_analytics_external_collect_bt_chip_heartbeat -* bt_driver_analytics_get_conn_event_stats -* bluetooth_analytics_handle_ble_pairing_request (callback) - - -### Factory test mode / debugging. - -Implemented both by classic and BLE. Used for factory test. Probably -needs to exist for production test in the future, but - -* bt_driver_test_selftest -- implemented -* hc_endpoint_logging_set_level -- not implemented on TI -* hc_endpoint_logging_get_level -- not implemented on TI -* bt_driver_core_dump -- not implemented on TI -* bt_driver_test_start -* bt_driver_test_enter_hci_passthrough -* bt_driver_test_handle_hci_passthrough_character -* bt_driver_test_enter_rf_test_mode -* bt_driver_test_set_spoof_address -* bt_driver_test_stop - -Some drivers also have: - -* bt_driver_start_unmodulated_tx -* bt_driver_stop_unmodulated_tx diff --git a/docs/legacy/tasks.txt b/docs/legacy/tasks.txt deleted file mode 100644 index 2b5ed8b536..0000000000 --- a/docs/legacy/tasks.txt +++ /dev/null @@ -1,37 +0,0 @@ -FreeRTOS lets us create tasks, which are independant threads of execution. We create a few ourselves, and more are created internally by FreeRTOS. We have pre-emption enabled in our FreeRTOS configuration, so we must be mindful of which other tasks are mucking with the same data. This document describes the tasks that exist in our system. - -FreeRTOS Tasks -============== -Tasks defined internally by FreeRTOS. - -"Tmr Svc" - The timer task --------------------------- -Timers that are registered using our timer infrastructure are executed on this task. This is a FreeRTOS subsystem that we've wrapped with the goodies in fw/timers.h. - -"IDLE" - The idle task ----------------------- -This is a special task used by the FreeRTOS scheduler. It's defined at it's own priority level which is at the lowest priority. If no other task is ready to run, either due to waiting on a semaphore or waiting using vTaskDelay (or something like that), the idle task is chosen to run instead. - -We have modified FreeRTOS such that if we're in the idle task, we enter a lower power mode, either sleep or stop. Stop mode is special in that peripheral clocks are shut down when we go into stop and are not automatically turned back on when we leave stop mode. This means we have to go through and turn them all back on. This is what the `register_stop_mode_resume_callback` function does. It allows individual drivers to register callbacks that are called when we leave stop from the idle thread. This comes with a caveat though. Since the idle thread only ever runs when there's nothing else to run, the scheduler assumes that there is always a task to run. This means that if the idle task is stopped or delayed for any reason, the scheduler will explode. Therefore you are not permitted to do operations that may stop the task's execution from within the resume callback. - -Pebble Tasks -============ - -"main" - The main task ----------------------- -The first task in our system. Runs the all the driver initialization code, and then gets taken over by the main launcher loop. The launcher event queue is then serviced forever in a loop. - -"system_task" - The system task -------------------------------- -A lower priority task that services callbacks from a worker queue. If you are doing something that may take more than a few milliseconds, it makes sense to delegate it to this queue. For example, flash writes and reads during firmware updates are done on this task. - -"app" - The application task ----------------------------- -This task is created for the currently running app. No task is created for the launcher "app", as it's not a real app and just uses the main task. This task's lifetime is limited to the lifetime of the app. - -??? - -Open Questions -============== - -Which tasks are allowed to manipulate the window state? What if the launcher wants to push a notification window at the same time as an app pushes it's own window? From 9c4f47df05a9f1f92930283b7e626264fb85d875 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 20 Jul 2026 21:50:45 +0200 Subject: [PATCH 20/85] fw: remove unused bootloader_symbols.json Signed-off-by: Gerard Marull-Paretas --- src/fw/bootloader_symbols.json | 117 --------------------------------- 1 file changed, 117 deletions(-) delete mode 100644 src/fw/bootloader_symbols.json diff --git a/src/fw/bootloader_symbols.json b/src/fw/bootloader_symbols.json deleted file mode 100644 index 51d7531df9..0000000000 --- a/src/fw/bootloader_symbols.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "_comment": [ "Behold, these symbols are provided by the bootloader in tintin firmware builds. ", - "These symbols are generated into the ldscript so the linker chooses these ", - "addresses over ones that are provided by the firmware object files." ], - "bootloader_symbols": { - "memcpy": "0x08000048", - "memset": "0x0800005a", - "memchr": "0x0800006a", - "strcat": "0x08000086", - "strchr": "0x0800009c", - "strcmp": "0x080000b2", - "strcpy": "0x080000c8", - "strlen": "0x080000e0", - "strnlen": "0x080000ee", - "strspn": "0x08000100", - "strtol": "0x0800011c", - "atoi": "0x08000140", - "atol": "0x08000168", - "puts": "0x08000190", - "exit": "0x08000194", - "strstr": "0x08000196", - "strcspn": "0x080001c2", - "strncpy": "0x080001e0", - "strncmp": "0x08000214", - "strrchr": "0x08000232", - "strncat": "0x08000252", - "memmove": "0x0800027e", - "memcmp": "0x080002a2", - "vsnprintf": "0x080002bc", - "snprintf": "0x08000730", - "vsprintf": "0x0800074a", - "sprintf": "0x0800075c", - "setlocale": "0x08000776", - "RCC_ClearFlag": "0x0800077c", - "TIM_Cmd": "0x0800078c", - "CRC_ResetDR": "0x08000810", - "CRC_CalcCRC": "0x0800081c", - "CRC_CalcBlockCRC": "0x08000828", - "CRC_GetCRC": "0x08000844", - "DBGMCU_APB1PeriphConfig": "0x08000850", - "FLASH_Unlock": "0x08000868", - "FLASH_Lock": "0x08000884", - "FLASH_ClearFlag": "0x08000894", - "FLASH_GetStatus": "0x080008a0", - "FLASH_EraseSector": "0x080008d4", - "FLASH_ProgramByte": "0x08000944", - "IWDG_WriteAccessCmd": "0x0800097c", - "IWDG_SetPrescaler": "0x08000988", - "IWDG_SetReload": "0x08000994", - "IWDG_ReloadCounter": "0x080009a0", - "IWDG_Enable": "0x080009b0", - "PWR_BackupAccessCmd": "0x080009c0", - "PWR_WakeUpPinCmd": "0x080009cc", - "PWR_GetFlagStatus": "0x080009d8", - "PWR_ClearFlag": "0x080009ec", - "RCC_DeInit": "0x080009fc", - "RCC_LSEConfig": "0x08000a30", - "RCC_GetClocksFreq": "0x08000a50", - "RCC_RTCCLKConfig": "0x08000ad8", - "RCC_RTCCLKCmd": "0x08000b08", - "RCC_AHB1PeriphClockCmd": "0x08000b14", - "RCC_APB1PeriphClockCmd": "0x08000b2c", - "RCC_APB2PeriphClockCmd": "0x08000b44", - "RCC_AHB1PeriphResetCmd": "0x08000b5c", - "RCC_AHB2PeriphResetCmd": "0x08000b74", - "RCC_AHB3PeriphResetCmd": "0x08000b8c", - "RCC_APB1PeriphResetCmd": "0x08000ba4", - "RCC_APB2PeriphResetCmd": "0x08000bbc", - "RCC_GetFlagStatus": "0x08000bd4", - "RTC_EnterInitMode": "0x08000bfc", - "RTC_ExitInitMode": "0x08000c3c", - "RTC_Init": "0x08000c4c", - "RTC_WaitForSynchro": "0x08000c90", - "RTC_SetTime": "0x08000cd4", - "RTC_GetTime": "0x08000d64", - "RTC_SetDate": "0x08000da8", - "RTC_GetDate": "0x08000e2c", - "RTC_TimeStampCmd": "0x08000e6c", - "RTC_WriteBackupRegister": "0x08000e94", - "RTC_ReadBackupRegister": "0x08000eb4", - "RTC_TimeStampPinSelection": "0x08000ed4", - "RTC_ITConfig": "0x08000eec", - "RTC_GetFlagStatus": "0x08000f28", - "RTC_ClearFlag": "0x08000f44", - "SPI_I2S_DeInit": "0x08000f60", - "USART_Init": "0x08000fbc", - "FLASH_WaitForLastOperation": "0x0800106c", - "GPIO_Init": "0x0800108e", - "GPIO_StructInit": "0x0800110e", - "GPIO_ReadInputDataBit": "0x08001120", - "GPIO_SetBits": "0x0800112c", - "GPIO_ResetBits": "0x08001130", - "GPIO_WriteBit": "0x08001134", - "GPIO_PinAFConfig": "0x0800113e", - "RTC_ByteToBcd2": "0x08001162", - "RTC_Bcd2ToByte": "0x0800117c", - "RTC_StructInit": "0x0800118e", - "RTC_TimeStructInit": "0x0800119a", - "RTC_DateStructInit": "0x080011a6", - "SPI_Init": "0x080011b4", - "SPI_Cmd": "0x080011f2", - "SPI_I2S_ReceiveData": "0x0800120a", - "SPI_I2S_SendData": "0x08001210", - "SPI_I2S_GetFlagStatus": "0x08001214", - "USART_Cmd": "0x08001220", - "USART_SendData": "0x08001238", - "USART_GetFlagStatus": "0x08001240", - "__ctype_data": "0x0800124c", - "__aeabi_uldivmod": "0x0800134c", - "__gnu_ldivmod_helper": "0x08001378", - "__gnu_uldivmod_helper": "0x080013a8", - "__aeabi_idiv0": "0x080013d8", - "__aeabi_ldiv0": "0x080013d8", - "__divdi3": "0x080013dc", - "__udivdi3": "0x0800167c" - } -} From 9792a9696150ef0c7203206a24490dc7dbf491b3 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 20 Jul 2026 21:52:48 +0200 Subject: [PATCH 21/85] lib/c/pebble: move newlib guard from fw folder Signed-off-by: Gerard Marull-Paretas --- {src/fw => lib/c/pebble}/newlib_canary.c | 2 -- 1 file changed, 2 deletions(-) rename {src/fw => lib/c/pebble}/newlib_canary.c (91%) diff --git a/src/fw/newlib_canary.c b/lib/c/pebble/newlib_canary.c similarity index 91% rename from src/fw/newlib_canary.c rename to lib/c/pebble/newlib_canary.c index 8b9d0ab155..2e13009dd9 100644 --- a/src/fw/newlib_canary.c +++ b/lib/c/pebble/newlib_canary.c @@ -4,10 +4,8 @@ // Safety check to ensure the Pebble libc build isn't accidentally pulling in // newlib headers. Only meaningful when the in-tree Pebble libc is selected; // other libcs (newlib, picolibc) legitimately use the toolchain headers. -#if defined(CONFIG_LIBC_PEBBLE) #include <_ansi.h> #if defined(__NEWLIB_H__) #error "Newlib headers being included rather than pblibc" #endif -#endif From 8194356993bb472ead00e30f3c608f6cb959eb7c Mon Sep 17 00:00:00 2001 From: Eric Migicovsky Date: Mon, 20 Jul 2026 16:09:54 -0700 Subject: [PATCH 22/85] fw/shell: discard synced watchface fit pref on unsupported boards The timelineQuickViewWatchfaceFit pref can be set on a watch that supports it (obelix), sync to the phone, and then be pushed to a watch that does not (getafix): the settings BlobDB whitelist accepted the key on every board, so the record was stored even though the board has no watchface fit support. Reject the key at the BlobDB whitelist on boards without TIMELINE_PEEK_WATCHFACE_FIT_SUPPORTED, and delete any record already stored by earlier firmware during shell_prefs_init, so upgrading to this version discards the stale pref. Verified on qemu_gabbro: a record inserted by the previous firmware is discarded at first boot ("Discarding unsupported pref"), and new phone-side inserts are rejected ("Rejecting non-whitelisted setting"). Fixes FIRM-3391 Co-authored-by: Claude Fable 5 Signed-off-by: Eric Migicovsky --- src/fw/services/blob_db/settings_blob_db.c | 3 +++ src/fw/shell/normal/prefs.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/fw/services/blob_db/settings_blob_db.c b/src/fw/services/blob_db/settings_blob_db.c index d7a686ed80..9b109c439d 100644 --- a/src/fw/services/blob_db/settings_blob_db.c +++ b/src/fw/services/blob_db/settings_blob_db.c @@ -10,6 +10,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/notifications/alerts_preferences_private.h" #include "pbl/services/settings/settings_file.h" +#include "shell/prefs.h" #include "shell/prefs_private.h" #include "system/logging.h" #include "system/passert.h" @@ -94,7 +95,9 @@ static const char *s_syncable_settings[] = { // Timeline preferences "timelineQuickViewEnabled", "timelineQuickViewBeforeTimeMin", +#if TIMELINE_PEEK_WATCHFACE_FIT_SUPPORTED "timelineQuickViewWatchfaceFit", +#endif "timelineSettingsOpened", // Activity preferences diff --git a/src/fw/shell/normal/prefs.c b/src/fw/shell/normal/prefs.c index cf7598a091..d269222577 100644 --- a/src/fw/shell/normal/prefs.c +++ b/src/fw/shell/normal/prefs.c @@ -955,6 +955,21 @@ void shell_prefs_init(void) { prv_convert_deprecated_dynamic_intensity_key(&file); #endif +#if !TIMELINE_PEEK_WATCHFACE_FIT_SUPPORTED + { + // Discard any watchface-fit pref synced from a watch model that supports it. + // Check both key forms: locally-written keys include the null terminator, + // phone-originated BlobDB writes may not. + static const char *const fit_key = "timelineQuickViewWatchfaceFit"; + for (size_t key_len = strlen(fit_key); key_len <= strlen(fit_key) + 1; key_len++) { + if (settings_file_get_len(&file, fit_key, key_len) > 0) { + PBL_LOG_INFO("Discarding unsupported pref: %s", fit_key); + settings_file_delete(&file, fit_key, key_len); + } + } + } +#endif + // Init state for each pref from our backing store uint32_t num_entries = ARRAY_LENGTH(s_prefs_table); const PrefsTableEntry *entry = s_prefs_table; From f9b383ad89907f1e30522e6ef42676adb8eb054b Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Fri, 17 Jul 2026 11:59:30 +0200 Subject: [PATCH 23/85] ci: suppress AWS and Memfault uploads outside public repository Gate the release workflow's AWS log hash dictionary upload, Memfault symbol upload and Memfault release deployment on the public coredevices/PebbleOS repository, matching the existing condition used by the build workflows. This prevents CI in private forks from attempting these uploads. Co-Authored-By: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- .github/workflows/release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8ba9ec2727..cc410b7e4c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -74,6 +74,7 @@ jobs: echo "BUILD_ID=$(readelf -n build/pebbleos.elf | sed -n -e 's/^.*Build ID: //p')" >> "$GITHUB_OUTPUT" - name: Upload PRF log hash dictionary + if: ${{ github.repository == 'coredevices/PebbleOS' }} env: AWS_ACCESS_KEY_ID: ${{ secrets.LOG_HASH_BUCKET_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.LOG_HASH_BUCKET_SECRET }} @@ -209,6 +210,7 @@ jobs: path: artifacts - name: Upload symbols to Memfault + if: ${{ github.repository == 'coredevices/PebbleOS' }} run: | pip install memfault-cli==${MEMFAULT_CLI_VERSION} @@ -256,6 +258,7 @@ jobs: files: artifacts-*/* - name: Deploy Memfault release + if: ${{ github.repository == 'coredevices/PebbleOS' }} run: | pip install memfault-cli==${MEMFAULT_CLI_VERSION} From bd84cca7f70f585adb433dcfe5f05f0f875966d3 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Fri, 17 Jul 2026 12:20:05 +0200 Subject: [PATCH 24/85] waftools/gitinfo: accept four-component release tags Tags like v4.9.142.1 were rejected by the tag validation regex, aborting release builds (see failed Release run for tag v4.9.142.1). Allow an optional fourth numeric component in the tag. It is exposed through TAG and folded into PATCH_VERBOSE_STRING (e.g. 142.1-0), while MAJOR/MINOR/PATCH and MAJOR_MINOR_PATCH_STRING keep their three-component form. Parsing of all previously accepted tag forms is unchanged. Co-Authored-By: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- tools/waf/gitinfo.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/waf/gitinfo.py b/tools/waf/gitinfo.py index c68306078b..eb9465cf4f 100644 --- a/tools/waf/gitinfo.py +++ b/tools/waf/gitinfo.py @@ -25,19 +25,25 @@ def get_git_revision(ctx): # Validate that git tag follows the required form: # See https://github.com/pebble/tintin/wiki/Firmware,-PRF-&-Bootloader-Versions - # Note: version_regex.groups() returns sequence ('0', '0', '0', 'suffix'): - version_regex = re.search(r"^v(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:(?:-)(.+))?$", tag) + # An optional fourth numeric component (e.g. v4.9.142.1) is accepted for + # point releases; it is only exposed through TAG and PATCH_VERBOSE_STRING. + # Note: version_regex.groups() returns sequence ('0', '0', '0', '0', 'suffix'): + version_regex = re.search( + r"^v(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.(\d+))?(?:(?:-)(.+))?$", tag + ) if not version_regex: raise ValueError(f"Invalid tag: {tag}") # Get version numbers from version_regex.groups() sequence and replace None values with 0 - # e.g. v2-beta11 => ('2', None, None, 'beta11') => ('2', '0', '0') + # e.g. v2-beta11 => ('2', None, None, None, 'beta11') => ('2', '0', '0') version = [x if x else "0" for x in version_regex.groups()] # Used for pebble_pipeline payload, generate a string that contains everything after minor. # Force include patch as 0 if it doesn't exist. patch_verbose = str(version[2]) - str_after_patch = version[3] + if version_regex.group(4): + patch_verbose += "." + version[3] + str_after_patch = version[4] if str_after_patch: patch_verbose += "-" + str_after_patch From 289bc010ec111733786ef9aaaeea733bad0ab2ea Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 20 Jul 2026 22:28:46 +0200 Subject: [PATCH 25/85] subsys: introduce subsystem concept with logging as first subsystem Introduce a Zephyr-like top-level subsys/ folder for OS subsystems. Move the core logging implementation (log formatting/dispatch and the PULSE logging backend) out of src/fw/kernel into subsys/logging, together with its Kconfig menu and the per-module log level template. The subsys/ directory is exported as an include path, so subsystem headers are included as logging/
.h. The moddable submodule needs a matching include path update. Co-Authored-By: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- AGENTS.md | 1 + Kconfig | 1 + src/bluetooth-fw/Kconfig | 2 +- src/fw/Kconfig | 74 ------------------ src/fw/applib/app_logging.h | 2 +- src/fw/applib/logging.c | 2 +- src/fw/applib/moddable/moddable.c | 2 +- src/fw/console/prompt_commands.c | 2 +- src/fw/debug/app_logging.c | 2 +- src/fw/debug/debug.c | 2 +- src/fw/drivers/ambient/Kconfig | 2 +- src/fw/drivers/backlight/Kconfig | 2 +- src/fw/drivers/display/Kconfig | 2 +- src/fw/drivers/exti/Kconfig | 2 +- src/fw/drivers/flash/Kconfig | 2 +- src/fw/drivers/hrm/Kconfig | 2 +- src/fw/drivers/i2c/Kconfig | 2 +- src/fw/drivers/imu/Kconfig | 2 +- src/fw/drivers/mic/Kconfig | 2 +- src/fw/drivers/pmic/Kconfig | 2 +- src/fw/drivers/pressure/Kconfig | 2 +- src/fw/drivers/rng/Kconfig | 2 +- src/fw/drivers/rtc/Kconfig | 2 +- src/fw/drivers/speaker/Kconfig | 2 +- src/fw/drivers/touch/Kconfig | 2 +- src/fw/drivers/uart/Kconfig | 2 +- src/fw/drivers/vibe/Kconfig | 2 +- src/fw/hardfault_handler.c | 2 +- src/fw/kernel/core_dump.c | 4 +- src/fw/kernel/fault_handling.c | 2 +- src/fw/kernel/kernel_applib_state.h | 2 +- src/fw/kernel/memory_layout.c | 2 +- src/fw/main.c | 2 +- src/fw/process_state/app_state/app_state.h | 2 +- .../process_state/worker_state/worker_state.h | 2 +- src/fw/services/accel_manager/Kconfig | 2 +- src/fw/services/activity/Kconfig | 2 +- src/fw/services/alarms/Kconfig | 2 +- src/fw/services/analytics/Kconfig | 2 +- src/fw/services/app_cache/Kconfig | 2 +- src/fw/services/app_fetch_endpoint/Kconfig | 2 +- src/fw/services/app_inbox_service/Kconfig | 2 +- src/fw/services/app_message/Kconfig | 2 +- src/fw/services/app_order_endpoint/Kconfig | 2 +- src/fw/services/app_outbox_service/Kconfig | 2 +- src/fw/services/audio_endpoint/Kconfig | 2 +- src/fw/services/battery/Kconfig | 2 +- src/fw/services/blob_db/Kconfig | 2 +- src/fw/services/bluetooth/Kconfig | 2 +- src/fw/services/clock/Kconfig | 2 +- src/fw/services/comm_session/Kconfig | 2 +- src/fw/services/compositor/Kconfig | 2 +- src/fw/services/cron/Kconfig | 2 +- src/fw/services/data_logging/Kconfig | 2 +- src/fw/services/ecompass/Kconfig | 2 +- src/fw/services/event_service/Kconfig | 2 +- src/fw/services/evented_timer/Kconfig | 2 +- src/fw/services/filesystem/Kconfig | 2 +- src/fw/services/firmware_update/Kconfig | 2 +- src/fw/services/get_bytes/Kconfig | 2 +- src/fw/services/health_sync_endpoint/Kconfig | 2 +- src/fw/services/hrm/Kconfig | 2 +- src/fw/services/i18n/Kconfig | 2 +- src/fw/services/light/Kconfig | 2 +- src/fw/services/music/Kconfig | 2 +- src/fw/services/new_timer/Kconfig | 2 +- src/fw/services/notifications/Kconfig | 2 +- src/fw/services/persist/Kconfig | 2 +- src/fw/services/phone_call/Kconfig | 2 +- src/fw/services/phone_pp/Kconfig | 2 +- src/fw/services/ping/Kconfig | 2 +- src/fw/services/poll_remote/Kconfig | 2 +- src/fw/services/prf_update/Kconfig | 2 +- src/fw/services/process_management/Kconfig | 2 +- src/fw/services/protobuf_log/Kconfig | 2 +- src/fw/services/put_bytes/Kconfig | 2 +- src/fw/services/regular_timer/Kconfig | 2 +- src/fw/services/settings/Kconfig | 2 +- src/fw/services/shared_prf_storage/Kconfig | 2 +- src/fw/services/speaker/Kconfig | 2 +- src/fw/services/stationary/Kconfig | 2 +- src/fw/services/system_task/Kconfig | 2 +- src/fw/services/tick_timer/Kconfig | 2 +- src/fw/services/timeline/Kconfig | 2 +- src/fw/services/timezone_database/Kconfig | 2 +- src/fw/services/touch/Kconfig | 2 +- src/fw/services/vibe_pattern/Kconfig | 2 +- src/fw/services/vibes/Kconfig | 2 +- src/fw/services/voice/Kconfig | 2 +- src/fw/services/voice_endpoint/Kconfig | 2 +- src/fw/services/wakeup/Kconfig | 2 +- src/fw/services/weather/Kconfig | 2 +- src/fw/syscall/syscall.c | 2 +- src/fw/syscall/syscall.h | 2 +- src/fw/system/die.c | 4 +- subsys/Kconfig | 4 + subsys/logging/Kconfig | 76 +++++++++++++++++++ .../logging}/Kconfig.template.log_level | 2 +- {src/fw/kernel => subsys/logging}/logging.c | 4 +- .../logging}/logging_private.h | 0 .../kernel => subsys/logging}/pulse_logging.c | 2 +- .../kernel => subsys/logging}/pulse_logging.h | 0 subsys/logging/wscript_build | 10 +++ subsys/wscript_build | 8 ++ tests/fw/kernel/wscript_build | 5 -- .../logging}/test_pulse_logging.c | 2 +- tests/subsys/logging/wscript_build | 8 ++ tools/generate_native_sdk/parse_c_decl.py | 1 + tools/pdc2png/wscript_build | 1 + tools/waf/pebble_test.py | 1 + wscript | 3 + 111 files changed, 213 insertions(+), 178 deletions(-) create mode 100644 subsys/Kconfig create mode 100644 subsys/logging/Kconfig rename {src/fw => subsys/logging}/Kconfig.template.log_level (95%) rename {src/fw/kernel => subsys/logging}/logging.c (98%) rename {src/fw/kernel => subsys/logging}/logging_private.h (100%) rename {src/fw/kernel => subsys/logging}/pulse_logging.c (99%) rename {src/fw/kernel => subsys/logging}/pulse_logging.h (100%) create mode 100644 subsys/logging/wscript_build create mode 100644 subsys/wscript_build rename tests/{fw/kernel => subsys/logging}/test_pulse_logging.c (99%) create mode 100644 tests/subsys/logging/wscript_build diff --git a/AGENTS.md b/AGENTS.md index 42cdf0d1f1..90f31347aa 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,6 +8,7 @@ PebbleOS is the operating system running on Pebble smartwatches. - `resources`: firmware resources (icons, fonts, etc.) - `sdk`: application SDK generation files - `src`: firmware source +- `subsys`: OS subsystems, e.g. logging - `tests`: tests - `third_party`: third-party code in git submodules, also includes glue code - `tools`: a variety of tools or scripts used in multiple areas, from build diff --git a/Kconfig b/Kconfig index dba3690455..8bdcf816f0 100644 --- a/Kconfig +++ b/Kconfig @@ -282,5 +282,6 @@ config SCREEN_COLOR_DEPTH_BITS default 8 if SCREEN_COLOR_DEPTH_BITS_8 rsource "lib/c/Kconfig" +rsource "subsys/Kconfig" rsource "src/Kconfig" rsource "third_party/Kconfig" diff --git a/src/bluetooth-fw/Kconfig b/src/bluetooth-fw/Kconfig index bf35b94ac4..ee920dad98 100644 --- a/src/bluetooth-fw/Kconfig +++ b/src/bluetooth-fw/Kconfig @@ -26,7 +26,7 @@ endchoice module = BT module-str = Bluetooth -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" config GH3X2X_TUNING_SERVICE_ENABLED bool "GH3X2X tuning service" diff --git a/src/fw/Kconfig b/src/fw/Kconfig index 8a39a71be1..43d09c9877 100644 --- a/src/fw/Kconfig +++ b/src/fw/Kconfig @@ -71,80 +71,6 @@ config SHELL_SDK endchoice -menu "Logging" - -config LOG - bool "Logging" - default y - help - Build the PBL_LOG macros. Disable to save space. - -config LOG_HASHED - bool "Hashed logs" - default y - depends on LOG && !QEMU - help - Replace log format strings with hashes to save space. Disable - for human-readable logs. - -choice - prompt "Default log level" - default DEFAULT_LOG_LEVEL_INFO - -config DEFAULT_LOG_LEVEL_ERROR - bool "Error" - -config DEFAULT_LOG_LEVEL_WARNING - bool "Warning" - -config DEFAULT_LOG_LEVEL_INFO - bool "Info" - -config DEFAULT_LOG_LEVEL_DEBUG - bool "Debug" - -config DEFAULT_LOG_LEVEL_DEBUG_VERBOSE - bool "Debug verbose" - -endchoice - -choice - prompt "Flash log level" - default FLASH_LOG_LEVEL_INFO - -config FLASH_LOG_LEVEL_ERROR - bool "Error" - -config FLASH_LOG_LEVEL_WARNING - bool "Warning" - -config FLASH_LOG_LEVEL_INFO - bool "Info" - -config FLASH_LOG_LEVEL_DEBUG - bool "Debug" - -config FLASH_LOG_LEVEL_DEBUG_VERBOSE - bool "Debug verbose" - -endchoice - -config LOG_TASK_PREFIX - bool "Task prefix" - depends on LOG - help - Prefix log messages with the originating task identifier char - (uppercase when logged from privileged mode). - -config PULSE_EVERYWHERE - bool "PULSE everywhere" - default y if !RELEASE || MFG - help - Use the PULSE protocol for logs and the prompt. Disable to fall - back to legacy logs and prompt. - -endmenu - menu "Debug & instrumentation" config NO_WATCH_TIMEOUT diff --git a/src/fw/applib/app_logging.h b/src/fw/applib/app_logging.h index 0d590db4b1..70cb800327 100644 --- a/src/fw/applib/app_logging.h +++ b/src/fw/applib/app_logging.h @@ -11,7 +11,7 @@ #include "pbl/util/uuid.h" // FIXME PBL-1629: move needed declarations into applib -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "system/logging.h" #include diff --git a/src/fw/applib/logging.c b/src/fw/applib/logging.c index 0ef9c4a4b8..4c8959f037 100644 --- a/src/fw/applib/logging.c +++ b/src/fw/applib/logging.c @@ -4,7 +4,7 @@ #include "drivers/rtc.h" #include "syscall/syscall.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "kernel/kernel_applib_state.h" #include "process_state/app_state/app_state.h" diff --git a/src/fw/applib/moddable/moddable.c b/src/fw/applib/moddable/moddable.c index d404755ed2..09d1d1ece6 100644 --- a/src/fw/applib/moddable/moddable.c +++ b/src/fw/applib/moddable/moddable.c @@ -2,7 +2,7 @@ /* SPDX-FileCopyrightText: 2025-2026 Moddable Tech, Inc. */ /* SPDX-License-Identifier: Apache-2.0 */ #include "applib/app.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "pbl/services/evented_timer.h" #include "syscall/syscall_internal.h" #include "applib/app_logging.h" diff --git a/src/fw/console/prompt_commands.c b/src/fw/console/prompt_commands.c index 432800424d..47b83c65fc 100644 --- a/src/fw/console/prompt_commands.c +++ b/src/fw/console/prompt_commands.c @@ -15,7 +15,7 @@ #include "drivers/task_watchdog.h" #include "flash_region/flash_region.h" #include "kernel/event_loop.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "kernel/pbl_malloc.h" #include "kernel/pebble_tasks.h" #include "kernel/util/delay.h" diff --git a/src/fw/debug/app_logging.c b/src/fw/debug/app_logging.c index d1406b956c..57911a3109 100644 --- a/src/fw/debug/app_logging.c +++ b/src/fw/debug/app_logging.c @@ -7,7 +7,7 @@ #include -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "kernel/memory_layout.h" #include "kernel/util/stack_info.h" #include "pbl/services/comm_session/session.h" diff --git a/src/fw/debug/debug.c b/src/fw/debug/debug.c index 4c09dd0ab4..439050a563 100644 --- a/src/fw/debug/debug.c +++ b/src/fw/debug/debug.c @@ -10,7 +10,7 @@ #include "drivers/watchdog.h" #include "flash_region/flash_region.h" #include "kernel/events.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "kernel/pbl_malloc.h" #include "kernel/pebble_tasks.h" #if MEMFAULT diff --git a/src/fw/drivers/ambient/Kconfig b/src/fw/drivers/ambient/Kconfig index c7198f1ac8..a164937d3b 100644 --- a/src/fw/drivers/ambient/Kconfig +++ b/src/fw/drivers/ambient/Kconfig @@ -29,6 +29,6 @@ config AMBIENT_LIGHT_BITS module = DRIVER_AMBIENT module-str = Ambient Light Sensor -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # AMBIENT_LIGHT diff --git a/src/fw/drivers/backlight/Kconfig b/src/fw/drivers/backlight/Kconfig index 2d5cdb163a..a5e27d1aa7 100644 --- a/src/fw/drivers/backlight/Kconfig +++ b/src/fw/drivers/backlight/Kconfig @@ -46,6 +46,6 @@ config BACKLIGHT_QEMU_COLOR module = DRIVER_BACKLIGHT module-str = Backlight -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # BACKLIGHT diff --git a/src/fw/drivers/display/Kconfig b/src/fw/drivers/display/Kconfig index 7d20c000c1..2499aa0815 100644 --- a/src/fw/drivers/display/Kconfig +++ b/src/fw/drivers/display/Kconfig @@ -29,6 +29,6 @@ config DISPLAY_QEMU module = DRIVER_DISPLAY module-str = Display -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # DISPLAY diff --git a/src/fw/drivers/exti/Kconfig b/src/fw/drivers/exti/Kconfig index 8f98134450..cd98759bff 100644 --- a/src/fw/drivers/exti/Kconfig +++ b/src/fw/drivers/exti/Kconfig @@ -29,6 +29,6 @@ config EXTI_QEMU module = DRIVER_EXTI module-str = External Interrupt -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # EXTI diff --git a/src/fw/drivers/flash/Kconfig b/src/fw/drivers/flash/Kconfig index 9b54b20f4c..13286485f8 100644 --- a/src/fw/drivers/flash/Kconfig +++ b/src/fw/drivers/flash/Kconfig @@ -26,6 +26,6 @@ config FLASH_QEMU module = DRIVER_FLASH module-str = Flash -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # FLASH diff --git a/src/fw/drivers/hrm/Kconfig b/src/fw/drivers/hrm/Kconfig index 7a633b3a08..8f435ded75 100644 --- a/src/fw/drivers/hrm/Kconfig +++ b/src/fw/drivers/hrm/Kconfig @@ -20,6 +20,6 @@ config HRM_STUB module = DRIVER_HRM module-str = Heart Rate Monitor -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # HRM diff --git a/src/fw/drivers/i2c/Kconfig b/src/fw/drivers/i2c/Kconfig index 0b0fac76df..1cd022cfc4 100644 --- a/src/fw/drivers/i2c/Kconfig +++ b/src/fw/drivers/i2c/Kconfig @@ -23,6 +23,6 @@ config I2C_SF32LB module = DRIVER_I2C module-str = I2C -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # I2C diff --git a/src/fw/drivers/imu/Kconfig b/src/fw/drivers/imu/Kconfig index 0bcf7b0857..0ff7b99b78 100644 --- a/src/fw/drivers/imu/Kconfig +++ b/src/fw/drivers/imu/Kconfig @@ -136,6 +136,6 @@ endif # MAG module = DRIVER_IMU module-str = IMU -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endmenu diff --git a/src/fw/drivers/mic/Kconfig b/src/fw/drivers/mic/Kconfig index 9f87d0b873..b3a5c5df3c 100644 --- a/src/fw/drivers/mic/Kconfig +++ b/src/fw/drivers/mic/Kconfig @@ -33,6 +33,6 @@ config MIC_QEMU module = DRIVER_MIC module-str = Microphone -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # MIC diff --git a/src/fw/drivers/pmic/Kconfig b/src/fw/drivers/pmic/Kconfig index e06f6aeaf6..da52b4be64 100644 --- a/src/fw/drivers/pmic/Kconfig +++ b/src/fw/drivers/pmic/Kconfig @@ -15,6 +15,6 @@ config PMIC_NPM1300 module = DRIVER_PMIC module-str = PMIC -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # PMIC diff --git a/src/fw/drivers/pressure/Kconfig b/src/fw/drivers/pressure/Kconfig index b1d8a8b74c..588fe3c8c5 100644 --- a/src/fw/drivers/pressure/Kconfig +++ b/src/fw/drivers/pressure/Kconfig @@ -15,6 +15,6 @@ config PRESSURE_BMP390 module = DRIVER_PRESSURE module-str = Pressure Sensor -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # PRESSURE diff --git a/src/fw/drivers/rng/Kconfig b/src/fw/drivers/rng/Kconfig index d0c993bbf0..f37c054667 100644 --- a/src/fw/drivers/rng/Kconfig +++ b/src/fw/drivers/rng/Kconfig @@ -22,6 +22,6 @@ config RNG_STUB module = DRIVER_RNG module-str = Random Number Generator -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # RNG diff --git a/src/fw/drivers/rtc/Kconfig b/src/fw/drivers/rtc/Kconfig index 68f31d918c..47411d1167 100644 --- a/src/fw/drivers/rtc/Kconfig +++ b/src/fw/drivers/rtc/Kconfig @@ -30,6 +30,6 @@ config RTC_QEMU module = DRIVER_RTC module-str = RTC -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # RTC diff --git a/src/fw/drivers/speaker/Kconfig b/src/fw/drivers/speaker/Kconfig index ac0cc941a2..a147c1c7dd 100644 --- a/src/fw/drivers/speaker/Kconfig +++ b/src/fw/drivers/speaker/Kconfig @@ -28,6 +28,6 @@ config SPEAKER_QEMU module = DRIVER_SPEAKER module-str = Speaker -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # SPEAKER diff --git a/src/fw/drivers/touch/Kconfig b/src/fw/drivers/touch/Kconfig index e09957fd3f..49de01c5c3 100644 --- a/src/fw/drivers/touch/Kconfig +++ b/src/fw/drivers/touch/Kconfig @@ -21,6 +21,6 @@ config TOUCH_QEMU module = DRIVER_TOUCH module-str = Touchscreen -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # TOUCH diff --git a/src/fw/drivers/uart/Kconfig b/src/fw/drivers/uart/Kconfig index 5d27fbfc0c..f6fe4d5299 100644 --- a/src/fw/drivers/uart/Kconfig +++ b/src/fw/drivers/uart/Kconfig @@ -29,6 +29,6 @@ config UART_QEMU module = DRIVER_UART module-str = UART -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # UART diff --git a/src/fw/drivers/vibe/Kconfig b/src/fw/drivers/vibe/Kconfig index 31118e45e0..e146bdd70b 100644 --- a/src/fw/drivers/vibe/Kconfig +++ b/src/fw/drivers/vibe/Kconfig @@ -25,6 +25,6 @@ config VIBE_DRV2604 module = DRIVER_VIBE module-str = Vibration Motor -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif # VIBE diff --git a/src/fw/hardfault_handler.c b/src/fw/hardfault_handler.c index 40aaf73eac..49885cf77b 100644 --- a/src/fw/hardfault_handler.c +++ b/src/fw/hardfault_handler.c @@ -1,7 +1,7 @@ /* SPDX-FileCopyrightText: 2024 Google LLC */ /* SPDX-License-Identifier: Apache-2.0 */ -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "system/die.h" #include "system/reboot_reason.h" #include "system/reset.h" diff --git a/src/fw/kernel/core_dump.c b/src/fw/kernel/core_dump.c index db31013cde..e967b37ce4 100644 --- a/src/fw/kernel/core_dump.c +++ b/src/fw/kernel/core_dump.c @@ -23,8 +23,8 @@ extern char *itoa(int value, char *str, int base); #include "kernel/core_dump_private.h" #include "console/dbgserial.h" -#include "kernel/logging_private.h" -#include "kernel/pulse_logging.h" +#include "logging/logging_private.h" +#include "logging/pulse_logging.h" #include "drivers/flash.h" #include "drivers/mpu.h" diff --git a/src/fw/kernel/fault_handling.c b/src/fw/kernel/fault_handling.c index 7b9b0d3b21..f71c1b90b3 100644 --- a/src/fw/kernel/fault_handling.c +++ b/src/fw/kernel/fault_handling.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "kernel/core_dump.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "process_management/process_manager.h" #include "process_management/app_manager.h" #include "process_management/worker_manager.h" diff --git a/src/fw/kernel/kernel_applib_state.h b/src/fw/kernel/kernel_applib_state.h index 4ef1278846..d23bdf82b0 100644 --- a/src/fw/kernel/kernel_applib_state.h +++ b/src/fw/kernel/kernel_applib_state.h @@ -4,7 +4,7 @@ #pragma once #include "applib/ui/animation_private.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "applib/accel_service_private.h" #include "applib/tick_timer_service_private.h" #include "applib/touch_service_private.h" diff --git a/src/fw/kernel/memory_layout.c b/src/fw/kernel/memory_layout.c index eba05b2e64..e30ebe9f8a 100644 --- a/src/fw/kernel/memory_layout.c +++ b/src/fw/kernel/memory_layout.c @@ -3,7 +3,7 @@ #include "memory_layout.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/main.c b/src/fw/main.c index 15c572d711..edbfe9c343 100644 --- a/src/fw/main.c +++ b/src/fw/main.c @@ -48,7 +48,7 @@ #include "kernel/fault_handling.h" #include "kernel/memory_layout.h" #include "kernel/panic.h" -#include "kernel/pulse_logging.h" +#include "logging/pulse_logging.h" #include "pbl/services/services.h" #include "pbl/services/boot_splash.h" #include "pbl/services/clock.h" diff --git a/src/fw/process_state/app_state/app_state.h b/src/fw/process_state/app_state/app_state.h index 783c44bcc3..fb5dad5e8f 100644 --- a/src/fw/process_state/app_state/app_state.h +++ b/src/fw/process_state/app_state/app_state.h @@ -32,7 +32,7 @@ #include "applib/ui/speaker.h" #include "applib/ui/window_stack_private.h" #include "applib/unobstructed_area_service_private.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "pbl/services/app_glances/app_glance_service.h" #include "pbl/services/timeline/timeline_actions.h" #include "pbl/util/heap.h" diff --git a/src/fw/process_state/worker_state/worker_state.h b/src/fw/process_state/worker_state/worker_state.h index 6a32669f19..d09b646a36 100644 --- a/src/fw/process_state/worker_state/worker_state.h +++ b/src/fw/process_state/worker_state/worker_state.h @@ -4,7 +4,7 @@ #pragma once #include "applib/event_service_client.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "applib/accel_service_private.h" #include "applib/compass_service_private.h" #include "applib/plugin_service_private.h" diff --git a/src/fw/services/accel_manager/Kconfig b/src/fw/services/accel_manager/Kconfig index 33187d27e5..346ae5e9a0 100644 --- a/src/fw/services/accel_manager/Kconfig +++ b/src/fw/services/accel_manager/Kconfig @@ -19,6 +19,6 @@ config SERVICE_ACCEL_MANAGER_BATCH_SAMPLES module = SERVICE_ACCEL_MANAGER module-str = Accelerometer manager -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/activity/Kconfig b/src/fw/services/activity/Kconfig index dffcdb790c..6c142bd305 100644 --- a/src/fw/services/activity/Kconfig +++ b/src/fw/services/activity/Kconfig @@ -19,6 +19,6 @@ config SERVICE_ACTIVITY_BATCH_SAMPLES module = SERVICE_ACTIVITY module-str = Activity -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/alarms/Kconfig b/src/fw/services/alarms/Kconfig index 25f928c443..b432260a25 100644 --- a/src/fw/services/alarms/Kconfig +++ b/src/fw/services/alarms/Kconfig @@ -10,6 +10,6 @@ if SERVICE_ALARMS module = SERVICE_ALARMS module-str = Alarms -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/analytics/Kconfig b/src/fw/services/analytics/Kconfig index 73f17fcf06..425515fff6 100644 --- a/src/fw/services/analytics/Kconfig +++ b/src/fw/services/analytics/Kconfig @@ -10,6 +10,6 @@ if SERVICE_ANALYTICS module = SERVICE_ANALYTICS module-str = Analytics -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/app_cache/Kconfig b/src/fw/services/app_cache/Kconfig index 608d281fb8..cd656f9809 100644 --- a/src/fw/services/app_cache/Kconfig +++ b/src/fw/services/app_cache/Kconfig @@ -10,6 +10,6 @@ if SERVICE_APP_CACHE module = SERVICE_APP_CACHE module-str = App cache -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/app_fetch_endpoint/Kconfig b/src/fw/services/app_fetch_endpoint/Kconfig index 6a87d5d79a..a8edefbf82 100644 --- a/src/fw/services/app_fetch_endpoint/Kconfig +++ b/src/fw/services/app_fetch_endpoint/Kconfig @@ -10,6 +10,6 @@ if SERVICE_APP_FETCH_ENDPOINT module = SERVICE_APP_FETCH_ENDPOINT module-str = App fetch endpoint -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/app_inbox_service/Kconfig b/src/fw/services/app_inbox_service/Kconfig index b865288611..03258b647f 100644 --- a/src/fw/services/app_inbox_service/Kconfig +++ b/src/fw/services/app_inbox_service/Kconfig @@ -10,6 +10,6 @@ if SERVICE_APP_INBOX_SERVICE module = SERVICE_APP_INBOX_SERVICE module-str = App inbox -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/app_message/Kconfig b/src/fw/services/app_message/Kconfig index ba6b3610a3..71133b59f2 100644 --- a/src/fw/services/app_message/Kconfig +++ b/src/fw/services/app_message/Kconfig @@ -10,6 +10,6 @@ if SERVICE_APP_MESSAGE module = SERVICE_APP_MESSAGE module-str = App message -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/app_order_endpoint/Kconfig b/src/fw/services/app_order_endpoint/Kconfig index 6626c84697..7e6f94ca40 100644 --- a/src/fw/services/app_order_endpoint/Kconfig +++ b/src/fw/services/app_order_endpoint/Kconfig @@ -10,6 +10,6 @@ if SERVICE_APP_ORDER_ENDPOINT module = SERVICE_APP_ORDER_ENDPOINT module-str = App order endpoint -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/app_outbox_service/Kconfig b/src/fw/services/app_outbox_service/Kconfig index 7614eacd9c..d62d02024c 100644 --- a/src/fw/services/app_outbox_service/Kconfig +++ b/src/fw/services/app_outbox_service/Kconfig @@ -10,6 +10,6 @@ if SERVICE_APP_OUTBOX_SERVICE module = SERVICE_APP_OUTBOX_SERVICE module-str = App outbox -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/audio_endpoint/Kconfig b/src/fw/services/audio_endpoint/Kconfig index 946ce9df9c..6ddcf33580 100644 --- a/src/fw/services/audio_endpoint/Kconfig +++ b/src/fw/services/audio_endpoint/Kconfig @@ -10,6 +10,6 @@ if SERVICE_AUDIO_ENDPOINT module = SERVICE_AUDIO_ENDPOINT module-str = Audio endpoint -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/battery/Kconfig b/src/fw/services/battery/Kconfig index 120b00fd4e..ac29b48134 100644 --- a/src/fw/services/battery/Kconfig +++ b/src/fw/services/battery/Kconfig @@ -35,6 +35,6 @@ config BATTERY_WARNING_SECOND_PERCENT module = SERVICE_BATTERY module-str = Battery -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/blob_db/Kconfig b/src/fw/services/blob_db/Kconfig index 3418e3616a..c64ebd45cf 100644 --- a/src/fw/services/blob_db/Kconfig +++ b/src/fw/services/blob_db/Kconfig @@ -11,6 +11,6 @@ if SERVICE_BLOB_DB module = SERVICE_BLOB_DB module-str = Blob DB -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/bluetooth/Kconfig b/src/fw/services/bluetooth/Kconfig index 880404223c..26eff03a63 100644 --- a/src/fw/services/bluetooth/Kconfig +++ b/src/fw/services/bluetooth/Kconfig @@ -41,6 +41,6 @@ if SERVICE_BLUETOOTH module = SERVICE_BLUETOOTH module-str = Bluetooth -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/clock/Kconfig b/src/fw/services/clock/Kconfig index 361a9292ab..2c757cdc1b 100644 --- a/src/fw/services/clock/Kconfig +++ b/src/fw/services/clock/Kconfig @@ -10,6 +10,6 @@ if SERVICE_CLOCK module = SERVICE_CLOCK module-str = Clock -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/comm_session/Kconfig b/src/fw/services/comm_session/Kconfig index 3d999ea9de..61a67cea20 100644 --- a/src/fw/services/comm_session/Kconfig +++ b/src/fw/services/comm_session/Kconfig @@ -10,6 +10,6 @@ if SERVICE_COMM_SESSION module = SERVICE_COMM_SESSION module-str = Comm session -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/compositor/Kconfig b/src/fw/services/compositor/Kconfig index 0cdb0cbfd1..fd1e2e5506 100644 --- a/src/fw/services/compositor/Kconfig +++ b/src/fw/services/compositor/Kconfig @@ -10,6 +10,6 @@ if SERVICE_COMPOSITOR module = SERVICE_COMPOSITOR module-str = Compositor -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/cron/Kconfig b/src/fw/services/cron/Kconfig index 9b3b33713d..b896ed5ab4 100644 --- a/src/fw/services/cron/Kconfig +++ b/src/fw/services/cron/Kconfig @@ -10,6 +10,6 @@ if SERVICE_CRON module = SERVICE_CRON module-str = Cron -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/data_logging/Kconfig b/src/fw/services/data_logging/Kconfig index 48744b5739..1f82ba6b21 100644 --- a/src/fw/services/data_logging/Kconfig +++ b/src/fw/services/data_logging/Kconfig @@ -10,6 +10,6 @@ if SERVICE_DATA_LOGGING module = SERVICE_DATA_LOGGING module-str = Data logging -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/ecompass/Kconfig b/src/fw/services/ecompass/Kconfig index a0cf8b8326..68e96477ad 100644 --- a/src/fw/services/ecompass/Kconfig +++ b/src/fw/services/ecompass/Kconfig @@ -11,6 +11,6 @@ if SERVICE_ECOMPASS module = SERVICE_ECOMPASS module-str = E-compass -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/event_service/Kconfig b/src/fw/services/event_service/Kconfig index 5095a1152c..a6e9fe56f1 100644 --- a/src/fw/services/event_service/Kconfig +++ b/src/fw/services/event_service/Kconfig @@ -10,6 +10,6 @@ if SERVICE_EVENT_SERVICE module = SERVICE_EVENT_SERVICE module-str = Event service -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/evented_timer/Kconfig b/src/fw/services/evented_timer/Kconfig index 742d4f778d..1cba48c925 100644 --- a/src/fw/services/evented_timer/Kconfig +++ b/src/fw/services/evented_timer/Kconfig @@ -10,6 +10,6 @@ if SERVICE_EVENTED_TIMER module = SERVICE_EVENTED_TIMER module-str = Evented timer -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/filesystem/Kconfig b/src/fw/services/filesystem/Kconfig index 698f0005b5..81a0b377f0 100644 --- a/src/fw/services/filesystem/Kconfig +++ b/src/fw/services/filesystem/Kconfig @@ -10,6 +10,6 @@ if SERVICE_FILESYSTEM module = SERVICE_FILESYSTEM module-str = Filesystem -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/firmware_update/Kconfig b/src/fw/services/firmware_update/Kconfig index d8d8714a5b..a55e16d31f 100644 --- a/src/fw/services/firmware_update/Kconfig +++ b/src/fw/services/firmware_update/Kconfig @@ -10,6 +10,6 @@ if SERVICE_FIRMWARE_UPDATE module = SERVICE_FIRMWARE_UPDATE module-str = Firmware update -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/get_bytes/Kconfig b/src/fw/services/get_bytes/Kconfig index 801afcdec5..c9cf565070 100644 --- a/src/fw/services/get_bytes/Kconfig +++ b/src/fw/services/get_bytes/Kconfig @@ -10,6 +10,6 @@ if SERVICE_GET_BYTES module = SERVICE_GET_BYTES module-str = Get bytes -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/health_sync_endpoint/Kconfig b/src/fw/services/health_sync_endpoint/Kconfig index 1a91d8fb8f..bbba3d22d7 100644 --- a/src/fw/services/health_sync_endpoint/Kconfig +++ b/src/fw/services/health_sync_endpoint/Kconfig @@ -10,6 +10,6 @@ if SERVICE_HEALTH_SYNC_ENDPOINT module = SERVICE_HEALTH_SYNC_ENDPOINT module-str = Health sync endpoint -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/hrm/Kconfig b/src/fw/services/hrm/Kconfig index d89b4dd30f..f781dd226a 100644 --- a/src/fw/services/hrm/Kconfig +++ b/src/fw/services/hrm/Kconfig @@ -11,6 +11,6 @@ if SERVICE_HRM module = SERVICE_HRM module-str = Heart rate monitor -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/i18n/Kconfig b/src/fw/services/i18n/Kconfig index c5382bba64..a288e1485b 100644 --- a/src/fw/services/i18n/Kconfig +++ b/src/fw/services/i18n/Kconfig @@ -10,6 +10,6 @@ if SERVICE_I18N module = SERVICE_I18N module-str = Internationalization -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/light/Kconfig b/src/fw/services/light/Kconfig index 5ce0f47f8d..203729c9ff 100644 --- a/src/fw/services/light/Kconfig +++ b/src/fw/services/light/Kconfig @@ -45,6 +45,6 @@ endif # ALS_SCREEN_COMPENSATION module = SERVICE_LIGHT module-str = Light -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/music/Kconfig b/src/fw/services/music/Kconfig index 5ddd914d8f..b3a399cc76 100644 --- a/src/fw/services/music/Kconfig +++ b/src/fw/services/music/Kconfig @@ -10,6 +10,6 @@ if SERVICE_MUSIC module = SERVICE_MUSIC module-str = Music -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/new_timer/Kconfig b/src/fw/services/new_timer/Kconfig index c04f6c1f95..b000e41e30 100644 --- a/src/fw/services/new_timer/Kconfig +++ b/src/fw/services/new_timer/Kconfig @@ -10,6 +10,6 @@ if SERVICE_NEW_TIMER module = SERVICE_NEW_TIMER module-str = New timer -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/notifications/Kconfig b/src/fw/services/notifications/Kconfig index ce8463b690..2027de6a05 100644 --- a/src/fw/services/notifications/Kconfig +++ b/src/fw/services/notifications/Kconfig @@ -10,6 +10,6 @@ if SERVICE_NOTIFICATIONS module = SERVICE_NOTIFICATIONS module-str = Notifications -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/persist/Kconfig b/src/fw/services/persist/Kconfig index 388d2d80c1..19f1cf6245 100644 --- a/src/fw/services/persist/Kconfig +++ b/src/fw/services/persist/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PERSIST module = SERVICE_PERSIST module-str = Persist -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/phone_call/Kconfig b/src/fw/services/phone_call/Kconfig index c1380dd090..b127a7f341 100644 --- a/src/fw/services/phone_call/Kconfig +++ b/src/fw/services/phone_call/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PHONE_CALL module = SERVICE_PHONE_CALL module-str = Phone call -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/phone_pp/Kconfig b/src/fw/services/phone_pp/Kconfig index f5abc3c822..583b00cf22 100644 --- a/src/fw/services/phone_pp/Kconfig +++ b/src/fw/services/phone_pp/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PHONE_PP module = SERVICE_PHONE_PP module-str = Phone (Pebble Protocol) -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/ping/Kconfig b/src/fw/services/ping/Kconfig index e0909e0902..0a8e2fd7e8 100644 --- a/src/fw/services/ping/Kconfig +++ b/src/fw/services/ping/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PING module = SERVICE_PING module-str = Ping -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/poll_remote/Kconfig b/src/fw/services/poll_remote/Kconfig index 8613511575..a1ab7397fa 100644 --- a/src/fw/services/poll_remote/Kconfig +++ b/src/fw/services/poll_remote/Kconfig @@ -10,6 +10,6 @@ if SERVICE_POLL_REMOTE module = SERVICE_POLL_REMOTE module-str = Poll remote -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/prf_update/Kconfig b/src/fw/services/prf_update/Kconfig index 190c5f92f1..5c8c971b71 100644 --- a/src/fw/services/prf_update/Kconfig +++ b/src/fw/services/prf_update/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PRF_UPDATE module = SERVICE_PRF_UPDATE module-str = PRF update -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/process_management/Kconfig b/src/fw/services/process_management/Kconfig index 1709b169f4..5c8eacc894 100644 --- a/src/fw/services/process_management/Kconfig +++ b/src/fw/services/process_management/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PROCESS_MANAGEMENT module = SERVICE_PROCESS_MANAGEMENT module-str = Process management -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/protobuf_log/Kconfig b/src/fw/services/protobuf_log/Kconfig index 8d5a0ce89c..27f6509238 100644 --- a/src/fw/services/protobuf_log/Kconfig +++ b/src/fw/services/protobuf_log/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PROTOBUF_LOG module = SERVICE_PROTOBUF_LOG module-str = Protobuf log -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/put_bytes/Kconfig b/src/fw/services/put_bytes/Kconfig index 51c84b2450..50ec487cef 100644 --- a/src/fw/services/put_bytes/Kconfig +++ b/src/fw/services/put_bytes/Kconfig @@ -10,6 +10,6 @@ if SERVICE_PUT_BYTES module = SERVICE_PUT_BYTES module-str = Put bytes -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/regular_timer/Kconfig b/src/fw/services/regular_timer/Kconfig index 504eb8837a..1f27a1b546 100644 --- a/src/fw/services/regular_timer/Kconfig +++ b/src/fw/services/regular_timer/Kconfig @@ -10,6 +10,6 @@ if SERVICE_REGULAR_TIMER module = SERVICE_REGULAR_TIMER module-str = Regular timer -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/settings/Kconfig b/src/fw/services/settings/Kconfig index 68492ab542..a0951c89d3 100644 --- a/src/fw/services/settings/Kconfig +++ b/src/fw/services/settings/Kconfig @@ -10,6 +10,6 @@ if SERVICE_SETTINGS module = SERVICE_SETTINGS module-str = Settings -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/shared_prf_storage/Kconfig b/src/fw/services/shared_prf_storage/Kconfig index 2e223150ce..c7db93e435 100644 --- a/src/fw/services/shared_prf_storage/Kconfig +++ b/src/fw/services/shared_prf_storage/Kconfig @@ -10,6 +10,6 @@ if SERVICE_SHARED_PRF_STORAGE module = SERVICE_SHARED_PRF_STORAGE module-str = Shared PRF storage -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/speaker/Kconfig b/src/fw/services/speaker/Kconfig index 6d2a186e1d..860a44eb87 100644 --- a/src/fw/services/speaker/Kconfig +++ b/src/fw/services/speaker/Kconfig @@ -10,6 +10,6 @@ if SERVICE_SPEAKER module = SERVICE_SPEAKER module-str = Speaker -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/stationary/Kconfig b/src/fw/services/stationary/Kconfig index 0303f79e73..f41976ca7d 100644 --- a/src/fw/services/stationary/Kconfig +++ b/src/fw/services/stationary/Kconfig @@ -10,6 +10,6 @@ if SERVICE_STATIONARY module = SERVICE_STATIONARY module-str = Stationary -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/system_task/Kconfig b/src/fw/services/system_task/Kconfig index c0e0fb995c..28223db320 100644 --- a/src/fw/services/system_task/Kconfig +++ b/src/fw/services/system_task/Kconfig @@ -10,6 +10,6 @@ if SERVICE_SYSTEM_TASK module = SERVICE_SYSTEM_TASK module-str = System task -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/tick_timer/Kconfig b/src/fw/services/tick_timer/Kconfig index 550dc44147..14d28d09ed 100644 --- a/src/fw/services/tick_timer/Kconfig +++ b/src/fw/services/tick_timer/Kconfig @@ -10,6 +10,6 @@ if SERVICE_TICK_TIMER module = SERVICE_TICK_TIMER module-str = Tick timer -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/timeline/Kconfig b/src/fw/services/timeline/Kconfig index 6e97c19a5a..98f8edacd1 100644 --- a/src/fw/services/timeline/Kconfig +++ b/src/fw/services/timeline/Kconfig @@ -10,6 +10,6 @@ if SERVICE_TIMELINE module = SERVICE_TIMELINE module-str = Timeline -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/timezone_database/Kconfig b/src/fw/services/timezone_database/Kconfig index 2f2a7e9e57..502d7a4ed0 100644 --- a/src/fw/services/timezone_database/Kconfig +++ b/src/fw/services/timezone_database/Kconfig @@ -10,6 +10,6 @@ if SERVICE_TIMEZONE_DATABASE module = SERVICE_TIMEZONE_DATABASE module-str = Timezone database -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/touch/Kconfig b/src/fw/services/touch/Kconfig index 63d5ef4c02..80b831191f 100644 --- a/src/fw/services/touch/Kconfig +++ b/src/fw/services/touch/Kconfig @@ -11,6 +11,6 @@ if SERVICE_TOUCH module = SERVICE_TOUCH module-str = Touch -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/vibe_pattern/Kconfig b/src/fw/services/vibe_pattern/Kconfig index 73a2598d2b..84db3648e5 100644 --- a/src/fw/services/vibe_pattern/Kconfig +++ b/src/fw/services/vibe_pattern/Kconfig @@ -10,6 +10,6 @@ if SERVICE_VIBE_PATTERN module = SERVICE_VIBE_PATTERN module-str = Vibe pattern -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/vibes/Kconfig b/src/fw/services/vibes/Kconfig index 84c6c160c1..82f5190aa1 100644 --- a/src/fw/services/vibes/Kconfig +++ b/src/fw/services/vibes/Kconfig @@ -10,6 +10,6 @@ if SERVICE_VIBES module = SERVICE_VIBES module-str = Vibes -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/voice/Kconfig b/src/fw/services/voice/Kconfig index a20f518d9b..db67970bf8 100644 --- a/src/fw/services/voice/Kconfig +++ b/src/fw/services/voice/Kconfig @@ -11,6 +11,6 @@ if SERVICE_VOICE module = SERVICE_VOICE module-str = Voice -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/voice_endpoint/Kconfig b/src/fw/services/voice_endpoint/Kconfig index cd96210880..398c45bbdb 100644 --- a/src/fw/services/voice_endpoint/Kconfig +++ b/src/fw/services/voice_endpoint/Kconfig @@ -10,6 +10,6 @@ if SERVICE_VOICE_ENDPOINT module = SERVICE_VOICE_ENDPOINT module-str = Voice endpoint -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/wakeup/Kconfig b/src/fw/services/wakeup/Kconfig index e03192b4c8..79b9c874c4 100644 --- a/src/fw/services/wakeup/Kconfig +++ b/src/fw/services/wakeup/Kconfig @@ -10,6 +10,6 @@ if SERVICE_WAKEUP module = SERVICE_WAKEUP module-str = Wakeup -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/services/weather/Kconfig b/src/fw/services/weather/Kconfig index c9b9552fff..a32a8abd87 100644 --- a/src/fw/services/weather/Kconfig +++ b/src/fw/services/weather/Kconfig @@ -10,6 +10,6 @@ if SERVICE_WEATHER module = SERVICE_WEATHER module-str = Weather -source "src/fw/Kconfig.template.log_level" +source "subsys/logging/Kconfig.template.log_level" endif diff --git a/src/fw/syscall/syscall.c b/src/fw/syscall/syscall.c index 68d32f2338..d459981a88 100644 --- a/src/fw/syscall/syscall.c +++ b/src/fw/syscall/syscall.c @@ -15,7 +15,7 @@ #include "process_management/app_manager.h" #include "process_management/worker_manager.h" #include "pbl/services/comm_session/session.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "system/logging.h" #include "system/passert.h" #include "pbl/util/string.h" diff --git a/src/fw/syscall/syscall.h b/src/fw/syscall/syscall.h index 337c4b77c8..b4a6d7b861 100644 --- a/src/fw/syscall/syscall.h +++ b/src/fw/syscall/syscall.h @@ -23,7 +23,7 @@ #include "drivers/rtc.h" #include "kernel/events.h" -#include "kernel/logging_private.h" +#include "logging/logging_private.h" #include "pbl/services/wakeup.h" #include "pbl/services/comm_session/session.h" #include "pbl/services/evented_timer.h" diff --git a/src/fw/system/die.c b/src/fw/system/die.c index 914684b69d..89c157a0fb 100644 --- a/src/fw/system/die.c +++ b/src/fw/system/die.c @@ -3,8 +3,8 @@ #include "drivers/vibe.h" #include "kernel/core_dump.h" -#include "kernel/logging_private.h" -#include "kernel/pulse_logging.h" +#include "logging/logging_private.h" +#include "logging/pulse_logging.h" #include "system/bootbits.h" #include "system/passert.h" #include "system/reboot_reason.h" diff --git a/subsys/Kconfig b/subsys/Kconfig new file mode 100644 index 0000000000..28de460e07 --- /dev/null +++ b/subsys/Kconfig @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2026 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +rsource "logging/Kconfig" diff --git a/subsys/logging/Kconfig b/subsys/logging/Kconfig new file mode 100644 index 0000000000..907205de43 --- /dev/null +++ b/subsys/logging/Kconfig @@ -0,0 +1,76 @@ +# SPDX-FileCopyrightText: 2026 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +menu "Logging" + +config LOG + bool "Logging" + default y + help + Build the PBL_LOG macros. Disable to save space. + +config LOG_HASHED + bool "Hashed logs" + default y + depends on LOG && !QEMU + help + Replace log format strings with hashes to save space. Disable + for human-readable logs. + +choice + prompt "Default log level" + default DEFAULT_LOG_LEVEL_INFO + +config DEFAULT_LOG_LEVEL_ERROR + bool "Error" + +config DEFAULT_LOG_LEVEL_WARNING + bool "Warning" + +config DEFAULT_LOG_LEVEL_INFO + bool "Info" + +config DEFAULT_LOG_LEVEL_DEBUG + bool "Debug" + +config DEFAULT_LOG_LEVEL_DEBUG_VERBOSE + bool "Debug verbose" + +endchoice + +choice + prompt "Flash log level" + default FLASH_LOG_LEVEL_INFO + +config FLASH_LOG_LEVEL_ERROR + bool "Error" + +config FLASH_LOG_LEVEL_WARNING + bool "Warning" + +config FLASH_LOG_LEVEL_INFO + bool "Info" + +config FLASH_LOG_LEVEL_DEBUG + bool "Debug" + +config FLASH_LOG_LEVEL_DEBUG_VERBOSE + bool "Debug verbose" + +endchoice + +config LOG_TASK_PREFIX + bool "Task prefix" + depends on LOG + help + Prefix log messages with the originating task identifier char + (uppercase when logged from privileged mode). + +config PULSE_EVERYWHERE + bool "PULSE everywhere" + default y if !RELEASE || MFG + help + Use the PULSE protocol for logs and the prompt. Disable to fall + back to legacy logs and prompt. + +endmenu diff --git a/src/fw/Kconfig.template.log_level b/subsys/logging/Kconfig.template.log_level similarity index 95% rename from src/fw/Kconfig.template.log_level rename to subsys/logging/Kconfig.template.log_level index 127d44a7f6..547eaca575 100644 --- a/src/fw/Kconfig.template.log_level +++ b/subsys/logging/Kconfig.template.log_level @@ -5,7 +5,7 @@ # # module = MYMODULE # module-str = My module -# source "src/fw/Kconfig.template.log_level" +# source "subsys/logging/Kconfig.template.log_level" # # Defines CONFIG__LOG_LEVEL, consumed by PBL_LOG_MODULE_DEFINE / # PBL_LOG_MODULE_DECLARE (see system/logging.h). 0 means "use the default diff --git a/src/fw/kernel/logging.c b/subsys/logging/logging.c similarity index 98% rename from src/fw/kernel/logging.c rename to subsys/logging/logging.c index 3aa64e7185..38781f73f3 100644 --- a/src/fw/kernel/logging.c +++ b/subsys/logging/logging.c @@ -3,9 +3,9 @@ #include "pulse_logging.h" -#include "pebble_tasks.h" +#include "kernel/pebble_tasks.h" #include "logging_private.h" -#include "util/stack_info.h" +#include "kernel/util/stack_info.h" #include "console/console_internal.h" #include "console/prompt.h" diff --git a/src/fw/kernel/logging_private.h b/subsys/logging/logging_private.h similarity index 100% rename from src/fw/kernel/logging_private.h rename to subsys/logging/logging_private.h diff --git a/src/fw/kernel/pulse_logging.c b/subsys/logging/pulse_logging.c similarity index 99% rename from src/fw/kernel/pulse_logging.c rename to subsys/logging/pulse_logging.c index 55c5559c19..ec8c070986 100644 --- a/src/fw/kernel/pulse_logging.c +++ b/subsys/logging/pulse_logging.c @@ -4,7 +4,7 @@ #include "pulse_logging.h" #include "logging_private.h" -#include "pebble_tasks.h" +#include "kernel/pebble_tasks.h" #include "console/pulse.h" #include "console/pulse_protocol_impl.h" diff --git a/src/fw/kernel/pulse_logging.h b/subsys/logging/pulse_logging.h similarity index 100% rename from src/fw/kernel/pulse_logging.h rename to subsys/logging/pulse_logging.h diff --git a/subsys/logging/wscript_build b/subsys/logging/wscript_build new file mode 100644 index 0000000000..ea2498ef9b --- /dev/null +++ b/subsys/logging/wscript_build @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2026 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +bld.objects( + name='logging', + source=bld.path.ant_glob('*.c'), + use=['fw_includes', 'pblibc_includes'], +) + +# vim:filetype=python diff --git a/subsys/wscript_build b/subsys/wscript_build new file mode 100644 index 0000000000..9cc08f731a --- /dev/null +++ b/subsys/wscript_build @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: 2026 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +bld(export_includes=['.'], name='subsys_includes') + +bld.recurse('logging') + +# vim:filetype=python diff --git a/tests/fw/kernel/wscript_build b/tests/fw/kernel/wscript_build index e2fe9f4e69..c6c663fc15 100644 --- a/tests/fw/kernel/wscript_build +++ b/tests/fw/kernel/wscript_build @@ -1,10 +1,5 @@ from tools.waf.pebble_test import clar -clar(ctx, - sources_ant_glob = - " src/fw/kernel/pulse_logging.c", - test_sources_ant_glob="test_pulse_logging.c") - clar(ctx, sources_ant_glob = " src/fw/kernel/util/interval_timer.c" diff --git a/tests/fw/kernel/test_pulse_logging.c b/tests/subsys/logging/test_pulse_logging.c similarity index 99% rename from tests/fw/kernel/test_pulse_logging.c rename to tests/subsys/logging/test_pulse_logging.c index 0b3d5265eb..5d809b1424 100644 --- a/tests/fw/kernel/test_pulse_logging.c +++ b/tests/subsys/logging/test_pulse_logging.c @@ -3,7 +3,7 @@ #include "clar.h" -#include "kernel/pulse_logging.h" +#include "logging/pulse_logging.h" // How many bytes are in a log message before the actual message content in pulse log messages const int LOG_METADATA_LENGTH = 29; diff --git a/tests/subsys/logging/wscript_build b/tests/subsys/logging/wscript_build new file mode 100644 index 0000000000..7026c13941 --- /dev/null +++ b/tests/subsys/logging/wscript_build @@ -0,0 +1,8 @@ +from tools.waf.pebble_test import clar + +clar(ctx, + sources_ant_glob = + " subsys/logging/pulse_logging.c", + test_sources_ant_glob="test_pulse_logging.c") + +# vim:filetype=python diff --git a/tools/generate_native_sdk/parse_c_decl.py b/tools/generate_native_sdk/parse_c_decl.py index f6e309329a..032820413d 100644 --- a/tools/generate_native_sdk/parse_c_decl.py +++ b/tools/generate_native_sdk/parse_c_decl.py @@ -219,6 +219,7 @@ def parse_file( args = [ "-I%s/core" % src_dir, "-I%s/include" % root_dir, + "-I%s/subsys" % root_dir, "-I%s/fw" % src_dir, "-I%s/fw/applib/vendor/uPNG" % src_dir, "-I%s/fw/applib/vendor/tinflate" % src_dir, diff --git a/tools/pdc2png/wscript_build b/tools/pdc2png/wscript_build index 09c0259a1b..f5d3a62954 100644 --- a/tools/pdc2png/wscript_build +++ b/tools/pdc2png/wscript_build @@ -40,6 +40,7 @@ includes = ["../../tests/stubs", "../../src/fw/applib/vendor/tinflate", "../../tests/overrides/default/", "../../include", + "../../subsys", "../../src/fw", "../../src/fw/util/time", "../../third_party/freertos", diff --git a/tools/waf/pebble_test.py b/tools/waf/pebble_test.py index f17bb59378..d64de582c8 100644 --- a/tools/waf/pebble_test.py +++ b/tools/waf/pebble_test.py @@ -328,6 +328,7 @@ def _generate_clar_harness(task): "tests/test_includes", "tests", "include", + "subsys", "src/core", "src/fw", "src/boot", diff --git a/wscript b/wscript index 98398d3b2c..7fcfbef4b2 100644 --- a/wscript +++ b/wscript @@ -368,6 +368,7 @@ def _link_firmware(bld, sources): 'fw_services', 'gcc', 'kernel', + 'logging', 'mfg', 'popups', 'process_management', @@ -491,6 +492,7 @@ def _build_fw(bld): # FIXME create applib_includes or something like that fw_includes_use=['pbl_includes', + 'subsys_includes', 'freertos_includes', 'idl_includes', 'nanopb_includes'] @@ -523,6 +525,7 @@ def _build_fw(bld): target=bld.path.get_bld().make_node('src/fw/git_version.auto.h'), **git_rev) + bld.recurse('subsys') bld.recurse('src/fw/startup') bld.recurse('src/fw/drivers') bld.recurse('src/fw/board') From 0d4c923d413b1fd44beeee33d197c3dec9cf7eaf Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 20 Jul 2026 22:33:23 +0200 Subject: [PATCH 26/85] subsys/logging: move public headers under include/pbl/logging Move the PBL_LOG public header from src/fw/system/logging.h to include/pbl/logging/logging.h, and move the existing logging headers (binary_logging.h, log_hashing.h) from include/logging to the same place, following the pbl/ include prefix convention. All in-tree users now include . The moddable submodule needs a matching include path update. Co-Authored-By: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- include/{ => pbl}/logging/binary_logging.h | 2 +- include/{ => pbl}/logging/log_hashing.h | 0 {src/fw/system => include/pbl/logging}/logging.h | 2 +- include/pbl/services/activity/activity_private.h | 2 +- src/bluetooth-fw/nimble/advert.c | 2 +- src/bluetooth-fw/nimble/gap_le_connect.c | 2 +- src/bluetooth-fw/nimble/gap_le_device_name.c | 2 +- src/bluetooth-fw/nimble/gatt.c | 2 +- src/bluetooth-fw/nimble/gatt_client_discovery.c | 2 +- src/bluetooth-fw/nimble/gatt_client_operations.c | 2 +- src/bluetooth-fw/nimble/init.c | 2 +- src/bluetooth-fw/nimble/nimble_store.c | 2 +- src/bluetooth-fw/nimble/nimble_type_conversions.c | 2 +- src/bluetooth-fw/nimble/pairing_confirm.c | 2 +- src/bluetooth-fw/nimble/pebble_pairing_service.c | 2 +- src/bluetooth-fw/nimble/ppog_reversed_service.c | 2 +- src/bluetooth-fw/nimble/responsiveness.c | 2 +- src/bluetooth-fw/qemu/init.c | 2 +- src/bluetooth-fw/qemu/qemu_transport.c | 2 +- src/bluetooth-fw/stub/init.c | 2 +- src/fw/applib/accel_service_private.h | 2 +- src/fw/applib/app.c | 2 +- src/fw/applib/app_inbox.c | 2 +- src/fw/applib/app_logging.c | 2 +- src/fw/applib/app_logging.h | 2 +- src/fw/applib/app_message/app_message.c | 2 +- src/fw/applib/app_message/app_message_inbox.c | 2 +- src/fw/applib/app_message/app_message_outbox.c | 2 +- src/fw/applib/app_message/app_message_receiver.c | 2 +- src/fw/applib/bluetooth/ble_client.c | 2 +- src/fw/applib/event_service_client.c | 2 +- src/fw/applib/fonts/fonts.c | 2 +- src/fw/applib/graphics/1_bit/bitblt_private.c | 2 +- src/fw/applib/graphics/1_bit/framebuffer.c | 2 +- src/fw/applib/graphics/8_bit/bitblt_private.c | 2 +- src/fw/applib/graphics/8_bit/framebuffer.c | 2 +- src/fw/applib/graphics/bitblt.c | 2 +- src/fw/applib/graphics/gbitmap.c | 2 +- src/fw/applib/graphics/gbitmap_png.c | 2 +- src/fw/applib/graphics/gpath.c | 2 +- src/fw/applib/graphics/graphics.c | 2 +- src/fw/applib/graphics/text_layout.c | 2 +- src/fw/applib/graphics/text_resources.c | 2 +- src/fw/applib/graphics/utf8.c | 2 +- src/fw/applib/health_service.c | 2 +- src/fw/applib/legacy2/ui/animation_legacy2.c | 2 +- src/fw/applib/legacy2/ui/menu_layer_legacy2.c | 2 +- src/fw/applib/legacy2/ui/property_animation_legacy2.c | 2 +- src/fw/applib/legacy2/ui/text_layer_legacy2.c | 2 +- src/fw/applib/logging.c | 4 ++-- src/fw/applib/pbl_std/pbl_std.c | 2 +- src/fw/applib/pbl_std/strftime.c | 2 +- src/fw/applib/plugin_service.c | 2 +- src/fw/applib/ui/animation_timing.c | 2 +- src/fw/applib/ui/app_window_stack.c | 2 +- src/fw/applib/ui/crumbs_layer.c | 2 +- src/fw/applib/ui/kino/kino_player.c | 2 +- src/fw/applib/ui/kino/kino_reel.c | 2 +- src/fw/applib/ui/kino/kino_reel/scale_segmented.c | 2 +- src/fw/applib/ui/kino/kino_reel/unfold.c | 2 +- src/fw/applib/ui/kino/kino_reel_gbitmap_sequence.c | 2 +- src/fw/applib/ui/kino/kino_reel_pdcs.c | 2 +- src/fw/applib/ui/layer.c | 2 +- src/fw/applib/ui/menu_layer.c | 2 +- src/fw/applib/ui/progress_window.c | 2 +- src/fw/applib/ui/property_animation.c | 2 +- src/fw/applib/ui/rotbmp_pair_layer.c | 2 +- src/fw/applib/ui/scroll_layer.c | 2 +- src/fw/applib/ui/selection_layer.c | 2 +- src/fw/applib/ui/speaker.c | 2 +- src/fw/applib/ui/text_layer.c | 2 +- src/fw/applib/ui/vibes.c | 2 +- src/fw/applib/ui/window.c | 2 +- src/fw/applib/ui/window_manager.c | 2 +- src/fw/applib/ui/window_stack.c | 2 +- src/fw/applib/voice/dictation_session.c | 2 +- src/fw/applib/voice/voice_window.c | 2 +- src/fw/applib/worker.c | 2 +- src/fw/apps/core/progress_ui.c | 2 +- src/fw/apps/demo/activity_demo/activity_demo.c | 2 +- src/fw/apps/demo/activity_test/activity_test.c | 2 +- src/fw/apps/demo/click/click.c | 2 +- src/fw/apps/demo/data_logging_test/data_logging_test.c | 2 +- src/fw/apps/demo/deadlock/deadlock.c | 2 +- src/fw/apps/demo/double_tap_test/double_tap_test.c | 2 +- src/fw/apps/demo/event_service/event_service.c | 2 +- src/fw/apps/demo/flash_demo.c | 2 +- src/fw/apps/demo/flash_diagnostic/flash_diagnostic.c | 2 +- src/fw/apps/demo/flash_prof/flash_prof.c | 2 +- src/fw/apps/demo/fps_test.c | 2 +- src/fw/apps/demo/gfx_tests/tests.c | 2 +- src/fw/apps/demo/idl/idl_demo.c | 2 +- src/fw/apps/demo/kill_bt/kill_bt.c | 2 +- src/fw/apps/demo/menu/menu.c | 2 +- src/fw/apps/demo/menu_right_icon/menu_layer_right_icon.c | 2 +- src/fw/apps/demo/menu_round/menu_round.c | 2 +- src/fw/apps/demo/movable_line/movable_line.c | 2 +- src/fw/apps/demo/number_field/number_field.c | 2 +- src/fw/apps/demo/option_menu/option_menu_demo.c | 2 +- src/fw/apps/demo/pebble_colors/pebble_colors.c | 2 +- src/fw/apps/demo/pebble_shapes/pebble_shapes.c | 2 +- src/fw/apps/demo/persist/persist.c | 2 +- src/fw/apps/demo/profile_mutexes/profile_mutexes.c | 2 +- src/fw/apps/demo/progress/progress.c | 2 +- src/fw/apps/demo/scroll/scroll.c | 2 +- src/fw/apps/demo/shared/test_args_rx.c | 2 +- src/fw/apps/demo/simple_menu/simple_menu.c | 2 +- src/fw/apps/demo/stroke_width/stroke_width.c | 2 +- src/fw/apps/demo/swap_layer/swap_layer_demo.c | 2 +- src/fw/apps/demo/temperature_demo/temperature_demo.c | 2 +- src/fw/apps/demo/test_args_sender/test_args_tx.c | 2 +- src/fw/apps/demo/test_bluetooth/test_bluetooth.c | 2 +- src/fw/apps/demo/test_core_dump/test_core_dump.c | 2 +- src/fw/apps/demo/test_sys_timer/test_sys_timer.c | 2 +- src/fw/apps/demo/text_clipping/text_clipping.c | 2 +- src/fw/apps/demo/text_flow/text_flow.c | 2 +- src/fw/apps/demo/text_layout/text_layout.c | 2 +- src/fw/apps/demo/text_spacing/text_spacing.c | 2 +- src/fw/apps/demo/timer/timer.c | 2 +- src/fw/apps/demo/vibe_and_logs/vibe_and_logs.c | 2 +- src/fw/apps/prf/mfg_accel.c | 2 +- src/fw/apps/prf/mfg_als.c | 2 +- src/fw/apps/prf/mfg_charge.c | 2 +- src/fw/apps/prf/mfg_mag.c | 2 +- src/fw/apps/prf/mfg_mic_getafix.c | 2 +- src/fw/apps/prf/mfg_mic_obelix.c | 2 +- src/fw/apps/prf/mfg_test_aging.c | 2 +- src/fw/apps/prf/mfg_touch.c | 2 +- .../prf/recovery_first_use/getting_started_button_combo.c | 2 +- src/fw/apps/prf/recovery_first_use/recovery_first_use.c | 2 +- src/fw/apps/sdk/app.c | 2 +- src/fw/apps/system/alarms/alarm_detail.c | 2 +- src/fw/apps/system/alarms/alarm_editor.c | 2 +- src/fw/apps/system/alarms/alarms.c | 2 +- src/fw/apps/system/app_fetch_ui.c | 2 +- src/fw/apps/system/health/activity_summary_card.c | 2 +- src/fw/apps/system/health/card_view.c | 2 +- src/fw/apps/system/health/data.c | 2 +- src/fw/apps/system/health/detail_card.c | 2 +- src/fw/apps/system/health/health.c | 2 +- src/fw/apps/system/health/hr_summary_card.c | 2 +- src/fw/apps/system/health/progress.c | 2 +- src/fw/apps/system/health/sleep_summary_card.c | 2 +- src/fw/apps/system/launcher/default/app_glance_workout.c | 2 +- src/fw/apps/system/music.c | 2 +- src/fw/apps/system/reminders/reminder.c | 2 +- src/fw/apps/system/send_text/send_text.c | 2 +- src/fw/apps/system/settings/bluetooth.c | 2 +- src/fw/apps/system/settings/display.c | 2 +- src/fw/apps/system/settings/factory_reset.c | 2 +- src/fw/apps/system/settings/notifications.c | 2 +- src/fw/apps/system/settings/quick_launch_setup_menu.c | 2 +- src/fw/apps/system/settings/quiet_time.c | 2 +- src/fw/apps/system/settings/remote.c | 2 +- src/fw/apps/system/settings/system.c | 2 +- src/fw/apps/system/settings/vibe_patterns.c | 2 +- src/fw/apps/system/timeline/layer.c | 2 +- src/fw/apps/system/timeline/model.c | 2 +- src/fw/apps/system/timeline/peek_layer.c | 2 +- src/fw/apps/system/timeline/relbar.c | 2 +- src/fw/apps/system/timeline/timeline.c | 2 +- src/fw/apps/system/weather/layout.c | 2 +- src/fw/apps/system/workout/active.c | 2 +- src/fw/apps/system/workout/selection.c | 2 +- src/fw/apps/system/workout/sports.c | 2 +- src/fw/apps/system/workout/summary.c | 2 +- src/fw/apps/system/workout/workout.c | 2 +- src/fw/assert.c | 2 +- src/fw/comm/ble/gap_le_advert.c | 2 +- src/fw/comm/ble/gap_le_connect.c | 2 +- src/fw/comm/ble/gap_le_connect_params.c | 2 +- src/fw/comm/ble/gap_le_connection.c | 2 +- src/fw/comm/ble/gap_le_scan.c | 2 +- src/fw/comm/ble/gap_le_slave_reconnect.c | 2 +- src/fw/comm/ble/gatt.c | 2 +- src/fw/comm/ble/gatt_client_accessors.c | 2 +- src/fw/comm/ble/gatt_client_discovery.c | 2 +- src/fw/comm/ble/gatt_client_subscriptions.c | 2 +- src/fw/comm/ble/gatt_service_changed.c | 2 +- src/fw/comm/ble/kernel_le_client/ams/ams.c | 2 +- src/fw/comm/ble/kernel_le_client/ams/ams_util.c | 2 +- src/fw/comm/ble/kernel_le_client/ancs/ancs.c | 2 +- src/fw/comm/ble/kernel_le_client/ancs/ancs_util.c | 2 +- src/fw/comm/ble/kernel_le_client/app_launch/app_launch.c | 2 +- src/fw/comm/ble/kernel_le_client/dis/dis.c | 2 +- src/fw/comm/ble/kernel_le_client/kernel_le_client.c | 2 +- src/fw/comm/ble/kernel_le_client/ppogatt/ppogatt.c | 2 +- src/fw/comm/bluetooth_analytics.c | 2 +- src/fw/comm/internals/bt_conn_mgr.c | 2 +- src/fw/console/control_protocol.c | 2 +- src/fw/console/prompt.c | 2 +- src/fw/console/prompt_commands.c | 2 +- src/fw/console/prompt_commands.h | 2 +- src/fw/console/pulse_pp.c | 2 +- src/fw/console/serial_console.c | 2 +- src/fw/debug/app_logging.c | 2 +- src/fw/debug/debug.c | 2 +- src/fw/debug/debug_reboot_reason.c | 2 +- src/fw/debug/flash_logging.c | 2 +- src/fw/debug/power_tracking.c | 2 +- src/fw/debug/power_tracking.h | 2 +- src/fw/drivers/ambient/ambient_light_opt3001.c | 2 +- src/fw/drivers/ambient/ambient_light_w1160.c | 2 +- src/fw/drivers/backlight/aw2016.c | 2 +- src/fw/drivers/backlight/aw9364e.c | 2 +- src/fw/drivers/display/sf32lb/display_jdi.c | 2 +- src/fw/drivers/exti/sf32lb.c | 2 +- src/fw/drivers/flash/flash_api.c | 2 +- src/fw/drivers/flash/flash_crc.c | 2 +- src/fw/drivers/flash/flash_erase.c | 2 +- src/fw/drivers/hrm/gh3x2x.c | 2 +- src/fw/drivers/i2c/common.c | 2 +- src/fw/drivers/imu/lis2dw12/lis2dw12.c | 2 +- src/fw/drivers/imu/lsm6dso/lsm6dso.c | 2 +- src/fw/drivers/imu/mmc5603nj/mmc5603nj.c | 2 +- src/fw/drivers/mic/nrf5/pdm.c | 2 +- src/fw/drivers/mic/qemu/mic.c | 2 +- src/fw/drivers/mic/sf32lb52/pdm.c | 2 +- src/fw/drivers/nrf5/qspi.c | 2 +- src/fw/drivers/pmic/npm1300.c | 2 +- src/fw/drivers/pressure/bmp390.c | 2 +- src/fw/drivers/qemu/qemu_accel.c | 2 +- src/fw/drivers/qemu/qemu_battery.c | 2 +- src/fw/drivers/qemu/qemu_rtc_hal.c | 2 +- src/fw/drivers/qemu/qemu_serial.c | 2 +- src/fw/drivers/qemu/qemu_serial_util.c | 2 +- src/fw/drivers/rng/sf32lb.c | 2 +- src/fw/drivers/rtc/nrf5.c | 2 +- src/fw/drivers/rtc/sf32lb.c | 2 +- src/fw/drivers/speaker/nrf5/da7212.c | 2 +- src/fw/drivers/speaker/sf32lb52/audec.c | 2 +- src/fw/drivers/task_watchdog.c | 2 +- src/fw/drivers/temperature/sf32lb.c | 2 +- src/fw/drivers/touch/cst816/cst816.c | 2 +- src/fw/drivers/uart/nrf5.c | 2 +- src/fw/drivers/vibe/vibe_aw86225.c | 2 +- src/fw/drivers/vibe/vibe_aw8623x.c | 2 +- src/fw/drivers/vibe/vibe_drv2604.c | 2 +- src/fw/drivers/watchdog/nrf5.c | 2 +- src/fw/drivers/watchdog/sf32lb.c | 2 +- src/fw/flash_region/flash_region.c | 2 +- src/fw/kernel/core_dump.c | 2 +- src/fw/kernel/coredump_extra_regions.c | 2 +- src/fw/kernel/event_loop.c | 2 +- src/fw/kernel/events.c | 2 +- src/fw/kernel/fault_handling.c | 2 +- src/fw/kernel/panic.c | 2 +- src/fw/kernel/system_message.c | 2 +- src/fw/kernel/system_versions.c | 2 +- src/fw/kernel/task_timer.c | 2 +- src/fw/kernel/util/factory_reset.c | 2 +- src/fw/kernel/util/fw_reset.c | 2 +- src/fw/kernel/util/standby.c | 2 +- src/fw/libos_platform.c | 2 +- src/fw/main.c | 2 +- src/fw/mfg/mfg_serials.c | 2 +- src/fw/popups/alarm_popup.c | 2 +- src/fw/popups/bluetooth_pairing_ui.c | 2 +- src/fw/popups/notifications/notification_window.c | 2 +- src/fw/popups/phone_ui.c | 2 +- src/fw/popups/timeline/peek.c | 2 +- src/fw/popups/timeline/timeline_item_layer.c | 2 +- src/fw/process_management/app_custom_icon.c | 2 +- src/fw/process_management/app_install_manager.c | 2 +- src/fw/process_management/app_manager.c | 2 +- src/fw/process_management/app_run_state.c | 2 +- src/fw/process_management/launcher_app_message.c | 2 +- src/fw/process_management/process_manager.c | 2 +- src/fw/process_management/worker_manager.c | 2 +- src/fw/resource/resource.c | 2 +- src/fw/resource/resource_storage.c | 2 +- src/fw/resource/resource_storage_file.c | 2 +- src/fw/resource/resource_storage_flash.c | 2 +- src/fw/resource/resource_syscalls.c | 2 +- src/fw/resource/system_resource.c | 2 +- src/fw/services/accel_manager/service.c | 2 +- src/fw/services/activity/activity.c | 2 +- src/fw/services/activity/activity_insights.c | 2 +- src/fw/services/activity/activity_metrics.c | 2 +- src/fw/services/activity/activity_sessions.c | 2 +- src/fw/services/activity/insights_settings.c | 2 +- .../activity/kraepelin/activity_algorithm_kraepelin.c | 2 +- src/fw/services/activity/kraepelin/kraepelin_algorithm.c | 2 +- src/fw/services/activity/workout_service.c | 2 +- src/fw/services/alarms/alarm.c | 2 +- src/fw/services/analytics/native.c | 2 +- src/fw/services/app_cache/service.c | 2 +- src/fw/services/app_fetch_endpoint/service.c | 2 +- src/fw/services/app_inbox_service/service.c | 2 +- src/fw/services/app_message/app_message_receiver.c | 2 +- src/fw/services/app_message/app_message_sender.c | 2 +- src/fw/services/app_order_endpoint/service.c | 2 +- src/fw/services/app_outbox_service/service.c | 2 +- src/fw/services/audio_endpoint/service.c | 2 +- src/fw/services/battery/battery_monitor.c | 2 +- src/fw/services/battery/nrf_fuel_gauge/battery_state.c | 2 +- src/fw/services/battery/voltage/battery_curve.c | 2 +- src/fw/services/battery/voltage/battery_state.c | 2 +- src/fw/services/blob_db/api.c | 2 +- src/fw/services/blob_db/app_db.c | 2 +- src/fw/services/blob_db/app_glance_db.c | 2 +- src/fw/services/blob_db/endpoint.c | 2 +- src/fw/services/blob_db/endpoint2.c | 2 +- src/fw/services/blob_db/health_db.c | 2 +- src/fw/services/blob_db/ios_notif_pref_db.c | 2 +- src/fw/services/blob_db/notif_db.c | 2 +- src/fw/services/blob_db/pin_db.c | 2 +- src/fw/services/blob_db/reminder_db.c | 2 +- src/fw/services/blob_db/settings_blob_db.c | 2 +- src/fw/services/blob_db/sync.c | 2 +- src/fw/services/blob_db/sync_util.c | 2 +- src/fw/services/blob_db/timeline_item_storage.c | 2 +- src/fw/services/blob_db/watch_app_prefs_db.c | 2 +- src/fw/services/blob_db/weather_db.c | 2 +- src/fw/services/bluetooth/ble_hrm.c | 2 +- src/fw/services/bluetooth/bluetooth_ctl.c | 2 +- .../services/bluetooth/bluetooth_persistent_storage_debug.c | 2 +- .../services/bluetooth/bluetooth_persistent_storage_normal.c | 2 +- src/fw/services/bluetooth/bluetooth_persistent_storage_prf.c | 2 +- src/fw/services/bluetooth/bonding.c | 2 +- src/fw/services/bluetooth/local_addr.c | 2 +- src/fw/services/bluetooth/pairability.c | 2 +- src/fw/services/bluetooth/pebble_pairing_service.c | 2 +- src/fw/services/bluetooth/pp_ble_control.c | 2 +- src/fw/services/clock/service.c | 2 +- src/fw/services/comm_session/app_session_capabilities.c | 2 +- src/fw/services/comm_session/default_kernel_receiver.c | 2 +- src/fw/services/comm_session/default_kernel_sender.c | 2 +- src/fw/services/comm_session/meta_endpoint.c | 2 +- src/fw/services/comm_session/session.c | 2 +- src/fw/services/comm_session/session_receive_router.c | 2 +- src/fw/services/comm_session/session_remote_version.c | 2 +- src/fw/services/compositor/compositor.c | 2 +- .../compositor/default/compositor_port_hole_transitions.c | 2 +- .../compositor/default/compositor_slide_transitions.c | 2 +- src/fw/services/compositor/screenshot_pp.c | 2 +- src/fw/services/contacts/contacts.c | 2 +- src/fw/services/cron/service.c | 2 +- src/fw/services/data_logging/dls_endpoint.c | 2 +- src/fw/services/data_logging/dls_list.c | 2 +- src/fw/services/data_logging/dls_main.c | 2 +- src/fw/services/data_logging/dls_storage.c | 2 +- src/fw/services/data_logging/dls_syscalls.c | 2 +- src/fw/services/debounced_connection_service/service.c | 2 +- src/fw/services/ecompass/correction.c | 2 +- src/fw/services/ecompass/service.c | 2 +- src/fw/services/event_service/service.c | 2 +- src/fw/services/evented_timer/service.c | 2 +- src/fw/services/filesystem/flash_translation.c | 2 +- src/fw/services/filesystem/pfs.c | 2 +- src/fw/services/firmware_update/service.c | 2 +- src/fw/services/get_bytes/get_bytes.c | 2 +- src/fw/services/get_bytes/get_bytes_storage_coredump.c | 2 +- src/fw/services/health_sync_endpoint/service.c | 2 +- src/fw/services/hrm/hrm_manager.c | 2 +- src/fw/services/i18n/i18n.c | 2 +- src/fw/services/i18n/syscalls.c | 2 +- src/fw/services/light/service.c | 2 +- src/fw/services/music/endpoint.c | 2 +- src/fw/services/music/service.c | 2 +- src/fw/services/new_timer/new_timer.c | 2 +- src/fw/services/notifications/ancs/ancs_filtering.c | 2 +- src/fw/services/notifications/ancs/ancs_item.c | 2 +- src/fw/services/notifications/ancs/ancs_notifications.c | 2 +- src/fw/services/notifications/ancs/nexmo.c | 2 +- src/fw/services/notifications/do_not_disturb.c | 2 +- src/fw/services/notifications/do_not_disturb_toggle.c | 2 +- src/fw/services/notifications/notification_storage.c | 4 ++-- src/fw/services/notifications/notifications.c | 2 +- src/fw/services/persist/service.c | 2 +- src/fw/services/phone_call/service.c | 2 +- src/fw/services/phone_pp/service.c | 2 +- src/fw/services/ping/service.c | 2 +- src/fw/services/poll_remote/service.c | 2 +- src/fw/services/prf_update/service.c | 2 +- src/fw/services/process_management/app_order_storage.c | 2 +- src/fw/services/process_management/app_storage.c | 2 +- src/fw/services/process_management/process_loader_storage.c | 2 +- src/fw/services/protobuf_log/protobuf_log.c | 2 +- src/fw/services/put_bytes/put_bytes.c | 2 +- src/fw/services/put_bytes/put_bytes_storage.c | 2 +- src/fw/services/regular_timer/service.c | 2 +- src/fw/services/services.c | 2 +- src/fw/services/settings/settings_file.c | 2 +- src/fw/services/settings/settings_raw_iter.c | 2 +- src/fw/services/shared_prf_storage/shared_prf_storage.c | 2 +- src/fw/services/shared_prf_storage/shared_prf_storage_debug.c | 2 +- src/fw/services/speaker/speaker_service.c | 2 +- src/fw/services/stationary/service.c | 2 +- src/fw/services/system_task/service.c | 2 +- src/fw/services/tick_timer/service.c | 2 +- src/fw/services/timeline/actions_endpoint.c | 2 +- src/fw/services/timeline/alarm_layout.c | 2 +- src/fw/services/timeline/attribute.c | 2 +- src/fw/services/timeline/attributes_actions.c | 2 +- src/fw/services/timeline/calendar.c | 2 +- src/fw/services/timeline/calendar_layout.c | 2 +- src/fw/services/timeline/event.c | 2 +- src/fw/services/timeline/generic_layout.c | 2 +- src/fw/services/timeline/item.c | 2 +- src/fw/services/timeline/notification_layout.c | 2 +- src/fw/services/timeline/peek.c | 2 +- src/fw/services/timeline/reminders.c | 2 +- src/fw/services/timeline/sports_layout.c | 2 +- src/fw/services/timeline/swap_layer.c | 2 +- src/fw/services/timeline/timeline.c | 2 +- src/fw/services/timeline/timeline_actions.c | 2 +- src/fw/services/timeline/timeline_layout.c | 2 +- src/fw/services/timeline/timeline_layout_animations.c | 2 +- src/fw/services/timeline/timeline_resources.c | 2 +- src/fw/services/timeline/weather_layout.c | 2 +- src/fw/services/timezone_database/service.c | 2 +- src/fw/services/touch/touch.c | 2 +- src/fw/services/vibe_pattern/service.c | 2 +- src/fw/services/vibes/vibe_client.c | 2 +- src/fw/services/vibes/vibe_score.c | 2 +- src/fw/services/voice/voice.c | 2 +- src/fw/services/voice/voice_speex.c | 4 ++-- src/fw/services/voice_endpoint/service.c | 2 +- src/fw/services/wakeup/service.c | 2 +- src/fw/services/weather/weather_service.c | 2 +- src/fw/shell/normal/app_idle_timeout.c | 2 +- src/fw/shell/normal/battery_ui.c | 2 +- src/fw/shell/normal/prefs.c | 2 +- src/fw/shell/normal/prefs_sync.c | 2 +- src/fw/shell/normal/shell_event_loop.c | 2 +- src/fw/shell/normal/system_app_state_machine.c | 2 +- src/fw/shell/normal/watchface.c | 2 +- src/fw/shell/sdk/watchface.c | 2 +- src/fw/syscall/event_syscalls.c | 2 +- src/fw/syscall/syscall.c | 2 +- src/fw/syscall/syscall_internal.c | 2 +- src/fw/system/bootbits.c | 2 +- src/fw/system/firmware_storage.c | 2 +- src/fw/system/hexdump.c | 2 +- src/fw/system/passert.c | 2 +- src/fw/system/passert.h | 4 ++-- src/fw/system/reboot_reason.c | 2 +- src/fw/system/testinfra.c | 2 +- src/fw/util/buffer.c | 2 +- src/fw/util/generic_attribute.c | 2 +- src/fw/util/mbuf.c | 2 +- src/fw/util/pstring.c | 2 +- src/fw/util/shared_circular_buffer.c | 2 +- src/fw/util/util_platform.c | 2 +- subsys/logging/Kconfig.template.log_level | 2 +- subsys/logging/logging.c | 2 +- subsys/logging/logging_private.h | 2 +- tests/fakes/fake_app_timer.h | 2 +- tests/fakes/fake_framebuffer.c | 2 +- tests/fakes/fake_session.c | 2 +- tests/fw/applib/test_app_message.c | 2 +- tests/fw/applib/test_persist.c | 2 +- tests/fw/comm/test_ancs_app_storage.c | 2 +- .../fw/services/activity/kraepelin_reference/helper_worker.h | 2 +- tests/fw/services/activity/kraepelin_reference/raw_stats.c | 2 +- tests/fw/services/activity/test_activity.c | 2 +- tests/fw/services/activity/test_kraepelin_algorithm.c | 2 +- tests/fw/services/comm_session/test_session_receive_router.c | 2 +- tests/fw/services/protobuf_log/test_protobuf_log.c | 2 +- tests/fw/services/test_app_cache.c | 2 +- tests/fw/services/test_app_fetch_endpoint.c | 2 +- tests/fw/services/test_pfs.c | 2 +- tests/fw/services/test_put_bytes.c | 2 +- tests/fw/services/timeline/test_calendar.c | 2 +- tests/fw/services/timeline/test_timeline_peek_event.c | 2 +- tests/fw/test_alarm_common.h | 2 +- tests/fw/test_battery_monitor.c | 2 +- tests/fw/test_data_logging.c | 2 +- tests/fw/test_flash_logging.c | 2 +- tests/stubs/stubs_hexdump.h | 2 +- tests/stubs/stubs_logging.h | 2 +- third_party/memfault/port/src/memfault_chunk_collector.c | 2 +- third_party/memfault/port/src/memfault_platform_port.c | 2 +- third_party/moddable/moddable | 2 +- third_party/nimble/port/include/console/console.h | 2 +- third_party/nimble/port/include/nimble/nimble_npl_os_log.h | 2 +- third_party/nimble/port/src/npl_os_pebble.c | 2 +- third_party/nimble/transport/hci_sf32lb52.c | 2 +- 479 files changed, 482 insertions(+), 482 deletions(-) rename include/{ => pbl}/logging/binary_logging.h (99%) rename include/{ => pbl}/logging/log_hashing.h (100%) rename {src/fw/system => include/pbl/logging}/logging.h (99%) diff --git a/include/logging/binary_logging.h b/include/pbl/logging/binary_logging.h similarity index 99% rename from include/logging/binary_logging.h rename to include/pbl/logging/binary_logging.h index 815ef0ef07..cffa1d2e37 100644 --- a/include/logging/binary_logging.h +++ b/include/pbl/logging/binary_logging.h @@ -3,7 +3,7 @@ #pragma once -#include +#include /* * This file defines the structures required for Binary Logging. Please see * https://docs.google.com/document/d/1AyRGwr8CiilAViha56EiuRSZFiW0fWMcsTfzkNxByZ8 diff --git a/include/logging/log_hashing.h b/include/pbl/logging/log_hashing.h similarity index 100% rename from include/logging/log_hashing.h rename to include/pbl/logging/log_hashing.h diff --git a/src/fw/system/logging.h b/include/pbl/logging/logging.h similarity index 99% rename from src/fw/system/logging.h rename to include/pbl/logging/logging.h index 8d8fe22789..6b2c3f7c41 100644 --- a/src/fw/system/logging.h +++ b/include/pbl/logging/logging.h @@ -81,7 +81,7 @@ int pbl_log_get_bin_format(char* buffer, int buffer_len, const uint8_t log_level #endif #ifdef CONFIG_LOG_HASHED - #include + #include #endif #if MEMFAULT && defined(CONFIG_LOG_HASHED) && __has_include("memfault/core/log.h") diff --git a/include/pbl/services/activity/activity_private.h b/include/pbl/services/activity/activity_private.h index a12e3cd850..c8f02e899f 100644 --- a/include/pbl/services/activity/activity_private.h +++ b/include/pbl/services/activity/activity_private.h @@ -12,7 +12,7 @@ #include "pbl/services/data_logging/data_logging_service.h" #include "pbl/services/settings/settings_file.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include diff --git a/src/bluetooth-fw/nimble/advert.c b/src/bluetooth-fw/nimble/advert.c index 8f1363fd90..9e339111ee 100644 --- a/src/bluetooth-fw/nimble/advert.c +++ b/src/bluetooth-fw/nimble/advert.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/bluetooth-fw/nimble/gap_le_connect.c b/src/bluetooth-fw/nimble/gap_le_connect.c index bf24154cb1..4e657bcb9e 100644 --- a/src/bluetooth-fw/nimble/gap_le_connect.c +++ b/src/bluetooth-fw/nimble/gap_le_connect.c @@ -3,7 +3,7 @@ #include #include -#include +#include #include "nimble_type_conversions.h" diff --git a/src/bluetooth-fw/nimble/gap_le_device_name.c b/src/bluetooth-fw/nimble/gap_le_device_name.c index f8f25c2cca..c84182e74b 100644 --- a/src/bluetooth-fw/nimble/gap_le_device_name.c +++ b/src/bluetooth-fw/nimble/gap_le_device_name.c @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include "nimble_gattc_op_queue.h" #include "nimble_type_conversions.h" diff --git a/src/bluetooth-fw/nimble/gatt.c b/src/bluetooth-fw/nimble/gatt.c index e167ab243a..6ed73b2c07 100644 --- a/src/bluetooth-fw/nimble/gatt.c +++ b/src/bluetooth-fw/nimble/gatt.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include "nimble_type_conversions.h" diff --git a/src/bluetooth-fw/nimble/gatt_client_discovery.c b/src/bluetooth-fw/nimble/gatt_client_discovery.c index 1f2036bf13..a3498dd0f6 100644 --- a/src/bluetooth-fw/nimble/gatt_client_discovery.c +++ b/src/bluetooth-fw/nimble/gatt_client_discovery.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/bluetooth-fw/nimble/gatt_client_operations.c b/src/bluetooth-fw/nimble/gatt_client_operations.c index 78c8f2ea7a..716c707183 100644 --- a/src/bluetooth-fw/nimble/gatt_client_operations.c +++ b/src/bluetooth-fw/nimble/gatt_client_operations.c @@ -7,7 +7,7 @@ #include #include -#include +#include PBL_LOG_MODULE_DECLARE(bt, CONFIG_BT_LOG_LEVEL); diff --git a/src/bluetooth-fw/nimble/init.c b/src/bluetooth-fw/nimble/init.c index 7f9b3dd1b0..8fa6c76969 100644 --- a/src/bluetooth-fw/nimble/init.c +++ b/src/bluetooth-fw/nimble/init.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include "nimble_store.h" diff --git a/src/bluetooth-fw/nimble/nimble_store.c b/src/bluetooth-fw/nimble/nimble_store.c index a1e6191ae4..e1a342de72 100644 --- a/src/bluetooth-fw/nimble/nimble_store.c +++ b/src/bluetooth-fw/nimble/nimble_store.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/bluetooth-fw/nimble/nimble_type_conversions.c b/src/bluetooth-fw/nimble/nimble_type_conversions.c index f18f6e0fa1..e66aa5d04c 100644 --- a/src/bluetooth-fw/nimble/nimble_type_conversions.c +++ b/src/bluetooth-fw/nimble/nimble_type_conversions.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include PBL_LOG_MODULE_DECLARE(bt, CONFIG_BT_LOG_LEVEL); diff --git a/src/bluetooth-fw/nimble/pairing_confirm.c b/src/bluetooth-fw/nimble/pairing_confirm.c index 3378a3e469..d72fe6ff64 100644 --- a/src/bluetooth-fw/nimble/pairing_confirm.c +++ b/src/bluetooth-fw/nimble/pairing_confirm.c @@ -5,7 +5,7 @@ #include #include #include -#include +#include PBL_LOG_MODULE_DECLARE(bt, CONFIG_BT_LOG_LEVEL); diff --git a/src/bluetooth-fw/nimble/pebble_pairing_service.c b/src/bluetooth-fw/nimble/pebble_pairing_service.c index cd34303b74..1c1cdf6ede 100644 --- a/src/bluetooth-fw/nimble/pebble_pairing_service.c +++ b/src/bluetooth-fw/nimble/pebble_pairing_service.c @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include "nimble_type_conversions.h" diff --git a/src/bluetooth-fw/nimble/ppog_reversed_service.c b/src/bluetooth-fw/nimble/ppog_reversed_service.c index 2ac1172314..a95754dff4 100644 --- a/src/bluetooth-fw/nimble/ppog_reversed_service.c +++ b/src/bluetooth-fw/nimble/ppog_reversed_service.c @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/bluetooth-fw/nimble/responsiveness.c b/src/bluetooth-fw/nimble/responsiveness.c index 5c1a3c2452..1b8b8968ab 100644 --- a/src/bluetooth-fw/nimble/responsiveness.c +++ b/src/bluetooth-fw/nimble/responsiveness.c @@ -3,7 +3,7 @@ #include #include -#include +#include #include "nimble_type_conversions.h" diff --git a/src/bluetooth-fw/qemu/init.c b/src/bluetooth-fw/qemu/init.c index 18a1111175..9570d60914 100644 --- a/src/bluetooth-fw/qemu/init.c +++ b/src/bluetooth-fw/qemu/init.c @@ -5,7 +5,7 @@ #include "drivers/qemu/qemu_serial.h" #include "drivers/qemu/qemu_settings.h" #include "kernel/event_loop.h" -#include "system/logging.h" +#include #include #include diff --git a/src/bluetooth-fw/qemu/qemu_transport.c b/src/bluetooth-fw/qemu/qemu_transport.c index a65b2a8c7c..aa1f30fbac 100644 --- a/src/bluetooth-fw/qemu/qemu_transport.c +++ b/src/bluetooth-fw/qemu/qemu_transport.c @@ -8,7 +8,7 @@ #include "pbl/services/comm_session/session_transport.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "comm/bt_lock.h" diff --git a/src/bluetooth-fw/stub/init.c b/src/bluetooth-fw/stub/init.c index 80ba99735d..1f5173f6d1 100644 --- a/src/bluetooth-fw/stub/init.c +++ b/src/bluetooth-fw/stub/init.c @@ -3,7 +3,7 @@ #include "comm/bt_lock.h" #include "kernel/event_loop.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/applib/accel_service_private.h b/src/fw/applib/accel_service_private.h index bdb6cc4ab2..d6f8fae918 100644 --- a/src/fw/applib/accel_service_private.h +++ b/src/fw/applib/accel_service_private.h @@ -6,7 +6,7 @@ #include "accel_service.h" #include "event_service_client.h" -#include "system/logging.h" +#include typedef struct AccelServiceState { // Configuration for our data callback subscription to the accel manager diff --git a/src/fw/applib/app.c b/src/fw/applib/app.c index 36548638d8..df8c299a2f 100644 --- a/src/fw/applib/app.c +++ b/src/fw/applib/app.c @@ -11,7 +11,7 @@ #include "process_management/app_manager.h" #include "process_state/app_state/app_state.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/profiler.h" static void prv_render_app(void) { diff --git a/src/fw/applib/app_inbox.c b/src/fw/applib/app_inbox.c index a028ca552b..6a71497874 100644 --- a/src/fw/applib/app_inbox.c +++ b/src/fw/applib/app_inbox.c @@ -6,7 +6,7 @@ #include "applib/applib_malloc.auto.h" #include "pbl/services/app_inbox_service.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" AppInbox *app_inbox_create_and_register(size_t buffer_size, uint32_t min_num_messages, diff --git a/src/fw/applib/app_logging.c b/src/fw/applib/app_logging.c index 3f295a2585..d0a5db248a 100644 --- a/src/fw/applib/app_logging.c +++ b/src/fw/applib/app_logging.c @@ -10,7 +10,7 @@ #include "syscall/syscall.h" #include "process_management/app_manager.h" #include "pbl/services/comm_session/session.h" -#include "system/logging.h" +#include #include "system/passert.h" void app_log_vargs(uint8_t log_level, const char* src_filename, int src_line_number, const char* fmt, va_list args) { diff --git a/src/fw/applib/app_logging.h b/src/fw/applib/app_logging.h index 70cb800327..ed0a18c33d 100644 --- a/src/fw/applib/app_logging.h +++ b/src/fw/applib/app_logging.h @@ -12,7 +12,7 @@ // FIXME PBL-1629: move needed declarations into applib #include "logging/logging_private.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/applib/app_message/app_message.c b/src/fw/applib/app_message/app_message.c index a87ee293a4..be4096db00 100644 --- a/src/fw/applib/app_message/app_message.c +++ b/src/fw/applib/app_message/app_message.c @@ -7,7 +7,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/comm_session/protocol.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include // -------- Initialization ---------------------------------------------------------------------- // diff --git a/src/fw/applib/app_message/app_message_inbox.c b/src/fw/applib/app_message/app_message_inbox.c index e72320ec0e..bfebb6d810 100644 --- a/src/fw/applib/app_message/app_message_inbox.c +++ b/src/fw/applib/app_message/app_message_inbox.c @@ -4,7 +4,7 @@ #include "applib/app_message/app_message_internal.h" #include "applib/app_message/app_message_receiver.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "syscall/syscall.h" AppMessageResult app_message_inbox_open(AppMessageCtxInbox *inbox, size_t size_inbound) { diff --git a/src/fw/applib/app_message/app_message_outbox.c b/src/fw/applib/app_message/app_message_outbox.c index ad62009213..0d5f39e9ea 100644 --- a/src/fw/applib/app_message/app_message_outbox.c +++ b/src/fw/applib/app_message/app_message_outbox.c @@ -8,7 +8,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/comm_session/session.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/app_message/app_message_receiver.c b/src/fw/applib/app_message/app_message_receiver.c index bfdda94d72..c20853b0f0 100644 --- a/src/fw/applib/app_message/app_message_receiver.c +++ b/src/fw/applib/app_message/app_message_receiver.c @@ -5,7 +5,7 @@ #include "applib/app_message/app_message_internal.h" #include "applib/app_inbox.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include //////////////////////////////////////////////////////////////////////////////////////////////////// // All these functions execute on App Task diff --git a/src/fw/applib/bluetooth/ble_client.c b/src/fw/applib/bluetooth/ble_client.c index daf645eac2..20042986f1 100644 --- a/src/fw/applib/bluetooth/ble_client.c +++ b/src/fw/applib/bluetooth/ble_client.c @@ -10,7 +10,7 @@ #include "process_state/app_state/app_state.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/event_service_client.c b/src/fw/applib/event_service_client.c index 5f664e9e53..fd0628b0d0 100644 --- a/src/fw/applib/event_service_client.c +++ b/src/fw/applib/event_service_client.c @@ -13,7 +13,7 @@ #include "process_state/worker_state/worker_state.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" diff --git a/src/fw/applib/fonts/fonts.c b/src/fw/applib/fonts/fonts.c index f1c759c8b0..4091f85719 100644 --- a/src/fw/applib/fonts/fonts.c +++ b/src/fw/applib/fonts/fonts.c @@ -13,7 +13,7 @@ #include "resource/resource_ids.auto.h" #include "syscall/syscall.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/list.h" #include "pbl/util/size.h" diff --git a/src/fw/applib/graphics/1_bit/bitblt_private.c b/src/fw/applib/graphics/1_bit/bitblt_private.c index 9efce03c10..3261909500 100644 --- a/src/fw/applib/graphics/1_bit/bitblt_private.c +++ b/src/fw/applib/graphics/1_bit/bitblt_private.c @@ -7,7 +7,7 @@ #include "applib/graphics/graphics.h" #include "applib/graphics/graphics_private.h" #include "applib/graphics/gtypes.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/bitset.h" #include "util/graphics.h" diff --git a/src/fw/applib/graphics/1_bit/framebuffer.c b/src/fw/applib/graphics/1_bit/framebuffer.c index dbf60550c8..463d2e57b7 100644 --- a/src/fw/applib/graphics/1_bit/framebuffer.c +++ b/src/fw/applib/graphics/1_bit/framebuffer.c @@ -4,7 +4,7 @@ #include "applib/graphics/framebuffer.h" #include "applib/graphics/gtypes.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/bitset.h" diff --git a/src/fw/applib/graphics/8_bit/bitblt_private.c b/src/fw/applib/graphics/8_bit/bitblt_private.c index 572edbca32..f418e3e4c8 100644 --- a/src/fw/applib/graphics/8_bit/bitblt_private.c +++ b/src/fw/applib/graphics/8_bit/bitblt_private.c @@ -3,7 +3,7 @@ #include "../bitblt_private.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/profiler.h" #include "util/graphics.h" diff --git a/src/fw/applib/graphics/8_bit/framebuffer.c b/src/fw/applib/graphics/8_bit/framebuffer.c index 9bb863b7d5..8aefb09db9 100644 --- a/src/fw/applib/graphics/8_bit/framebuffer.c +++ b/src/fw/applib/graphics/8_bit/framebuffer.c @@ -5,7 +5,7 @@ #include "applib/graphics/gtypes.h" #include "board/display.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/profiler.h" #include "util/bitset.h" diff --git a/src/fw/applib/graphics/bitblt.c b/src/fw/applib/graphics/bitblt.c index e9d5809d5e..a8edd8acc3 100644 --- a/src/fw/applib/graphics/bitblt.c +++ b/src/fw/applib/graphics/bitblt.c @@ -4,7 +4,7 @@ #include "bitblt.h" #include "bitblt_private.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/bitset.h" diff --git a/src/fw/applib/graphics/gbitmap.c b/src/fw/applib/graphics/gbitmap.c index 43ced686a5..fa130dbcf0 100644 --- a/src/fw/applib/graphics/gbitmap.c +++ b/src/fw/applib/graphics/gbitmap.c @@ -9,7 +9,7 @@ #include "applib/applib_resource_private.h" #include "applib/graphics/graphics.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "syscall/syscall.h" diff --git a/src/fw/applib/graphics/gbitmap_png.c b/src/fw/applib/graphics/gbitmap_png.c index efbca6852a..f86294f7a4 100644 --- a/src/fw/applib/graphics/gbitmap_png.c +++ b/src/fw/applib/graphics/gbitmap_png.c @@ -5,7 +5,7 @@ #include "applib/app_logging.h" #include "applib/applib_malloc.auto.h" -#include "system/logging.h" +#include #include "syscall/syscall.h" #include "util/net.h" diff --git a/src/fw/applib/graphics/gpath.c b/src/fw/applib/graphics/gpath.c index 1236f42e51..5615eb6169 100644 --- a/src/fw/applib/graphics/gpath.c +++ b/src/fw/applib/graphics/gpath.c @@ -8,7 +8,7 @@ #include "applib/applib_malloc.auto.h" #include "applib/app_logging.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "util/swap.h" diff --git a/src/fw/applib/graphics/graphics.c b/src/fw/applib/graphics/graphics.c index 34df067cbd..60473fcb2e 100644 --- a/src/fw/applib/graphics/graphics.c +++ b/src/fw/applib/graphics/graphics.c @@ -16,7 +16,7 @@ #include "process_management/process_manager.h" #include "process_state/app_state/app_state.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "util/bitset.h" #include "util/graphics.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/graphics/text_layout.c b/src/fw/applib/graphics/text_layout.c index c2ce171ffe..ee97233d32 100644 --- a/src/fw/applib/graphics/text_layout.c +++ b/src/fw/applib/graphics/text_layout.c @@ -29,7 +29,7 @@ #include "process_state/app_state/app_state.h" #include "applib/applib_malloc.auto.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/hash.h" #include "pbl/util/iterator.h" diff --git a/src/fw/applib/graphics/text_resources.c b/src/fw/applib/graphics/text_resources.c index 85782b4e96..2b9722b3ef 100644 --- a/src/fw/applib/graphics/text_resources.c +++ b/src/fw/applib/graphics/text_resources.c @@ -9,7 +9,7 @@ #include "applib/fonts/fonts.h" #include "applib/fonts/fonts_private.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/profiler.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/graphics/utf8.c b/src/fw/applib/graphics/utf8.c index 98845f3b3e..7fc09ffdcd 100644 --- a/src/fw/applib/graphics/utf8.c +++ b/src/fw/applib/graphics/utf8.c @@ -1,7 +1,7 @@ #include "utf8.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/iterator.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/health_service.c b/src/fw/applib/health_service.c index c679fdf4b7..17314e319a 100644 --- a/src/fw/applib/health_service.c +++ b/src/fw/applib/health_service.c @@ -17,7 +17,7 @@ #include "pbl/services/activity/activity.h" #include "shell/prefs_syscalls.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/applib/legacy2/ui/animation_legacy2.c b/src/fw/applib/legacy2/ui/animation_legacy2.c index f7a4d73308..5c337b1731 100644 --- a/src/fw/applib/legacy2/ui/animation_legacy2.c +++ b/src/fw/applib/legacy2/ui/animation_legacy2.c @@ -9,7 +9,7 @@ #include "kernel/kernel_applib_state.h" #include "kernel/pbl_malloc.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "pbl/util/order.h" diff --git a/src/fw/applib/legacy2/ui/menu_layer_legacy2.c b/src/fw/applib/legacy2/ui/menu_layer_legacy2.c index 047db9c875..81b2b1ab49 100644 --- a/src/fw/applib/legacy2/ui/menu_layer_legacy2.c +++ b/src/fw/applib/legacy2/ui/menu_layer_legacy2.c @@ -4,7 +4,7 @@ #include "menu_layer_legacy2.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" extern void menu_layer_init_scroll_layer_callbacks(MenuLayer *menu_layer); diff --git a/src/fw/applib/legacy2/ui/property_animation_legacy2.c b/src/fw/applib/legacy2/ui/property_animation_legacy2.c index f1ec75a8f6..dc0780d1b3 100644 --- a/src/fw/applib/legacy2/ui/property_animation_legacy2.c +++ b/src/fw/applib/legacy2/ui/property_animation_legacy2.c @@ -9,7 +9,7 @@ #include "kernel/pbl_malloc.h" #include "system/passert.h" -#include "system/logging.h" +#include ///////////////////// // Property Animation diff --git a/src/fw/applib/legacy2/ui/text_layer_legacy2.c b/src/fw/applib/legacy2/ui/text_layer_legacy2.c index d74f7e00b5..d766a74d85 100644 --- a/src/fw/applib/legacy2/ui/text_layer_legacy2.c +++ b/src/fw/applib/legacy2/ui/text_layer_legacy2.c @@ -8,7 +8,7 @@ #include "applib/graphics/graphics.h" #include "applib/fonts/fonts.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/applib/logging.c b/src/fw/applib/logging.c index 4c8959f037..1b75f1af2a 100644 --- a/src/fw/applib/logging.c +++ b/src/fw/applib/logging.c @@ -12,8 +12,8 @@ #include "pebbleos/chip_id.h" -#include "logging/log_hashing.h" -#include "system/logging.h" +#include +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "util/net.h" diff --git a/src/fw/applib/pbl_std/pbl_std.c b/src/fw/applib/pbl_std/pbl_std.c index 2f2015dfcb..b2b1a14da3 100644 --- a/src/fw/applib/pbl_std/pbl_std.c +++ b/src/fw/applib/pbl_std/pbl_std.c @@ -10,7 +10,7 @@ #include "process_state/worker_state/worker_state.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include // Time time_t pbl_override_time(time_t *tloc) { diff --git a/src/fw/applib/pbl_std/strftime.c b/src/fw/applib/pbl_std/strftime.c index adae60cf5a..33e048627a 100644 --- a/src/fw/applib/pbl_std/strftime.c +++ b/src/fw/applib/pbl_std/strftime.c @@ -26,7 +26,7 @@ #include "applib/i18n.h" #include "pbl/services/i18n/i18n.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #define INTFMT_PADSPACE (0) diff --git a/src/fw/applib/plugin_service.c b/src/fw/applib/plugin_service.c index 79a09b6cec..040fcfd0e3 100644 --- a/src/fw/applib/plugin_service.c +++ b/src/fw/applib/plugin_service.c @@ -9,7 +9,7 @@ #include "process_state/app_state/app_state.h" #include "process_state/worker_state/worker_state.h" -#include "system/logging.h" +#include #include "system/passert.h" // --------------------------------------------------------------------------------------------------------------- diff --git a/src/fw/applib/ui/animation_timing.c b/src/fw/applib/ui/animation_timing.c index 15a3d2f41a..2f39eb495a 100644 --- a/src/fw/applib/ui/animation_timing.c +++ b/src/fw/applib/ui/animation_timing.c @@ -4,7 +4,7 @@ #include "animation_timing.h" #include "animation_interpolate.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math_fixed.h" #include "pbl/util/size.h" diff --git a/src/fw/applib/ui/app_window_stack.c b/src/fw/applib/ui/app_window_stack.c index 1738dfa772..17bb8e48f9 100644 --- a/src/fw/applib/ui/app_window_stack.c +++ b/src/fw/applib/ui/app_window_stack.c @@ -11,7 +11,7 @@ #include "kernel/event_loop.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "pbl/util/list.h" #include "pbl/util/size.h" diff --git a/src/fw/applib/ui/crumbs_layer.c b/src/fw/applib/ui/crumbs_layer.c index bf62ebffe1..8dbf618aa7 100644 --- a/src/fw/applib/ui/crumbs_layer.c +++ b/src/fw/applib/ui/crumbs_layer.c @@ -7,7 +7,7 @@ #include "shell/system_theme.h" #include "applib/ui/property_animation.h" #include "process_management/process_manager.h" -#include "system/logging.h" +#include #include "pbl/util/trig.h" typedef struct CrumbsLayerSizeConfig { diff --git a/src/fw/applib/ui/kino/kino_player.c b/src/fw/applib/ui/kino/kino_player.c index a5b0ca89d2..4c993912e7 100644 --- a/src/fw/applib/ui/kino/kino_player.c +++ b/src/fw/applib/ui/kino/kino_player.c @@ -6,7 +6,7 @@ #include #include "applib/ui/animation_interpolate.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" ////////////////////////////////// diff --git a/src/fw/applib/ui/kino/kino_reel.c b/src/fw/applib/ui/kino/kino_reel.c index 723908e2cb..3fcb21902a 100644 --- a/src/fw/applib/ui/kino/kino_reel.c +++ b/src/fw/applib/ui/kino/kino_reel.c @@ -15,7 +15,7 @@ #include "resource/resource.h" #include "resource/resource_ids.auto.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "util/net.h" KinoReel *kino_reel_create_with_resource(uint32_t resource_id) { diff --git a/src/fw/applib/ui/kino/kino_reel/scale_segmented.c b/src/fw/applib/ui/kino/kino_reel/scale_segmented.c index 05dd42267f..4e0a3d8b91 100644 --- a/src/fw/applib/ui/kino/kino_reel/scale_segmented.c +++ b/src/fw/applib/ui/kino/kino_reel/scale_segmented.c @@ -10,7 +10,7 @@ #include "applib/ui/animation_interpolate.h" #include "applib/ui/animation_timing.h" #include "applib/ui/kino/kino_reel.h" -#include "system/logging.h" +#include typedef struct { GPoint bounce; diff --git a/src/fw/applib/ui/kino/kino_reel/unfold.c b/src/fw/applib/ui/kino/kino_reel/unfold.c index 29a61ff2fb..de48c85e96 100644 --- a/src/fw/applib/ui/kino/kino_reel/unfold.c +++ b/src/fw/applib/ui/kino/kino_reel/unfold.c @@ -8,7 +8,7 @@ #include "applib/applib_malloc.auto.h" #include "pbl/util/trig.h" #include "applib/graphics/gdraw_command_private.h" -#include "system/logging.h" +#include #include "syscall/syscall.h" static AnimationProgress prv_ease_in_out_first_quarter(AnimationProgress progress) { diff --git a/src/fw/applib/ui/kino/kino_reel_gbitmap_sequence.c b/src/fw/applib/ui/kino/kino_reel_gbitmap_sequence.c index 740f1c0246..b1a6f5544b 100644 --- a/src/fw/applib/ui/kino/kino_reel_gbitmap_sequence.c +++ b/src/fw/applib/ui/kino/kino_reel_gbitmap_sequence.c @@ -6,7 +6,7 @@ #include "applib/applib_malloc.auto.h" #include "applib/graphics/gbitmap_sequence.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "pbl/util/struct.h" #include diff --git a/src/fw/applib/ui/kino/kino_reel_pdcs.c b/src/fw/applib/ui/kino/kino_reel_pdcs.c index 9fd9713a86..233c8ad0bb 100644 --- a/src/fw/applib/ui/kino/kino_reel_pdcs.c +++ b/src/fw/applib/ui/kino/kino_reel_pdcs.c @@ -9,7 +9,7 @@ #include "applib/graphics/gdraw_command_sequence.h" #include "resource/resource_ids.auto.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "util/net.h" #include "pbl/util/struct.h" diff --git a/src/fw/applib/ui/layer.c b/src/fw/applib/ui/layer.c index ecd0713c67..3f830d77cc 100644 --- a/src/fw/applib/ui/layer.c +++ b/src/fw/applib/ui/layer.c @@ -15,7 +15,7 @@ #include "kernel/pebble_tasks.h" #include "process_management/process_manager.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/ui/menu_layer.c b/src/fw/applib/ui/menu_layer.c index c51e642787..0aebaf2cc4 100644 --- a/src/fw/applib/ui/menu_layer.c +++ b/src/fw/applib/ui/menu_layer.c @@ -18,7 +18,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/process_manager.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/applib/ui/progress_window.c b/src/fw/applib/ui/progress_window.c index f266319a13..517487e2a6 100644 --- a/src/fw/applib/ui/progress_window.c +++ b/src/fw/applib/ui/progress_window.c @@ -11,7 +11,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/compositor/compositor_transitions.h" #include "pbl/services/timeline/timeline_resources.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/ui/property_animation.c b/src/fw/applib/ui/property_animation.c index 7ea796203d..bf6175fb40 100644 --- a/src/fw/applib/ui/property_animation.c +++ b/src/fw/applib/ui/property_animation.c @@ -10,7 +10,7 @@ #include "applib/app_logging.h" #include "applib/applib_malloc.auto.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "layer.h" diff --git a/src/fw/applib/ui/rotbmp_pair_layer.c b/src/fw/applib/ui/rotbmp_pair_layer.c index 789c222240..6947896be5 100644 --- a/src/fw/applib/ui/rotbmp_pair_layer.c +++ b/src/fw/applib/ui/rotbmp_pair_layer.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "rotbmp_pair_layer.h" -#include "system/logging.h" +#include #include "system/passert.h" static void set_compositing(RotBmpPairLayer *pair) { diff --git a/src/fw/applib/ui/scroll_layer.c b/src/fw/applib/ui/scroll_layer.c index e9ba8649be..cc6fa0d232 100644 --- a/src/fw/applib/ui/scroll_layer.c +++ b/src/fw/applib/ui/scroll_layer.c @@ -10,7 +10,7 @@ #include "applib/ui/shadows.h" #include "applib/ui/window.h" #include "process_management/app_manager.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/applib/ui/selection_layer.c b/src/fw/applib/ui/selection_layer.c index 3c56e5226a..269baa3d78 100644 --- a/src/fw/applib/ui/selection_layer.c +++ b/src/fw/applib/ui/selection_layer.c @@ -9,7 +9,7 @@ #include "applib/ui/window_private.h" #include "process_management/process_manager.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include // Look and feel #define DEFAULT_CELL_PADDING 10 diff --git a/src/fw/applib/ui/speaker.c b/src/fw/applib/ui/speaker.c index 20c3d32834..e2d1bc6d70 100644 --- a/src/fw/applib/ui/speaker.c +++ b/src/fw/applib/ui/speaker.c @@ -7,7 +7,7 @@ #include "kernel/events.h" #include "process_state/app_state/app_state.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include bool speaker_play_notes(const SpeakerNote *notes, uint32_t num_notes, uint8_t volume) { if (!notes || num_notes == 0) { diff --git a/src/fw/applib/ui/text_layer.c b/src/fw/applib/ui/text_layer.c index 00002ce638..c6511224d4 100644 --- a/src/fw/applib/ui/text_layer.c +++ b/src/fw/applib/ui/text_layer.c @@ -13,7 +13,7 @@ #include "applib/preferred_content_size.h" #include "process_state/app_state/app_state.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/applib/ui/vibes.c b/src/fw/applib/ui/vibes.c index 31c72ab668..2a70973a68 100644 --- a/src/fw/applib/ui/vibes.c +++ b/src/fw/applib/ui/vibes.c @@ -4,7 +4,7 @@ #include "applib/ui/vibes.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #define PATTERN_FROM_DURATIONS(pat, array) (pat) = (VibePattern){ .durations = (array), .num_segments = ARRAY_LENGTH((array)) } diff --git a/src/fw/applib/ui/window.c b/src/fw/applib/ui/window.c index 8672c99963..e10dd98f38 100644 --- a/src/fw/applib/ui/window.c +++ b/src/fw/applib/ui/window.c @@ -18,7 +18,7 @@ #include "kernel/ui/modals/modal_manager.h" #include "process_management/process_manager.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "syscall/syscall.h" diff --git a/src/fw/applib/ui/window_manager.c b/src/fw/applib/ui/window_manager.c index cf98fe9985..f18efb5957 100644 --- a/src/fw/applib/ui/window_manager.c +++ b/src/fw/applib/ui/window_manager.c @@ -11,7 +11,7 @@ #include "kernel/pebble_tasks.h" #include "kernel/ui/modals/modal_manager.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" typedef bool (*ModalWindowPredicate)(Window *window); diff --git a/src/fw/applib/ui/window_stack.c b/src/fw/applib/ui/window_stack.c index 665b5a07a5..4aa33f1c82 100644 --- a/src/fw/applib/ui/window_stack.c +++ b/src/fw/applib/ui/window_stack.c @@ -19,7 +19,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/compositor/compositor.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/struct.h" diff --git a/src/fw/applib/voice/dictation_session.c b/src/fw/applib/voice/dictation_session.c index b2f0d30833..8a235b78cf 100644 --- a/src/fw/applib/voice/dictation_session.c +++ b/src/fw/applib/voice/dictation_session.c @@ -9,7 +9,7 @@ #include "applib/applib_malloc.auto.h" #include "process_management/app_install_manager.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/applib/voice/voice_window.c b/src/fw/applib/voice/voice_window.c index 45bd9ebcd7..0336a2a2db 100644 --- a/src/fw/applib/voice/voice_window.c +++ b/src/fw/applib/voice/voice_window.c @@ -45,7 +45,7 @@ #include "pbl/services/event_service.h" #include "pbl/services/voice/voice.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" diff --git a/src/fw/applib/worker.c b/src/fw/applib/worker.c index 059af5475d..80977ca079 100644 --- a/src/fw/applib/worker.c +++ b/src/fw/applib/worker.c @@ -8,7 +8,7 @@ #include "applib/event_service_client.h" #include "syscall/syscall.h" #include "pbl/services/event_service.h" -#include "system/logging.h" +#include // ------------------------------------------------------------------------------------------------- diff --git a/src/fw/apps/core/progress_ui.c b/src/fw/apps/core/progress_ui.c index 9900432c86..09f886ef0a 100644 --- a/src/fw/apps/core/progress_ui.c +++ b/src/fw/apps/core/progress_ui.c @@ -22,7 +22,7 @@ #include "resource/resource_ids.auto.h" #include "pbl/services/firmware_update.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/apps/demo/activity_demo/activity_demo.c b/src/fw/apps/demo/activity_demo/activity_demo.c index 6ad6b00e37..79a7233321 100644 --- a/src/fw/apps/demo/activity_demo/activity_demo.c +++ b/src/fw/apps/demo/activity_demo/activity_demo.c @@ -15,7 +15,7 @@ #include "pbl/services/activity/activity_insights.h" #include "pbl/services/data_logging/data_logging_service.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "pbl/util/string.h" #include "pbl/util/trig.h" diff --git a/src/fw/apps/demo/activity_test/activity_test.c b/src/fw/apps/demo/activity_test/activity_test.c index 7ae443a642..ba514b520c 100644 --- a/src/fw/apps/demo/activity_test/activity_test.c +++ b/src/fw/apps/demo/activity_test/activity_test.c @@ -15,7 +15,7 @@ #include "pbl/services/activity/activity_private.h" #include "pbl/services/activity/kraepelin/activity_algorithm_kraepelin.h" #include "pbl/services/activity/insights_settings.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/click/click.c b/src/fw/apps/demo/click/click.c index 81de1139e7..64fa1d9a82 100644 --- a/src/fw/apps/demo/click/click.c +++ b/src/fw/apps/demo/click/click.c @@ -8,7 +8,7 @@ #include "applib/ui/ui.h" #include "applib/ui/window.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/apps/demo/data_logging_test/data_logging_test.c b/src/fw/apps/demo/data_logging_test/data_logging_test.c index c22c6b8fa9..f5a3335966 100644 --- a/src/fw/apps/demo/data_logging_test/data_logging_test.c +++ b/src/fw/apps/demo/data_logging_test/data_logging_test.c @@ -3,7 +3,7 @@ #include "data_logging_test.h" -#include "system/logging.h" +#include #include "pbl/services/comm_session/session.h" #include "pbl/services/data_logging/data_logging_service.h" #include "pbl/services/data_logging/dls_private.h" diff --git a/src/fw/apps/demo/deadlock/deadlock.c b/src/fw/apps/demo/deadlock/deadlock.c index f7b46a6f4e..3480172e7e 100644 --- a/src/fw/apps/demo/deadlock/deadlock.c +++ b/src/fw/apps/demo/deadlock/deadlock.c @@ -7,7 +7,7 @@ #include "applib/ui/app_window_stack.h" #include "applib/ui/window.h" -#include "system/logging.h" +#include #include "pbl/os/mutex.h" #include "system/profiler.h" diff --git a/src/fw/apps/demo/double_tap_test/double_tap_test.c b/src/fw/apps/demo/double_tap_test/double_tap_test.c index 6f2d640893..05b5d57d49 100644 --- a/src/fw/apps/demo/double_tap_test/double_tap_test.c +++ b/src/fw/apps/demo/double_tap_test/double_tap_test.c @@ -12,7 +12,7 @@ #include "process_state/app_state/app_state.h" #include "resource/resource_ids.auto.h" #include "resource/system_resource.h" -#include "system/logging.h" +#include #include "kernel/pbl_malloc.h" typedef struct { diff --git a/src/fw/apps/demo/event_service/event_service.c b/src/fw/apps/demo/event_service/event_service.c index d6ca6f60a1..eca5c31c53 100644 --- a/src/fw/apps/demo/event_service/event_service.c +++ b/src/fw/apps/demo/event_service/event_service.c @@ -11,7 +11,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/app_manager.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/apps/demo/flash_demo.c b/src/fw/apps/demo/flash_demo.c index 7390473010..aae976c044 100644 --- a/src/fw/apps/demo/flash_demo.c +++ b/src/fw/apps/demo/flash_demo.c @@ -9,7 +9,7 @@ #include "drivers/flash.h" #include "flash_region/flash_region.h" -#include "system/logging.h" +#include static Window *window; diff --git a/src/fw/apps/demo/flash_diagnostic/flash_diagnostic.c b/src/fw/apps/demo/flash_diagnostic/flash_diagnostic.c index d46ace3956..671e51e0c6 100644 --- a/src/fw/apps/demo/flash_diagnostic/flash_diagnostic.c +++ b/src/fw/apps/demo/flash_diagnostic/flash_diagnostic.c @@ -17,7 +17,7 @@ #include "process_state/app_state/app_state.h" #include "resource/resource_ids.auto.h" #include "resource/resource_storage_flash.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/util/sleep.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/flash_prof/flash_prof.c b/src/fw/apps/demo/flash_prof/flash_prof.c index b0b33332e4..b61f0fae89 100644 --- a/src/fw/apps/demo/flash_prof/flash_prof.c +++ b/src/fw/apps/demo/flash_prof/flash_prof.c @@ -3,7 +3,7 @@ #include "process_management/pebble_process_md.h" #include "applib/app.h" -#include "system/logging.h" +#include #include "drivers/flash.h" #include "drivers/rtc.h" #include "flash_region/flash_region.h" diff --git a/src/fw/apps/demo/fps_test.c b/src/fw/apps/demo/fps_test.c index 20a4c3dd09..7832d7d8da 100644 --- a/src/fw/apps/demo/fps_test.c +++ b/src/fw/apps/demo/fps_test.c @@ -13,7 +13,7 @@ #include "applib/ui/menu_layer.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/profiler.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/gfx_tests/tests.c b/src/fw/apps/demo/gfx_tests/tests.c index 6ee43208e4..4f570d900f 100644 --- a/src/fw/apps/demo/gfx_tests/tests.c +++ b/src/fw/apps/demo/gfx_tests/tests.c @@ -5,7 +5,7 @@ #include "applib/ui/app_window_stack.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "system/profiler.h" diff --git a/src/fw/apps/demo/idl/idl_demo.c b/src/fw/apps/demo/idl/idl_demo.c index 66cb40010e..0fd560a053 100644 --- a/src/fw/apps/demo/idl/idl_demo.c +++ b/src/fw/apps/demo/idl/idl_demo.c @@ -7,7 +7,7 @@ #include "applib/ui/app_window_stack.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/hexdump.h" #include "pb_decode.h" diff --git a/src/fw/apps/demo/kill_bt/kill_bt.c b/src/fw/apps/demo/kill_bt/kill_bt.c index dbb622093b..90b5d91131 100644 --- a/src/fw/apps/demo/kill_bt/kill_bt.c +++ b/src/fw/apps/demo/kill_bt/kill_bt.c @@ -9,7 +9,7 @@ #include "applib/ui/ui.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include static unsigned int s_progress_count = 0; diff --git a/src/fw/apps/demo/menu/menu.c b/src/fw/apps/demo/menu/menu.c index f62f78c95f..6d5b7d897a 100644 --- a/src/fw/apps/demo/menu/menu.c +++ b/src/fw/apps/demo/menu/menu.c @@ -7,7 +7,7 @@ #include "applib/ui/ui.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/apps/demo/menu_right_icon/menu_layer_right_icon.c b/src/fw/apps/demo/menu_right_icon/menu_layer_right_icon.c index 7acf18bc9c..fb5ef7ccd8 100644 --- a/src/fw/apps/demo/menu_right_icon/menu_layer_right_icon.c +++ b/src/fw/apps/demo/menu_right_icon/menu_layer_right_icon.c @@ -8,7 +8,7 @@ #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/apps/demo/menu_round/menu_round.c b/src/fw/apps/demo/menu_round/menu_round.c index 9b98d2dfeb..73589c5927 100644 --- a/src/fw/apps/demo/menu_round/menu_round.c +++ b/src/fw/apps/demo/menu_round/menu_round.c @@ -9,7 +9,7 @@ #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/movable_line/movable_line.c b/src/fw/apps/demo/movable_line/movable_line.c index b29026b0a8..81a461d7bd 100644 --- a/src/fw/apps/demo/movable_line/movable_line.c +++ b/src/fw/apps/demo/movable_line/movable_line.c @@ -12,7 +12,7 @@ #include "applib/ui/window.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/apps/demo/number_field/number_field.c b/src/fw/apps/demo/number_field/number_field.c index fa5ad63cff..a19a088e7c 100644 --- a/src/fw/apps/demo/number_field/number_field.c +++ b/src/fw/apps/demo/number_field/number_field.c @@ -7,7 +7,7 @@ #include "applib/ui/ui.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" typedef struct { diff --git a/src/fw/apps/demo/option_menu/option_menu_demo.c b/src/fw/apps/demo/option_menu/option_menu_demo.c index 6cda26aff1..e3db9a8db0 100644 --- a/src/fw/apps/demo/option_menu/option_menu_demo.c +++ b/src/fw/apps/demo/option_menu/option_menu_demo.c @@ -10,7 +10,7 @@ #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" const char *s_strings[] = { diff --git a/src/fw/apps/demo/pebble_colors/pebble_colors.c b/src/fw/apps/demo/pebble_colors/pebble_colors.c index ae2caf08b1..2b9b97a17c 100644 --- a/src/fw/apps/demo/pebble_colors/pebble_colors.c +++ b/src/fw/apps/demo/pebble_colors/pebble_colors.c @@ -12,7 +12,7 @@ #include "applib/ui/window.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/apps/demo/pebble_shapes/pebble_shapes.c b/src/fw/apps/demo/pebble_shapes/pebble_shapes.c index cfb3c5b789..fed8870770 100644 --- a/src/fw/apps/demo/pebble_shapes/pebble_shapes.c +++ b/src/fw/apps/demo/pebble_shapes/pebble_shapes.c @@ -15,7 +15,7 @@ #include "applib/ui/window.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include typedef enum { POINT, diff --git a/src/fw/apps/demo/persist/persist.c b/src/fw/apps/demo/persist/persist.c index 64b536772c..2f4b734ef6 100644 --- a/src/fw/apps/demo/persist/persist.c +++ b/src/fw/apps/demo/persist/persist.c @@ -7,7 +7,7 @@ #include "process_state/app_state/app_state.h" #include "applib/ui/ui.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "applib/persist.h" diff --git a/src/fw/apps/demo/profile_mutexes/profile_mutexes.c b/src/fw/apps/demo/profile_mutexes/profile_mutexes.c index b9376e7a6e..dd1a6e7c3d 100644 --- a/src/fw/apps/demo/profile_mutexes/profile_mutexes.c +++ b/src/fw/apps/demo/profile_mutexes/profile_mutexes.c @@ -8,7 +8,7 @@ #include "applib/ui/window.h" #include "applib/ui/window_stack.h" -#include "system/logging.h" +#include #include "pbl/os/mutex.h" #include "system/profiler.h" diff --git a/src/fw/apps/demo/progress/progress.c b/src/fw/apps/demo/progress/progress.c index 6fde18016c..71e3c9ea36 100644 --- a/src/fw/apps/demo/progress/progress.c +++ b/src/fw/apps/demo/progress/progress.c @@ -9,7 +9,7 @@ #include "applib/ui/ui.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #define PROGRESS_STEP 2 diff --git a/src/fw/apps/demo/scroll/scroll.c b/src/fw/apps/demo/scroll/scroll.c index 4e482f1f4f..642ab93ea9 100644 --- a/src/fw/apps/demo/scroll/scroll.c +++ b/src/fw/apps/demo/scroll/scroll.c @@ -8,7 +8,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/app_manager.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include typedef struct { Window window; diff --git a/src/fw/apps/demo/shared/test_args_rx.c b/src/fw/apps/demo/shared/test_args_rx.c index 9d12b54e80..5d22d28974 100644 --- a/src/fw/apps/demo/shared/test_args_rx.c +++ b/src/fw/apps/demo/shared/test_args_rx.c @@ -8,7 +8,7 @@ #include "kernel/event_loop.h" #include "process_management/app_manager.h" #include "process_management/process_manager.h" -#include "system/logging.h" +#include static void s_main(void) { const TestArgsData *args = process_manager_get_current_process_args(); diff --git a/src/fw/apps/demo/simple_menu/simple_menu.c b/src/fw/apps/demo/simple_menu/simple_menu.c index 28ca91bd5e..ef54bd7662 100644 --- a/src/fw/apps/demo/simple_menu/simple_menu.c +++ b/src/fw/apps/demo/simple_menu/simple_menu.c @@ -8,7 +8,7 @@ #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" #include "pbl/services/poll_remote.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/stroke_width/stroke_width.c b/src/fw/apps/demo/stroke_width/stroke_width.c index 28f389ea62..5ed6334819 100644 --- a/src/fw/apps/demo/stroke_width/stroke_width.c +++ b/src/fw/apps/demo/stroke_width/stroke_width.c @@ -15,7 +15,7 @@ #include "applib/ui/window.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #define STEP_ROTATION_ANGLE (TRIG_MAX_ANGLE / 360) // 1 degree #define MIN_OPS 0 diff --git a/src/fw/apps/demo/swap_layer/swap_layer_demo.c b/src/fw/apps/demo/swap_layer/swap_layer_demo.c index 93b77dabed..cce12fc60a 100644 --- a/src/fw/apps/demo/swap_layer/swap_layer_demo.c +++ b/src/fw/apps/demo/swap_layer/swap_layer_demo.c @@ -21,7 +21,7 @@ #include "pbl/services/timeline/swap_layer.h" #include "pbl/services/timeline/timeline_resources.h" #include "shell/normal/watchface.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/temperature_demo/temperature_demo.c b/src/fw/apps/demo/temperature_demo/temperature_demo.c index 8ed4447710..1fcd440ac3 100644 --- a/src/fw/apps/demo/temperature_demo/temperature_demo.c +++ b/src/fw/apps/demo/temperature_demo/temperature_demo.c @@ -9,7 +9,7 @@ #include "drivers/temperature.h" #include "kernel/pbl_malloc.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/test_args_sender/test_args_tx.c b/src/fw/apps/demo/test_args_sender/test_args_tx.c index c8997c6c06..38d69be842 100644 --- a/src/fw/apps/demo/test_args_sender/test_args_tx.c +++ b/src/fw/apps/demo/test_args_sender/test_args_tx.c @@ -9,7 +9,7 @@ #include "process_management/app_manager.h" #include "process_management/app_install_manager.h" #include "process_management/process_manager.h" -#include "system/logging.h" +#include static TestArgsData s_data; diff --git a/src/fw/apps/demo/test_bluetooth/test_bluetooth.c b/src/fw/apps/demo/test_bluetooth/test_bluetooth.c index 8cfb8f85ff..29d4bb2964 100644 --- a/src/fw/apps/demo/test_bluetooth/test_bluetooth.c +++ b/src/fw/apps/demo/test_bluetooth/test_bluetooth.c @@ -11,7 +11,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/comm_session/session_send_buffer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #define NUM_MENU_ITEMS 2 diff --git a/src/fw/apps/demo/test_core_dump/test_core_dump.c b/src/fw/apps/demo/test_core_dump/test_core_dump.c index 47c34d5404..7fafe3f859 100644 --- a/src/fw/apps/demo/test_core_dump/test_core_dump.c +++ b/src/fw/apps/demo/test_core_dump/test_core_dump.c @@ -11,7 +11,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "FreeRTOSConfig.h" diff --git a/src/fw/apps/demo/test_sys_timer/test_sys_timer.c b/src/fw/apps/demo/test_sys_timer/test_sys_timer.c index 96e8f5095f..e3d8527725 100644 --- a/src/fw/apps/demo/test_sys_timer/test_sys_timer.c +++ b/src/fw/apps/demo/test_sys_timer/test_sys_timer.c @@ -12,7 +12,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/regular_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/demo/text_clipping/text_clipping.c b/src/fw/apps/demo/text_clipping/text_clipping.c index dd36525d68..7f7ab7b74b 100644 --- a/src/fw/apps/demo/text_clipping/text_clipping.c +++ b/src/fw/apps/demo/text_clipping/text_clipping.c @@ -9,7 +9,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/app_manager.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include typedef enum { SelectIndexPixels, diff --git a/src/fw/apps/demo/text_flow/text_flow.c b/src/fw/apps/demo/text_flow/text_flow.c index 9d2aae87d0..16cf4b3bbb 100644 --- a/src/fw/apps/demo/text_flow/text_flow.c +++ b/src/fw/apps/demo/text_flow/text_flow.c @@ -10,7 +10,7 @@ #include "process_management/app_manager.h" #include "process_management/sdk_shims.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include typedef struct AppState { Window window; diff --git a/src/fw/apps/demo/text_layout/text_layout.c b/src/fw/apps/demo/text_layout/text_layout.c index 75dfca4ebe..491732689b 100644 --- a/src/fw/apps/demo/text_layout/text_layout.c +++ b/src/fw/apps/demo/text_layout/text_layout.c @@ -9,7 +9,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/app_manager.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include struct AppState { diff --git a/src/fw/apps/demo/text_spacing/text_spacing.c b/src/fw/apps/demo/text_spacing/text_spacing.c index 0e9fbcd9a8..0f8dc33be0 100644 --- a/src/fw/apps/demo/text_spacing/text_spacing.c +++ b/src/fw/apps/demo/text_spacing/text_spacing.c @@ -10,7 +10,7 @@ #include "process_management/app_manager.h" #include "process_management/sdk_shims.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "applib/legacy2/ui/text_layer_legacy2.h" diff --git a/src/fw/apps/demo/timer/timer.c b/src/fw/apps/demo/timer/timer.c index 9592b14f3c..2fd034e1db 100644 --- a/src/fw/apps/demo/timer/timer.c +++ b/src/fw/apps/demo/timer/timer.c @@ -7,7 +7,7 @@ #include "process_state/app_state/app_state.h" #include "applib/ui/ui.h" #include "process_management/pebble_process_md.h" -#include "system/logging.h" +#include #include "system/passert.h" static AppTimer *s_timer = NULL; diff --git a/src/fw/apps/demo/vibe_and_logs/vibe_and_logs.c b/src/fw/apps/demo/vibe_and_logs/vibe_and_logs.c index 97a4cebd55..b34747259a 100644 --- a/src/fw/apps/demo/vibe_and_logs/vibe_and_logs.c +++ b/src/fw/apps/demo/vibe_and_logs/vibe_and_logs.c @@ -11,7 +11,7 @@ #include "kernel/events.h" #include "drivers/rtc.h" #include "drivers/vibe.h" -#include "system/logging.h" +#include Window s_window; static AppTimer *s_app_timer; diff --git a/src/fw/apps/prf/mfg_accel.c b/src/fw/apps/prf/mfg_accel.c index 6f7a9edf75..87d8db0800 100644 --- a/src/fw/apps/prf/mfg_accel.c +++ b/src/fw/apps/prf/mfg_accel.c @@ -14,7 +14,7 @@ #include "process_state/app_state/app_state.h" #include "process_management/pebble_process_md.h" #include "pbl/services/evented_timer.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/apps/prf/mfg_als.c b/src/fw/apps/prf/mfg_als.c index 7d370ac546..6edf20724e 100644 --- a/src/fw/apps/prf/mfg_als.c +++ b/src/fw/apps/prf/mfg_als.c @@ -15,7 +15,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/evented_timer.h" #include "pbl/services/light.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/apps/prf/mfg_charge.c b/src/fw/apps/prf/mfg_charge.c index fe56b66b29..0a8cffe1f7 100644 --- a/src/fw/apps/prf/mfg_charge.c +++ b/src/fw/apps/prf/mfg_charge.c @@ -13,7 +13,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/battery/battery_curve.h" #include "pbl/services/idle_watchdog.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/apps/prf/mfg_mag.c b/src/fw/apps/prf/mfg_mag.c index 1abdbb897a..51a3ad28a5 100644 --- a/src/fw/apps/prf/mfg_mag.c +++ b/src/fw/apps/prf/mfg_mag.c @@ -14,7 +14,7 @@ #include "process_state/app_state/app_state.h" #include "process_management/pebble_process_md.h" #include "pbl/services/evented_timer.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/apps/prf/mfg_mic_getafix.c b/src/fw/apps/prf/mfg_mic_getafix.c index 52abf0d706..769532668b 100644 --- a/src/fw/apps/prf/mfg_mic_getafix.c +++ b/src/fw/apps/prf/mfg_mic_getafix.c @@ -14,7 +14,7 @@ #include "applib/ui/window.h" #include "apps/prf/mfg_test_result.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "board/board.h" #include "process_management/pebble_process_md.h" #include "process_state/app_state/app_state.h" diff --git a/src/fw/apps/prf/mfg_mic_obelix.c b/src/fw/apps/prf/mfg_mic_obelix.c index 44f083751b..e486cac413 100644 --- a/src/fw/apps/prf/mfg_mic_obelix.c +++ b/src/fw/apps/prf/mfg_mic_obelix.c @@ -10,7 +10,7 @@ #include "applib/ui/window.h" #include "apps/prf/mfg_test_result.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "board/board.h" #include "process_management/pebble_process_md.h" #include "process_state/app_state/app_state.h" diff --git a/src/fw/apps/prf/mfg_test_aging.c b/src/fw/apps/prf/mfg_test_aging.c index 7d6d8e5cd7..c03ffde38d 100644 --- a/src/fw/apps/prf/mfg_test_aging.c +++ b/src/fw/apps/prf/mfg_test_aging.c @@ -27,7 +27,7 @@ #include "pbl/services/bluetooth/bluetooth_ctl.h" #include "pbl/services/light.h" #include "pbl/services/idle_watchdog.h" -#include "system/logging.h" +#include #include "util/time/time.h" #include diff --git a/src/fw/apps/prf/mfg_touch.c b/src/fw/apps/prf/mfg_touch.c index e9bb3e8bc3..134436bd71 100644 --- a/src/fw/apps/prf/mfg_touch.c +++ b/src/fw/apps/prf/mfg_touch.c @@ -14,7 +14,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/pebble_process_md.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "applib/touch_service.h" #include "pbl/services/light.h" #include "pbl/services/touch/touch.h" diff --git a/src/fw/apps/prf/recovery_first_use/getting_started_button_combo.c b/src/fw/apps/prf/recovery_first_use/getting_started_button_combo.c index f2fc783358..d3aa49714e 100644 --- a/src/fw/apps/prf/recovery_first_use/getting_started_button_combo.c +++ b/src/fw/apps/prf/recovery_first_use/getting_started_button_combo.c @@ -11,7 +11,7 @@ #include "mfg/mfg_mode/mfg_factory_mode.h" #include "process_management/process_manager.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" void getting_started_button_combo_init(GettingStartedButtonComboState *state, diff --git a/src/fw/apps/prf/recovery_first_use/recovery_first_use.c b/src/fw/apps/prf/recovery_first_use/recovery_first_use.c index fae8b07921..44497ac721 100644 --- a/src/fw/apps/prf/recovery_first_use/recovery_first_use.c +++ b/src/fw/apps/prf/recovery_first_use/recovery_first_use.c @@ -19,7 +19,7 @@ #include "kernel/event_loop.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "applib/app.h" diff --git a/src/fw/apps/sdk/app.c b/src/fw/apps/sdk/app.c index 8410f6d82d..0b81639068 100644 --- a/src/fw/apps/sdk/app.c +++ b/src/fw/apps/sdk/app.c @@ -18,7 +18,7 @@ #include "pbl/services/clock.h" #include "shell/sdk/shell_sdk.h" #include "shell/sdk/watchface.h" -#include "system/logging.h" +#include typedef struct SdkAppData { Window window; diff --git a/src/fw/apps/system/alarms/alarm_detail.c b/src/fw/apps/system/alarms/alarm_detail.c index 0fe8c3f8e3..10f3ade0a7 100644 --- a/src/fw/apps/system/alarms/alarm_detail.c +++ b/src/fw/apps/system/alarms/alarm_detail.c @@ -14,7 +14,7 @@ #include "pbl/services/i18n/i18n.h" #include "pbl/services/activity/activity.h" #include "pbl/services/alarms/alarm.h" -#include "system/logging.h" +#include #ifdef CONFIG_SPEAKER #include "popups/alarm_popup.h" diff --git a/src/fw/apps/system/alarms/alarm_editor.c b/src/fw/apps/system/alarms/alarm_editor.c index e19cb4f657..c01ff055e6 100644 --- a/src/fw/apps/system/alarms/alarm_editor.c +++ b/src/fw/apps/system/alarms/alarm_editor.c @@ -18,7 +18,7 @@ #include "pbl/services/activity/activity.h" #include "pbl/services/alarms/alarm.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/system/alarms/alarms.c b/src/fw/apps/system/alarms/alarms.c index 6892bd9eb2..e6a37405ba 100644 --- a/src/fw/apps/system/alarms/alarms.c +++ b/src/fw/apps/system/alarms/alarms.c @@ -23,7 +23,7 @@ #include "pbl/services/timeline/timeline.h" #include "shell/prefs.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/string.h" #include "util/time/time.h" diff --git a/src/fw/apps/system/app_fetch_ui.c b/src/fw/apps/system/app_fetch_ui.c index 5b07a74faa..7ee8d9ed9e 100644 --- a/src/fw/apps/system/app_fetch_ui.c +++ b/src/fw/apps/system/app_fetch_ui.c @@ -26,7 +26,7 @@ #include "shell/shell.h" #include "shell/system_app_state_machine.h" #include "pbl/services/compositor/compositor_transitions.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/services/evented_timer.h" diff --git a/src/fw/apps/system/health/activity_summary_card.c b/src/fw/apps/system/health/activity_summary_card.c index 9ae2aefad2..dc17bbbe9d 100644 --- a/src/fw/apps/system/health/activity_summary_card.c +++ b/src/fw/apps/system/health/activity_summary_card.c @@ -16,7 +16,7 @@ #include "resource/resource_ids.auto.h" #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "pbl/util/string.h" #include "util/time/time.h" diff --git a/src/fw/apps/system/health/card_view.c b/src/fw/apps/system/health/card_view.c index 02b9ebe4ac..30291b8ba4 100644 --- a/src/fw/apps/system/health/card_view.c +++ b/src/fw/apps/system/health/card_view.c @@ -15,7 +15,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/activity/activity_private.h" #include "pbl/services/timeline/health_layout.h" -#include "system/logging.h" +#include #include "util/time/time.h" #define BACK_TO_WATCHFACE (-1) diff --git a/src/fw/apps/system/health/data.c b/src/fw/apps/system/health/data.c index aeab72c68c..541426ad33 100644 --- a/src/fw/apps/system/health/data.c +++ b/src/fw/apps/system/health/data.c @@ -9,7 +9,7 @@ #include "drivers/rtc.h" #include "kernel/pbl_malloc.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/stats.h" #include "util/time/time.h" diff --git a/src/fw/apps/system/health/detail_card.c b/src/fw/apps/system/health/detail_card.c index 8aed857a7b..0c74d5221e 100644 --- a/src/fw/apps/system/health/detail_card.c +++ b/src/fw/apps/system/health/detail_card.c @@ -12,7 +12,7 @@ #include "shell/prefs.h" #include "pbl/util/size.h" -#include "system/logging.h" +#include // Compile-time display offset calculations #define HEALTH_Y_OFFSET ((DISP_ROWS - LEGACY_2X_DISP_ROWS) / 2) diff --git a/src/fw/apps/system/health/health.c b/src/fw/apps/system/health/health.c index 2007489785..d2a9d7b7ac 100644 --- a/src/fw/apps/system/health/health.c +++ b/src/fw/apps/system/health/health.c @@ -16,7 +16,7 @@ #include "pbl/services/activity/activity_private.h" #include "pbl/services/timeline/timeline.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include // Health app versions // 0: Invalid (app was never opened) diff --git a/src/fw/apps/system/health/hr_summary_card.c b/src/fw/apps/system/health/hr_summary_card.c index 6ed6979a6c..d1ea03ad2b 100644 --- a/src/fw/apps/system/health/hr_summary_card.c +++ b/src/fw/apps/system/health/hr_summary_card.c @@ -16,7 +16,7 @@ #include "resource/resource_ids.auto.h" #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "pbl/util/string.h" diff --git a/src/fw/apps/system/health/progress.c b/src/fw/apps/system/health/progress.c index 840c4df840..7a1f936d0b 100644 --- a/src/fw/apps/system/health/progress.c +++ b/src/fw/apps/system/health/progress.c @@ -5,7 +5,7 @@ #include "applib/graphics/gpath_builder.h" -#include "system/logging.h" +#include // Scales a total shape offset to an individual segment offset. // @param total_offset should not be larger than the segment's percent of total diff --git a/src/fw/apps/system/health/sleep_summary_card.c b/src/fw/apps/system/health/sleep_summary_card.c index 6711be8b66..275d812d86 100644 --- a/src/fw/apps/system/health/sleep_summary_card.c +++ b/src/fw/apps/system/health/sleep_summary_card.c @@ -15,7 +15,7 @@ #include "kernel/pbl_malloc.h" #include "resource/resource_ids.auto.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "pbl/util/string.h" diff --git a/src/fw/apps/system/launcher/default/app_glance_workout.c b/src/fw/apps/system/launcher/default/app_glance_workout.c index 2ba602f667..ce4e82b98c 100644 --- a/src/fw/apps/system/launcher/default/app_glance_workout.c +++ b/src/fw/apps/system/launcher/default/app_glance_workout.c @@ -14,7 +14,7 @@ #include "pbl/services/i18n/i18n.h" #include "pbl/services/activity/health_util.h" #include "pbl/services/activity/workout_service.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/string.h" diff --git a/src/fw/apps/system/music.c b/src/fw/apps/system/music.c index 9cd959a975..0fba097d28 100644 --- a/src/fw/apps/system/music.c +++ b/src/fw/apps/system/music.c @@ -24,7 +24,7 @@ #include "process_management/app_manager.h" #include "process_state/app_state/app_state.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/apps/system/reminders/reminder.c b/src/fw/apps/system/reminders/reminder.c index 247eb79a6f..214af0cfc5 100644 --- a/src/fw/apps/system/reminders/reminder.c +++ b/src/fw/apps/system/reminders/reminder.c @@ -22,7 +22,7 @@ #include "pbl/services/blob_db/watch_app_prefs_db.h" #include "util/time/time.h" -#include "system/logging.h" +#include typedef enum ReminderAppUIState { ReminderAppUIState_Start, diff --git a/src/fw/apps/system/send_text/send_text.c b/src/fw/apps/system/send_text/send_text.c index 7adff5b850..a1d3d53e8d 100644 --- a/src/fw/apps/system/send_text/send_text.c +++ b/src/fw/apps/system/send_text/send_text.c @@ -22,7 +22,7 @@ #include "pbl/services/timeline/timeline.h" #include "pbl/services/timeline/timeline_actions.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/time/time.h" #include "pbl/util/trig.h" diff --git a/src/fw/apps/system/settings/bluetooth.c b/src/fw/apps/system/settings/bluetooth.c index 981df4e99a..1cd324c1aa 100644 --- a/src/fw/apps/system/settings/bluetooth.c +++ b/src/fw/apps/system/settings/bluetooth.c @@ -28,7 +28,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/bluetooth/ble_hrm.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/string.h" diff --git a/src/fw/apps/system/settings/display.c b/src/fw/apps/system/settings/display.c index 2f306b5e52..035507561c 100644 --- a/src/fw/apps/system/settings/display.c +++ b/src/fw/apps/system/settings/display.c @@ -17,7 +17,7 @@ #include "pbl/services/i18n/i18n.h" #include "pbl/services/light.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/system/settings/factory_reset.c b/src/fw/apps/system/settings/factory_reset.c index 3e3c1bd105..c325245944 100644 --- a/src/fw/apps/system/settings/factory_reset.c +++ b/src/fw/apps/system/settings/factory_reset.c @@ -18,7 +18,7 @@ #include "pbl/services/i18n/i18n.h" #include "pbl/services/system_task.h" #include "bluetooth.h" -#include "system/logging.h" +#include #define MESSAGE_BUF_SIZE 96 diff --git a/src/fw/apps/system/settings/notifications.c b/src/fw/apps/system/settings/notifications.c index 6cfb468abb..0aef8a1294 100644 --- a/src/fw/apps/system/settings/notifications.c +++ b/src/fw/apps/system/settings/notifications.c @@ -22,7 +22,7 @@ #include "pbl/services/vibes/vibe_intensity.h" #include "shell/prefs.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "util/time/time.h" diff --git a/src/fw/apps/system/settings/quick_launch_setup_menu.c b/src/fw/apps/system/settings/quick_launch_setup_menu.c index f1b9e04ebe..4385c9f578 100644 --- a/src/fw/apps/system/settings/quick_launch_setup_menu.c +++ b/src/fw/apps/system/settings/quick_launch_setup_menu.c @@ -21,7 +21,7 @@ #include "process_management/app_menu_data_source.h" #include "resource/resource_ids.auto.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/apps/system/settings/quiet_time.c b/src/fw/apps/system/settings/quiet_time.c index 49810193f2..257b202211 100644 --- a/src/fw/apps/system/settings/quiet_time.c +++ b/src/fw/apps/system/settings/quiet_time.c @@ -18,7 +18,7 @@ #include "pbl/services/notifications/do_not_disturb.h" #include "pbl/services/notifications/alerts_preferences.h" #include "pbl/services/notifications/alerts_preferences_private.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "pbl/util/string.h" diff --git a/src/fw/apps/system/settings/remote.c b/src/fw/apps/system/settings/remote.c index eaaf62ae60..2099049bbf 100644 --- a/src/fw/apps/system/settings/remote.c +++ b/src/fw/apps/system/settings/remote.c @@ -21,7 +21,7 @@ #include "pbl/services/bluetooth/bluetooth_persistent_storage.h" #include "pbl/services/i18n/i18n.h" #include "pbl/services/bluetooth/ble_hrm.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/apps/system/settings/system.c b/src/fw/apps/system/settings/system.c index 78a5622b5b..ea831997ec 100644 --- a/src/fw/apps/system/settings/system.c +++ b/src/fw/apps/system/settings/system.c @@ -40,7 +40,7 @@ #include "pbl/services/activity/activity.h" #include "pbl/services/blob_db/api.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/apps/system/settings/vibe_patterns.c b/src/fw/apps/system/settings/vibe_patterns.c index 8825a32b10..8b23684bf2 100644 --- a/src/fw/apps/system/settings/vibe_patterns.c +++ b/src/fw/apps/system/settings/vibe_patterns.c @@ -15,7 +15,7 @@ #include "pbl/services/vibes/vibe_intensity.h" #include "pbl/services/vibes/vibe_score.h" #include "pbl/services/vibes/vibe_score_info.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/string.h" diff --git a/src/fw/apps/system/timeline/layer.c b/src/fw/apps/system/timeline/layer.c index b8b2e13cdc..73ac04147e 100644 --- a/src/fw/apps/system/timeline/layer.c +++ b/src/fw/apps/system/timeline/layer.c @@ -27,7 +27,7 @@ #include "pbl/services/timeline/layout_layer.h" #include "pbl/services/timeline/timeline_layout.h" #include "pbl/services/timeline/timeline_resources.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/apps/system/timeline/model.c b/src/fw/apps/system/timeline/model.c index 0ab85d56e3..c0c3e332f2 100644 --- a/src/fw/apps/system/timeline/model.c +++ b/src/fw/apps/system/timeline/model.c @@ -3,7 +3,7 @@ #include "model.h" -#include "system/logging.h" +#include #include "system/passert.h" //////////////////////////////////////////////// diff --git a/src/fw/apps/system/timeline/peek_layer.c b/src/fw/apps/system/timeline/peek_layer.c index 5fa0689471..dd297d2147 100644 --- a/src/fw/apps/system/timeline/peek_layer.c +++ b/src/fw/apps/system/timeline/peek_layer.c @@ -12,7 +12,7 @@ #include "pbl/services/evented_timer.h" #include "pbl/services/timeline/notification_layout.h" #include "pbl/services/timeline/timeline_resources.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "resource/resource_ids.auto.h" diff --git a/src/fw/apps/system/timeline/relbar.c b/src/fw/apps/system/timeline/relbar.c index 45f0e29498..fefc0f51e5 100644 --- a/src/fw/apps/system/timeline/relbar.c +++ b/src/fw/apps/system/timeline/relbar.c @@ -7,7 +7,7 @@ #include "applib/graphics/graphics.h" #include "pbl/services/timeline/timeline_layout.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/apps/system/timeline/timeline.c b/src/fw/apps/system/timeline/timeline.c index 60bef9a624..d9274d26dd 100644 --- a/src/fw/apps/system/timeline/timeline.c +++ b/src/fw/apps/system/timeline/timeline.c @@ -27,7 +27,7 @@ #include "pbl/services/timeline/attribute.h" #include "shell/normal/watchface.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/array.h" #include "pbl/util/attributes.h" diff --git a/src/fw/apps/system/weather/layout.c b/src/fw/apps/system/weather/layout.c index b10b14ebce..7653eddc9d 100644 --- a/src/fw/apps/system/weather/layout.c +++ b/src/fw/apps/system/weather/layout.c @@ -27,7 +27,7 @@ #include "pbl/services/timeline/timeline_resources.h" #include "pbl/services/weather/weather_service.h" #include "pbl/services/weather/weather_types.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "pbl/util/trig.h" diff --git a/src/fw/apps/system/workout/active.c b/src/fw/apps/system/workout/active.c index 9cf016ca9e..1f36e8b218 100644 --- a/src/fw/apps/system/workout/active.c +++ b/src/fw/apps/system/workout/active.c @@ -22,7 +22,7 @@ #include "pbl/services/activity/health_util.h" #include "pbl/services/activity/hr_util.h" #include "pbl/services/activity/workout_service.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include diff --git a/src/fw/apps/system/workout/selection.c b/src/fw/apps/system/workout/selection.c index 26978398a7..49f1cdc354 100644 --- a/src/fw/apps/system/workout/selection.c +++ b/src/fw/apps/system/workout/selection.c @@ -10,7 +10,7 @@ #include "resource/resource_ids.auto.h" #include "pbl/services/i18n/i18n.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/apps/system/workout/sports.c b/src/fw/apps/system/workout/sports.c index 84769b4b37..2c36a8bc4c 100644 --- a/src/fw/apps/system/workout/sports.c +++ b/src/fw/apps/system/workout/sports.c @@ -10,7 +10,7 @@ #include "pbl/services/activity/activity_algorithm.h" #include "pbl/services/activity/activity_private.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "active.h" diff --git a/src/fw/apps/system/workout/summary.c b/src/fw/apps/system/workout/summary.c index 4d261c0601..07055c4194 100644 --- a/src/fw/apps/system/workout/summary.c +++ b/src/fw/apps/system/workout/summary.c @@ -17,7 +17,7 @@ #include "pbl/services/i18n/i18n.h" #include "pbl/services/activity/health_util.h" #include "pbl/services/activity/workout_service.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/apps/system/workout/workout.c b/src/fw/apps/system/workout/workout.c index 50dfa0baad..71b3ce0a03 100644 --- a/src/fw/apps/system/workout/workout.c +++ b/src/fw/apps/system/workout/workout.c @@ -22,7 +22,7 @@ #include "pbl/services/activity/activity_private.h" #include "pbl/services/activity/health_util.h" #include "pbl/services/activity/workout_service.h" -#include "system/logging.h" +#include #include "resource/resource_ids.auto.h" #include "popups/health_tracking_ui.h" diff --git a/src/fw/assert.c b/src/fw/assert.c index b43fb51b3f..66b73abdc6 100644 --- a/src/fw/assert.c +++ b/src/fw/assert.c @@ -1,7 +1,7 @@ /* SPDX-FileCopyrightText: 2025 Google LLC */ /* SPDX-License-Identifier: Apache-2.0 */ -#include "system/logging.h" +#include #include "system/passert.h" void __assert_func(const char *file, int line, const char *func, const char *e) { diff --git a/src/fw/comm/ble/gap_le_advert.c b/src/fw/comm/ble/gap_le_advert.c index c770a9d7a6..d110541545 100644 --- a/src/fw/comm/ble/gap_le_advert.c +++ b/src/fw/comm/ble/gap_le_advert.c @@ -11,7 +11,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/analytics/analytics.h" #include "pbl/services/regular_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" diff --git a/src/fw/comm/ble/gap_le_connect.c b/src/fw/comm/ble/gap_le_connect.c index b989930dba..c8bc8e7a52 100644 --- a/src/fw/comm/ble/gap_le_connect.c +++ b/src/fw/comm/ble/gap_le_connect.c @@ -15,7 +15,7 @@ #include "pbl/services/bluetooth/bluetooth_persistent_storage.h" #include "pbl/services/bluetooth/ble_hrm.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/comm/ble/gap_le_connect_params.c b/src/fw/comm/ble/gap_le_connect_params.c index f233fd39d7..bd39b38f85 100644 --- a/src/fw/comm/ble/gap_le_connect_params.c +++ b/src/fw/comm/ble/gap_le_connect_params.c @@ -13,7 +13,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/analytics/analytics.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "util/time/time.h" #include diff --git a/src/fw/comm/ble/gap_le_connection.c b/src/fw/comm/ble/gap_le_connection.c index 20fbab0a61..ff4ee314be 100644 --- a/src/fw/comm/ble/gap_le_connection.c +++ b/src/fw/comm/ble/gap_le_connection.c @@ -10,7 +10,7 @@ #include "pbl/services/bluetooth/bluetooth_persistent_storage.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/list.h" diff --git a/src/fw/comm/ble/gap_le_scan.c b/src/fw/comm/ble/gap_le_scan.c index 2a9aa505ce..de2d8d59ca 100644 --- a/src/fw/comm/ble/gap_le_scan.c +++ b/src/fw/comm/ble/gap_le_scan.c @@ -7,7 +7,7 @@ #include "gap_le_scan.h" #include "kernel/events.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/circular_buffer.h" #include "pbl/util/likely.h" diff --git a/src/fw/comm/ble/gap_le_slave_reconnect.c b/src/fw/comm/ble/gap_le_slave_reconnect.c index cf03cce8ba..fd46e8db3a 100644 --- a/src/fw/comm/ble/gap_le_slave_reconnect.c +++ b/src/fw/comm/ble/gap_le_slave_reconnect.c @@ -9,7 +9,7 @@ #include "gap_le_advert.h" #include "gap_le_connect.h" -#include "system/logging.h" +#include #include "comm/bt_lock.h" #include "drivers/rtc.h" diff --git a/src/fw/comm/ble/gatt.c b/src/fw/comm/ble/gatt.c index a2e62068b6..396f425fb7 100644 --- a/src/fw/comm/ble/gatt.c +++ b/src/fw/comm/ble/gatt.c @@ -3,7 +3,7 @@ #include -#include "system/logging.h" +#include #include "comm/ble/gap_le_connection.h" #include "comm/ble/gatt_service_changed.h" #include "comm/bt_lock.h" diff --git a/src/fw/comm/ble/gatt_client_accessors.c b/src/fw/comm/ble/gatt_client_accessors.c index ccefdec65a..b7712f4a38 100644 --- a/src/fw/comm/ble/gatt_client_accessors.c +++ b/src/fw/comm/ble/gatt_client_accessors.c @@ -1,7 +1,7 @@ /* SPDX-FileCopyrightText: 2024 Google LLC */ /* SPDX-License-Identifier: Apache-2.0 */ -#include "system/logging.h" +#include #include "gatt_client_accessors.h" diff --git a/src/fw/comm/ble/gatt_client_discovery.c b/src/fw/comm/ble/gatt_client_discovery.c index fc50247492..2caaba13aa 100644 --- a/src/fw/comm/ble/gatt_client_discovery.c +++ b/src/fw/comm/ble/gatt_client_discovery.c @@ -13,7 +13,7 @@ #include "kernel/events.h" #include "kernel/pbl_malloc.h" #include "gatt_client_accessors.h" -#include "system/logging.h" +#include #include "drivers/rtc.h" #include diff --git a/src/fw/comm/ble/gatt_client_subscriptions.c b/src/fw/comm/ble/gatt_client_subscriptions.c index d3b1292888..af16a12c44 100644 --- a/src/fw/comm/ble/gatt_client_subscriptions.c +++ b/src/fw/comm/ble/gatt_client_subscriptions.c @@ -17,7 +17,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/analytics/analytics.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/circular_buffer.h" diff --git a/src/fw/comm/ble/gatt_service_changed.c b/src/fw/comm/ble/gatt_service_changed.c index 3555e65746..8b376a20ea 100644 --- a/src/fw/comm/ble/gatt_service_changed.c +++ b/src/fw/comm/ble/gatt_service_changed.c @@ -11,7 +11,7 @@ #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "util/net.h" #include "system/hexdump.h" diff --git a/src/fw/comm/ble/kernel_le_client/ams/ams.c b/src/fw/comm/ble/kernel_le_client/ams/ams.c index e8bb10ab27..da38e93c10 100644 --- a/src/fw/comm/ble/kernel_le_client/ams/ams.c +++ b/src/fw/comm/ble/kernel_le_client/ams/ams.c @@ -17,7 +17,7 @@ #include "pbl/services/music_internal.h" -#include "system/logging.h" +#include #include "system/hexdump.h" #include "system/passert.h" #include "pbl/util/likely.h" diff --git a/src/fw/comm/ble/kernel_le_client/ams/ams_util.c b/src/fw/comm/ble/kernel_le_client/ams/ams_util.c index 42e1f31260..34d82403d2 100644 --- a/src/fw/comm/ble/kernel_le_client/ams/ams_util.c +++ b/src/fw/comm/ble/kernel_le_client/ams/ams_util.c @@ -1,7 +1,7 @@ /* SPDX-FileCopyrightText: 2024 Google LLC */ /* SPDX-License-Identifier: Apache-2.0 */ -#include "system/logging.h" +#include #include "ams_util.h" diff --git a/src/fw/comm/ble/kernel_le_client/ancs/ancs.c b/src/fw/comm/ble/kernel_le_client/ancs/ancs.c index 1a9b4995d9..ae871cad9f 100644 --- a/src/fw/comm/ble/kernel_le_client/ancs/ancs.c +++ b/src/fw/comm/ble/kernel_le_client/ancs/ancs.c @@ -22,7 +22,7 @@ #include "system/hexdump.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "util/buffer.h" diff --git a/src/fw/comm/ble/kernel_le_client/ancs/ancs_util.c b/src/fw/comm/ble/kernel_le_client/ancs/ancs_util.c index 6cb8abf6cd..038f9f9025 100644 --- a/src/fw/comm/ble/kernel_le_client/ancs/ancs_util.c +++ b/src/fw/comm/ble/kernel_le_client/ancs/ancs_util.c @@ -8,7 +8,7 @@ #include "syscall/syscall.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/comm/ble/kernel_le_client/app_launch/app_launch.c b/src/fw/comm/ble/kernel_le_client/app_launch/app_launch.c index fe60311572..2b047c5cff 100644 --- a/src/fw/comm/ble/kernel_le_client/app_launch/app_launch.c +++ b/src/fw/comm/ble/kernel_le_client/app_launch/app_launch.c @@ -6,7 +6,7 @@ #include "comm/ble/gatt_client_operations.h" #include "pbl/services/analytics/analytics.h" #include "pbl/services/comm_session/session.h" -#include "system/logging.h" +#include #include "system/passert.h" //! See https://pebbletechnology.atlassian.net/wiki/display/DEV/Pebble+GATT+Services diff --git a/src/fw/comm/ble/kernel_le_client/dis/dis.c b/src/fw/comm/ble/kernel_le_client/dis/dis.c index 88adabf791..a3881bde8f 100644 --- a/src/fw/comm/ble/kernel_le_client/dis/dis.c +++ b/src/fw/comm/ble/kernel_le_client/dis/dis.c @@ -8,7 +8,7 @@ #include "comm/ble/kernel_le_client/ancs/ancs.h" #endif #include "comm/bt_lock.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DECLARE(bt, CONFIG_BT_LOG_LEVEL); diff --git a/src/fw/comm/ble/kernel_le_client/kernel_le_client.c b/src/fw/comm/ble/kernel_le_client/kernel_le_client.c index 6a1555b9a4..fdd5a7bbfb 100644 --- a/src/fw/comm/ble/kernel_le_client/kernel_le_client.c +++ b/src/fw/comm/ble/kernel_le_client/kernel_le_client.c @@ -22,7 +22,7 @@ #include "kernel/event_loop.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/likely.h" #include "pbl/util/size.h" diff --git a/src/fw/comm/ble/kernel_le_client/ppogatt/ppogatt.c b/src/fw/comm/ble/kernel_le_client/ppogatt/ppogatt.c index 61a775d876..cc6a8586a8 100644 --- a/src/fw/comm/ble/kernel_le_client/ppogatt/ppogatt.c +++ b/src/fw/comm/ble/kernel_le_client/ppogatt/ppogatt.c @@ -20,7 +20,7 @@ #include "pbl/services/system_task.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/likely.h" #include "pbl/util/list.h" diff --git a/src/fw/comm/bluetooth_analytics.c b/src/fw/comm/bluetooth_analytics.c index d05b719279..354d7b0048 100644 --- a/src/fw/comm/bluetooth_analytics.c +++ b/src/fw/comm/bluetooth_analytics.c @@ -9,7 +9,7 @@ #include "pbl/services/analytics/analytics.h" #include "pbl/services/bluetooth/bluetooth_ctl.h" #include "pbl/services/comm_session/session.h" -#include "system/logging.h" +#include #include "util/bitset.h" #include "pbl/util/math.h" diff --git a/src/fw/comm/internals/bt_conn_mgr.c b/src/fw/comm/internals/bt_conn_mgr.c index e4000ee617..58b5821ff1 100644 --- a/src/fw/comm/internals/bt_conn_mgr.c +++ b/src/fw/comm/internals/bt_conn_mgr.c @@ -13,7 +13,7 @@ #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/regular_timer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" #include "pbl/util/math.h" diff --git a/src/fw/console/control_protocol.c b/src/fw/console/control_protocol.c index c7a0a8d247..909f3a3f30 100644 --- a/src/fw/console/control_protocol.c +++ b/src/fw/console/control_protocol.c @@ -8,7 +8,7 @@ #include "kernel/events.h" #include "kernel/util/sleep.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include #include diff --git a/src/fw/console/prompt.c b/src/fw/console/prompt.c index 4435e0025c..26beaab612 100644 --- a/src/fw/console/prompt.c +++ b/src/fw/console/prompt.c @@ -9,7 +9,7 @@ #include "drivers/rtc.h" #include "kernel/pbl_malloc.h" #include "pulse_protocol_impl.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/likely.h" diff --git a/src/fw/console/prompt_commands.c b/src/fw/console/prompt_commands.c index 47b83c65fc..51f2827f2e 100644 --- a/src/fw/console/prompt_commands.c +++ b/src/fw/console/prompt_commands.c @@ -31,7 +31,7 @@ #include "syscall/syscall.h" #include "system/bootbits.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reboot_reason.h" #include "system/reset.h" diff --git a/src/fw/console/prompt_commands.h b/src/fw/console/prompt_commands.h index 024d51824b..4410751f67 100644 --- a/src/fw/console/prompt_commands.h +++ b/src/fw/console/prompt_commands.h @@ -6,7 +6,7 @@ #include "console/prompt.h" #include "console/pulse_internal.h" #include "pbl/services/filesystem/pfs.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" extern void command_help(void); diff --git a/src/fw/console/pulse_pp.c b/src/fw/console/pulse_pp.c index 263e9d7f90..36f83c4929 100644 --- a/src/fw/console/pulse_pp.c +++ b/src/fw/console/pulse_pp.c @@ -15,7 +15,7 @@ #include "pbl/services/comm_session/session_transport.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/console/serial_console.c b/src/fw/console/serial_console.c index a3f1522ff5..d9cdceb41f 100644 --- a/src/fw/console/serial_console.c +++ b/src/fw/console/serial_console.c @@ -12,7 +12,7 @@ #include "drivers/mic.h" #include "drivers/watchdog.h" #include "pbl/os/tick.h" -#include "system/logging.h" +#include #include "system/passert.h" SerialConsoleState s_serial_console_state = SERIAL_CONSOLE_STATE_LOGGING; diff --git a/src/fw/debug/app_logging.c b/src/fw/debug/app_logging.c index 57911a3109..1ef43d4b98 100644 --- a/src/fw/debug/app_logging.c +++ b/src/fw/debug/app_logging.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "pbl/util/attributes.h" -#include "system/logging.h" +#include #include "applib/app_logging.h" #include diff --git a/src/fw/debug/debug.c b/src/fw/debug/debug.c index 439050a563..5b13afeb0f 100644 --- a/src/fw/debug/debug.c +++ b/src/fw/debug/debug.c @@ -25,7 +25,7 @@ #include "pbl/services/process_management/app_storage.h" #include "system/bootbits.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reboot_reason.h" #include "system/version.h" diff --git a/src/fw/debug/debug_reboot_reason.c b/src/fw/debug/debug_reboot_reason.c index 1a1978ca08..bdb4bc72f1 100644 --- a/src/fw/debug/debug_reboot_reason.c +++ b/src/fw/debug/debug_reboot_reason.c @@ -14,7 +14,7 @@ #include "kernel/pbl_malloc.h" #include "popups/crashed_ui.h" #include "pbl/services/analytics/analytics.h" -#include "system/logging.h" +#include #include "system/reboot_reason.h" static RebootReasonCode s_last_reboot_reason_code = RebootReasonCode_Unknown; diff --git a/src/fw/debug/flash_logging.c b/src/fw/debug/flash_logging.c index b671f30fa5..d4cae6ff9e 100644 --- a/src/fw/debug/flash_logging.c +++ b/src/fw/debug/flash_logging.c @@ -8,7 +8,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/system_task.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/version.h" #include "pbl/util/attributes.h" diff --git a/src/fw/debug/power_tracking.c b/src/fw/debug/power_tracking.c index da776ad554..f74179423e 100644 --- a/src/fw/debug/power_tracking.c +++ b/src/fw/debug/power_tracking.c @@ -5,7 +5,7 @@ #include "drivers/rtc.h" #include "pbl/services/regular_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #if !defined(SW_POWER_TRACKING) diff --git a/src/fw/debug/power_tracking.h b/src/fw/debug/power_tracking.h index 522dc2c765..4996933405 100644 --- a/src/fw/debug/power_tracking.h +++ b/src/fw/debug/power_tracking.h @@ -4,7 +4,7 @@ #pragma once #include "drivers/rtc.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/drivers/ambient/ambient_light_opt3001.c b/src/fw/drivers/ambient/ambient_light_opt3001.c index 450cd316d5..3f324f275d 100644 --- a/src/fw/drivers/ambient/ambient_light_opt3001.c +++ b/src/fw/drivers/ambient/ambient_light_opt3001.c @@ -7,7 +7,7 @@ #include "drivers/i2c.h" #include "kernel/util/sleep.h" #include "mfg/mfg_info.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/drivers/ambient/ambient_light_w1160.c b/src/fw/drivers/ambient/ambient_light_w1160.c index 6c441b2f3d..58b3aee27c 100644 --- a/src/fw/drivers/ambient/ambient_light_w1160.c +++ b/src/fw/drivers/ambient/ambient_light_w1160.c @@ -8,7 +8,7 @@ #include "kernel/util/sleep.h" #include "mfg/mfg_info.h" #include "pbl/os/mutex.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/drivers/backlight/aw2016.c b/src/fw/drivers/backlight/aw2016.c index f52bb99fd7..2564239805 100644 --- a/src/fw/drivers/backlight/aw2016.c +++ b/src/fw/drivers/backlight/aw2016.c @@ -5,7 +5,7 @@ #include "board/board.h" #include "drivers/i2c.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DEFINE(driver_backlight_aw2016, CONFIG_DRIVER_BACKLIGHT_LOG_LEVEL); diff --git a/src/fw/drivers/backlight/aw9364e.c b/src/fw/drivers/backlight/aw9364e.c index 21c09050e9..8d1288ff0f 100644 --- a/src/fw/drivers/backlight/aw9364e.c +++ b/src/fw/drivers/backlight/aw9364e.c @@ -5,7 +5,7 @@ #include "drivers/gpio.h" #include "drivers/backlight.h" #include "kernel/util/delay.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" // AW9364E 1-wire dimming protocol implementation diff --git a/src/fw/drivers/display/sf32lb/display_jdi.c b/src/fw/drivers/display/sf32lb/display_jdi.c index 7d5893e887..49f01bd464 100644 --- a/src/fw/drivers/display/sf32lb/display_jdi.c +++ b/src/fw/drivers/display/sf32lb/display_jdi.c @@ -16,7 +16,7 @@ #include "pbl/mcu/cache.h" #include "pbl/os/mutex.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "FreeRTOS.h" diff --git a/src/fw/drivers/exti/sf32lb.c b/src/fw/drivers/exti/sf32lb.c index 021cb56b72..8f224bc5aa 100644 --- a/src/fw/drivers/exti/sf32lb.c +++ b/src/fw/drivers/exti/sf32lb.c @@ -8,7 +8,7 @@ #include "board/board.h" #include "kernel/events.h" #include "pbl/mcu/interrupts.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DEFINE(driver_exti_sf32lb, CONFIG_DRIVER_EXTI_LOG_LEVEL); diff --git a/src/fw/drivers/flash/flash_api.c b/src/fw/drivers/flash/flash_api.c index 1760ddeb45..a90223b148 100644 --- a/src/fw/drivers/flash/flash_api.c +++ b/src/fw/drivers/flash/flash_api.c @@ -17,7 +17,7 @@ #include "process_management/worker_manager.h" #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/analytics/analytics.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/util/sleep.h" diff --git a/src/fw/drivers/flash/flash_crc.c b/src/fw/drivers/flash/flash_crc.c index 915a97e7c7..fd3ecbae2d 100644 --- a/src/fw/drivers/flash/flash_crc.c +++ b/src/fw/drivers/flash/flash_crc.c @@ -4,7 +4,7 @@ #include "drivers/flash.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "pbl/util/crc32.h" #include "util/legacy_checksum.h" diff --git a/src/fw/drivers/flash/flash_erase.c b/src/fw/drivers/flash/flash_erase.c index d92ec5d02b..898f2a2825 100644 --- a/src/fw/drivers/flash/flash_erase.c +++ b/src/fw/drivers/flash/flash_erase.c @@ -6,7 +6,7 @@ #include "flash_region/flash_region.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/drivers/hrm/gh3x2x.c b/src/fw/drivers/hrm/gh3x2x.c index 66b3a6235d..5c1ae55c46 100644 --- a/src/fw/drivers/hrm/gh3x2x.c +++ b/src/fw/drivers/hrm/gh3x2x.c @@ -6,7 +6,7 @@ #include "drivers/hrm.h" #include "board/board.h" #include "kernel/util/sleep.h" -#include "system/logging.h" +#include #ifdef HRM_USE_GH3X2X #include "math.h" diff --git a/src/fw/drivers/i2c/common.c b/src/fw/drivers/i2c/common.c index 26589e0fd7..efeed24881 100644 --- a/src/fw/drivers/i2c/common.c +++ b/src/fw/drivers/i2c/common.c @@ -15,7 +15,7 @@ #include "kernel/util/sleep.h" #include "pbl/os/mutex.h" #include "semphr.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/drivers/imu/lis2dw12/lis2dw12.c b/src/fw/drivers/imu/lis2dw12/lis2dw12.c index 473e37e0b5..a83f73d7e5 100644 --- a/src/fw/drivers/imu/lis2dw12/lis2dw12.c +++ b/src/fw/drivers/imu/lis2dw12/lis2dw12.c @@ -9,7 +9,7 @@ #include "drivers/gpio.h" #include "pbl/services/imu/units.h" #include "pbl/services/regular_timer.h" -#include "system/logging.h" +#include #include "system/status_codes.h" #include "kernel/util/delay.h" #include "kernel/util/sleep.h" diff --git a/src/fw/drivers/imu/lsm6dso/lsm6dso.c b/src/fw/drivers/imu/lsm6dso/lsm6dso.c index 9360276c87..f50b8457a4 100644 --- a/src/fw/drivers/imu/lsm6dso/lsm6dso.c +++ b/src/fw/drivers/imu/lsm6dso/lsm6dso.c @@ -9,7 +9,7 @@ #include "drivers/gpio.h" #include "pbl/services/imu/units.h" #include "pbl/services/regular_timer.h" -#include "system/logging.h" +#include #include "system/status_codes.h" #include "kernel/util/delay.h" #include "kernel/util/sleep.h" diff --git a/src/fw/drivers/imu/mmc5603nj/mmc5603nj.c b/src/fw/drivers/imu/mmc5603nj/mmc5603nj.c index aefa9767cd..fb05305bc2 100644 --- a/src/fw/drivers/imu/mmc5603nj/mmc5603nj.c +++ b/src/fw/drivers/imu/mmc5603nj/mmc5603nj.c @@ -7,7 +7,7 @@ #include "kernel/events.h" #include "kernel/util/sleep.h" #include "pbl/os/mutex.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/services/new_timer/new_timer.h" #include "pbl/util/math.h" diff --git a/src/fw/drivers/mic/nrf5/pdm.c b/src/fw/drivers/mic/nrf5/pdm.c index 090b137d68..e3108468cd 100644 --- a/src/fw/drivers/mic/nrf5/pdm.c +++ b/src/fw/drivers/mic/nrf5/pdm.c @@ -12,7 +12,7 @@ #include "kernel/util/sleep.h" #include "pbl/os/mutex.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/circular_buffer.h" #include "pbl/util/heap.h" diff --git a/src/fw/drivers/mic/qemu/mic.c b/src/fw/drivers/mic/qemu/mic.c index 5a1ae3558e..96ec158693 100644 --- a/src/fw/drivers/mic/qemu/mic.c +++ b/src/fw/drivers/mic/qemu/mic.c @@ -7,7 +7,7 @@ #include "board/board.h" #include "console/prompt.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/drivers/mic/sf32lb52/pdm.c b/src/fw/drivers/mic/sf32lb52/pdm.c index 98ec678ac1..48e9968528 100644 --- a/src/fw/drivers/mic/sf32lb52/pdm.c +++ b/src/fw/drivers/mic/sf32lb52/pdm.c @@ -7,7 +7,7 @@ #include "kernel/kernel_heap.h" #include "kernel/pbl_malloc.h" #include "pbl/mcu/cache.h" -#include "system/logging.h" +#include #include "pbl/os/mutex.h" #include "system/passert.h" #include "pbl/util/circular_buffer.h" diff --git a/src/fw/drivers/nrf5/qspi.c b/src/fw/drivers/nrf5/qspi.c index 6d5e478840..05a47cb43c 100644 --- a/src/fw/drivers/nrf5/qspi.c +++ b/src/fw/drivers/nrf5/qspi.c @@ -12,7 +12,7 @@ #include "kernel/util/delay.h" #include "kernel/util/sleep.h" #include "pbl/soc/nrf/sleep.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/drivers/pmic/npm1300.c b/src/fw/drivers/pmic/npm1300.c index 350683e823..36f6ea5ce0 100644 --- a/src/fw/drivers/pmic/npm1300.c +++ b/src/fw/drivers/pmic/npm1300.c @@ -20,7 +20,7 @@ #include "kernel/util/sleep.h" #include "pbl/os/mutex.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DEFINE(driver_pmic_npm1300, CONFIG_DRIVER_PMIC_LOG_LEVEL); diff --git a/src/fw/drivers/pressure/bmp390.c b/src/fw/drivers/pressure/bmp390.c index 468d1e34c5..df00867d24 100644 --- a/src/fw/drivers/pressure/bmp390.c +++ b/src/fw/drivers/pressure/bmp390.c @@ -4,7 +4,7 @@ #include "board/board.h" #include "drivers/pressure.h" #include "drivers/i2c.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DEFINE(driver_pressure_bmp390, CONFIG_DRIVER_PRESSURE_LOG_LEVEL); diff --git a/src/fw/drivers/qemu/qemu_accel.c b/src/fw/drivers/qemu/qemu_accel.c index 1dfe3b29a0..2bacd68478 100644 --- a/src/fw/drivers/qemu/qemu_accel.c +++ b/src/fw/drivers/qemu/qemu_accel.c @@ -46,7 +46,7 @@ #include "drivers/qemu/qemu_serial.h" #include "drivers/rtc.h" #include "pbl/os/mutex.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "util/net.h" diff --git a/src/fw/drivers/qemu/qemu_battery.c b/src/fw/drivers/qemu/qemu_battery.c index 0367b817be..37cd017544 100644 --- a/src/fw/drivers/qemu/qemu_battery.c +++ b/src/fw/drivers/qemu/qemu_battery.c @@ -8,7 +8,7 @@ #include "system/passert.h" #include "pbl/services/battery/battery_state.h" #include "pbl/services/battery/battery_curve.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/net.h" diff --git a/src/fw/drivers/qemu/qemu_rtc_hal.c b/src/fw/drivers/qemu/qemu_rtc_hal.c index b3dffc3a86..4b6e4042a0 100644 --- a/src/fw/drivers/qemu/qemu_rtc_hal.c +++ b/src/fw/drivers/qemu/qemu_rtc_hal.c @@ -5,7 +5,7 @@ #include "board/board.h" #include "system/passert.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/drivers/qemu/qemu_serial.c b/src/fw/drivers/qemu/qemu_serial.c index 37435e7ac4..95412ee312 100644 --- a/src/fw/drivers/qemu/qemu_serial.c +++ b/src/fw/drivers/qemu/qemu_serial.c @@ -18,7 +18,7 @@ #include "pbl/services/hrm/hrm_manager.h" #include "pbl/services/system_task.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/likely.h" #include "util/net.h" diff --git a/src/fw/drivers/qemu/qemu_serial_util.c b/src/fw/drivers/qemu/qemu_serial_util.c index 9817c16ecc..98d5cdb475 100644 --- a/src/fw/drivers/qemu/qemu_serial_util.c +++ b/src/fw/drivers/qemu/qemu_serial_util.c @@ -8,7 +8,7 @@ #include "drivers/qemu/qemu_serial_private.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/net.h" diff --git a/src/fw/drivers/rng/sf32lb.c b/src/fw/drivers/rng/sf32lb.c index fb6ed52921..97086af0c6 100644 --- a/src/fw/drivers/rng/sf32lb.c +++ b/src/fw/drivers/rng/sf32lb.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "drivers/rng.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "bf0_hal_rcc.h" diff --git a/src/fw/drivers/rtc/nrf5.c b/src/fw/drivers/rtc/nrf5.c index d3aa2ff841..c117e29aa9 100644 --- a/src/fw/drivers/rtc/nrf5.c +++ b/src/fw/drivers/rtc/nrf5.c @@ -14,7 +14,7 @@ #include "pbl/services/regular_timer.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reset.h" diff --git a/src/fw/drivers/rtc/sf32lb.c b/src/fw/drivers/rtc/sf32lb.c index c3d0760094..cc1c78f934 100644 --- a/src/fw/drivers/rtc/sf32lb.c +++ b/src/fw/drivers/rtc/sf32lb.c @@ -11,7 +11,7 @@ #include "pbl/mcu/interrupts.h" #include "system/passert.h" #include "util/time/time.h" -#include "system/logging.h" +#include #include "pbl/services/new_timer/new_timer.h" #include "FreeRTOS.h" diff --git a/src/fw/drivers/speaker/nrf5/da7212.c b/src/fw/drivers/speaker/nrf5/da7212.c index fb7af742e9..38f13efd3e 100644 --- a/src/fw/drivers/speaker/nrf5/da7212.c +++ b/src/fw/drivers/speaker/nrf5/da7212.c @@ -12,7 +12,7 @@ #include "pbl/os/mutex.h" #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/circular_buffer.h" #include "pbl/util/math.h" diff --git a/src/fw/drivers/speaker/sf32lb52/audec.c b/src/fw/drivers/speaker/sf32lb52/audec.c index 0d0ad3f260..5ca7402342 100644 --- a/src/fw/drivers/speaker/sf32lb52/audec.c +++ b/src/fw/drivers/speaker/sf32lb52/audec.c @@ -5,7 +5,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/mcu/cache.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "pbl/util/misc.h" #include "pbl/services/system_task.h" #include "pbl/soc/sf32lb/sleep.h" diff --git a/src/fw/drivers/task_watchdog.c b/src/fw/drivers/task_watchdog.c index a63a8c294e..7e541b6ee6 100644 --- a/src/fw/drivers/task_watchdog.c +++ b/src/fw/drivers/task_watchdog.c @@ -13,7 +13,7 @@ #include "pbl/services/system_task.h" #include "system/bootbits.h" #include "system/die.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/drivers/temperature/sf32lb.c b/src/fw/drivers/temperature/sf32lb.c index 0b55db9013..383255a65e 100644 --- a/src/fw/drivers/temperature/sf32lb.c +++ b/src/fw/drivers/temperature/sf32lb.c @@ -6,7 +6,7 @@ #include "bf0_hal.h" #include "board/board.h" #include "console/prompt.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/util/delay.h" diff --git a/src/fw/drivers/touch/cst816/cst816.c b/src/fw/drivers/touch/cst816/cst816.c index 59dbfd3858..b56c1fbed3 100644 --- a/src/fw/drivers/touch/cst816/cst816.c +++ b/src/fw/drivers/touch/cst816/cst816.c @@ -14,7 +14,7 @@ #include "pbl/services/regular_timer.h" #include "pbl/services/touch/touch.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/drivers/uart/nrf5.c b/src/fw/drivers/uart/nrf5.c index af133ccc5d..5c5c88d89b 100644 --- a/src/fw/drivers/uart/nrf5.c +++ b/src/fw/drivers/uart/nrf5.c @@ -5,7 +5,7 @@ #include "drivers/uart.h" #include "drivers/gpio.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "FreeRTOS.h" diff --git a/src/fw/drivers/vibe/vibe_aw86225.c b/src/fw/drivers/vibe/vibe_aw86225.c index 5756e88496..b5d06114a0 100644 --- a/src/fw/drivers/vibe/vibe_aw86225.c +++ b/src/fw/drivers/vibe/vibe_aw86225.c @@ -7,7 +7,7 @@ #include "drivers/gpio.h" #include "drivers/i2c.h" #include "drivers/vibe/vibe_aw86225.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/util/sleep.h" diff --git a/src/fw/drivers/vibe/vibe_aw8623x.c b/src/fw/drivers/vibe/vibe_aw8623x.c index f21f147073..5215aac577 100644 --- a/src/fw/drivers/vibe/vibe_aw8623x.c +++ b/src/fw/drivers/vibe/vibe_aw8623x.c @@ -7,7 +7,7 @@ #include "drivers/i2c.h" #include "drivers/vibe.h" #include "kernel/util/sleep.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DEFINE(driver_vibe_aw8623x, CONFIG_DRIVER_VIBE_LOG_LEVEL); diff --git a/src/fw/drivers/vibe/vibe_drv2604.c b/src/fw/drivers/vibe/vibe_drv2604.c index e24a0058e2..3b5090fc60 100644 --- a/src/fw/drivers/vibe/vibe_drv2604.c +++ b/src/fw/drivers/vibe/vibe_drv2604.c @@ -9,7 +9,7 @@ #include "drivers/i2c.h" #include "drivers/pmic.h" #include "drivers/pwm.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/drivers/watchdog/nrf5.c b/src/fw/drivers/watchdog/nrf5.c index 817976fdec..0214b16c0c 100644 --- a/src/fw/drivers/watchdog/nrf5.c +++ b/src/fw/drivers/watchdog/nrf5.c @@ -4,7 +4,7 @@ #include "drivers/watchdog.h" #include "util/bitset.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/drivers/watchdog/sf32lb.c b/src/fw/drivers/watchdog/sf32lb.c index cbb4c0bb96..ca2ee39901 100644 --- a/src/fw/drivers/watchdog/sf32lb.c +++ b/src/fw/drivers/watchdog/sf32lb.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "drivers/watchdog.h" -#include "system/logging.h" +#include #include "bf0_hal.h" diff --git a/src/fw/flash_region/flash_region.c b/src/fw/flash_region/flash_region.c index e4bbfba274..6a6c15229e 100644 --- a/src/fw/flash_region/flash_region.c +++ b/src/fw/flash_region/flash_region.c @@ -6,7 +6,7 @@ #include "drivers/flash.h" #include "drivers/task_watchdog.h" #include "kernel/util/sleep.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/kernel/core_dump.c b/src/fw/kernel/core_dump.c index e967b37ce4..6ee5e31740 100644 --- a/src/fw/kernel/core_dump.c +++ b/src/fw/kernel/core_dump.c @@ -41,7 +41,7 @@ extern char *itoa(int value, char *str, int base); #include "system/bootbits.h" #include "system/passert.h" #include "system/reset.h" -#include "system/logging.h" +#include #include "system/version.h" #include "pbl/util/attributes.h" diff --git a/src/fw/kernel/coredump_extra_regions.c b/src/fw/kernel/coredump_extra_regions.c index d269a15178..22e8a57dd8 100644 --- a/src/fw/kernel/coredump_extra_regions.c +++ b/src/fw/kernel/coredump_extra_regions.c @@ -4,7 +4,7 @@ #include "kernel/coredump_extra_regions.h" #include "kernel/core_dump_private.h" -#include "system/logging.h" +#include static CoredumpExtraRegion s_regions[COREDUMP_EXTRA_REGIONS_MAX]; static size_t s_count; diff --git a/src/fw/kernel/event_loop.c b/src/fw/kernel/event_loop.c index 01ce4f1920..7520af6839 100644 --- a/src/fw/kernel/event_loop.c +++ b/src/fw/kernel/event_loop.c @@ -77,7 +77,7 @@ #include "shell/shell_event_loop.h" #include "shell/system_app_state_machine.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reset.h" #include "system/testinfra.h" diff --git a/src/fw/kernel/events.c b/src/fw/kernel/events.c index 9b694a6f0e..23db395ed2 100644 --- a/src/fw/kernel/events.c +++ b/src/fw/kernel/events.c @@ -3,7 +3,7 @@ #include "events.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reset.h" diff --git a/src/fw/kernel/fault_handling.c b/src/fw/kernel/fault_handling.c index f71c1b90b3..89613b7a9a 100644 --- a/src/fw/kernel/fault_handling.c +++ b/src/fw/kernel/fault_handling.c @@ -16,7 +16,7 @@ #include "process_state/worker_state/worker_state.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/reboot_reason.h" #include "syscall/syscall.h" diff --git a/src/fw/kernel/panic.c b/src/fw/kernel/panic.c index b400f52efc..b4514951b3 100644 --- a/src/fw/kernel/panic.c +++ b/src/fw/kernel/panic.c @@ -7,7 +7,7 @@ #include "kernel/ui/modals/modal_manager.h" #include "process_management/app_manager.h" #include "shell/system_app_state_machine.h" -#include "system/logging.h" +#include #include "system/passert.h" static uint32_t s_current_error = 0; diff --git a/src/fw/kernel/system_message.c b/src/fw/kernel/system_message.c index d20ba108ec..eb37c4e0d9 100644 --- a/src/fw/kernel/system_message.c +++ b/src/fw/kernel/system_message.c @@ -15,7 +15,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/runlevel.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reboot_reason.h" #include "system/reset.h" diff --git a/src/fw/kernel/system_versions.c b/src/fw/kernel/system_versions.c index af12e8fbd6..8c67a68a7c 100644 --- a/src/fw/kernel/system_versions.c +++ b/src/fw/kernel/system_versions.c @@ -17,7 +17,7 @@ #include "pbl/services/activity/insights_settings.h" #include "shell/system_app_ids.auto.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/version.h" #include "pbl/util/attributes.h" diff --git a/src/fw/kernel/task_timer.c b/src/fw/kernel/task_timer.c index 44412decd2..685e1cd966 100644 --- a/src/fw/kernel/task_timer.c +++ b/src/fw/kernel/task_timer.c @@ -7,7 +7,7 @@ #include "kernel/pebble_tasks.h" #include "pbl/os/mutex.h" #include "pbl/os/tick.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" diff --git a/src/fw/kernel/util/factory_reset.c b/src/fw/kernel/util/factory_reset.c index 2508a33943..dfb584871f 100644 --- a/src/fw/kernel/util/factory_reset.c +++ b/src/fw/kernel/util/factory_reset.c @@ -16,7 +16,7 @@ #include "shell/normal/app_idle_timeout.h" #include "system/bootbits.h" #include "system/firmware_storage.h" -#include "system/logging.h" +#include #include "system/reboot_reason.h" #include "system/reset.h" #include "kernel/util/sleep.h" diff --git a/src/fw/kernel/util/fw_reset.c b/src/fw/kernel/util/fw_reset.c index 53340fb875..b160a0332b 100644 --- a/src/fw/kernel/util/fw_reset.c +++ b/src/fw/kernel/util/fw_reset.c @@ -14,7 +14,7 @@ #include "pbl/services/system_task.h" #include "process_management/app_manager.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reset.h" diff --git a/src/fw/kernel/util/standby.c b/src/fw/kernel/util/standby.c index cbb23bd1a1..fa5c15335d 100644 --- a/src/fw/kernel/util/standby.c +++ b/src/fw/kernel/util/standby.c @@ -6,7 +6,7 @@ #include "drivers/display/display.h" #include "drivers/pmic.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/reset.h" #include "system/passert.h" diff --git a/src/fw/libos_platform.c b/src/fw/libos_platform.c index fde1735deb..cf01acd2fc 100644 --- a/src/fw/libos_platform.c +++ b/src/fw/libos_platform.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" diff --git a/src/fw/main.c b/src/fw/main.c index edbfe9c343..6e6d9cb461 100644 --- a/src/fw/main.c +++ b/src/fw/main.c @@ -76,7 +76,7 @@ #include "console/serial_console.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reset.h" diff --git a/src/fw/mfg/mfg_serials.c b/src/fw/mfg/mfg_serials.c index e01b9d1295..c60642eef1 100644 --- a/src/fw/mfg/mfg_serials.c +++ b/src/fw/mfg/mfg_serials.c @@ -194,7 +194,7 @@ static void mfg_print_feedback(const MfgSerialsResult result, const uint8_t inde #include #include "drivers/rtc.h" -#include "system/logging.h" +#include #ifndef CONFIG_SOC_NRF52 static void prv_get_not_so_unique_serial(char *serial_number) { diff --git a/src/fw/popups/alarm_popup.c b/src/fw/popups/alarm_popup.c index c0950fa21c..12c6c19a37 100644 --- a/src/fw/popups/alarm_popup.c +++ b/src/fw/popups/alarm_popup.c @@ -13,7 +13,7 @@ #include "kernel/pbl_malloc.h" #include "kernel/ui/modals/modal_manager.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" #include "pbl/services/light.h" diff --git a/src/fw/popups/bluetooth_pairing_ui.c b/src/fw/popups/bluetooth_pairing_ui.c index d1720f9fea..1b58837cfd 100644 --- a/src/fw/popups/bluetooth_pairing_ui.c +++ b/src/fw/popups/bluetooth_pairing_ui.c @@ -20,7 +20,7 @@ #include "pbl/services/light.h" #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/popups/notifications/notification_window.c b/src/fw/popups/notifications/notification_window.c index 9b4cef7fe5..9b61283565 100644 --- a/src/fw/popups/notifications/notification_window.c +++ b/src/fw/popups/notifications/notification_window.c @@ -49,7 +49,7 @@ #include "pbl/services/timeline/timeline.h" #include "pbl/services/timeline/timeline_actions.h" #include "pbl/services/timeline/timeline_resources.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/trig.h" diff --git a/src/fw/popups/phone_ui.c b/src/fw/popups/phone_ui.c index 369011e532..ac5a4a8ba6 100644 --- a/src/fw/popups/phone_ui.c +++ b/src/fw/popups/phone_ui.c @@ -37,7 +37,7 @@ #include "pbl/services/timeline/timeline_actions.h" #include "pbl/services/timeline/timeline_resources.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/time/time.h" diff --git a/src/fw/popups/timeline/peek.c b/src/fw/popups/timeline/peek.c index 78bd32ae17..ff36118634 100644 --- a/src/fw/popups/timeline/peek.c +++ b/src/fw/popups/timeline/peek.c @@ -14,7 +14,7 @@ #include "kernel/ui/modals/modal_manager.h" #include "shell/prefs.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "pbl/util/struct.h" diff --git a/src/fw/popups/timeline/timeline_item_layer.c b/src/fw/popups/timeline/timeline_item_layer.c index 105df417cf..fdc57ef446 100644 --- a/src/fw/popups/timeline/timeline_item_layer.c +++ b/src/fw/popups/timeline/timeline_item_layer.c @@ -17,7 +17,7 @@ #include "pbl/services/timeline/layout_layer.h" #include "pbl/services/timeline/timeline.h" #include "pbl/services/timeline/timeline_actions.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/process_management/app_custom_icon.c b/src/fw/process_management/app_custom_icon.c index 9801e4d8df..42ee369703 100644 --- a/src/fw/process_management/app_custom_icon.c +++ b/src/fw/process_management/app_custom_icon.c @@ -10,7 +10,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/comm_session/session.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/process_management/app_install_manager.c b/src/fw/process_management/app_install_manager.c index 0c70c8fd64..e63df5c5ac 100644 --- a/src/fw/process_management/app_install_manager.c +++ b/src/fw/process_management/app_install_manager.c @@ -25,7 +25,7 @@ #include "pbl/services/blob_db/pin_db.h" #include "pbl/services/persist.h" #include "pbl/services/process_management/app_storage.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/circular_cache.h" #include "pbl/util/size.h" diff --git a/src/fw/process_management/app_manager.c b/src/fw/process_management/app_manager.c index 70f2d8be0e..ff0aab5082 100644 --- a/src/fw/process_management/app_manager.c +++ b/src/fw/process_management/app_manager.c @@ -52,7 +52,7 @@ #include "shell/system_app_state_machine.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/process_management/app_run_state.c b/src/fw/process_management/app_run_state.c index d06c7794e2..7ae84221a5 100644 --- a/src/fw/process_management/app_run_state.c +++ b/src/fw/process_management/app_run_state.c @@ -10,7 +10,7 @@ #include "process_management/app_manager.h" #include "process_management/process_manager.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #define PB_APP_STATE_ENDPOINT_ID 0x34 diff --git a/src/fw/process_management/launcher_app_message.c b/src/fw/process_management/launcher_app_message.c index 0353e982a6..07c9904688 100644 --- a/src/fw/process_management/launcher_app_message.c +++ b/src/fw/process_management/launcher_app_message.c @@ -6,7 +6,7 @@ #include "app_run_state.h" #include "applib/app_message/app_message_internal.h" #include "process_management/app_install_manager.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/dict.h" diff --git a/src/fw/process_management/process_manager.c b/src/fw/process_management/process_manager.c index 07cb56af33..3a5e027866 100644 --- a/src/fw/process_management/process_manager.c +++ b/src/fw/process_management/process_manager.c @@ -33,7 +33,7 @@ #include "shell/normal/watchface.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/pbl_malloc.h" diff --git a/src/fw/process_management/worker_manager.c b/src/fw/process_management/worker_manager.c index 45d8b8013e..4e14d20c1b 100644 --- a/src/fw/process_management/worker_manager.c +++ b/src/fw/process_management/worker_manager.c @@ -22,7 +22,7 @@ #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" // FreeRTOS stuff diff --git a/src/fw/resource/resource.c b/src/fw/resource/resource.c index ede576ab89..022408eb1e 100644 --- a/src/fw/resource/resource.c +++ b/src/fw/resource/resource.c @@ -12,7 +12,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/os/mutex.h" #include "pbl/services/process_management/app_storage.h" -#include "system/logging.h" +#include #include "system/passert.h" // TODO: this may be replaced once apps become more dynamic diff --git a/src/fw/resource/resource_storage.c b/src/fw/resource/resource_storage.c index 8350b96ba6..d03da48bec 100644 --- a/src/fw/resource/resource_storage.c +++ b/src/fw/resource/resource_storage.c @@ -9,7 +9,7 @@ #include "pbl/services/filesystem/app_file.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/version.h" #include "pbl/util/math.h" diff --git a/src/fw/resource/resource_storage_file.c b/src/fw/resource/resource_storage_file.c index abd71121df..e8d2d2cc98 100644 --- a/src/fw/resource/resource_storage_file.c +++ b/src/fw/resource/resource_storage_file.c @@ -6,7 +6,7 @@ #include "kernel/util/sleep.h" #include "pbl/services/filesystem/pfs.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/resource/resource_storage_flash.c b/src/fw/resource/resource_storage_flash.c index 5e24e7c2ab..36b2bc5475 100644 --- a/src/fw/resource/resource_storage_flash.c +++ b/src/fw/resource/resource_storage_flash.c @@ -9,7 +9,7 @@ #include "resource/resource_version.auto.h" #include "pbl/services/process_management/app_storage.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include diff --git a/src/fw/resource/resource_syscalls.c b/src/fw/resource/resource_syscalls.c index ec4f52be5e..959c555d7f 100644 --- a/src/fw/resource/resource_syscalls.c +++ b/src/fw/resource/resource_syscalls.c @@ -6,7 +6,7 @@ #include "process_management/app_manager.h" #include "kernel/memory_layout.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include //! @file resource_syscalls.c //! The landing place for untrusted code to use resources. diff --git a/src/fw/resource/system_resource.c b/src/fw/resource/system_resource.c index 6a21e16d5f..b77d2d3a48 100644 --- a/src/fw/resource/system_resource.c +++ b/src/fw/resource/system_resource.c @@ -13,7 +13,7 @@ #include "resource/resource.h" #include "resource/resource_storage.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/testinfra.h" #include "pbl/util/size.h" diff --git a/src/fw/services/accel_manager/service.c b/src/fw/services/accel_manager/service.c index cd2c4bf911..179b0c33d5 100644 --- a/src/fw/services/accel_manager/service.c +++ b/src/fw/services/accel_manager/service.c @@ -17,7 +17,7 @@ #include "pbl/services/vibe_pattern.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "util/shared_circular_buffer.h" diff --git a/src/fw/services/activity/activity.c b/src/fw/services/activity/activity.c index 86f0d415a7..a34706e8ba 100644 --- a/src/fw/services/activity/activity.c +++ b/src/fw/services/activity/activity.c @@ -26,7 +26,7 @@ #include "syscall/syscall.h" #include "syscall/syscall_internal.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/base64.h" #include "pbl/util/math.h" diff --git a/src/fw/services/activity/activity_insights.c b/src/fw/services/activity/activity_insights.c index cab20b50df..797fe53abe 100644 --- a/src/fw/services/activity/activity_insights.c +++ b/src/fw/services/activity/activity_insights.c @@ -25,7 +25,7 @@ #include "pbl/services/timeline/weather_layout.h" #include "shell/prefs.h" #include "shell/system_app_ids.auto.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/services/activity/activity_metrics.c b/src/fw/services/activity/activity_metrics.c index 40ea853fb4..a75afae3df 100644 --- a/src/fw/services/activity/activity_metrics.c +++ b/src/fw/services/activity/activity_metrics.c @@ -11,7 +11,7 @@ #include "syscall/syscall.h" #include "syscall/syscall_internal.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/base64.h" #include "pbl/util/math.h" diff --git a/src/fw/services/activity/activity_sessions.c b/src/fw/services/activity/activity_sessions.c index 01bdcd992b..4293f52fbc 100644 --- a/src/fw/services/activity/activity_sessions.c +++ b/src/fw/services/activity/activity_sessions.c @@ -10,7 +10,7 @@ #include "pbl/services/alarms/alarm.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/services/activity/insights_settings.c b/src/fw/services/activity/insights_settings.c index 14aa0a3cf8..ec807d8e25 100644 --- a/src/fw/services/activity/insights_settings.c +++ b/src/fw/services/activity/insights_settings.c @@ -9,7 +9,7 @@ #include "pbl/os/mutex.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_file.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" PBL_LOG_MODULE_DECLARE(service_activity, CONFIG_SERVICE_ACTIVITY_LOG_LEVEL); diff --git a/src/fw/services/activity/kraepelin/activity_algorithm_kraepelin.c b/src/fw/services/activity/kraepelin/activity_algorithm_kraepelin.c index 35a9413754..f86abdf1f4 100644 --- a/src/fw/services/activity/kraepelin/activity_algorithm_kraepelin.c +++ b/src/fw/services/activity/kraepelin/activity_algorithm_kraepelin.c @@ -14,7 +14,7 @@ #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_file.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/base64.h" #include "pbl/util/math.h" diff --git a/src/fw/services/activity/kraepelin/kraepelin_algorithm.c b/src/fw/services/activity/kraepelin/kraepelin_algorithm.c index db29153707..ebcac123ce 100644 --- a/src/fw/services/activity/kraepelin/kraepelin_algorithm.c +++ b/src/fw/services/activity/kraepelin/kraepelin_algorithm.c @@ -34,7 +34,7 @@ Pebble App roject. #include "pbl/util/trig.h" #include "pbl/services/hrm/hrm_manager_private.h" #include "pbl/services/activity/activity.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/math_fixed.h" diff --git a/src/fw/services/activity/workout_service.c b/src/fw/services/activity/workout_service.c index a74216eca7..2971b2646f 100644 --- a/src/fw/services/activity/workout_service.c +++ b/src/fw/services/activity/workout_service.c @@ -16,7 +16,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/evented_timer.h" #include "pbl/services/regular_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/time/time.h" #include "util/units.h" diff --git a/src/fw/services/alarms/alarm.c b/src/fw/services/alarms/alarm.c index eddbe7ad08..154aefdf19 100644 --- a/src/fw/services/alarms/alarm.c +++ b/src/fw/services/alarms/alarm.c @@ -19,7 +19,7 @@ #include "pbl/services/settings/settings_file.h" #include "pbl/services/timeline/event.h" #include "pbl/services/timeline/timeline.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/list.h" diff --git a/src/fw/services/analytics/native.c b/src/fw/services/analytics/native.c index 28d316e163..6478540076 100644 --- a/src/fw/services/analytics/native.c +++ b/src/fw/services/analytics/native.c @@ -9,7 +9,7 @@ #include "pbl/services/analytics/backend.h" #include "pbl/services/system_task.h" #include "pbl/services/data_logging/data_logging_service.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/build_id.h" diff --git a/src/fw/services/app_cache/service.c b/src/fw/services/app_cache/service.c index aa1119d196..461ed7a276 100644 --- a/src/fw/services/app_cache/service.c +++ b/src/fw/services/app_cache/service.c @@ -17,7 +17,7 @@ #include "shell/normal/quick_launch.h" #include "shell/normal/watchface.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/list.h" diff --git a/src/fw/services/app_fetch_endpoint/service.c b/src/fw/services/app_fetch_endpoint/service.c index 566f136217..a84c76bd81 100644 --- a/src/fw/services/app_fetch_endpoint/service.c +++ b/src/fw/services/app_fetch_endpoint/service.c @@ -14,7 +14,7 @@ #include "pbl/services/app_cache.h" #include "pbl/services/blob_db/app_db.h" #include "pbl/services/process_management/app_storage.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/services/app_inbox_service/service.c b/src/fw/services/app_inbox_service/service.c index d6bc5c24b6..eb41555d31 100644 --- a/src/fw/services/app_inbox_service/service.c +++ b/src/fw/services/app_inbox_service/service.c @@ -8,7 +8,7 @@ #include "process_management/process_manager.h" #include "pbl/os/mutex.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/buffer.h" #include "pbl/util/list.h" diff --git a/src/fw/services/app_message/app_message_receiver.c b/src/fw/services/app_message/app_message_receiver.c index e4f10397cb..04c15d86de 100644 --- a/src/fw/services/app_message/app_message_receiver.c +++ b/src/fw/services/app_message/app_message_receiver.c @@ -9,7 +9,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/comm_session/session_receive_router.h" #include "pbl/services/app_inbox_service.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include diff --git a/src/fw/services/app_message/app_message_sender.c b/src/fw/services/app_message/app_message_sender.c index 8859608a67..7976846b4f 100644 --- a/src/fw/services/app_message/app_message_sender.c +++ b/src/fw/services/app_message/app_message_sender.c @@ -7,7 +7,7 @@ #include "process_management/app_manager.h" #include "pbl/services/analytics/analytics.h" #include "pbl/services/app_message/app_message_sender.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/net.h" diff --git a/src/fw/services/app_order_endpoint/service.c b/src/fw/services/app_order_endpoint/service.c index 85d302d602..1ca48108e5 100644 --- a/src/fw/services/app_order_endpoint/service.c +++ b/src/fw/services/app_order_endpoint/service.c @@ -5,7 +5,7 @@ #include "pbl/services/process_management/app_order_storage.h" #include "pbl/services/comm_session/session.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/status_codes.h" #include "pbl/util/uuid.h" diff --git a/src/fw/services/app_outbox_service/service.c b/src/fw/services/app_outbox_service/service.c index dbf644b3b6..5fee7c3ffc 100644 --- a/src/fw/services/app_outbox_service/service.c +++ b/src/fw/services/app_outbox_service/service.c @@ -9,7 +9,7 @@ #include "pbl/services/app_outbox_service.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" diff --git a/src/fw/services/audio_endpoint/service.c b/src/fw/services/audio_endpoint/service.c index 7972eb3d9c..0a0c062702 100644 --- a/src/fw/services/audio_endpoint/service.c +++ b/src/fw/services/audio_endpoint/service.c @@ -7,7 +7,7 @@ #include "comm/bt_lock.h" #include "pbl/services/comm_session/session_send_buffer.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/circular_buffer.h" diff --git a/src/fw/services/battery/battery_monitor.c b/src/fw/services/battery/battery_monitor.c index ba9c2cf2e6..55b6a52bb5 100644 --- a/src/fw/services/battery/battery_monitor.c +++ b/src/fw/services/battery/battery_monitor.c @@ -9,7 +9,7 @@ #include "pbl/services/firmware_update.h" #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "util/ratio.h" #include diff --git a/src/fw/services/battery/nrf_fuel_gauge/battery_state.c b/src/fw/services/battery/nrf_fuel_gauge/battery_state.c index 91bbc411f0..5e6d44bd5b 100644 --- a/src/fw/services/battery/nrf_fuel_gauge/battery_state.c +++ b/src/fw/services/battery/nrf_fuel_gauge/battery_state.c @@ -13,7 +13,7 @@ #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/system_task.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/ratio.h" diff --git a/src/fw/services/battery/voltage/battery_curve.c b/src/fw/services/battery/voltage/battery_curve.c index 6b6593c7f3..cea6550369 100644 --- a/src/fw/services/battery/voltage/battery_curve.c +++ b/src/fw/services/battery/voltage/battery_curve.c @@ -4,7 +4,7 @@ #include "pbl/services/battery/battery_curve.h" #include "board/board.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/ratio.h" #include "pbl/util/size.h" diff --git a/src/fw/services/battery/voltage/battery_state.c b/src/fw/services/battery/voltage/battery_state.c index 398925a706..c5673879cf 100644 --- a/src/fw/services/battery/voltage/battery_state.c +++ b/src/fw/services/battery/voltage/battery_state.c @@ -17,7 +17,7 @@ #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/system_task.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "util/ratio.h" diff --git a/src/fw/services/blob_db/api.c b/src/fw/services/blob_db/api.c index e3fefa4ca9..1a51ea316e 100644 --- a/src/fw/services/blob_db/api.c +++ b/src/fw/services/blob_db/api.c @@ -21,7 +21,7 @@ #include "kernel/events.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/services/blob_db/app_db.c b/src/fw/services/blob_db/app_db.c index 91b5ca3b33..0e3ada654c 100644 --- a/src/fw/services/blob_db/app_db.c +++ b/src/fw/services/blob_db/app_db.c @@ -10,7 +10,7 @@ #include "pbl/services/settings/settings_file.h" #include "pbl/services/app_fetch_endpoint.h" #include "pbl/os/mutex.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/status_codes.h" #include "pbl/util/math.h" diff --git a/src/fw/services/blob_db/app_glance_db.c b/src/fw/services/blob_db/app_glance_db.c index f30d1a6cd5..9728ed9e5b 100644 --- a/src/fw/services/blob_db/app_glance_db.c +++ b/src/fw/services/blob_db/app_glance_db.c @@ -15,7 +15,7 @@ #include "pbl/services/app_cache.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_file.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "util/units.h" diff --git a/src/fw/services/blob_db/endpoint.c b/src/fw/services/blob_db/endpoint.c index 1bdc57cedc..dcc20ceed5 100644 --- a/src/fw/services/blob_db/endpoint.c +++ b/src/fw/services/blob_db/endpoint.c @@ -9,7 +9,7 @@ #include "pbl/services/bluetooth/bluetooth_persistent_storage.h" #include "pbl/services/comm_session/session.h" #include "pbl/services/analytics/analytics.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/status_codes.h" #include "system/hexdump.h" diff --git a/src/fw/services/blob_db/endpoint2.c b/src/fw/services/blob_db/endpoint2.c index d146d72595..df35ceee24 100644 --- a/src/fw/services/blob_db/endpoint2.c +++ b/src/fw/services/blob_db/endpoint2.c @@ -10,7 +10,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/comm_session/session_send_buffer.h" #include "pbl/services/analytics/analytics.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/status_codes.h" #include "system/hexdump.h" diff --git a/src/fw/services/blob_db/health_db.c b/src/fw/services/blob_db/health_db.c index 723d0a4f4f..b543eb9b9a 100644 --- a/src/fw/services/blob_db/health_db.c +++ b/src/fw/services/blob_db/health_db.c @@ -12,7 +12,7 @@ #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_file.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "util/units.h" diff --git a/src/fw/services/blob_db/ios_notif_pref_db.c b/src/fw/services/blob_db/ios_notif_pref_db.c index a922891ba5..5bf7c8f21f 100644 --- a/src/fw/services/blob_db/ios_notif_pref_db.c +++ b/src/fw/services/blob_db/ios_notif_pref_db.c @@ -12,7 +12,7 @@ #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_file.h" #include "pbl/services/timeline/attributes_actions.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "util/units.h" diff --git a/src/fw/services/blob_db/notif_db.c b/src/fw/services/blob_db/notif_db.c index 333047aad0..9ca8621ab4 100644 --- a/src/fw/services/blob_db/notif_db.c +++ b/src/fw/services/blob_db/notif_db.c @@ -5,7 +5,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/notifications/notification_storage.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_blob_db, CONFIG_SERVICE_BLOB_DB_LOG_LEVEL); diff --git a/src/fw/services/blob_db/pin_db.c b/src/fw/services/blob_db/pin_db.c index 9b739263d6..463388a116 100644 --- a/src/fw/services/blob_db/pin_db.c +++ b/src/fw/services/blob_db/pin_db.c @@ -16,7 +16,7 @@ #include "pbl/services/app_cache.h" #include "pbl/services/timeline/calendar.h" #include "pbl/services/timeline/timeline.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/units.h" #include "pbl/util/uuid.h" diff --git a/src/fw/services/blob_db/reminder_db.c b/src/fw/services/blob_db/reminder_db.c index 8e429b47f0..eed2ca6e90 100644 --- a/src/fw/services/blob_db/reminder_db.c +++ b/src/fw/services/blob_db/reminder_db.c @@ -11,7 +11,7 @@ #include "pbl/services/analytics/analytics.h" #include "pbl/services/timeline/reminders.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "util/units.h" PBL_LOG_MODULE_DECLARE(service_blob_db, CONFIG_SERVICE_BLOB_DB_LOG_LEVEL); diff --git a/src/fw/services/blob_db/settings_blob_db.c b/src/fw/services/blob_db/settings_blob_db.c index 9b109c439d..7d6deb55b3 100644 --- a/src/fw/services/blob_db/settings_blob_db.c +++ b/src/fw/services/blob_db/settings_blob_db.c @@ -12,7 +12,7 @@ #include "pbl/services/settings/settings_file.h" #include "shell/prefs.h" #include "shell/prefs_private.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/services/system_task.h" #include "pbl/util/list.h" diff --git a/src/fw/services/blob_db/sync.c b/src/fw/services/blob_db/sync.c index 00dd3fb35a..812fcc296f 100644 --- a/src/fw/services/blob_db/sync.c +++ b/src/fw/services/blob_db/sync.c @@ -8,7 +8,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/comm_session/session.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "pbl/util/list.h" #include diff --git a/src/fw/services/blob_db/sync_util.c b/src/fw/services/blob_db/sync_util.c index 05989c8a08..d0c380d3dd 100644 --- a/src/fw/services/blob_db/sync_util.c +++ b/src/fw/services/blob_db/sync_util.c @@ -4,7 +4,7 @@ #include "pbl/services/blob_db/sync_util.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_blob_db, CONFIG_SERVICE_BLOB_DB_LOG_LEVEL); diff --git a/src/fw/services/blob_db/timeline_item_storage.c b/src/fw/services/blob_db/timeline_item_storage.c index 259bb69197..e26bbe08d8 100644 --- a/src/fw/services/blob_db/timeline_item_storage.c +++ b/src/fw/services/blob_db/timeline_item_storage.c @@ -7,7 +7,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_raw_iter.h" -#include "system/logging.h" +#include #include "util/units.h" PBL_LOG_MODULE_DECLARE(service_blob_db, CONFIG_SERVICE_BLOB_DB_LOG_LEVEL); diff --git a/src/fw/services/blob_db/watch_app_prefs_db.c b/src/fw/services/blob_db/watch_app_prefs_db.c index b6a9425cd1..ab989620db 100644 --- a/src/fw/services/blob_db/watch_app_prefs_db.c +++ b/src/fw/services/blob_db/watch_app_prefs_db.c @@ -8,7 +8,7 @@ #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_file.h" #include "pbl/services/weather/weather_service_private.h" -#include "system/logging.h" +#include #include "system/status_codes.h" #include "util/units.h" #include "pbl/util/uuid.h" diff --git a/src/fw/services/blob_db/weather_db.c b/src/fw/services/blob_db/weather_db.c index adbc029996..5bec9b9df7 100644 --- a/src/fw/services/blob_db/weather_db.c +++ b/src/fw/services/blob_db/weather_db.c @@ -9,7 +9,7 @@ #include "pbl/services/settings/settings_file.h" #include "pbl/services/weather/weather_service.h" #include "pbl/services/weather/weather_types.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/units.h" diff --git a/src/fw/services/bluetooth/ble_hrm.c b/src/fw/services/bluetooth/ble_hrm.c index 2319cf880d..5889fef3b6 100644 --- a/src/fw/services/bluetooth/ble_hrm.c +++ b/src/fw/services/bluetooth/ble_hrm.c @@ -18,7 +18,7 @@ #include "pbl/services/regular_timer.h" #include "pbl/services/activity/activity.h" #include "shell/system_app_ids.auto.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/services/bluetooth/bluetooth_ctl.c b/src/fw/services/bluetooth/bluetooth_ctl.c index d4bb5babb1..ca1cad05a7 100644 --- a/src/fw/services/bluetooth/bluetooth_ctl.c +++ b/src/fw/services/bluetooth/bluetooth_ctl.c @@ -23,7 +23,7 @@ #include "pbl/services/regular_timer.h" #include "pbl/services/system_task.h" #include "pbl/services/bluetooth/ble_hrm.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DEFINE(service_bluetooth, CONFIG_SERVICE_BLUETOOTH_LOG_LEVEL); diff --git a/src/fw/services/bluetooth/bluetooth_persistent_storage_debug.c b/src/fw/services/bluetooth/bluetooth_persistent_storage_debug.c index c8a17a4254..fe0cb034ca 100644 --- a/src/fw/services/bluetooth/bluetooth_persistent_storage_debug.c +++ b/src/fw/services/bluetooth/bluetooth_persistent_storage_debug.c @@ -6,7 +6,7 @@ #include "console/prompt.h" #include "pbl/services/shared_prf_storage/shared_prf_storage_debug.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "pbl/util/string.h" #include diff --git a/src/fw/services/bluetooth/bluetooth_persistent_storage_normal.c b/src/fw/services/bluetooth/bluetooth_persistent_storage_normal.c index 48dd8bb713..536697c346 100644 --- a/src/fw/services/bluetooth/bluetooth_persistent_storage_normal.c +++ b/src/fw/services/bluetooth/bluetooth_persistent_storage_normal.c @@ -20,7 +20,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/settings/settings_file.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/services/bluetooth/bluetooth_persistent_storage_prf.c b/src/fw/services/bluetooth/bluetooth_persistent_storage_prf.c index eedbefc557..090c0e63ea 100644 --- a/src/fw/services/bluetooth/bluetooth_persistent_storage_prf.c +++ b/src/fw/services/bluetooth/bluetooth_persistent_storage_prf.c @@ -15,7 +15,7 @@ #include "comm/ble/kernel_le_client/kernel_le_client.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/services/bluetooth/bonding.c b/src/fw/services/bluetooth/bonding.c index fa01712db6..def1e04af6 100644 --- a/src/fw/services/bluetooth/bonding.c +++ b/src/fw/services/bluetooth/bonding.c @@ -9,7 +9,7 @@ #include "pbl/services/bluetooth/local_addr.h" #include "kernel/event_loop.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include #include diff --git a/src/fw/services/bluetooth/local_addr.c b/src/fw/services/bluetooth/local_addr.c index 57afd024ec..9f3b323cb7 100644 --- a/src/fw/services/bluetooth/local_addr.c +++ b/src/fw/services/bluetooth/local_addr.c @@ -4,7 +4,7 @@ #include "pbl/services/bluetooth/local_addr.h" #include "comm/bt_lock.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/services/bluetooth/pairability.c b/src/fw/services/bluetooth/pairability.c index 167f5b9bfa..db70681c39 100644 --- a/src/fw/services/bluetooth/pairability.c +++ b/src/fw/services/bluetooth/pairability.c @@ -1,7 +1,7 @@ /* SPDX-FileCopyrightText: 2024 Google LLC */ /* SPDX-License-Identifier: Apache-2.0 */ -#include "system/logging.h" +#include #include "system/passert.h" #include "comm/ble/gap_le_slave_discovery.h" diff --git a/src/fw/services/bluetooth/pebble_pairing_service.c b/src/fw/services/bluetooth/pebble_pairing_service.c index 108cc85b39..067bbc792b 100644 --- a/src/fw/services/bluetooth/pebble_pairing_service.c +++ b/src/fw/services/bluetooth/pebble_pairing_service.c @@ -9,7 +9,7 @@ #include "comm/bt_conn_mgr.h" #include "comm/bt_lock.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_bluetooth, CONFIG_SERVICE_BLUETOOTH_LOG_LEVEL); diff --git a/src/fw/services/bluetooth/pp_ble_control.c b/src/fw/services/bluetooth/pp_ble_control.c index faa165d356..4580166ae6 100644 --- a/src/fw/services/bluetooth/pp_ble_control.c +++ b/src/fw/services/bluetooth/pp_ble_control.c @@ -3,7 +3,7 @@ #include "pbl/services/bluetooth/pp_ble_control.h" #include "pbl/services/bluetooth/pairability.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" diff --git a/src/fw/services/clock/service.c b/src/fw/services/clock/service.c index 43d5c09ba8..fbc0386e62 100644 --- a/src/fw/services/clock/service.c +++ b/src/fw/services/clock/service.c @@ -16,7 +16,7 @@ #include "shell/prefs.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "pbl/util/math.h" #include "util/net.h" diff --git a/src/fw/services/comm_session/app_session_capabilities.c b/src/fw/services/comm_session/app_session_capabilities.c index 099b3cb479..a052646988 100644 --- a/src/fw/services/comm_session/app_session_capabilities.c +++ b/src/fw/services/comm_session/app_session_capabilities.c @@ -6,7 +6,7 @@ #include "pbl/services/comm_session/app_session_capabilities.h" #include "pbl/services/settings/settings_file.h" #include "pbl/os/mutex.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/units.h" diff --git a/src/fw/services/comm_session/default_kernel_receiver.c b/src/fw/services/comm_session/default_kernel_receiver.c index c58e344f70..7403076e48 100644 --- a/src/fw/services/comm_session/default_kernel_receiver.c +++ b/src/fw/services/comm_session/default_kernel_receiver.c @@ -7,7 +7,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/comm_session/session.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/slist.h" diff --git a/src/fw/services/comm_session/default_kernel_sender.c b/src/fw/services/comm_session/default_kernel_sender.c index 3474d76fdb..4f78df0285 100644 --- a/src/fw/services/comm_session/default_kernel_sender.c +++ b/src/fw/services/comm_session/default_kernel_sender.c @@ -8,7 +8,7 @@ #include "pbl/services/comm_session/protocol.h" #include "pbl/services/comm_session/session_send_buffer.h" #include "pbl/services/comm_session/session_send_queue.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "pbl/util/likely.h" #include "pbl/util/math.h" diff --git a/src/fw/services/comm_session/meta_endpoint.c b/src/fw/services/comm_session/meta_endpoint.c index 5724cc8dcc..7f07409e69 100644 --- a/src/fw/services/comm_session/meta_endpoint.c +++ b/src/fw/services/comm_session/meta_endpoint.c @@ -5,7 +5,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "util/net.h" PBL_LOG_MODULE_DECLARE(service_comm_session, CONFIG_SERVICE_COMM_SESSION_LOG_LEVEL); diff --git a/src/fw/services/comm_session/session.c b/src/fw/services/comm_session/session.c index fe5711176d..a8b70e0a34 100644 --- a/src/fw/services/comm_session/session.c +++ b/src/fw/services/comm_session/session.c @@ -24,7 +24,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/data_logging/dls_private.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "syscall/syscall_internal.h" diff --git a/src/fw/services/comm_session/session_receive_router.c b/src/fw/services/comm_session/session_receive_router.c index fa250c7fed..a8e2eed33a 100644 --- a/src/fw/services/comm_session/session_receive_router.c +++ b/src/fw/services/comm_session/session_receive_router.c @@ -7,7 +7,7 @@ #include "pbl/services/comm_session/session_analytics.h" #include "pbl/services/comm_session/session_internal.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/net.h" #include "pbl/util/size.h" diff --git a/src/fw/services/comm_session/session_remote_version.c b/src/fw/services/comm_session/session_remote_version.c index e2b480bd2c..ddf4baeaef 100644 --- a/src/fw/services/comm_session/session_remote_version.c +++ b/src/fw/services/comm_session/session_remote_version.c @@ -15,7 +15,7 @@ #include "pbl/util/attributes.h" #include "util/net.h" -#include "system/logging.h" +#include #include "system/hexdump.h" PBL_LOG_MODULE_DECLARE(service_comm_session, CONFIG_SERVICE_COMM_SESSION_LOG_LEVEL); diff --git a/src/fw/services/compositor/compositor.c b/src/fw/services/compositor/compositor.c index f8730fcf1a..d0783acdfe 100644 --- a/src/fw/services/compositor/compositor.c +++ b/src/fw/services/compositor/compositor.c @@ -21,7 +21,7 @@ #include "process_management/process_manager.h" #include "process_state/app_state/app_state.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/profiler.h" #include "pbl/util/size.h" diff --git a/src/fw/services/compositor/default/compositor_port_hole_transitions.c b/src/fw/services/compositor/default/compositor_port_hole_transitions.c index 634ba32bfb..64b0921818 100644 --- a/src/fw/services/compositor/default/compositor_port_hole_transitions.c +++ b/src/fw/services/compositor/default/compositor_port_hole_transitions.c @@ -10,7 +10,7 @@ #include "pbl/services/compositor/compositor_transitions.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include typedef struct { CompositorTransitionDirection direction; diff --git a/src/fw/services/compositor/default/compositor_slide_transitions.c b/src/fw/services/compositor/default/compositor_slide_transitions.c index 895723de25..9f87b86349 100644 --- a/src/fw/services/compositor/default/compositor_slide_transitions.c +++ b/src/fw/services/compositor/default/compositor_slide_transitions.c @@ -12,7 +12,7 @@ #include "applib/graphics/gtypes.h" #include "applib/ui/animation_interpolate.h" #include "popups/timeline/peek.h" -#include "system/logging.h" +#include // TODO: PBL-31388 Factor out vertical compositor slide animations // This does a similar transition to the legacy modal slide transition diff --git a/src/fw/services/compositor/screenshot_pp.c b/src/fw/services/compositor/screenshot_pp.c index 243a70ab65..63e1ff7273 100644 --- a/src/fw/services/compositor/screenshot_pp.c +++ b/src/fw/services/compositor/screenshot_pp.c @@ -10,7 +10,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/comm_session/session_send_buffer.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "util/net.h" diff --git a/src/fw/services/contacts/contacts.c b/src/fw/services/contacts/contacts.c index 8e366b23a4..d1bce2794c 100644 --- a/src/fw/services/contacts/contacts.c +++ b/src/fw/services/contacts/contacts.c @@ -6,7 +6,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/blob_db/contacts_db.h" #include "pbl/services/timeline/attributes_actions.h" -#include "system/logging.h" +#include static Contact* prv_deserialize_contact(SerializedContact *serialized_contact, const size_t serialized_contact_data_len) { diff --git a/src/fw/services/cron/service.c b/src/fw/services/cron/service.c index eba1ab0cb3..ad3f190d6c 100644 --- a/src/fw/services/cron/service.c +++ b/src/fw/services/cron/service.c @@ -7,7 +7,7 @@ #include "drivers/rtc.h" #include "pbl/os/mutex.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/services/data_logging/dls_endpoint.c b/src/fw/services/data_logging/dls_endpoint.c index 76c3738a94..79b0f0623e 100644 --- a/src/fw/services/data_logging/dls_endpoint.c +++ b/src/fw/services/data_logging/dls_endpoint.c @@ -13,7 +13,7 @@ #include "pbl/services/new_timer/new_timer.h" #include "pbl/services/data_logging/data_logging_service.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "util/legacy_checksum.h" diff --git a/src/fw/services/data_logging/dls_list.c b/src/fw/services/data_logging/dls_list.c index 695b6abd31..89e1b2f169 100644 --- a/src/fw/services/data_logging/dls_list.c +++ b/src/fw/services/data_logging/dls_list.c @@ -9,7 +9,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/process_manager.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/uuid.h" diff --git a/src/fw/services/data_logging/dls_main.c b/src/fw/services/data_logging/dls_main.c index f32e334cc2..559049ad9a 100644 --- a/src/fw/services/data_logging/dls_main.c +++ b/src/fw/services/data_logging/dls_main.c @@ -23,7 +23,7 @@ #include "pbl/services/regular_timer.h" #include "pbl/services/system_task.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "pbl/os/mutex.h" #include "system/passert.h" #include "kernel/util/sleep.h" diff --git a/src/fw/services/data_logging/dls_storage.c b/src/fw/services/data_logging/dls_storage.c index 0e3d048ae2..6d343ddf31 100644 --- a/src/fw/services/data_logging/dls_storage.c +++ b/src/fw/services/data_logging/dls_storage.c @@ -11,7 +11,7 @@ #include "kernel/util/sleep.h" #include "pbl/services/analytics/analytics.h" #include "pbl/services/filesystem/pfs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/services/data_logging/dls_syscalls.c b/src/fw/services/data_logging/dls_syscalls.c index f4bffc1976..15cead94f5 100644 --- a/src/fw/services/data_logging/dls_syscalls.c +++ b/src/fw/services/data_logging/dls_syscalls.c @@ -6,7 +6,7 @@ #include "kernel/memory_layout.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include diff --git a/src/fw/services/debounced_connection_service/service.c b/src/fw/services/debounced_connection_service/service.c index 03d89be896..1e166480b9 100644 --- a/src/fw/services/debounced_connection_service/service.c +++ b/src/fw/services/debounced_connection_service/service.c @@ -15,7 +15,7 @@ #include "pbl/services/vibes/vibe_score.h" #endif -#include "system/logging.h" +#include //! This module is responsible for propagating debounced connection events. //! Connection events are passed through right away to subscribers but diff --git a/src/fw/services/ecompass/correction.c b/src/fw/services/ecompass/correction.c index e3734bb7ce..b327a98b1e 100644 --- a/src/fw/services/ecompass/correction.c +++ b/src/fw/services/ecompass/correction.c @@ -5,7 +5,7 @@ #include "pbl/util/trig.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include diff --git a/src/fw/services/ecompass/service.c b/src/fw/services/ecompass/service.c index 770b9b82ec..ade30f5469 100644 --- a/src/fw/services/ecompass/service.c +++ b/src/fw/services/ecompass/service.c @@ -15,7 +15,7 @@ #include "pbl/services/regular_timer.h" #include "syscall/syscall_internal.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/util/sleep.h" diff --git a/src/fw/services/event_service/service.c b/src/fw/services/event_service/service.c index 2a02d6eb07..17538852e6 100644 --- a/src/fw/services/event_service/service.c +++ b/src/fw/services/event_service/service.c @@ -11,7 +11,7 @@ #include "pbl/services/event_service.h" #include "syscall/syscall_internal.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "FreeRTOS.h" diff --git a/src/fw/services/evented_timer/service.c b/src/fw/services/evented_timer/service.c index 279ac31498..8190aa6144 100644 --- a/src/fw/services/evented_timer/service.c +++ b/src/fw/services/evented_timer/service.c @@ -11,7 +11,7 @@ #include "system/passert.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "process_management/app_manager.h" PBL_LOG_MODULE_DEFINE(service_evented_timer, CONFIG_SERVICE_EVENTED_TIMER_LOG_LEVEL); diff --git a/src/fw/services/filesystem/flash_translation.c b/src/fw/services/filesystem/flash_translation.c index 3d123ab604..86a2944f16 100644 --- a/src/fw/services/filesystem/flash_translation.c +++ b/src/fw/services/filesystem/flash_translation.c @@ -8,7 +8,7 @@ #include "flash_region/filesystem_regions.h" #include "flash_region/flash_region.h" #include "pbl/services/filesystem/pfs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/services/filesystem/pfs.c b/src/fw/services/filesystem/pfs.c index f85f8b1ca2..c9af5f537d 100644 --- a/src/fw/services/filesystem/pfs.c +++ b/src/fw/services/filesystem/pfs.c @@ -22,7 +22,7 @@ #include "pbl/services/analytics/analytics.h" #include "pbl/services/filesystem/flash_translation.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "util/crc8.h" diff --git a/src/fw/services/firmware_update/service.c b/src/fw/services/firmware_update/service.c index 85d7db1ba5..f414936fbf 100644 --- a/src/fw/services/firmware_update/service.c +++ b/src/fw/services/firmware_update/service.c @@ -17,7 +17,7 @@ #endif #include "pbl/services/runlevel.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/reset.h" #include "pbl/util/math.h" diff --git a/src/fw/services/get_bytes/get_bytes.c b/src/fw/services/get_bytes/get_bytes.c index 89800203d5..258396f03c 100644 --- a/src/fw/services/get_bytes/get_bytes.c +++ b/src/fw/services/get_bytes/get_bytes.c @@ -14,7 +14,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/filesystem/pfs.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #include "util/net.h" diff --git a/src/fw/services/get_bytes/get_bytes_storage_coredump.c b/src/fw/services/get_bytes/get_bytes_storage_coredump.c index fc68af8695..ea2ea58ab5 100644 --- a/src/fw/services/get_bytes/get_bytes_storage_coredump.c +++ b/src/fw/services/get_bytes/get_bytes_storage_coredump.c @@ -8,7 +8,7 @@ #include "flash_region/flash_region.h" #include "kernel/core_dump.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/status_codes.h" PBL_LOG_MODULE_DECLARE(service_get_bytes, CONFIG_SERVICE_GET_BYTES_LOG_LEVEL); diff --git a/src/fw/services/health_sync_endpoint/service.c b/src/fw/services/health_sync_endpoint/service.c index 0f74f74ef1..caedb9dd19 100644 --- a/src/fw/services/health_sync_endpoint/service.c +++ b/src/fw/services/health_sync_endpoint/service.c @@ -6,7 +6,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/system_task.h" #include "pbl/services/data_logging/data_logging_service.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" PBL_LOG_MODULE_DEFINE(service_health_sync_endpoint, CONFIG_SERVICE_HEALTH_SYNC_ENDPOINT_LOG_LEVEL); diff --git a/src/fw/services/hrm/hrm_manager.c b/src/fw/services/hrm/hrm_manager.c index 686348295d..31d8d12e43 100644 --- a/src/fw/services/hrm/hrm_manager.c +++ b/src/fw/services/hrm/hrm_manager.c @@ -16,7 +16,7 @@ #include "pbl/services/activity/activity.h" #include "syscall/syscall_internal.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/services/i18n/i18n.c b/src/fw/services/i18n/i18n.c index 767b9370b6..923763cce8 100644 --- a/src/fw/services/i18n/i18n.c +++ b/src/fw/services/i18n/i18n.c @@ -37,7 +37,7 @@ #include "pbl/services/filesystem/pfs.h" #include "shell/normal/language_ui.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" diff --git a/src/fw/services/i18n/syscalls.c b/src/fw/services/i18n/syscalls.c index 29a0030526..8dbfd8f4e7 100644 --- a/src/fw/services/i18n/syscalls.c +++ b/src/fw/services/i18n/syscalls.c @@ -6,7 +6,7 @@ #include "kernel/memory_layout.h" #include "kernel/pebble_tasks.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_i18n, CONFIG_SERVICE_I18N_LOG_LEVEL); diff --git a/src/fw/services/light/service.c b/src/fw/services/light/service.c index 66dac1474f..1f5ceeb9f6 100644 --- a/src/fw/services/light/service.c +++ b/src/fw/services/light/service.c @@ -18,7 +18,7 @@ #include "pbl/util/math.h" #include "services/light/als_screen_compensation.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "pbl/os/mutex.h" #include "system/passert.h" diff --git a/src/fw/services/music/endpoint.c b/src/fw/services/music/endpoint.c index 604e70913a..b56e0ee30a 100644 --- a/src/fw/services/music/endpoint.c +++ b/src/fw/services/music/endpoint.c @@ -8,7 +8,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/comm_session/session_remote_os.h" #include "pbl/services/music_internal.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" PBL_LOG_MODULE_DECLARE(service_music, CONFIG_SERVICE_MUSIC_LOG_LEVEL); diff --git a/src/fw/services/music/service.c b/src/fw/services/music/service.c index 9ee8742a30..d28be67eb2 100644 --- a/src/fw/services/music/service.c +++ b/src/fw/services/music/service.c @@ -10,7 +10,7 @@ #include "shell/system_app_ids.auto.h" #include "pbl/os/mutex.h" #include "pbl/os/tick.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" PBL_LOG_MODULE_DEFINE(service_music, CONFIG_SERVICE_MUSIC_LOG_LEVEL); diff --git a/src/fw/services/new_timer/new_timer.c b/src/fw/services/new_timer/new_timer.c index a7b89efa6e..350522f165 100644 --- a/src/fw/services/new_timer/new_timer.c +++ b/src/fw/services/new_timer/new_timer.c @@ -10,7 +10,7 @@ #include "pbl/mcu/interrupts.h" #include "pbl/os/mutex.h" #include "pbl/os/tick.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "FreeRTOS.h" diff --git a/src/fw/services/notifications/ancs/ancs_filtering.c b/src/fw/services/notifications/ancs/ancs_filtering.c index 7942e44617..38574f7b25 100644 --- a/src/fw/services/notifications/ancs/ancs_filtering.c +++ b/src/fw/services/notifications/ancs/ancs_filtering.c @@ -7,7 +7,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/notifications/alerts_preferences.h" #include "pbl/services/timeline/attributes_actions.h" -#include "system/logging.h" +#include #include "util/pstring.h" #include diff --git a/src/fw/services/notifications/ancs/ancs_item.c b/src/fw/services/notifications/ancs/ancs_item.c index 8b321094e9..481d43de40 100644 --- a/src/fw/services/notifications/ancs/ancs_item.c +++ b/src/fw/services/notifications/ancs/ancs_item.c @@ -9,7 +9,7 @@ #include "kernel/pbl_malloc.h" #include "resource/resource_storage_impl.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "pbl/services/timeline/timeline_resources.h" #include "pbl/util/string.h" diff --git a/src/fw/services/notifications/ancs/ancs_notifications.c b/src/fw/services/notifications/ancs/ancs_notifications.c index 7ffcac2178..7b7f69ed3c 100644 --- a/src/fw/services/notifications/ancs/ancs_notifications.c +++ b/src/fw/services/notifications/ancs/ancs_notifications.c @@ -20,7 +20,7 @@ #include "pbl/services/notifications/notification_storage.h" #include "pbl/services/notifications/notifications.h" #include "pbl/services/timeline/timeline.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/pstring.h" diff --git a/src/fw/services/notifications/ancs/nexmo.c b/src/fw/services/notifications/ancs/nexmo.c index 384a74dbc9..926607f43d 100644 --- a/src/fw/services/notifications/ancs/nexmo.c +++ b/src/fw/services/notifications/ancs/nexmo.c @@ -7,7 +7,7 @@ #include "comm/ble/kernel_le_client/ancs/ancs.h" #include "comm/ble/kernel_le_client/ancs/ancs_types.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_notifications, CONFIG_SERVICE_NOTIFICATIONS_LOG_LEVEL); diff --git a/src/fw/services/notifications/do_not_disturb.c b/src/fw/services/notifications/do_not_disturb.c index 23daf99610..823bc096b1 100644 --- a/src/fw/services/notifications/do_not_disturb.c +++ b/src/fw/services/notifications/do_not_disturb.c @@ -27,7 +27,7 @@ #include "pbl/services/notifications/alerts_preferences_private.h" #include "pbl/services/timeline/calendar.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" #include "pbl/util/math.h" diff --git a/src/fw/services/notifications/do_not_disturb_toggle.c b/src/fw/services/notifications/do_not_disturb_toggle.c index 48f2269dc9..322539698e 100644 --- a/src/fw/services/notifications/do_not_disturb_toggle.c +++ b/src/fw/services/notifications/do_not_disturb_toggle.c @@ -7,7 +7,7 @@ #include "applib/app_exit_reason.h" #include "applib/ui/action_toggle.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_notifications, CONFIG_SERVICE_NOTIFICATIONS_LOG_LEVEL); diff --git a/src/fw/services/notifications/notification_storage.c b/src/fw/services/notifications/notification_storage.c index 22a6ace8e9..080d8a1b45 100644 --- a/src/fw/services/notifications/notification_storage.c +++ b/src/fw/services/notifications/notification_storage.c @@ -8,8 +8,8 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/system_task.h" -#include "system/logging.h" -#include "system/logging.h" +#include +#include #include "pbl/os/mutex.h" #include "system/passert.h" #include "pbl/util/iterator.h" diff --git a/src/fw/services/notifications/notifications.c b/src/fw/services/notifications/notifications.c index 4fc64036e5..9c3c165ed3 100644 --- a/src/fw/services/notifications/notifications.c +++ b/src/fw/services/notifications/notifications.c @@ -10,7 +10,7 @@ #include "drivers/rtc.h" #include "drivers/battery.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/bitset.h" diff --git a/src/fw/services/persist/service.c b/src/fw/services/persist/service.c index bca0f59c1f..e3c196c819 100644 --- a/src/fw/services/persist/service.c +++ b/src/fw/services/persist/service.c @@ -13,7 +13,7 @@ #include "pbl/services/filesystem/app_file.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/settings/settings_file.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/list.h" diff --git a/src/fw/services/phone_call/service.c b/src/fw/services/phone_call/service.c index 22af709ef6..5406f941a1 100644 --- a/src/fw/services/phone_call/service.c +++ b/src/fw/services/phone_call/service.c @@ -15,7 +15,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/notifications/alerts.h" #include "pbl/services/notifications/ancs/ancs_phone_call.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DEFINE(service_phone_call, CONFIG_SERVICE_PHONE_CALL_LOG_LEVEL); diff --git a/src/fw/services/phone_pp/service.c b/src/fw/services/phone_pp/service.c index 57aa245486..a4f11b1149 100644 --- a/src/fw/services/phone_pp/service.c +++ b/src/fw/services/phone_pp/service.c @@ -8,7 +8,7 @@ #include "pbl/services/phone_call.h" #include "pbl/services/phone_call_util.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/services/ping/service.c b/src/fw/services/ping/service.c index 03921bd32e..5f76923034 100644 --- a/src/fw/services/ping/service.c +++ b/src/fw/services/ping/service.c @@ -11,7 +11,7 @@ #include "pbl/services/analytics/analytics.h" #include "pbl/services/comm_session/session.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "util/net.h" diff --git a/src/fw/services/poll_remote/service.c b/src/fw/services/poll_remote/service.c index 92566d33ee..990f754621 100644 --- a/src/fw/services/poll_remote/service.c +++ b/src/fw/services/poll_remote/service.c @@ -5,7 +5,7 @@ #include "pbl/services/comm_session/protocol.h" #include "pbl/services/comm_session/session.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" diff --git a/src/fw/services/prf_update/service.c b/src/fw/services/prf_update/service.c index de464575ae..5c8c99a46f 100644 --- a/src/fw/services/prf_update/service.c +++ b/src/fw/services/prf_update/service.c @@ -5,7 +5,7 @@ #include "flash_region/flash_region.h" #include "system/bootbits.h" #include "system/firmware_storage.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" PBL_LOG_MODULE_DEFINE(service_prf_update, CONFIG_SERVICE_PRF_UPDATE_LOG_LEVEL); diff --git a/src/fw/services/process_management/app_order_storage.c b/src/fw/services/process_management/app_order_storage.c index bbab95ae33..315cc64277 100644 --- a/src/fw/services/process_management/app_order_storage.c +++ b/src/fw/services/process_management/app_order_storage.c @@ -7,7 +7,7 @@ #include "process_management/app_install_manager.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DEFINE(service_process_management, CONFIG_SERVICE_PROCESS_MANAGEMENT_LOG_LEVEL); diff --git a/src/fw/services/process_management/app_storage.c b/src/fw/services/process_management/app_storage.c index d2c423c237..ea273daec4 100644 --- a/src/fw/services/process_management/app_storage.c +++ b/src/fw/services/process_management/app_storage.c @@ -15,7 +15,7 @@ #include "resource/resource_storage.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/filesystem/app_file.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/hexdump.h" #include "pbl/util/build_id.h" diff --git a/src/fw/services/process_management/process_loader_storage.c b/src/fw/services/process_management/process_loader_storage.c index d8d4e3485f..37bc4be0de 100644 --- a/src/fw/services/process_management/process_loader_storage.c +++ b/src/fw/services/process_management/process_loader_storage.c @@ -8,7 +8,7 @@ #include "process_management/pebble_process_md.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/process_management/app_storage.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/legacy_checksum.h" diff --git a/src/fw/services/protobuf_log/protobuf_log.c b/src/fw/services/protobuf_log/protobuf_log.c index 359aef1603..05575c714a 100644 --- a/src/fw/services/protobuf_log/protobuf_log.c +++ b/src/fw/services/protobuf_log/protobuf_log.c @@ -14,7 +14,7 @@ #include "pb_decode.h" #include "pb_encode.h" #include "pbl/services/data_logging/data_logging_service.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/version.h" #include "pbl/util/math.h" diff --git a/src/fw/services/put_bytes/put_bytes.c b/src/fw/services/put_bytes/put_bytes.c index e8c8011fc4..4edd96ef8b 100644 --- a/src/fw/services/put_bytes/put_bytes.c +++ b/src/fw/services/put_bytes/put_bytes.c @@ -18,7 +18,7 @@ #include "pbl/services/process_management/app_storage.h" #include "system/bootbits.h" #include "system/firmware_storage.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/src/fw/services/put_bytes/put_bytes_storage.c b/src/fw/services/put_bytes/put_bytes_storage.c index 915c2cd4a6..f0f8c7fe94 100644 --- a/src/fw/services/put_bytes/put_bytes_storage.c +++ b/src/fw/services/put_bytes/put_bytes_storage.c @@ -4,7 +4,7 @@ #include "pbl/services/put_bytes/put_bytes_storage_internal.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/services/regular_timer/service.c b/src/fw/services/regular_timer/service.c index a40deda328..150ea3214c 100644 --- a/src/fw/services/regular_timer/service.c +++ b/src/fw/services/regular_timer/service.c @@ -5,7 +5,7 @@ #include "pbl/os/mutex.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "FreeRTOS.h" diff --git a/src/fw/services/services.c b/src/fw/services/services.c index 18806a9835..6a54ea2466 100644 --- a/src/fw/services/services.c +++ b/src/fw/services/services.c @@ -10,7 +10,7 @@ #include "console/prompt.h" #include "pbl/services/services_common.h" #include "pbl/services/services_normal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "pbl/util/string.h" diff --git a/src/fw/services/settings/settings_file.c b/src/fw/services/settings/settings_file.c index 563afdc2f2..5b0ddf0d3e 100644 --- a/src/fw/services/settings/settings_file.c +++ b/src/fw/services/settings/settings_file.c @@ -8,7 +8,7 @@ #include "drivers/task_watchdog.h" #include "kernel/pbl_malloc.h" #include "pbl/services/filesystem/pfs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/crc8.h" diff --git a/src/fw/services/settings/settings_raw_iter.c b/src/fw/services/settings/settings_raw_iter.c index c1414463be..9f49863149 100644 --- a/src/fw/services/settings/settings_raw_iter.c +++ b/src/fw/services/settings/settings_raw_iter.c @@ -5,7 +5,7 @@ #include "kernel/pbl_malloc.h" #include "pbl/services/filesystem/pfs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/services/shared_prf_storage/shared_prf_storage.c b/src/fw/services/shared_prf_storage/shared_prf_storage.c index 06f6547c26..fa72786ed5 100644 --- a/src/fw/services/shared_prf_storage/shared_prf_storage.c +++ b/src/fw/services/shared_prf_storage/shared_prf_storage.c @@ -7,7 +7,7 @@ #include "drivers/flash.h" #include "flash_region/flash_region.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/crc32.h" diff --git a/src/fw/services/shared_prf_storage/shared_prf_storage_debug.c b/src/fw/services/shared_prf_storage/shared_prf_storage_debug.c index 3a46d03161..4b7dd4efc5 100644 --- a/src/fw/services/shared_prf_storage/shared_prf_storage_debug.c +++ b/src/fw/services/shared_prf_storage/shared_prf_storage_debug.c @@ -4,7 +4,7 @@ #include "console/dbgserial.h" #include "console/prompt.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "pbl/util/string.h" #include "pbl/services/shared_prf_storage/shared_prf_storage.h" diff --git a/src/fw/services/speaker/speaker_service.c b/src/fw/services/speaker/speaker_service.c index 3bd659dc98..d6cfb6fe1f 100644 --- a/src/fw/services/speaker/speaker_service.c +++ b/src/fw/services/speaker/speaker_service.c @@ -19,7 +19,7 @@ #include "pbl/services/notifications/alerts_preferences.h" #include "pbl/services/notifications/do_not_disturb.h" #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/services/stationary/service.c b/src/fw/services/stationary/service.c index c504199d83..7c82ba3bc7 100644 --- a/src/fw/services/stationary/service.c +++ b/src/fw/services/stationary/service.c @@ -19,7 +19,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/runlevel.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/services/system_task/service.c b/src/fw/services/system_task/service.c index 53dfac622a..45f61a769e 100644 --- a/src/fw/services/system_task/service.c +++ b/src/fw/services/system_task/service.c @@ -3,7 +3,7 @@ #include "pbl/services/system_task.h" -#include "system/logging.h" +#include #include "drivers/task_watchdog.h" #include "kernel/pebble_tasks.h" diff --git a/src/fw/services/tick_timer/service.c b/src/fw/services/tick_timer/service.c index 5385c08220..3dd7e818a9 100644 --- a/src/fw/services/tick_timer/service.c +++ b/src/fw/services/tick_timer/service.c @@ -7,7 +7,7 @@ #include "drivers/rtc.h" #include "pbl/services/regular_timer.h" #include "process_management/app_manager.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DEFINE(service_tick_timer, CONFIG_SERVICE_TICK_TIMER_LOG_LEVEL); diff --git a/src/fw/services/timeline/actions_endpoint.c b/src/fw/services/timeline/actions_endpoint.c index 1042674a0f..2f91425df6 100644 --- a/src/fw/services/timeline/actions_endpoint.c +++ b/src/fw/services/timeline/actions_endpoint.c @@ -11,7 +11,7 @@ #include "pbl/services/notifications/notifications.h" #include "pbl/services/timeline/timeline_actions.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/attributes.h" diff --git a/src/fw/services/timeline/alarm_layout.c b/src/fw/services/timeline/alarm_layout.c index 2a0131ca81..1bd644496e 100644 --- a/src/fw/services/timeline/alarm_layout.c +++ b/src/fw/services/timeline/alarm_layout.c @@ -17,7 +17,7 @@ #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" #include "pbl/services/alarms/alarm.h" -#include "system/logging.h" +#include #include "system/hexdump.h" #include "pbl/util/size.h" #include "pbl/util/string.h" diff --git a/src/fw/services/timeline/attribute.c b/src/fw/services/timeline/attribute.c index 8628d80466..b288d28032 100644 --- a/src/fw/services/timeline/attribute.c +++ b/src/fw/services/timeline/attribute.c @@ -7,7 +7,7 @@ #include "system/passert.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" PBL_LOG_MODULE_DECLARE(service_timeline, CONFIG_SERVICE_TIMELINE_LOG_LEVEL); diff --git a/src/fw/services/timeline/attributes_actions.c b/src/fw/services/timeline/attributes_actions.c index 66d96f49a5..872431076a 100644 --- a/src/fw/services/timeline/attributes_actions.c +++ b/src/fw/services/timeline/attributes_actions.c @@ -5,7 +5,7 @@ #include "pbl/services/timeline/attribute_group.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_timeline, CONFIG_SERVICE_TIMELINE_LOG_LEVEL); diff --git a/src/fw/services/timeline/calendar.c b/src/fw/services/timeline/calendar.c index e74b0e062f..b529f3028a 100644 --- a/src/fw/services/timeline/calendar.c +++ b/src/fw/services/timeline/calendar.c @@ -10,7 +10,7 @@ #include "kernel/pebble_tasks.h" #include "pbl/services/system_task.h" #include "pbl/services/blob_db/pin_db.h" -#include "system/logging.h" +#include #include "system/status_codes.h" #include "util/time/time.h" diff --git a/src/fw/services/timeline/calendar_layout.c b/src/fw/services/timeline/calendar_layout.c index 82407bd8be..1989c22843 100644 --- a/src/fw/services/timeline/calendar_layout.c +++ b/src/fw/services/timeline/calendar_layout.c @@ -16,7 +16,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "system/hexdump.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/services/timeline/event.c b/src/fw/services/timeline/event.c index db48efc3c2..f968679a8b 100644 --- a/src/fw/services/timeline/event.c +++ b/src/fw/services/timeline/event.c @@ -13,7 +13,7 @@ #include "pbl/os/mutex.h" #include "pbl/services/system_task.h" #include "pbl/services/blob_db/pin_db.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/status_codes.h" #include "util/time/time.h" diff --git a/src/fw/services/timeline/generic_layout.c b/src/fw/services/timeline/generic_layout.c index f79092a04f..3630169fd6 100644 --- a/src/fw/services/timeline/generic_layout.c +++ b/src/fw/services/timeline/generic_layout.c @@ -13,7 +13,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "system/hexdump.h" #include "pbl/util/size.h" diff --git a/src/fw/services/timeline/item.c b/src/fw/services/timeline/item.c index 75b82b90a1..0ee99ec205 100644 --- a/src/fw/services/timeline/item.c +++ b/src/fw/services/timeline/item.c @@ -6,7 +6,7 @@ #include "drivers/rtc.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DECLARE(service_timeline, CONFIG_SERVICE_TIMELINE_LOG_LEVEL); diff --git a/src/fw/services/timeline/notification_layout.c b/src/fw/services/timeline/notification_layout.c index 3b87b5d11b..c78d10aba3 100644 --- a/src/fw/services/timeline/notification_layout.c +++ b/src/fw/services/timeline/notification_layout.c @@ -23,7 +23,7 @@ #include "pbl/services/timeline/timeline_resources.h" #include "shell/system_theme.h" #include "system/hexdump.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/src/fw/services/timeline/peek.c b/src/fw/services/timeline/peek.c index 2f2ad06986..f1639f2737 100644 --- a/src/fw/services/timeline/peek.c +++ b/src/fw/services/timeline/peek.c @@ -12,7 +12,7 @@ #include "pbl/services/blob_db/pin_db.h" #include "pbl/services/timeline/timeline.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/status_codes.h" #include "util/time/time.h" diff --git a/src/fw/services/timeline/reminders.c b/src/fw/services/timeline/reminders.c index 445cb3b195..8941fa79e2 100644 --- a/src/fw/services/timeline/reminders.c +++ b/src/fw/services/timeline/reminders.c @@ -13,7 +13,7 @@ #include "pbl/services/blob_db/pin_db.h" #include "pbl/services/blob_db/reminder_db.h" #include "pbl/services/timeline/item.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DECLARE(service_timeline, CONFIG_SERVICE_TIMELINE_LOG_LEVEL); diff --git a/src/fw/services/timeline/sports_layout.c b/src/fw/services/timeline/sports_layout.c index d940c8456f..a6899f8efd 100644 --- a/src/fw/services/timeline/sports_layout.c +++ b/src/fw/services/timeline/sports_layout.c @@ -14,7 +14,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "pbl/util/string.h" #include "util/time/time.h" diff --git a/src/fw/services/timeline/swap_layer.c b/src/fw/services/timeline/swap_layer.c index a742860cf3..1eefe66f0c 100644 --- a/src/fw/services/timeline/swap_layer.c +++ b/src/fw/services/timeline/swap_layer.c @@ -16,7 +16,7 @@ #include "pbl/services/notifications/alerts_preferences_private.h" #include "kernel/ui/kernel_ui.h" #include "process_state/app_state/app_state.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/services/timeline/timeline.c b/src/fw/services/timeline/timeline.c index ab9bd35f91..c43cfc8fcd 100644 --- a/src/fw/services/timeline/timeline.c +++ b/src/fw/services/timeline/timeline.c @@ -26,7 +26,7 @@ #include "pbl/services/notifications/notifications.h" #include "pbl/services/phone_call_util.h" #include "pbl/services/timeline/actions_endpoint.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" #include "pbl/util/math.h" diff --git a/src/fw/services/timeline/timeline_actions.c b/src/fw/services/timeline/timeline_actions.c index 913bbd9936..32a23e61a0 100644 --- a/src/fw/services/timeline/timeline_actions.c +++ b/src/fw/services/timeline/timeline_actions.c @@ -39,7 +39,7 @@ #include "pbl/services/notifications/notification_storage.h" #include "pbl/services/timeline/timeline.h" #include "pbl/services/timeline/timeline_resources.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "pbl/util/struct.h" diff --git a/src/fw/services/timeline/timeline_layout.c b/src/fw/services/timeline/timeline_layout.c index fe7848d194..7bcb7a94f1 100644 --- a/src/fw/services/timeline/timeline_layout.c +++ b/src/fw/services/timeline/timeline_layout.c @@ -17,7 +17,7 @@ #include "pbl/services/i18n/i18n.h" #include "pbl/services/timeline/timeline_resources.h" #include "shell/system_theme.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include "pbl/util/string.h" diff --git a/src/fw/services/timeline/timeline_layout_animations.c b/src/fw/services/timeline/timeline_layout_animations.c index 60f90118e7..afff8b55f6 100644 --- a/src/fw/services/timeline/timeline_layout_animations.c +++ b/src/fw/services/timeline/timeline_layout_animations.c @@ -15,7 +15,7 @@ #include "process_state/app_state/app_state.h" #include "process_management/app_install_manager.h" #include "pbl/services/timeline/timeline_resources.h" -#include "system/logging.h" +#include #define CARD_TRANSITION_ICON_EXPAND 5 diff --git a/src/fw/services/timeline/timeline_resources.c b/src/fw/services/timeline/timeline_resources.c index 1f4fc2fda1..46f1489163 100644 --- a/src/fw/services/timeline/timeline_resources.c +++ b/src/fw/services/timeline/timeline_resources.c @@ -8,7 +8,7 @@ #include "kernel/pbl_malloc.h" #include "process_management/app_install_manager.h" #include "resource/resource_ids.auto.h" -#include "system/logging.h" +#include #include "syscall/syscall.h" #include "syscall/syscall_internal.h" #include "system/passert.h" diff --git a/src/fw/services/timeline/weather_layout.c b/src/fw/services/timeline/weather_layout.c index f172cb1934..a53342218d 100644 --- a/src/fw/services/timeline/weather_layout.c +++ b/src/fw/services/timeline/weather_layout.c @@ -16,7 +16,7 @@ #include "process_state/app_state/app_state.h" #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" -#include "system/logging.h" +#include #include "system/hexdump.h" #include "pbl/util/size.h" #include "pbl/util/string.h" diff --git a/src/fw/services/timezone_database/service.c b/src/fw/services/timezone_database/service.c index ec2021b9e6..e6f3feb6f8 100644 --- a/src/fw/services/timezone_database/service.c +++ b/src/fw/services/timezone_database/service.c @@ -6,7 +6,7 @@ #include "resource/resource.h" #include "resource/resource_ids.auto.h" #include "pbl/services/clock.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/services/touch/touch.c b/src/fw/services/touch/touch.c index 56b162dbff..a7655e6b56 100644 --- a/src/fw/services/touch/touch.c +++ b/src/fw/services/touch/touch.c @@ -12,7 +12,7 @@ #include "pbl/services/analytics/analytics.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "pbl/os/mutex.h" #include "system/passert.h" diff --git a/src/fw/services/vibe_pattern/service.c b/src/fw/services/vibe_pattern/service.c index def70f4194..1abd6dbd14 100644 --- a/src/fw/services/vibe_pattern/service.c +++ b/src/fw/services/vibe_pattern/service.c @@ -23,7 +23,7 @@ #include "kernel/pbl_malloc.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/src/fw/services/vibes/vibe_client.c b/src/fw/services/vibes/vibe_client.c index e7383ec062..c406894795 100644 --- a/src/fw/services/vibes/vibe_client.c +++ b/src/fw/services/vibes/vibe_client.c @@ -7,7 +7,7 @@ #include "pbl/services/notifications/alerts_preferences_private.h" #include "pbl/services/vibes/vibe_score.h" #include "pbl/services/vibes/vibe_score_info.h" -#include "system/logging.h" +#include PBL_LOG_MODULE_DEFINE(service_vibes, CONFIG_SERVICE_VIBES_LOG_LEVEL); diff --git a/src/fw/services/vibes/vibe_score.c b/src/fw/services/vibes/vibe_score.c index a11ec6a31d..e13a540a81 100644 --- a/src/fw/services/vibes/vibe_score.c +++ b/src/fw/services/vibes/vibe_score.c @@ -7,7 +7,7 @@ #include "syscall/syscall.h" #include "system/passert.h" -#include "system/logging.h" +#include #include "drivers/vibe.h" #include "applib/applib_malloc.auto.h" #include "util/net.h" diff --git a/src/fw/services/voice/voice.c b/src/fw/services/voice/voice.c index 698e258783..fbdd98457d 100644 --- a/src/fw/services/voice/voice.c +++ b/src/fw/services/voice/voice.c @@ -18,7 +18,7 @@ #include "pbl/services/voice/voice_speex.h" #include "pbl/services/voice_endpoint.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "system/profiler.h" #include "pbl/util/likely.h" diff --git a/src/fw/services/voice/voice_speex.c b/src/fw/services/voice/voice_speex.c index 4607812d2d..23d1cfbb6c 100644 --- a/src/fw/services/voice/voice_speex.c +++ b/src/fw/services/voice/voice_speex.c @@ -4,10 +4,10 @@ #include "pbl/services/voice/voice_speex.h" #include "board/board.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "pbl/services/audio_endpoint.h" #include "drivers/mic.h" diff --git a/src/fw/services/voice_endpoint/service.c b/src/fw/services/voice_endpoint/service.c index 33bbafd32a..f00a0e14d6 100644 --- a/src/fw/services/voice_endpoint/service.c +++ b/src/fw/services/voice_endpoint/service.c @@ -7,7 +7,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/audio_endpoint.h" #include "pbl/services/voice/voice.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/generic_attribute.h" #include "pbl/util/uuid.h" diff --git a/src/fw/services/wakeup/service.c b/src/fw/services/wakeup/service.c index bef1b8997f..250623a9b3 100644 --- a/src/fw/services/wakeup/service.c +++ b/src/fw/services/wakeup/service.c @@ -16,7 +16,7 @@ #include "pbl/services/settings/settings_file.h" #include "syscall/syscall.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "pbl/util/math.h" #include "util/units.h" diff --git a/src/fw/services/weather/weather_service.c b/src/fw/services/weather/weather_service.c index 844c68abe3..8171b5ffc4 100644 --- a/src/fw/services/weather/weather_service.c +++ b/src/fw/services/weather/weather_service.c @@ -13,7 +13,7 @@ #include "pbl/services/blob_db/watch_app_prefs_db.h" #include "pbl/services/blob_db/weather_db.h" #include "pbl/services/weather/weather_types.h" -#include "system/logging.h" +#include #include "system/passert.h" PBL_LOG_MODULE_DEFINE(service_weather, CONFIG_SERVICE_WEATHER_LOG_LEVEL); diff --git a/src/fw/shell/normal/app_idle_timeout.c b/src/fw/shell/normal/app_idle_timeout.c index cbcb4b716e..e7d5df4663 100644 --- a/src/fw/shell/normal/app_idle_timeout.c +++ b/src/fw/shell/normal/app_idle_timeout.c @@ -8,7 +8,7 @@ #include "pbl/services/new_timer/new_timer.h" #include "shell/normal/watchface.h" #include "shell/shell.h" -#include "system/logging.h" +#include #include "system/passert.h" diff --git a/src/fw/shell/normal/battery_ui.c b/src/fw/shell/normal/battery_ui.c index 04200603e4..3eded6afba 100644 --- a/src/fw/shell/normal/battery_ui.c +++ b/src/fw/shell/normal/battery_ui.c @@ -21,7 +21,7 @@ #include "pbl/services/clock.h" #include "pbl/services/i18n/i18n.h" #include "pbl/services/light.h" -#include "system/logging.h" +#include #include "util/time/time.h" typedef void (*DialogUpdateFn)(Dialog *, void *); diff --git a/src/fw/shell/normal/prefs.c b/src/fw/shell/normal/prefs.c index d269222577..14c7e99ef8 100644 --- a/src/fw/shell/normal/prefs.c +++ b/src/fw/shell/normal/prefs.c @@ -34,7 +34,7 @@ #include "pbl/services/timeline/peek.h" #include "kernel/events.h" #include "kernel/event_loop.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" #include "pbl/util/uuid.h" diff --git a/src/fw/shell/normal/prefs_sync.c b/src/fw/shell/normal/prefs_sync.c index 4d33e72e85..7aa0ae6571 100644 --- a/src/fw/shell/normal/prefs_sync.c +++ b/src/fw/shell/normal/prefs_sync.c @@ -9,7 +9,7 @@ #include "pbl/services/blob_db/api.h" #include "pbl/services/blob_db/settings_blob_db.h" #include "pbl/services/blob_db/sync.h" -#include "system/logging.h" +#include //! Prefs Sync using BlobDB //! diff --git a/src/fw/shell/normal/shell_event_loop.c b/src/fw/shell/normal/shell_event_loop.c index 1d3990dd42..963bfbae1d 100644 --- a/src/fw/shell/normal/shell_event_loop.c +++ b/src/fw/shell/normal/shell_event_loop.c @@ -37,7 +37,7 @@ #include "shell/normal/quick_launch.h" #include "shell/normal/watchface.h" #include "shell/prefs.h" -#include "system/logging.h" +#include extern void shell_prefs_init(void); diff --git a/src/fw/shell/normal/system_app_state_machine.c b/src/fw/shell/normal/system_app_state_machine.c index ead1b5f1f4..859fde94ea 100644 --- a/src/fw/shell/normal/system_app_state_machine.c +++ b/src/fw/shell/normal/system_app_state_machine.c @@ -14,7 +14,7 @@ #include "resource/resource.h" #include "pbl/services/battery/battery_monitor.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "process_management/app_manager.h" //! @file system_app_state_machine.c diff --git a/src/fw/shell/normal/watchface.c b/src/fw/shell/normal/watchface.c index 51691dd37d..6ea6bc639b 100644 --- a/src/fw/shell/normal/watchface.c +++ b/src/fw/shell/normal/watchface.c @@ -22,7 +22,7 @@ #include "applib/app_launch_reason.h" #include "applib/ui/click_internal.h" #include "pbl/services/notifications/do_not_disturb.h" -#include "system/logging.h" +#include #include "system/passert.h" #ifdef CONFIG_ORIENTATION_MANAGER #include "shell/prefs.h" diff --git a/src/fw/shell/sdk/watchface.c b/src/fw/shell/sdk/watchface.c index 94772ae3c2..788a86fc05 100644 --- a/src/fw/shell/sdk/watchface.c +++ b/src/fw/shell/sdk/watchface.c @@ -16,7 +16,7 @@ #include "pbl/services/compositor/compositor_transitions.h" #include "shell/sdk/shell_sdk.h" #include "shell/system_app_state_machine.h" -#include "system/logging.h" +#include #include "system/passert.h" typedef struct WatchfaceData { diff --git a/src/fw/syscall/event_syscalls.c b/src/fw/syscall/event_syscalls.c index 5a5f23d33b..0b96566d4f 100644 --- a/src/fw/syscall/event_syscalls.c +++ b/src/fw/syscall/event_syscalls.c @@ -10,7 +10,7 @@ #include "pbl/services/compositor/compositor.h" #include "pbl/services/event_service.h" #include "syscall/syscall_internal.h" -#include "system/logging.h" +#include #include "system/passert.h" static void prv_put_event_from_process(PebbleTask task, PebbleEvent *event) { diff --git a/src/fw/syscall/syscall.c b/src/fw/syscall/syscall.c index d459981a88..19d494a250 100644 --- a/src/fw/syscall/syscall.c +++ b/src/fw/syscall/syscall.c @@ -16,7 +16,7 @@ #include "process_management/worker_manager.h" #include "pbl/services/comm_session/session.h" #include "logging/logging_private.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/string.h" diff --git a/src/fw/syscall/syscall_internal.c b/src/fw/syscall/syscall_internal.c index 3bd3c218a5..6fe4782a42 100644 --- a/src/fw/syscall/syscall_internal.c +++ b/src/fw/syscall/syscall_internal.c @@ -12,7 +12,7 @@ #include "process_management/process_loader.h" #include "process_management/process_manager.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/system/bootbits.c b/src/fw/system/bootbits.c index 576f9cc789..8b02a1d23f 100644 --- a/src/fw/system/bootbits.c +++ b/src/fw/system/bootbits.c @@ -6,7 +6,7 @@ #include "drivers/flash.h" #include "drivers/rtc.h" #include "flash_region/flash_region.h" -#include "system/logging.h" +#include #include "system/version.h" #include "pbl/util/crc32.h" diff --git a/src/fw/system/firmware_storage.c b/src/fw/system/firmware_storage.c index 1c90ae225e..cd74fd5015 100644 --- a/src/fw/system/firmware_storage.c +++ b/src/fw/system/firmware_storage.c @@ -5,7 +5,7 @@ #include "drivers/flash.h" #include "flash_region/flash_region.h" -#include "system/logging.h" +#include #include "pbl/util/math.h" #ifndef CONFIG_PBLBOOT diff --git a/src/fw/system/hexdump.c b/src/fw/system/hexdump.c index 123c0b7d19..04f76f9332 100644 --- a/src/fw/system/hexdump.c +++ b/src/fw/system/hexdump.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "system/hexdump.h" -#include "system/logging.h" +#include #include "pbl/util/hexdump.h" #include "console/prompt.h" diff --git a/src/fw/system/passert.c b/src/fw/system/passert.c index 8b18049729..5ac70db668 100644 --- a/src/fw/system/passert.c +++ b/src/fw/system/passert.c @@ -9,7 +9,7 @@ #include "kernel/pebble_tasks.h" #include "syscall/syscall.h" -#include "system/logging.h" +#include #include "pbl/util/heap.h" #include diff --git a/src/fw/system/passert.h b/src/fw/system/passert.h index 6583b0951f..236f0f34ed 100644 --- a/src/fw/system/passert.h +++ b/src/fw/system/passert.h @@ -3,14 +3,14 @@ #pragma once -#include "logging.h" +#include #include #include #ifdef CONFIG_LOG_HASHED - #include + #include NORETURN passert_failed_hashed(uint32_t packed_loghash, ...); diff --git a/src/fw/system/reboot_reason.c b/src/fw/system/reboot_reason.c index 9c8f9d7565..595e425d09 100644 --- a/src/fw/system/reboot_reason.c +++ b/src/fw/system/reboot_reason.c @@ -5,7 +5,7 @@ #include "pbl/mcu/interrupts.h" #include "pbl/os/tick.h" -#include "system/logging.h" +#include #include "system/bootbits.h" #ifdef CONFIG_SOC_SF32LB52 diff --git a/src/fw/system/testinfra.c b/src/fw/system/testinfra.c index 325d7ae8b8..5ba623732b 100644 --- a/src/fw/system/testinfra.c +++ b/src/fw/system/testinfra.c @@ -7,7 +7,7 @@ #include "kernel/core_dump.h" #include "pbl/services/new_timer/new_timer.h" #include "system/bootbits.h" -#include "system/logging.h" +#include #include "system/passert.h" #if !UNITTEST diff --git a/src/fw/util/buffer.c b/src/fw/util/buffer.c index 05855e4dc2..aa488d52dd 100644 --- a/src/fw/util/buffer.c +++ b/src/fw/util/buffer.c @@ -3,7 +3,7 @@ #include "buffer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "kernel/pbl_malloc.h" diff --git a/src/fw/util/generic_attribute.c b/src/fw/util/generic_attribute.c index 7e9dc5229b..b7c5998f1a 100644 --- a/src/fw/util/generic_attribute.c +++ b/src/fw/util/generic_attribute.c @@ -3,7 +3,7 @@ #include "generic_attribute.h" -#include "system/logging.h" +#include GenericAttribute *generic_attribute_find_attribute(GenericAttributeList *attr_list, uint8_t id, size_t size) { diff --git a/src/fw/util/mbuf.c b/src/fw/util/mbuf.c index 57d602f08a..47cc84218d 100644 --- a/src/fw/util/mbuf.c +++ b/src/fw/util/mbuf.c @@ -4,7 +4,7 @@ #include "mbuf.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "pbl/os/mutex.h" #include "system/passert.h" #include "pbl/util/size.h" diff --git a/src/fw/util/pstring.c b/src/fw/util/pstring.c index e6b9441536..bf144b0858 100644 --- a/src/fw/util/pstring.c +++ b/src/fw/util/pstring.c @@ -3,7 +3,7 @@ #include -#include "system/logging.h" +#include #include "kernel/pbl_malloc.h" #include "util/pstring.h" diff --git a/src/fw/util/shared_circular_buffer.c b/src/fw/util/shared_circular_buffer.c index 3c2b5004e8..6372abac55 100644 --- a/src/fw/util/shared_circular_buffer.c +++ b/src/fw/util/shared_circular_buffer.c @@ -3,7 +3,7 @@ #include "shared_circular_buffer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" diff --git a/src/fw/util/util_platform.c b/src/fw/util/util_platform.c index a410b79f94..90346f50d6 100644 --- a/src/fw/util/util_platform.c +++ b/src/fw/util/util_platform.c @@ -2,7 +2,7 @@ /* SPDX-License-Identifier: Apache-2.0 */ #include "console/dbgserial.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/assert.h" diff --git a/subsys/logging/Kconfig.template.log_level b/subsys/logging/Kconfig.template.log_level index 547eaca575..7916449461 100644 --- a/subsys/logging/Kconfig.template.log_level +++ b/subsys/logging/Kconfig.template.log_level @@ -8,7 +8,7 @@ # source "subsys/logging/Kconfig.template.log_level" # # Defines CONFIG__LOG_LEVEL, consumed by PBL_LOG_MODULE_DEFINE / -# PBL_LOG_MODULE_DECLARE (see system/logging.h). 0 means "use the default +# PBL_LOG_MODULE_DECLARE (see pbl/logging/logging.h). 0 means "use the default # log level". choice diff --git a/subsys/logging/logging.c b/subsys/logging/logging.c index 38781f73f3..62829a07df 100644 --- a/subsys/logging/logging.c +++ b/subsys/logging/logging.c @@ -12,7 +12,7 @@ #include "console/serial_console.h" #include "debug/advanced_logging.h" #include "drivers/rtc.h" -#include "system/logging.h" +#include #include "pbl/mcu/interrupts.h" #include "pbl/mcu/privilege.h" diff --git a/subsys/logging/logging_private.h b/subsys/logging/logging_private.h index aaa0835ee0..755bc70635 100644 --- a/subsys/logging/logging_private.h +++ b/subsys/logging/logging_private.h @@ -3,7 +3,7 @@ #pragma once -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include diff --git a/tests/fakes/fake_app_timer.h b/tests/fakes/fake_app_timer.h index 5717f6655f..efcf72a1be 100644 --- a/tests/fakes/fake_app_timer.h +++ b/tests/fakes/fake_app_timer.h @@ -4,7 +4,7 @@ #pragma once #include "applib/app_timer.h" -#include "system/logging.h" +#include #include diff --git a/tests/fakes/fake_framebuffer.c b/tests/fakes/fake_framebuffer.c index 331dd5b2d8..3e660d7625 100644 --- a/tests/fakes/fake_framebuffer.c +++ b/tests/fakes/fake_framebuffer.c @@ -4,7 +4,7 @@ #include "framebuffer.h" #include "drivers/display.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/bitset.h" diff --git a/tests/fakes/fake_session.c b/tests/fakes/fake_session.c index d4927204bd..55e7e52e64 100644 --- a/tests/fakes/fake_session.c +++ b/tests/fakes/fake_session.c @@ -6,7 +6,7 @@ #include "comm/bt_lock.h" #include "kernel/pbl_malloc.h" -#include "system/logging.h" +#include #include "pbl/services/comm_session/protocol.h" #include "pbl/services/comm_session/session_send_buffer.h" #include "pbl/services/system_task.h" diff --git a/tests/fw/applib/test_app_message.c b/tests/fw/applib/test_app_message.c index ae0ca0df5b..893831f65c 100644 --- a/tests/fw/applib/test_app_message.c +++ b/tests/fw/applib/test_app_message.c @@ -5,7 +5,7 @@ #include "applib/app_message/app_message_internal.h" #include "kernel/events.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "pbl/util/math.h" diff --git a/tests/fw/applib/test_persist.c b/tests/fw/applib/test_persist.c index 6d4a70a25b..82ab972306 100644 --- a/tests/fw/applib/test_persist.c +++ b/tests/fw/applib/test_persist.c @@ -12,7 +12,7 @@ #include "process_management/pebble_process_md.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/persist.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" // Stubs diff --git a/tests/fw/comm/test_ancs_app_storage.c b/tests/fw/comm/test_ancs_app_storage.c index 03eb698c7d..b164458e2b 100644 --- a/tests/fw/comm/test_ancs_app_storage.c +++ b/tests/fw/comm/test_ancs_app_storage.c @@ -9,7 +9,7 @@ #include "drivers/crc.h" #include "kernel/services/file.h" #include "system/filesystem.h" -#include "system/logging.h" +#include #include "pbl/util/size.h" #include diff --git a/tests/fw/services/activity/kraepelin_reference/helper_worker.h b/tests/fw/services/activity/kraepelin_reference/helper_worker.h index c3a32ce101..eb63da0b4f 100644 --- a/tests/fw/services/activity/kraepelin_reference/helper_worker.h +++ b/tests/fw/services/activity/kraepelin_reference/helper_worker.h @@ -6,7 +6,7 @@ #include "constants_worker.h" #include "pbl/util/trig.h" -#include "system/logging.h" +#include int16_t pow_int(int16_t x, int16_t y); diff --git a/tests/fw/services/activity/kraepelin_reference/raw_stats.c b/tests/fw/services/activity/kraepelin_reference/raw_stats.c index c1463f7a17..fb4e80cbe2 100644 --- a/tests/fw/services/activity/kraepelin_reference/raw_stats.c +++ b/tests/fw/services/activity/kraepelin_reference/raw_stats.c @@ -27,7 +27,7 @@ Pebble App roject. #include "raw_stats.h" -#include "system/logging.h" +#include /* RAW STATISTICS */ diff --git a/tests/fw/services/activity/test_activity.c b/tests/fw/services/activity/test_activity.c index 7c9ebf4c7e..c299cd284c 100644 --- a/tests/fw/services/activity/test_activity.c +++ b/tests/fw/services/activity/test_activity.c @@ -17,7 +17,7 @@ #include "pbl/services/filesystem/pfs.h" #include "pbl/services/protobuf_log/protobuf_log.h" #include "shell/prefs.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/tests/fw/services/activity/test_kraepelin_algorithm.c b/tests/fw/services/activity/test_kraepelin_algorithm.c index aad8dd267c..b3b86398e5 100644 --- a/tests/fw/services/activity/test_kraepelin_algorithm.c +++ b/tests/fw/services/activity/test_kraepelin_algorithm.c @@ -9,7 +9,7 @@ #include "pbl/services/activity/activity_algorithm.h" #include "pbl/services/activity/kraepelin/activity_algorithm_kraepelin.h" #include "pbl/services/activity/kraepelin/kraepelin_algorithm.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/list.h" #include "pbl/util/math.h" diff --git a/tests/fw/services/comm_session/test_session_receive_router.c b/tests/fw/services/comm_session/test_session_receive_router.c index 82ad402876..a028f3ea9c 100644 --- a/tests/fw/services/comm_session/test_session_receive_router.c +++ b/tests/fw/services/comm_session/test_session_receive_router.c @@ -8,7 +8,7 @@ #include "pbl/services/comm_session/session_remote_version.h" #include "pbl/services/comm_session/session_transport.h" #include "pbl/services/comm_session/test_endpoint_ids.h" -#include "system/logging.h" +#include // Stubs /////////////////////////////////////////////////////////// diff --git a/tests/fw/services/protobuf_log/test_protobuf_log.c b/tests/fw/services/protobuf_log/test_protobuf_log.c index 6d737896b3..2a8e46e43c 100644 --- a/tests/fw/services/protobuf_log/test_protobuf_log.c +++ b/tests/fw/services/protobuf_log/test_protobuf_log.c @@ -15,7 +15,7 @@ #include "applib/data_logging.h" #include "drivers/rtc.h" #include "pbl/services/data_logging/data_logging_service.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "pbl/util/size.h" diff --git a/tests/fw/services/test_app_cache.c b/tests/fw/services/test_app_cache.c index 3101e30896..4d1652a90a 100644 --- a/tests/fw/services/test_app_cache.c +++ b/tests/fw/services/test_app_cache.c @@ -14,7 +14,7 @@ #include "pbl/services/settings/settings_file.h" #include "shell/normal/quick_launch.h" #include -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include diff --git a/tests/fw/services/test_app_fetch_endpoint.c b/tests/fw/services/test_app_fetch_endpoint.c index 76ae62150d..ce5d168919 100644 --- a/tests/fw/services/test_app_fetch_endpoint.c +++ b/tests/fw/services/test_app_fetch_endpoint.c @@ -5,7 +5,7 @@ #include "pbl/services/comm_session/session.h" #include "pbl/services/app_fetch_endpoint.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" diff --git a/tests/fw/services/test_pfs.c b/tests/fw/services/test_pfs.c index 9657006912..1f6176f94d 100644 --- a/tests/fw/services/test_pfs.c +++ b/tests/fw/services/test_pfs.c @@ -8,7 +8,7 @@ #include "flash_region/flash_region.h" #include "pbl/services/filesystem/pfs.h" #include "pbl/services/filesystem/flash_translation.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "pbl/util/math.h" #include "pbl/util/size.h" diff --git a/tests/fw/services/test_put_bytes.c b/tests/fw/services/test_put_bytes.c index a0ff412b5b..d1cac3696e 100644 --- a/tests/fw/services/test_put_bytes.c +++ b/tests/fw/services/test_put_bytes.c @@ -7,7 +7,7 @@ #include "pbl/os/tick.h" #include "system/bootbits.h" #include "system/firmware_storage.h" -#include "system/logging.h" +#include #include "pbl/util/attributes.h" #include "util/net.h" diff --git a/tests/fw/services/timeline/test_calendar.c b/tests/fw/services/timeline/test_calendar.c index 141ecf649c..8432146e8c 100644 --- a/tests/fw/services/timeline/test_calendar.c +++ b/tests/fw/services/timeline/test_calendar.c @@ -6,7 +6,7 @@ #include "pbl/services/timeline/calendar.h" #include "pbl/services/timeline/event.h" #include "pbl/services/timeline/timeline.h" -#include "system/logging.h" +#include #include "clar.h" diff --git a/tests/fw/services/timeline/test_timeline_peek_event.c b/tests/fw/services/timeline/test_timeline_peek_event.c index efa2077cc0..9a39770a5d 100644 --- a/tests/fw/services/timeline/test_timeline_peek_event.c +++ b/tests/fw/services/timeline/test_timeline_peek_event.c @@ -6,7 +6,7 @@ #include "pbl/services/timeline/event.h" #include "pbl/services/timeline/peek.h" #include "pbl/services/timeline/timeline.h" -#include "system/logging.h" +#include #include "clar.h" #include "pebble_asserts.h" diff --git a/tests/fw/test_alarm_common.h b/tests/fw/test_alarm_common.h index a583578d9f..2870dc6466 100644 --- a/tests/fw/test_alarm_common.h +++ b/tests/fw/test_alarm_common.h @@ -128,7 +128,7 @@ static int s_num_alarms_fired = 0; /////////////////////////////////////////////////////////////////////////////////////////////////// //! Fakes -#include "system/logging.h" +#include void prv_timer_kernel_bg_callback(void *data); diff --git a/tests/fw/test_battery_monitor.c b/tests/fw/test_battery_monitor.c index c6f3c08c12..c12d4ea751 100644 --- a/tests/fw/test_battery_monitor.c +++ b/tests/fw/test_battery_monitor.c @@ -20,7 +20,7 @@ #include "fake_rtc.h" #include "kernel/events.h" -#include "system/logging.h" +#include #include "system/reboot_reason.h" static bool s_entered_standby; diff --git a/tests/fw/test_data_logging.c b/tests/fw/test_data_logging.c index da39d089c7..1cf6d7b41a 100644 --- a/tests/fw/test_data_logging.c +++ b/tests/fw/test_data_logging.c @@ -20,7 +20,7 @@ #include "pbl/services/data_logging/dls_storage.h" #include "pbl/services/regular_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" #include "util/legacy_checksum.h" diff --git a/tests/fw/test_flash_logging.c b/tests/fw/test_flash_logging.c index 285c1207d9..200b4b5e39 100644 --- a/tests/fw/test_flash_logging.c +++ b/tests/fw/test_flash_logging.c @@ -20,7 +20,7 @@ #include "stubs_sleep.h" #include "stubs_task_watchdog.h" -#include "system/logging.h" +#include #include "system/passert.h" #include diff --git a/tests/stubs/stubs_hexdump.h b/tests/stubs/stubs_hexdump.h index 5a1fde9ffc..08af03f234 100644 --- a/tests/stubs/stubs_hexdump.h +++ b/tests/stubs/stubs_hexdump.h @@ -4,7 +4,7 @@ #pragma once #include "system/hexdump.h" -#include "system/logging.h" +#include #include #include diff --git a/tests/stubs/stubs_logging.h b/tests/stubs/stubs_logging.h index 58447cc07b..f1c6a4b426 100644 --- a/tests/stubs/stubs_logging.h +++ b/tests/stubs/stubs_logging.h @@ -3,7 +3,7 @@ #pragma once -#include "system/logging.h" +#include #include "pbl/util/string.h" #include diff --git a/third_party/memfault/port/src/memfault_chunk_collector.c b/third_party/memfault/port/src/memfault_chunk_collector.c index 51fd6c5320..6834a4189f 100644 --- a/third_party/memfault/port/src/memfault_chunk_collector.c +++ b/third_party/memfault/port/src/memfault_chunk_collector.c @@ -7,7 +7,7 @@ #include "pbl/services/system_task.h" #include "pbl/services/data_logging/data_logging_service.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #define MAX_CHUNK_SIZE 250 #define MEMFAULT_CHUNK_COLLECTION_INTERVAL_SECS (15 * 60) diff --git a/third_party/memfault/port/src/memfault_platform_port.c b/third_party/memfault/port/src/memfault_platform_port.c index c7a69ba96a..f774b5df9d 100644 --- a/third_party/memfault/port/src/memfault_platform_port.c +++ b/third_party/memfault/port/src/memfault_platform_port.c @@ -14,7 +14,7 @@ #include "pbl/os/mutex.h" #include "pbl/services/clock.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/version.h" #include "FreeRTOS.h" diff --git a/third_party/moddable/moddable b/third_party/moddable/moddable index 25f1a3bb1e..2dfa50413a 160000 --- a/third_party/moddable/moddable +++ b/third_party/moddable/moddable @@ -1 +1 @@ -Subproject commit 25f1a3bb1e47d1dff750d4571ae314239735bee9 +Subproject commit 2dfa50413aba7777aa4f4f00473a69785d119dac diff --git a/third_party/nimble/port/include/console/console.h b/third_party/nimble/port/include/console/console.h index c6cfa6ded5..8004a6dd06 100644 --- a/third_party/nimble/port/include/console/console.h +++ b/third_party/nimble/port/include/console/console.h @@ -4,7 +4,7 @@ #ifndef __CONSOLE_H__ #define __CONSOLE_H__ -#include "system/logging.h" +#include #define console_printf(_fmt, ...) PBL_LOG_D_INFO(LOG_DOMAIN_BT_STACK, _fmt, ##__VA_ARGS__) diff --git a/third_party/nimble/port/include/nimble/nimble_npl_os_log.h b/third_party/nimble/port/include/nimble/nimble_npl_os_log.h index 4ddc642312..c8e22f93ae 100644 --- a/third_party/nimble/port/include/nimble/nimble_npl_os_log.h +++ b/third_party/nimble/port/include/nimble/nimble_npl_os_log.h @@ -6,7 +6,7 @@ #include -#include "system/logging.h" +#include /* NimBLE to PebbleOS log level equivalences */ #define NIMBLE_LOG_LEVEL_DEBUG LOG_LEVEL_DEBUG diff --git a/third_party/nimble/port/src/npl_os_pebble.c b/third_party/nimble/port/src/npl_os_pebble.c index bda5b7424d..0e70cef780 100644 --- a/third_party/nimble/port/src/npl_os_pebble.c +++ b/third_party/nimble/port/src/npl_os_pebble.c @@ -15,7 +15,7 @@ #include "pbl/os/mutex.h" #include "pbl/os/tick.h" #include "pbl/services/new_timer/new_timer.h" -#include "system/logging.h" +#include #include "system/passert.h" struct ble_npl_event *npl_pebble_eventq_get(struct ble_npl_eventq *evq, ble_npl_time_t tmo) { diff --git a/third_party/nimble/transport/hci_sf32lb52.c b/third_party/nimble/transport/hci_sf32lb52.c index 0de2d7b889..e9c89f6ffc 100644 --- a/third_party/nimble/transport/hci_sf32lb52.c +++ b/third_party/nimble/transport/hci_sf32lb52.c @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include // NOTE: transport.h needs os_mbuf.h to be included first From db0298c93c46ba4d1d70040757bd6a9dcf2f4312 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 16:35:06 +0200 Subject: [PATCH 27/85] services/notifications: fix cross-heap free in storage compression prv_get_notification() fills the TimelineItem via timeline_item_deserialize_item(), which allocates allocated_buffer from the calling task's heap, but prv_compress() freed it with kernel_free(). Compression can run on the app task, e.g. when the workout summary notification is stored while notification storage is full, so an app-heap pointer hit the kernel heap's range assert (heap.c:275) and rebooted the watch. Free the buffer with timeline_item_free_allocated_buffer() so the free targets the same heap as the allocation. On kernel tasks this is equivalent to the old behavior. Fixes FIRM-3485 Refs FIRM-1925 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/services/notifications/notification_storage.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fw/services/notifications/notification_storage.c b/src/fw/services/notifications/notification_storage.c index 080d8a1b45..57c981cc87 100644 --- a/src/fw/services/notifications/notification_storage.c +++ b/src/fw/services/notifications/notification_storage.c @@ -231,11 +231,14 @@ static bool prv_compress(size_t size_needed, int *fd) { char uuid_buffer[UUID_STRING_BUFFER_LENGTH]; uuid_to_string(&iter_state.header.common.id, uuid_buffer); PBL_LOG_ERR("Failed to write notification %s during compression (error %d). Resetting all notifications.", uuid_buffer, result); - kernel_free(notification.allocated_buffer); + // The buffer comes from the calling task's heap (timeline_item_deserialize_item), so it + // must not be freed with kernel_free: compression can run on the app task, e.g. when a + // workout summary notification is stored while storage is full. + timeline_item_free_allocated_buffer(¬ification); goto cleanup; } write_offset += result; - kernel_free(notification.allocated_buffer); + timeline_item_free_allocated_buffer(¬ification); } s_write_offset = write_offset; From d7bf987da7d6510c34f4fa402cbcfffcd59f526f Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 17:10:28 +0200 Subject: [PATCH 28/85] services/notifications: fix leak and deleted-entry handling in rewrite notification_storage_rewrite() never freed the TimelineItem buffer that prv_rewrite_iter_next() allocates for every live entry, leaking one buffer per notification on each rewrite (e.g. timezone migration). Freeing per iteration exposes the deleted-entry path, which was broken in two ways: the iterator did not seek past a deleted entry's payload, so the next header was read from payload bytes and iteration ended early; and the loop still wrote a record for the deleted entry, using the previous item's stale payload. Skip deleted entries entirely, matching prv_compress(), and track the bytes written so s_write_offset stays correct for the now-shorter file. Add a unit test covering a rewrite over live and deleted entries; it fails against the previous code and passes now. Refs FIRM-3485 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- .../notifications/notification_storage.c | 20 ++++- .../notifications/test_notification_storage.c | 75 +++++++++++++++++++ 2 files changed, 91 insertions(+), 4 deletions(-) diff --git a/src/fw/services/notifications/notification_storage.c b/src/fw/services/notifications/notification_storage.c index 57c981cc87..7abacc394a 100644 --- a/src/fw/services/notifications/notification_storage.c +++ b/src/fw/services/notifications/notification_storage.c @@ -476,7 +476,9 @@ static bool prv_rewrite_iter_next(NotificationIterState *iter_state) { } if (iter_state->header.common.status & TimelineItemStatusDeleted) { - return true; + // Deleted entries are not read into iter_state->notification; skip the payload so the next + // iteration reads a record header, not payload bytes + return pfs_seek(iter_state->fd, iter_state->header.payload_length, FSeekCur) >= 0; } return prv_get_notification(&iter_state->notification, &iter_state->header, iter_state->fd); } @@ -668,13 +670,23 @@ void notification_storage_rewrite(void (*iter_callback)(TimelineItem *notificati }; iter_init(&iter, (IteratorCallback)prv_rewrite_iter_next, NULL, &iter_state); + int write_offset = 0; while (iter_next(&iter)) { uint8_t status = iter_state.header.common.status; - if (!(status & TimelineItemStatusDeleted)) { - iter_callback(&iter_state.notification, &iter_state.header, data); + if (status & TimelineItemStatusDeleted) { + // Drop deleted entries; iter_state.notification still holds the previous item, whose + // buffer has already been written and freed + continue; } - prv_write_notification(&iter_state.notification, &iter_state.header, new_fd); + iter_callback(&iter_state.notification, &iter_state.header, data); + int result = prv_write_notification(&iter_state.notification, &iter_state.header, new_fd); + timeline_item_free_allocated_buffer(&iter_state.notification); + if (result < 0) { + break; + } + write_offset += result; } + s_write_offset = write_offset; // Close the old file prv_file_close(fd); diff --git a/tests/fw/services/notifications/test_notification_storage.c b/tests/fw/services/notifications/test_notification_storage.c index 2f29bc9a08..cb1748da6e 100644 --- a/tests/fw/services/notifications/test_notification_storage.c +++ b/tests/fw/services/notifications/test_notification_storage.c @@ -888,3 +888,78 @@ void test_notification_storage__should_detect_corruption(void) { notification_storage_store(&e4); cl_assert_equal_b(notification_storage_get(&i4, &r), false); } + +static void prv_rewrite_bump_timestamp_callback(TimelineItem *notification, + SerializedTimelineItemHeader *header, void *data) { + int *count = data; + (*count)++; + header->common.timestamp += 42; + notification->header.timestamp = header->common.timestamp; +} + +void test_notification_storage__rewrite_skips_deleted(void) { + Uuid i1; + uuid_generate(&i1); + TimelineItem e1 = { + .header = { + .id = i1, + .type = TimelineItemTypeNotification, + .status = 0, + .ancs_uid = 0, + .layout = LayoutIdGeneric, + .timestamp = 0x53f0dda5, + }, + .attr_list = { + .num_attributes = ARRAY_LENGTH(attributes), + .attributes = attributes, + }, + .action_group = { + .num_actions = ARRAY_LENGTH(actions), + .actions = actions, + } + }; + + TimelineItem e2 = e1; + Uuid i2; + uuid_generate(&i2); + e2.header.id = i2; + + TimelineItem e3 = e1; + Uuid i3; + uuid_generate(&i3); + e3.header.id = i3; + + notification_storage_store(&e1); + notification_storage_store(&e2); + notification_storage_store(&e3); + + // Delete the middle notification; the rewrite must skip it and still visit e3 + notification_storage_remove(&i2); + + int count = 0; + notification_storage_rewrite(prv_rewrite_bump_timestamp_callback, &count); + cl_assert_equal_i(count, 2); + + TimelineItem r; + e1.header.timestamp += 42; + cl_assert(notification_storage_get(&i1, &r)); + compare_notifications(&e1, &r); + free(r.allocated_buffer); + + cl_assert_equal_b(notification_storage_get(&i2, &r), false); + + e3.header.timestamp += 42; + cl_assert(notification_storage_get(&i3, &r)); + compare_notifications(&e3, &r); + free(r.allocated_buffer); + + // Storage must still accept and retrieve new notifications after a rewrite + Uuid i4; + uuid_generate(&i4); + TimelineItem e4 = e1; + e4.header.id = i4; + notification_storage_store(&e4); + cl_assert(notification_storage_get(&i4, &r)); + compare_notifications(&e4, &r); + free(r.allocated_buffer); +} From 7628608402d73e61ac77efa3dc54b4186c51e7bb Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 16:32:35 +0200 Subject: [PATCH 29/85] drivers/speaker: throttle sf32lb52 DMA refill callbacks The AUDCODEC DMA half/full-complete ISRs enqueued a prv_audio_trans_bg refill callback on every interrupt with no in-flight tracking. When KernelBG is starved (e.g. an app blocking on a slow flash resource read while holding the pfs mutexes), the system task queue fills up and the watch hard-reboots with Event Queue Full, cutting alarm tones off a few seconds into playback. Mirror the nrf5/da7212 driver: track a callback_pending flag so at most one refill callback is in flight, clearing it again if the enqueue fails. The flag is also reset in audec_start() so a stale value cannot block refills on a new session. Fixes FIRM-3470 Refs FIRM-2438 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/drivers/speaker/sf32lb52/audec.c | 15 ++++++++++++--- .../drivers/speaker/sf32lb52/audio_definitions.h | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/fw/drivers/speaker/sf32lb52/audec.c b/src/fw/drivers/speaker/sf32lb52/audec.c index 5ca7402342..64c36ce563 100644 --- a/src/fw/drivers/speaker/sf32lb52/audec.c +++ b/src/fw/drivers/speaker/sf32lb52/audec.c @@ -366,6 +366,7 @@ void audec_start(AudioDevice* audio_device, AudioTransCB cb) { AudioDeviceState* state = audio_device->state; AUDCODEC_HandleTypeDef *haudcodec = &state->audcodec; state->trans_cb = cb; + state->callback_pending = false; soc_sf32lb_sleep_block(SOC_SF32LB_DEEPWFI); @@ -448,6 +449,7 @@ void audec_dac0_dma_irq_handler(AudioDevice* audio_device) static void prv_audio_trans_bg(void* data) { AudioDeviceState* state = (AudioDeviceState*) data; + state->callback_pending = false; uint32_t free_size = circular_buffer_get_write_space_remaining(&state->circ_buffer); state->trans_cb(&free_size); } @@ -474,10 +476,17 @@ static void prv_dma_request_processing(AudioDeviceState* state) { // any bytes we didn't touch were already memset() to silence. dcache_flush(state->queue_buf[HAL_AUDCODEC_DAC_CH0], CFG_AUDIO_PLAYBACK_PIPE_SIZE); uint32_t free_size = circular_buffer_get_write_space_remaining(&state->circ_buffer); - if(state->trans_cb && free_size >= CFG_AUDIO_PLAYBACK_PIPE_SIZE) { + // Only one refill callback may be in flight: this ISR fires every half + // buffer, and enqueueing on each one floods the system task queue when + // KernelBG is starved, tripping the Event Queue Full reset. + if(state->trans_cb && !state->callback_pending && + free_size >= CFG_AUDIO_PLAYBACK_PIPE_SIZE) { bool system_task_switch_context = false; - system_task_add_callback_from_isr(prv_audio_trans_bg, (void*)state, - &system_task_switch_context); + state->callback_pending = true; + if (!system_task_add_callback_from_isr(prv_audio_trans_bg, (void*)state, + &system_task_switch_context)) { + state->callback_pending = false; + } } } diff --git a/src/fw/drivers/speaker/sf32lb52/audio_definitions.h b/src/fw/drivers/speaker/sf32lb52/audio_definitions.h index 0f8339bf6f..f526bdcf3c 100644 --- a/src/fw/drivers/speaker/sf32lb52/audio_definitions.h +++ b/src/fw/drivers/speaker/sf32lb52/audio_definitions.h @@ -40,6 +40,9 @@ typedef struct AudioState { uint8_t *circ_buffer_storage; CircularBuffer circ_buffer; AudioTransCB trans_cb; + //! Set while a prv_audio_trans_bg refill callback is queued on the system + //! task; the DMA ISR must not enqueue another until it has run. + volatile bool callback_pending; uint8_t volume; //! Raw (unaligned) pointer returned by kernel_malloc for the AUDCODEC DAC //! DMA buffer. haudcodec->buf[] is bumped up to a cache-line boundary so From 46c10a0778d6f001de2d0effb2ed842c217dacda Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 17:30:09 +0200 Subject: [PATCH 30/85] fw/comm/ble/ams: tolerate extra PlaybackInfo CSV fields Some non-Apple AMS servers format the PlaybackInfo floats using a comma decimal separator (e.g. "0,1,00,-0,00" from a de_DE Android phone). The CSV parser splits on every comma, so the per-field callback gets called with idx >= 3, performing an out-of-bounds read of multiplier[] and then hitting the WTF assert. The phone re-sends the poisoned value seconds after every reconnect while music plays, so the watch crash-loops; three crashes with less than 15 minutes of uptime each make the bootloader fall back to PRF, which invalidates both firmware slots and forces the user to reinstall daily. Bound-check the field index and stop parsing instead of asserting; the update is then rejected by the existing field-count check. Fixes FIRM-3228 Fixes FIRM-2706 Fixes FIRM-3441 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/comm/ble/kernel_le_client/ams/ams.c | 7 +++++ tests/fw/comm/test_ams.c | 32 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/fw/comm/ble/kernel_le_client/ams/ams.c b/src/fw/comm/ble/kernel_le_client/ams/ams.c index da38e93c10..b8048cdc1e 100644 --- a/src/fw/comm/ble/kernel_le_client/ams/ams.c +++ b/src/fw/comm/ble/kernel_le_client/ams/ams.c @@ -301,6 +301,13 @@ static MusicPlayState prv_music_playstate_for_ams_playback_state(int32_t ams_pla static bool prv_handle_player_playback_info_value(const char *value, uint32_t value_length, uint32_t idx, void *context) { + // Non-Apple AMS servers can format the floats with a comma decimal separator + // (e.g. "1,00"), yielding extra CSV fields. Stop parsing instead of + // asserting; the caller rejects the update based on the field count. + if (idx > AMSPlaybackInfoIdxElapsedTime) { + return false /* should_continue */; + } + // Default to -1 for playback state, or 0 otherwise, in case "value" is an empty string: // This will cause the playback state to be set to MusicPlayStateUnknown. int32_t value_out = (idx == AMSPlaybackInfoIdxState) ? -1 : 0; diff --git a/tests/fw/comm/test_ams.c b/tests/fw/comm/test_ams.c index a9a3cf1f96..b035412ed9 100644 --- a/tests/fw/comm/test_ams.c +++ b/tests/fw/comm/test_ams.c @@ -558,6 +558,38 @@ void test_ams__receive_incomplete_csv_list_player_playback_info_update(void) { prv_assert_initial_playback_state(); } +void test_ams__receive_trailing_comma_player_playback_info_update(void) { + prv_connect_ams(); + + // Receive: paused, 100% playback rate, elapsed time 2.0s, trailing comma + // adding an empty 4th field. + // 0000 00 01 00 30 2c 31 2c 32 2e 30 2c ...0,1,2 .0, + uint8_t trailing_comma_playback_info_update[] = { + 0x00, 0x01, 0x00, 0x30, 0x2c, 0x31, 0x2c, 0x32, + 0x2e, 0x30, 0x2c, + }; + prv_receive_entity_update(trailing_comma_playback_info_update, + sizeof(trailing_comma_playback_info_update)); + + prv_assert_initial_playback_state(); +} + +void test_ams__receive_comma_decimal_player_playback_info_update(void) { + prv_connect_ams(); + + // Receive: paused, "1,00" rate, "-0,00" elapsed time — floats formatted with + // a comma decimal separator, as sent by some non-Apple AMS servers. + // 0000 00 01 00 30 2c 31 2c 30 30 2c 2d 30 2c 30 30 ...0,1,0 0,-0,00 + uint8_t comma_decimal_playback_info_update[] = { + 0x00, 0x01, 0x00, 0x30, 0x2c, 0x31, 0x2c, 0x30, + 0x30, 0x2c, 0x2d, 0x30, 0x2c, 0x30, 0x30, + }; + prv_receive_entity_update(comma_decimal_playback_info_update, + sizeof(comma_decimal_playback_info_update)); + + prv_assert_initial_playback_state(); +} + void test_ams__receive_malformed_player_volume_update(void) { prv_connect_ams(); From 92472f41cc0c997496bfe3ec0be69aa007576934 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Tue, 21 Jul 2026 16:01:24 +0200 Subject: [PATCH 31/85] third_party/hal_sifli: pull latest HAL Update SiFli-SDK to the tip of the pebbleos branch. This is a retry of 2e843a0af ("third_party/hal_sifli: pull latest HAL"), reverted in acdab3ac0. The GPIO SET/CLR and MPI OTP fixes carried on the previous rebased pointer are already merged in this branch. Adapt to HAL API changes: - HAL_QSPI_GET_OTP_LB() no longer takes an address argument - Use HAL_RCC_HCPU_SetTickDiv() and SYSTICK_CLKSOURCE_TICK_CLK for the SYSTICK configuration - Provide os_interrupt_start()/os_interrupt_stop() in ipc_os_port.h, now required by ipc_hw.c Co-authored-by: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- soc/sf32lb/sf32lb52x/freertos.c | 5 ++--- src/fw/drivers/sf32lb52/qspi.c | 2 +- third_party/hal_sifli/SiFli-SDK | 2 +- third_party/hal_sifli/sf32lb52/ipc_os_port.h | 10 ++++++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/soc/sf32lb/sf32lb52x/freertos.c b/soc/sf32lb/sf32lb52x/freertos.c index bd340b1bdc..98f734bacf 100644 --- a/soc/sf32lb/sf32lb52x/freertos.c +++ b/soc/sf32lb/sf32lb52x/freertos.c @@ -302,10 +302,9 @@ bool vPortEnableTimer() { HAL_RCC_HCPU_ClockSelect(RCC_CLK_MOD_HP_TICK, RCC_CLK_TICK_HXT48); // delay to avoid systick config failure (undocumented silicon issue) HAL_Delay_us(200); - MODIFY_REG(hwp_hpsys_rcc->CFGR, HPSYS_RCC_CFGR_TICKDIV_Msk, - MAKE_REG_VAL(25, HPSYS_RCC_CFGR_TICKDIV_Msk, HPSYS_RCC_CFGR_TICKDIV_Pos)); + HAL_RCC_HCPU_SetTickDiv(25); HAL_SYSTICK_Config(1920000 / RTC_TICKS_HZ); - HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); + HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_TICK_CLK); SysTick->CTRL |= (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk); diff --git a/src/fw/drivers/sf32lb52/qspi.c b/src/fw/drivers/sf32lb52/qspi.c index c7faffd8bb..b69512098a 100644 --- a/src/fw/drivers/sf32lb52/qspi.c +++ b/src/fw/drivers/sf32lb52/qspi.c @@ -317,7 +317,7 @@ status_t qspi_flash_security_register_is_locked(QSPIFlash *dev, uint32_t addr, b /* OPT operation are synchronous, one match means all matched. */ portENTER_CRITICAL(); - opt_val = HAL_QSPI_GET_OTP_LB(hflash, addr); + opt_val = HAL_QSPI_GET_OTP_LB(hflash); portEXIT_CRITICAL(); if (opt_val == 0xff) { diff --git a/third_party/hal_sifli/SiFli-SDK b/third_party/hal_sifli/SiFli-SDK index 595e61556f..bfee83c7ad 160000 --- a/third_party/hal_sifli/SiFli-SDK +++ b/third_party/hal_sifli/SiFli-SDK @@ -1 +1 @@ -Subproject commit 595e61556f77078912eb6d1b7f117e962e9b0563 +Subproject commit bfee83c7adc0b19c2923f1788238def50f0a9dce diff --git a/third_party/hal_sifli/sf32lb52/ipc_os_port.h b/third_party/hal_sifli/sf32lb52/ipc_os_port.h index 8ab0061027..91c4668c8e 100644 --- a/third_party/hal_sifli/sf32lb52/ipc_os_port.h +++ b/third_party/hal_sifli/sf32lb52/ipc_os_port.h @@ -3,6 +3,8 @@ #pragma once +#include "bf0_hal.h" + void vPortEnterCritical(void); void vPortExitCritical(void); @@ -17,3 +19,11 @@ static inline void os_interrupt_enable(int mask) { #define os_interrupt_enter() #define os_interrupt_exit() + +#define os_interrupt_start(irq_number, priority, sub_priority) \ + do { \ + HAL_NVIC_SetPriority(irq_number, priority, sub_priority); \ + HAL_NVIC_EnableIRQ(irq_number); \ + } while (0) + +#define os_interrupt_stop(irq_number) HAL_NVIC_DisableIRQ(irq_number) From cd44d62f22ee2bcfa56e49e4158eee1af50abaff Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Tue, 21 Jul 2026 17:31:06 +0200 Subject: [PATCH 32/85] third_party/hal_sifli: use updated LCPU patch Re-apply 821f9c8de, reverted in 81a171114: build the LCPU ROM patch from pebbleos-nonfree instead of the SiFli-SDK copy. The nonfree submodule already contains the updated patch (8d2bfaa). Co-authored-by: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- third_party/hal_sifli/wscript_build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/hal_sifli/wscript_build b/third_party/hal_sifli/wscript_build index 42a2dc977d..ec8dd0adc7 100644 --- a/third_party/hal_sifli/wscript_build +++ b/third_party/hal_sifli/wscript_build @@ -167,7 +167,7 @@ if bld.env.CONFIG_HAL_SIFLI_SF32LB52: micro_sources += [ 'SiFli-SDK/drivers/cmsis/sf32lb52x/bf0_lcpu_init.c', 'SiFli-SDK/drivers/cmsis/sf32lb52x/lcpu_patch.c', - 'SiFli-SDK/drivers/cmsis/sf32lb52x/lcpu_patch_rev_b.c', + '../nonfree/pebbleos-nonfree/sf32lb52/lcpu_patch_rev_b.c', 'SiFli-SDK/drivers/cmsis/sf32lb52x/bt_rf_fulcal.c', 'sf32lb52/lcpu_config.c', ] From b7c7e15c470c02aee2bf20859466f59b72a09e87 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 18:21:02 +0200 Subject: [PATCH 33/85] services/ecompass: relax calibration gates for weak geomagnetic fields The sphere-fit solver only accepts a four-point sample set when the points are spread further apart than an absolute distance threshold: point-to-point, point-to-line and point-to-plane all had to exceed 370 (37 uT), with a single fallback to 220 that was only armed after two 300-sample windows in which the point-to-point gate had passed. All samples lie on a sphere whose radius R is the local geomagnetic field strength. In weak-field regions such as the South Atlantic Anomaly (~22 uT, R ~= 228) those gates are unsatisfiable: point-to-point > 370 needs ~108 degrees of orientation change, more than the calibration UI coaches, and point-to-line > 370 is geometrically impossible since its maximum is R + sqrt(R^2 - (370/2)^2) < 370 for R < ~231. Because the fallback was gated on the point-to-point pass that weak fields cannot produce, the threshold never dropped and calibration never completed (bug report logs show zero solutions over a 7 minute session). Replace the strike-based fallback with deterministic progressive relaxation: every 300-sample window that ends without a complete point set lowers the threshold by 70, down to a floor of 90 (9 uT). The floor keeps all three gates satisfiable at ~20 uT with realistic <= 90 degree orientation coverage. Normal-field behavior is preserved: the strict 370 threshold is still tried first and only relaxes after demonstrated failure to fit, and the existing requirement of three consecutive consistent fits within 50 counts still rejects noisy solutions. Also reset the threshold and the fit-consistency history in ecomp_corr_reset() so each calibration session starts from the strict gates instead of inheriting relaxed state. Unit tests cover weak-field convergence (radius-228 sphere with a hard-iron offset, 50-degree cap coverage, sensor noise: the old gates provably never fire, the new code locks within ~80 simulated seconds and recovers the offset within 2 counts), normal-field regression (radius 470, locks within the first strict window), and rejection of degenerate stationary and coplanar inputs. Fixes FIRM-3087 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/services/ecompass/correction.c | 84 ++++++----- tests/fw/services/test_compass_cal.c | 208 +++++++++++++++++++++++++- 2 files changed, 251 insertions(+), 41 deletions(-) diff --git a/src/fw/services/ecompass/correction.c b/src/fw/services/ecompass/correction.c index b327a98b1e..85e2acff9b 100644 --- a/src/fw/services/ecompass/correction.c +++ b/src/fw/services/ecompass/correction.c @@ -184,13 +184,17 @@ static bool sphere_fit(int16_t *solution) { // well). However, the greater the the threshold, the more orientations one // must put their watch through in order to get solution sets // -// For now, select a distance metric that should work out of the box for a -// majority of the middle of the world. However, if no solution sets are found -// after 45s, fall back to a less aggressive threshold that will work -// anywhere in the world. +// For now, start with a distance metric that should work out of the box for a +// majority of the middle of the world. In weak geomagnetic regions the samples +// lie on a sphere too small for that metric to ever be satisfiable (e.g. in +// the South Atlantic Anomaly, ~22 uT, the point-to-line gate at 37 uT is +// geometrically impossible). So, each time a sample window elapses without a +// complete point set, relax the threshold one step toward a floor that stays +// feasible at any realistic field strength and orientation coverage. #define THRESH_MAX 370 /* 37 uT */ -#define THRESH_MIN 220 /* 22 uT */ +#define THRESH_MIN 90 /* 9 uT */ +#define THRESH_STEP 70 // Note: All of the following helper routines operate on the s_samples array // defined above and populated by add_raw_mag_sample @@ -280,21 +284,23 @@ static int min_max_diff(int16_t *vals, int n_vals) { } #define N_COMP_SAMPS 3 + +// stash several of the most recent calibration results. The idea here is if +// we get multiple readings in a row close to one another than we have locked +// onto a good set of solutions +static int16_t s_calib_idx = 0; +static int16_t s_calib_val[N_AXIS][N_COMP_SAMPS]; +static int s_saved_sample_match = 0; + static MagCalStatus check_correction_value(int16_t *solution, int16_t *saved_solution) { const int max_delta_thresh = 50; - // stash several of the most recent calibration results. The idea here is if - // we get multiple readings in a row close to one another than we have locked - // onto a good set of solutions - static int16_t calib_idx = 0; - static int16_t calib_val[N_AXIS][N_COMP_SAMPS]; - calib_val[0][calib_idx % 3] = solution[0]; - calib_val[1][calib_idx % 3] = solution[1]; - calib_val[2][calib_idx % 3] = solution[2]; - calib_idx++; - - static int saved_sample_match = 0; + s_calib_val[0][s_calib_idx % 3] = solution[0]; + s_calib_val[1][s_calib_idx % 3] = solution[1]; + s_calib_val[2][s_calib_idx % 3] = solution[2]; + s_calib_idx++; + int x_delta, y_delta, z_delta; // is the new solution close to what we already have saved? @@ -304,10 +310,10 @@ static MagCalStatus check_correction_value(int16_t *solution, z_delta = ABS(saved_solution[2] - solution[2]); if ((x_delta < max_delta_thresh) && (y_delta < max_delta_thresh) && (z_delta < max_delta_thresh)) { - saved_sample_match++; - if (saved_sample_match == 3) { - saved_sample_match = 0; - calib_idx = 0; + s_saved_sample_match++; + if (s_saved_sample_match == 3) { + s_saved_sample_match = 0; + s_calib_idx = 0; PBL_LOG_DBG("Persisting previous values!"); return (MagCalStatusSavedSampleMatch); // locked } @@ -315,20 +321,20 @@ static MagCalStatus check_correction_value(int16_t *solution, } // do we have several solutions in a row that are close to one another - if (calib_idx >= N_COMP_SAMPS) { - x_delta = min_max_diff(calib_val[0], 3); - y_delta = min_max_diff(calib_val[1], 3); - z_delta = min_max_diff(calib_val[2], 3); + if (s_calib_idx >= N_COMP_SAMPS) { + x_delta = min_max_diff(s_calib_val[0], 3); + y_delta = min_max_diff(s_calib_val[1], 3); + z_delta = min_max_diff(s_calib_val[2], 3); if ((x_delta < max_delta_thresh) && (y_delta < max_delta_thresh) && (z_delta < max_delta_thresh)) { int corrs[N_AXIS] = { 0 }; for (int i = 0; i < N_AXIS; i++) { for (int j = 0; j < N_COMP_SAMPS; j++) { - corrs[i] += calib_val[i][j]; + corrs[i] += s_calib_val[i][j]; } solution[i] = corrs[i] / N_COMP_SAMPS; } - calib_idx = 0; + s_calib_idx = 0; return (MagCalStatusNewLockedSolutionAvail); } } @@ -337,28 +343,28 @@ static MagCalStatus check_correction_value(int16_t *solution, } static int s_sample_idx = 0; -static int s_no_fit_strikes = 0; static int s_samples_collected_for_fit = 0; +static int32_t s_thresh = THRESH_MAX; void ecomp_corr_reset(void) { - s_no_fit_strikes = 0; s_samples_collected_for_fit = 0; s_sample_idx = 0; + s_thresh = THRESH_MAX; + s_calib_idx = 0; + s_saved_sample_match = 0; } MagCalStatus ecomp_corr_add_raw_mag_sample(int16_t *sample, int16_t *saved_corr, int16_t *solution) { - static int thresh = THRESH_MAX; s_samples_collected_for_fit++; - // if we haven't gotten good samples points in 15s @ 20Hz (60s @ 5Hz) + // no complete point set in 15s @ 20Hz (60s @ 5Hz): relax the gates so + // calibration stays feasible in weak fields regardless of motion pattern if (s_samples_collected_for_fit > 300) { - if (s_sample_idx >= 2) { // there was some kind of motion - s_no_fit_strikes++; - } - if (s_no_fit_strikes == 2) { - PBL_LOG_INFO("Lowering magnetometer distance threshold"); - thresh = THRESH_MIN; + if (s_thresh > THRESH_MIN) { + s_thresh = MAX(s_thresh - THRESH_STEP, THRESH_MIN); + PBL_LOG_DBG("Lowering magnetometer distance threshold to %d", + (int)s_thresh); } s_samples_collected_for_fit = 0; @@ -370,15 +376,15 @@ MagCalStatus ecomp_corr_add_raw_mag_sample(int16_t *sample, s_samples[s_sample_idx][2] = sample[2]; if (s_sample_idx == 1) { - if (!pt_to_pt_dist_under_thresh(0, 1, thresh)) { + if (!pt_to_pt_dist_under_thresh(0, 1, s_thresh)) { return (MagCalStatusNoSolution); } } else if (s_sample_idx == 2) { - if (!pt_to_line_dist_under_thresh(0, 1, 2, thresh)) { + if (!pt_to_line_dist_under_thresh(0, 1, 2, s_thresh)) { return (MagCalStatusNoSolution); } } else if (s_sample_idx == 3) { - if (!pt_to_plane_dist_under_thresh(0, 1, 2, 3, thresh)) { + if (!pt_to_plane_dist_under_thresh(0, 1, 2, 3, s_thresh)) { return (MagCalStatusNoSolution); } } diff --git a/tests/fw/services/test_compass_cal.c b/tests/fw/services/test_compass_cal.c index e1549d5b4a..7d73f0561d 100644 --- a/tests/fw/services/test_compass_cal.c +++ b/tests/fw/services/test_compass_cal.c @@ -99,6 +99,8 @@ static void solution_and_estimate_match(int16_t *solution, int16_t *correction) void test_compass_cal__sphere_fit(void) { int num_entries = sizeof(s_sample_data) / sizeof(SampleData); + ecomp_corr_reset(); + int16_t solution[3]; int rv; for (int i = 0; i < num_entries; i++) { @@ -124,6 +126,208 @@ void test_compass_cal__sphere_fit(void) { } } - +////////////////////////////////////////////////////////////////////////////// +// Synthetic motion helpers +// +// Raw samples lie on a sphere whose radius is the local field strength +// (1 count = 0.1 uT) centered on the hard-iron offset. Watch motion is +// emulated by interpolating between waypoint directions, mimicking the +// tilt coaching of the calibration UI, plus MMC5603NJ-level noise. + +static uint32_t s_rand_state; + +static int prv_noise(void) { + // deterministic pseudo-noise in [-3, 3] + s_rand_state = s_rand_state * 1103515245u + 12345u; + return (int)((s_rand_state >> 16) % 7) - 3; +} + +typedef struct { + const int16_t *center; + int32_t radius; // 0 = keep interpolated point (coplanar path) + const int32_t (*waypoints)[3]; + int n_waypoints; + int steps_per_leg; + int leg; + int step; +} MotionSim; + +static void prv_next_sample(MotionSim *sim, int16_t *sample) { + const int32_t *a = sim->waypoints[sim->leg % sim->n_waypoints]; + const int32_t *b = sim->waypoints[(sim->leg + 1) % sim->n_waypoints]; + + int32_t v[3]; + for (int i = 0; i < 3; i++) { + v[i] = a[i] + ((b[i] - a[i]) * sim->step) / sim->steps_per_leg; + } + + if (sim->radius != 0) { + // project the interpolated point back onto the sphere + int32_t norm = integer_sqrt((int64_t)v[0] * v[0] + (int64_t)v[1] * v[1] + + (int64_t)v[2] * v[2]); + for (int i = 0; i < 3; i++) { + v[i] = (v[i] * sim->radius) / norm; + } + } + + for (int i = 0; i < 3; i++) { + sample[i] = sim->center[i] + v[i] + prv_noise(); + } + + if (++sim->step >= sim->steps_per_leg) { + sim->step = 0; + sim->leg++; + } +} + +// Directions within a 50 degree cap around +z on a radius-228 sphere +// (~22.8 uT, South Atlantic Anomaly level). Max pairwise chord is ~349, +// below the strict 370 point-to-point gate. +static const int32_t s_weak_waypoints[][3] = { + { 0, 0, 228 }, // pole + { 175, 0, 147 }, // rim, azimuth 0 + { -87, 151, 147 }, // rim, azimuth 120 + { 0, 0, 228 }, + { -87, -151, 147 }, // rim, azimuth 240 + { 87, 151, 147 }, // rim, azimuth 60 + { 0, 0, 228 }, + { -175, 0, 147 }, // rim, azimuth 180 + { 87, -151, 147 }, // rim, azimuth 300 +}; + +// Directions within a 70 degree cap around +z on a radius-470 sphere (47 uT) +static const int32_t s_normal_waypoints[][3] = { + { 0, 0, 470 }, // pole + { 442, 0, 161 }, // rim, azimuth 0 + { -221, 383, 161 }, // rim, azimuth 120 + { 0, 0, 470 }, + { -221, -383, 161 }, // rim, azimuth 240 + { 221, 383, 161 }, // rim, azimuth 60 + { 0, 0, 470 }, + { -442, 0, 161 }, // rim, azimuth 180 + { 221, -383, 161 }, // rim, azimuth 300 +}; + +// Coplanar ring (z = 147 slice of the weak-field sphere) +static const int32_t s_ring_waypoints[][3] = { + { 175, 0, 147 }, + { 87, 151, 147 }, + { -87, 151, 147 }, + { -175, 0, 147 }, + { -87, -151, 147 }, + { 87, -151, 147 }, +}; + +// In a weak geomagnetic field all samples sit on a sphere of radius ~228, so +// the historical fixed gates were unsatisfiable: point-to-point > 370 needs +// ~108 degrees of tilt separation and point-to-line > 370 is geometrically +// impossible at this radius (max ~ R + sqrt(R^2 - 185^2) < 370). The old +// fallback never triggered without a point-to-point pass, so calibration +// never completed. Progressive relaxation must converge here. +void test_compass_cal__weak_field_converges(void) { + static const int16_t center[3] = { -1250, 830, 1980 }; + + ecomp_corr_reset(); + s_rand_state = 0x12345678; + + MotionSim sim = { + .center = center, + .radius = 228, + .waypoints = s_weak_waypoints, + .n_waypoints = sizeof(s_weak_waypoints) / sizeof(s_weak_waypoints[0]), + .steps_per_leg = 12, + }; + + int16_t solution[3] = { 0 }; + int locked_at = -1; + for (int n = 0; n < 6000; n++) { + int16_t sample[3]; + prv_next_sample(&sim, sample); + int rv = ecomp_corr_add_raw_mag_sample(sample, NULL, solution); + if (n < 300) { + // the first window still runs the strict gates: no solution possible, + // which is what the old fixed-threshold code produced indefinitely + cl_assert_equal_i(rv, MagCalStatusNoSolution); + } + if (rv == MagCalStatusNewLockedSolutionAvail) { + locked_at = n; + break; + } + } + + cl_assert(locked_at > 0); + for (int i = 0; i < 3; i++) { + cl_assert(ABS(solution[i] - center[i]) <= 30); + } +} + +// In a normal field the strict gates are satisfiable and calibration must +// still lock quickly, before any threshold relaxation kicks in +void test_compass_cal__normal_field_converges_quickly(void) { + static const int16_t center[3] = { 2400, -1700, -900 }; + + ecomp_corr_reset(); + s_rand_state = 0x87654321; + + MotionSim sim = { + .center = center, + .radius = 470, + .waypoints = s_normal_waypoints, + .n_waypoints = sizeof(s_normal_waypoints) / sizeof(s_normal_waypoints[0]), + .steps_per_leg = 12, + }; + + int16_t solution[3] = { 0 }; + int locked_at = -1; + for (int n = 0; n < 1200; n++) { + int16_t sample[3]; + prv_next_sample(&sim, sample); + int rv = ecomp_corr_add_raw_mag_sample(sample, NULL, solution); + if (rv == MagCalStatusNewLockedSolutionAvail) { + locked_at = n; + break; + } + } + + cl_assert(locked_at > 0); + cl_assert(locked_at < 300); // locked within the first (strict) window + for (int i = 0; i < 3; i++) { + cl_assert(ABS(solution[i] - center[i]) <= 20); + } +} + +// Degenerate inputs must never produce a solution, even once the threshold +// has relaxed to its floor +void test_compass_cal__degenerate_sets_rejected(void) { + static const int16_t center[3] = { -1250, 830, 1980 }; + + // stationary watch: spread is pure sensor noise + ecomp_corr_reset(); + s_rand_state = 0xdeadbeef; + int16_t solution[3]; + for (int n = 0; n < 2000; n++) { + int16_t sample[3] = { + (int16_t)(810 + prv_noise()), + (int16_t)(-455 + prv_noise()), + (int16_t)(620 + prv_noise()), + }; + int rv = ecomp_corr_add_raw_mag_sample(sample, NULL, solution); + cl_assert_equal_i(rv, MagCalStatusNoSolution); + } - + // near-coplanar motion: point-to-plane gate must reject the fourth point + ecomp_corr_reset(); + MotionSim sim = { + .center = center, + .radius = 0, // stay in the ring plane + .waypoints = s_ring_waypoints, + .n_waypoints = sizeof(s_ring_waypoints) / sizeof(s_ring_waypoints[0]), + .steps_per_leg = 12, + }; + for (int n = 0; n < 3000; n++) { + int16_t sample[3]; + prv_next_sample(&sim, sample); + int rv = ecomp_corr_add_raw_mag_sample(sample, NULL, solution); + cl_assert_equal_i(rv, MagCalStatusNoSolution); + } +} From 496bea832292bfcff63842c115e78a590032893e Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 18:12:41 +0200 Subject: [PATCH 34/85] services/alarms: fix user snooze delay on smart alarms User snoozes and the smart alarm's internal sleep poll share the same snooze timer, and its expiry always funneled back into the smart-alarm sleep gate. Snoozing a firing smart alarm therefore turned "Snooze for N minutes" into an open-ended 1-minute sleep-poll loop that only re-fired the alarm once sleep exit was detected or the poll cap was hit. Track whether the pending snooze timer was armed by an explicit user snooze and bypass the sleep gate in that case, so the alarm re-fires after exactly the configured snooze delay. The flag is cleared on every snooze-timer teardown (dismiss, disable, delete, new alarm, clock-change force trigger). Add a regression test: a firing smart alarm that is user-snoozed while the user still looks asleep (RestfulSleep, VMC 0) must put the alarm event when the snooze timer fires instead of re-entering the sleep poll. Fixes FIRM-3127 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/services/alarms/alarm.c | 13 ++++++++++++- tests/fw/test_alarm_smart.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/fw/services/alarms/alarm.c b/src/fw/services/alarms/alarm.c index 154aefdf19..1cd690ac06 100644 --- a/src/fw/services/alarms/alarm.c +++ b/src/fw/services/alarms/alarm.c @@ -125,6 +125,10 @@ static bool s_most_recent_alarm_recorded; static TimerID s_snooze_timer_id = TIMER_INVALID_ID; static uint16_t s_snooze_delay_m = DEFAULT_SNOOZE_DELAY_M; +//! Whether the pending snooze timer was armed by an explicit user snooze rather +//! than the smart alarm's internal sleep poll. +static bool s_user_snoozed; + //! Number of times the most recent alarm was automatically smart snoozed. //! Used to determine an expired smart alarm avoiding issues with midnight rollover and DST. static int s_smart_snooze_counter; @@ -390,6 +394,7 @@ static bool prv_record_alarm_op(AlarmId id, AlarmConfig *config, void *context) // ---------------------------------------------------------------------------------------------- static void prv_clear_snooze_timer(void) { new_timer_stop(s_snooze_timer_id); + s_user_snoozed = false; } // ---------------------------------------------------------------------------------------------- @@ -398,9 +403,13 @@ static void prv_process_most_recent_alarm(void) { // Only processes the most recent alarm since it modifies the alarm config AlarmConfig *config = s_most_recent_alarm_id != ALARM_INVALID_ID ? &s_most_recent_alarm_config : NULL; + const bool user_snoozed = s_user_snoozed; + s_user_snoozed = false; bool trigger = true; const bool is_smart = (config && config->is_smart); - if (is_smart) { + // A user snooze must fire after exactly the configured delay; only the smart + // alarm's internal sleep poll may re-evaluate the sleep state and re-snooze. + if (is_smart && !user_snoozed) { trigger = prv_should_smart_alarm_trigger(config); if (!trigger) { // Not triggering an event, increment to signify elapsed time and snooze @@ -1013,6 +1022,8 @@ static void prv_snooze_alarm(int snooze_delay_s) { // ---------------------------------------------------------------------------------------------- void alarm_set_snooze_alarm(void) { prv_snooze_alarm(s_snooze_delay_m * SECONDS_PER_MINUTE); + // Set after prv_snooze_alarm(): clearing the previous timer resets the flag. + s_user_snoozed = true; } // ---------------------------------------------------------------------------------------------- diff --git a/tests/fw/test_alarm_smart.c b/tests/fw/test_alarm_smart.c index 9fd01d8dfb..416ef85c7d 100644 --- a/tests/fw/test_alarm_smart.c +++ b/tests/fw/test_alarm_smart.c @@ -246,6 +246,37 @@ void test_alarm_smart__trigger_at_timeout(void) { cl_assert_equal_i(s_last_timeline_item_added->header.timestamp, rtc_get_time()); } +void test_alarm_smart__user_snooze_fires_after_delay(void) { + AlarmId id; + id = alarm_create(&(AlarmInfo) { .hour = 10, .minute = 30, .kind = ALARM_KIND_EVERYDAY, .is_smart = true }); + prv_assert_alarm_config(id, 10, 30, false, ALARM_KIND_EVERYDAY, s_every_day_schedule); + + // Awake, so the smart alarm fires immediately at T-30min + s_sleep_state = ActivitySleepStateAwake; + s_sleep_state_seconds = 0; + s_last_vmc = 0; + prv_set_time(s_current_day, 10, 0); + cron_service_wakeup(); + cl_assert_equal_i(s_num_alarms_fired, 1); + cl_assert_equal_i(s_num_alarm_events_put, 1); + + // The user snoozes the firing alarm, then looks asleep again + alarm_set_snooze_alarm(); + s_sleep_state = ActivitySleepStateRestfulSleep; + s_last_vmc = 0; + + // The snooze timer must re-fire the alarm event, not re-enter the sleep poll + prv_set_time(s_current_day, 10, alarm_get_snooze_delay()); + stub_new_timer_invoke(1); + cl_assert_equal_i(s_num_alarm_events_put, 2); + + // Snoozing again keeps working the same way + alarm_set_snooze_alarm(); + prv_set_time(s_current_day, 10, 2 * alarm_get_snooze_delay()); + stub_new_timer_invoke(1); + cl_assert_equal_i(s_num_alarm_events_put, 3); +} + void test_alarm_smart__across_midnight_boundary(void) { prv_set_time(s_sunday, 22, 0); From 700b2b02d6b138a4e0a06a2941d7f777fbfbb963 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 20:36:13 +0200 Subject: [PATCH 35/85] fw/services/activity: fire sleep summary notification once per sleep window The "Good morning" sleep summary re-fired hours after the real morning notification whenever the day's sleep bounds changed. Two paths re-armed it: a pin update for an extended sleep exit cleared the notified flag, and any shift of sleep_enter_utc was treated as a new day and reset the whole pin state. A falsely detected evening sleep session (sedentary awake time misclassified by the algorithm, tracked separately) was enough to trigger either path, buzzing the user with last night's summary in the evening or in the middle of the night. Key the pin state to the sleep-day window (the 9pm local cutoff used by activity_sessions_prv_get_sleep_bounds_utc, now exposed as activity_sessions_prv_get_sleep_window_start_utc) instead of comparing exact enter timestamps. Within one window the notification fires at most once: pin updates no longer clear the notified flag, and only a new window resets the state. Additionally, only notify when the sleep exit lands at a plausible local wake-up time ([4am, 6pm)); skipping outside that window does not consume the once-per-window notification, so a mid-night false exit stays silent and the real morning wake-up still notifies. The timeline pin keeps updating silently in all cases. The persisted SleepPinState grows by a trailing window_utc field. Older persisted blobs fail the settings read cleanly (E_RANGE zeroes the output), and a zero window is re-seeded at init as already-notified so the state layout change cannot re-fire a summary the user already saw; the cost is at most one missed summary right after the update. Fixes FIRM-3101 Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- .../pbl/services/activity/activity_private.h | 4 + src/fw/services/activity/activity_insights.c | 50 +++++- src/fw/services/activity/activity_sessions.c | 17 +- .../activity/test_activity_insights.c | 161 ++++++++++++++++++ 4 files changed, 216 insertions(+), 16 deletions(-) diff --git a/include/pbl/services/activity/activity_private.h b/include/pbl/services/activity/activity_private.h index c8f02e899f..b1b29a905c 100644 --- a/include/pbl/services/activity/activity_private.h +++ b/include/pbl/services/activity/activity_private.h @@ -449,6 +449,10 @@ bool activity_test_reset(bool reset_settings, bool tracking_on, // Load in the stored activities from our settings file void activity_sessions_prv_init(SettingsFile *file, time_t utc_now); +// Get the start of the sleep-day window (the ACTIVITY_LAST_SLEEP_MINUTE_OF_DAY local-time +// cutoff) that now_utc belongs to +time_t activity_sessions_prv_get_sleep_window_start_utc(time_t now_utc); + // Get the UTC time bounds for the current day void activity_sessions_prv_get_sleep_bounds_utc(time_t now_utc, time_t *enter_utc, time_t *exit_utc); diff --git a/src/fw/services/activity/activity_insights.c b/src/fw/services/activity/activity_insights.c index 797fe53abe..d6193b2f95 100644 --- a/src/fw/services/activity/activity_insights.c +++ b/src/fw/services/activity/activity_insights.c @@ -48,6 +48,11 @@ PBL_LOG_MODULE_DECLARE(service_activity, CONFIG_SERVICE_ACTIVITY_LOG_LEVEL); #define NUM_COPY_VARIANTS 5 #define VARIANT_RANDOM (-1) +// The sleep summary notification only fires when the sleep exit lands within this local +// time-of-day window ([min, max)). The timeline pin is updated regardless. +#define SLEEP_SUMMARY_NOTIF_WAKE_MINUTE_MIN (4 * MINUTES_PER_HOUR) +#define SLEEP_SUMMARY_NOTIF_WAKE_MINUTE_MAX (18 * MINUTES_PER_HOUR) + typedef struct NotificationConfig { time_t notif_time; ActivitySession *session; @@ -128,6 +133,10 @@ typedef struct SleepPinState { int active_minutes; bool removed; bool notified; + // Start of the sleep-day window this state belongs to. The summary notification fires at + // most once per window, no matter how often the sleep bounds change within it. + // Note: must stay the last field so older persisted states fail to restore cleanly. + time_t window_utc; } SleepPinState; static SleepPinState s_sleep_pin_state; @@ -1002,6 +1011,16 @@ static void prv_do_sleep_notification(time_t now_utc, time_t sleep_exit_utc, return; } + // Only notify when the sleep exit lands at a plausible local wake-up time. Skipping does + // not consume this window's notification, so a real morning wake-up still notifies. + const int exit_minute_of_day = time_util_get_minute_of_day(sleep_exit_utc); + if (exit_minute_of_day < SLEEP_SUMMARY_NOTIF_WAKE_MINUTE_MIN || + exit_minute_of_day >= SLEEP_SUMMARY_NOTIF_WAKE_MINUTE_MAX) { + INSIGHTS_LOG_DEBUG("Not notifying sleep pin - exit outside wake window (%d)", + exit_minute_of_day); + return; + } + // Notify about the pin after a certain amount of time const time_t since_exited = now_utc - sleep_exit_utc; if (since_exited < s_sleep_summary_settings.summary.sleep.trigger_notif_seconds) { @@ -1056,17 +1075,20 @@ static void prv_do_sleep_summary(time_t now_utc) { return; } - // If we have a new sleep_enter_utc, we must have started a new day so invalidate the - // old sleep pin state - if (sleep_enter_utc != s_sleep_pin_state.first_enter_utc + // The pin state is keyed to the sleep-day window: only a new window invalidates it. + // Bounds changes within one window (merged sessions, evening extensions) update the pin + // below without re-arming the notification. + const time_t window_utc = activity_sessions_prv_get_sleep_window_start_utc(now_utc); + if (window_utc != s_sleep_pin_state.window_utc || now_utc < s_sleep_pin_state.last_triggered_utc) { // Checking "now_utc < s_sleep_pin_state.last_triggered_utc" catches cases where // the activity_test integration test might have created a pin in the future (because it // mucks with the real time clock) - INSIGHTS_LOG_DEBUG("Starting pin for new day"); + INSIGHTS_LOG_DEBUG("Starting pin for new sleep window"); s_sleep_pin_state = (SleepPinState) { .uuid = UUID_INVALID, .first_enter_utc = sleep_enter_utc, + .window_utc = window_utc, }; } @@ -1084,16 +1106,18 @@ static void prv_do_sleep_summary(time_t now_utc) { int32_t sleep_total_seconds = 0; activity_get_metric(ActivityMetricSleepTotalSeconds, 1, &sleep_total_seconds); - // If this is a session we've already created a pin for, send the notification for it now if - // we haven't already. - if (sleep_exit_utc <= s_sleep_pin_state.last_triggered_utc) { + // If the bounds haven't changed since we last pushed the pin, send the notification for it + // now if we haven't already. + if (sleep_exit_utc <= s_sleep_pin_state.last_triggered_utc + && sleep_enter_utc == s_sleep_pin_state.first_enter_utc) { // Notify about the sleep pin prv_do_sleep_notification(now_utc, sleep_exit_utc, sleep_total_seconds); INSIGHTS_LOG_DEBUG("Not adding sleep pin - already checked session %ld", sleep_exit_utc); return; } - // Insert or update the pin + // Insert or update the pin. This intentionally leaves "notified" untouched: within one + // sleep window the notification fires at most once, however often the bounds extend. INSIGHTS_LOG_DEBUG("Adding sleep pin"); prv_push_sleep_summary_pin(now_utc, sleep_exit_utc, sleep_enter_seconds, sleep_exit_seconds, sleep_total_seconds, s_sleep_stats.mean, @@ -1101,8 +1125,8 @@ static void prv_do_sleep_summary(time_t now_utc) { // Update sleep pin state s_sleep_pin_state.last_triggered_utc = sleep_exit_utc; + s_sleep_pin_state.first_enter_utc = sleep_enter_utc; s_sleep_pin_state.active_minutes = 0; - s_sleep_pin_state.notified = false; prv_save_state(ActivitySettingsKeyInsightSleepSummaryState, &s_sleep_pin_state, sizeof(s_sleep_pin_state)); @@ -2016,6 +2040,14 @@ void activity_insights_init(time_t now_utc) { activity_private_settings_close(file); } + // A restored sleep pin state always has a valid window. If it doesn't (fresh boot, factory + // reset or a state layout change), treat the in-progress window as already notified so the + // next bounds recalculation can't re-notify for sleep the user already saw. + if (s_sleep_pin_state.window_utc == 0) { + s_sleep_pin_state.window_utc = activity_sessions_prv_get_sleep_window_start_utc(now_utc); + s_sleep_pin_state.notified = true; + } + INSIGHTS_LOG_DEBUG("Last sleep reward state: %ld", s_sleep_reward_state.common.last_triggered_utc); INSIGHTS_LOG_DEBUG("Last activity reward state: %ld", diff --git a/src/fw/services/activity/activity_sessions.c b/src/fw/services/activity/activity_sessions.c index 4293f52fbc..6266530217 100644 --- a/src/fw/services/activity/activity_sessions.c +++ b/src/fw/services/activity/activity_sessions.c @@ -456,22 +456,25 @@ static void prv_update_sleep_metrics(time_t now_utc, time_t max_end_utc, // -------------------------------------------------------------------------------------------- -void activity_sessions_prv_get_sleep_bounds_utc(time_t now_utc, time_t *enter_utc, - time_t *exit_utc) { - // Get useful UTC times +time_t activity_sessions_prv_get_sleep_window_start_utc(time_t now_utc) { time_t start_of_today_utc = time_util_get_midnight_of(now_utc); int minute_of_day = time_util_get_minute_of_day(now_utc); int last_sleep_second_of_day = ACTIVITY_LAST_SLEEP_MINUTE_OF_DAY * SECONDS_PER_MINUTE; - int first_sleep_utc; if (minute_of_day < ACTIVITY_LAST_SLEEP_MINUTE_OF_DAY) { // It is before the ACTIVITY_LAST_SLEEP_MINUTE_OF_DAY (currently 9pm) cutoff, so use - // the previou day's cutoff - first_sleep_utc = start_of_today_utc - (SECONDS_PER_DAY - last_sleep_second_of_day); + // the previous day's cutoff + return start_of_today_utc - (SECONDS_PER_DAY - last_sleep_second_of_day); } else { // It is after 9pm, so use the 9pm cutoff - first_sleep_utc = start_of_today_utc + last_sleep_second_of_day; + return start_of_today_utc + last_sleep_second_of_day; } +} + +// -------------------------------------------------------------------------------------------- +void activity_sessions_prv_get_sleep_bounds_utc(time_t now_utc, time_t *enter_utc, + time_t *exit_utc) { + time_t first_sleep_utc = activity_sessions_prv_get_sleep_window_start_utc(now_utc); // Compute stats for today ActivitySleepStats stats; diff --git a/tests/fw/services/activity/test_activity_insights.c b/tests/fw/services/activity/test_activity_insights.c index 619c56e867..f7fea38032 100644 --- a/tests/fw/services/activity/test_activity_insights.c +++ b/tests/fw/services/activity/test_activity_insights.c @@ -118,6 +118,18 @@ static void prv_update_sleep_metrics(void) { } +time_t activity_sessions_prv_get_sleep_window_start_utc(time_t now_utc) { + time_t start_of_today_utc = time_util_get_midnight_of(now_utc); + int minute_of_day = time_util_get_minute_of_day(now_utc); + int last_sleep_second_of_day = ACTIVITY_LAST_SLEEP_MINUTE_OF_DAY * SECONDS_PER_MINUTE; + + if (minute_of_day < ACTIVITY_LAST_SLEEP_MINUTE_OF_DAY) { + return start_of_today_utc - (SECONDS_PER_DAY - last_sleep_second_of_day); + } + return start_of_today_utc + last_sleep_second_of_day; +} + + void activity_sessions_prv_get_sleep_bounds_utc(time_t now_utc, time_t *enter_utc, time_t *exit_utc) { ActivitySession activity_sessions[MAX_ACTIVITY_SESSIONS]; uint32_t num_sessions = MAX_ACTIVITY_SESSIONS; @@ -911,3 +923,152 @@ void test_activity_insights__walk_session_power_cycle(void) { activity_insights_process_minute_data(rtc_get_time()); cl_assert_equal_i(s_data.notifs_shown, 2); } + +// --------------------------------------------------------------------------------------- +// Helpers for the sleep summary notification tests +static void prv_use_utc_timezone(void) { + static TimezoneInfo tz = { + .tm_gmtoff = 0, + }; + time_util_update_timezone(&tz); + prv_set_time(&s_init_time_tm); +} + +// --------------------------------------------------------------------------------------- +// Within one sleep window (9pm-to-9pm local) the summary notification fires at most once, +// even when a later (false) sleep session extends the day's sleep bounds. The pin still +// updates silently. +void test_activity_insights__sleep_summary_no_renotify_same_window(void) { + prv_use_utc_timezone(); + prv_set_sleep_history_avg(); + + // Init at Thursday 10:00am, then advance to 11:30pm - past the 9pm cutoff, so Thursday + // night's sleep window has started + activity_insights_init(rtc_get_time()); + rtc_set_time(rtc_get_time() + 13 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE); + + // Sleep 10pm-11pm, awake at 11:30pm: pushes tonight's pin, no notification yet + prv_add_sleep_session(22, 1); + s_data.metric_history[ActivityMetricSleepState][0] = ActivitySleepStateAwake; + s_data.metric_history[ActivityMetricSleepStateSeconds][0] = 30 * SECONDS_PER_MINUTE; + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(s_data.pins_added, 1); + Uuid orig_id = s_last_timeline_id; + cl_assert_equal_i(fake_kernel_services_notifications_ancs_notifications_count(), 0); + + // Advance past midnight, sleep midnight-7am, awake at 7:05am Friday - same sleep window + rtc_set_time(rtc_get_time() + 30 * SECONDS_PER_MINUTE); + activity_insights_recalculate_stats(); + rtc_set_time(rtc_get_time() + 7 * SECONDS_PER_HOUR + 5 * SECONDS_PER_MINUTE); + prv_add_sleep_session(1, 7); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(s_data.pins_added, 2); + cl_assert(uuid_equal(&orig_id, &s_last_timeline_id)); + + // Be active for a couple of minutes, then pass the 30 minute post-wake mark: the summary + // notification fires exactly once + s_data.steps_per_minute = 80; + prv_minute_update(2); + rtc_set_time(rtc_get_time() + 28 * SECONDS_PER_MINUTE); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(fake_kernel_services_notifications_ancs_notifications_count(), 1); + + // Same window, hours later: a false sleep session 4:30pm-5:30pm extends the bounds. The + // pin updates in place but no second notification may fire. + rtc_set_time(rtc_get_time() + 10 * SECONDS_PER_HOUR + 25 * SECONDS_PER_MINUTE); + prv_add_sleep_session(9.5, 1); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(s_data.pins_added, 3); + cl_assert(uuid_equal(&orig_id, &s_last_timeline_id)); + + // Stay active past the 30 minute post-exit mark - still only one notification + prv_minute_update(2); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(fake_kernel_services_notifications_ancs_notifications_count(), 1); +} + +// --------------------------------------------------------------------------------------- +// A new sleep window (past the 9pm cutoff) resets the notification guard: the next night's +// sleep notifies again +void test_activity_insights__sleep_summary_notify_next_window(void) { + prv_use_utc_timezone(); + prv_set_sleep_history_avg(); + + activity_insights_init(rtc_get_time()); + rtc_set_time(rtc_get_time() + 13 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE); + + s_data.metric_history[ActivityMetricSleepState][0] = ActivitySleepStateAwake; + s_data.metric_history[ActivityMetricSleepStateSeconds][0] = 30 * SECONDS_PER_MINUTE; + + // Night 1: sleep 10pm-11pm Thursday and midnight-7am Friday, notification at 7:35am + prv_add_sleep_session(22, 1); + activity_insights_process_sleep_data(rtc_get_time()); + rtc_set_time(rtc_get_time() + 30 * SECONDS_PER_MINUTE); + activity_insights_recalculate_stats(); + rtc_set_time(rtc_get_time() + 7 * SECONDS_PER_HOUR + 5 * SECONDS_PER_MINUTE); + prv_add_sleep_session(1, 7); + activity_insights_process_sleep_data(rtc_get_time()); + s_data.steps_per_minute = 80; + prv_minute_update(2); + rtc_set_time(rtc_get_time() + 28 * SECONDS_PER_MINUTE); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(fake_kernel_services_notifications_ancs_notifications_count(), 1); + Uuid night1_id = s_last_timeline_id; + + // Night 2: 11pm-11:30pm Friday is past the 9pm cutoff, starting a new sleep window with + // a new pin + rtc_set_time(rtc_get_time() + 16 * SECONDS_PER_HOUR + 15 * SECONDS_PER_MINUTE); + prv_add_sleep_session(16, 0.5); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert(!uuid_equal(&night1_id, &s_last_timeline_id)); + + // Sleep midnight-6:30am Saturday; the notification fires again for the new window + rtc_set_time(rtc_get_time() + 6 * SECONDS_PER_HOUR + 45 * SECONDS_PER_MINUTE); + prv_add_sleep_session(0.5, 6.5); + activity_insights_process_sleep_data(rtc_get_time()); + prv_minute_update(2); + rtc_set_time(rtc_get_time() + 28 * SECONDS_PER_MINUTE); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(fake_kernel_services_notifications_ancs_notifications_count(), 2); +} + +// --------------------------------------------------------------------------------------- +// A sleep exit in the middle of the night is not a plausible wake-up, so it must not notify. +// Skipping must not consume the window's notification: the real morning wake-up still does. +void test_activity_insights__sleep_summary_notification_wake_window_gate(void) { + prv_use_utc_timezone(); + prv_set_sleep_history_avg(); + + activity_insights_init(rtc_get_time()); + rtc_set_time(rtc_get_time() + 13 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE); + + s_data.metric_history[ActivityMetricSleepState][0] = ActivitySleepStateAwake; + s_data.metric_history[ActivityMetricSleepStateSeconds][0] = 30 * SECONDS_PER_MINUTE; + + // Sleep 10pm-11pm Thursday, awake at 11:30pm + prv_add_sleep_session(22, 1); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(s_data.pins_added, 1); + + // Sleep midnight-2am, awake at 2:05am with some activity: exit is outside the wake + // window, so no notification + rtc_set_time(rtc_get_time() + 2 * SECONDS_PER_HOUR + 35 * SECONDS_PER_MINUTE); + prv_add_sleep_session(1, 2); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(s_data.pins_added, 2); + s_data.steps_per_minute = 80; + prv_minute_update(2); + rtc_set_time(rtc_get_time() + 28 * SECONDS_PER_MINUTE); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(fake_kernel_services_notifications_ancs_notifications_count(), 0); + + // Back to sleep 3am-7am; the real morning wake-up still notifies + rtc_set_time(rtc_get_time() + 4 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE); + prv_add_sleep_session(1, 4); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(s_data.pins_added, 3); + prv_minute_update(2); + rtc_set_time(rtc_get_time() + 28 * SECONDS_PER_MINUTE); + activity_insights_process_sleep_data(rtc_get_time()); + cl_assert_equal_i(fake_kernel_services_notifications_ancs_notifications_count(), 1); +} From d3d52972cc2e41c186adff59db0489486416c1a4 Mon Sep 17 00:00:00 2001 From: Joshua Jun Date: Tue, 21 Jul 2026 20:36:41 +0200 Subject: [PATCH 36/85] fw/services/activity: use resource-id setter for insight tiny icon AttributeIdIconTiny is a ResourceId-typed attribute, but the insight notification builder added it with attribute_list_add_uint32, producing the "Adding attribute with type uint32 for non-uint32_t attribute" warning in field logs on every insight notification. Co-Authored-By: Claude Fable 5 Signed-off-by: Joshua Jun --- src/fw/services/activity/activity_insights.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fw/services/activity/activity_insights.c b/src/fw/services/activity/activity_insights.c index d6193b2f95..58d6e50522 100644 --- a/src/fw/services/activity/activity_insights.c +++ b/src/fw/services/activity/activity_insights.c @@ -322,7 +322,7 @@ static bool prv_save_state(ActivitySettingsKey key, void *val, size_t val_len) { static void prv_build_notification_attr_list(AttributeList *attr_list, const char *body, uint32_t icon, ActivityInsightType insight_type, ActivitySessionType activity_type) { - attribute_list_add_uint32(attr_list, AttributeIdIconTiny, icon); + attribute_list_add_resource_id(attr_list, AttributeIdIconTiny, icon); attribute_list_add_cstring(attr_list, AttributeIdBody, body); attribute_list_add_uint8(attr_list, AttributeIdBgColor, GColorOrangeARGB8); attribute_list_add_uint8(attr_list, AttributeIdHealthInsightType, insight_type); From 8dd50aaa9240413355330b0e7906d2824472421e Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Tue, 21 Jul 2026 22:00:14 +0200 Subject: [PATCH 37/85] fw/drivers/imu/lsm6dso: read FIFO status registers as one burst The INT1 service path read FIFO_STATUS2 first and FIFO_STATUS1 only afterwards, in a separate I2C transaction. Field captures show passes where WTM_IA reads as set while DIFF reads back 0 and the INT1 pad is already low, i.e. the split read catches the FIFO status mid-update and the pass is discarded as a no-action ghost. Read FIFO_STATUS1/2 as a single two-byte burst (as the drain path already does) so the WTM/OVR flags and the DIFF count come from one snapshot. Co-authored-by: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- src/fw/drivers/imu/lsm6dso/lsm6dso.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/fw/drivers/imu/lsm6dso/lsm6dso.c b/src/fw/drivers/imu/lsm6dso/lsm6dso.c index f50b8457a4..02a1050c09 100644 --- a/src/fw/drivers/imu/lsm6dso/lsm6dso.c +++ b/src/fw/drivers/imu/lsm6dso/lsm6dso.c @@ -360,7 +360,7 @@ static void prv_lsm6dso_recover(void); //! fifo_progress is set when FIFO data was consumed (samples or overrun). static bool prv_lsm6dso_service_int1(bool *fifo_progress) { bool ret; - uint8_t fifo_status2 = 0U; + uint8_t fifo_status[2] = {0U, 0U}; uint8_t all_int_src = 0U; bool action_taken = false; bool fifo_overrun = false; @@ -373,23 +373,19 @@ static bool prv_lsm6dso_service_int1(bool *fifo_progress) { // on these reads, so deferring it avoids stretching the gap between the FIFO // read and the ALL_INT_SRC read if this task gets preempted mid-handler. if (LSM6DSO->state->num_samples > 0U) { - ret = prv_lsm6dso_read(LSM6DSO_FIFO_STATUS2, &fifo_status2, 1); + // WTM/OVR flags and DIFF must come from one burst read: a split read can + // catch the FIFO counter mid-update and see WTM_IA set with DIFF reading 0 + ret = prv_lsm6dso_read(LSM6DSO_FIFO_STATUS1, fifo_status, 2); if (!ret) { - PBL_LOG_ERR("Could not read FIFO_STATUS2 register"); + PBL_LOG_ERR("Could not read FIFO_STATUS registers"); return false; } - if ((fifo_status2 & LSM6DSO_FIFO_STATUS2_FIFO_OVR_IA) != 0U) { + if ((fifo_status[1] & LSM6DSO_FIFO_STATUS2_FIFO_OVR_IA) != 0U) { fifo_overrun = true; - } else if ((fifo_status2 & LSM6DSO_FIFO_STATUS2_FIFO_WTM_IA) != 0U) { - uint8_t status1; - - if (!prv_lsm6dso_read(LSM6DSO_FIFO_STATUS1, &status1, 1)) { - PBL_LOG_ERR("Could not read FIFO_STATUS1 register"); - return false; - } - - samples = (((uint16_t)(fifo_status2 & LSM6DSO_FIFO_STATUS2_DIFF_HI_MASK)) << 8U) | status1; + } else if ((fifo_status[1] & LSM6DSO_FIFO_STATUS2_FIFO_WTM_IA) != 0U) { + samples = (((uint16_t)(fifo_status[1] & LSM6DSO_FIFO_STATUS2_DIFF_HI_MASK)) << 8U) | + fifo_status[0]; if (samples > LSM6DSO_FIFO_SIZE) { samples = LSM6DSO_FIFO_SIZE; } @@ -444,7 +440,7 @@ static bool prv_lsm6dso_service_int1(bool *fifo_progress) { // Registers not read this pass (gated on num_samples/shake state) log as 0 PBL_LOG_WRN("INT1 triggered but no action taken (FIFO_STATUS2 0x%02" PRIx8 " ALL_INT_SRC 0x%02" PRIx8 " num_samples %" PRIu16 " shake_en %d)", - fifo_status2, all_int_src, LSM6DSO->state->num_samples, + fifo_status[1], all_int_src, LSM6DSO->state->num_samples, LSM6DSO->state->shake_detection_enabled); } From 23e9a9d86896c05fd05dff814dff77e03f66563a Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Tue, 21 Jul 2026 22:00:37 +0200 Subject: [PATCH 38/85] fw/drivers/imu/lsm6dso: tag no-action INT1 diagnostic with pass context Field captures of the no-action warning cannot distinguish an ISR-queued edge from a requeued follow-up or the pre-recovery retry, nor how stale the FIFO stream was when the ghost pass ran. A recent capture showed ~1 Hz ghosts correlated with vibe motor activity (wake-up pulses from vibration), where this context would have confirmed the path directly. Track whether the work handler invocation came from a requeue and log the pass kind (0 initial, 1 requeue, 2 retry) plus milliseconds since the last FIFO read in the no-action diagnostic. Co-authored-by: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- src/fw/drivers/imu/lsm6dso/lsm6dso.c | 29 +++++++++++++++++++++++----- src/fw/drivers/imu/lsm6dso/lsm6dso.h | 1 + 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/fw/drivers/imu/lsm6dso/lsm6dso.c b/src/fw/drivers/imu/lsm6dso/lsm6dso.c index 02a1050c09..2e04707c5f 100644 --- a/src/fw/drivers/imu/lsm6dso/lsm6dso.c +++ b/src/fw/drivers/imu/lsm6dso/lsm6dso.c @@ -355,10 +355,18 @@ static void prv_lsm6dso_drain_fifo(void) { } static void prv_lsm6dso_recover(void); +static uint32_t prv_ms_since_last_fifo_read(void); + +//! INT1 servicing pass kind, logged by the no-action diagnostic +typedef enum { + Lsm6dsoInt1PassInitial = 0, + Lsm6dsoInt1PassRequeue = 1, + Lsm6dsoInt1PassRetry = 2, +} Lsm6dsoInt1Pass; //! Single INT1 servicing pass; returns true if any INT source was handled. //! fifo_progress is set when FIFO data was consumed (samples or overrun). -static bool prv_lsm6dso_service_int1(bool *fifo_progress) { +static bool prv_lsm6dso_service_int1(Lsm6dsoInt1Pass pass, bool *fifo_progress) { bool ret; uint8_t fifo_status[2] = {0U, 0U}; uint8_t all_int_src = 0U; @@ -439,9 +447,11 @@ static bool prv_lsm6dso_service_int1(bool *fifo_progress) { if (!action_taken) { // Registers not read this pass (gated on num_samples/shake state) log as 0 PBL_LOG_WRN("INT1 triggered but no action taken (FIFO_STATUS2 0x%02" PRIx8 - " ALL_INT_SRC 0x%02" PRIx8 " num_samples %" PRIu16 " shake_en %d)", + " ALL_INT_SRC 0x%02" PRIx8 " num_samples %" PRIu16 " shake_en %d pass %u" + " last_read %" PRIu32 "ms ago)", fifo_status[1], all_int_src, LSM6DSO->state->num_samples, - LSM6DSO->state->shake_detection_enabled); + LSM6DSO->state->shake_detection_enabled, (unsigned int)pass, + prv_ms_since_last_fifo_read()); } return action_taken; @@ -449,7 +459,14 @@ static bool prv_lsm6dso_service_int1(bool *fifo_progress) { static void prv_lsm6dso_int1_work_handler(void) { bool fifo_progress = false; - bool action_taken = prv_lsm6dso_service_int1(&fifo_progress); + // Best-effort pass tagging: an ISR enqueue racing a pending requeue gets + // labeled as a requeue; diagnostic only + Lsm6dsoInt1Pass pass = + LSM6DSO->state->int1_requeued ? Lsm6dsoInt1PassRequeue : Lsm6dsoInt1PassInitial; + bool action_taken; + + LSM6DSO->state->int1_requeued = false; + action_taken = prv_lsm6dso_service_int1(pass, &fifo_progress); // Sources asserting while the pad is high produce no new edge: requeue on // FIFO progress, recover when nothing was serviced (stuck pad). A pad held @@ -459,6 +476,7 @@ static void prv_lsm6dso_int1_work_handler(void) { } if (fifo_progress) { + LSM6DSO->state->int1_requeued = true; accel_offload_work(prv_lsm6dso_int1_work_handler); return; } @@ -472,8 +490,9 @@ static void prv_lsm6dso_int1_work_handler(void) { // Retry the servicing pass once (a latched wake-up or a fresh FIFO // threshold is visible on re-read) and only recover if the pad is still // high with nothing serviced. - action_taken = prv_lsm6dso_service_int1(&fifo_progress); + action_taken = prv_lsm6dso_service_int1(Lsm6dsoInt1PassRetry, &fifo_progress); if (fifo_progress) { + LSM6DSO->state->int1_requeued = true; accel_offload_work(prv_lsm6dso_int1_work_handler); } else if (!action_taken && gpio_input_read(&LSM6DSO->int1_in)) { prv_lsm6dso_recover(); diff --git a/src/fw/drivers/imu/lsm6dso/lsm6dso.h b/src/fw/drivers/imu/lsm6dso/lsm6dso.h index 2d99ba2c6a..99ae20010a 100644 --- a/src/fw/drivers/imu/lsm6dso/lsm6dso.h +++ b/src/fw/drivers/imu/lsm6dso/lsm6dso.h @@ -34,6 +34,7 @@ typedef struct LSM6DSOState { uint8_t wk_ths_curr; bool recovery_pending; bool wu_active; + bool int1_requeued; } LSM6DSOState; typedef struct LSM6DSOConfig { From 1fbdfe5c9fab0f284c3712ea5c98caee5f660a18 Mon Sep 17 00:00:00 2001 From: Vlad Zaytsev Date: Tue, 21 Jul 2026 20:13:33 +0300 Subject: [PATCH 39/85] resources: fix '#' floating above the baseline in GOTHIC_36 The U+0023 glyph header in GOTHIC_36.pbf carries top_offset_px = 6, leaving its bottom edge 14px above the baseline, while every other size in the family raises '#' by only 2..6px: GOTHIC_14 h 6 top 5 bottom 11 (+3 above baseline) GOTHIC_18 h 8 top 7 bottom 15 (+3) GOTHIC_24 h 9 top 10 bottom 19 (+5) GOTHIC_28 h12 top 10 bottom 22 (+6) GOTHIC_36 h16 top 6 bottom 22 (+14) <- broken GOTHIC_36_BOLD h16 top 14 bottom 30 (+6) The defect is visible at the largest notification text size on boards whose display maps it to GOTHIC_36: '#' hangs well above the line the surrounding text sits on. It came in with the original font asset import; no generated source for the legacy Gothic bitmap fonts exists in tree, so patch the metric in place. Set top_offset_px to 14, matching GOTHIC_36_BOLD's '#', which has the identical glyph height. Exactly one byte changes (offset 3637, 0x06 -> 0x0e); the bitmap data, all other glyphs, and the offset tables are untouched. The glyph data is not shared with any other codepoint. Verified by re-parsing the font: '#' now sits at bottom 30 (+6 above the baseline), in line with the rest of the family. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Vlad Zaytsev --- resources/normal/base/pbf/GOTHIC_36.pbf | Bin 19715 -> 19715 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/normal/base/pbf/GOTHIC_36.pbf b/resources/normal/base/pbf/GOTHIC_36.pbf index 36d232db4313addeccf69ca9ed3565c4cfe79922..bf051a223cbd25c9c0a8ec262242d24c5a4b5106 100644 GIT binary patch delta 16 XcmZpk#n?QHaf2xzBj08-zO!}!FCPU# delta 16 XcmZpk#n?QHaf2xzBim*(zO!}!F7E|7 From b01ec56e438cc2ba000ceabdc0514562a9d94fbf Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Tue, 14 Jul 2026 16:43:37 +0200 Subject: [PATCH 40/85] third_party/mbedtls: add Mbed TLS 3.6.7 Upstream NimBLE has replaced tinycrypt with Mbed TLS for the host security manager crypto, so provide Mbed TLS as a third-party library. The configuration is minimal: only the primitives used by the NimBLE host are enabled (AES-128 ECB/CMAC for SM and the GATT database hash, and P-256 ECDH for LE Secure Connections pairing), with allocations routed to the kernel heap and size-oriented ECP tuning. The library is only built for configurations using the NimBLE stack. Co-Authored-By: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- .gitmodules | 3 ++ .../mbedtls/include/pebble_mbedtls_config.h | 38 +++++++++++++++++++ third_party/mbedtls/mbedtls | 1 + third_party/mbedtls/wscript_build | 20 ++++++++++ third_party/wscript_build | 1 + 5 files changed, 63 insertions(+) create mode 100644 third_party/mbedtls/include/pebble_mbedtls_config.h create mode 160000 third_party/mbedtls/mbedtls create mode 100644 third_party/mbedtls/wscript_build diff --git a/.gitmodules b/.gitmodules index 7028fb4970..2c073a86fc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,3 +40,6 @@ [submodule "third_party/picolibc"] path = third_party/picolibc url = https://github.com/picolibc/picolibc.git +[submodule "third_party/mbedtls/mbedtls"] + path = third_party/mbedtls/mbedtls + url = https://github.com/Mbed-TLS/mbedtls.git diff --git a/third_party/mbedtls/include/pebble_mbedtls_config.h b/third_party/mbedtls/include/pebble_mbedtls_config.h new file mode 100644 index 0000000000..6c3ffbe308 --- /dev/null +++ b/third_party/mbedtls/include/pebble_mbedtls_config.h @@ -0,0 +1,38 @@ +/* + * SPDX-FileCopyrightText: 2026 Core Devices LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +/* Minimal Mbed TLS configuration for PebbleOS. Only the primitives required + * by the NimBLE host (SM pairing and GATT database hash) are enabled: + * AES-128 (ECB/CMAC) and P-256 ECDH. + */ + +#include + +/* Allocate from the kernel heap. */ +void *kernel_calloc(size_t count, size_t size); +void kernel_free(void *ptr); + +#define MBEDTLS_PLATFORM_C +#define MBEDTLS_PLATFORM_MEMORY +#define MBEDTLS_PLATFORM_CALLOC_MACRO kernel_calloc +#define MBEDTLS_PLATFORM_FREE_MACRO kernel_free + +#define MBEDTLS_AES_C +#define MBEDTLS_AES_ROM_TABLES +#define MBEDTLS_CIPHER_C +#define MBEDTLS_CMAC_C + +#define MBEDTLS_BIGNUM_C +#define MBEDTLS_ECP_C +#define MBEDTLS_ECP_DP_SECP256R1_ENABLED +#define MBEDTLS_ECDH_C + +/* Favor small flash/RAM footprint over ECC speed. */ +#define MBEDTLS_ECP_WINDOW_SIZE 2 +#define MBEDTLS_ECP_FIXED_POINT_OPTIM 0 + +#define MBEDTLS_NO_PLATFORM_ENTROPY diff --git a/third_party/mbedtls/mbedtls b/third_party/mbedtls/mbedtls new file mode 160000 index 0000000000..068ff080b3 --- /dev/null +++ b/third_party/mbedtls/mbedtls @@ -0,0 +1 @@ +Subproject commit 068ff080b369adfac81509f9b57b2afabaf82dc5 diff --git a/third_party/mbedtls/wscript_build b/third_party/mbedtls/wscript_build new file mode 100644 index 0000000000..00efd804d0 --- /dev/null +++ b/third_party/mbedtls/wscript_build @@ -0,0 +1,20 @@ +mbedtls_includes = [ + 'mbedtls/include', + 'include', +] + +mbedtls_env = bld.env.derive() + +mbedtls_env.append_value('CFLAGS', [ + '-Wno-unused-but-set-variable', +]) + +bld.objects( + source=bld.path.ant_glob('mbedtls/library/*.c'), + target='mbedtls', + includes=mbedtls_includes + ['mbedtls/library'], + export_includes=mbedtls_includes, + defines=['MBEDTLS_CONFIG_FILE="pebble_mbedtls_config.h"'], + export_defines=['MBEDTLS_CONFIG_FILE="pebble_mbedtls_config.h"'], + env=mbedtls_env, +) diff --git a/third_party/wscript_build b/third_party/wscript_build index 19febdea41..8c035ccf31 100644 --- a/third_party/wscript_build +++ b/third_party/wscript_build @@ -15,6 +15,7 @@ if bld.env.CONFIG_HAL_SIFLI: bld.recurse('hal_sifli') if bld.env.CONFIG_BT_FW_NIMBLE: + bld.recurse('mbedtls') bld.recurse('nimble') bld.recurse('memfault') From c81fe53dc86dd3526da021a3eac4af51163bb77e Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Tue, 14 Jul 2026 17:24:11 +0200 Subject: [PATCH 41/85] third_party/nimble: update NimBLE to 1.10.0 Update the mynewt-nimble submodule to 1.10.0 release. All but one of the pebbleos branch patches have been merged upstream in the meantime; the only dropped one is the host-based RPA resolver, which is disabled in every PebbleOS target. Upstream has replaced tinycrypt with Mbed TLS for the host security manager crypto, so switch the build to the new third-party Mbed TLS library. Regenerate the syscfg headers for both targets with newt, following third_party/nimble/syscfg/README.md. Co-Authored-By: Claude Fable 5 Signed-off-by: Gerard Marull-Paretas --- third_party/nimble/mynewt-nimble | 2 +- .../nimble/port/include/nrf52/syscfg/syscfg.h | 144 +------- .../port/include/sf32lb52/syscfg/syscfg.h | 308 ++++++++++++++++-- third_party/nimble/wscript_build | 3 +- 4 files changed, 295 insertions(+), 162 deletions(-) diff --git a/third_party/nimble/mynewt-nimble b/third_party/nimble/mynewt-nimble index 2ea18b9af3..70b66aa18c 160000 --- a/third_party/nimble/mynewt-nimble +++ b/third_party/nimble/mynewt-nimble @@ -1 +1 @@ -Subproject commit 2ea18b9af381cb6741620fb710395b5d506d323d +Subproject commit 70b66aa18c2333fcb29a7baa0668d5dc8834b5a7 diff --git a/third_party/nimble/port/include/nrf52/syscfg/syscfg.h b/third_party/nimble/port/include/nrf52/syscfg/syscfg.h index ff035489d3..10351f6fe3 100644 --- a/third_party/nimble/port/include/nrf52/syscfg/syscfg.h +++ b/third_party/nimble/port/include/nrf52/syscfg/syscfg.h @@ -1,5 +1,5 @@ /** - * This file was generated by Apache newt version: 1.14.0-dev + * This file was generated by Apache newt version: 1.15.0 */ #ifndef H_MYNEWT_SYSCFG_ @@ -18,7 +18,7 @@ /*** Repository @apache-mynewt-core info */ #ifndef MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_CORE -#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_CORE "71b9c035d88e88cea2fd0db5dcdd7bdaf6973934" +#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_CORE "70e9ad0667a67d7bdfb25e61c3da41e38168a223" #endif #ifndef MYNEWT_VAL_REPO_VERSION_APACHE_MYNEWT_CORE @@ -27,7 +27,7 @@ /*** Repository @apache-mynewt-nimble info */ #ifndef MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_NIMBLE -#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_NIMBLE "93d716b43e2df6e4f18cf39d887395d0ba7fc23e" +#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_NIMBLE "a7a156f28954819e158b62dd613008f22f9cf73b" #endif #ifndef MYNEWT_VAL_REPO_VERSION_APACHE_MYNEWT_NIMBLE @@ -36,16 +36,16 @@ /*** Repository @mcuboot info */ #ifndef MYNEWT_VAL_REPO_HASH_MCUBOOT -#define MYNEWT_VAL_REPO_HASH_MCUBOOT "9c99326b9756dbcc35b524636d99ed5f3e6cb29b" +#define MYNEWT_VAL_REPO_HASH_MCUBOOT "6d3b3d2c38ab20c242e5b9abb04d050086383eb2" #endif #ifndef MYNEWT_VAL_REPO_VERSION_MCUBOOT -#define MYNEWT_VAL_REPO_VERSION_MCUBOOT "2.1.0" +#define MYNEWT_VAL_REPO_VERSION_MCUBOOT "2.4.0" #endif /*** Repository @syscfg info */ #ifndef MYNEWT_VAL_REPO_HASH_SYSCFG -#define MYNEWT_VAL_REPO_HASH_SYSCFG "3bdec47963cc638a2a9296673b24588381ecf196-dirty" +#define MYNEWT_VAL_REPO_HASH_SYSCFG "e383a491b7c5897735a9e09ffd4ff68f3bf0ab40-dirty" #endif #ifndef MYNEWT_VAL_REPO_VERSION_SYSCFG @@ -157,8 +157,9 @@ #define MYNEWT_VAL_MBEDTLS_CIPHER_MODE_XTS (0) #endif +/* Overridden by @apache-mynewt-nimble/nimble/host (defined by @apache-mynewt-core/crypto/mbedtls) */ #ifndef MYNEWT_VAL_MBEDTLS_CMAC_C -#define MYNEWT_VAL_MBEDTLS_CMAC_C (0) +#define MYNEWT_VAL_MBEDTLS_CMAC_C (1) #endif #ifndef MYNEWT_VAL_MBEDTLS_CTR_DRBG_C @@ -345,19 +346,6 @@ #define MYNEWT_VAL_MBEDTLS_TIMING_C (0) #endif -/*** @apache-mynewt-core/crypto/tinycrypt */ -#ifndef MYNEWT_VAL_TINYCRYPT_SYSINIT_STAGE -#define MYNEWT_VAL_TINYCRYPT_SYSINIT_STAGE (200) -#endif - -#ifndef MYNEWT_VAL_TINYCRYPT_UECC_RNG_TRNG_DEV_NAME -#define MYNEWT_VAL_TINYCRYPT_UECC_RNG_TRNG_DEV_NAME "trng" -#endif - -#ifndef MYNEWT_VAL_TINYCRYPT_UECC_RNG_USE_TRNG -#define MYNEWT_VAL_TINYCRYPT_UECC_RNG_USE_TRNG (0) -#endif - /*** @apache-mynewt-core/hw/bsp/nordic_pca10056 */ #ifndef MYNEWT_VAL_BSP_NRF52840 #define MYNEWT_VAL_BSP_NRF52840 (1) @@ -1349,15 +1337,10 @@ #define MYNEWT_VAL_BLE_CONTROLLER (1) #endif -#ifndef MYNEWT_VAL_BLE_DEVICE -#define MYNEWT_VAL_BLE_DEVICE (1) -#endif - #ifndef MYNEWT_VAL_BLE_FEM_ANTENNA #define MYNEWT_VAL_BLE_FEM_ANTENNA (0) #endif -/* Value copied from BLE_LL_LNA */ #ifndef MYNEWT_VAL_BLE_FEM_LNA #define MYNEWT_VAL_BLE_FEM_LNA (0) #endif @@ -1370,17 +1353,14 @@ #define MYNEWT_VAL_BLE_FEM_LNA_GAIN_TUNABLE (0) #endif -/* Value copied from BLE_LL_LNA_GPIO */ #ifndef MYNEWT_VAL_BLE_FEM_LNA_GPIO #define MYNEWT_VAL_BLE_FEM_LNA_GPIO (-1) #endif -/* Value copied from BLE_LL_LNA_TURN_ON_US */ #ifndef MYNEWT_VAL_BLE_FEM_LNA_TURN_ON_US #define MYNEWT_VAL_BLE_FEM_LNA_TURN_ON_US (1) #endif -/* Value copied from BLE_LL_PA */ #ifndef MYNEWT_VAL_BLE_FEM_PA #define MYNEWT_VAL_BLE_FEM_PA (0) #endif @@ -1393,12 +1373,10 @@ #define MYNEWT_VAL_BLE_FEM_PA_GAIN_TUNABLE (0) #endif -/* Value copied from BLE_LL_PA_GPIO */ #ifndef MYNEWT_VAL_BLE_FEM_PA_GPIO #define MYNEWT_VAL_BLE_FEM_PA_GPIO (-1) #endif -/* Value copied from BLE_LL_PA_TURN_ON_US */ #ifndef MYNEWT_VAL_BLE_FEM_PA_TURN_ON_US #define MYNEWT_VAL_BLE_FEM_PA_TURN_ON_US (1) #endif @@ -1407,10 +1385,6 @@ #define MYNEWT_VAL_BLE_HW_WHITELIST_ENABLE (1) #endif -#ifndef MYNEWT_VAL_BLE_LL_ADD_STRICT_SCHED_PERIODS -#define MYNEWT_VAL_BLE_LL_ADD_STRICT_SCHED_PERIODS (0) -#endif - #ifndef MYNEWT_VAL_BLE_LL_ADV_CODING_SELECTION #define MYNEWT_VAL_BLE_LL_ADV_CODING_SELECTION (0) #endif @@ -1449,6 +1423,7 @@ #define MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_PING (MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_ENCRYPTION) #endif +/* Value copied from BLE_CONN_SUBRATING */ #ifndef MYNEWT_VAL_BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE #define MYNEWT_VAL_BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE (0) #endif @@ -1494,10 +1469,6 @@ #define MYNEWT_VAL_BLE_LL_CFG_FEAT_PERIPH_INIT_FEAT_XCHG (MYNEWT_VAL_BLE_LL_ROLE_CENTRAL || MYNEWT_VAL_BLE_LL_ROLE_PERIPHERAL) #endif -#ifndef MYNEWT_VAL_BLE_LL_CFG_FEAT_SLAVE_INIT_FEAT_XCHG -#define MYNEWT_VAL_BLE_LL_CFG_FEAT_SLAVE_INIT_FEAT_XCHG (0) -#endif - /* Value copied from BLE_CHANNEL_SOUNDING */ #ifndef MYNEWT_VAL_BLE_LL_CHANNEL_SOUNDING #define MYNEWT_VAL_BLE_LL_CHANNEL_SOUNDING (0) @@ -1571,11 +1542,6 @@ #define MYNEWT_VAL_BLE_LL_DEBUG_GPIO_SCHED_RUN (-1) #endif -#ifndef MYNEWT_VAL_BLE_LL_DIRECT_TEST_MODE -#define MYNEWT_VAL_BLE_LL_DIRECT_TEST_MODE (0) -#endif - -/* Value copied from BLE_LL_DIRECT_TEST_MODE */ #ifndef MYNEWT_VAL_BLE_LL_DTM #define MYNEWT_VAL_BLE_LL_DTM (0) #endif @@ -1592,10 +1558,6 @@ #define MYNEWT_VAL_BLE_LL_EXT_ADV_ADVA_IN_AUX (1) #endif -#ifndef MYNEWT_VAL_BLE_LL_EXT_ADV_AUX_PTR_CNT -#define MYNEWT_VAL_BLE_LL_EXT_ADV_AUX_PTR_CNT (0) -#endif - #ifndef MYNEWT_VAL_BLE_LL_HBD_FAKE_DUAL_MODE #define MYNEWT_VAL_BLE_LL_HBD_FAKE_DUAL_MODE (0) #endif @@ -1613,7 +1575,6 @@ #define MYNEWT_VAL_BLE_LL_HCI_VS_CONN_STRICT_SCHED (0) #endif -/* Value copied from BLE_LL_VND_EVENT_ON_ASSERT */ #ifndef MYNEWT_VAL_BLE_LL_HCI_VS_EVENT_ON_ASSERT #define MYNEWT_VAL_BLE_LL_HCI_VS_EVENT_ON_ASSERT (0) #endif @@ -1647,35 +1608,14 @@ #define MYNEWT_VAL_BLE_LL_ISO_HCI_FEEDBACK_INTERVAL_MS (0) #endif -#ifndef MYNEWT_VAL_BLE_LL_LNA -#define MYNEWT_VAL_BLE_LL_LNA (0) -#endif - -#ifndef MYNEWT_VAL_BLE_LL_LNA_GPIO -#define MYNEWT_VAL_BLE_LL_LNA_GPIO (-1) -#endif - -#ifndef MYNEWT_VAL_BLE_LL_LNA_TURN_ON_US -#define MYNEWT_VAL_BLE_LL_LNA_TURN_ON_US (1) -#endif - -/* Value copied from BLE_LL_MFRG_ID */ #ifndef MYNEWT_VAL_BLE_LL_MANUFACTURER_ID #define MYNEWT_VAL_BLE_LL_MANUFACTURER_ID (0x0B65) #endif -#ifndef MYNEWT_VAL_BLE_LL_MASTER_SCA -#define MYNEWT_VAL_BLE_LL_MASTER_SCA (4) -#endif - #ifndef MYNEWT_VAL_BLE_LL_MAX_PKT_SIZE #define MYNEWT_VAL_BLE_LL_MAX_PKT_SIZE (251) #endif -#ifndef MYNEWT_VAL_BLE_LL_MFRG_ID -#define MYNEWT_VAL_BLE_LL_MFRG_ID (0x0B65) -#endif - #ifndef MYNEWT_VAL_BLE_LL_NUM_COMP_PKT_ITVL_MS #define MYNEWT_VAL_BLE_LL_NUM_COMP_PKT_ITVL_MS (2000) #endif @@ -1688,22 +1628,6 @@ #define MYNEWT_VAL_BLE_LL_NUM_SCAN_RSP_ADVS (8) #endif -#ifndef MYNEWT_VAL_BLE_LL_OUR_SCA -#define MYNEWT_VAL_BLE_LL_OUR_SCA (60) -#endif - -#ifndef MYNEWT_VAL_BLE_LL_PA -#define MYNEWT_VAL_BLE_LL_PA (0) -#endif - -#ifndef MYNEWT_VAL_BLE_LL_PA_GPIO -#define MYNEWT_VAL_BLE_LL_PA_GPIO (-1) -#endif - -#ifndef MYNEWT_VAL_BLE_LL_PA_TURN_ON_US -#define MYNEWT_VAL_BLE_LL_PA_TURN_ON_US (1) -#endif - /* Value copied from BLE_PERIODIC_ADV_SYNC_BIGINFO_REPORTS */ #ifndef MYNEWT_VAL_BLE_LL_PERIODIC_ADV_SYNC_BIGINFO_REPORTS #define MYNEWT_VAL_BLE_LL_PERIODIC_ADV_SYNC_BIGINFO_REPORTS (0) @@ -1750,7 +1674,6 @@ #define MYNEWT_VAL_BLE_LL_ROLE_PERIPHERAL (1) #endif -/* Value copied from BLE_LL_OUR_SCA */ #ifndef MYNEWT_VAL_BLE_LL_SCA #define MYNEWT_VAL_BLE_LL_SCA (60) #endif @@ -1760,7 +1683,6 @@ #define MYNEWT_VAL_BLE_LL_SCAN_ACTIVE_SCAN_NRPA (1) #endif -/* Value copied from BLE_LL_EXT_ADV_AUX_PTR_CNT */ #ifndef MYNEWT_VAL_BLE_LL_SCAN_AUX_SEGMENT_CNT #define MYNEWT_VAL_BLE_LL_SCAN_AUX_SEGMENT_CNT (0) #endif @@ -1785,10 +1707,6 @@ #define MYNEWT_VAL_BLE_LL_STACK_SIZE (120) #endif -#ifndef MYNEWT_VAL_BLE_LL_STRICT_CONN_SCHEDULING -#define MYNEWT_VAL_BLE_LL_STRICT_CONN_SCHEDULING (0) -#endif - /* Value copied from BLE_LL_MAX_PKT_SIZE */ #ifndef MYNEWT_VAL_BLE_LL_SUPP_MAX_RX_BYTES #define MYNEWT_VAL_BLE_LL_SUPP_MAX_RX_BYTES (251) @@ -1815,34 +1733,10 @@ #define MYNEWT_VAL_BLE_LL_TX_PWR_MAX_DBM (20) #endif -#ifndef MYNEWT_VAL_BLE_LL_USECS_PER_PERIOD -#define MYNEWT_VAL_BLE_LL_USECS_PER_PERIOD (0) -#endif - -#ifndef MYNEWT_VAL_BLE_LL_VND_EVENT_ON_ASSERT -#define MYNEWT_VAL_BLE_LL_VND_EVENT_ON_ASSERT (0) -#endif - #ifndef MYNEWT_VAL_BLE_LL_WHITELIST_SIZE #define MYNEWT_VAL_BLE_LL_WHITELIST_SIZE (8) #endif -#ifndef MYNEWT_VAL_BLE_LP_CLOCK -#define MYNEWT_VAL_BLE_LP_CLOCK (1) -#endif - -#ifndef MYNEWT_VAL_BLE_NUM_COMP_PKT_RATE -#define MYNEWT_VAL_BLE_NUM_COMP_PKT_RATE ((2 * OS_TICKS_PER_SEC)) -#endif - -#ifndef MYNEWT_VAL_BLE_PUBLIC_DEV_ADDR -#define MYNEWT_VAL_BLE_PUBLIC_DEV_ADDR ((uint8_t[6]){0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) -#endif - -#ifndef MYNEWT_VAL_BLE_XTAL_SETTLE_TIME -#define MYNEWT_VAL_BLE_XTAL_SETTLE_TIME (0) -#endif - /*** @apache-mynewt-nimble/nimble/drivers/nrf5x */ #ifndef MYNEWT_VAL_BLE_PHY_DBG_TIME_ADDRESS_END_PIN #define MYNEWT_VAL_BLE_PHY_DBG_TIME_ADDRESS_END_PIN (-1) @@ -2001,6 +1895,7 @@ #define MYNEWT_VAL_BLE_GATT_INDICATE (1) #endif +/* Overridden by app (defined by @apache-mynewt-nimble/nimble/host) */ #ifndef MYNEWT_VAL_BLE_GATT_MAX_PROCS #define MYNEWT_VAL_BLE_GATT_MAX_PROCS (8) #endif @@ -2069,10 +1964,6 @@ #define MYNEWT_VAL_BLE_HOST (1) #endif -#ifndef MYNEWT_VAL_BLE_HOST_RPA_RESOLVER -#define MYNEWT_VAL_BLE_HOST_RPA_RESOLVER (0) -#endif - /* Overridden by app (defined by @apache-mynewt-nimble/nimble/host) */ #ifndef MYNEWT_VAL_BLE_HS_AUTO_START #define MYNEWT_VAL_BLE_HS_AUTO_START (0) @@ -2391,20 +2282,6 @@ #endif /*** @apache-mynewt-nimble/nimble/transport */ -#undef MYNEWT_VAL_BLE_ACL_BUF_COUNT - -#undef MYNEWT_VAL_BLE_ACL_BUF_SIZE - -#undef MYNEWT_VAL_BLE_HCI_BRIDGE - -#undef MYNEWT_VAL_BLE_HCI_EVT_BUF_SIZE - -#undef MYNEWT_VAL_BLE_HCI_EVT_HI_BUF_COUNT - -#undef MYNEWT_VAL_BLE_HCI_EVT_LO_BUF_COUNT - -#undef MYNEWT_VAL_BLE_HCI_TRANSPORT - #ifndef MYNEWT_VAL_BLE_MONITOR_CONSOLE_BUFFER_SIZE #define MYNEWT_VAL_BLE_MONITOR_CONSOLE_BUFFER_SIZE (128) #endif @@ -2721,7 +2598,6 @@ #define MYNEWT_PKG_apache_mynewt_core__boot_startup 1 #define MYNEWT_PKG_apache_mynewt_core__compiler_arm_none_eabi_m4 1 #define MYNEWT_PKG_apache_mynewt_core__crypto_mbedtls 1 -#define MYNEWT_PKG_apache_mynewt_core__crypto_tinycrypt 1 #define MYNEWT_PKG_apache_mynewt_core__hw_bsp_nordic_pca10056 1 #define MYNEWT_PKG_apache_mynewt_core__hw_cmsis_core 1 #define MYNEWT_PKG_apache_mynewt_core__hw_drivers_uart 1 diff --git a/third_party/nimble/port/include/sf32lb52/syscfg/syscfg.h b/third_party/nimble/port/include/sf32lb52/syscfg/syscfg.h index bdbd1bd858..0065baeffe 100644 --- a/third_party/nimble/port/include/sf32lb52/syscfg/syscfg.h +++ b/third_party/nimble/port/include/sf32lb52/syscfg/syscfg.h @@ -1,5 +1,5 @@ /** - * This file was generated by Apache newt version: 1.14.0-dev + * This file was generated by Apache newt version: 1.15.0 */ #ifndef H_MYNEWT_SYSCFG_ @@ -18,7 +18,7 @@ /*** Repository @apache-mynewt-core info */ #ifndef MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_CORE -#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_CORE "71b9c035d88e88cea2fd0db5dcdd7bdaf6973934" +#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_CORE "70e9ad0667a67d7bdfb25e61c3da41e38168a223" #endif #ifndef MYNEWT_VAL_REPO_VERSION_APACHE_MYNEWT_CORE @@ -27,7 +27,7 @@ /*** Repository @apache-mynewt-nimble info */ #ifndef MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_NIMBLE -#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_NIMBLE "93d716b43e2df6e4f18cf39d887395d0ba7fc23e" +#define MYNEWT_VAL_REPO_HASH_APACHE_MYNEWT_NIMBLE "a7a156f28954819e158b62dd613008f22f9cf73b" #endif #ifndef MYNEWT_VAL_REPO_VERSION_APACHE_MYNEWT_NIMBLE @@ -36,16 +36,16 @@ /*** Repository @mcuboot info */ #ifndef MYNEWT_VAL_REPO_HASH_MCUBOOT -#define MYNEWT_VAL_REPO_HASH_MCUBOOT "9c99326b9756dbcc35b524636d99ed5f3e6cb29b" +#define MYNEWT_VAL_REPO_HASH_MCUBOOT "6d3b3d2c38ab20c242e5b9abb04d050086383eb2" #endif #ifndef MYNEWT_VAL_REPO_VERSION_MCUBOOT -#define MYNEWT_VAL_REPO_VERSION_MCUBOOT "2.1.0" +#define MYNEWT_VAL_REPO_VERSION_MCUBOOT "2.4.0" #endif /*** Repository @syscfg info */ #ifndef MYNEWT_VAL_REPO_HASH_SYSCFG -#define MYNEWT_VAL_REPO_HASH_SYSCFG "83198b3b598600bdab70734c856882b21e7dc12c-dirty" +#define MYNEWT_VAL_REPO_HASH_SYSCFG "e383a491b7c5897735a9e09ffd4ff68f3bf0ab40-dirty" #endif #ifndef MYNEWT_VAL_REPO_VERSION_SYSCFG @@ -54,6 +54,268 @@ +/*** @apache-mynewt-core/crypto/mbedtls */ +#ifndef MYNEWT_VAL_MBEDTLS_AES_ALT +#define MYNEWT_VAL_MBEDTLS_AES_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_AES_C +#define MYNEWT_VAL_MBEDTLS_AES_C (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_AES_FEWER_TABLES +#define MYNEWT_VAL_MBEDTLS_AES_FEWER_TABLES (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_AES_ROM_TABLES +#define MYNEWT_VAL_MBEDTLS_AES_ROM_TABLES (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ARC4_C +#define MYNEWT_VAL_MBEDTLS_ARC4_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ARIA_C +#define MYNEWT_VAL_MBEDTLS_ARIA_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_BASE64_C +#define MYNEWT_VAL_MBEDTLS_BASE64_C (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_BIGNUM_ALT +#define MYNEWT_VAL_MBEDTLS_BIGNUM_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_BLOWFISH_C +#define MYNEWT_VAL_MBEDTLS_BLOWFISH_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CAMELLIA_C +#define MYNEWT_VAL_MBEDTLS_CAMELLIA_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CCM_C +#define MYNEWT_VAL_MBEDTLS_CCM_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CHACHA20_C +#define MYNEWT_VAL_MBEDTLS_CHACHA20_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CHACHAPOLY_C +#define MYNEWT_VAL_MBEDTLS_CHACHAPOLY_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CIPHER_MODE_CBC +#define MYNEWT_VAL_MBEDTLS_CIPHER_MODE_CBC (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CIPHER_MODE_CFB +#define MYNEWT_VAL_MBEDTLS_CIPHER_MODE_CFB (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CIPHER_MODE_CTR +#define MYNEWT_VAL_MBEDTLS_CIPHER_MODE_CTR (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CIPHER_MODE_OFB +#define MYNEWT_VAL_MBEDTLS_CIPHER_MODE_OFB (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CIPHER_MODE_XTS +#define MYNEWT_VAL_MBEDTLS_CIPHER_MODE_XTS (0) +#endif + +/* Overridden by @apache-mynewt-nimble/nimble/host (defined by @apache-mynewt-core/crypto/mbedtls) */ +#ifndef MYNEWT_VAL_MBEDTLS_CMAC_C +#define MYNEWT_VAL_MBEDTLS_CMAC_C (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_CTR_DRBG_C +#define MYNEWT_VAL_MBEDTLS_CTR_DRBG_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_DES_C +#define MYNEWT_VAL_MBEDTLS_DES_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECDH_COMPUTE_SHARED_ALT +#define MYNEWT_VAL_MBEDTLS_ECDH_COMPUTE_SHARED_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECDH_GEN_PUBLIC_ALT +#define MYNEWT_VAL_MBEDTLS_ECDH_GEN_PUBLIC_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECDSA_GENKEY_ALT +#define MYNEWT_VAL_MBEDTLS_ECDSA_GENKEY_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECDSA_SIGN_ALT +#define MYNEWT_VAL_MBEDTLS_ECDSA_SIGN_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECDSA_VERIFY_ALT +#define MYNEWT_VAL_MBEDTLS_ECDSA_VERIFY_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECJPAKE_C +#define MYNEWT_VAL_MBEDTLS_ECJPAKE_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_ALT +#define MYNEWT_VAL_MBEDTLS_ECP_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_BP256R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_BP256R1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_BP384R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_BP384R1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_BP512R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_BP512R1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_CURVE25519 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_CURVE25519 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_CURVE448 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_CURVE448 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP192K1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP192K1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP192R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP192R1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP224K1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP224K1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP224R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP224R1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP256K1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP256K1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP256R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP256R1 (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP384R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP384R1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_DP_SECP521R1 +#define MYNEWT_VAL_MBEDTLS_ECP_DP_SECP521R1 (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ECP_RESTARTABLE +#define MYNEWT_VAL_MBEDTLS_ECP_RESTARTABLE (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ENTROPY_C +#define MYNEWT_VAL_MBEDTLS_ENTROPY_C (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_ENTROPY_HARDWARE_ALT +#define MYNEWT_VAL_MBEDTLS_ENTROPY_HARDWARE_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_GENPRIME +#define MYNEWT_VAL_MBEDTLS_GENPRIME (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_HKDF_C +#define MYNEWT_VAL_MBEDTLS_HKDF_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED +#define MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED +#define MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_RSA_ENABLED +#define MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_RSA_ENABLED (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED +#define MYNEWT_VAL_MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_MD2_C +#define MYNEWT_VAL_MBEDTLS_MD2_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_MD4_C +#define MYNEWT_VAL_MBEDTLS_MD4_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_MD5_C +#define MYNEWT_VAL_MBEDTLS_MD5_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_MPI_MAX_SIZE +#define MYNEWT_VAL_MBEDTLS_MPI_MAX_SIZE (1024) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_NIST_KW_C +#define MYNEWT_VAL_MBEDTLS_NIST_KW_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_PKCS1_V15 +#define MYNEWT_VAL_MBEDTLS_PKCS1_V15 (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_PKCS1_V21 +#define MYNEWT_VAL_MBEDTLS_PKCS1_V21 (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_POLY1305_C +#define MYNEWT_VAL_MBEDTLS_POLY1305_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_RIPEMD160_C +#define MYNEWT_VAL_MBEDTLS_RIPEMD160_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_SHA1_C +#define MYNEWT_VAL_MBEDTLS_SHA1_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_SHA256_ALT +#define MYNEWT_VAL_MBEDTLS_SHA256_ALT (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_SHA256_C +#define MYNEWT_VAL_MBEDTLS_SHA256_C (1) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_SHA512_C +#define MYNEWT_VAL_MBEDTLS_SHA512_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_SSL_TLS_C +#define MYNEWT_VAL_MBEDTLS_SSL_TLS_C (0) +#endif + +#ifndef MYNEWT_VAL_MBEDTLS_TIMING_C +#define MYNEWT_VAL_MBEDTLS_TIMING_C (0) +#endif + /*** @apache-mynewt-core/crypto/tinycrypt */ #ifndef MYNEWT_VAL_TINYCRYPT_SYSINIT_STAGE #define MYNEWT_VAL_TINYCRYPT_SYSINIT_STAGE (200) @@ -763,10 +1025,6 @@ #define MYNEWT_VAL_BLE_HOST (1) #endif -#ifndef MYNEWT_VAL_BLE_HOST_RPA_RESOLVER -#define MYNEWT_VAL_BLE_HOST_RPA_RESOLVER (0) -#endif - /* Overridden by app (defined by @apache-mynewt-nimble/nimble/host) */ #ifndef MYNEWT_VAL_BLE_HS_AUTO_START #define MYNEWT_VAL_BLE_HS_AUTO_START (0) @@ -1085,20 +1343,6 @@ #endif /*** @apache-mynewt-nimble/nimble/transport */ -#undef MYNEWT_VAL_BLE_ACL_BUF_COUNT - -#undef MYNEWT_VAL_BLE_ACL_BUF_SIZE - -#undef MYNEWT_VAL_BLE_HCI_BRIDGE - -#undef MYNEWT_VAL_BLE_HCI_EVT_BUF_SIZE - -#undef MYNEWT_VAL_BLE_HCI_EVT_HI_BUF_COUNT - -#undef MYNEWT_VAL_BLE_HCI_EVT_LO_BUF_COUNT - -#undef MYNEWT_VAL_BLE_HCI_TRANSPORT - #ifndef MYNEWT_VAL_BLE_MONITOR_CONSOLE_BUFFER_SIZE #define MYNEWT_VAL_BLE_MONITOR_CONSOLE_BUFFER_SIZE (128) #endif @@ -1265,6 +1509,19 @@ #define MYNEWT_VAL_BLE_SOCK_TCP_PORT (14433) #endif +#ifndef MYNEWT_VAL_BLE_SOCK_TYPE__linux_blue +#define MYNEWT_VAL_BLE_SOCK_TYPE__linux_blue (0) +#endif +#ifndef MYNEWT_VAL_BLE_SOCK_TYPE__linux_tcp +#define MYNEWT_VAL_BLE_SOCK_TYPE__linux_tcp (1) +#endif +#ifndef MYNEWT_VAL_BLE_SOCK_TYPE__nuttx +#define MYNEWT_VAL_BLE_SOCK_TYPE__nuttx (0) +#endif +#ifndef MYNEWT_VAL_BLE_SOCK_TYPE +#define MYNEWT_VAL_BLE_SOCK_TYPE (1) +#endif + #ifndef MYNEWT_VAL_BLE_SOCK_USE_LINUX_BLUE #define MYNEWT_VAL_BLE_SOCK_USE_LINUX_BLUE (0) #endif @@ -1274,7 +1531,7 @@ #endif #ifndef MYNEWT_VAL_BLE_SOCK_USE_TCP -#define MYNEWT_VAL_BLE_SOCK_USE_TCP (1) +#define MYNEWT_VAL_BLE_SOCK_USE_TCP (0) #endif /*** newt */ @@ -1320,6 +1577,7 @@ /*** Included packages */ #define MYNEWT_PKG_apache_mynewt_core__compiler_sim 1 +#define MYNEWT_PKG_apache_mynewt_core__crypto_mbedtls 1 #define MYNEWT_PKG_apache_mynewt_core__crypto_tinycrypt 1 #define MYNEWT_PKG_apache_mynewt_core__hw_bsp_native 1 #define MYNEWT_PKG_apache_mynewt_core__hw_drivers_flash_enc_flash 1 diff --git a/third_party/nimble/wscript_build b/third_party/nimble/wscript_build index 9ab751afc8..8da5bcd38c 100644 --- a/third_party/nimble/wscript_build +++ b/third_party/nimble/wscript_build @@ -14,7 +14,6 @@ nimble_includes = [ 'mynewt-nimble/nimble/transport/include', 'mynewt-nimble/nimble/transport/common/hci_h4/include', 'mynewt-nimble/porting/nimble/include', - 'mynewt-nimble/ext/tinycrypt/include', 'port/include', ] @@ -30,7 +29,6 @@ nimble_sources = bld.path.ant_glob( 'mynewt-nimble/nimble/host/services/dis/src/*.c', 'mynewt-nimble/nimble/transport/src/*.c', 'mynewt-nimble/nimble/transport/common/hci_h4/src/*.c', - 'mynewt-nimble/ext/tinycrypt/src/*.c', 'port/src/npl_os_pebble.c', ], excl = [ @@ -54,6 +52,7 @@ nimble_export_defines = [] nimble_use =[ 'fw_includes', 'freertos', + 'mbedtls', ] if bld.env.CONFIG_SOC_NRF52: From 7bd6d139cdc695a76c234cdb11f773f464b6eb10 Mon Sep 17 00:00:00 2001 From: Vlad Zaytsev Date: Tue, 21 Jul 2026 18:56:59 +0300 Subject: [PATCH 42/85] fw/fonts: pick nearest smaller system emoji font fonts_get_system_emoji_font_for_size() required an exact height match against s_emoji_fonts, which only holds 28/24/18/14. A 36px body font (notification text size "Large" on Emery/Gabbro) therefore got no emoji font at all and fell back to the primary font's base resource, which only carries the legacy emoji subset. Return the largest emoji font whose height still fits the requested one instead. The table is already sorted descending, so the first fitting entry wins; an entry that fails to load is skipped so a smaller one can still be used, and NULL is returned only when nothing loadable fits. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Vlad Zaytsev --- src/fw/applib/fonts/fonts.c | 12 ++++++++---- src/fw/applib/fonts/fonts.h | 3 +++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/fw/applib/fonts/fonts.c b/src/fw/applib/fonts/fonts.c index 4091f85719..49fb5e2ed5 100644 --- a/src/fw/applib/fonts/fonts.c +++ b/src/fw/applib/fonts/fonts.c @@ -104,7 +104,7 @@ static const struct { const char *key_name; uint8_t height; } s_emoji_fonts[] = { - // Keep this sorted in descending order + // Keep this sorted in descending order: lookup returns the first entry that fits { FONT_KEY_GOTHIC_28_EMOJI, 28 }, { FONT_KEY_GOTHIC_24_EMOJI, 24 }, { FONT_KEY_GOTHIC_18_EMOJI, 18 }, @@ -112,12 +112,16 @@ static const struct { }; FontInfo *fonts_get_system_emoji_font_for_size(unsigned int font_height) { + // Pick the largest emoji font that still fits the requested height, skipping any that fails + // to load so a smaller one can still be used for (uint32_t i = 0; i < ARRAY_LENGTH(s_emoji_fonts); i++) { - if (font_height == s_emoji_fonts[i].height) { - return sys_font_get_system_font(s_emoji_fonts[i].key_name); + if (s_emoji_fonts[i].height <= font_height) { + FontInfo *font = sys_font_get_system_font(s_emoji_fonts[i].key_name); + if (font) { + return font; + } } } - // Didn't find a suitable emoji font return NULL; } #endif diff --git a/src/fw/applib/fonts/fonts.h b/src/fw/applib/fonts/fonts.h index 39818ef2e5..8d76885a49 100644 --- a/src/fw/applib/fonts/fonts.h +++ b/src/fw/applib/fonts/fonts.h @@ -38,6 +38,9 @@ GFont fonts_get_fallback_font(void); //! @note This may load a font from the flash peripheral into RAM. GFont fonts_get_system_font(const char *font_key); +//! @internal +//! Gets the largest loadable system emoji font whose height is <= font_size. +//! @return NULL if no such font could be loaded. GFont fonts_get_system_emoji_font_for_size(unsigned int font_size); //! Loads a custom font. From 239e80f25539afb942e5b8232ee51725f2f3b08c Mon Sep 17 00:00:00 2001 From: Vlad Zaytsev Date: Tue, 21 Jul 2026 18:57:12 +0300 Subject: [PATCH 43/85] fw/graphics: align substituted glyphs on the primary font baseline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit render_glyph() places a glyph at cursor.origin.y + top_offset_px, but top_offset_px is baked relative to the baseline of the font the glyph was taken from (== that font's base resource max_height for PBF). When a glyph is served by another font — the system emoji font, or the 14px system fallback font — that baseline sits higher than the primary font's, so the glyph is drawn too high. With a 36px body font a fallback glyph landed ~22px above the baseline, which is what made emoji look tiny and shifted up in notifications at text size "Large". Report the FontInfo that owns the resolved resource and hand the caller a draw-time correction of MAX(0, primary base max_height - owner base max_height). Keying it on the owning font rather than on the concrete resource is what keeps an extension from moving: an extension belongs to the same font and its offsets are already baked against that font's base baseline (resource_generator_font.py passes fontgen baseline = the nominal name_height), while the PBF header records max_height = pixelHeight, which may be far smaller — the shipped ar_SA pack uses pixelHeight 12/14/17/20/20 against base fonts of 14/18/24/28/36. Measuring the resource would therefore have shoved Arabic glyphs 2..16px too far down, and, since FontInfo.max_height is MAX(ext, base), a taller extension would have shifted the base font's latin glyphs instead. The adjust is consequently exactly 0 whenever the glyph came from the font we were asked to draw with, base or extension. The clamp at 0 keeps a taller substitute from bleeding into the previous line. For the same reason the emoji font is now sized against the base resource height, the very baseline its glyphs get aligned to. The correction is applied to the glyph rect in render_glyph() before the target and clipping rects are derived from it, so the source row maths stays consistent; nothing is baked into the cached glyph metadata, which is keyed by source resource and shared across primary fonts. Layout and line heights are untouched, and horizontal advance still comes from the substituting font as before. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Vlad Zaytsev --- src/fw/applib/graphics/text_layout.c | 12 +- src/fw/applib/graphics/text_render.c | 7 +- src/fw/applib/graphics/text_resources.c | 71 +++++++--- src/fw/applib/graphics/text_resources.h | 4 +- tests/fw/applib/test_text_render.c | 3 +- tests/fw/applib/test_text_resources.c | 121 +++++++++++++++--- .../fw/applib/test_text_resources_font_stub.c | 7 +- tests/stubs/stubs_text_resources.h | 6 +- 8 files changed, 187 insertions(+), 44 deletions(-) diff --git a/src/fw/applib/graphics/text_layout.c b/src/fw/applib/graphics/text_layout.c index ee97233d32..4f33b2b2d8 100644 --- a/src/fw/applib/graphics/text_layout.c +++ b/src/fw/applib/graphics/text_layout.c @@ -903,7 +903,7 @@ utf8_t* walk_line(GContext* ctx, Line* line, const TextBoxParams* const text_box cursor.origin.x += walked_width_px; if (!codepoint_is_zero_width(rcp)) { - text_resources_get_glyph(&ctx->font_cache, rcp, text_box_params->font); + text_resources_get_glyph(&ctx->font_cache, rcp, text_box_params->font, NULL); render_glyph(ctx, rcp, text_box_params->font, cursor); } @@ -949,7 +949,7 @@ utf8_t* walk_line(GContext* ctx, Line* line, const TextBoxParams* const text_box cursor.origin.x += walked_width_px; if (!codepoint_is_zero_width(draw_cp)) { - text_resources_get_glyph(&ctx->font_cache, draw_cp, text_box_params->font); + text_resources_get_glyph(&ctx->font_cache, draw_cp, text_box_params->font, NULL); render_glyph(ctx, draw_cp, text_box_params->font, cursor); } @@ -977,7 +977,8 @@ utf8_t* walk_line(GContext* ctx, Line* line, const TextBoxParams* const text_box .size.h = fonts_get_font_height(text_box_params->font) }; cursor.origin.x += walked_width_px; - text_resources_get_glyph(&ctx->font_cache, line->suffix_codepoint, text_box_params->font); + text_resources_get_glyph(&ctx->font_cache, line->suffix_codepoint, text_box_params->font, + NULL); render_glyph(ctx, line->suffix_codepoint, text_box_params->font, cursor); } @@ -1030,7 +1031,7 @@ utf8_t* walk_line(GContext* ctx, Line* line, const TextBoxParams* const text_box if (is_render && !codepoint_is_zero_width(current_draw_cp) && !codepoint_is_unicode_space(current_draw_cp)) { // Pre-load here so the deeper render_glyph() is a cache hit, not a deep flash read. - text_resources_get_glyph(&ctx->font_cache, current_draw_cp, text_box_params->font); + text_resources_get_glyph(&ctx->font_cache, current_draw_cp, text_box_params->font, NULL); } char_visitor_cb(ctx, text_box_params, line, cursor, current_draw_cp); @@ -1115,7 +1116,8 @@ utf8_t* walk_line(GContext* ctx, Line* line, const TextBoxParams* const text_box cursor.origin.x += walked_width_px; if (char_visitor_cb) { if (is_render) { - text_resources_get_glyph(&ctx->font_cache, line->suffix_codepoint, text_box_params->font); + text_resources_get_glyph(&ctx->font_cache, line->suffix_codepoint, text_box_params->font, + NULL); } char_visitor_cb(ctx, text_box_params, line, cursor, line->suffix_codepoint); } diff --git a/src/fw/applib/graphics/text_render.c b/src/fw/applib/graphics/text_render.c index f3e04fdcef..fce54ccc44 100644 --- a/src/fw/applib/graphics/text_render.c +++ b/src/fw/applib/graphics/text_render.c @@ -60,11 +60,16 @@ void render_glyph(GContext* const ctx, const uint32_t codepoint, FontInfo* const return; } - const GlyphData* glyph = text_resources_get_glyph(&ctx->font_cache, codepoint, font); + int16_t baseline_adjust = 0; + const GlyphData* glyph = text_resources_get_glyph(&ctx->font_cache, codepoint, font, + &baseline_adjust); PBL_ASSERTN(glyph); // Bitfiddle the metrics data: GRect glyph_metrics = get_glyph_rect(glyph); + // Sit a substituted glyph on the primary font's baseline. Must happen before the target and + // clipping rects are derived from it. + glyph_metrics.origin.y += baseline_adjust; // Calculate the box that we intend to draw to the screen, in screen coordinates GRect glyph_target = { diff --git a/src/fw/applib/graphics/text_resources.c b/src/fw/applib/graphics/text_resources.c index 2b9722b3ef..1888e06680 100644 --- a/src/fw/applib/graphics/text_resources.c +++ b/src/fw/applib/graphics/text_resources.c @@ -533,24 +533,34 @@ static bool prv_load_font_res(ResAppNum app_num, uint32_t resource_id, FontResou return true; } +// @param owner_out if non-NULL, receives the FontInfo owning the returned resource. It is a font +// other than font_info only when the emoji font takes over. static const FontResource *prv_font_res_for_codepoint(Codepoint codepoint, - const FontInfo *font_info) { + const FontInfo *font_info, + const FontInfo **owner_out) { + const FontInfo *owner = font_info; + const FontResource *font_res = &font_info->base; + if (!codepoint_is_latin(codepoint) && !codepoint_is_emoji(codepoint) && !codepoint_is_special(codepoint) && font_info->extended) { // Latin & emoji codepoints are in base, others are in extension - return (&font_info->extension); + font_res = &font_info->extension; } else if (codepoint_is_emoji(codepoint) && font_info->base.app_num == SYSTEM_APP) { - // Assuming we are using base - FontInfo *emoji_font = fonts_get_system_emoji_font_for_size(font_info->max_height); + // Size against the base: that is the baseline emoji glyphs get aligned to when drawn + FontInfo *emoji_font = fonts_get_system_emoji_font_for_size(font_info->base.md.max_height); if (emoji_font) { - return &emoji_font->base; + owner = emoji_font; + font_res = &emoji_font->base; } } - return (&font_info->base); + if (owner_out) { + *owner_out = owner; + } + return font_res; } static void prv_resource_changed_callback(void *data) { @@ -589,22 +599,44 @@ bool text_resources_init_font(ResAppNum app_num, uint32_t font_resource, // Leaf glyph lookup against a single font. This NEVER consults the fallback font, which is what // structurally bounds the fallback to depth 1: the fallback font is looked up with this helper, so // it can never trigger a further fallback and no recursion or cycle is possible. +// @param owner_out if non-NULL, receives the FontInfo the glyph was looked up in static const GlyphData *prv_get_glyph_in_font(FontCache *font_cache, Codepoint codepoint, - FontInfo *font_info, bool need_bitmap) { - const FontResource *font_res = prv_font_res_for_codepoint(codepoint, font_info); + FontInfo *font_info, bool need_bitmap, + const FontInfo **owner_out) { + const FontResource *font_res = prv_font_res_for_codepoint(codepoint, font_info, owner_out); prv_check_font_cache(font_cache, font_res); return prv_get_glyph_metadata_from_spi(codepoint, font_cache, font_res, need_bitmap); } +// A substitute font bakes top_offset against its own baseline (== base max_height for PBF), so +// drop its glyphs onto ours. Our own base/extension are already aligned; never shift up. +static int16_t prv_baseline_adjust(const FontInfo *font_info, const FontInfo *owner) { + if (owner == NULL || owner == font_info) { + return 0; + } + return MAX(0, (int16_t)font_info->base.md.max_height - (int16_t)owner->base.md.max_height); +} + static const GlyphData *prv_get_glyph(FontCache *font_cache, Codepoint codepoint, - FontInfo *font_info, bool need_bitmap) { + FontInfo *font_info, bool need_bitmap, + int16_t *baseline_adjust_out) { + if (baseline_adjust_out) { + *baseline_adjust_out = 0; + } + if (!font_info->loaded) { sys_font_reload_font(font_info); } + const FontInfo *owner = NULL; + // (a) Requested codepoint in the primary font. - const GlyphData *data = prv_get_glyph_in_font(font_cache, codepoint, font_info, need_bitmap); + const GlyphData *data = prv_get_glyph_in_font(font_cache, codepoint, font_info, need_bitmap, + &owner); if (data) { + if (baseline_adjust_out) { + *baseline_adjust_out = prv_baseline_adjust(font_info, owner); + } return data; } @@ -620,8 +652,12 @@ static const GlyphData *prv_get_glyph(FontCache *font_cache, Codepoint codepoint if (!fallback->loaded) { sys_font_reload_font(fallback); } - data = prv_get_glyph_in_font(font_cache, codepoint, fallback, need_bitmap); + data = prv_get_glyph_in_font(font_cache, codepoint, fallback, need_bitmap, &owner); if (data) { + // Baseline is still the caller's font, not the fallback's + if (baseline_adjust_out) { + *baseline_adjust_out = prv_baseline_adjust(font_info, owner); + } return data; } } @@ -633,8 +669,11 @@ static const GlyphData *prv_get_glyph(FontCache *font_cache, Codepoint codepoint // missing-glyph box is the correct indicator. const Codepoint substitutes[] = { font_info->base.md.wildcard_codepoint, ' ' }; for (unsigned int i = 0; i < ARRAY_LENGTH(substitutes); i++) { - data = prv_get_glyph_in_font(font_cache, substitutes[i], font_info, need_bitmap); + data = prv_get_glyph_in_font(font_cache, substitutes[i], font_info, need_bitmap, &owner); if (data) { + if (baseline_adjust_out) { + *baseline_adjust_out = prv_baseline_adjust(font_info, owner); + } return data; } } @@ -645,7 +684,8 @@ static const GlyphData *prv_get_glyph(FontCache *font_cache, Codepoint codepoint int8_t text_resources_get_glyph_horiz_advance(FontCache *font_cache, const Codepoint codepoint, FontInfo *font_info) { // Metadata only: measuring must not pay the deep bitmap load; render pre-loads it in walk_line(). - const GlyphData *g = prv_get_glyph(font_cache, codepoint, font_info, false /* need_bitmap */); + const GlyphData *g = prv_get_glyph(font_cache, codepoint, font_info, false /* need_bitmap */, + NULL); if (!g) { return 0; } @@ -653,6 +693,7 @@ int8_t text_resources_get_glyph_horiz_advance(FontCache *font_cache, const Codep } const GlyphData *text_resources_get_glyph(FontCache *font_cache, const Codepoint codepoint, - FontInfo *font_info) { - return prv_get_glyph(font_cache, codepoint, font_info, true /* need_bitmap */); + FontInfo *font_info, int16_t *baseline_adjust_out) { + return prv_get_glyph(font_cache, codepoint, font_info, true /* need_bitmap */, + baseline_adjust_out); } diff --git a/src/fw/applib/graphics/text_resources.h b/src/fw/applib/graphics/text_resources.h index 4189eb7994..4badc11d60 100644 --- a/src/fw/applib/graphics/text_resources.h +++ b/src/fw/applib/graphics/text_resources.h @@ -106,8 +106,10 @@ typedef struct FontCache { const FontResource *cached_font; } FontCache; +//! @param baseline_adjust_out optional: pixels to add to the glyph's top_offset when drawing, +//! non-zero only when another font (emoji or system fallback) supplied the glyph const GlyphData *text_resources_get_glyph(FontCache *font_cache, Codepoint codepoint, - FontInfo *font_info); + FontInfo *font_info, int16_t *baseline_adjust_out); int8_t text_resources_get_glyph_horiz_advance(FontCache *font_cache, Codepoint codepoint, FontInfo *font_info); diff --git a/tests/fw/applib/test_text_render.c b/tests/fw/applib/test_text_render.c index 103fc47bd8..7108d82370 100644 --- a/tests/fw/applib/test_text_render.c +++ b/tests/fw/applib/test_text_render.c @@ -20,7 +20,8 @@ GBitmap* graphics_context_get_bitmap(GContext* ctx) { return NULL; } void graphics_context_mark_dirty_rect(GContext* ctx, GRect rect) {} const GlyphData* text_resources_get_glyph(FontCache* font_cache, const Codepoint codepoint, - FontInfo* fontinfo) { return NULL; } + FontInfo* fontinfo, + int16_t *baseline_adjust_out) { return NULL; } extern int32_t prv_convert_1bit_addr_to_8bit_x(GBitmap *dest_bitmap, uint32_t *block_addr, diff --git a/tests/fw/applib/test_text_resources.c b/tests/fw/applib/test_text_resources.c index 116ef0f5b9..cfb4fbc9fe 100644 --- a/tests/fw/applib/test_text_resources.c +++ b/tests/fw/applib/test_text_resources.c @@ -43,6 +43,8 @@ static FontInfo s_font_info; // lives in test_text_resources_font_stub.c so it resolves at link time without colliding with the // in-TU stub. extern FontInfo *s_test_fallback_font; +// Installed emoji font, returned for any named font key (NULL = none, the default). +extern FontInfo *s_test_emoji_font; #define FONT_COMPRESSION_FIXTURE_PATH "font_compression" @@ -64,6 +66,7 @@ void test_text_resources__initialize(void) { memset(&s_font_info, 0, sizeof(s_font_info)); memset(&s_font_cache, 0, sizeof(s_font_cache)); s_test_fallback_font = NULL; + s_test_emoji_font = NULL; FontCache *font_cache = &s_font_cache; memset(font_cache->cache_keys, 0, sizeof(font_cache->cache_keys)); @@ -129,15 +132,15 @@ void test_text_resources__get_glyph_multiple(void) { uint8_t glyph_size_bytes; const GlyphData *glyph; - glyph = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info, NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); cl_assert_equal_m(a_glyph_data_bytes, glyph->data, glyph_size_bytes); - glyph = text_resources_get_glyph(&s_font_cache, 'b', &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, 'b', &s_font_info, NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); cl_assert_equal_m(b_glyph_data_bytes, glyph->data, glyph_size_bytes); - glyph = text_resources_get_glyph(&s_font_cache, 'c', &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, 'c', &s_font_info, NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); cl_assert_equal_m(c_glyph_data_bytes, glyph->data, glyph_size_bytes); } @@ -163,7 +166,7 @@ void test_text_resources__test_backup_wildcard(void) { text_resources_get_glyph_horiz_advance(&s_font_cache, WILDCARD_CODEPOINT, &s_font_info)); const GlyphData *glyph = text_resources_get_glyph(&s_font_cache, - WILDCARD_CODEPOINT, &s_font_info); + WILDCARD_CODEPOINT, &s_font_info, NULL); cl_assert_equal_i(glyph->header.width_px, 5); cl_assert_equal_i(glyph->header.height_px, 12); uint8_t glyph_size_bytes = glyph_get_size_bytes(glyph); @@ -185,7 +188,7 @@ void test_text_resources__test_gothic_wildcard(void) { const GlyphData *glyph = text_resources_get_glyph(&s_font_cache, WILDCARD_CODEPOINT, - &s_font_info); + &s_font_info, NULL); cl_assert_equal_i(glyph->header.width_px, 7); cl_assert_equal_i(glyph->header.height_px, 15); uint8_t glyph_size_bytes = glyph_get_size_bytes(glyph); @@ -209,18 +212,18 @@ void test_text_resources__extended_font(void) { uint8_t glyph_size_bytes; const GlyphData *glyph; - glyph = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info, NULL); cl_assert(glyph != NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); cl_assert_equal_m(a_glyph_data_bytes, glyph->data, glyph_size_bytes); - glyph = text_resources_get_glyph(&s_font_cache, 0x4E50 /* 乐 */, &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, 0x4E50 /* 乐 */, &s_font_info, NULL); // the chinese pbpack contains the letter 你, it should succeed cl_assert(glyph != NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); cl_assert_equal_m(chinese_glyph_data_bytes, glyph->data, glyph_size_bytes); - glyph = text_resources_get_glyph(&s_font_cache, 0x8888 /* 袈 */, &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, 0x8888 /* 袈 */, &s_font_info, NULL); // the chinese pbpack does not contain the letter 袈, it should return the wildcard cl_assert(glyph != NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); @@ -237,7 +240,7 @@ void test_text_resources__test_emoji_font(void) { const GlyphData *glyph; const Codepoint PHONE_CODEPOINT = 0x260E; - glyph = text_resources_get_glyph(&s_font_cache, PHONE_CODEPOINT, &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, PHONE_CODEPOINT, &s_font_info, NULL); cl_assert(glyph != NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); cl_assert_equal_m(phone_bytes, glyph->data, glyph_size_bytes); @@ -253,7 +256,7 @@ void DISABLED_test_text_resources__test_emoji_fallback(void) { const GlyphData *glyph; const Codepoint PHONE_CODEPOINT = 0x260E; - glyph = text_resources_get_glyph(&s_font_cache, PHONE_CODEPOINT, &s_font_info); + glyph = text_resources_get_glyph(&s_font_cache, PHONE_CODEPOINT, &s_font_info, NULL); cl_assert(glyph != NULL); glyph_size_bytes = glyph_get_size_bytes(glyph); cl_assert_equal_m(phone_bytes, glyph->data, glyph_size_bytes); @@ -273,7 +276,7 @@ void test_text_resources__per_glyph_fallback(void) { // Baseline with no fallback: 0x4E50 misses -> gothic wildcard, NOT the CJK glyph. const uint8_t gothic_wildcard[] = {0xff, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0xfe, 0x01}; - const GlyphData *g0 = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info); + const GlyphData *g0 = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info, NULL); cl_assert(g0 != NULL); cl_assert_equal_m(gothic_wildcard, g0->data, glyph_get_size_bytes(g0)); @@ -292,11 +295,89 @@ void test_text_resources__per_glyph_fallback(void) { const uint8_t cjk_bytes[] = {0x00, 0x0C, 0xE2, 0x01, 0x0F, 0x80, 0x30, 0x40, 0x08, 0x10, 0x04, 0x08, 0x82, 0xFC, 0xFF, 0x80, 0x00, 0x44, 0x00, 0x26, 0x01, 0x11, 0x41, 0x08, 0x11, 0x84, 0x04, 0x82, 0xC0, 0x01, 0x40, 0x00}; - const GlyphData *g1 = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info); + const GlyphData *g1 = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info, NULL); cl_assert(g1 != NULL); cl_assert_equal_m(cjk_bytes, g1->data, glyph_get_size_bytes(g1)); // real fallback glyph } +// A glyph served by the system fallback font reports a positive baseline adjust, so the renderer +// can drop it onto the primary font's baseline instead of the fallback font's. +void test_text_resources__baseline_adjust_for_fallback_font(void) { + // primary: gothic 24, no extension -> lacks CJK 0x4E50 + cl_assert(text_resources_init_font(0, RESOURCE_ID_GOTHIC_24, 0, &s_font_info)); + + // A glyph from the primary font itself needs no adjust. + int16_t adjust = -1; + const GlyphData *g0 = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info, &adjust); + cl_assert(g0 != NULL); + cl_assert_equal_i(adjust, 0); + + // Install a shorter fallback (gothic 18 + extended) that carries 0x4E50. + static FontInfo s_fallback; + memset(&s_fallback, 0, sizeof(s_fallback)); + cl_assert(text_resources_init_font(0, RESOURCE_ID_GOTHIC_18, + RESOURCE_ID_GOTHIC_18_EXTENDED, &s_fallback)); + s_test_fallback_font = &s_fallback; + + // Fresh cache so the primary negative-cache entry does not short-circuit. + memset(&s_font_cache, 0, sizeof(s_font_cache)); + keyed_circular_cache_init(&s_font_cache.line_cache, s_font_cache.cache_keys, + s_font_cache.cache_data, sizeof(LineCacheData), LINE_CACHE_SIZE); + + // The reference is the fallback font's own baseline, i.e. its BASE resource height. + const int16_t expected = (int16_t)s_font_info.base.md.max_height - + (int16_t)s_fallback.base.md.max_height; + cl_assert(expected > 0); // premise: the fallback really is shorter + + adjust = -1; + const GlyphData *g1 = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info, &adjust); + cl_assert(g1 != NULL); + cl_assert_equal_i(adjust, expected); +} + +// Regression: an extension is part of the SAME font and its glyph offsets are already baked +// against that font's base baseline, so a short extension (as shipped for ar_SA, where a 36px +// font carries a 20px-tall extension) must never be pushed down. +void test_text_resources__baseline_adjust_zero_for_own_extension(void) { + // gothic 36 base with a much shorter extension, mimicking the ar_SA font pack + cl_assert(text_resources_init_font(0, RESOURCE_ID_GOTHIC_36, + RESOURCE_ID_GOTHIC_18_EXTENDED, &s_font_info)); + cl_assert(s_font_info.extended); + // premise: the extension really is shorter than the base + cl_assert(s_font_info.extension.md.max_height < s_font_info.base.md.max_height); + + // Compare against the extension's own glyph bytes, so a wildcard from the base cannot pass. + const uint8_t cjk_bytes[] = {0x00, 0x0C, 0xE2, 0x01, 0x0F, 0x80, 0x30, 0x40, 0x08, 0x10, 0x04, + 0x08, 0x82, 0xFC, 0xFF, 0x80, 0x00, 0x44, 0x00, 0x26, 0x01, 0x11, + 0x41, 0x08, 0x11, 0x84, 0x04, 0x82, 0xC0, 0x01, 0x40, 0x00}; + int16_t adjust = -1; + const GlyphData *g = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info, &adjust); + cl_assert(g != NULL); + cl_assert_equal_m(cjk_bytes, g->data, glyph_get_size_bytes(g)); + cl_assert_equal_i(adjust, 0); +} + +// The case this all exists for: a 36px font has no emoji font of its own size, so the 28px one +// takes over and its glyphs must be dropped 8px to reach the 36px baseline. +void test_text_resources__baseline_adjust_for_emoji_font(void) { + cl_assert(text_resources_init_font(0, RESOURCE_ID_GOTHIC_36, 0, &s_font_info)); + cl_assert_equal_i(s_font_info.base.md.max_height, 36); + + // fonts_get_system_emoji_font_for_size(36) picks the 28px emoji font, which this stub serves. + static FontInfo s_emoji; + memset(&s_emoji, 0, sizeof(s_emoji)); + cl_assert(text_resources_init_font(0, RESOURCE_ID_GOTHIC_28_EMOJI, 0, &s_emoji)); + cl_assert_equal_i(s_emoji.base.md.max_height, 28); + s_test_emoji_font = &s_emoji; + + const Codepoint PHONE_CODEPOINT = 0x260E; + int16_t adjust = -1; + const GlyphData *g = text_resources_get_glyph(&s_font_cache, PHONE_CODEPOINT, &s_font_info, + &adjust); + cl_assert(g != NULL); + cl_assert_equal_i(adjust, 8); // 36px primary baseline - 28px emoji font baseline +} + // A codepoint present in the primary font is served by the primary font; the fallback is not // consulted. Wire a different fallback whose 'a' glyph provably differs from the primary's (a // smaller font has different glyph dimensions and therefore different bitmap bytes), capture both @@ -308,7 +389,7 @@ void test_text_resources__fallback_not_used_when_present(void) { keyed_circular_cache_init(&s_font_cache.line_cache, s_font_cache.cache_keys, s_font_cache.cache_data, sizeof(LineCacheData), LINE_CACHE_SIZE); - const GlyphData *primary_g = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info); + const GlyphData *primary_g = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info, NULL); cl_assert(primary_g != NULL); uint8_t primary_size = glyph_get_size_bytes(primary_g); @@ -330,7 +411,7 @@ void test_text_resources__fallback_not_used_when_present(void) { keyed_circular_cache_init(&s_font_cache.line_cache, s_font_cache.cache_keys, s_font_cache.cache_data, sizeof(LineCacheData), LINE_CACHE_SIZE); - const GlyphData *fallback_g = text_resources_get_glyph(&s_font_cache, 'a', &s_fallback); + const GlyphData *fallback_g = text_resources_get_glyph(&s_font_cache, 'a', &s_fallback, NULL); cl_assert(fallback_g != NULL); uint8_t fallback_size = glyph_get_size_bytes(fallback_g); @@ -350,7 +431,7 @@ void test_text_resources__fallback_not_used_when_present(void) { keyed_circular_cache_init(&s_font_cache.line_cache, s_font_cache.cache_keys, s_font_cache.cache_data, sizeof(LineCacheData), LINE_CACHE_SIZE); - const GlyphData *result_g = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info); + const GlyphData *result_g = text_resources_get_glyph(&s_font_cache, 'a', &s_font_info, NULL); cl_assert(result_g != NULL); cl_assert_equal_i(glyph_get_size_bytes(result_g), primary_size); cl_assert_equal_m(primary_bytes, result_g->data, primary_size); @@ -364,7 +445,7 @@ void test_text_resources__fallback_self_reference(void) { const uint8_t gothic_wildcard[] = {0xff, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0xfe, 0x01}; - const GlyphData *g = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info); + const GlyphData *g = text_resources_get_glyph(&s_font_cache, 0x4E50, &s_font_info, NULL); cl_assert(g != NULL); // returns primary wildcard, no hang cl_assert_equal_m(gothic_wildcard, g->data, glyph_get_size_bytes(g)); } @@ -380,7 +461,8 @@ void test_text_resources__fallback_miss_yields_primary_wildcard(void) { const uint8_t gothic_wildcard[] = {0xff, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0xfe, 0x01}; - const GlyphData *g = text_resources_get_glyph(&s_font_cache, 0x8888 /* absent */, &s_font_info); + const GlyphData *g = text_resources_get_glyph(&s_font_cache, 0x8888 /* absent */, &s_font_info, + NULL); cl_assert(g != NULL); cl_assert_equal_m(gothic_wildcard, g->data, glyph_get_size_bytes(g)); } @@ -440,13 +522,14 @@ void test_text_resources__test_glyph_decompression(void) { for (unsigned codepoint = codepoint_range[index].start; codepoint <= codepoint_range[index].end; ++codepoint) { - const GlyphData *glyph = text_resources_get_glyph(&s_font_cache, codepoint, &s_font_info); + const GlyphData *glyph = text_resources_get_glyph(&s_font_cache, codepoint, &s_font_info, + NULL); cl_assert(glyph); unsigned glyph_size = sizeof(GlyphHeaderData) + glyph_get_size_bytes(glyph); memcpy(glyph_buffer, glyph->data, glyph_size); - glyph = text_resources_get_glyph(&s_font_cache, codepoint, &font_info_compressed); + glyph = text_resources_get_glyph(&s_font_cache, codepoint, &font_info_compressed, NULL); cl_assert(glyph); cl_assert_equal_m(glyph->data, glyph_buffer, glyph_size); diff --git a/tests/fw/applib/test_text_resources_font_stub.c b/tests/fw/applib/test_text_resources_font_stub.c index d087ec1ccb..3c4e69a47e 100644 --- a/tests/fw/applib/test_text_resources_font_stub.c +++ b/tests/fw/applib/test_text_resources_font_stub.c @@ -11,9 +11,14 @@ FontInfo *s_test_fallback_font; +// The only named keys the code under test asks for are the system emoji fonts, requested through +// fonts_get_system_emoji_font_for_size(); a test installs one by pointing s_test_emoji_font at its +// own FontInfo. +FontInfo *s_test_emoji_font; + GFont sys_font_get_system_font(const char *key) { if (key == NULL) { return s_test_fallback_font; } - return NULL; + return s_test_emoji_font; } diff --git a/tests/stubs/stubs_text_resources.h b/tests/stubs/stubs_text_resources.h index a3b6442235..9f692e14f4 100644 --- a/tests/stubs/stubs_text_resources.h +++ b/tests/stubs/stubs_text_resources.h @@ -31,7 +31,11 @@ int8_t text_resources_get_glyph_height(FontCache* font_cache, Codepoint codepoin return 10; } -const GlyphData *text_resources_get_glyph(FontCache* font_cache, Codepoint codepoint, FontInfo* fontinfo) { +const GlyphData *text_resources_get_glyph(FontCache* font_cache, Codepoint codepoint, + FontInfo* fontinfo, int16_t *baseline_adjust_out) { + if (baseline_adjust_out) { + *baseline_adjust_out = 0; + } return NULL; } From 3139c760c1fc00703277f0ba20248983595ca575 Mon Sep 17 00:00:00 2001 From: Robert Haist Date: Wed, 22 Jul 2026 07:19:52 +0200 Subject: [PATCH 44/85] doxygen: regenerate Doxyfile with current template Run doxygen -u to refresh the 1.8.1.2-era template to the 1.17 format. Verified with doxygen -x_noenv before/after that the effective configuration is byte-identical. Co-Authored-By: Claude Fable 5 Signed-off-by: Robert Haist --- Doxyfile | 3138 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 2187 insertions(+), 951 deletions(-) diff --git a/Doxyfile b/Doxyfile index 9757ed236a..222f9c5167 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,701 +1,1095 @@ -# Doxyfile 1.8.1.2 +# Doxyfile 1.17.0 # This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. +# Doxygen (www.doxygen.org) for a project. # -# All text after a hash (#) is considered a comment and will be ignored. +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. # The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use Doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use Doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 -# The PROJECT_NAME tag is a single word (or sequence of words) that should -# identify the project. Note that if you do not use Doxywizard you need -# to put quotes around the project name if it contains spaces. +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. PROJECT_NAME = PebbleOS -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. +# for a project that appears at the top of each page and should give viewers a +# quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. PROJECT_LOGO = -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where Doxygen was started. If +# left blank the current directory will be used. OUTPUT_DIRECTORY = build/doxygen -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. +# If the CREATE_SUBDIRS tag is set to YES then Doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this +# option can be useful when feeding Doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise cause +# performance problems for the file system. Adjust CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. +# The default value is: NO. CREATE_SUBDIRS = YES +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + +# If the ALLOW_UNICODE_NAMES tag is set to YES, Doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + # The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this +# documentation generated by Doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. +# The default value is: English. OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. +# If the BRIEF_MEMBER_DESC tag is set to YES, Doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# If the REPEAT_BRIEF tag is set to YES, Doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. +# The default value is: YES. REPEAT_BRIEF = YES -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. +# The default value is: NO. ALWAYS_DETAILED_SEC = NO -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# If the INLINE_INHERITED_MEMB tag is set to YES, Doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. +# The default value is: NO. INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. +# If the FULL_PATH_NAMES tag is set to YES, Doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. FULL_PATH_NAMES = YES -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which Doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where Doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. STRIP_FROM_INC_PATH = -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. +# If the SHORT_NAMES tag is set to YES, Doxygen will generate much shorter (but +# less readable) file names. This can be useful if your file system doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. SHORT_NAMES = NO -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen will interpret the +# first line (until the first dot, question mark or exclamation mark) of a +# Javadoc-style comment as the brief description. If set to NO, the Javadoc- +# style will behave just like regular Qt-style comments (thus requiring an +# explicit @brief command for a brief description.) +# The default value is: NO. JAVADOC_AUTOBRIEF = YES -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) +# If the JAVADOC_BANNER tag is set to YES then Doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by Doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will interpret the first +# line (until the first dot, question mark or exclamation mark) of a Qt-style +# comment as the brief description. If set to NO, the Qt-style will behave just +# like regular Qt-style comments (thus requiring an explicit \brief command for +# a brief description.) +# The default value is: NO. QT_AUTOBRIEF = NO -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. +# By default Python docstrings are displayed as preformatted text and Doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# Doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as Doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. +# If the SEPARATE_MEMBER_PAGES tag is set to YES then Doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. SEPARATE_MEMBER_PAGES = NO -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:^^" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by Doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make Doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by Doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = -# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all -# comments according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you -# can mix doxygen, HTML, and XML commands with Markdown formatting. -# Disable only in case of backward compatibilities issues. +# If the MARKDOWN_SUPPORT tag is enabled then Doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by Doxygen, so you can +# mix Doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. MARKDOWN_SUPPORT = YES +# If the MARKDOWN_STRICT tag is enabled then Doxygen treats text in comments as +# Markdown formatted also in cases where Doxygen's native markup format +# conflicts with that of Markdown. This is only relevant in cases where +# backticks are used. Doxygen's native markup style allows a single quote to end +# a text fragment started with a backtick and then treat it as a piece of quoted +# text, whereas in Markdown such text fragment is treated as verbatim and only +# ends when a second matching backtick is found. Also, Doxygen's native markup +# format requires double quotes to be escaped when they appear in a backtick +# section, whereas this is not needed for Markdown. +# The default value is: YES. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_STRICT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 6. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 6 + +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + +# When enabled Doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. Words listed in the +# AUTOLINK_IGNORE_WORDS tag are excluded from automatic linking. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# This tag specifies a list of words that, when matching the start of a word in +# the documentation, will suppress auto links generation, if it is enabled via +# AUTOLINK_SUPPORT. This list does not affect links explicitly created using # +# or the \link or \ref commands. +# This tag requires that the tag AUTOLINK_SUPPORT is set to YES. + +AUTOLINK_IGNORE_WORDS = + # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let Doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also makes the inheritance and +# collaboration diagrams that involve STL classes more complete and accurate. +# The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. +# The default value is: NO. CPP_CLI_SUPPORT = NO -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse +# them like normal C++ but will assume all classes use public instead of private +# inheritance when no explicit protection keyword is present. +# The default value is: NO. SIP_SUPPORT = NO -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# Doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first +# tag is set to YES then Doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. +# The default value is: NO. DISTRIBUTE_GROUP_DOC = NO -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. SUBGROUPING = YES -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. INLINE_GROUPED_CLASSES = NO -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and -# unions with only public data fields will be shown inline in the documentation -# of the scope in which they are defined (i.e. file, namespace, or group -# documentation), provided this scope is documented. If set to NO (the default), -# structs, classes, and unions are shown on a separate page (for HTML and Man -# pages) or section (for LaTeX and RTF). +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. INLINE_SIMPLE_STRUCTS = YES -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. TYPEDEF_HIDES_STRUCT = YES -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be -# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given -# their name and scope. Since this can be an expensive process and often the -# same symbol appear multiple times in the code, doxygen keeps a cache of -# pre-resolved symbols. If the cache is too small doxygen will become slower. -# If the cache is too large, memory is wasted. The cache size is given by this -# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, Doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# Doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run Doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number of threads Doxygen is allowed to use +# during processing. When set to 0 Doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 512, default value: 1. + +NUM_PROC_THREADS = 1 + +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES +# If the EXTRACT_ALL tag is set to YES, Doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. EXTRACT_ALL = YES -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. EXTRACT_PRIVATE = YES -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. EXTRACT_PACKAGE = YES -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. EXTRACT_STATIC = YES -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_CLASSES = NO -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the +# If the HIDE_UNDOC_NAMESPACES tag is set to YES, Doxygen will hide all +# undocumented namespaces that are normally visible in the namespace hierarchy. +# If set to NO, these namespaces will be included in the various overviews. This +# option has no effect if EXTRACT_ALL is enabled. +# The default value is: YES. + +HIDE_UNDOC_NAMESPACES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the # documentation. +# The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. HIDE_IN_BODY_DOCS = NO -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# With the correct setting of option CASE_SENSE_NAMES Doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and macOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = NO -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. +# If the HIDE_SCOPE_NAMES tag is set to NO then Doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. HIDE_SCOPE_NAMES = NO -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then Doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES then Doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. SHOW_INCLUDE_FILES = YES -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. FORCE_LOCAL_INCLUDES = NO -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. INLINE_INFO = YES -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. +# If the SORT_MEMBER_DOCS tag is set to YES then Doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. SORT_MEMBER_DOCS = YES -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. +# If the SORT_BRIEF_DOCS tag is set to YES then Doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. SORT_BRIEF_DOCS = NO -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then Doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. +# If the SORT_GROUP_NAMES tag is set to YES then Doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. SORT_GROUP_NAMES = NO -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. SORT_BY_SCOPE_NAME = NO -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. +# If the STRICT_PROTO_MATCHING option is enabled and Doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING Doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. STRICT_PROTO_MATCHING = NO -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. GENERATE_TODOLIST = YES -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. GENERATE_TESTLIST = YES -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. GENERATE_BUGLIST = YES -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. GENERATE_DEPRECATEDLIST= YES -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. +# The GENERATE_REQUIREMENTS tag can be used to enable (YES) or disable (NO) the +# requirements page. When enabled, this page is automatically created when at +# least one comment block with a \requirement command appears in the input. +# The default value is: YES. + +GENERATE_REQUIREMENTS = YES + +# The REQ_TRACEABILITY_INFO tag controls if traceability information is shown on +# the requirements page (only relevant when using \requirement comment blocks). +# The setting NO will disable the traceability information altogether. The +# setting UNSATISFIED_ONLY will show a list of requirements that are missing a +# satisfies relation (through the command: \satisfies). Similarly the setting +# UNVERIFIED_ONLY will show a list of requirements that are missing a verifies +# relation (through the command: \verifies). Setting the tag to YES (the +# default) will show both lists if applicable. +# Possible values are: YES, NO, UNSATISFIED_ONLY and UNVERIFIED_ONLY. +# The default value is: YES. +# This tag requires that the tag GENERATE_REQUIREMENTS is set to YES. + +REQ_TRACEABILITY_INFO = YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. ENABLED_SECTIONS = -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. +# The default value is: YES. SHOW_USED_FILES = YES -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. SHOW_FILES = YES -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from +# Doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by Doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated +# by Doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. +# that represents Doxygen's defaults, run Doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. +# +# Note that if you run Doxygen from a directory containing a file called +# DoxygenLayout.xml, Doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. LAYOUT_FILE = -# The CITE_BIB_FILES tag can be used to specify one or more bib files -# containing the references data. This must be a list of .bib files. The -# .bib extension is automatically appended if omitted. Using this command -# requires the bibtex tool to be installed. See also -# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style -# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this -# feature you need bibtex and perl available in the search path. +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. CITE_BIB_FILES = +# The EXTERNAL_TOOL_PATH tag can be used to extend the search path (PATH +# environment variable) so that external tools such as latex and gs can be +# found. +# Note: Directories specified with EXTERNAL_TOOL_PATH are added in front of the +# path already specified by the PATH variable, and are added in the order +# specified. +# Note: This option is particularly useful for macOS version 14 (Sonoma) and +# higher, when running Doxygen from Doxywizard, because in this case any user- +# defined changes to the PATH are ignored. A typical example on macOS is to set +# EXTERNAL_TOOL_PATH = /Library/TeX/texbin /usr/local/bin +# together with the standard path, the full search path used by doxygen when +# launching external tools will then become +# PATH=/Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin + +EXTERNAL_TOOL_PATH = + #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by Doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. +# generated to standard error (stderr) by Doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. WARNINGS = YES -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. +# If the WARN_IF_UNDOCUMENTED tag is set to YES then Doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. WARN_IF_UNDOCUMENTED = YES -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. +# If the WARN_IF_DOC_ERROR tag is set to YES, Doxygen will generate warnings for +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. +# The default value is: YES. WARN_IF_DOC_ERROR = YES -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. +# If WARN_IF_INCOMPLETE_DOC is set to YES, Doxygen will warn about incomplete +# function parameter documentation. If set to NO, Doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, Doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC +# The default value is: NO. WARN_NO_PARAMDOC = NO -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, Doxygen will warn about +# undocumented enumeration values. If set to NO, Doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + +# If WARN_LAYOUT_FILE option is set to YES, Doxygen will warn about issues found +# while parsing the user defined layout file, such as missing or wrong elements. +# See also LAYOUT_FILE for details. If set to NO, problems with the layout file +# will be suppressed. +# The default value is: YES. + +WARN_LAYOUT_FILE = YES + +# If the WARN_AS_ERROR tag is set to YES then Doxygen will immediately stop when +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then Doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the Doxygen process Doxygen will return with a non-zero status. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then Doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined Doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that Doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT +# The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of Doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. INPUT = src # This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. +# that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING +# The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that Doxygen parses. The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). +# See also: INPUT_ENCODING for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by Doxygen. +# +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, +# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be +# provided as Doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. -FILE_PATTERNS = *.c *.h *.dox +FILE_PATTERNS = *.c \ + *.h \ + *.dox -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. -# Note that relative paths are relative to the directory from which doxygen is +# +# Note that relative paths are relative to the directory from which Doxygen is # run. -EXCLUDE = src/fw/vendor src/core/vendor src/boot/vendor +EXCLUDE = src/fw/vendor \ + src/core/vendor \ + src/boot/vendor # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. +# The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = @@ -703,744 +1097,1334 @@ EXCLUDE_PATTERNS = # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test +# ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. EXAMPLE_RECURSIVE = NO -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). IMAGE_PATH = -# The INPUT_FILTER tag can be used to specify a program that doxygen should +# The INPUT_FILTER tag can be used to specify a program that Doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that Doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by Doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by Doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the Doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +# If the IMPLICIT_DIR_DOCS tag is set to YES, any README.md file found in sub- +# directories of the project's root, is used as the documentation for that sub- +# directory, except when the README.md starts with a \dir, \page or \mainpage +# command. If set to NO, the README.md file needs to start with an explicit \dir +# command in order to be used as directory documentation. +# The default value is: YES. + +IMPLICIT_DIR_DOCS = YES + +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. SOURCE_BROWSER = YES -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# multi-line macros, enums or list initialized variables directly into the +# documentation. +# The default value is: NO. INLINE_SOURCES = NO -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C, C++ and Fortran comments will always remain visible. +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct Doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. STRIP_CODE_COMMENTS = YES -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. REFERENCED_BY_RELATION = YES -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. REFERENCES_RELATION = YES -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. REFERENCES_LINK_SOURCE = YES -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of Doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by Doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. +# If the VERBATIM_HEADERS tag is set the YES then Doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. ALPHABETICAL_INDEX = YES -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. +# If the GENERATE_HTML tag is set to YES, Doxygen will generate HTML output +# The default value is: YES. GENERATE_HTML = YES -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is advised to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank Doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that Doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that Doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of Doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank Doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that Doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# style sheet in the HTML output directory as well, or it will be erased! +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank Doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that Doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by Doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the style sheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generates light mode output, DARK always +# generates dark mode output, AUTO_LIGHT automatically sets the mode according +# to the user preference, uses light mode if no preference is set (the default), +# AUTO_DARK automatically sets the mode according to the user preference, uses +# dark mode if no preference is set and TOGGLE allows a user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a color-wheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use gray-scales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of -# entries shown in the various tree structured indices initially; the user -# can expand and collapse entries dynamically later on. Doxygen will expand -# the tree to such a level that at most the specified number of entries are -# visible (unless a fully collapsed tree already exceeds this amount). -# So setting the number of entries 1 will produce a full collapsed tree by -# default. 0 is a special value representing an infinite number of entries -# and will result in a full expanded tree by default. +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then Doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# Doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, Doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. +# If the GENERATE_HTMLHELP tag is set to YES then Doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline (the HTML help workshop was already many +# years in maintenance mode). You can download the HTML help workshop from the +# web archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/https://download.microsoft.com/downl +# oad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by Doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be # written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# Doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the main .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty Doxygen will try to +# run qhelpgenerator on the generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by Doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has more details information than the tab index, you +# could consider setting DISABLE_INDEX to YES when enabling this option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. +# When GENERATE_TREEVIEW is set to YES, the PAGE_OUTLINE_PANEL option determines +# if an additional navigation panel is shown at the right hand side of the +# screen, displaying an outline of the contents of the main page, similar to +# e.g. https://developer.android.com/reference If GENERATE_TREEVIEW is set to +# NO, this option has no effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +PAGE_OUTLINE_PANEL = YES + +# When GENERATE_TREEVIEW is set to YES, the FULL_SIDEBAR option determines if +# the side bar is limited to only the treeview area (value NO) or if it should +# extend to the full height of the window (value YES). Setting this to YES gives +# a layout similar to e.g. https://docs.readthedocs.io with more room for +# contents, but less room for the project logo, title, and description. If +# GENERATE_TREEVIEW is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# Doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. +# When the SHOW_ENUM_VALUES tag is set doxygen will show the specified +# enumeration values besides the enumeration mnemonics. +# The default value is: NO. + +SHOW_ENUM_VALUES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. +# If the EXT_LINKS_IN_WINDOW option is set to YES, Doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. +# If the OBFUSCATE_EMAILS tag is set to YES, Doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + +# If the HTML_FORMULA_FORMAT option is set to svg, Doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# Doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you may also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to -# the MathJax Content Delivery Network so you can quickly see the result without -# installing MathJax. -# However, it is strongly recommended to install a local -# copy of MathJax from http://www.mathjax.org before deployment. +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2, MathJax_3 and MathJax_4. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# https://docs.mathjax.org/en/v2.7/output.html), MathJax version 3 (see: +# https://docs.mathjax.org/en/v3.2/output/index.html) and MathJax version 4 +# (see: +# https://docs.mathjax.org/en/v4.0/output/index.htm). +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. For Mathjax version 2 the +# destination directory should contain the MathJax.js script. For instance, if +# the mathjax directory is located at the same level as the HTML output +# directory, then MATHJAX_RELPATH should be ../mathjax. For Mathjax versions 3 +# and 4 the destination directory should contain the tex-.js script +# (where is either chtml or svg). The default value points to the +# MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. However, it is strongly recommended to install a local +# copy of MathJax from https://www.mathjax.org before deployment. The default +# value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 +# - in case of MathJax version 4: https://cdn.jsdelivr.net/npm/mathjax@4 +# This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see https://docs.mathjax.org/en/v2.7/tex.html): +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# https://docs.mathjax.org/en/v3.2/input/tex/extensions/): +# MATHJAX_EXTENSIONS = ams +# For example for MathJax version 4 (see +# https://docs.mathjax.org/en/v4.0/input/tex/extensions/): +# MATHJAX_EXTENSIONS = units +# Note that for Mathjax version 4 quite a few extensions are already +# automatically loaded. To disable a package in Mathjax version 4 one can use +# the package name prepended with a minus sign (- like MATHJAX_EXTENSIONS += +# -textmacros) +# This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. +# The MATHJAX_CODEFILE tag can be used to specify a file with JavaScript pieces +# of code that will be used on startup of the MathJax code. See the Mathjax site +# for more details: +# - MathJax version 2 (see: +# https://docs.mathjax.org/en/v2.7/) +# - MathJax version 3 (see: +# https://docs.mathjax.org/en/v3.2/) +# - MathJax version 4 (see: +# https://docs.mathjax.org/en/v4.0/) For an example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled Doxygen will generate a search box for +# the HTML output. The underlying search engine uses JavaScript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the JavaScript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /