diff --git a/lib/momentum/momentum.h b/lib/momentum/momentum.h index bc9dea329..c5dc32526 100644 --- a/lib/momentum/momentum.h +++ b/lib/momentum/momentum.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #ifdef __cplusplus @@ -43,6 +44,13 @@ typedef enum { SpiCount, } SpiHandle; +typedef enum { + VgmColorModeDefault, + VgmColorModeRgbBacklight, + VgmColorModeCustom, + VgmColorModeCount, +} VgmColorMode; + typedef struct { char asset_pack[ASSET_PACKS_NAME_LEN]; uint32_t anim_speed; @@ -79,6 +87,9 @@ typedef struct { FuriHalSerialId uart_esp_channel; FuriHalSerialId uart_nmea_channel; bool file_naming_prefix_after; + VgmColorMode vgm_color_mode; + Rgb565Color vgm_color_fg; + Rgb565Color vgm_color_bg; } MomentumSettings; typedef struct { diff --git a/lib/momentum/settings.c b/lib/momentum/settings.c index 898b98c81..3caaf1d34 100644 --- a/lib/momentum/settings.c +++ b/lib/momentum/settings.c @@ -41,6 +41,9 @@ MomentumSettings momentum_settings = { .uart_esp_channel = FuriHalSerialIdUsart, // pin 13,14 .uart_nmea_channel = FuriHalSerialIdUsart, // pin 13,14 .file_naming_prefix_after = false, // Before + .vgm_color_mode = VgmColorModeDefault, // Default + .vgm_color_fg.value = 0xFC00, // Default Orange + .vgm_color_bg.value = 0x0000, // Default Black }; typedef enum { @@ -110,6 +113,9 @@ static const struct { {setting_enum(uart_esp_channel, FuriHalSerialIdMax)}, {setting_enum(uart_nmea_channel, FuriHalSerialIdMax)}, {setting_bool(file_naming_prefix_after)}, + {setting_enum(vgm_color_mode, VgmColorModeCount)}, + {setting_uint(vgm_color_fg, 0x0000, 0xFFFF)}, + {setting_uint(vgm_color_bg, 0x0000, 0xFFFF)}, }; void momentum_settings_load() { diff --git a/lib/toolbox/colors.h b/lib/toolbox/colors.h index f53f44873..c2acec0bb 100644 --- a/lib/toolbox/colors.h +++ b/lib/toolbox/colors.h @@ -25,6 +25,15 @@ int hsvcmp(const HsvColor* a, const HsvColor* b); void hsv2rgb(const HsvColor* hsv, RgbColor* rgb); void rgb2hsv(const RgbColor* rgb, HsvColor* hsv); +typedef union { + uint16_t value; + struct { + uint8_t r : 5; + uint8_t g : 6; + uint8_t b : 5; + }; +} Rgb565Color; + #ifdef __cplusplus } #endif diff --git a/targets/f7/furi_hal/furi_hal_info.c b/targets/f7/furi_hal/furi_hal_info.c index 385c19eae..7c33c5840 100644 --- a/targets/f7/furi_hal/furi_hal_info.c +++ b/targets/f7/furi_hal/furi_hal_info.c @@ -86,6 +86,35 @@ void furi_hal_info_get(PropertyValueCallback out, char sep, void* context) { property_value_out(&property_context, "%06X", 4, "hardware", "rgb", "led", id_string, __REV(led_value)); } + // VGM Settings + property_value_out( + &property_context, + "%d", + 4, + "hardware", + "vgm", + "color", + "mode", + momentum_settings.vgm_color_mode); + property_value_out( + &property_context, + "%04X", + 4, + "hardware", + "vgm", + "color", + "fg", + momentum_settings.vgm_color_fg.value); + property_value_out( + &property_context, + "%04X", + 4, + "hardware", + "vgm", + "color", + "bg", + momentum_settings.vgm_color_bg.value); + if(sep == '.') { property_value_out( &property_context,