Add Post Processing to process_record (#4892)
[jackhill/qmk/firmware.git] / tmk_core / common / eeconfig.c
CommitLineData
a074364c 1#include <stdint.h>
2#include <stdbool.h>
4d4f7684 3#include "eeprom.h"
a074364c 4#include "eeconfig.h"
c1970e28 5#include "action_layer.h"
a074364c 6
f4094930 7#ifdef STM32_EEPROM_ENABLE
b624f32f 8# include "hal.h"
9# include "eeprom_stm32.h"
621ce29a 10#endif
11
d13ada11
NB
12#if defined(EEPROM_DRIVER)
13# include "eeprom_driver.h"
14#endif
15
e885c793 16/** \brief eeconfig enable
7c9d5ace 17 *
18 * FIXME: needs doc
19 */
b624f32f 20__attribute__((weak)) void eeconfig_init_user(void) {
21 // Reset user EEPROM value to blank, rather than to a set value
22 eeconfig_update_user(0);
e885c793
DJ
23}
24
b624f32f 25__attribute__((weak)) void eeconfig_init_kb(void) {
26 // Reset Keyboard EEPROM value to blank, rather than to a set value
27 eeconfig_update_kb(0);
e885c793 28
b624f32f 29 eeconfig_init_user();
e885c793
DJ
30}
31
e885c793
DJ
32/*
33 * FIXME: needs doc
34 */
35void eeconfig_init_quantum(void) {
f4094930 36#ifdef STM32_EEPROM_ENABLE
2bfac351 37 EEPROM_Erase();
d13ada11
NB
38#endif
39#if defined(EEPROM_DRIVER)
40 eeprom_driver_erase();
621ce29a 41#endif
b624f32f 42 eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
43 eeprom_update_byte(EECONFIG_DEBUG, 0);
44 eeprom_update_byte(EECONFIG_DEFAULT_LAYER, 0);
45 default_layer_state = 0;
46 eeprom_update_byte(EECONFIG_KEYMAP_LOWER_BYTE, 0);
47 eeprom_update_byte(EECONFIG_KEYMAP_UPPER_BYTE, 0);
48 eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0);
49 eeprom_update_byte(EECONFIG_BACKLIGHT, 0);
50 eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default
51 eeprom_update_dword(EECONFIG_RGBLIGHT, 0);
52 eeprom_update_byte(EECONFIG_STENOMODE, 0);
53 eeprom_update_dword(EECONFIG_HAPTIC, 0);
54 eeprom_update_byte(EECONFIG_VELOCIKEY, 0);
55 eeprom_update_dword(EECONFIG_RGB_MATRIX, 0);
56 eeprom_update_byte(EECONFIG_RGB_MATRIX_SPEED, 0);
57
17794e0b
JC
58 // TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
59 // within the emulated eeprom via dfu-util or another tool
60#if defined INIT_EE_HANDS_LEFT
a91c0c47 61# pragma message "Faking EE_HANDS for left hand"
17794e0b
JC
62 eeprom_update_byte(EECONFIG_HANDEDNESS, 1);
63#elif defined INIT_EE_HANDS_RIGHT
a91c0c47 64# pragma message "Faking EE_HANDS for right hand"
17794e0b
JC
65 eeprom_update_byte(EECONFIG_HANDEDNESS, 0);
66#endif
67
b624f32f 68 eeconfig_init_kb();
e885c793
DJ
69}
70
71/** \brief eeconfig initialization
72 *
73 * FIXME: needs doc
74 */
b624f32f 75void eeconfig_init(void) { eeconfig_init_quantum(); }
a074364c 76
7c9d5ace 77/** \brief eeconfig enable
78 *
79 * FIXME: needs doc
80 */
b624f32f 81void eeconfig_enable(void) { eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); }
a074364c 82
7c9d5ace 83/** \brief eeconfig disable
84 *
85 * FIXME: needs doc
86 */
b624f32f 87void eeconfig_disable(void) {
f4094930 88#ifdef STM32_EEPROM_ENABLE
2bfac351 89 EEPROM_Erase();
d13ada11
NB
90#endif
91#if defined(EEPROM_DRIVER)
92 eeprom_driver_erase();
621ce29a 93#endif
e885c793 94 eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF);
a074364c 95}
96
7c9d5ace 97/** \brief eeconfig is enabled
98 *
99 * FIXME: needs doc
100 */
b624f32f 101bool eeconfig_is_enabled(void) { return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER); }
a074364c 102
e885c793
DJ
103/** \brief eeconfig is disabled
104 *
105 * FIXME: needs doc
106 */
b624f32f 107bool eeconfig_is_disabled(void) { return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER_OFF); }
e885c793 108
7c9d5ace 109/** \brief eeconfig read debug
110 *
111 * FIXME: needs doc
112 */
b624f32f 113uint8_t eeconfig_read_debug(void) { return eeprom_read_byte(EECONFIG_DEBUG); }
7c9d5ace 114/** \brief eeconfig update debug
115 *
116 * FIXME: needs doc
117 */
620ac4b2 118void eeconfig_update_debug(uint8_t val) { eeprom_update_byte(EECONFIG_DEBUG, val); }
a074364c 119
7c9d5ace 120/** \brief eeconfig read default layer
121 *
122 * FIXME: needs doc
123 */
b624f32f 124uint8_t eeconfig_read_default_layer(void) { return eeprom_read_byte(EECONFIG_DEFAULT_LAYER); }
7c9d5ace 125/** \brief eeconfig update default layer
126 *
127 * FIXME: needs doc
128 */
620ac4b2 129void eeconfig_update_default_layer(uint8_t val) { eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val); }
a074364c 130
7c9d5ace 131/** \brief eeconfig read keymap
132 *
133 * FIXME: needs doc
134 */
b624f32f 135uint16_t eeconfig_read_keymap(void) { return (eeprom_read_byte(EECONFIG_KEYMAP_LOWER_BYTE) | (eeprom_read_byte(EECONFIG_KEYMAP_UPPER_BYTE) << 8)); }
7c9d5ace 136/** \brief eeconfig update keymap
137 *
138 * FIXME: needs doc
139 */
d534c72a
SW
140void eeconfig_update_keymap(uint16_t val) {
141 eeprom_update_byte(EECONFIG_KEYMAP_LOWER_BYTE, val & 0xFF);
b624f32f 142 eeprom_update_byte(EECONFIG_KEYMAP_UPPER_BYTE, (val >> 8) & 0xFF);
d534c72a 143}
a074364c 144
7c9d5ace 145/** \brief eeconfig read backlight
146 *
147 * FIXME: needs doc
148 */
b624f32f 149uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); }
7c9d5ace 150/** \brief eeconfig update backlight
151 *
152 * FIXME: needs doc
153 */
620ac4b2 154void eeconfig_update_backlight(uint8_t val) { eeprom_update_byte(EECONFIG_BACKLIGHT, val); }
0faa18ea 155
7c9d5ace 156/** \brief eeconfig read audio
157 *
158 * FIXME: needs doc
159 */
b624f32f 160uint8_t eeconfig_read_audio(void) { return eeprom_read_byte(EECONFIG_AUDIO); }
7c9d5ace 161/** \brief eeconfig update audio
162 *
163 * FIXME: needs doc
164 */
620ac4b2 165void eeconfig_update_audio(uint8_t val) { eeprom_update_byte(EECONFIG_AUDIO, val); }
e885c793 166
e885c793
DJ
167/** \brief eeconfig read kb
168 *
169 * FIXME: needs doc
170 */
b624f32f 171uint32_t eeconfig_read_kb(void) { return eeprom_read_dword(EECONFIG_KEYBOARD); }
e885c793
DJ
172/** \brief eeconfig update kb
173 *
174 * FIXME: needs doc
175 */
e885c793 176void eeconfig_update_kb(uint32_t val) { eeprom_update_dword(EECONFIG_KEYBOARD, val); }
ad8dbd5c 177
e885c793
DJ
178/** \brief eeconfig read user
179 *
180 * FIXME: needs doc
181 */
b624f32f 182uint32_t eeconfig_read_user(void) { return eeprom_read_dword(EECONFIG_USER); }
e885c793
DJ
183/** \brief eeconfig update user
184 *
185 * FIXME: needs doc
186 */
187void eeconfig_update_user(uint32_t val) { eeprom_update_dword(EECONFIG_USER, val); }
188
ad8dbd5c
JC
189/** \brief eeconfig read haptic
190 *
191 * FIXME: needs doc
192 */
b624f32f 193uint32_t eeconfig_read_haptic(void) { return eeprom_read_dword(EECONFIG_HAPTIC); }
ad8dbd5c 194/** \brief eeconfig update haptic
2cee371b 195 *
196 * FIXME: needs doc
197 */
198void eeconfig_update_haptic(uint32_t val) { eeprom_update_dword(EECONFIG_HAPTIC, val); }
ad8dbd5c
JC
199
200/** \brief eeconfig read split handedness
201 *
202 * FIXME: needs doc
203 */
204bool eeconfig_read_handedness(void) { return !!eeprom_read_byte(EECONFIG_HANDEDNESS); }
205/** \brief eeconfig update split handedness
206 *
207 * FIXME: needs doc
208 */
209void eeconfig_update_handedness(bool val) { eeprom_update_byte(EECONFIG_HANDEDNESS, !!val); }