Files
ImHex-Patterns/patterns/orp.hexpat
DEREFERENC3D 5b8dde19a9 patterns: Added definition for the OpenRGB profile format (#387)
patterns: Add definition for the OpenRGB profile format (up to version 5)
2025-05-10 13:34:16 +02:00

135 lines
2.6 KiB
Rust

#pragma description OpenRGB Profile
#pragma magic [ 4F 50 45 4E 52 47 42 5F 50 52 4F 46 49 4C 45 00 ] @ 0x00
import type.magic;
import std.mem;
using Controller;
struct Profile {
type::Magic<"OPENRGB_PROFILE\x00"> signature;
u32 version;
Controller controllers[while(!std::mem::eof())];
};
Profile profile @ 0x00;
using Mode;
using Zone;
using led;
using RGBColor;
using _LedAltName;
struct Controller {
u32 size;
s32 device_type;
u16 name_len;
char name[name_len];
u16 vendor_len;
char vendor[vendor_len];
u16 description_len;
char description[description_len];
if (parent.version >= 1) {
u16 version_len;
char version[version_len];
}
u16 serial_len;
char serial[serial_len];
u16 location_len;
char location[location_len];
u16 num_modes;
u32 active_mode;
Mode modes[num_modes];
u16 num_zones;
Zone zones[num_zones];
u16 num_leds;
led leds[num_leds];
u16 num_colors;
RGBColor colors[num_colors];
if (parent.version >= 5) {
u16 num_led_alt_names;
_LedAltName led_alt_names[num_led_alt_names];
u32 flags;
}
};
struct Mode {
u16 name_len;
char name[name_len];
u32 value;
u32 flags;
u32 speed_min;
u32 speed_max;
if (parent.parent.version >= 3) {
u32 brightness_min;
u32 brightness_max;
}
u32 colors_min;
u32 colors_max;
u32 speed;
if (parent.parent.version >= 3) {
u32 brightness;
}
u32 direction;
u32 color_mode;
u16 colors_len;
RGBColor colors[colors_len];
};
using zone_type = s32;
using matrix_map_type;
using segment;
struct Zone {
u16 name_len;
char name[name_len];
zone_type type;
u32 leds_min;
u32 leds_max;
u32 leds_count;
u16 matrix_len;
matrix_map_type matrix[matrix_len];
if (parent.parent.version >= 4) {
u16 segments_len;
segment segments[segments_len];
}
if (parent.parent.version >= 5) {
u32 flags;
}
};
struct led {
u16 name_len;
char name[name_len];
u32 value;
};
struct RGBColor {
u8 red [[color("FF0000")]];
u8 green [[color("00FF00")]];
u8 blue [[color("0000FF")]];
u8 alpha;
} [[
color(std::format("{:02X}{:02X}{:02X}{:02X}", red, green, blue, alpha)),
hex::inline_visualize("color", red, green, blue, alpha)
]];
struct _LedAltName {
u16 name_len;
char name[name_len];
};
struct matrix_map_type {
u32 height;
u32 width;
u32 map[width * height];
};
struct segment {
u16 name_len;
char name[name_len];
zone_type type;
u32 start_idx;
u32 leds_count;
};