aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2020-05-28 01:26:53 -0700
committerGitHub <noreply@github.com>2020-05-28 10:26:53 +0200
commit5263dfd46520bd40af1d2b39364436df1c96a111 (patch)
treebcc3493df4c88541aaff25af2b7b3f8105c40d7a
parent13206b2f87b1bce87d58cdfdddb1bcc7b58e4a24 (diff)
downloadqmk_firmware-5263dfd46520bd40af1d2b39364436df1c96a111.tar.gz
qmk_firmware-5263dfd46520bd40af1d2b39364436df1c96a111.zip
Keyboards/zsa updates (#9214)
-rw-r--r--keyboards/ergodox_ez/config.h8
-rw-r--r--keyboards/ergodox_ez/ergodox_ez.h15
-rw-r--r--keyboards/ergodox_ez/info.json3
-rw-r--r--keyboards/ergodox_ez/keymaps/default/keymap.c104
-rw-r--r--keyboards/ergodox_ez/readme.md49
-rw-r--r--keyboards/planck/ez/ez.h4
6 files changed, 76 insertions, 107 deletions
diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h
index e60101e5e..8ef600b08 100644
--- a/keyboards/ergodox_ez/config.h
+++ b/keyboards/ergodox_ez/config.h
@@ -16,8 +16,7 @@ You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>. 16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/ 17*/
18 18
19#ifndef ERGODOX_EZ_CONFIG_H 19#pragma once
20#define ERGODOX_EZ_CONFIG_H
21 20
22#include "config_common.h" 21#include "config_common.h"
23 22
@@ -25,9 +24,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
25#define VENDOR_ID 0xFEED 24#define VENDOR_ID 0xFEED
26#define PRODUCT_ID 0x1307 25#define PRODUCT_ID 0x1307
27#define DEVICE_VER 0x0001 26#define DEVICE_VER 0x0001
28#define MANUFACTURER ErgoDox EZ 27#define MANUFACTURER ZSA Technology Labs Inc
29#define PRODUCT ErgoDox EZ 28#define PRODUCT ErgoDox EZ
30#define DESCRIPTION QMK keyboard firmware for Ergodox EZ
31 29
32/* key matrix size */ 30/* key matrix size */
33#define MATRIX_ROWS 14 31#define MATRIX_ROWS 14
@@ -149,5 +147,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
149//#define NO_ACTION_MACRO 147//#define NO_ACTION_MACRO
150//#define NO_ACTION_FUNCTION 148//#define NO_ACTION_FUNCTION
151//#define DEBUG_MATRIX_SCAN_RATE 149//#define DEBUG_MATRIX_SCAN_RATE
152
153#endif
diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox_ez/ergodox_ez.h
index 7ff62d38a..88a0a2ee9 100644
--- a/keyboards/ergodox_ez/ergodox_ez.h
+++ b/keyboards/ergodox_ez/ergodox_ez.h
@@ -1,5 +1,4 @@
1#ifndef ERGODOX_EZ_H 1#pragma once
2#define ERGODOX_EZ_H
3 2
4#include "quantum.h" 3#include "quantum.h"
5#include <stdint.h> 4#include <stdint.h>
@@ -65,8 +64,7 @@ inline void ergodox_left_led_2_off(void) { ergodox_left_led_2 = 0; }
65inline void ergodox_left_led_3_off(void) { ergodox_left_led_3 = 0; } 64inline void ergodox_left_led_3_off(void) { ergodox_left_led_3 = 0; }
66#endif // LEFT_LEDS 65#endif // LEFT_LEDS
67 66
68inline void ergodox_led_all_on(void) 67inline void ergodox_led_all_on(void) {
69{
70 ergodox_board_led_on(); 68 ergodox_board_led_on();
71 ergodox_right_led_1_on(); 69 ergodox_right_led_1_on();
72 ergodox_right_led_2_on(); 70 ergodox_right_led_2_on();
@@ -100,19 +98,20 @@ inline void ergodox_right_led_set(uint8_t led, uint8_t n) {
100 (OCR1C = n); 98 (OCR1C = n);
101} 99}
102 100
103inline void ergodox_led_all_set(uint8_t n) 101inline void ergodox_led_all_set(uint8_t n) {
104{
105 ergodox_right_led_1_set(n); 102 ergodox_right_led_1_set(n);
106 ergodox_right_led_2_set(n); 103 ergodox_right_led_2_set(n);
107 ergodox_right_led_3_set(n); 104 ergodox_right_led_3_set(n);
108} 105}
109 106
110#ifdef ORYX_CONFIGURATOR
111enum ergodox_ez_keycodes { 107enum ergodox_ez_keycodes {
112 LED_LEVEL = SAFE_RANGE, 108 LED_LEVEL = SAFE_RANGE,
113 TOGGLE_LAYER_COLOR, 109 TOGGLE_LAYER_COLOR,
114 EZ_SAFE_RANGE, 110 EZ_SAFE_RANGE,
115}; 111};
112
113#ifndef WEBUSB_ENABLE
114# define WEBUSB_PAIR KC_NO
116#endif 115#endif
117 116
118typedef union { 117typedef union {
@@ -271,5 +270,3 @@ extern keyboard_config_t keyboard_config;
271 { R05, R15, R25, R35, R45, R55 }, \ 270 { R05, R15, R25, R35, R45, R55 }, \
272 { R06, R16, R26, R36, R46, KC_NO } \ 271 { R06, R16, R26, R36, R46, KC_NO } \
273 } 272 }
274
275#endif
diff --git a/keyboards/ergodox_ez/info.json b/keyboards/ergodox_ez/info.json
index e543206fe..61ba58051 100644
--- a/keyboards/ergodox_ez/info.json
+++ b/keyboards/ergodox_ez/info.json
@@ -1,7 +1,8 @@
1{ 1{
2 "keyboard_name": "ErgoDox EZ", 2 "keyboard_name": "ErgoDox EZ",
3 "url": "ergodox-ez.com", 3 "url": "ergodox-ez.com",
4 "maintainer": "ZSA", 4 "maintainer": "ZSA via Drashna",
5 "manufacturer": "ZSA Technology Labs Inc",
5 "width": 17, 6 "width": 17,
6 "height": 8, 7 "height": 8,
7 8
diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c
index 20c78bd57..9079e48fc 100644
--- a/keyboards/ergodox_ez/keymaps/default/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/default/keymap.c
@@ -1,17 +1,18 @@
1#include QMK_KEYBOARD_H 1#include QMK_KEYBOARD_H
2#include "version.h" 2#include "version.h"
3 3
4#define BASE 0 // default layer 4enum layers {
5#define SYMB 1 // symbols 5 BASE, // default layer
6#define MDIA 2 // media keys 6 SYMB, // symbols
7 MDIA, // media keys
8};
7 9
8enum custom_keycodes { 10enum custom_keycodes {
9#ifdef ORYX_CONFIGURATOR 11#ifdef ORYX_CONFIGURATOR
10 EPRM = EZ_SAFE_RANGE, 12 VRSN = EZ_SAFE_RANGE,
11#else 13#else
12 EPRM = SAFE_RANGE, 14 VRSN = SAFE_RANGE,
13#endif 15#endif
14 VRSN,
15 RGB_SLD 16 RGB_SLD
16}; 17};
17 18
@@ -37,25 +38,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
37 * | |ace | End | | PgDn | | | 38 * | |ace | End | | PgDn | | |
38 * `--------------------' `----------------------' 39 * `--------------------' `----------------------'
39 */ 40 */
40[BASE] = LAYOUT_ergodox( 41[BASE] = LAYOUT_ergodox_pretty(
41 // left hand 42 // left hand
42 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, 43 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
43 KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), 44 KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
44 KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, 45 KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
45 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), 46 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
46 LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, 47 LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, TT(SYMB),
47 ALT_T(KC_APP), KC_LGUI, 48 ALT_T(KC_APP), KC_LGUI, KC_LALT, CTL_T(KC_ESC),
48 KC_HOME, 49 KC_HOME, KC_PGUP,
49 KC_SPC, KC_BSPC, KC_END, 50 KC_SPC, KC_BSPC, KC_END, KC_PGDN, KC_TAB, KC_ENT
50 // right hand
51 KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
52 TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
53 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
54 MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
55 KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, TT(SYMB),
56 KC_LALT, CTL_T(KC_ESC),
57 KC_PGUP,
58 KC_PGDN, KC_TAB, KC_ENT
59), 51),
60/* Keymap 1: Symbol Layer 52/* Keymap 1: Symbol Layer
61 * 53 *
@@ -78,25 +70,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
78 * | | | | | | | | 70 * | | | | | | | |
79 * `--------------------' `--------------------' 71 * `--------------------' `--------------------'
80 */ 72 */
81[SYMB] = LAYOUT_ergodox( 73[SYMB] = LAYOUT_ergodox_pretty(
82 // left hand 74 // left hand
83 VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, 75 VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
84 KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, 76 KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
85 KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, 77 KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
86 KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, 78 KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
87 EPRM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 79 EEP_RST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
88 RGB_MOD, KC_TRNS, 80 RGB_MOD, KC_TRNS, RGB_TOG, RGB_SLD,
89 KC_TRNS, 81 KC_TRNS, KC_TRNS,
90 RGB_VAD, RGB_VAI, KC_TRNS, 82 RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, RGB_HUD, RGB_HUI
91 // right hand
92 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
93 KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
94 KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
95 KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
96 KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
97 RGB_TOG, RGB_SLD,
98 KC_TRNS,
99 KC_TRNS, RGB_HUD, RGB_HUI
100), 83),
101/* Keymap 2: Media and mouse keys 84/* Keymap 2: Media and mouse keys
102 * 85 *
@@ -119,34 +102,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
119 * | | | | | | | | 102 * | | | | | | | |
120 * `--------------------' `--------------------' 103 * `--------------------' `--------------------'
121 */ 104 */
122[MDIA] = LAYOUT_ergodox( 105[MDIA] = LAYOUT_ergodox_pretty(
123 // left hand 106 // left hand
124 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 107 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
125 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, 108 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
126 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, 109 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
127 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 110 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
128 KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, 111 KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
129 KC_TRNS, KC_TRNS, 112
130 KC_TRNS, 113 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
131 KC_TRNS, KC_TRNS, KC_TRNS, 114 KC_TRNS, KC_TRNS,
132 // right hand 115 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK
133 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
134 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
135 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
136 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
137 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
138 KC_TRNS, KC_TRNS,
139 KC_TRNS,
140 KC_TRNS, KC_TRNS, KC_WBAK
141), 116),
142}; 117};
143 118
144bool process_record_user(uint16_t keycode, keyrecord_t *record) { 119bool process_record_user(uint16_t keycode, keyrecord_t *record) {
145 if (record->event.pressed) { 120 if (record->event.pressed) {
146 switch (keycode) { 121 switch (keycode) {
147 case EPRM:
148 eeconfig_init();
149 return false;
150 case VRSN: 122 case VRSN:
151 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); 123 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
152 return false; 124 return false;
@@ -161,7 +133,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
161} 133}
162 134
163// Runs just one time when the keyboard initializes. 135// Runs just one time when the keyboard initializes.
164void matrix_init_user(void) { 136void keyboard_post_init_user(void) {
165#ifdef RGBLIGHT_COLOR_LAYER_0 137#ifdef RGBLIGHT_COLOR_LAYER_0
166 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); 138 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
167#endif 139#endif
@@ -179,10 +151,6 @@ layer_state_t layer_state_set_user(layer_state_t state) {
179 case 0: 151 case 0:
180 #ifdef RGBLIGHT_COLOR_LAYER_0 152 #ifdef RGBLIGHT_COLOR_LAYER_0
181 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0); 153 rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
182 #else
183 #ifdef RGBLIGHT_ENABLE
184 rgblight_init();
185 #endif
186 #endif 154 #endif
187 break; 155 break;
188 case 1: 156 case 1:
diff --git a/keyboards/ergodox_ez/readme.md b/keyboards/ergodox_ez/readme.md
index bce8ff3c6..796e96ce5 100644
--- a/keyboards/ergodox_ez/readme.md
+++ b/keyboards/ergodox_ez/readme.md
@@ -1,41 +1,44 @@
1# ErgoDox EZ 1# ErgoDox EZ
2 2
3The Ez uses the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). 3![ErgoDox EZ](http://www.coolthings.com/wp-content/uploads/2017/05/ergodox-ez-2.jpg)
4 4
5Linux users need to modify udev rules as described on the [Teensy 5The ErgoDox EZ is a mass produced version of the original ErgoDox keyboard, with optional support for RGB Light (Shine) or RGB Matrix (Glow).
6Linux page]. Some distributions provide a binary, maybe called
7`teensy-loader-cli`.
8 6
9[Teensy Linux page]: https://www.pjrc.com/teensy/loader_linux.html 7* Keyboard Maintainer: [ZSA Technology Labs Inc](https://github.com/zsa), Firmware maintained by [drashna](https://github.com/drashna)
8* Hardware Supported: Original ErgoDox, ErgoDox EZ
9* Hardware Availability: [ErgoDox EZ](https://ergodox-ez.com/), [ErgoDox.io](https://ergodox.io)
10 10
11To flash the firmware: 11Make example for this keyboard (after setting up your build environment):
12 12
13 - Build the firmware with `make <keyboardname>:<keymapname>`, for example `make ergodox_ez:default` 13 make ergodox_ez:default:flash
14 14
15 - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g. 15See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
16 `ergodox_ez_default.hex`
17 16
18 - Start the teensy loader. 17## Oryx Configuation
19 18
20 - Load the .hex file into it. 19If you have `ORYX_CONFIGURATOR` defined in your keymap's `config.h`, this enables a number of the built in options from the Oryx Configurator.
21 20
22 - Press the Reset button by inserting a paperclip gently into the reset hole 21### Indicator LEDs
23 in the top right corner.
24 22
25 - Click the button in the Teensy app to download the firmware. 23You can use the `LED_LEVEL` keycode to cycle through the brightness levels for the LEDs on the top right of the keyboard. These settings are saved in eeprom (persistant memory).
26 24
27See also [video demonstration](https://www.youtube.com/watch?v=9PyiGUO9_KQ) using Teensy in auto mode. 25Alternatively, you can set the brightness by calling the following functions:
28 26
29To flash with ´teensy-loader-cli´: 27```c
28void ergodox_led_all_set(uint8_t level);
29void ergodox_right_led_1_set(uint8_t level);
30void ergodox_right_led_2_set(uint8_t level);
31void ergodox_right_led_3_set(uint8_t level);
32```
30 33
31 - Build the firmware with `make keymapname`, for example `make default` 34These settings are not persistent, so you'd need to reset it every time the board starts.
32 35
33 - Run ´<path/to/>teensy_loader_cli -mmcu=atmega32u4 -w ergodox_ez_<keymap>.he 36These are on a 0-255 scale
34 37
35 - Press the Reset button by inserting a paperclip gently into the reset hole 38### RGB Matrix Features
36 in the top right corder.
37 39
38## Settings 40If you're using the Smart LED (layer indication) feature from the Oryx Configurator, you want to make sure that you enable these options by adding `#define ORYX_CONFIGURATOR` to your keymap's `config.h`.
39 41
40You may want to enable QMK_KEYS_PER_SCAN because the Ergodox has a relatively 42This changes the `RGB_TOG` keycode so that it will toggle the lights on and off, in a way that will allow the Smart LEDs to continue to work, even with the rest of the LEDs turned off.
41slow scan rate. 43
44Additionally, a new keycode has been added to toggle the Smart LEDs. Use `TOGGLE_LAYER_COLOR`, if you aren't already.
diff --git a/keyboards/planck/ez/ez.h b/keyboards/planck/ez/ez.h
index 29bcc1b83..352deb647 100644
--- a/keyboards/planck/ez/ez.h
+++ b/keyboards/planck/ez/ez.h
@@ -64,6 +64,10 @@ enum planck_ez_keycodes {
64 EZ_SAFE_RANGE, 64 EZ_SAFE_RANGE,
65}; 65};
66 66
67#ifndef WEBUSB_ENABLE
68# define WEBUSB_PAIR KC_NO
69#endif
70
67typedef union { 71typedef union {
68 uint32_t raw; 72 uint32_t raw;
69 struct { 73 struct {