Skip to content

Commit

Permalink
c: Fix Bitfield Macros [DEVINFRA-655] (#1110)
Browse files Browse the repository at this point in the history
Fixes a bug in the generated SET macros. Calling SET on a non
zero bitfield previously caused unexpected results.

Co-authored-by: Christian Reimer <[email protected]>
  • Loading branch information
jungleraptor and reimerix authored Apr 8, 2022
1 parent d470c03 commit e1c24e4
Show file tree
Hide file tree
Showing 22 changed files with 2,580 additions and 2,041 deletions.
1 change: 1 addition & 0 deletions c/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
.deps
build*/
.clang-tidy
compile_commands.json
62 changes: 34 additions & 28 deletions c/include/libsbp/bootload_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,43 +27,49 @@

#define SBP_MSG_BOOTLOADER_HANDSHAKE_RESP 0x00B4
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_MASK \
(0xff)
(0xffu)
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SHIFT \
(8u)
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_GET( \
flags) \
((u32)( \
((flags) >> \
SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SHIFT) & \
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_GET( \
flags) \
((u32)( \
(u32)( \
(flags) >> \
SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SHIFT) & \
SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_MASK))
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SET( \
flags, val) \
do { \
(flags) = (u32)( \
(flags) | \
(((val) & \
(SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_MASK)) \
<< (SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SHIFT))); \
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SET( \
flags, val) \
do { \
(flags) = (u32)( \
(flags & \
(~(SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_MASK \
<< SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SHIFT))) | \
(((val) & \
(SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_MASK)) \
<< (SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MAJOR_PROTOCOL_VERSION_NUMBER_SHIFT))); \
} while (0)

#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_MASK \
(0xff)
(0xffu)
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SHIFT \
(0u)
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_GET( \
flags) \
((u32)( \
((flags) >> \
SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SHIFT) & \
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_GET( \
flags) \
((u32)( \
(u32)( \
(flags) >> \
SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SHIFT) & \
SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_MASK))
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SET( \
flags, val) \
do { \
(flags) = (u32)( \
(flags) | \
(((val) & \
(SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_MASK)) \
<< (SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SHIFT))); \
#define SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SET( \
flags, val) \
do { \
(flags) = (u32)( \
(flags & \
(~(SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_MASK \
<< SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SHIFT))) | \
(((val) & \
(SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_MASK)) \
<< (SBP_BOOTLOADER_HANDSHAKE_RESP_SBP_MINOR_PROTOCOL_VERSION_NUMBER_SHIFT))); \
} while (0)

/**
Expand Down
32 changes: 18 additions & 14 deletions c/include/libsbp/ext_events_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,28 +19,32 @@
#define LIBSBP_EXT_EVENTS_MACROS_H

#define SBP_MSG_EXT_EVENT 0x0101
#define SBP_EXT_EVENT_TIME_QUALITY_MASK (0x1)
#define SBP_EXT_EVENT_TIME_QUALITY_MASK (0x1u)
#define SBP_EXT_EVENT_TIME_QUALITY_SHIFT (1u)
#define SBP_EXT_EVENT_TIME_QUALITY_GET(flags) \
((u8)(((flags) >> SBP_EXT_EVENT_TIME_QUALITY_SHIFT) & \
#define SBP_EXT_EVENT_TIME_QUALITY_GET(flags) \
((u8)((u8)((flags) >> SBP_EXT_EVENT_TIME_QUALITY_SHIFT) & \
SBP_EXT_EVENT_TIME_QUALITY_MASK))
#define SBP_EXT_EVENT_TIME_QUALITY_SET(flags, val) \
do { \
(flags) = (u8)((flags) | (((val) & (SBP_EXT_EVENT_TIME_QUALITY_MASK)) \
<< (SBP_EXT_EVENT_TIME_QUALITY_SHIFT))); \
#define SBP_EXT_EVENT_TIME_QUALITY_SET(flags, val) \
do { \
(flags) = (u8)((flags & (~(SBP_EXT_EVENT_TIME_QUALITY_MASK \
<< SBP_EXT_EVENT_TIME_QUALITY_SHIFT))) | \
(((val) & (SBP_EXT_EVENT_TIME_QUALITY_MASK)) \
<< (SBP_EXT_EVENT_TIME_QUALITY_SHIFT))); \
} while (0)

#define SBP_EXT_EVENT_TIME_QUALITY_UNKNOWN_DONT_HAVE_NAV_SOLUTION (0)
#define SBP_EXT_EVENT_TIME_QUALITY_GOOD (1)
#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_MASK (0x1)
#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_MASK (0x1u)
#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SHIFT (0u)
#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_GET(flags) \
((u8)(((flags) >> SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SHIFT) & \
#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_GET(flags) \
((u8)((u8)((flags) >> SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SHIFT) & \
SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_MASK))
#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SET(flags, val) \
do { \
(flags) = (u8)((flags) | (((val) & (SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_MASK)) \
<< (SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SHIFT))); \
#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SET(flags, val) \
do { \
(flags) = (u8)((flags & (~(SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_MASK \
<< SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SHIFT))) | \
(((val) & (SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_MASK)) \
<< (SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_SHIFT))); \
} while (0)

#define SBP_EXT_EVENT_NEW_LEVEL_OF_PIN_LOW (0)
Expand Down
88 changes: 49 additions & 39 deletions c/include/libsbp/flash_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,18 @@
#define LIBSBP_FLASH_MACROS_H

#define SBP_MSG_FLASH_PROGRAM 0x00E6
#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_MASK (0x1)
#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_MASK (0x1u)
#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SHIFT (0u)
#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_GET(flags) \
((u8)(((flags) >> SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SHIFT) & \
#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_GET(flags) \
((u8)((u8)((flags) >> SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SHIFT) & \
SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_MASK))
#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = (u8)((flags) | \
(((val) & (SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SHIFT))); \
#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = \
(u8)((flags & (~(SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_MASK \
<< SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SHIFT))) | \
(((val) & (SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_SHIFT))); \
} while (0)

#define SBP_FLASH_PROGRAM_FLASH_TARGET_TO_READ_FLASH_STM (0)
Expand Down Expand Up @@ -64,15 +66,17 @@
#define SBP_MSG_FLASH_PROGRAM_ENCODED_OVERHEAD 5u

#define SBP_MSG_FLASH_DONE 0x00E0
#define SBP_FLASH_DONE_RESPONSE_CODE_MASK (0x7)
#define SBP_FLASH_DONE_RESPONSE_CODE_MASK (0x7u)
#define SBP_FLASH_DONE_RESPONSE_CODE_SHIFT (0u)
#define SBP_FLASH_DONE_RESPONSE_CODE_GET(flags) \
((u8)(((flags) >> SBP_FLASH_DONE_RESPONSE_CODE_SHIFT) & \
#define SBP_FLASH_DONE_RESPONSE_CODE_GET(flags) \
((u8)((u8)((flags) >> SBP_FLASH_DONE_RESPONSE_CODE_SHIFT) & \
SBP_FLASH_DONE_RESPONSE_CODE_MASK))
#define SBP_FLASH_DONE_RESPONSE_CODE_SET(flags, val) \
do { \
(flags) = (u8)((flags) | (((val) & (SBP_FLASH_DONE_RESPONSE_CODE_MASK)) \
<< (SBP_FLASH_DONE_RESPONSE_CODE_SHIFT))); \
#define SBP_FLASH_DONE_RESPONSE_CODE_SET(flags, val) \
do { \
(flags) = (u8)((flags & (~(SBP_FLASH_DONE_RESPONSE_CODE_MASK \
<< SBP_FLASH_DONE_RESPONSE_CODE_SHIFT))) | \
(((val) & (SBP_FLASH_DONE_RESPONSE_CODE_MASK)) \
<< (SBP_FLASH_DONE_RESPONSE_CODE_SHIFT))); \
} while (0)

#define SBP_FLASH_DONE_RESPONSE_CODE_FLASH_OK (0)
Expand All @@ -88,16 +92,18 @@
#define SBP_MSG_FLASH_DONE_ENCODED_LEN 1u

#define SBP_MSG_FLASH_READ_REQ 0x00E7
#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_MASK (0x1)
#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_MASK (0x1u)
#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SHIFT (0u)
#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_GET(flags) \
((u8)(((flags) >> SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SHIFT) & \
#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_GET(flags) \
((u8)((u8)((flags) >> SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SHIFT) & \
SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_MASK))
#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = (u8)((flags) | \
(((val) & (SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SHIFT))); \
#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = \
(u8)((flags & (~(SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_MASK \
<< SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SHIFT))) | \
(((val) & (SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_SHIFT))); \
} while (0)

#define SBP_FLASH_READ_REQ_FLASH_TARGET_TO_READ_FLASH_STM (0)
Expand All @@ -117,16 +123,18 @@
#define SBP_MSG_FLASH_READ_REQ_ENCODED_LEN 5u

#define SBP_MSG_FLASH_READ_RESP 0x00E1
#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_MASK (0x1)
#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_MASK (0x1u)
#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SHIFT (0u)
#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_GET(flags) \
((u8)(((flags) >> SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SHIFT) & \
#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_GET(flags) \
((u8)((u8)((flags) >> SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SHIFT) & \
SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_MASK))
#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = (u8)((flags) | \
(((val) & (SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SHIFT))); \
#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = (u8)( \
(flags & (~(SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_MASK \
<< SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SHIFT))) | \
(((val) & (SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_SHIFT))); \
} while (0)

#define SBP_FLASH_READ_RESP_FLASH_TARGET_TO_READ_FLASH_STM (0)
Expand All @@ -146,16 +154,18 @@
#define SBP_MSG_FLASH_READ_RESP_ENCODED_LEN 5u

#define SBP_MSG_FLASH_ERASE 0x00E2
#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_MASK (0x1)
#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_MASK (0x1u)
#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SHIFT (0u)
#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_GET(flags) \
((u8)(((flags) >> SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SHIFT) & \
#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_GET(flags) \
((u8)((u8)((flags) >> SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SHIFT) & \
SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_MASK))
#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = \
(u8)((flags) | (((val) & (SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SHIFT))); \
#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SET(flags, val) \
do { \
(flags) = \
(u8)((flags & (~(SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_MASK \
<< SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SHIFT))) | \
(((val) & (SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_MASK)) \
<< (SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_SHIFT))); \
} while (0)

#define SBP_FLASH_ERASE_FLASH_TARGET_TO_READ_FLASH_STM (0)
Expand Down
26 changes: 14 additions & 12 deletions c/include/libsbp/gnss_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@
#ifndef LIBSBP_GNSS_MACROS_H
#define LIBSBP_GNSS_MACROS_H

#define SBP_GNSSSIGNAL__MASK (0xff)
#define SBP_GNSSSIGNAL__MASK (0xffu)
#define SBP_GNSSSIGNAL__SHIFT (0u)
#define SBP_GNSSSIGNAL__GET(flags) \
((u8)(((flags) >> SBP_GNSSSIGNAL__SHIFT) & SBP_GNSSSIGNAL__MASK))
#define SBP_GNSSSIGNAL__SET(flags, val) \
do { \
(flags) = (u8)((flags) | (((val) & (SBP_GNSSSIGNAL__MASK)) \
<< (SBP_GNSSSIGNAL__SHIFT))); \
((u8)((u8)((flags) >> SBP_GNSSSIGNAL__SHIFT) & SBP_GNSSSIGNAL__MASK))
#define SBP_GNSSSIGNAL__SET(flags, val) \
do { \
(flags) = \
(u8)((flags & (~(SBP_GNSSSIGNAL__MASK << SBP_GNSSSIGNAL__SHIFT))) | \
(((val) & (SBP_GNSSSIGNAL__MASK)) << (SBP_GNSSSIGNAL__SHIFT))); \
} while (0)

#define SBP_GNSSSIGNAL_GPS_L1CA (0)
Expand All @@ -52,14 +53,15 @@
*/
#define SBP_SV_ID_ENCODED_LEN 2u

#define SBP_GNSSSIGNALDEP__MASK (0xff)
#define SBP_GNSSSIGNALDEP__MASK (0xffu)
#define SBP_GNSSSIGNALDEP__SHIFT (0u)
#define SBP_GNSSSIGNALDEP__GET(flags) \
((u8)(((flags) >> SBP_GNSSSIGNALDEP__SHIFT) & SBP_GNSSSIGNALDEP__MASK))
#define SBP_GNSSSIGNALDEP__SET(flags, val) \
do { \
(flags) = (u8)((flags) | (((val) & (SBP_GNSSSIGNALDEP__MASK)) \
<< (SBP_GNSSSIGNALDEP__SHIFT))); \
((u8)((u8)((flags) >> SBP_GNSSSIGNALDEP__SHIFT) & SBP_GNSSSIGNALDEP__MASK))
#define SBP_GNSSSIGNALDEP__SET(flags, val) \
do { \
(flags) = (u8)( \
(flags & (~(SBP_GNSSSIGNALDEP__MASK << SBP_GNSSSIGNALDEP__SHIFT))) | \
(((val) & (SBP_GNSSSIGNALDEP__MASK)) << (SBP_GNSSSIGNALDEP__SHIFT))); \
} while (0)

#define SBP_GNSSSIGNALDEP_GPS_L1CA (0)
Expand Down
Loading

0 comments on commit e1c24e4

Please sign in to comment.