diff --git a/src/boards/include/boards/adafruit_fruit_jam.h b/src/boards/include/boards/adafruit_fruit_jam.h index b769862c4..d0f9086b4 100644 --- a/src/boards/include/boards/adafruit_fruit_jam.h +++ b/src/boards/include/boards/adafruit_fruit_jam.h @@ -188,7 +188,9 @@ pico_board_cmake_set(PICO_PLATFORM, rp2350) #endif // --- PIO USB --- +#ifndef PICO_DEFAULT_PIO_USB_DP_PIN #define PICO_DEFAULT_PIO_USB_DP_PIN ADAFRUIT_FRUIT_JAM_USB_HOST_DATA_PLUS_PIN +#endif // --- FLASH --- // Winbond W25Q128 (16MB) flash diff --git a/src/boards/include/boards/machdyne_werkzeug.h b/src/boards/include/boards/machdyne_werkzeug.h index f624750cf..9b9dc106d 100644 --- a/src/boards/include/boards/machdyne_werkzeug.h +++ b/src/boards/include/boards/machdyne_werkzeug.h @@ -36,8 +36,10 @@ pico_board_cmake_set(PICO_PLATFORM, rp2040) // --- LED --- #ifndef PICO_DEFAULT_LED_PIN #define PICO_DEFAULT_LED_PIN 20 +#ifndef PICO_DEFAULT_LED_PIN_INVERTED #define PICO_DEFAULT_LED_PIN_INVERTED 1 #endif +#endif // --- I2C --- #ifndef PICO_DEFAULT_I2C diff --git a/src/boards/include/boards/pololu_3pi_2040_robot.h b/src/boards/include/boards/pololu_3pi_2040_robot.h index 5479c0c83..91a929ba3 100644 --- a/src/boards/include/boards/pololu_3pi_2040_robot.h +++ b/src/boards/include/boards/pololu_3pi_2040_robot.h @@ -17,11 +17,15 @@ pico_board_cmake_set(PICO_PLATFORM, rp2040) // For board detection #define POLOLU_3PI_2040_ROBOT +#ifndef PICO_DEFAULT_LED_PIN #define PICO_DEFAULT_LED_PIN 25 +#endif #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1 #define PICO_FLASH_SPI_CLKDIV 2 pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (16 * 1024 * 1024)) +#ifndef PICO_FLASH_SIZE_BYTES #define PICO_FLASH_SIZE_BYTES (16 * 1024 * 1024) +#endif // All boards have at least the B1 revision #define PICO_RP2040_B0_SUPPORTED 0 diff --git a/src/boards/include/boards/pololu_zumo_2040_robot.h b/src/boards/include/boards/pololu_zumo_2040_robot.h index 63abd1c24..456562c3a 100644 --- a/src/boards/include/boards/pololu_zumo_2040_robot.h +++ b/src/boards/include/boards/pololu_zumo_2040_robot.h @@ -17,11 +17,15 @@ pico_board_cmake_set(PICO_PLATFORM, rp2040) // For board detection #define POLOLU_ZUMO_2040_ROBOT +#ifndef PICO_DEFAULT_LED_PIN #define PICO_DEFAULT_LED_PIN 25 +#endif #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1 #define PICO_FLASH_SPI_CLKDIV 2 pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (16 * 1024 * 1024)) +#ifndef PICO_FLASH_SIZE_BYTES #define PICO_FLASH_SIZE_BYTES (16 * 1024 * 1024) +#endif // All boards have at least the B1 revision #define PICO_RP2040_B0_SUPPORTED 0 diff --git a/src/boards/include/boards/waveshare_rp2350_usb_a.h b/src/boards/include/boards/waveshare_rp2350_usb_a.h index 5720e71bd..2b73b7fe6 100644 --- a/src/boards/include/boards/waveshare_rp2350_usb_a.h +++ b/src/boards/include/boards/waveshare_rp2350_usb_a.h @@ -76,7 +76,9 @@ pico_board_cmake_set(PICO_PLATFORM, rp2350) #ifndef WAVESHARE_RP2350_USB_A_USB_DM_PIN #define WAVESHARE_RP2350_USB_A_USB_DM_PIN 13 #endif +#ifndef PICO_DEFAULT_PIO_USB_DP_PIN #define PICO_DEFAULT_PIO_USB_DP_PIN WAVESHARE_RP2350_USB_A_USB_DP_PIN +#endif // --- FLASH --- #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1 diff --git a/tools/check_board_header.py b/tools/check_board_header.py index 5a5c84e63..b23ffc169 100755 --- a/tools/check_board_header.py +++ b/tools/check_board_header.py @@ -42,7 +42,7 @@ def __init__(self, message, errors): matching_cmake_default_settings = set(['PICO_FLASH_SIZE_BYTES', 'PICO_RP2350_A2_SUPPORTED']) compulsory_defines = set(['PICO_FLASH_SIZE_BYTES']) -DefineType = namedtuple("DefineType", ["name", "value", "resolved_value", "lineno"]) +DefineType = namedtuple("DefineType", ["name", "value", "resolved_value", "lineno", "has_ifndef"]) def list_to_string_with(lst, joiner): elems = len(lst) @@ -112,7 +112,7 @@ def read_defines_from(header_file, defines_dict): if show_warnings: warnings.warn("{}:{} Multiple values for pico_board_cmake_set({}) ({} and {})".format(board_header, lineno, name, cmake_settings[name].value, value)) else: - cmake_settings[name] = DefineType(name, value, None, lineno) + cmake_settings[name] = DefineType(name, value, None, lineno, False) continue # look for "pico_board_cmake_set_default(BLAH_BLAH, 42)" @@ -125,7 +125,7 @@ def read_defines_from(header_file, defines_dict): if name != name.upper(): errors.append(Exception("{}:{} Expected \"{}\" to be all uppercase".format(board_header, lineno, name))) if name not in cmake_default_settings: - cmake_default_settings[name] = DefineType(name, value, None, lineno) + cmake_default_settings[name] = DefineType(name, value, None, lineno, False) continue # look for "#else" @@ -211,13 +211,13 @@ def read_defines_from(header_file, defines_dict): if show_warnings: warnings.warn("{}:{} Multiple definitions for {} ({} and {})".format(board_header, lineno, name, defines_dict[name].value, value)) else: - defines_dict[name] = DefineType(name, value, resolved_value, lineno) + defines_dict[name] = DefineType(name, value, resolved_value, lineno, last_ifndef == name) return errors if board_header_basename == "amethyst_fpga.h": - defines['PICO_RP2350'] = DefineType('PICO_RP2350', 1, 1, -1) - defines['PICO_RP2350A'] = DefineType('PICO_RP2350A', 0, 0, -1) + defines['PICO_RP2350'] = DefineType('PICO_RP2350', 1, 1, -1, False) + defines['PICO_RP2350A'] = DefineType('PICO_RP2350A', 0, 0, -1, False) errors = [] @@ -276,7 +276,7 @@ def read_defines_from(header_file, defines_dict): value = int(value, 0) except ValueError: pass - cmake_settings[name] = DefineType(name, value, None, lineno) + cmake_settings[name] = DefineType(name, value, None, lineno, False) continue # look for "pico_board_cmake_set_default(BLAH_BLAH, 42)" @@ -298,7 +298,7 @@ def read_defines_from(header_file, defines_dict): value = int(value, 0) except ValueError: pass - cmake_default_settings[name] = DefineType(name, value, None, lineno) + cmake_default_settings[name] = DefineType(name, value, None, lineno, False) continue # look for "#else" @@ -402,7 +402,7 @@ def read_defines_from(header_file, defines_dict): if name in defines: errors.append(Exception("{}:{} Multiple definitions for {} ({} and {})".format(board_header, lineno, name, defines[name].value, value))) else: - defines[name] = DefineType(name, value, resolved_value, lineno) + defines[name] = DefineType(name, value, resolved_value, lineno, last_ifndef == name) continue @@ -549,6 +549,10 @@ def read_defines_from(header_file, defines_dict): if not any(func_pin in defines for func_pin in expected_function_pins): errors.append(Exception("{}:{} {} is defined but none of {} are defined".format(board_header, define.lineno, name, list_to_string_with(expected_function_pins, "or")))) + # check that relevant defines are inside an ifndef clause + if (name in cmake_default_settings or name.startswith("PICO_DEFAULT_")) and not define.has_ifndef: + errors.append(Exception("{}:{} {} isn't enclosed in an #ifndef {} guard".format(board_header, define.lineno, name, name))) + if not has_include_guard: errors.append(Exception("{} has no include-guard (expected {})".format(board_header, expected_include_guard))) if not has_board_detection and expected_board_detection != "NONE":