diff --git a/right/src/config_parser/config_globals.c b/right/src/config_parser/config_globals.c index 07e7ed1..d57bc27 100644 --- a/right/src/config_parser/config_globals.c +++ b/right/src/config_parser/config_globals.c @@ -1,10 +1,11 @@ #include "config_globals.h" +#include "attributes.h" static uint8_t hardwareConfig[HARDWARE_CONFIG_SIZE]; config_buffer_t HardwareConfigBuffer = {hardwareConfig}; static uint8_t userConfig1[USER_CONFIG_SIZE]; -static uint8_t __attribute__((section (".m_data_2"))) userConfig2[USER_CONFIG_SIZE]; +static uint8_t ATTR_DATA2 userConfig2[USER_CONFIG_SIZE]; config_buffer_t ValidatedUserConfigBuffer = { userConfig1 }; config_buffer_t StagingUserConfigBuffer = { userConfig2 }; diff --git a/right/src/key_action.h b/right/src/key_action.h index da76012..e8db508 100644 --- a/right/src/key_action.h +++ b/right/src/key_action.h @@ -4,6 +4,7 @@ // Includes: #include + #include "attributes.h" #include "lufa/HIDClassCommon.h" #include "usb_composite_device.h" #include "main.h" @@ -69,24 +70,24 @@ uint8_t longPressAction; uint8_t modifiers; uint16_t scancode; - } __attribute__ ((packed)) keystroke; + } ATTR_PACKED keystroke; struct { mouse_button_t buttonActions; mouse_scroll_t scrollActions; mouse_move_action_t moveActions; - } __attribute__ ((packed)) mouse; + } ATTR_PACKED mouse; struct { bool isToggle; uint8_t layer; - } __attribute__ ((packed)) switchLayer; + } ATTR_PACKED switchLayer; struct { uint8_t keymapId; - } __attribute__ ((packed)) switchKeymap; + } ATTR_PACKED switchKeymap; struct { uint8_t macroId; - } __attribute__ ((packed)) playMacro; + } ATTR_PACKED playMacro; }; - } __attribute__ ((packed)) key_action_t; + } ATTR_PACKED key_action_t; // Variables: diff --git a/right/src/macros.h b/right/src/macros.h index 1e2f5e6..289cc63 100644 --- a/right/src/macros.h +++ b/right/src/macros.h @@ -41,29 +41,29 @@ keystroke_type_t type; uint8_t scancode; uint8_t modifierMask; - } __attribute__ ((packed)) key; + } ATTR_PACKED key; struct { macro_sub_action_t action; uint8_t mouseButtonsMask; - } __attribute__ ((packed)) mouseButton; + } ATTR_PACKED mouseButton; struct { int16_t x; int16_t y; - } __attribute__ ((packed)) moveMouse; + } ATTR_PACKED moveMouse; struct { int16_t x; int16_t y; - } __attribute__ ((packed)) scrollMouse; + } ATTR_PACKED scrollMouse; struct { int16_t delay; - } __attribute__ ((packed)) delay; + } ATTR_PACKED delay; struct { const char *text; uint16_t textLen; - } __attribute__ ((packed)) text; + } ATTR_PACKED text; }; macro_action_type_t type; - } __attribute__ ((packed)) macro_action_t; + } ATTR_PACKED macro_action_t; // Variables: diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.h b/right/src/usb_interfaces/usb_interface_basic_keyboard.h index a2daec0..acb74d7 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.h +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.h @@ -4,6 +4,7 @@ // Includes: #include "fsl_common.h" + #include "attributes.h" #include "usb_api.h" #include "usb_descriptors/usb_descriptor_basic_keyboard_report.h" @@ -26,7 +27,7 @@ uint8_t modifiers; uint8_t reserved; // Always must be 0 uint8_t scancodes[USB_BASIC_KEYBOARD_MAX_KEYS]; - } __attribute__ ((packed)) usb_basic_keyboard_report_t; + } ATTR_PACKED usb_basic_keyboard_report_t; // Variables: diff --git a/right/src/usb_interfaces/usb_interface_media_keyboard.h b/right/src/usb_interfaces/usb_interface_media_keyboard.h index 16191a8..410be13 100644 --- a/right/src/usb_interfaces/usb_interface_media_keyboard.h +++ b/right/src/usb_interfaces/usb_interface_media_keyboard.h @@ -24,7 +24,7 @@ typedef struct { uint16_t scancodes[USB_MEDIA_KEYBOARD_MAX_KEYS]; - } __attribute__ ((packed)) usb_media_keyboard_report_t; + } ATTR_PACKED usb_media_keyboard_report_t; // Variables: diff --git a/right/src/usb_interfaces/usb_interface_mouse.h b/right/src/usb_interfaces/usb_interface_mouse.h index 9e92fcc..c79a124 100644 --- a/right/src/usb_interfaces/usb_interface_mouse.h +++ b/right/src/usb_interfaces/usb_interface_mouse.h @@ -27,7 +27,7 @@ int16_t y; int8_t wheelX; int8_t wheelY; - } __attribute__ ((packed)) usb_mouse_report_t; + } ATTR_PACKED usb_mouse_report_t; // Variables: diff --git a/right/src/usb_interfaces/usb_interface_system_keyboard.h b/right/src/usb_interfaces/usb_interface_system_keyboard.h index 42e2f0c..59592e4 100644 --- a/right/src/usb_interfaces/usb_interface_system_keyboard.h +++ b/right/src/usb_interfaces/usb_interface_system_keyboard.h @@ -4,6 +4,7 @@ // Includes: #include "fsl_common.h" + #include "attributes.h" #include "usb_api.h" #include "usb_descriptors/usb_descriptor_system_keyboard_report.h" @@ -24,7 +25,7 @@ typedef struct { uint8_t scancodes[USB_SYSTEM_KEYBOARD_MAX_KEYS]; - } __attribute__ ((packed)) usb_system_keyboard_report_t; + } ATTR_PACKED usb_system_keyboard_report_t; // Variables: diff --git a/right/src/wormhole.c b/right/src/wormhole.c index 67cb511..5a5570b 100644 --- a/right/src/wormhole.c +++ b/right/src/wormhole.c @@ -1,3 +1,3 @@ #include "wormhole.h" -wormhole_t Wormhole NO_INIT_GCC; +wormhole_t ATTR_NO_INIT Wormhole; diff --git a/right/src/wormhole.h b/right/src/wormhole.h index 7d5c3ab..01f610b 100644 --- a/right/src/wormhole.h +++ b/right/src/wormhole.h @@ -4,11 +4,11 @@ // Includes: #include + #include "attributes.h" // Macros: #define WORMHOLE_MAGIC_NUMBER 0x3b04cd9e94521f9a - #define NO_INIT_GCC __attribute__ ((section (".noinit"))) // Typedefs: @@ -26,6 +26,6 @@ // Variables: - extern wormhole_t Wormhole NO_INIT_GCC; + extern wormhole_t ATTR_NO_INIT Wormhole; #endif diff --git a/shared/attributes.h b/shared/attributes.h new file mode 100644 index 0000000..4c45695 --- /dev/null +++ b/shared/attributes.h @@ -0,0 +1,11 @@ +#ifndef __ATTRIBUTES_H__ +#define __ATTRIBUTES_H__ + +// Macros: + + #define ATTR_PACKED __attribute__ ((packed)) + #define ATTR_NO_INIT __attribute__ ((section (".noinit"))) + #define ATTR_DATA2 __attribute__((section (".m_data_2"))) + #define ATTR_BOOTLOADER_CONFIG __attribute__((used, section(".BootloaderConfig"))) + +#endif diff --git a/shared/bootloader.h b/shared/bootloader.h index 047e681..b51f666 100644 --- a/shared/bootloader.h +++ b/shared/bootloader.h @@ -5,6 +5,7 @@ #include #include + #include "attributes.h" #include "i2c_addresses.h" // Macros: @@ -14,7 +15,7 @@ #define CLOCK_FLAG_HIGH_SPEED_MODE 0x01 #define DEFINE_BOOTLOADER_CONFIG_AREA(address) \ - __attribute__((used, section(".BootloaderConfig"))) const bootloader_config_t BootloaderConfig = { \ + const ATTR_BOOTLOADER_CONFIG bootloader_config_t BootloaderConfig = { \ .tag = BOOTLOADER_TAG, \ .enabledPeripherals = EnabledBootloaderPeripherial_I2c, \ .i2cSlaveAddress = address, \ diff --git a/shared/slave_protocol.h b/shared/slave_protocol.h index 9a8a238..7d8fed6 100644 --- a/shared/slave_protocol.h +++ b/shared/slave_protocol.h @@ -4,6 +4,7 @@ // Includes: #include "fsl_common.h" + #include "attributes.h" // Macros: @@ -38,7 +39,7 @@ uint8_t length; uint16_t crc; uint8_t data[I2C_MESSAGE_MAX_PAYLOAD_LENGTH]; - } __attribute__ ((packed)) i2c_message_t; + } ATTR_PACKED i2c_message_t; // Variables: