PixelKey
NeoPixel USB Key
Loading...
Searching...
No Matches
config.h
Go to the documentation of this file.
1#ifndef CONFIG_H
2#define CONFIG_H
3
4#include <stdint.h>
5#include <stdbool.h>
6#include <assert.h>
7#include <stddef.h>
8
9#include "pixelkey_errors.h"
10
18#define CONFIG_DATA_VERSION (1)
19
21typedef struct st_config_neopixel_phy
22{
23 uint16_t frequency_khz;
24 uint8_t duty_cycle_b0;
25 uint8_t duty_cycle_b1;
27
28static_assert(sizeof(config_neopixel_phy_t) == 4, "config_neopixel_phy_t must be 4 bytes or an upgrade path provided.");
29
30// Saved to memory; must be packed!
31#pragma pack(push, 1)
39typedef struct st_config_data
40{
46 struct
47 {
48 uint16_t crc;
49 uint8_t length;
50 uint8_t version;
51 } header;
52 union
53 {
54 struct
55 {
56 uint32_t echo_enabled : 1;
57 uint32_t gamma_enabled : 1;
58 uint32_t : 30;
59 } flags_b;
60 uint32_t flags;
61 };
63 uint32_t framerate;
64 uint32_t num_neopixels;
65 uint8_t max_rgb_value;
68#pragma pack(pop)
69
70static_assert(offsetof(config_data_t, header) == 0, "Config header must be the first element of config_data_t.");
71static_assert(offsetof(config_data_t, header.crc) == 0, "CRC must start at byte 0.");
72static_assert(offsetof(config_data_t, header.length) == 2, "Length must start at byte 2.");
73static_assert(offsetof(config_data_t, header.version) == 3, "Version must start at byte 3.");
74
76typedef struct st_config_api
77{
84 pixelkey_error_t (* write)(config_data_t const * const p_config_data);
91 pixelkey_error_t (* read)(config_data_t ** pp_config_data);
93
94config_api_t const * config(void);
95config_data_t const * config_default(void);
97void config_register(config_api_t const * p_instance);
99
102#endif
void config_register(config_api_t const *p_instance)
Register an API to be used as the current instance.
Definition: config.c:88
config_api_t const * config(void)
Get a pointer to the current API instance.
Definition: config.c:53
config_data_t const * config_get_or_default(void)
Gets a pointer to the saved configuration values or the defaults if an error occurs.
Definition: config.c:71
config_data_t const * config_default(void)
Get a pointer to the default configuration values.
Definition: config.c:62
pixelkey_error_t config_validate(void)
Validates and updates NV memory config if needed; can only be called after config_register.
Definition: config.c:100
pixelkey_error_t
PixelKey errors.
Definition: pixelkey_errors.h:11
Configuration instance API.
Definition: config.h:77
Configuration structure.
Definition: config.h:40
uint32_t num_neopixels
Number of attached neopixels.
Definition: config.h:64
uint8_t max_rgb_value
Maximum brightness allowed for any RGB channel.
Definition: config.h:65
uint16_t crc
CRC-CCITT of all the following fields in the structure.
Definition: config.h:48
float gamma_factor
Gamma correction factor.
Definition: config.h:62
uint32_t echo_enabled
COM echo is enabled.
Definition: config.h:56
uint8_t version
Configuration struct version.
Definition: config.h:50
uint32_t framerate
Frame rate.
Definition: config.h:63
uint32_t gamma_enabled
Gamma correction is enabled.
Definition: config.h:57
uint32_t flags
Configuration flags as a word.
Definition: config.h:60
config_neopixel_phy_t neopixel_phy
PHY configuration.
Definition: config.h:66
uint8_t length
Size of the configuration data struct at the time of save.
Definition: config.h:49
Provides configuration of the NeoPixel PHY to support other chipsets.
Definition: config.h:22
uint8_t duty_cycle_b1
Duty cycle of 1-bit.
Definition: config.h:25
uint8_t duty_cycle_b0
Duty cycle of 0-bit.
Definition: config.h:24
uint16_t frequency_khz
Symbol frequency, in KHz, for the NeoPixel phy.
Definition: config.h:23