diff options
author | Drashna Jaelre <drashna@live.com> | 2018-10-01 17:53:14 -0700 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2018-10-01 20:53:14 -0400 |
commit | e885c793bcffcba03e18e93e41120b21cdfb6b75 (patch) | |
tree | 9018aab46625ff555b32190dd3e141a39f2ef872 /tmk_core | |
parent | 4318797d198b58bb807b3e436c7d8924d8b4a6fe (diff) | |
download | qmk_firmware-e885c793bcffcba03e18e93e41120b21cdfb6b75.tar.gz qmk_firmware-e885c793bcffcba03e18e93e41120b21cdfb6b75.zip |
Add Function level EECONFIG code for EEPROM (#3084)
* Add Function level EEPROM configuration
Add kb and user functions for EEPROM, and example of how to use it.
* Bug fixes and demo
* Additional cleanup
* Add EEPROM reset macro to example
* Forgot init function in list
* Move eeconfig_init_quantum function to quantum.c and actually set default layer
* See if removing weak quantum function fixes issue
* Fix travis compile error
* Remove ifdef blocks from EECONFIG so settings are always set
* Fix for ARM EEPROM updates
* Fix merge issues
* Fix potential STM32 EEPROM issues
Diffstat (limited to 'tmk_core')
-rw-r--r-- | tmk_core/common/eeconfig.c | 103 | ||||
-rw-r--r-- | tmk_core/common/eeconfig.h | 44 |
2 files changed, 107 insertions, 40 deletions
diff --git a/tmk_core/common/eeconfig.c b/tmk_core/common/eeconfig.c index 35de574a9..0fec410a9 100644 --- a/tmk_core/common/eeconfig.c +++ b/tmk_core/common/eeconfig.c | |||
@@ -8,32 +8,54 @@ | |||
8 | #include "eeprom_stm32.h" | 8 | #include "eeprom_stm32.h" |
9 | #endif | 9 | #endif |
10 | 10 | ||
11 | /** \brief eeconfig initialization | 11 | extern uint32_t default_layer_state; |
12 | /** \brief eeconfig enable | ||
12 | * | 13 | * |
13 | * FIXME: needs doc | 14 | * FIXME: needs doc |
14 | */ | 15 | */ |
15 | void eeconfig_init(void) | 16 | __attribute__ ((weak)) |
16 | { | 17 | void eeconfig_init_user(void) { |
18 | // Reset user EEPROM value to blank, rather than to a set value | ||
19 | eeconfig_update_user(0); | ||
20 | } | ||
21 | |||
22 | __attribute__ ((weak)) | ||
23 | void eeconfig_init_kb(void) { | ||
24 | // Reset Keyboard EEPROM value to blank, rather than to a set value | ||
25 | eeconfig_update_kb(0); | ||
26 | |||
27 | eeconfig_init_user(); | ||
28 | } | ||
29 | |||
30 | |||
31 | /* | ||
32 | * FIXME: needs doc | ||
33 | */ | ||
34 | void eeconfig_init_quantum(void) { | ||
17 | #ifdef STM32F303xC | 35 | #ifdef STM32F303xC |
18 | EEPROM_format(); | 36 | EEPROM_format(); |
19 | #endif | 37 | #endif |
20 | eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); | 38 | eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); |
21 | eeprom_update_byte(EECONFIG_DEBUG, 0); | 39 | eeprom_update_byte(EECONFIG_DEBUG, 0); |
22 | eeprom_update_byte(EECONFIG_DEFAULT_LAYER, 0); | 40 | eeprom_update_byte(EECONFIG_DEFAULT_LAYER, 0); |
23 | eeprom_update_byte(EECONFIG_KEYMAP, 0); | 41 | default_layer_state = 0; |
24 | eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0); | 42 | eeprom_update_byte(EECONFIG_KEYMAP, 0); |
25 | #ifdef BACKLIGHT_ENABLE | 43 | eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0); |
26 | eeprom_update_byte(EECONFIG_BACKLIGHT, 0); | 44 | eeprom_update_byte(EECONFIG_BACKLIGHT, 0); |
27 | #endif | 45 | eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default |
28 | #ifdef AUDIO_ENABLE | 46 | eeprom_update_dword(EECONFIG_RGBLIGHT, 0); |
29 | eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default | 47 | eeprom_update_byte(EECONFIG_STENOMODE, 0); |
30 | #endif | 48 | |
31 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | 49 | eeconfig_init_kb(); |
32 | eeprom_update_dword(EECONFIG_RGBLIGHT, 0); | 50 | } |
33 | #endif | 51 | |
34 | #ifdef STENO_ENABLE | 52 | /** \brief eeconfig initialization |
35 | eeprom_update_byte(EECONFIG_STENOMODE, 0); | 53 | * |
36 | #endif | 54 | * FIXME: needs doc |
55 | */ | ||
56 | void eeconfig_init(void) { | ||
57 | |||
58 | eeconfig_init_quantum(); | ||
37 | } | 59 | } |
38 | 60 | ||
39 | /** \brief eeconfig enable | 61 | /** \brief eeconfig enable |
@@ -54,7 +76,7 @@ void eeconfig_disable(void) | |||
54 | #ifdef STM32F303xC | 76 | #ifdef STM32F303xC |
55 | EEPROM_format(); | 77 | EEPROM_format(); |
56 | #endif | 78 | #endif |
57 | eeprom_update_word(EECONFIG_MAGIC, 0xFFFF); | 79 | eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF); |
58 | } | 80 | } |
59 | 81 | ||
60 | /** \brief eeconfig is enabled | 82 | /** \brief eeconfig is enabled |
@@ -66,6 +88,15 @@ bool eeconfig_is_enabled(void) | |||
66 | return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER); | 88 | return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER); |
67 | } | 89 | } |
68 | 90 | ||
91 | /** \brief eeconfig is disabled | ||
92 | * | ||
93 | * FIXME: needs doc | ||
94 | */ | ||
95 | bool eeconfig_is_disabled(void) | ||
96 | { | ||
97 | return (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER_OFF); | ||
98 | } | ||
99 | |||
69 | /** \brief eeconfig read debug | 100 | /** \brief eeconfig read debug |
70 | * | 101 | * |
71 | * FIXME: needs doc | 102 | * FIXME: needs doc |
@@ -99,7 +130,6 @@ uint8_t eeconfig_read_keymap(void) { return eeprom_read_byte(EECONFIG_KEYMA | |||
99 | */ | 130 | */ |
100 | void eeconfig_update_keymap(uint8_t val) { eeprom_update_byte(EECONFIG_KEYMAP, val); } | 131 | void eeconfig_update_keymap(uint8_t val) { eeprom_update_byte(EECONFIG_KEYMAP, val); } |
101 | 132 | ||
102 | #ifdef BACKLIGHT_ENABLE | ||
103 | /** \brief eeconfig read backlight | 133 | /** \brief eeconfig read backlight |
104 | * | 134 | * |
105 | * FIXME: needs doc | 135 | * FIXME: needs doc |
@@ -110,9 +140,8 @@ uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BA | |||
110 | * FIXME: needs doc | 140 | * FIXME: needs doc |
111 | */ | 141 | */ |
112 | void eeconfig_update_backlight(uint8_t val) { eeprom_update_byte(EECONFIG_BACKLIGHT, val); } | 142 | void eeconfig_update_backlight(uint8_t val) { eeprom_update_byte(EECONFIG_BACKLIGHT, val); } |
113 | #endif | ||
114 | 143 | ||
115 | #ifdef AUDIO_ENABLE | 144 | |
116 | /** \brief eeconfig read audio | 145 | /** \brief eeconfig read audio |
117 | * | 146 | * |
118 | * FIXME: needs doc | 147 | * FIXME: needs doc |
@@ -123,4 +152,28 @@ uint8_t eeconfig_read_audio(void) { return eeprom_read_byte(EECONFIG_AUDIO) | |||
123 | * FIXME: needs doc | 152 | * FIXME: needs doc |
124 | */ | 153 | */ |
125 | void eeconfig_update_audio(uint8_t val) { eeprom_update_byte(EECONFIG_AUDIO, val); } | 154 | void eeconfig_update_audio(uint8_t val) { eeprom_update_byte(EECONFIG_AUDIO, val); } |
126 | #endif | 155 | |
156 | |||
157 | /** \brief eeconfig read kb | ||
158 | * | ||
159 | * FIXME: needs doc | ||
160 | */ | ||
161 | uint32_t eeconfig_read_kb(void) { return eeprom_read_dword(EECONFIG_KEYBOARD); } | ||
162 | /** \brief eeconfig update kb | ||
163 | * | ||
164 | * FIXME: needs doc | ||
165 | */ | ||
166 | |||
167 | void eeconfig_update_kb(uint32_t val) { eeprom_update_dword(EECONFIG_KEYBOARD, val); } | ||
168 | /** \brief eeconfig read user | ||
169 | * | ||
170 | * FIXME: needs doc | ||
171 | */ | ||
172 | uint32_t eeconfig_read_user(void) { return eeprom_read_dword(EECONFIG_USER); } | ||
173 | /** \brief eeconfig update user | ||
174 | * | ||
175 | * FIXME: needs doc | ||
176 | */ | ||
177 | void eeconfig_update_user(uint32_t val) { eeprom_update_dword(EECONFIG_USER, val); } | ||
178 | |||
179 | |||
diff --git a/tmk_core/common/eeconfig.h b/tmk_core/common/eeconfig.h index fa498df48..a45cb8b12 100644 --- a/tmk_core/common/eeconfig.h +++ b/tmk_core/common/eeconfig.h | |||
@@ -23,36 +23,41 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
23 | 23 | ||
24 | 24 | ||
25 | #define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEED | 25 | #define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEED |
26 | #define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF | ||
26 | 27 | ||
27 | /* eeprom parameteter address */ | 28 | /* eeprom parameteter address */ |
28 | #if !defined(STM32F303xC) | 29 | #if !defined(STM32F303xC) |
29 | #define EECONFIG_MAGIC (uint16_t *)0 | 30 | #define EECONFIG_MAGIC (uint16_t *)0 |
30 | #define EECONFIG_DEBUG (uint8_t *)2 | 31 | #define EECONFIG_DEBUG (uint8_t *)2 |
31 | #define EECONFIG_DEFAULT_LAYER (uint8_t *)3 | 32 | #define EECONFIG_DEFAULT_LAYER (uint8_t *)3 |
32 | #define EECONFIG_KEYMAP (uint8_t *)4 | 33 | #define EECONFIG_KEYMAP (uint8_t *)4 |
33 | #define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5 | 34 | #define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5 |
34 | #define EECONFIG_BACKLIGHT (uint8_t *)6 | 35 | #define EECONFIG_BACKLIGHT (uint8_t *)6 |
35 | #define EECONFIG_AUDIO (uint8_t *)7 | 36 | #define EECONFIG_AUDIO (uint8_t *)7 |
36 | #define EECONFIG_RGBLIGHT (uint32_t *)8 | 37 | #define EECONFIG_RGBLIGHT (uint32_t *)8 |
37 | #define EECONFIG_UNICODEMODE (uint8_t *)12 | 38 | #define EECONFIG_UNICODEMODE (uint8_t *)12 |
38 | #define EECONFIG_STENOMODE (uint8_t *)13 | 39 | #define EECONFIG_STENOMODE (uint8_t *)13 |
39 | // EEHANDS for two handed boards | 40 | // EEHANDS for two handed boards |
40 | #define EECONFIG_HANDEDNESS (uint8_t *)14 | 41 | #define EECONFIG_HANDEDNESS (uint8_t *)14 |
42 | #define EECONFIG_KEYBOARD (uint32_t *)15 | ||
43 | #define EECONFIG_USER (uint32_t *)19 | ||
41 | 44 | ||
42 | #else | 45 | #else |
43 | /* STM32F3 uses 16byte block. Reconfigure memory map */ | 46 | /* STM32F3 uses 16byte block. Reconfigure memory map */ |
44 | #define EECONFIG_MAGIC (uint16_t *)0 | 47 | #define EECONFIG_MAGIC (uint16_t *)0 |
45 | #define EECONFIG_DEBUG (uint8_t *)1 | 48 | #define EECONFIG_DEBUG (uint8_t *)1 |
46 | #define EECONFIG_DEFAULT_LAYER (uint8_t *)2 | 49 | #define EECONFIG_DEFAULT_LAYER (uint8_t *)2 |
47 | #define EECONFIG_KEYMAP (uint8_t *)3 | 50 | #define EECONFIG_KEYMAP (uint8_t *)3 |
48 | #define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)4 | 51 | #define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)4 |
49 | #define EECONFIG_BACKLIGHT (uint8_t *)5 | 52 | #define EECONFIG_BACKLIGHT (uint8_t *)5 |
50 | #define EECONFIG_AUDIO (uint8_t *)6 | 53 | #define EECONFIG_AUDIO (uint8_t *)6 |
51 | #define EECONFIG_RGBLIGHT (uint32_t *)7 | 54 | #define EECONFIG_RGBLIGHT (uint32_t *)7 |
52 | #define EECONFIG_UNICODEMODE (uint8_t *)9 | 55 | #define EECONFIG_UNICODEMODE (uint8_t *)9 |
53 | #define EECONFIG_STENOMODE (uint8_t *)10 | 56 | #define EECONFIG_STENOMODE (uint8_t *)10 |
54 | // EEHANDS for two handed boards | 57 | // EEHANDS for two handed boards |
55 | #define EECONFIG_HANDEDNESS (uint8_t *)11 | 58 | #define EECONFIG_HANDEDNESS (uint8_t *)11 |
59 | #define EECONFIG_KEYBOARD (uint32_t *)12 | ||
60 | #define EECONFIG_USER (uint32_t *)14 | ||
56 | #endif | 61 | #endif |
57 | 62 | ||
58 | /* debug bit */ | 63 | /* debug bit */ |
@@ -73,8 +78,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
73 | 78 | ||
74 | 79 | ||
75 | bool eeconfig_is_enabled(void); | 80 | bool eeconfig_is_enabled(void); |
81 | bool eeconfig_is_disabled(void); | ||
76 | 82 | ||
77 | void eeconfig_init(void); | 83 | void eeconfig_init(void); |
84 | void eeconfig_init_quantum(void); | ||
85 | void eeconfig_init_kb(void); | ||
86 | void eeconfig_init_user(void); | ||
78 | 87 | ||
79 | void eeconfig_enable(void); | 88 | void eeconfig_enable(void); |
80 | 89 | ||
@@ -99,4 +108,9 @@ uint8_t eeconfig_read_audio(void); | |||
99 | void eeconfig_update_audio(uint8_t val); | 108 | void eeconfig_update_audio(uint8_t val); |
100 | #endif | 109 | #endif |
101 | 110 | ||
111 | uint32_t eeconfig_read_kb(void); | ||
112 | void eeconfig_update_kb(uint32_t val); | ||
113 | uint32_t eeconfig_read_user(void); | ||
114 | void eeconfig_update_user(uint32_t val); | ||
115 | |||
102 | #endif | 116 | #endif |