12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #
- # stm32_serialbuffer.py
- #
- import pioutil
- if pioutil.is_pio_build():
- Import("env")
-
- # Get a build flag's value or None
- def getBuildFlagValue(name):
- for flag in build_flags:
- if isinstance(flag, list) and flag[0] == name:
- return flag[1]
-
- return None
-
- # Get an overriding buffer size for RX or TX from the build flags
- def getInternalSize(side):
- return getBuildFlagValue(f"MF_{side}_BUFFER_SIZE") or \
- getBuildFlagValue(f"SERIAL_{side}_BUFFER_SIZE") or \
- getBuildFlagValue(f"USART_{side}_BUF_SIZE")
-
- # Get the largest defined buffer size for RX or TX
- def getBufferSize(side, default):
- # Get a build flag value or fall back to the given default
- internal = int(getInternalSize(side) or default)
- flag = side + "_BUFFER_SIZE"
- # Return the largest value
- return max(int(mf[flag]), internal) if flag in mf else internal
-
- # Add a build flag if it's not already defined
- def tryAddFlag(name, value):
- if getBuildFlagValue(name) is None:
- env.Append(BUILD_FLAGS=[f"-D{name}={value}"])
-
- # Marlin uses the `RX_BUFFER_SIZE` \ `TX_BUFFER_SIZE` options to
- # configure buffer sizes for receiving \ transmitting serial data.
- # Stm32duino uses another set of defines for the same purpose, so this
- # script gets the values from the configuration and uses them to define
- # `SERIAL_RX_BUFFER_SIZE` and `SERIAL_TX_BUFFER_SIZE` as global build
- # flags so they are available for use by the platform.
- #
- # The script will set the value as the default one (64 bytes)
- # or the user-configured one, whichever is higher.
- #
- # Marlin's default buffer sizes are 128 for RX and 32 for TX.
- # The highest value is taken (128/64).
- #
- # If MF_*_BUFFER_SIZE, SERIAL_*_BUFFER_SIZE, USART_*_BUF_SIZE, are
- # defined, the first of these values will be used as the minimum.
- build_flags = env.ParseFlags(env.get('BUILD_FLAGS'))["CPPDEFINES"]
- mf = env["MARLIN_FEATURES"]
-
- # Get the largest defined buffer sizes for RX or TX, using defaults for undefined
- rxBuf = getBufferSize("RX", 128)
- txBuf = getBufferSize("TX", 64)
-
- # Provide serial buffer sizes to the stm32duino platform
- tryAddFlag("SERIAL_RX_BUFFER_SIZE", rxBuf)
- tryAddFlag("SERIAL_TX_BUFFER_SIZE", txBuf)
- tryAddFlag("USART_RX_BUF_SIZE", rxBuf)
- tryAddFlag("USART_TX_BUF_SIZE", txBuf)
|