VGM/RPC: Rework custom colors, smoother config, better rainbow support (#53)

* first poc works

* rainbow mode now works over rpc

still not done refrash rate from flipper change and is slow so the rainbow mode doesnt look good

* transmit VgmMode

* use all the 32bit

* some config stuff

* sync apps

* Change protobuf repo

* Some lib naming changes and cleanup

* Format protobuf

* Update from RGB backlight if enabled

* Remove old expansion toggling

* Update settings UI

* Fix searching previous value

* VGM Tool: Add new RGB firmware

* Update changelog

* These are unused

---------

Co-authored-by: Willy-JL <49810075+Willy-JL@users.noreply.github.com>
This commit is contained in:
HaxSam
2024-06-02 07:41:47 +00:00
committed by GitHub
parent f17b19ed7d
commit 2319475dd0
17 changed files with 200 additions and 232 deletions

8
.gitmodules vendored
View File

@@ -1,6 +1,10 @@
[submodule "applications/external"]
path = applications/external
url = https://github.com/Next-Flip/Momentum-Apps.git
[submodule "assets/protobuf"]
path = assets/protobuf
url = https://github.com/Next-Flip/flipperzero-protobuf.git
shallow = false
[submodule "lib/mlib"]
path = lib/mlib
url = https://github.com/P-p-H-d/mlib.git
@@ -10,10 +14,6 @@
[submodule "lib/nanopb"]
path = lib/nanopb
url = https://github.com/nanopb/nanopb.git
[submodule "assets/protobuf"]
path = assets/protobuf
url = https://github.com/flipperdevices/flipperzero-protobuf.git
shallow = false
[submodule "lib/libusb_stm32"]
path = lib/libusb_stm32
url = https://github.com/flipperdevices/libusb_stm32.git

View File

@@ -1,5 +1,7 @@
<!-- ### Breaking Changes:
- -->
### Breaking Changes:
- VGM: Reworked color customization functionality over RPC (by @HaxSam & @Willy-JL)
- Better rainbow support, more responsive config, custom fore/back-ground
- If you used this, need to reflash your VGM and reconfigure the colors
### Added:
- Sub-GHz: New Legrand doorbell protocol (by @user890104)
@@ -7,6 +9,7 @@
### Updated:
- Apps:
- VGM Tool: Add new RGB VGM firmware to support Flipper FW changes (by @HaxSam)
- Picopass: Add acknowledgements page (by @bettse)
- Authenticator: Fix URL format (by @akopachov)
- Many apps updated for new message queue (by @Willy-JL)
@@ -17,5 +20,5 @@
- FBT: Consistent version/branch info, fix gitorigin (by @Willy-JL)
- OFW: Accessor: disable expansion service on start (by @skotopes)
<!-- ### Removed:
- -->
### Removed:
- API: Removed `Rgb565Color` and `rgb565cmp()` since VGM colors use normal RGB colors now

View File

@@ -61,7 +61,7 @@ typedef struct {
bool subghz_extend;
bool subghz_bypass;
RgbColor lcd_color;
Rgb565Color vgm_color;
RgbColor vgm_color;
char device_name[FURI_HAL_VERSION_ARRAY_NAME_LENGTH];
int32_t dolphin_level;
int32_t dolphin_angry;

View File

@@ -46,25 +46,25 @@ static const struct {
RgbColor color;
} lcd_colors[] = {
// clang-format off
{"Off", {0, 0, 0}},
{"Orange", {255, 69, 0}},
{"Red", {255, 0, 0}},
{"Maroon", {128, 0, 0}},
{"Yellow", {255, 255, 0}},
{"Olive", {128, 128, 0}},
{"Lime", {0, 255, 0}},
{"Green", {0, 128, 0}},
{"Aqua", {0, 255, 127}},
{"Cyan", {0, 210, 210}},
{"Azure", {0, 127, 255}},
{"Teal", {0, 128, 128}},
{"Blue", {0, 0, 255}},
{"Navy", {0, 0, 128}},
{"Purple", {128, 0, 128}},
{"Fuchsia", {255, 0, 255}},
{"Pink", {173, 31, 173}},
{"Brown", {165, 42, 42}},
{"White", {255, 192, 203}},
{"Off", {{0, 0, 0}}},
{"Orange", {{255, 69, 0}}},
{"Red", {{255, 0, 0}}},
{"Maroon", {{128, 0, 0}}},
{"Yellow", {{255, 255, 0}}},
{"Olive", {{128, 128, 0}}},
{"Lime", {{0, 255, 0}}},
{"Green", {{0, 128, 0}}},
{"Aqua", {{0, 255, 127}}},
{"Cyan", {{0, 210, 210}}},
{"Azure", {{0, 127, 255}}},
{"Teal", {{0, 128, 128}}},
{"Blue", {{0, 0, 255}}},
{"Navy", {{0, 0, 128}}},
{"Purple", {{128, 0, 128}}},
{"Fuchsia", {{255, 0, 255}}},
{"Pink", {{173, 31, 173}}},
{"Brown", {{165, 42, 42}}},
{"White", {{255, 192, 203}}},
// clang-format on
};
static const size_t lcd_sz = COUNT_OF(lcd_colors);
@@ -74,10 +74,6 @@ static void momentum_app_scene_misc_screen_lcd_color_changed(VariableItem* item,
variable_item_set_current_value_text(item, lcd_colors[index].name);
rgb_backlight_set_color(led, &lcd_colors[index].color);
app->save_backlight = true;
if(momentum_settings.vgm_color_mode == VgmColorModeRgbBacklight) {
expansion_disable(app->expansion);
expansion_enable(app->expansion);
}
}
static void momentum_app_scene_misc_screen_lcd_color_0_changed(VariableItem* item) {
momentum_app_scene_misc_screen_lcd_color_changed(item, 0);

View File

@@ -43,10 +43,6 @@ bool momentum_app_scene_misc_screen_color_on_event(void* context, SceneManagerEv
scene_manager_get_scene_state(app->scene_manager, MomentumAppSceneMiscScreenColor),
&app->lcd_color);
app->save_backlight = true;
if(momentum_settings.vgm_color_mode == VgmColorModeRgbBacklight) {
expansion_disable(app->expansion);
expansion_enable(app->expansion);
}
scene_manager_previous_scene(app->scene_manager);
break;
default:

View File

@@ -1,7 +1,6 @@
#include "../momentum_app.h"
enum VarItemListIndex {
VarItemListIndexColors,
VarItemListIndexForeground,
VarItemListIndexBackground,
};
@@ -11,78 +10,74 @@ void momentum_app_scene_misc_vgm_var_item_list_callback(void* context, uint32_t
view_dispatcher_send_custom_event(app->view_dispatcher, index);
}
const char* const colors_names[VgmColorModeCount] = {
"Default",
"Custom",
"Rainbow",
"RGB Backlight",
};
static void momentum_app_scene_misc_vgm_colors_changed(VariableItem* item) {
MomentumApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, colors_names[index]);
momentum_settings.vgm_color_mode = index;
app->save_settings = true;
variable_item_set_locked(
variable_item_list_get(app->var_item_list, VarItemListIndexForeground),
index != VgmColorModeCustom,
NULL);
variable_item_set_locked(
variable_item_list_get(app->var_item_list, VarItemListIndexBackground),
index != VgmColorModeCustom,
NULL);
expansion_disable(app->expansion);
expansion_enable(app->expansion);
}
static const struct {
char* name;
Rgb565Color color;
RgbColor color;
} vgm_colors[] = {
// clang-format off
{"Orange", {0xFC00}},
{"Black", {0x0000}},
{"Red", {0xF800}},
{"Maroon", {0x8000}},
{"Yellow", {0xFFE0}},
{"Olive", {0x8400}},
{"Lime", {0x07E0}},
{"Green", {0x0400}},
{"Aqua", {0x07EF}},
{"Cyan", {0x069A}},
{"Azure", {0x03FF}},
{"Teal", {0x0410}},
{"Blue", {0x001F}},
{"Navy", {0x0010}},
{"Purple", {0x8010}},
{"Fuchsia", {0xF81F}},
{"Pink", {0xA8F5}},
{"Brown", {0xA145}},
{"White", {0xFFFF}},
{"Default", {{0, 0, 0}}},
{"Rainbow", {{0, 0, 0}}},
{"RgbMod", {{0, 0, 0}}},
{"Black", {{0, 0, 0}}},
{"Orange", {{255, 130, 0}}},
{"Red", {{255, 0, 0}}},
{"Maroon", {{128, 0, 0}}},
{"Yellow", {{255, 255, 0}}},
{"Olive", {{128, 128, 0}}},
{"Lime", {{0, 255, 0}}},
{"Green", {{0, 128, 0}}},
{"Aqua", {{0, 255, 127}}},
{"Cyan", {{0, 210, 210}}},
{"Azure", {{0, 127, 255}}},
{"Teal", {{0, 128, 128}}},
{"Blue", {{0, 0, 255}}},
{"Navy", {{0, 0, 128}}},
{"Purple", {{128, 0, 128}}},
{"Fuchsia", {{255, 0, 255}}},
{"Pink", {{173, 31, 173}}},
{"Brown", {{165, 42, 42}}},
{"White", {{255, 192, 203}}},
// clang-format on
};
static const size_t vgm_colors_count = COUNT_OF(vgm_colors);
static void momentum_app_scene_misc_vgm_foreground_changed(VariableItem* item) {
MomentumApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, vgm_colors[index].name);
momentum_settings.vgm_color_fg = vgm_colors[index].color;
momentum_settings.rpc_color_fg.rgb = vgm_colors[index].color;
if(strcmp("Default", vgm_colors[index].name) == 0) {
momentum_settings.rpc_color_fg.mode = ScreenColorModeDefault;
} else if(strcmp("Rainbow", vgm_colors[index].name) == 0) {
momentum_settings.rpc_color_fg.mode = ScreenColorModeRainbow;
} else if(strcmp("RgbMod", vgm_colors[index].name) == 0) {
momentum_settings.rpc_color_fg.mode = ScreenColorModeRgbBacklight;
} else {
momentum_settings.rpc_color_fg.mode = ScreenColorModeCustom;
}
app->save_settings = true;
if(momentum_settings.vgm_color_mode == VgmColorModeCustom) {
expansion_disable(app->expansion);
expansion_enable(app->expansion);
}
}
static void momentum_app_scene_misc_vgm_background_changed(VariableItem* item) {
MomentumApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, vgm_colors[index].name);
momentum_settings.vgm_color_bg = vgm_colors[index].color;
app->save_settings = true;
if(momentum_settings.vgm_color_mode == VgmColorModeCustom) {
expansion_disable(app->expansion);
expansion_enable(app->expansion);
momentum_settings.rpc_color_bg.rgb = vgm_colors[index].color;
if(strcmp("Default", vgm_colors[index].name) == 0) {
momentum_settings.rpc_color_bg.mode = ScreenColorModeDefault;
} else if(strcmp("Rainbow", vgm_colors[index].name) == 0) {
momentum_settings.rpc_color_bg.mode = ScreenColorModeRainbow;
} else if(strcmp("RgbMod", vgm_colors[index].name) == 0) {
momentum_settings.rpc_color_bg.mode = ScreenColorModeRgbBacklight;
} else {
momentum_settings.rpc_color_bg.mode = ScreenColorModeCustom;
}
app->save_settings = true;
}
void momentum_app_scene_misc_vgm_on_enter(void* context) {
@@ -91,40 +86,38 @@ void momentum_app_scene_misc_vgm_on_enter(void* context) {
VariableItem* item;
uint8_t value_index;
item = variable_item_list_add(
var_item_list,
"VGM Colors",
VgmColorModeCount,
momentum_app_scene_misc_vgm_colors_changed,
app);
value_index = momentum_settings.vgm_color_mode;
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, colors_names[value_index]);
item = variable_item_list_add(
var_item_list,
"Foreground",
vgm_colors_count,
momentum_app_scene_misc_vgm_foreground_changed,
app);
Rgb565Color color = momentum_settings.vgm_color_fg;
bool found = false;
for(size_t i = 0; i < vgm_colors_count; i++) {
if(rgb565cmp(&color, &vgm_colors[i].color) != 0) continue;
ScreenFrameColor color = momentum_settings.rpc_color_fg;
bool found = true;
if(color.mode == ScreenColorModeRainbow) {
value_index = 1;
} else if(color.mode == ScreenColorModeRgbBacklight) {
value_index = 2;
} else if(color.mode == ScreenColorModeCustom) {
found = false;
for(size_t i = 3; i < vgm_colors_count; i++) {
if(rgbcmp(&color.rgb, &vgm_colors[i].color) != 0) continue;
value_index = i;
found = true;
break;
}
variable_item_set_current_value_index(item, found ? value_index : vgm_colors_count);
} else {
value_index = 0;
}
variable_item_set_current_value_index(item, found ? value_index : 0);
if(found) {
variable_item_set_current_value_text(item, vgm_colors[value_index].name);
} else {
char str[5];
snprintf(str, sizeof(str), "%04X", color.value);
char str[7];
snprintf(str, sizeof(str), "%02X%02X%02X", color.rgb.r, color.rgb.g, color.rgb.b);
variable_item_set_current_value_text(item, str);
}
variable_item_set_locked(
item, momentum_settings.vgm_color_mode != VgmColorModeCustom, "Need Custom\nColors!");
item = variable_item_list_add(
var_item_list,
@@ -132,24 +125,32 @@ void momentum_app_scene_misc_vgm_on_enter(void* context) {
vgm_colors_count,
momentum_app_scene_misc_vgm_background_changed,
app);
color = momentum_settings.vgm_color_bg;
color = momentum_settings.rpc_color_bg;
found = true;
if(color.mode == ScreenColorModeRainbow) {
value_index = 1;
} else if(color.mode == ScreenColorModeRgbBacklight) {
value_index = 2;
} else if(color.mode == ScreenColorModeCustom) {
found = false;
for(size_t i = 0; i < vgm_colors_count; i++) {
if(rgb565cmp(&color, &vgm_colors[i].color) != 0) continue;
for(size_t i = 3; i < vgm_colors_count; i++) {
if(rgbcmp(&color.rgb, &vgm_colors[i].color) != 0) continue;
value_index = i;
found = true;
break;
}
variable_item_set_current_value_index(item, found ? value_index : vgm_colors_count);
} else {
value_index = 0;
}
variable_item_set_current_value_index(item, found ? value_index : 0);
if(found) {
variable_item_set_current_value_text(item, vgm_colors[value_index].name);
} else {
char str[5];
snprintf(str, sizeof(str), "%04X", color.value);
char str[7];
snprintf(str, sizeof(str), "%02X%02X%02X", color.rgb.r, color.rgb.g, color.rgb.b);
variable_item_set_current_value_text(item, str);
}
variable_item_set_locked(
item, momentum_settings.vgm_color_mode != VgmColorModeCustom, "Need Custom\nColors!");
variable_item_list_set_enter_callback(
var_item_list, momentum_app_scene_misc_vgm_var_item_list_callback, app);
@@ -167,6 +168,7 @@ bool momentum_app_scene_misc_vgm_on_event(void* context, SceneManagerEvent event
if(event.type == SceneManagerEventTypeCustom) {
scene_manager_set_scene_state(app->scene_manager, MomentumAppSceneMiscVgm, event.event);
consumed = true;
switch(event.event) {
case VarItemListIndexForeground:
case VarItemListIndexBackground:

View File

@@ -14,14 +14,13 @@ void momentum_app_scene_misc_vgm_color_on_enter(void* context) {
MomentumApp* app = context;
ByteInput* byte_input = app->byte_input;
byte_input_set_header_text(byte_input, "Set VGM Color (RGB565)");
byte_input_set_header_text(byte_input, "Set VGM Color (#RRGGBB)");
if(scene_manager_get_scene_state(app->scene_manager, MomentumAppSceneMiscVgmColor)) {
app->vgm_color = momentum_settings.vgm_color_bg;
app->vgm_color = momentum_settings.rpc_color_bg.rgb;
} else {
app->vgm_color = momentum_settings.vgm_color_fg;
app->vgm_color = momentum_settings.rpc_color_fg.rgb;
}
app->vgm_color.value = __REVSH(app->vgm_color.value);
byte_input_set_result_callback(
byte_input,
@@ -42,17 +41,12 @@ bool momentum_app_scene_misc_vgm_color_on_event(void* context, SceneManagerEvent
consumed = true;
switch(event.event) {
case ByteInputResultOk:
app->vgm_color.value = __REVSH(app->vgm_color.value);
if(scene_manager_get_scene_state(app->scene_manager, MomentumAppSceneMiscVgmColor)) {
momentum_settings.vgm_color_bg = app->vgm_color;
momentum_settings.rpc_color_bg.rgb = app->vgm_color;
} else {
momentum_settings.vgm_color_fg = app->vgm_color;
momentum_settings.rpc_color_fg.rgb = app->vgm_color;
}
app->save_settings = true;
if(momentum_settings.vgm_color_mode == VgmColorModeCustom) {
expansion_disable(app->expansion);
expansion_enable(app->expansion);
}
scene_manager_previous_scene(app->scene_manager);
break;
default:

View File

@@ -1,6 +1,8 @@
#include "rpc_i.h"
#include <gui/gui_i.h>
#include <assets_icons.h>
#include <momentum/momentum.h>
#include <rgb_backlight.h>
#include <flipper.pb.h>
#include <gui.pb.h>
@@ -97,6 +99,34 @@ static void rpc_system_gui_screen_stream_frame_callback(
rpc_gui->transmit_frame->content.gui_screen_frame.orientation =
rpc_system_gui_screen_orientation_map[orientation];
if(momentum_settings.rpc_color_fg.mode == ScreenColorModeRgbBacklight) {
ScreenFrameColor fg_color;
if(rgb_backlight_get_rainbow_mode() == RGBBacklightRainbowModeOff) {
fg_color.mode = ScreenColorModeCustom;
rgb_backlight_get_color(0, &fg_color.rgb);
} else {
fg_color.mode = ScreenColorModeRainbow;
}
rpc_gui->transmit_frame->content.gui_screen_frame.fg_color = fg_color.value;
} else {
rpc_gui->transmit_frame->content.gui_screen_frame.fg_color =
momentum_settings.rpc_color_fg.value;
}
if(momentum_settings.rpc_color_bg.mode == ScreenColorModeRgbBacklight) {
ScreenFrameColor bg_color;
if(rgb_backlight_get_rainbow_mode() == RGBBacklightRainbowModeOff) {
bg_color.mode = ScreenColorModeCustom;
rgb_backlight_get_color(0, &bg_color.rgb);
} else {
bg_color.mode = ScreenColorModeRainbow;
}
rpc_gui->transmit_frame->content.gui_screen_frame.bg_color = bg_color.value;
} else {
rpc_gui->transmit_frame->content.gui_screen_frame.bg_color =
momentum_settings.rpc_color_bg.value;
}
furi_thread_flags_set(furi_thread_get_id(rpc_gui->transmit_thread), RpcGuiWorkerFlagTransmit);
}

View File

@@ -35,9 +35,9 @@ static struct {
} rgb_settings = {
.colors =
{
{255, 69, 0},
{255, 69, 0},
{255, 69, 0},
{{255, 69, 0}},
{{255, 69, 0}},
{{255, 69, 0}},
},
.rainbow_mode = RGBBacklightRainbowModeOff,
.rainbow_speed = 5,
@@ -58,7 +58,7 @@ static struct {
.enabled = false,
.last_brightness = 0,
.rainbow_timer = NULL,
.rainbow_hsv = {0, 255, 255},
.rainbow_hsv = {{0, 255, 255}},
};
void rgb_backlight_load_settings(bool enabled) {

View File

@@ -46,12 +46,20 @@ typedef enum {
} SpiHandle;
typedef enum {
VgmColorModeDefault,
VgmColorModeCustom,
VgmColorModeRainbow,
VgmColorModeRgbBacklight,
VgmColorModeCount,
} VgmColorMode;
ScreenColorModeDefault,
ScreenColorModeCustom,
ScreenColorModeRainbow,
ScreenColorModeRgbBacklight,
ScreenColorModeCount,
} ScreenColorMode;
typedef union __attribute__((packed)) {
struct {
ScreenColorMode mode;
RgbColor rgb;
};
uint32_t value;
} ScreenFrameColor;
typedef struct {
char asset_pack[ASSET_PACKS_NAME_LEN];
@@ -87,10 +95,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;
FuriHalVersionColor spoof_color;
ScreenFrameColor rpc_color_fg;
ScreenFrameColor rpc_color_bg;
} MomentumSettings;
typedef struct {

View File

@@ -39,10 +39,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 = 0x0000, // Default Black
.vgm_color_bg.value = 0xFC00, // Default Orange
.spoof_color = FuriHalVersionColorUnknown, // Real
.rpc_color_fg = {{ScreenColorModeDefault, {.value = 0x000000}}}, // Default Black
.rpc_color_bg = {{ScreenColorModeDefault, {.value = 0xFF8200}}}, // Default Orange
};
typedef enum {
@@ -110,10 +109,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)},
{setting_enum(spoof_color, FuriHalVersionColorCount)},
{setting_uint(rpc_color_fg, 0x000000, 0xFFFFFF)},
{setting_uint(rpc_color_bg, 0x000000, 0xFFFFFF)},
};
void momentum_settings_load(void) {

View File

@@ -86,7 +86,3 @@ void rgb2hsv(const RgbColor* rgb, HsvColor* hsv) {
hsv->h = 171 + 43 * (rgb->r - rgb->g) / (rgbMax - rgbMin);
}
}
inline int rgb565cmp(const Rgb565Color* a, const Rgb565Color* b) {
return memcmp(a, b, sizeof(Rgb565Color));
}

View File

@@ -7,35 +7,33 @@
extern "C" {
#endif
typedef struct {
typedef union __attribute__((packed)) {
struct {
uint8_t r;
uint8_t g;
uint8_t b;
};
uint32_t value : 24;
} RgbColor;
typedef struct {
typedef union __attribute__((packed)) {
struct {
uint8_t h;
uint8_t s;
uint8_t v;
};
uint32_t value : 24;
} HsvColor;
_Static_assert(sizeof(RgbColor) == 3, "RGB color must be 24-bit");
_Static_assert(sizeof(HsvColor) == 3, "HSV color must be 24-bit");
int rgbcmp(const RgbColor* a, const RgbColor* b);
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 {
uint16_t r : 5;
uint16_t g : 6;
uint16_t b : 5;
} FURI_PACKED;
} Rgb565Color;
int rgb565cmp(const Rgb565Color* a, const Rgb565Color* b);
#ifdef __cplusplus
}
#endif

View File

@@ -3024,7 +3024,6 @@ Function,-,rename,int,"const char*, const char*"
Function,-,renameat,int,"int, const char*, int, const char*"
Function,-,rewind,void,FILE*
Function,+,rgb2hsv,void,"const RgbColor*, HsvColor*"
Function,+,rgb565cmp,int,"const Rgb565Color*, const Rgb565Color*"
Function,+,rgb_backlight_get_color,void,"uint8_t, RgbColor*"
Function,+,rgb_backlight_get_rainbow_interval,uint32_t,
Function,+,rgb_backlight_get_rainbow_mode,RGBBacklightRainbowMode,
1 entry status name type params
3024 Function - renameat int int, const char*, int, const char*
3025 Function - rewind void FILE*
3026 Function + rgb2hsv void const RgbColor*, HsvColor*
Function + rgb565cmp int const Rgb565Color*, const Rgb565Color*
3027 Function + rgb_backlight_get_color void uint8_t, RgbColor*
3028 Function + rgb_backlight_get_rainbow_interval uint32_t
3029 Function + rgb_backlight_get_rainbow_mode RGBBacklightRainbowMode

View File

@@ -70,57 +70,6 @@ void furi_hal_info_get(PropertyValueCallback out, char sep, void* context) {
property_value_out(
&property_context, "%d", 2, "hardware", "color", furi_hal_version_get_hw_color());
// RGB Settings
property_value_out(
&property_context,
"%d",
4,
"hardware",
"screen",
"rgb",
"enabled",
momentum_settings.rgb_backlight);
for(int i = 0; i < SK6805_get_led_count(); i++) {
RgbColor rgb;
rgb_backlight_get_color(i, &rgb);
uint32_t led_value = 0;
memcpy(((void*)&led_value) + 1, &rgb, sizeof(RgbColor));
char led_string[5] = {'l', 'e', 'd', '0' + i, '\0'};
property_value_out(
&property_context, "%06X", 4, "hardware", "screen", "rgb", led_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,