commit
0957c72c36
|
|
@ -0,0 +1,21 @@
|
|||
# If a statement is wrapped to more than one line, than dangle the closing
|
||||
# parenthesis on it's own line.
|
||||
dangle_parens = True
|
||||
dangle_align = 'child'
|
||||
|
||||
# If true, the parsers may infer whether or not an argument list is sortable
|
||||
# (without annotation).
|
||||
autosort = True
|
||||
|
||||
# How wide to allow formatted cmake files
|
||||
line_width = 100
|
||||
|
||||
additional_commands = {
|
||||
"target_sources": {
|
||||
"kwargs": {
|
||||
"PUBLIC": "*",
|
||||
"PRIVATE": "*",
|
||||
"INTERFACE": "*",
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
set -xe
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../cmake/AvrGcc.cmake" \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-G Ninja
|
||||
ninja ALL_FIRMWARE
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
#!/bin/sh
|
||||
set -xe
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../cmake/AvrGcc.cmake" \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-G Ninja
|
||||
|
||||
# ignore all failures in order to show as much output as possible
|
||||
ninja -k0 check_lang || true
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
set -xe
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G Ninja
|
||||
ninja tests
|
||||
ctest
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
#!/bin/sh
|
||||
set -xe
|
||||
cp Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
bash -x build.sh || { echo "1_75mm_MK3S-EINSy10a-E3Dv6full variant failed" && false; }
|
||||
bash -x build.sh EN_FARM || { echo "1_75mm_MK3S-EINSy10a-E3Dv6full EN_FARM failed" && false; }
|
||||
rm Firmware/Configuration_prusa.h
|
||||
cp Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
bash -x build.sh || { echo "1_75mm_MK3-EINSy10a-E3Dv6full variant failed" && false; }
|
||||
bash -x build.sh EN_FARM || { echo "1_75mm_MK3-EINSy10a-E3Dv6full EN_FARM failed" && false; }
|
||||
rm Firmware/Configuration_prusa.h
|
||||
cp Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
bash -x build.sh || { echo "1_75mm_MK25S-RAMBo13a-E3Dv6full variant failed" && false; }
|
||||
rm Firmware/Configuration_prusa.h
|
||||
cp Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
bash -x build.sh || { echo "1_75mm_MK25S-RAMBo10a-E3Dv6full variant failed" && false; }
|
||||
rm Firmware/Configuration_prusa.h
|
||||
cp Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
bash -x build.sh || { echo "1_75mm_MK25-RAMBo13a-E3Dv6full variant failed" && false; }
|
||||
rm Firmware/Configuration_prusa.h
|
||||
cp Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
bash -x build.sh || { echo "1_75mm_MK25-RAMBo10a-E3Dv6full variant failed" && false; }
|
||||
rm Firmware/Configuration_prusa.h
|
||||
|
|
@ -2,7 +2,12 @@
|
|||
/.settings
|
||||
/.project
|
||||
/.cproject
|
||||
/.vscode
|
||||
|
||||
# cmake
|
||||
/build/
|
||||
/build_gen/
|
||||
/.dependencies
|
||||
/compile_commands.json
|
||||
|
||||
# Temporary configuration
|
||||
/Firmware/Configuration_prusa.h
|
||||
|
|
|
|||
63
.travis.yml
63
.travis.yml
|
|
@ -1,31 +1,48 @@
|
|||
dist: focal
|
||||
language: minimal
|
||||
|
||||
before_install:
|
||||
- sudo apt-get install -y ninja-build python3-polib python3-pyelftools
|
||||
# Arduino IDE adds a lot of noise caused by network traffic, trying to firewall it off
|
||||
# Prepare the dependencies for the old build environment
|
||||
- sudo apt-get install -y python3-polib python3-pyelftools python3-regex
|
||||
|
||||
# Undo whatever *GARBAGE* travis is doing with python and restore the system version
|
||||
- mkdir -p .dependencies/python3
|
||||
- ln -sf /usr/bin/python3 .dependencies/python3/python3
|
||||
- PATH=$PWD/.dependencies/python3:$PATH
|
||||
|
||||
# Bootstrap cmake/ninja for the new build environment
|
||||
- ./utils/bootstrap.py
|
||||
- PATH=$(./utils/bootstrap.py --print-dependency-directory "cmake")/bin:$PATH
|
||||
- PATH=$(./utils/bootstrap.py --print-dependency-directory "ninja"):$PATH
|
||||
|
||||
# Arduino IDE adds a lot of noise caused by network traffic, firewall it off
|
||||
- sudo iptables -P INPUT DROP
|
||||
- sudo iptables -P FORWARD DROP
|
||||
- sudo iptables -P OUTPUT ACCEPT
|
||||
- sudo iptables -A INPUT -i lo -j ACCEPT
|
||||
- sudo iptables -A OUTPUT -o lo -j ACCEPT
|
||||
- sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
|
||||
script:
|
||||
- cp Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
- bash -x build.sh || { echo "1_75mm_MK3S-EINSy10a-E3Dv6full variant failed" && false; }
|
||||
- bash -x build.sh EN_ONLY || { echo "1_75mm_MK3S-EINSy10a-E3Dv6full EN_ONLY failed" && false; }
|
||||
- rm Firmware/Configuration_prusa.h
|
||||
- cp Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
- bash -x build.sh || { echo "1_75mm_MK3-EINSy10a-E3Dv6full variant failed" && false; }
|
||||
- bash -x build.sh EN_ONLY || { echo "1_75mm_MK3-EINSy10a-E3Dv6full EN_ONLY failed" && false; }
|
||||
- rm Firmware/Configuration_prusa.h
|
||||
- cp Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
- bash -x build.sh || { echo "1_75mm_MK25S-RAMBo13a-E3Dv6full variant failed" && false; }
|
||||
- rm Firmware/Configuration_prusa.h
|
||||
- cp Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
- bash -x build.sh || { echo "1_75mm_MK25S-RAMBo10a-E3Dv6full variant failed" && false; }
|
||||
- rm Firmware/Configuration_prusa.h
|
||||
- cp Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
- bash -x build.sh || { echo "1_75mm_MK25-RAMBo13a-E3Dv6full variant failed" && false; }
|
||||
- rm Firmware/Configuration_prusa.h
|
||||
- cp Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h Firmware/Configuration_prusa.h
|
||||
- bash -x build.sh || { echo "1_75mm_MK25-RAMBo10a-E3Dv6full variant failed" && false; }
|
||||
- rm Firmware/Configuration_prusa.h
|
||||
|
||||
jobs:
|
||||
include:
|
||||
# legacy build.sh environment
|
||||
- stage: legacy
|
||||
script: ./.github/travis/legacy-build.sh
|
||||
|
||||
# cmake-based build
|
||||
- stage: cmake
|
||||
script: ./.github/travis/cmake-build.sh
|
||||
|
||||
# cmake tests
|
||||
- stage: tests
|
||||
script: ./.github/travis/cmake-test.sh
|
||||
|
||||
# language checks
|
||||
- stage: lang
|
||||
script: ./.github/travis/cmake-lang.sh
|
||||
|
||||
stages:
|
||||
- cmake
|
||||
- lang
|
||||
- legacy
|
||||
- tests
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
[
|
||||
{
|
||||
"name": "avr-gcc",
|
||||
"toolchainFile": "${workspaceFolder}/cmake/AvrGcc.cmake",
|
||||
"cmakeSettings": {
|
||||
"CMAKE_MAKE_PROGRAM": "${workspaceFolder}/.dependencies/ninja-1.10.2/ninja",
|
||||
"CMAKE_BUILD_TYPE": "Release"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
buildType:
|
||||
default: debug
|
||||
choices:
|
||||
debug:
|
||||
short: Debug
|
||||
long: Emit debug information
|
||||
buildType: Debug
|
||||
release:
|
||||
short: Release
|
||||
long: Optimize generated code
|
||||
buildType: Release
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"cmake.configureOnOpen": true,
|
||||
"cmake.copyCompileCommands": "${workspaceFolder}/compile_commands.json",
|
||||
"cmake.cmakePath": "${workspaceFolder}/.dependencies/cmake-3.22.5/bin/cmake",
|
||||
"cmake.generator": "Ninja",
|
||||
"files.insertFinalNewline": true,
|
||||
"files.associations": {
|
||||
"xlocale": "cpp"
|
||||
}
|
||||
}
|
||||
545
CMakeLists.txt
545
CMakeLists.txt
|
|
@ -1,23 +1,530 @@
|
|||
cmake_minimum_required(VERSION 3.1)
|
||||
cmake_minimum_required(VERSION 3.19)
|
||||
include(cmake/Utilities.cmake)
|
||||
include(cmake/GetGitRevisionDescription.cmake)
|
||||
include(cmake/ReproducibleBuild.cmake)
|
||||
|
||||
set (CMAKE_CXX_STANDARD 11)
|
||||
set(PROJECT_VERSION_SUFFIX
|
||||
"<auto>"
|
||||
CACHE
|
||||
STRING
|
||||
"Full version suffix to be shown on the info screen in settings (e.g. full_version=4.0.3-BETA+1035.PR111.B4, suffix=-BETA+1035.PR111.B4). Defaults to '+<commit sha>.<dirty?>.<debug?>' if set to '<auto>'."
|
||||
)
|
||||
set(PROJECT_VERSION_SUFFIX_SHORT
|
||||
"<auto>"
|
||||
CACHE
|
||||
STRING
|
||||
"Short version suffix to be shown on splash screen. Defaults to '+<BUILD_NUMBER>' if set to '<auto>'."
|
||||
)
|
||||
set(BUILD_NUMBER
|
||||
""
|
||||
CACHE STRING "Build number of the firmware. Resolved automatically if not specified."
|
||||
)
|
||||
|
||||
project(cmake_test)
|
||||
include(cmake/ProjectVersion.cmake)
|
||||
resolve_version_variables()
|
||||
|
||||
# Prepare "Catch" library for other executables
|
||||
set(CATCH_INCLUDE_DIR Catch2)
|
||||
add_library(Catch INTERFACE)
|
||||
target_include_directories(Catch INTERFACE ${CATCH_INCLUDE_DIR})
|
||||
set(PROJECT_VERSION_FLAVOUR
|
||||
""
|
||||
CACHE STRING "Firmware flavour to build - DEBUG, DEVEL, APLHA, BETA or RC"
|
||||
)
|
||||
set(PROJECT_VERSION_FLAVOUR_REVISION
|
||||
""
|
||||
CACHE STRING "Firmware flavour version, e.g. 1 for RC1, etc"
|
||||
)
|
||||
|
||||
# Make test executable
|
||||
set(TEST_SOURCES
|
||||
Tests/tests.cpp
|
||||
Tests/Example_test.cpp
|
||||
Tests/Timer_test.cpp
|
||||
Tests/AutoDeplete_test.cpp
|
||||
Tests/PrusaStatistics_test.cpp
|
||||
Firmware/Timer.cpp
|
||||
)
|
||||
add_executable(tests ${TEST_SOURCES})
|
||||
target_include_directories(tests PRIVATE Tests)
|
||||
target_link_libraries(tests Catch)
|
||||
if(NOT PROJECT_VERSION_FLAVOUR STREQUAL "")
|
||||
set(PROJECT_VERSION "${PROJECT_VERSION}-${PROJECT_VERSION_FLAVOUR}")
|
||||
add_compile_definitions(FW_FLAVOR=${PROJECT_VERSION_FLAVOUR})
|
||||
if(NOT PROJECT_VERSION_FLAVOUR_REVISION STREQUAL "")
|
||||
set(PROJECT_VERSION "${PROJECT_VERSION}${PROJECT_VERSION_FLAVOUR_REVISION}")
|
||||
add_compile_definitions(FW_FLAVERSION=${PROJECT_VERSION_FLAVOUR_REVISION})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Inform user about the resolved settings
|
||||
message(STATUS "Project version: ${PROJECT_VERSION}")
|
||||
message(
|
||||
STATUS "Project version with short suffix: ${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX_SHORT}"
|
||||
)
|
||||
|
||||
set(FN_PREFIX "FW${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX_SHORT}")
|
||||
|
||||
message(
|
||||
WARNING
|
||||
"
|
||||
***************** YOUR ATTENTION PLEASE *****************
|
||||
CMake support is experimental. There is no guarantee at this time. If you have problems you are encouraged to fall back to the tried-and-true methods.
|
||||
*********************** THANK YOU **********************
|
||||
We now return to your regularly scheduled Firmware Build."
|
||||
)
|
||||
|
||||
option(SECONDARY_LANGUAGES "Secondary language support in the firmware" ON)
|
||||
|
||||
# Language configuration
|
||||
set(MAIN_LANGUAGES
|
||||
cs de es fr it pl
|
||||
CACHE STRING "The list of 'main' languages to be included, in the correct order"
|
||||
)
|
||||
set(COMMUNITY_LANGUAGES
|
||||
nl
|
||||
ro
|
||||
hu
|
||||
hr
|
||||
sk
|
||||
sv
|
||||
no
|
||||
CACHE STRING "The list of community languages to be included, in the correct order"
|
||||
)
|
||||
set(SELECTED_LANGUAGES ${MAIN_LANGUAGES} ${COMMUNITY_LANGUAGES})
|
||||
|
||||
get_dependency_directory(prusa3dboards PRUSA_BOARDS_DIR)
|
||||
project(Prusa-Firmware)
|
||||
add_subdirectory(lib)
|
||||
|
||||
# Get LANG_MAX_SIZE from sources
|
||||
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/config.h MAX_SIZE_LINE
|
||||
REGEX "^#define \+LANG_SIZE_RESERVED \+"
|
||||
)
|
||||
string(REGEX MATCH "0x[0-9]+" MAX_SIZE_HEX "${MAX_SIZE_LINE}")
|
||||
math(EXPR LANG_MAX_SIZE "${MAX_SIZE_HEX}" OUTPUT_FORMAT DECIMAL)
|
||||
message("Language maximum size (from config.h): ${LANG_MAX_SIZE} bytes")
|
||||
|
||||
# Ditto, this in xflash_layout.h but needs invocation of the preprocessor... :-/
|
||||
set(LANG_BIN_MAX 249856)
|
||||
|
||||
# Check GCC Version
|
||||
get_recommended_gcc_version(RECOMMENDED_TOOLCHAIN_VERSION)
|
||||
if(CMAKE_CROSSCOMPILING AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL
|
||||
${RECOMMENDED_TOOLCHAIN_VERSION}
|
||||
)
|
||||
message(WARNING "Recommended AVR toolchain is ${RECOMMENDED_TOOLCHAIN_VERSION}"
|
||||
", but you have ${CMAKE_CXX_COMPILER_VERSION}"
|
||||
)
|
||||
|
||||
elseif(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
message(
|
||||
WARNING
|
||||
"Recommended compiler for host tools and unittests is GCC, you have ${CMAKE_CXX_COMPILER_ID}."
|
||||
)
|
||||
endif()
|
||||
|
||||
# append custom C/C++ flags
|
||||
if(CUSTOM_COMPILE_OPTIONS)
|
||||
string(REPLACE " " ";" CUSTOM_COMPILE_OPTIONS "${CUSTOM_COMPILE_OPTIONS}")
|
||||
add_compile_options(${CUSTOM_COMPILE_OPTIONS})
|
||||
endif()
|
||||
|
||||
#
|
||||
# Global Compiler & Linker Configuration
|
||||
#
|
||||
|
||||
# enable warnings
|
||||
add_compile_options(-Wall -Wextra -Wno-expansion-to-defined -Wsign-compare)
|
||||
|
||||
# default standards for all targets
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
# support _DEBUG macro (some code uses to recognize debug builds)
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
add_compile_definitions(_DEBUG)
|
||||
endif()
|
||||
|
||||
#
|
||||
# Firmware - get file lists.
|
||||
#
|
||||
set(FW_SOURCES
|
||||
adc.cpp
|
||||
backlight.cpp
|
||||
BlinkM.cpp
|
||||
bootapp.c
|
||||
cardreader.cpp
|
||||
cmdqueue.cpp
|
||||
Configuration.cpp
|
||||
ConfigurationStore.cpp
|
||||
conv2str.cpp
|
||||
Dcodes.cpp
|
||||
eeprom.cpp
|
||||
fancheck.cpp
|
||||
Filament_sensor.cpp
|
||||
first_lay_cal.cpp
|
||||
heatbed_pwm.cpp
|
||||
la10compat.cpp
|
||||
language.c
|
||||
lcd.cpp
|
||||
Marlin_main.cpp
|
||||
MarlinSerial.cpp
|
||||
menu.cpp
|
||||
mesh_bed_calibration.cpp
|
||||
mesh_bed_leveling.cpp
|
||||
messages.cpp
|
||||
mmu2.cpp
|
||||
mmu2_crc.cpp
|
||||
mmu2_error_converter.cpp
|
||||
mmu2_fsensor.cpp
|
||||
mmu2_log.cpp
|
||||
mmu2_power.cpp
|
||||
mmu2_progress_converter.cpp
|
||||
mmu2_protocol.cpp
|
||||
mmu2_protocol_logic.cpp
|
||||
mmu2_reporting.cpp
|
||||
mmu2_serial.cpp
|
||||
motion_control.cpp
|
||||
optiboot_xflash.cpp
|
||||
pat9125.cpp
|
||||
planner.cpp
|
||||
Prusa_farm.cpp
|
||||
qr_solve.cpp
|
||||
rbuf.c
|
||||
Sd2Card.cpp
|
||||
SdBaseFile.cpp
|
||||
SdFatUtil.cpp
|
||||
SdFile.cpp
|
||||
SdVolume.cpp
|
||||
Servo.cpp
|
||||
sm4.c
|
||||
sound.cpp
|
||||
speed_lookuptable.cpp
|
||||
spi.c
|
||||
SpoolJoin.cpp
|
||||
stepper.cpp
|
||||
swi2c.c
|
||||
swspi.cpp
|
||||
Tcodes.cpp
|
||||
temperature.cpp
|
||||
timer02.c
|
||||
Timer.cpp
|
||||
tmc2130.cpp
|
||||
tone04.c
|
||||
twi.cpp
|
||||
uart2.c
|
||||
ultralcd.cpp
|
||||
util.cpp
|
||||
vector_3.cpp
|
||||
xflash.c
|
||||
xflash_dump.cpp
|
||||
xyzcal.cpp
|
||||
)
|
||||
list(TRANSFORM FW_SOURCES PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/)
|
||||
|
||||
set(AVR_SOURCES
|
||||
wiring_digital.c
|
||||
WInterrupts.c
|
||||
wiring_pulse.c
|
||||
hooks.c
|
||||
wiring.c
|
||||
wiring_analog.c
|
||||
wiring_shift.c
|
||||
CDC.cpp
|
||||
PluggableUSB.cpp
|
||||
HardwareSerial.cpp
|
||||
HardwareSerial0.cpp
|
||||
HardwareSerial1.cpp
|
||||
HardwareSerial3.cpp
|
||||
IPAddress.cpp
|
||||
HardwareSerial2.cpp
|
||||
Print.cpp
|
||||
Stream.cpp
|
||||
Tone.cpp
|
||||
USBCore.cpp
|
||||
WMath.cpp
|
||||
WString.cpp
|
||||
abi.cpp
|
||||
main.cpp
|
||||
)
|
||||
list(TRANSFORM AVR_SOURCES PREPEND ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/)
|
||||
|
||||
#
|
||||
# Target configuration
|
||||
#
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
# TODO: get date from the last git commit to set as epoch
|
||||
set_source_epoch(0)
|
||||
|
||||
# default optimization flags
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-Og -g")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-Os -g -DNDEBUG")
|
||||
set(CMAKE_C_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
|
||||
set(CMAKE_C_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
|
||||
|
||||
# mcu and target-related settings
|
||||
add_compile_options(
|
||||
-mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_PRUSA_EINSY_RAMBO
|
||||
-DARDUINO_ARCH_AVR
|
||||
)
|
||||
add_link_options(-mmcu=atmega2560 -Wl,-u,vfprintf -lprintf_flt -lm)
|
||||
|
||||
# disable some C++ language features
|
||||
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-threadsafe-statics>)
|
||||
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>)
|
||||
|
||||
# disable exceptions
|
||||
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>)
|
||||
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-unwind-tables>)
|
||||
|
||||
# split and gc sections
|
||||
add_compile_options(-ffunction-sections -fdata-sections)
|
||||
add_link_options(-ffunction-sections -fdata-sections -Wl,--gc-sections)
|
||||
|
||||
# LTO (with custom options)
|
||||
add_compile_options(-flto -fno-fat-lto-objects)
|
||||
add_link_options(-flto)
|
||||
|
||||
# Create this target before we apply the GC options
|
||||
add_library(avr_core STATIC ${AVR_SOURCES})
|
||||
set_reproducible_target(avr_core)
|
||||
target_include_directories(
|
||||
avr_core PRIVATE ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
|
||||
${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/
|
||||
)
|
||||
endif()
|
||||
|
||||
# Meta targets to build absolutely everything
|
||||
add_custom_target(ALL_FIRMWARE)
|
||||
add_custom_target(ALL_ENGLISH)
|
||||
add_custom_target(ALL_MULTILANG)
|
||||
add_dependencies(ALL_FIRMWARE ALL_ENGLISH ALL_MULTILANG)
|
||||
set_target_properties(ALL_MULTILANG PROPERTIES EXCLUDE_FROM_ALL FALSE)
|
||||
|
||||
function(add_base_binary variant_name)
|
||||
add_executable(${variant_name} ${FW_SOURCES} ${FW_HEADERS} ${VARIANT_CFG_DST})
|
||||
set_target_properties(${variant_name} PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
||||
set_reproducible_target(${variant_name})
|
||||
|
||||
target_include_directories(
|
||||
${variant_name}
|
||||
PRIVATE ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
|
||||
${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/ ${CMAKE_SOURCE_DIR}/Firmware
|
||||
)
|
||||
|
||||
target_link_libraries(${variant_name} avr_core)
|
||||
|
||||
# configure linker script
|
||||
set(LINKER_SCRIPT ${PRUSA_BOARDS_DIR}/ldscripts/avr6.xn)
|
||||
target_link_options(${variant_name} PUBLIC -Wl,-T,${LINKER_SCRIPT})
|
||||
|
||||
# limit the text section to 248K (256K - 8k reserved for the bootloader)
|
||||
target_link_options(${variant_name} PUBLIC -Wl,--defsym=__TEXT_REGION_LENGTH__=248K)
|
||||
|
||||
# produce ASM listing. Note we also specify the .map as a byproduct so it gets cleaned because
|
||||
# link_options doesn't have a "generated outputs" feature.
|
||||
add_custom_command(
|
||||
TARGET ${variant_name}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_OBJDUMP} --prefix ${CMAKE_SOURCE_DIR} -CSd ${variant_name} > ${variant_name}.asm
|
||||
BYPRODUCTS ${variant_name}.asm ${variant_name}.map
|
||||
)
|
||||
|
||||
# inform about the firmware's size in terminal
|
||||
add_custom_command(
|
||||
TARGET ${variant_name}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_SIZE_UTIL} -C --mcu=atmega2560 ${variant_name}
|
||||
)
|
||||
report_size(${variant_name})
|
||||
|
||||
# generate linker map file
|
||||
target_link_options(
|
||||
${variant_name} PUBLIC -Wl,-Map=${CMAKE_CURRENT_BINARY_DIR}/${variant_name}.map
|
||||
)
|
||||
|
||||
target_compile_definitions(${variant_name} PRIVATE CMAKE_CONTROL)
|
||||
endfunction()
|
||||
|
||||
function(fw_add_variant variant_name)
|
||||
set(variant_header "variants/${variant_name}.h")
|
||||
string(REPLACE "1_75mm_" "" variant_name "${variant_name}")
|
||||
string(REPLACE "-E3Dv6full" "" variant_name "${variant_name}")
|
||||
|
||||
# Single-language build
|
||||
set(FW_EN "${variant_name}_EN-only")
|
||||
set(FW_HEX ${CMAKE_BINARY_DIR}/${FN_PREFIX}-${FW_EN}.hex)
|
||||
|
||||
add_base_binary(${FW_EN})
|
||||
target_compile_definitions(${FW_EN} PUBLIC LANG_MODE=0 FW_VARIANT="${variant_header}")
|
||||
add_custom_command(
|
||||
TARGET ${FW_EN}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_OBJCOPY} -O ihex ${FW_EN} ${FW_EN}.hex
|
||||
COMMAND ${CMAKE_COMMAND} -E create_hardlink ${FW_EN}.hex ${FW_HEX}
|
||||
BYPRODUCTS ${FW_EN}.hex ${FW_HEX}
|
||||
COMMENT "Generating ${FW_EN}.hex"
|
||||
)
|
||||
add_dependencies(ALL_ENGLISH ${FW_EN})
|
||||
|
||||
# Multi-language build/s
|
||||
set(FW_LANG_BASE "${variant_name}_Multilang_base")
|
||||
set(FW_LANG_PATCH "${variant_name}_Multilang_patch")
|
||||
add_base_binary(${FW_LANG_BASE})
|
||||
target_compile_definitions(${FW_LANG_BASE} PUBLIC LANG_MODE=1 FW_VARIANT="${variant_header}")
|
||||
|
||||
# Construct language map
|
||||
set(LANG_TMP_DIR lang)
|
||||
set(LANG_MAP ${LANG_TMP_DIR}/${variant_name}_lang.map)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${LANG_MAP}
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary ${FW_LANG_BASE} ${FW_LANG_PATCH}.bin
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-map.py ${FW_LANG_BASE} ${FW_LANG_PATCH}.bin > ${LANG_MAP}
|
||||
COMMAND ${CMAKE_OBJCOPY} -I binary -O ihex ${FW_LANG_PATCH}.bin ${FW_LANG_PATCH}.hex
|
||||
DEPENDS ${FW_LANG_BASE}
|
||||
BYPRODUCTS ${FW_LANG_PATCH}.bin ${FW_LANG_PATCH}.hex
|
||||
COMMENT "Generating ${variant_name} language map"
|
||||
)
|
||||
|
||||
# Base targets for language checks
|
||||
add_custom_target(check_lang_${variant_name})
|
||||
add_dependencies(check_lang check_lang_${variant_name})
|
||||
|
||||
# Build language catalogs
|
||||
set(LANG_BINS "")
|
||||
foreach(LANG IN LISTS SELECTED_LANGUAGES)
|
||||
set(LANG_BIN ${LANG_TMP_DIR}/${variant_name}_${LANG}.bin)
|
||||
set(PO_FILE "${CMAKE_SOURCE_DIR}/lang/po/Firmware_${LANG}.po")
|
||||
|
||||
# Full language checks
|
||||
add_custom_target(
|
||||
check_lang_${variant_name}_${LANG}
|
||||
COMMENT "Checking ${variant_name} language ${LANG}"
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-check.py --map ${LANG_MAP} ${PO_FILE}
|
||||
DEPENDS ${LANG_MAP} ${PO_FILE}
|
||||
USES_TERMINAL
|
||||
)
|
||||
add_dependencies(check_lang_${variant_name} check_lang_${variant_name}_${LANG})
|
||||
add_dependencies(check_lang_${LANG} check_lang_${variant_name}_${LANG})
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${LANG_BIN}
|
||||
# Check po file for errors _only_
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-check.py --errors-only --map ${LANG_MAP} ${PO_FILE}
|
||||
# Build the catalog
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-build.py ${LANG_MAP} ${PO_FILE} ${LANG_BIN}
|
||||
# Check bin size
|
||||
COMMAND ${CMAKE_COMMAND} -DLANG_MAX_SIZE=${LANG_MAX_SIZE} -DLANG_FILE=${LANG_BIN} -P
|
||||
${PROJECT_CMAKE_DIR}/Check_lang_size.cmake
|
||||
DEPENDS ${LANG_MAP} ${PO_FILE}
|
||||
COMMENT "Generating ${variant_name}_${LANG}.bin"
|
||||
)
|
||||
list(APPEND LANG_BINS ${LANG_BIN})
|
||||
endforeach()
|
||||
|
||||
string(FIND ${variant_name} "MK3" HAS_XFLASH)
|
||||
if(${HAS_XFLASH} GREATER_EQUAL 0)
|
||||
# X-Flash based build (catalogs appended to patched binary)
|
||||
set(FW_LANG_FINAL "${variant_name}_Multilang")
|
||||
set(LANG_HEX ${CMAKE_BINARY_DIR}/${FN_PREFIX}-${FW_LANG_FINAL}.hex)
|
||||
set(LANG_CATBIN ${LANG_TMP_DIR}/${variant_name}_cat.bin)
|
||||
set(LANG_CATHEX ${LANG_TMP_DIR}/${variant_name}_cat.hex)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${LANG_CATBIN}
|
||||
COMMAND ${CMAKE_COMMAND} -E cat ${LANG_BINS} > ${LANG_CATBIN}
|
||||
DEPENDS ${LANG_BINS}
|
||||
COMMENT "Merging language catalogs"
|
||||
)
|
||||
#[[
|
||||
#add_custom_command(OUTPUT ${LANG_FINAL_BIN}
|
||||
# COMMAND ${CMAKE_COMMAND} -DLANG_MAX_SIZE=${LANG_BIN_MAX} -DLANG_FILE=${LANG_FINAL_BIN}
|
||||
# -P ${PROJECT_CMAKE_DIR}/Check_final_lang_bin_size.cmake
|
||||
# APPEND)
|
||||
#]]
|
||||
add_custom_command(
|
||||
OUTPUT ${LANG_CATHEX}
|
||||
COMMAND ${CMAKE_OBJCOPY} -I binary -O ihex ${LANG_CATBIN} ${LANG_CATHEX}
|
||||
DEPENDS ${LANG_CATBIN}
|
||||
COMMENT "Generating Hex for language data"
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${FW_LANG_FINAL}.hex
|
||||
COMMAND ${CMAKE_COMMAND} -E cat ${FW_LANG_PATCH}.hex ${LANG_CATHEX} > ${FW_LANG_FINAL}.hex
|
||||
COMMAND ${CMAKE_COMMAND} -E create_hardlink ${FW_LANG_FINAL}.hex ${LANG_HEX}
|
||||
BYPRODUCTS ${LANG_HEX}
|
||||
DEPENDS ${FW_LANG_PATCH}.hex ${LANG_CATHEX}
|
||||
COMMENT "Generating final ${FW_LANG_FINAL}.hex"
|
||||
)
|
||||
|
||||
add_custom_target(${FW_LANG_FINAL} DEPENDS ${FW_LANG_FINAL}.hex)
|
||||
add_dependencies(ALL_MULTILANG ${FW_LANG_FINAL})
|
||||
else()
|
||||
set(ALL_VARIANT_HEXES "")
|
||||
# Non-xflash, e.g. MK2.5
|
||||
foreach(LANG IN LISTS SELECTED_LANGUAGES)
|
||||
set(FW_LANG_FINAL ${variant_name}-en_${LANG})
|
||||
set(LANG_HEX ${CMAKE_BINARY_DIR}/${FN_PREFIX}-${FW_LANG_FINAL}.hex)
|
||||
set(LANG_BIN ${LANG_TMP_DIR}/${variant_name}_${LANG}.bin)
|
||||
|
||||
# Patched binary with pre-baked secondary language
|
||||
add_custom_command(
|
||||
OUTPUT ${FW_LANG_FINAL}.bin
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary ${FW_LANG_BASE} ${FW_LANG_FINAL}.bin
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-patchsec.py ${FW_LANG_BASE} ${LANG_BIN}
|
||||
${FW_LANG_FINAL}.bin
|
||||
DEPENDS ${FW_LANG_BASE} ${LANG_BIN}
|
||||
COMMENT "Generating ${FW_LANG_FINAL}.bin"
|
||||
)
|
||||
|
||||
# Final hex files
|
||||
add_custom_command(
|
||||
OUTPUT ${FW_LANG_FINAL}.hex
|
||||
COMMAND ${CMAKE_OBJCOPY} -I binary -O ihex ${FW_LANG_FINAL}.bin ${FW_LANG_FINAL}.hex
|
||||
COMMAND ${CMAKE_COMMAND} -E create_hardlink ${FW_LANG_FINAL}.hex ${LANG_HEX}
|
||||
BYPRODUCTS ${LANG_HEX}
|
||||
DEPENDS ${FW_LANG_FINAL}.bin
|
||||
COMMENT "Creating ${FW_LANG_FINAL}.hex"
|
||||
)
|
||||
|
||||
add_custom_target(${FW_LANG_FINAL} DEPENDS ${FW_LANG_FINAL}.hex)
|
||||
list(APPEND ALL_VARIANT_HEXES ${FW_LANG_FINAL})
|
||||
endforeach()
|
||||
add_custom_target("${variant_name}-All-Languages" DEPENDS ${ALL_VARIANT_HEXES})
|
||||
add_dependencies(ALL_MULTILANG "${variant_name}-All-Languages")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
|
||||
# Main target for language checks
|
||||
add_custom_target(check_lang)
|
||||
foreach(LANG IN LISTS SELECTED_LANGUAGES)
|
||||
add_custom_target(check_lang_${LANG})
|
||||
add_dependencies(check_lang check_lang_${LANG})
|
||||
endforeach()
|
||||
|
||||
# build a list of all supported variants
|
||||
file(
|
||||
GLOB ALL_VARIANTS
|
||||
RELATIVE ${PROJECT_SOURCE_DIR}/Firmware/variants
|
||||
${PROJECT_SOURCE_DIR}/Firmware/variants/*.h
|
||||
)
|
||||
list(TRANSFORM ALL_VARIANTS REPLACE "\.h$" "")
|
||||
set(FW_VARIANTS
|
||||
${ALL_VARIANTS}
|
||||
CACHE STRING "Firmware variants to be built"
|
||||
)
|
||||
|
||||
foreach(THIS_VAR IN LISTS FW_VARIANTS)
|
||||
if(NOT ${THIS_VAR} IN_LIST ALL_VARIANTS)
|
||||
message(FATAL_ERROR "Variant ${THIS_VAR} does not exist")
|
||||
endif()
|
||||
|
||||
message("Variant added: ${THIS_VAR}")
|
||||
string(REPLACE "-E3Dv6full" "" DIR_NAME "${THIS_VAR}")
|
||||
string(REPLACE "1_75mm_" "" DIR_NAME "${DIR_NAME}")
|
||||
|
||||
# Generate a file in a subfolder so that we can organize things a little more neatly in VS code
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME})
|
||||
file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME}/CMakeLists.txt
|
||||
"project(${DIR_NAME})\nfw_add_variant(${THIS_VAR})"
|
||||
)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME})
|
||||
endforeach(THIS_VAR IN LISTS FW_VARIANTS)
|
||||
endif()
|
||||
|
||||
#
|
||||
# Tests
|
||||
#
|
||||
if(NOT CMAKE_CROSSCOMPILING)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include "Configuration.h"
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
|
||||
const uint16_t _nPrinterType PROGMEM=PRINTER_TYPE;
|
||||
const char _sPrinterName[] PROGMEM=PRINTER_NAME;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,14 @@ extern PGM_P sPrinterName;
|
|||
#undef DEBUG_BUILD
|
||||
#endif
|
||||
|
||||
#include "Configuration_prusa.h"
|
||||
#ifndef SOURCE_DATE_EPOCH
|
||||
#define SOURCE_DATE_EPOCH __DATE__
|
||||
#endif
|
||||
#ifndef SOURCE_TIME_EPOCH
|
||||
#define SOURCE_TIME_EPOCH __TIME__
|
||||
#endif
|
||||
|
||||
#include "Configuration_var.h"
|
||||
|
||||
#define FW_PRUSA3D_MAGIC "PRUSA3DFW"
|
||||
#define FW_PRUSA3D_MAGIC_LEN 10
|
||||
|
|
@ -78,9 +85,7 @@ extern PGM_P sPrinterName;
|
|||
// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
|
||||
// build by the user have been successfully uploaded into firmware.
|
||||
|
||||
//#define STRING_VERSION "1.0.2"
|
||||
|
||||
#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time
|
||||
#define STRING_VERSION_CONFIG_H SOURCE_DATE_EPOCH " " SOURCE_TIME_EPOCH // build date and time
|
||||
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
|
||||
|
||||
// SERIAL_PORT selects which serial port should be used for communication with the host.
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#include "temperature.h"
|
||||
#include "ultralcd.h"
|
||||
#include "ConfigurationStore.h"
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
|
||||
#ifdef MESH_BED_LEVELING
|
||||
#include "mesh_bed_leveling.h"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
// Include the printer's variant configuration header
|
||||
#pragma once
|
||||
|
||||
// This is set by the cmake build to be able to take control of
|
||||
// the variant header without breaking existing build mechanisms.
|
||||
#ifndef CMAKE_CONTROL
|
||||
#include "Configuration_prusa.h"
|
||||
#else
|
||||
#include FW_VARIANT
|
||||
#endif
|
||||
|
|
@ -278,7 +278,9 @@ void IR_sensor_analog::voltUpdate(uint16_t raw) { // to be called from the ADC I
|
|||
}
|
||||
|
||||
uint16_t IR_sensor_analog::getVoltRaw() {
|
||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { return voltRaw; }
|
||||
uint16_t ret;
|
||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ret = voltRaw; }
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char *IR_sensor_analog::getIRVersionText() {
|
||||
|
|
@ -339,7 +341,9 @@ bool IR_sensor_analog::checkVoltage(uint16_t raw) {
|
|||
}
|
||||
|
||||
bool IR_sensor_analog::getVoltReady() const {
|
||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE){ return voltReady; }
|
||||
bool ret;
|
||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE){ ret = voltReady; }
|
||||
return ret;
|
||||
}
|
||||
|
||||
void IR_sensor_analog::clearVoltReady(){
|
||||
|
|
@ -462,7 +466,9 @@ void PAT9125_sensor::settings_init() {
|
|||
}
|
||||
|
||||
int16_t PAT9125_sensor::getStepCount() {
|
||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { return stepCount; }
|
||||
int16_t ret;
|
||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ret = stepCount; }
|
||||
return ret;
|
||||
}
|
||||
|
||||
void PAT9125_sensor::resetStepCount() {
|
||||
|
|
|
|||
|
|
@ -386,7 +386,9 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
|
|||
void bed_check(float x_dimension, float y_dimension, int x_points_num, int y_points_num, float shift_x, float shift_y);
|
||||
#endif //HEATBED_ANALYSIS
|
||||
float temp_comp_interpolation(float temperature);
|
||||
#if 0
|
||||
void show_fw_version_warnings();
|
||||
#endif
|
||||
uint8_t check_printer_version();
|
||||
|
||||
#ifdef PINDA_THERMISTOR
|
||||
|
|
|
|||
|
|
@ -828,30 +828,31 @@ void factory_reset()
|
|||
}
|
||||
KEEPALIVE_STATE(IN_HANDLER);
|
||||
}
|
||||
|
||||
#if 0
|
||||
void show_fw_version_warnings() {
|
||||
if (FW_DEV_VERSION == FW_VERSION_GOLD || FW_DEV_VERSION == FW_VERSION_RC) return;
|
||||
switch (FW_DEV_VERSION) {
|
||||
case(FW_VERSION_ALPHA): lcd_show_fullscreen_message_and_wait_P(_i("You are using firmware alpha version. This is development version. Using this version is not recommended and may cause printer damage.")); break;////MSG_FW_VERSION_ALPHA c=20 r=8
|
||||
case(FW_VERSION_BETA): lcd_show_fullscreen_message_and_wait_P(_i("You are using firmware beta version. This is development version. Using this version is not recommended and may cause printer damage.")); break;////MSG_FW_VERSION_BETA c=20 r=8
|
||||
case(FW_VERSION_BETA): lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_BETA); break;
|
||||
case(FW_VERSION_ALPHA):
|
||||
case(FW_VERSION_DEVEL):
|
||||
case(FW_VERSION_DEBUG):
|
||||
lcd_update_enable(false);
|
||||
lcd_clear();
|
||||
#if FW_DEV_VERSION == FW_VERSION_DEVEL
|
||||
#if (FW_DEV_VERSION == FW_VERSION_DEVEL || FW_DEV_VERSION == FW_VERSION_ALPHA)
|
||||
lcd_puts_at_P(0, 0, PSTR("Development build !!"));
|
||||
#else
|
||||
lcd_puts_at_P(0, 0, PSTR("Debbugging build !!!"));
|
||||
#endif
|
||||
lcd_puts_at_P(0, 1, PSTR("May destroy printer!"));
|
||||
lcd_puts_at_P(0, 2, PSTR("ver ")); lcd_puts_P(PSTR(FW_VERSION_FULL));
|
||||
lcd_puts_at_P(0, 3, PSTR(FW_REPOSITORY));
|
||||
lcd_puts_at_P(0, 2, PSTR("FW")); lcd_puts_P(PSTR(FW_VERSION_FULL));
|
||||
lcd_puts_at_P(0, 3, PSTR("Repo: ")); lcd_puts_P(PSTR(FW_REPOSITORY));
|
||||
lcd_wait_for_click();
|
||||
break;
|
||||
// default: lcd_show_fullscreen_message_and_wait_P(_i("WARNING: This is an unofficial, unsupported build. Use at your own risk!")); break;////MSG_FW_VERSION_UNKNOWN c=20 r=8
|
||||
}
|
||||
lcd_update_enable(true);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FILAMENT_SENSOR) && defined(FSENSOR_PROBING)
|
||||
//! @brief try to check if firmware is on right type of printer
|
||||
|
|
@ -1216,8 +1217,6 @@ void setup()
|
|||
SERIAL_ECHOPGM(STRING_VERSION_CONFIG_H);
|
||||
SERIAL_ECHORPGM(_n(" | Author: "));////MSG_AUTHOR
|
||||
SERIAL_ECHOLNPGM(STRING_CONFIG_H_AUTHOR);
|
||||
SERIAL_ECHOPGM("Compiled: ");
|
||||
SERIAL_ECHOLNPGM(__DATE__);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
@ -1487,7 +1486,9 @@ void setup()
|
|||
#if defined(FILAMENT_SENSOR) && defined(FSENSOR_PROBING)
|
||||
check_if_fw_is_on_right_printer();
|
||||
#endif //defined(FILAMENT_SENSOR) && defined(FSENSOR_PROBING)
|
||||
#if 0
|
||||
show_fw_version_warnings();
|
||||
#endif
|
||||
}
|
||||
|
||||
switch (hw_changed) {
|
||||
|
|
@ -1593,17 +1594,17 @@ void setup()
|
|||
manage_heater(); // Update temperatures
|
||||
#ifdef DEBUG_UVLO_AUTOMATIC_RECOVER
|
||||
printf_P(_N("Power panic detected!\nCurrent bed temp:%d\nSaved bed temp:%d\n"), (int)degBed(), eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_BED));
|
||||
#endif
|
||||
#endif
|
||||
if ( degBed() > ( (float)eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_BED) - AUTOMATIC_UVLO_BED_TEMP_OFFSET) ){
|
||||
#ifdef DEBUG_UVLO_AUTOMATIC_RECOVER
|
||||
puts_P(_N("Automatic recovery!"));
|
||||
#endif
|
||||
#endif
|
||||
recover_print(1);
|
||||
}
|
||||
else{
|
||||
#ifdef DEBUG_UVLO_AUTOMATIC_RECOVER
|
||||
puts_P(_N("Normal recovery!"));
|
||||
#endif
|
||||
#endif
|
||||
if ( lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false) == LCD_LEFT_BUTTON_CHOICE) {
|
||||
recover_print(0);
|
||||
} else {
|
||||
|
|
@ -4570,7 +4571,7 @@ eeprom_update_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM,0xFFFF);
|
|||
retract(false,retracted_swap[active_extruder]);
|
||||
#else
|
||||
retract(false);
|
||||
#endif
|
||||
#endif
|
||||
break;
|
||||
#endif //FWRETRACT
|
||||
|
||||
|
|
@ -11345,11 +11346,11 @@ void restore_print_from_ram_and_continue(float e_move)
|
|||
// restore bed temperature (bed can be disabled during a thermal warning)
|
||||
if (degBed() != saved_bed_temperature)
|
||||
setTargetBed(saved_bed_temperature);
|
||||
fanSpeed = saved_fan_speed;
|
||||
restore_extruder_temperature_from_ram();
|
||||
axis_relative_modes ^= (-saved_extruder_relative_mode ^ axis_relative_modes) & E_AXIS_MASK;
|
||||
float e = saved_pos[E_AXIS] - e_move;
|
||||
plan_set_e_position(e);
|
||||
fanSpeed = saved_fan_speed;
|
||||
restore_extruder_temperature_from_ram();
|
||||
axis_relative_modes ^= (-saved_extruder_relative_mode ^ axis_relative_modes) & E_AXIS_MASK;
|
||||
float e = saved_pos[E_AXIS] - e_move;
|
||||
plan_set_e_position(e);
|
||||
|
||||
#ifdef FANCHECK
|
||||
fans_check_enabled = false;
|
||||
|
|
|
|||
|
|
@ -311,13 +311,16 @@ bool Sd2Card::init(uint8_t sckRateID) {
|
|||
// must supply min of 74 clock cycles with CS high.
|
||||
for (uint8_t i = 0; i < 10; i++) spiSend(0XFF);
|
||||
|
||||
WRITE(MISO, 1); // temporarily enable the MISO line pullup
|
||||
// command to go idle in SPI mode
|
||||
while ((status_ = cardCommand(CMD0, 0)) != R1_IDLE_STATE) {
|
||||
if (((uint16_t)_millis() - t0) > SD_INIT_TIMEOUT) {
|
||||
WRITE(MISO, 0); // disable the MISO line pullup
|
||||
error(SD_CARD_ERROR_CMD0);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
WRITE(MISO, 0); // disable the MISO line pullup
|
||||
|
||||
// send 0xFF until 0xFF received to give card some clock cycles
|
||||
t0 = (uint16_t)_millis();
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#define _CONFIG_H
|
||||
|
||||
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
#include "pins.h"
|
||||
|
||||
#if (defined(VOLT_IR_PIN) && defined(IR_SENSOR))
|
||||
|
|
@ -60,9 +60,13 @@
|
|||
#define TMC2130_SPCR SPI_SPCR(TMC2130_SPI_RATE, 1, 1, 1, 0)
|
||||
#define TMC2130_SPSR SPI_SPSR(TMC2130_SPI_RATE)
|
||||
|
||||
// This is set by the cmake build to be able to take control of
|
||||
// the language flag, without breaking existing build mechanisms.
|
||||
#ifndef CMAKE_CONTROL
|
||||
//LANG - Multi-language support
|
||||
//#define LANG_MODE 0 // primary language only
|
||||
#define LANG_MODE 1 // sec. language support
|
||||
#endif
|
||||
|
||||
#define LANG_SIZE_RESERVED 0x3500 // reserved space for secondary language (13568 bytes).
|
||||
// 0x3D00 Maximum 15616 bytes as it depends on xflash_layout.h
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* @author 3d-gussner
|
||||
*/
|
||||
/** \ingroup eeprom_table */
|
||||
|
||||
|
||||
//! _This is a EEPROM table of currently implemented in Prusa firmware (dynamically generated from doxygen)._
|
||||
|
||||
|
||||
|
|
@ -37,29 +37,29 @@ typedef struct
|
|||
static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEPROM_SHEETS_SIZEOF.");
|
||||
#endif
|
||||
/** @defgroup eeprom_table EEPROM Table
|
||||
*
|
||||
|
||||
*
|
||||
|
||||
---------------------------------------------------------------------------------
|
||||
EEPROM 8-bit Empty value = 0xFFh 255
|
||||
|
||||
|
||||
EEPROM 16-bit Empty value = 0xFFFFh 65535
|
||||
|
||||
|
||||
_Italic = unused or default_
|
||||
|
||||
|
||||
__Bold = Status__
|
||||
|
||||
In Default/FactoryReset column the
|
||||
|
||||
- __L__ Language
|
||||
- __S__ Statistics
|
||||
- __P__ Shipping prep
|
||||
- __M__ Service/Maintenance prep
|
||||
- __S/P__ Statistics and Shipping prep
|
||||
|
||||
|
||||
In Default/FactoryReset column the
|
||||
|
||||
- __L__ Language
|
||||
- __S__ Statistics
|
||||
- __P__ Shipping prep
|
||||
- __M__ Service/Maintenance prep
|
||||
- __S/P__ Statistics and Shipping prep
|
||||
|
||||
will overwrite existing values to 0 or default.
|
||||
A FactoryReset All Data will overwrite the whole EEPROM with ffh and some values will be initialized automatically,
|
||||
others need a reset / reboot.
|
||||
|
||||
|
||||
---------------------------------------------------------------------------------
|
||||
How can you use the debug codes?
|
||||
- Serial terminal like Putty.
|
||||
|
|
@ -67,283 +67,291 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
- _Pronterface_ does __not__ support D-codes
|
||||
|
||||
### !!! D-codes are case sensitive so please don't use upper case A,C or X in the address you want to read !!!
|
||||
|
||||
#### Useful tools/links:
|
||||
To convert hex to ascii https://www.rapidtables.com/convert/number/hex-to-ascii.html
|
||||
|
||||
To convert hex to dec https://www.rapidtables.com/convert/number/hex-to-decimal.html
|
||||
|
||||
Version: 1.0.1
|
||||
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
|
||||
| Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code
|
||||
| :-- | :-- | :-- | :--: | :--: | :-- | :--: | :--:
|
||||
| 0x0FFFh 4095 | uchar | EEPROM_SILENT | 00h 0 | ffh 255 | TMC Stealth mode: __off__ / miniRambo Power mode | LCD menu | D3 Ax0fff C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | TMC Stealth mode: __on__ / miniRambo Silent mode | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | miniRambo Auto mode | ^ | ^
|
||||
| 0x0FFEh 4094 | uchar | EEPROM_LANG | 00h 0 | ffh 255 __L__ | English / LANG_ID_PRI | LCD menu | D3 Ax0ffe C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Other language LANG_ID_SEC | ^ | ^
|
||||
| 0x0FFCh 4092 | uint16 | EEPROM_BABYSTEP_X | ??? | ff ffh 65535 | Babystep for X axis _unsued_ | ??? | D3 Ax0ffc C2
|
||||
| 0x0FFAh 4090 | uint16 | EEPROM_BABYSTEP_Y | ??? | ff ffh 65535 | Babystep for Y axis _unsued_ | ^ | D3 Ax0ffa C2
|
||||
| 0x0FF8h 4088 | uint16 | EEPROM_BABYSTEP_Z | ??? | ff ffh 65535 | Babystep for Z axis _lagacy_ | ^ | D3 Ax0ff8 C2
|
||||
| ^ | ^ | ^ | ^ | ^ | multiple values stored now in EEPROM_Sheets_base | ^ | ^
|
||||
| 0x0FF7h 4087 | uint8 | EEPROM_CALIBRATION_STATUS | ffh 255 | ffh 255 | Assembled _default_ | ??? | D3 Ax0ff7 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Calibrated | ^ | ^
|
||||
| ^ | ^ | ^ | e6h 230 | ^ | needs Live Z adjustment | ^ | ^
|
||||
| ^ | ^ | ^ | f0h 240 | ^ __P__ | needs Z calibration | ^ | ^
|
||||
| ^ | ^ | ^ | fah 250 | ^ | needs XYZ calibration | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Unknown | ^ | ^
|
||||
| 0x0FF5h 4085 | uint16 | EEPROM_BABYSTEP_Z0 | ??? | ff ffh 65535 | Babystep for Z ??? | ??? | D3 Ax0ff5 C2
|
||||
| 0x0FF1h 4081 | uint32 | EEPROM_FILAMENTUSED | ??? | 00 00 00 00h 0 __S/P__| Filament used in meters | ??? | D3 Ax0ff1 C4
|
||||
| 0x0FEDh 4077 | uint32 | EEPROM_TOTALTIME | ??? | 00 00 00 00h 0 __S/P__| Total print time | ??? | D3 Ax0fed C4
|
||||
| 0x0FE5h 4069 | float | EEPROM_BED_CALIBRATION_CENTER | ??? | ff ff ff ffh | ??? | ??? | D3 Ax0fe5 C8
|
||||
| 0x0FDDh 4061 | float | EEPROM_BED_CALIBRATION_VEC_X | ??? | ff ff ff ffh | ??? | ??? | D3 Ax0fdd C8
|
||||
| 0x0FD5h 4053 | float | EEPROM_BED_CALIBRATION_VEC_Y | ??? | ff ff ff ffh | ??? | ??? | D3 Ax0fd5 C8
|
||||
| 0x0FC5h 4037 | int16 | EEPROM_BED_CALIBRATION_Z_JITTER | ??? | ff ffh 65535 | ??? | ??? | D3 Ax0fc5 C16
|
||||
| 0x0FC4h 4036 | bool | EEPROM_FARM_MODE | 00h 0 | ffh 255 __P__ | Prusa farm mode: __off__ | G99 | D3 Ax0fc4 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Prusa farm mode: __on__ | G98 | ^
|
||||
| 0x0FC3h 4035 | free | _EEPROM_FREE_NR1_ | ??? | ffh 255 | _Free EEPROM space_ | _free space_ | D3 Ax0fc3 C1
|
||||
| 0x0FC1h 4033 | ??? | EEPROM_FARM_NUMBER | 000-999 | ff ffh / 000 __P__ | Prusa farm number _only 0-9 are allowed: 000-999_ | LCD menu | D3 Ax0fc1 C2
|
||||
| 0x0FC0h 4032 | bool | EEPROM_BED_CORRECTION_VALID | 00h 0 | 00h 0 | Bed correction invalid | ??? | D3 Ax0fc0 C1
|
||||
| ^ | ^ | ^ | ffh 255 | | Bed correction valid | ??? | ^
|
||||
| 0x0FBFh 4031 | char | EEPROM_BED_CORRECTION_LEFT | 00h ffh | 00h 0 | Bed manual correction left | LCD menu | D3 Ax0fbf C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Lxxx | ^
|
||||
| 0x0FBEh 4030 | char | EEPROM_BED_CORRECTION_RIGHT | 00h ffh | 00h 0 | Bed manual correction right | LCD menu | D3 Ax0fbe C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Rxxx | ^
|
||||
| 0x0FBDh 4029 | char | EEPROM_BED_CORRECTION_FRONT | 00h ffh | 00h 0 | Bed manual correction front | LCD menu | D3 Ax0fbd C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Fxxx | ^
|
||||
| 0x0FBCh 4028 | char | EEPROM_BED_CORRECTION_BACK | 00h ffh | 00h 0 | Bed manual correction back | LCD menu | D3 Ax0fbc C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Bxxx | ^
|
||||
| 0x0FBBh 4027 | bool | EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY | 00h 0 | ffh 255 | Toshiba Air: __off__ | LCD menu | D3 Ax0fbb C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Toshiba Air: __on__ | ^ | ^
|
||||
| 0x0FBAh 4026 | uchar | EEPROM_PRINT_FLAG | ??? | ??? | _unsued_ | ??? | D3 Ax0fba C1
|
||||
| 0x0FB0h 4016 | int16 | EEPROM_PROBE_TEMP_SHIFT | ??? | ??? | ??? | ??? | D3 Ax0fb0 C10
|
||||
| 0x0FAFh 4015 | bool | EEPROM_TEMP_CAL_ACTIVE | 00h 0 | 00h 0 | PINDA Temp cal.: __inactive__ | LCD menu | D3 Ax0faf C1
|
||||
| ^ | ^ | ^ | ffh 255 | ^ | PINDA Temp cal.: __active__ | ^ | ^
|
||||
| 0x0FA7h 4007 | ??? | _EEPROM_FREE_NR6_ | ??? | | _Free EEPROM space_ | ??? | D3 Ax0fae C8
|
||||
| ^ | ^ | ^ | ^ | 00 00 00 00h | ^ | ^ | ^
|
||||
| 0x0FA6h 4006 | uint8 | EEPROM_CALIBRATION_STATUS_PINDA | 00h 0 | ffh 255 | PINDA Temp: __not calibrated__ | ??? | D3 Ax0fa6 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | PINDA Temp: __calibrated__ | ^ | ^
|
||||
| 0x0FA5h 4005 | uint8 | EEPROM_UVLO | 00h 0 | ffh 255 | Power Panic flag: __inactive__ | ??? | D3 Ax0fa5 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Power Panic flag: __active__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | Power Panic flag: __???__ | ^ | ^
|
||||
| 0x0F9Dh 3997 | float | EEPROM_UVLO_CURRENT_POSITION | ??? | ffh 255 | Power Panic position | ??? | D3 Ax0f9d C8
|
||||
| 0x0F95h 3989 | char | EEPROM_FILENAME | ??? | ffh 255 | Power Panic Filename | ??? | D3 Ax0f95 C8
|
||||
| 0x0F91h 3985 | uint32 | EEPROM_FILE_POSITION | ??? | ff ff ff ffh | Power Panic File Position | ??? | D3 Ax0f91 C4
|
||||
| 0x0F8Dh 3981 | float | EEPROM_UVLO_CURRENT_POSITION_Z | ??? | ff ff ff ffh | Power Panic Z Position | ^ | D3 Ax0f8d C4
|
||||
| 0x0F8Ch 3980 | ??? | EEPROM_UVLO_UNUSED_001 | ??? | ffh 255 | Power Panic _unused_ | ^ | D3 Ax0f8c C1
|
||||
| 0x0F8Bh 3979 | uint8 | EEPROM_UVLO_TARGET_BED | ??? | ffh 255 | Power Panic Bed temperature | ^ | D3 Ax0f8b C1
|
||||
| 0x0F89h 3977 | uint16 | EEPROM_UVLO_FEEDRATE | ??? | ff ffh 65535 | Power Panic Feedrate | ^ | D3 Ax0f89 C2
|
||||
| 0x0F88h 3976 | uint8 | EEPROM_UVLO_FAN_SPEED | ??? | ffh 255 | Power Panic Fan speed | ^ | D3 Ax0f88 C1
|
||||
| 0x0F87h 3975 | uint8 | EEPROM_FAN_CHECK_ENABLED | 00h 0 | ??? | Fan Check __disabled__ | LCD menu | D3 Ax0f87 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ffh 255 | Fan Check __enabled__ | ^ | ^
|
||||
| 0x0F75h 3957 | uint16 | EEPROM_UVLO_MESH_BED_LEVELING | ??? | ff ffh 65535 | Power Panic Mesh Bed Leveling | ??? | D3 Ax0f75 C18
|
||||
| 0x0F73h 3955 | uint16 | EEPROM_UVLO_Z_MICROSTEPS | ??? | ff ffh 65535 | Power Panic Z microsteps | ??? | D3 Ax0f73 C2
|
||||
| 0x0F72h 3954 | uint8 | EEPROM_UVLO_E_ABS | ??? | ffh 255 | Power Panic ??? position | ??? | D3 Ax0f72 C1
|
||||
| 0x0F6Eh 3950 | float | EEPROM_UVLO_CURRENT_POSITION_E | ??? | ff ff ff ffh | Power Panic E position | ??? | D3 Ax0f6e C4
|
||||
| 0x0F6Ch 3948 | uint16_t | EEPROM_UVLO_SAVED_SEGMENT_IDX | all | ff ffh 65535 | Power Panic index of multi-segment move | ??? | D3 Ax0f6c C2
|
||||
| 0x0F6Bh 3947 | ??? | _EEPROM_FREE_NR4_ | ??? | ffh 255 | _Free EEPROM space_ | _free space_ | D3 Ax0f6b C1
|
||||
| 0x0F6Ah 3946 | ??? | _EEPROM_FREE_NR5_ | ??? | ffh 255 | _Free EEPROM space_ | _free space_ | D3 Ax0f6a C1
|
||||
| 0x0F69h 3945 | uint8 | EEPROM_CRASH_DET | ffh 255 | ffh 255 | Crash detection: __enabled__ | LCD menu | D3 Ax0f69 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Crash detection: __disabled__ | LCD menu | ^
|
||||
| 0x0F68h 3944 | uint8 | EEPROM_CRASH_COUNT_Y | 00h-ffh 0-255 | ffh 255 __S/P__ | Crashes detected on y axis | ??? | D3 Ax0f68 C1
|
||||
| 0x0F67h 3943 | uint8 | EEPROM_FSENSOR | 01h 1 | ffh 255 __P__ | Filament sensor: __enabled__ | LCD menu | D3 Ax0f67 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament sensor: __disabled__ | LCD menu | ^
|
||||
| 0x0F65h 3942 | uint8 | EEPROM_CRASH_COUNT_X | 00h-ffh 0-255 | ffh 255 __S/P__ | Crashes detected on x axis | ??? | D3 Ax0f66 C1
|
||||
| 0x0F65h 3941 | uint8 | EEPROM_FERROR_COUNT | 00h-ffh 0-255 | ffh 255 __S/P__ | Filament sensor error counter | ??? | D3 Ax0f65 C1
|
||||
| 0x0F64h 3940 | uint8 | EEPROM_POWER_COUNT | 00h-ffh 0-255 | ffh 255 __S/P__ | Power failure counter | ??? | D3 Ax0f64 C1
|
||||
| 0x0F60h 3936 | float | EEPROM_XYZ_CAL_SKEW | ??? | ff ff ff ffh | XYZ skew value | ??? | D3 Ax0f60 C4
|
||||
| 0x0F5Fh 3935 | uint8 | EEPROM_WIZARD_ACTIVE | 01h 1 | 01h 1 __P__ | Wizard __active__ | ??? | D3 Ax0f5f C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Wizard __inactive__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | 02h 2 __M__ | Wizard active - Z cal after shipping/service prep | ^ | ^
|
||||
| 0x0F5Dh 3933 | uint16 | EEPROM_BELTSTATUS_X | ??? | ff ffh | X Beltstatus | ??? | D3 Ax0f5d C2
|
||||
| 0x0F5Bh 3931 | uint16 | EEPROM_BELTSTATUS_Y | ??? | ff ffh | Y Beltstatus | ??? | D3 Ax0f5b C2
|
||||
| 0x0F5Ah 3930 | uint8 | EEPROM_DIR_DEPTH | 00h-ffh 0-255 | ffh 255 | Directory depth | ??? | D3 Ax0f5a C1
|
||||
| 0x0F0Ah 3850 | uint8 | EEPROM_DIRS | ??? | ffh 255 | Directories ??? | ??? | D3 Ax0f0a C80
|
||||
| 0x0F09h 3849 | uint8 | EEPROM_SD_SORT | 00h 0 | ffh 255 | SD card sort by: __time__ | LCD menu | D3 Ax0f09 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | SD card sort by: __alphabet__ | LCD menu | ^
|
||||
| ^ | ^ | ^ | 02h 1 | ^ | SD card: __not sorted__ | LCD menu | ^
|
||||
| 0x0F08h 3848 | uint8 | EEPROM_SECOND_SERIAL_ACTIVE | 00h 0 | ffh 255 | RPi Port: __disabled__ | LCD menu | D3 Ax0f08 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | RPi Port: __enabled__ | LCD menu | ^
|
||||
| 0x0F07h 3847 | uint8 | EEPROM_FSENS_AUTOLOAD_ENABLED | 01h 1 | ffh 255 __P__ | Filament autoload: __enabled__ | LCD menu | D3 Ax0f07 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament autoload: __disabled__ | LCD menu | ^
|
||||
| 0x0F05h 3845 | uint16 | EEPROM_CRASH_COUNT_X_TOT | 0000-fffe | ff ffh __S/P__ | Total crashes on x axis | ??? | D3 Ax0f05 C2
|
||||
| 0x0F03h 3843 | uint16 | EEPROM_CRASH_COUNT_Y_TOT | 0000-fffe | ff ffh __S/P__ | Total crashes on y axis | ??? | D3 Ax0f03 C2
|
||||
| 0x0F01h 3841 | uint16 | EEPROM_FERROR_COUNT_TOT | 0000-fffe | ff ffh __S/P__ | Total filament sensor errors | ??? | D3 Ax0f01 C2
|
||||
| 0x0EFFh 3839 | uint16 | EEPROM_POWER_COUNT_TOT | 0000-fffe | ff ffh __S/P__ | Total power failures | ??? | D3 Ax0eff C2
|
||||
| 0x0EFEh 3838 | uint8 | EEPROM_TMC2130_HOME_X_ORIGIN | ??? | ffh 255 | ??? | ??? | D3 Ax0efe C1
|
||||
| 0x0EFDh 3837 | uint8 | EEPROM MC2130_HOME_X_BSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0efd C1
|
||||
| 0x0EFCh 3836 | uint8 | EEPROM_TMC2130_HOME_X_FSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0efc C1
|
||||
| 0x0EFBh 3835 | uint8 | EEPROM_TMC2130_HOME_Y_ORIGIN | ??? | ffh 255 | ??? | ??? | D3 Ax0efb C1
|
||||
| 0x0EFAh 3834 | uint8 | EEPROM_TMC2130_HOME_Y_BSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0efa C1
|
||||
| 0x0EF9h 3833 | uint8 | EEPROM_TMC2130_HOME_Y_FSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0ef9 C1
|
||||
| 0x0EF8h 3832 | uint8 | EEPROM_TMC2130_HOME_ENABLED | ??? | ffh 255 | ??? | ??? | D3 Ax0ef8 C1
|
||||
| 0x0EF7h 3831 | uint8 | EEPROM_TMC2130_WAVE_X_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef7 C1
|
||||
| 0x0EF6h 3830 | uint8 | EEPROM_TMC2130_WAVE_Y_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef6 C1
|
||||
| 0x0EF5h 3829 | uint8 | EEPROM_TMC2130_WAVE_Z_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef5 C1
|
||||
| 0x0EF4h 3828 | uint8 | EEPROM_TMC2130_WAVE_E_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef4 C1
|
||||
| 0x0EF3h 3827 | uint8 | EEPROM_TMC2130_X_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef3 C1
|
||||
| 0x0EF2h 3826 | uint8 | EEPROM_TMC2130_Y_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef2 C1
|
||||
| 0x0EF1h 3825 | uint8 | EEPROM_TMC2130_Z_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef1 C1
|
||||
| 0x0EF0h 3824 | uint8 | EEPROM_TMC2130_E_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef0 C1
|
||||
| 0x0EEE 3822 | uint16 | EEPROM_PRINTER_TYPE | ??? | ff ffh 65535 | Printer Type | ??? | D3 Ax0eee C2
|
||||
| ^ | ^ | ^ | 64 00h 100 | ^ | PRINTER_MK1 | ??? | ^
|
||||
| ^ | ^ | ^ | c8 00h 200 | ^ | PRINTER_MK2 | ??? | ^
|
||||
| ^ | ^ | ^ | c9 00h 201 | ^ | PRINTER_MK2 with MMU1 | ??? | ^
|
||||
| ^ | ^ | ^ | ca 00h 202 | ^ | PRINTER_MK2S | ??? | ^
|
||||
| ^ | ^ | ^ | cb 00h 203 | ^ | PRINTER_MK2S with MMU1 | ??? | ^
|
||||
| ^ | ^ | ^ | fa 00h 250 | ^ | PRINTER_MK2.5 | ??? | ^
|
||||
| ^ | ^ | ^ | 1a 4fh 20250 | ^ | PRINTER_MK2.5 with MMU2 | ??? | ^
|
||||
| ^ | ^ | ^ | fc 00h 252 | ^ | PRINTER_MK2.5S | ??? | ^
|
||||
| ^ | ^ | ^ | 1c 4fh 20252 | ^ | PRINTER_MK2.5S with MMU2S | ??? | ^
|
||||
| ^ | ^ | ^ | 2c 01h 300 | ^ | PRINTER_MK3 | ??? | ^
|
||||
| ^ | ^ | ^ | 4c 4fh 20300 | ^ | PRINTER_MK3 with MMU2 | ??? | ^
|
||||
| ^ | ^ | ^ | 2e 01h 302 | ^ | PRINTER_MK3S | ??? | ^
|
||||
| ^ | ^ | ^ | 4e 4fh 20302 | ^ | PRINTER_MK3S with MMU2S | ??? | ^
|
||||
| 0x0EEC 3820 | uint16 | EEPROM_BOARD_TYPE | ??? | ff ffh 65535 | Board Type | ??? | D3 Ax0eec C2
|
||||
| ^ | ^ | ^ | c8 00h 200 | ^ | BOARD_RAMBO_MINI_1_0 | ??? | ^
|
||||
| ^ | ^ | ^ | cb 00h 203 | ^ | BOARD_RAMBO_MINI_1_3 | ??? | ^
|
||||
| ^ | ^ | ^ | 36 01h 310 | ^ | BOARD_EINSY_1_0a | ??? | ^
|
||||
| 0x0EE8 3816 | float | EEPROM_EXTRUDER_MULTIPLIER_0 | ??? | ff ff ff ffh | Power panic Extruder 0 multiplier | ??? | D3 Ax0ee8 C4
|
||||
| 0x0EE4 3812 | float | EEPROM_EXTRUDER_MULTIPLIER_1 | ??? | ff ff ff ffh | Power panic Extruder 1 multiplier | ??? | D3 Ax0ee4 C4
|
||||
| 0x0EE0 3808 | float | EEPROM_EXTRUDER_MULTIPLIER_2 | ??? | ff ff ff ffh | Power panic Extruder 2 multiplier | ??? | D3 Ax0ee0 C4
|
||||
| 0x0EDE 3806 | uint16 | EEPROM_EXTRUDEMULTIPLY | ??? | ff ffh 65535 | Power panic Extruder multiplier | ??? | D3 Ax0ede C2
|
||||
| 0x0EDA 3802 | float | EEPROM_UVLO_TINY_CURRENT_POSITION_Z | ??? | ff ff ff ffh | Power panic Z position | ??? | D3 Ax0eda C4
|
||||
| 0x0ED8 3800 | uint16 | EEPROM_UVLO_TARGET_HOTEND | ??? | ff ffh 65535 | Power panic target Hotend temperature | ??? | D3 Ax0ed8 C2
|
||||
| 0x0ED7 3799 | uint8 | EEPROM_SOUND_MODE | 00h 0 | ffh 255 | Sound mode: __loud__ | ??? | D3 Ax0ed7 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Sound mode: __once__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 1 | ^ | Sound mode: __silent__ | ^ | ^
|
||||
| ^ | ^ | ^ | 03h 1 | ^ | Sound mode: __assist__ | ^ | ^
|
||||
| 0x0ED6 3798 | bool | EEPROM_SPOOL_JOIN | 01h 1 | ffh 255 | MMU2/s autodeplete: __on__ | ??? | D3 Ax0ed6 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | MMU2/s autodeplete: __off__ | ^ | ^
|
||||
| 0x0ED5 3797 | bool | EEPROM_FSENS_RUNOUT_ENABLED | 01h 1 | ffh 255 __P__ | Filament runout: __enabled__ | LCD menu | D3 Ax0ed5 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament runout: __disabled__ | LCD menu | ^
|
||||
| 0x0ED3 3795 | uint16 | EEPROM_MMU_FAIL_TOT | ??? | ff ffh 65535 __S/P__ | MMU2/s total failures | ??? | D3 Ax0ed3 C2
|
||||
| 0x0ED2 3794 | uint8 | EEPROM_MMU_FAIL | ??? | ffh 255 __S/P__ | MMU2/s fails during print | ??? | D3 Ax0ed2 C1
|
||||
| 0x0ED0 3792 | uint16 | EEPROM_MMU_LOAD_FAIL_TOT | ??? | ff ffh 65535 __S/P__ | MMU2/s total load failures | ??? | D3 Ax0ed0 C2
|
||||
| 0x0ECF 3791 | uint8 | EEPROM_MMU_LOAD_FAIL | ??? | ffh 255 __S/P__ | MMU2/s load failures during print | ??? | D3 Ax0ecf C1
|
||||
| 0x0ECE 3790 | uint8 | EEPROM_MMU_CUTTER_ENABLED | 00h 0 | ffh 255 | MMU2/s cutter: __disabled__ | LCD menu | D3 Ax0ece C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | MMU2/s cutter: __enabled__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | MMU2/s cutter: __always__ | ^ | ^
|
||||
| 0x0DAE 3502 | uint16 | EEPROM_UVLO_MESH_BED_LEVELING_FULL | ??? | ff ffh 65535 | Power panic Mesh bed leveling points | ??? | D3 Ax0dae C288
|
||||
| 0x0DAD 3501 | uint8 | EEPROM_MBL_TYPE | ??? | ffh 255 | Mesh bed leveling precision _unused atm_ | ??? | D3 Ax0dad C1
|
||||
| 0x0DAC 3500 | bool | EEPROM_MBL_MAGNET_ELIMINATION | 01h 1 | ffh 255 | Mesh bed leveling does: __ignores__ magnets | LCD menu | D3 Ax0dac C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Mesh bed leveling does: __NOT ignores__ magnets | ^ | ^
|
||||
| 0x0DAB 3499 | uint8 | EEPROM_MBL_POINTS_NR | 03h 3 | ffh 255 | Mesh bed leveling points: __3x3__ | LCD menu | D3 Ax0dab C1
|
||||
| ^ | ^ | ^ | 07h 7 | ^ | Mesh bed leveling points: __7x7__ | ^ | ^
|
||||
| 0x0DAA 3498 | uint8 | EEPROM_MBL_PROBE_NR | 03h 3 | ffh 255 | MBL times measurements for each point: __3__ | LCD menu | D3 Ax0daa C1
|
||||
| ^ | ^ | ^ | 05h 5 | ^ | MBL times measurements for each point: __5__ | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | MBL times measurements for each point: __1__ | ^ | ^
|
||||
| 0x0DA9 3497 | uint8 | EEPROM_MMU_STEALTH | 01h 1 | ffh 255 | MMU2/s Silent mode: __on__ | ??? | D3 Ax0da9 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | MMU2/s Silent mode: __off__ | ^ | ^
|
||||
| 0x0DA8 3496 | uint8 | EEPROM_CHECK_MODE | 01h 1 | ffh 255 | Check mode for nozzle is: __warn__ | LCD menu | D3 Ax0da8 C1
|
||||
| ^ | ^ | ^ | 02h 0 | ^ | Check mode for nozzle is: __strict__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for nozzle is: __none__ | ^ | ^
|
||||
| 0x0DA7 3495 | uint8 | EEPROM_NOZZLE_DIAMETER | 28h 40 | ffh 255 | Nozzle diameter is: __40 or 0.40mm__ | LCD menu | D3 Ax0da7 C1
|
||||
| ^ | ^ | ^ | 3ch 60 | ^ | Nozzle diameter is: __60 or 0.60mm__ | ^ | ^
|
||||
| ^ | ^ | ^ | 3ch 80 | ^ | Nozzle diameter is: __80 or 0.80mm__ | ^ | ^
|
||||
| ^ | ^ | ^ | 19h 25 | ^ | Nozzle diameter is: __25 or 0.25mm__ | ^ | ^
|
||||
| 0x0DA5 3493 | uint16 | EEPROM_NOZZLE_DIAMETER_uM | 9001h | ff ffh 65535 | Nozzle diameter is: __400um__ | LCD menu | D3 Ax0da5 C2
|
||||
| ^ | ^ | ^ | 5802h | ^ | Nozzle diameter is: __600um__ | ^ | ^
|
||||
| ^ | ^ | ^ | 2003h | ^ | Nozzle diameter is: __800um__ | ^ | ^
|
||||
| ^ | ^ | ^ | fa00h | ^ | Nozzle diameter is: __250um__ | ^ | ^
|
||||
| 0x0DA4 3492 | uint8 | EEPROM_CHECK_MODEL | 01h 1 | ffh 255 | Check mode for printer model is: __warn__ | LCD menu | D3 Ax0da4 C1
|
||||
| ^ | ^ | ^ | 02h 0 | ^ | Check mode for printer model is: __strict__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for printer model is: __none__ | ^ | ^
|
||||
| 0x0DA3 3491 | uint8 | EEPROM_CHECK_VERSION | 01h 1 | ffh 255 | Check mode for firmware is: __warn__ | LCD menu | D3 Ax0da3 C1
|
||||
| ^ | ^ | ^ | 02h 0 | ^ | Check mode for firmware is: __strict__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for firmware is: __none__ | ^ | ^
|
||||
| 0x0DA2 3490 | uint8 | EEPROM_CHECK_GCODE | 01h 1 | ffh 255 | Check mode for gcode is: __warn__ _unused atm_ | LCD menu | D3 Ax0da2 C1
|
||||
| ^ | ^ | ^ | 02h 0 | ^ | Check mode for gcode is: __strict__ _unused atm_ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for gcode is: __none__ _unused atm_ | ^ | ^
|
||||
| 0x0D49 3401 | uint16 | EEPROM_SHEETS_BASE | ??? | ffh 255 | ??? | LCD menu | D3 Ax0d49 C89
|
||||
| 0x0D49 3401 | char | _1st Sheet block_ | 536d6f6f746831| ffffffffffffff | 1st sheet - Name: _Smooth1_ | ^ | D3 Ax0d49 C7
|
||||
| 0x0D50 3408 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 1st sheet - Z offset | ^ | D3 Ax0d50 C2
|
||||
| 0x0D52 3410 | uint8 | ^ | 00h 0 | ffh 255 | 1st sheet - bed temp | ^ | D3 Ax0d52 C1
|
||||
| 0x0D53 3411 | uint8 | ^ | 00h 0 | ffh 255 | 1st sheet - PINDA temp | ^ | D3 Ax0d53 C1
|
||||
| 0x0D54 3412 | char | _2nd Sheet block_ | 536d6f6f746832| ffffffffffffff | 2nd sheet - Name: _Smooth2_ | ^ | D3 Ax0d54 C7
|
||||
| 0x0D5B 3419 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 2nd sheet - Z offset | ^ | D3 Ax0d5b C2
|
||||
| 0x0D5D 3421 | uint8 | ^ | 00h 0 | ffh 255 | 2nd sheet - bed temp | ^ | D3 Ax0d5d C1
|
||||
| 0x0D5E 3422 | uint8 | ^ | 00h 0 | ffh 255 | 2nd sheet - PINDA temp | ^ | D3 Ax0d5e C1
|
||||
| 0x0D5F 3423 | char | _3rd Sheet block_ | 54657874757231| ffffffffffffff | 3rd sheet - Name: _Textur1_ | ^ | D3 Ax0d5f C7
|
||||
| 0x0D66 3430 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 3rd sheet - Z offset | ^ | D3 Ax0d66 C2
|
||||
| 0x0D68 3432 | uint8 | ^ | 00h 0 | ffh 255 | 3rd sheet - bed temp | ^ | D3 Ax0d68 C1
|
||||
| 0x0D69 3433 | uint8 | ^ | 00h 0 | ffh 255 | 3rd sheet - PINDA temp | ^ | D3 Ax0d69 C1
|
||||
| 0x0D6A 3434 | char | _4th Sheet block_ | 54657874757232| ffffffffffffff | 4th sheet - Name: _Textur2_ | ^ | D3 Ax0d6a C7
|
||||
| 0x0D71 3441 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 4th sheet - Z offset | ^ | D3 Ax0d71 C2
|
||||
| 0x0D73 3443 | uint8 | ^ | 00h 0 | ffh 255 | 4th sheet - bed temp | ^ | D3 Ax0d73 C1
|
||||
| 0x0D74 3444 | uint8 | ^ | 00h 0 | ffh 255 | 4th sheet - PINDA temp | ^ | D3 Ax0d74 C1
|
||||
| 0x0D75 3445 | char | _5th Sheet block_ | 536174696e2031| ffffffffffffff | 5th sheet - Name: _Satin 1_ | ^ | D3 Ax0d75 C7
|
||||
| 0x0D7C 3452 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 5th sheet - Z offset | ^ | D3 Ax0d7c C2
|
||||
| 0x0D7E 3454 | uint8 | ^ | 00h 0 | ffh 255 | 5th sheet - bed temp | ^ | D3 Ax0d7e C1
|
||||
| 0x0D7F 3455 | uint8 | ^ | 00h 0 | ffh 255 | 5th sheet - PINDA temp | ^ | D3 Ax0d7f C1
|
||||
| 0x0D80 3456 | char | _6th Sheet block_ | 536174696e2032| ffffffffffffff | 6th sheet - Name: _Satin 2_ | ^ | D3 Ax0d80 C7
|
||||
| 0x0D87 3463 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 6th sheet - Z offset | ^ | D3 Ax0d87 C2
|
||||
| 0x0D89 3465 | uint8 | ^ | 00h 0 | ffh 255 | 6th sheet - bed temp | ^ | D3 Ax0d89 C1
|
||||
| 0x0D8A 3466 | uint8 | ^ | 00h 0 | ffh 255 | 6th sheet - PINDA temp | ^ | D3 Ax0d8a C1
|
||||
| 0x0D8B 3467 | char | _7th Sheet block_ | 437573746f6d31| ffffffffffffff | 7th sheet - Name: _Custom1_ | ^ | D3 Ax0d8b C7
|
||||
| 0x0D92 3474 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 7th sheet - Z offset | ^ | D3 Ax0d92 C2
|
||||
| 0x0D94 3476 | uint8 | ^ | 00h 0 | ffh 255 | 7th sheet - bed temp | ^ | D3 Ax0d94 C1
|
||||
| 0x0D95 3477 | uint8 | ^ | 00h 0 | ffh 255 | 7th sheet - PINDA temp | ^ | D3 Ax0d95 C1
|
||||
| 0x0D96 3478 | char | _8th Sheet block_ | 437573746f6d32| ffffffffffffff | 8th sheet - Name: _Custom2_ | ^ | D3 Ax0d96 C7
|
||||
| 0x0D9D 3485 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 8th sheet - Z offset | ^ | D3 Ax0d9d C2
|
||||
| 0x0D9F 3487 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - bed temp | ^ | D3 Ax0d9f C1
|
||||
| 0x0DA0 3488 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - PINDA temp | ^ | D3 Ax0da0 C1
|
||||
| 0x0DA1 3489 | uint8 | ??? | 00h 0 | ffh 255 | ??? | ??? | D3 Ax0da1 C1
|
||||
| 0x0D48 3400 | uint8 | EEPROM_FSENSOR_PCB | ffh 255 | ffh 255 | Filament Sensor type IR unknown | LCD Support | D3 Ax0d48 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament Sensor type IR 0.3 or older | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Filament Sensor type IR 0.4 or newer | ^ | ^
|
||||
| 0x0D47 3399 | uint8 | EEPROM_FSENSOR_ACTION_NA | 00h 0 | ffh 255 | Filament Sensor action: __Continue__ | LCD menu | D3 Ax0d47 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Filament Sensor action: __Pause__ | ^ | ^
|
||||
| 0x0D37 3383 | float | EEPROM_UVLO_SAVED_START_POSITION | ??? | ff ff ff ffh | Power panic saved start position all-axis | ??? | D3 Ax0d37 C16
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position e-axis | ^ | D3 Ax0d43 C4
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position z-axis | ^ | D3 Ax0d3f C4
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position y-axis | ^ | D3 Ax0d3b C4
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position x-axis | ^ | D3 Ax0d37 C4
|
||||
| 0x0D35 3381 | uint16 | EEPROM_UVLO_FEEDMULTIPLY | ??? | ff ffh 65355 | Power panic saved feed multiplier | ??? | D3 Ax0d35 C2
|
||||
| 0x0D34 3380 | uint8 | EEPROM_BACKLIGHT_LEVEL_HIGH | 00h - ffh | 82h 130 | LCD backlight bright: __128__ Dim value to 255 | LCD menu | D3 Ax0d34 C1
|
||||
| 0x0D33 3379 | uint8 | EEPROM_BACKLIGHT_LEVEL_LOW | 00h - ffh | 32h 50 | LCD backlight dim: __50__ 0 to Bright value | LCD menu | D3 Ax0d33 C1
|
||||
| 0x0D32 3378 | uint8 | EEPROM_BACKLIGHT_MODE | 02h 2 | ffh 255 | LCD backlight mode: __Auto__ | LCD menu | D3 Ax0d32 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | LCD backlight mode: __Bright__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | LCD backlight mode: __Dim__ | ^ | ^
|
||||
| 0x0D30 3376 | uint16 | EEPROM_BACKLIGHT_TIMEOUT | 01 00 - ff ff | 0a 00h 65535 | LCD backlight timeout: __10__ seconds | LCD menu | D3 Ax0d30 C2
|
||||
| 0x0D2C 3372 | float | EEPROM_UVLO_LA_K | ??? | ff ff ff ffh | Power panic saved Linear Advanced K value | ??? | D3 Ax0d2c C4
|
||||
| 0x0D2B 3371 | uint8 | EEPROM_ALTFAN_OVERRIDE | ffh 255 | ffh 255 | ALTFAN override unknown state | LCD menu | D3 Ax0d2b C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | ALTFAN override deactivated | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | ALTFAN override activated | ^ | ^
|
||||
| 0x0D2A 3370 | uint8 | EEPROM_EXPERIMENTAL_VISIBILITY | ffh 255 | ffh 255 | Experimental menu visibility unknown state | LCD menu | D3 Ax0d2a C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Experimental menu visibility hidden | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Experimental menu visibility visible | ^ | ^
|
||||
| 0x0D29 3369 | uint8 | EEPROM_PINDA_TEMP_COMPENSATION | ffh 255 | ffh 255 | PINDA temp compensation unknown state | LCD menu | D3 Ax0d29 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | PINDA has no temp compensation PINDA v1/2 | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | PINDA has temp compensation aka SuperPINDA | ^ | ^
|
||||
| 0x0D15 3349 | char[20] | EEPROM_PRUSA_SN | SN[19] == 0 | ffffffffffffffff... | PRUSA Serial number string | PRUSA SN | D3 Ax0d15 C20
|
||||
| 0x0D11 3345 | float | EEPROM_UVLO_ACCELL | ??? | ff ff ff ffh | Power panic saved normal acceleration | ??? | D3 Ax0d11 C4
|
||||
| 0x0D0D 3341 | float | EEPROM_UVLO_RETRACT_ACCELL | ??? | ff ff ff ffh | Power panic saved retract acceleration | ??? | D3 Ax0d0d C4
|
||||
| 0x0D09 3337 | float | EEPROM_UVLO_TRAVEL_ACCELL | ??? | ff ff ff ffh | Power panic saved travel acceleration | ??? | D3 Ax0d09 C4
|
||||
| 0x0D05 3333 | uint32_t | EEPROM_JOB_ID | ??? | 00 00 00 00h | Job ID used by host software | D3 only | D3 Ax0d05 C4
|
||||
| 0x0D04 3332 | uint8_t | EEPROM_ECOOL_ENABLE | ffh 255 | ^ | Disable extruder motor scaling for non-farm print | LCD menu | D3 Ax0d04 C1
|
||||
| ^ | ^ | ^ | 2ah 42 | ^ | Enable extruder motor scaling for non-farm print | ^ | D3 Ax0d04 C1
|
||||
| 0x0D03 3321 | uint8_t | EEPROM_FW_CRASH_FLAG | ffh 255 | ffh 255 | Last FW crash reason (dump_crash_reason) | D21/D22 | D3 Ax0d03 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | manual | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | stack_error | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | watchdog | ^ | ^
|
||||
| ^ | ^ | ^ | 03h 3 | ^ | bad_isr | ^ | ^
|
||||
| ^ | ^ | ^ | 04h 4 | ^ | bad_pullup_temp_isr | ^ | ^
|
||||
| ^ | ^ | ^ | 05h 5 | ^ | bad_pullup_step_isr | ^ | ^
|
||||
| 0x0D02 3320 | uint8_t | EEPROM_FSENSOR_JAM_DETECTION | 01h 1 | ff/01 | fsensor pat9125 jam detection feature | LCD menu | D3 Ax0d02 C1
|
||||
| 0x0D01 3319 | uint8_t | EEPROM_MMU_ENABLED | 01h 1 | ff/01 | MMU enabled | LCD menu | D3 Ax0d01 C1
|
||||
|
||||
| Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code
|
||||
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--:
|
||||
| 0x0012 18 | uint16 | EEPROM_FIRMWARE_VERSION_END | ??? | ff ffh 65535 | ??? | ??? | D3 Ax0012 C2
|
||||
| 0x0010 16 | uint16 | EEPROM_FIRMWARE_VERSION_FLAVOR | ??? | ff ffh 65535 | ??? | ??? | D3 Ax0010 C2
|
||||
| 0x000E 14 | uint16 | EEPROM_FIRMWARE_VERSION_REVISION | ??? | ff ffh 65535 | Firmware version revision number DEV/ALPHA/BETA/RC| ??? | D3 Ax000e C2
|
||||
| 0x000C 12 | uint16 | EEPROM_FIRMWARE_VERSION_MINOR | ??? | ff ffh 65535 | Firmware version minor number | ??? | D3 Ax000c C2
|
||||
| 0x000A 10 | uint16 | EEPROM_FIRMWARE_VERSION_MAJOR | ??? | ff ffh 65535 | Firmware version major number | ??? | D3 Ax000a C2
|
||||
| 0x0000 0 | char | FW_PRUSA3D_MAGIC | ??? | ffffffffffffffffffff | __`PRUSA3DFW`__ | ??? | D3 Ax0000 C10
|
||||
#### Useful tools/links:
|
||||
To convert hex to ascii https://www.rapidtables.com/convert/number/hex-to-ascii.html
|
||||
|
||||
To convert hex to dec https://www.rapidtables.com/convert/number/hex-to-decimal.html
|
||||
|
||||
Version: 1.0.2
|
||||
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|Address begin|Bit/Type | Name | Valid values | Default/FactoryReset | Description |Gcode/Function| Debug code
|
||||
| :-- | :-- | :-- | :--: | :--: | :-- | :--: | :--:
|
||||
| 0x0FFF 4095 | uchar | EEPROM_SILENT | 00h 0 | ffh 255 | TMC Stealth mode: __off__ / miniRambo Power mode | LCD menu | D3 Ax0fff C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | TMC Stealth mode: __on__ / miniRambo Silent mode | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | miniRambo Auto mode | ^ | ^
|
||||
| 0x0FFE 4094 | uchar | EEPROM_LANG | 00h 0 | ffh 255 __L__ | English / LANG_ID_PRI | LCD menu | D3 Ax0ffe C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Other language LANG_ID_SEC | ^ | ^
|
||||
| 0x0FFC 4092 | uint16 | EEPROM_BABYSTEP_X | ??? | ff ffh 65535 | Babystep for X axis _unsued_ | ??? | D3 Ax0ffc C2
|
||||
| 0x0FFA 4090 | uint16 | EEPROM_BABYSTEP_Y | ??? | ff ffh 65535 | Babystep for Y axis _unsued_ | ^ | D3 Ax0ffa C2
|
||||
| 0x0FF8 4088 | uint16 | EEPROM_BABYSTEP_Z | ??? | ff ffh 65535 | Babystep for Z axis _lagacy_ | ^ | D3 Ax0ff8 C2
|
||||
| ^ | ^ | ^ | ^ | ^ | multiple values stored now in EEPROM_Sheets_base | ^ | ^
|
||||
| 0x0FF7 4087 | uint8 | EEPROM_CALIBRATION_STATUS | ffh 255 | ffh 255 | Assembled _default_ | ??? | D3 Ax0ff7 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Calibrated | ^ | ^
|
||||
| ^ | ^ | ^ | e6h 230 | ^ | needs Live Z adjustment | ^ | ^
|
||||
| ^ | ^ | ^ | f0h 240 | ^ __P__ | needs Z calibration | ^ | ^
|
||||
| ^ | ^ | ^ | fah 250 | ^ | needs XYZ calibration | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Unknown | ^ | ^
|
||||
| 0x0FF5 4085 | uint16 | EEPROM_BABYSTEP_Z0 | ??? | ff ffh 65535 | Babystep for Z ??? | ??? | D3 Ax0ff5 C2
|
||||
| 0x0FF1 4081 | unint32 | EEPROM_FILAMENTUSED | ??? | 00 00 00 00h 0 __S/P__| Filament used in meters | ??? | D3 Ax0ff1 C4
|
||||
| 0x0FED 4077 | unint32 | EEPROM_TOTALTIME | ??? | 00 00 00 00h 0 __S/P__| Total print time | ??? | D3 Ax0fed C4
|
||||
| 0x0FE5 4069 | float | EEPROM_BED_CALIBRATION_CENTER | ??? | ff ff ff ffh | ??? | ??? | D3 Ax0fe5 C8
|
||||
| 0x0FDD 4061 | float | EEPROM_BED_CALIBRATION_VEC_X | ??? | ff ff ff ffh | ??? | ??? | D3 Ax0fdd C8
|
||||
| 0x0FD5 4053 | float | EEPROM_BED_CALIBRATION_VEC_Y | ??? | ff ff ff ffh | ??? | ??? | D3 Ax0fd5 C8
|
||||
| 0x0FC5 4037 | int16 | EEPROM_BED_CALIBRATION_Z_JITTER | ??? | ff ffh 65535 | ??? | ??? | D3 Ax0fc5 C16
|
||||
| 0x0FC4 4036 | bool | EEPROM_FARM_MODE | 00h 0 | ffh 255 __P__ | Prusa farm mode: __off__ | G99 | D3 Ax0fc4 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Prusa farm mode: __on__ | G98 | ^
|
||||
| 0x0FC3 4035 | free | _EEPROM_FREE_NR1_ | ??? | ffh 255 | _Free EEPROM space_ | _free space_ | D3 Ax0fc3 C1
|
||||
| 0x0FC1 4033 | ??? | EEPROM_FARM_NUMBER | 000-999 | ff ffh / 000 __P__ | Prusa farm number _only 0-9 are allowed: 000-999_ | LCD menu | D3 Ax0fc1 C2
|
||||
| 0x0FC0 4032 | bool | EEPROM_BED_CORRECTION_VALID | 00h 0 | 00h 0 | Bed correction invalid | ??? | D3 Ax0fc0 C1
|
||||
| ^ | ^ | ^ | ffh 255 | ^ | Bed correction valid | ??? | ^
|
||||
| 0x0FBF 4031 | char | EEPROM_BED_CORRECTION_LEFT | 00h ffh | 00h 0 | Bed manual correction left | LCD menu | D3 Ax0fbf C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Lxxx | ^
|
||||
| 0x0FBE 4030 | char | EEPROM_BED_CORRECTION_RIGHT | 00h ffh | 00h 0 | Bed manual correction right | LCD menu | D3 Ax0fbe C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Rxxx | ^
|
||||
| 0x0FBD 4029 | char | EEPROM_BED_CORRECTION_FRONT | 00h ffh | 00h 0 | Bed manual correction front | LCD menu | D3 Ax0fbd C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Fxxx | ^
|
||||
| 0x0FBC 4028 | char | EEPROM_BED_CORRECTION_BACK | 00h ffh | 00h 0 | Bed manual correction back | LCD menu | D3 Ax0fbc C1
|
||||
| ^ | ^ | ^ | ^ | ^ | At this moment limited to +-100um | G80 Bxxx | ^
|
||||
| 0x0FBB 4027 | bool | EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY | 00h 0 | ffh 255 | Toshiba Air: __off__ | LCD menu | D3 Ax0fbb C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Toshiba Air: __on__ | ^ | ^
|
||||
| 0x0FBA 4026 | uchar | EEPROM_PRINT_FLAG | ??? | ??? | _unsued_ | ??? | D3 Ax0fba C1
|
||||
| 0x0FB0 4016 | int16 | EEPROM_PROBE_TEMP_SHIFT | ??? | ??? | ??? | ??? | D3 Ax0fb0 C10
|
||||
| 0x0FAF 4015 | bool | EEPROM_TEMP_CAL_ACTIVE | 00h 0 | 00h 0 | PINDA Temp cal.: __inactive__ | LCD menu | D3 Ax0faf C1
|
||||
| ^ | ^ | ^ | ffh 255 | ^ | PINDA Temp cal.: __active__ | ^ | ^
|
||||
| 0x0FA7 4007 | ??? | _EEPROM_FREE_NR6_ | ??? | ffh 255 | _Free EEPROM space_ | ??? | D3 Ax0fae C8
|
||||
| ^ | ^ | ^ | ^ | 00 00 00 00h | ^ | ^ | ^
|
||||
| 0x0FA6 4006 | uint8 | EEPROM_CALIBRATION_STATUS_PINDA | 00h 0 | ffh 255 | PINDA Temp: __not calibrated__ | ??? | D3 Ax0fa6 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | PINDA Temp: __calibrated__ | ^ | ^
|
||||
| 0x0FA5 4005 | uint8 | EEPROM_UVLO | 00h 0 | ffh 255 | Power Panic flag: __inactive__ | ??? | D3 Ax0fa5 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Power Panic flag: __active__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | Power Panic flag: __???__ | ^ | ^
|
||||
| 0x0F9D 3997 | float | EEPROM_UVLO_CURRENT_POSITION | ??? | ffh 255 | Power Panic position | ??? | D3 Ax0f9d C8
|
||||
| 0x0F95 3989 | char | EEPROM_FILENAME | ??? | ffh 255 | Power Panic Filename | ??? | D3 Ax0f95 C8
|
||||
| 0x0F91 3985 | unint32 | EEPROM_FILE_POSITION | ??? | ff ff ff ffh | Power Panic File Position | ??? | D3 Ax0f91 C4
|
||||
| 0x0F8D 3981 | float | EEPROM_UVLO_CURRENT_POSITION_Z | ??? | ff ff ff ffh | Power Panic Z Position | ^ | D3 Ax0f8d C4
|
||||
| 0x0F8C 3980 | ??? | EEPROM_UVLO_UNUSED_001 | ??? | ffh 255 | Power Panic _unused_ | ^ | D3 Ax0f8c C1
|
||||
| 0x0F8B 3979 | uint8 | EEPROM_UVLO_TARGET_BED | ??? | ffh 255 | Power Panic Bed temperature | ^ | D3 Ax0f8b C1
|
||||
| 0x0F89 3977 | uint16 | EEPROM_UVLO_FEEDRATE | ??? | ff ffh 65535 | Power Panic Feedrate | ^ | D3 Ax0f89 C2
|
||||
| 0x0F88 3976 | uint8 | EEPROM_UVLO_FAN_SPEED | ??? | ffh 255 | Power Panic Fan speed | ^ | D3 Ax0f88 C1
|
||||
| 0x0F87 3975 | uint8 | EEPROM_FAN_CHECK_ENABLED | 00h 0 | ??? | Fan Check __disabled__ | LCD menu | D3 Ax0f87 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ffh 255 | Fan Check __enabled__ | ^ | ^
|
||||
| 0x0F75 3957 | uint16 | EEPROM_UVLO_MESH_BED_LEVELING | ??? | ff ffh 65535 | Power Panic Mesh Bed Leveling | ??? | D3 Ax0f75 C18
|
||||
| 0x0F73 3955 | uint16 | EEPROM_UVLO_Z_MICROSTEPS | ??? | ff ffh 65535 | Power Panic Z microsteps | ??? | D3 Ax0f73 C2
|
||||
| 0x0F72 3954 | uint8 | EEPROM_UVLO_E_ABS | ??? | ffh 255 | Power Panic ??? position | ??? | D3 Ax0f72 C1
|
||||
| 0x0F6E 3950 | float | EEPROM_UVLO_CURRENT_POSITION_E | ??? | ff ff ff ffh | Power Panic E position | ??? | D3 Ax0f6e C4
|
||||
| 0x0F6C 3948 | uint16 | EEPROM_UVLO_SAVED_SEGMENT_IDX | all | ff ffh 65535 | Power Panic index of multi-segment move | ??? | D3 Ax0f6c C2
|
||||
| 0x0F6B 3947 | ??? | _EEPROM_FREE_NR4_ | ??? | ffh 255 | _Free EEPROM space_ | _free space_ | D3 Ax0f6b C1
|
||||
| 0x0F6A 3946 | ??? | _EEPROM_FREE_NR5_ | ??? | ffh 255 | _Free EEPROM space_ | _free space_ | D3 Ax0f6a C1
|
||||
| 0x0F69 3945 | uint8 | EEPROM_CRASH_DET | ffh 255 | ffh 255 | Crash detection: __enabled__ | LCD menu | D3 Ax0f69 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Crash detection: __disabled__ | LCD menu | ^
|
||||
| 0x0F68 3944 | uint8 | EEPROM_CRASH_COUNT_Y | 00h-ffh 0-255| ffh 255 __S/P__ | Crashes detected on y axis | ??? | D3 Ax0f68 C1
|
||||
| 0x0F67 3943 | uint8 | EEPROM_FSENSOR | 01h 1 | ffh 255 __P__ | Filament sensor: __enabled__ | LCD menu | D3 Ax0f67 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament sensor: __disabled__ | LCD menu | ^
|
||||
| 0x0F65 3942 | uint8 | EEPROM_CRASH_COUNT_X | 00h-ffh 0-255| ffh 255 __S/P__ | Crashes detected on x axis | ??? | D3 Ax0f66 C1
|
||||
| 0x0F65 3941 | uint8 | EEPROM_FERROR_COUNT | 00h-ffh 0-255| ffh 255 __S/P__ | Filament sensor error counter | ??? | D3 Ax0f65 C1
|
||||
| 0x0F64 3940 | uint8 | EEPROM_POWER_COUNT | 00h-ffh 0-255| ffh 255 __S/P__ | Power failure counter | ??? | D3 Ax0f64 C1
|
||||
| 0x0F60 3936 | float | EEPROM_XYZ_CAL_SKEW | ??? | ff ff ff ffh | XYZ skew value | ??? | D3 Ax0f60 C4
|
||||
| 0x0F5F 3935 | uint8 | EEPROM_WIZARD_ACTIVE | 01h 1 | 01h 1 __P__ | Wizard __active__ | ??? | D3 Ax0f5f C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Wizard __inactive__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | 02h 2 __M__ | Wizard active - Z cal after shipping/service prep | ^ | ^
|
||||
| 0x0F5D 3933 | uint16 | EEPROM_BELTSTATUS_X | ??? | ff ffh | X Beltstatus | ??? | D3 Ax0f5d C2
|
||||
| 0x0F5B 3931 | uint16 | EEPROM_BELTSTATUS_Y | ??? | ff ffh | Y Beltstatus | ??? | D3 Ax0f5b C2
|
||||
| 0x0F5A 3930 | uint8 | EEPROM_DIR_DEPTH | 00h-ffh 0-255| ffh 255 | Directory depth | ??? | D3 Ax0f5a C1
|
||||
| 0x0F0A 3850 | uint8 | EEPROM_DIRS | ??? | ffh 255 | Directories ??? | ??? | D3 Ax0f0a C80
|
||||
| 0x0F09 3849 | uint8 | EEPROM_SD_SORT | 00h 0 | ffh 255 | SD card sort by: __time__ | LCD menu | D3 Ax0f09 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | SD card sort by: __alphabet__ | LCD menu | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | SD card: __not sorted__ | LCD menu | ^
|
||||
| 0x0F08 3848 | uint8 | EEPROM_SECOND_SERIAL_ACTIVE | 00h 0 | ffh 255 | RPi Port: __disabled__ | LCD menu | D3 Ax0f08 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | RPi Port: __enabled__ | LCD menu | ^
|
||||
| 0x0F07 3847 | uint8 | EEPROM_FSENS_AUTOLOAD_ENABLED | 01h 1 | ffh 255 __P__ | Filament autoload: __enabled__ | LCD menu | D3 Ax0f07 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament autoload: __disabled__ | LCD menu | ^
|
||||
| 0x0F05 3845 | uint16 | EEPROM_CRASH_COUNT_X_TOT | 0000-fffe | ff ffh __S/P__ | Total crashes on x axis | ??? | D3 Ax0f05 C2
|
||||
| 0x0F03 3843 | uint16 | EEPROM_CRASH_COUNT_Y_TOT | 0000-fffe | ff ffh __S/P__ | Total crashes on y axis | ??? | D3 Ax0f03 C2
|
||||
| 0x0F01 3841 | uint16 | EEPROM_FERROR_COUNT_TOT | 0000-fffe | ff ffh __S/P__ | Total filament sensor errors | ??? | D3 Ax0f01 C2
|
||||
| 0x0EFF 3839 | uint16 | EEPROM_POWER_COUNT_TOT | 0000-fffe | ff ffh __S/P__ | Total power failures | ??? | D3 Ax0eff C2
|
||||
| 0x0EFE 3838 | uint8 | EEPROM_TMC2130_HOME_X_ORIGIN | ??? | ffh 255 | ??? | ??? | D3 Ax0efe C1
|
||||
| 0x0EFD 3837 | uint8 | EEPROM_TMC2130_HOME_X_BSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0efd C1
|
||||
| 0x0EFC 3836 | uint8 | EEPROM_TMC2130_HOME_X_FSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0efc C1
|
||||
| 0x0EFB 3835 | uint8 | EEPROM_TMC2130_HOME_Y_ORIGIN | ??? | ffh 255 | ??? | ??? | D3 Ax0efb C1
|
||||
| 0x0EFA 3834 | uint8 | EEPROM_TMC2130_HOME_Y_BSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0efa C1
|
||||
| 0x0EF9 3833 | uint8 | EEPROM_TMC2130_HOME_Y_FSTEPS | ??? | ffh 255 | ??? | ??? | D3 Ax0ef9 C1
|
||||
| 0x0EF8 3832 | uint8 | EEPROM_TMC2130_HOME_ENABLED | ??? | ffh 255 | ??? | ??? | D3 Ax0ef8 C1
|
||||
| 0x0EF7 3831 | uint8 | EEPROM_TMC2130_WAVE_X_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef7 C1
|
||||
| 0x0EF6 3830 | uint8 | EEPROM_TMC2130_WAVE_Y_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef6 C1
|
||||
| 0x0EF5 3829 | uint8 | EEPROM_TMC2130_WAVE_Z_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef5 C1
|
||||
| 0x0EF4 3828 | uint8 | EEPROM_TMC2130_WAVE_E_FAC | ??? | ffh 255 | ??? | ??? | D3 Ax0ef4 C1
|
||||
| 0x0EF3 3827 | uint8 | EEPROM_TMC2130_X_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef3 C1
|
||||
| 0x0EF2 3826 | uint8 | EEPROM_TMC2130_Y_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef2 C1
|
||||
| 0x0EF1 3825 | uint8 | EEPROM_TMC2130_Z_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef1 C1
|
||||
| 0x0EF0 3824 | uint8 | EEPROM_TMC2130_E_MRES | ??? | ffh 255 | ??? | ??? | D3 Ax0ef0 C1
|
||||
| 0x0EEE 3822 | uint16 | EEPROM_PRINTER_TYPE | ??? | ff ffh 65535 | Printer Type | ??? | D3 Ax0eee C2
|
||||
| ^ | ^ | ^ | 64 00h 100 | ^ | PRINTER_MK1 | ??? | ^
|
||||
| ^ | ^ | ^ | c8 00h 200 | ^ | PRINTER_MK2 | ??? | ^
|
||||
| ^ | ^ | ^ | c9 00h 201 | ^ | PRINTER_MK2 with MMU1 | ??? | ^
|
||||
| ^ | ^ | ^ | ca 00h 202 | ^ | PRINTER_MK2S | ??? | ^
|
||||
| ^ | ^ | ^ | cb 00h 203 | ^ | PRINTER_MK2S with MMU1 | ??? | ^
|
||||
| ^ | ^ | ^ | fa 00h 250 | ^ | PRINTER_MK2.5 | ??? | ^
|
||||
| ^ | ^ | ^ | 1a 4fh 20250 | ^ | PRINTER_MK2.5 with MMU2 | ??? | ^
|
||||
| ^ | ^ | ^ | fc 00h 252 | ^ | PRINTER_MK2.5S | ??? | ^
|
||||
| ^ | ^ | ^ | 1c 4fh 20252 | ^ | PRINTER_MK2.5S with MMU2S | ??? | ^
|
||||
| ^ | ^ | ^ | 2c 01h 300 | ^ | PRINTER_MK3 | ??? | ^
|
||||
| ^ | ^ | ^ | 4c 4fh 20300 | ^ | PRINTER_MK3 with MMU2 | ??? | ^
|
||||
| ^ | ^ | ^ | 2e 01h 302 | ^ | PRINTER_MK3S | ??? | ^
|
||||
| ^ | ^ | ^ | 4e 4fh 20302 | ^ | PRINTER_MK3S with MMU2S | ??? | ^
|
||||
| 0x0EEC 3820 | uint16 | EEPROM_BOARD_TYPE | ??? | ff ffh 65535 | Board Type | ??? | D3 Ax0eec C2
|
||||
| ^ | ^ | ^ | c8 00h 200 | ^ | BOARD_RAMBO_MINI_1_0 | ??? | ^
|
||||
| ^ | ^ | ^ | cb 00h 203 | ^ | BOARD_RAMBO_MINI_1_3 | ??? | ^
|
||||
| ^ | ^ | ^ | 36 01h 310 | ^ | BOARD_EINSY_1_0a | ??? | ^
|
||||
| 0x0EE8 3816 | float | EEPROM_EXTRUDER_MULTIPLIER_0 | ??? | ff ff ff ffh | Power panic Extruder 0 multiplier | ??? | D3 Ax0ee8 C4
|
||||
| 0x0EE4 3812 | float | EEPROM_EXTRUDER_MULTIPLIER_1 | ??? | ff ff ff ffh | Power panic Extruder 1 multiplier | ??? | D3 Ax0ee4 C4
|
||||
| 0x0EE0 3808 | float | EEPROM_EXTRUDER_MULTIPLIER_2 | ??? | ff ff ff ffh | Power panic Extruder 2 multiplier | ??? | D3 Ax0ee0 C4
|
||||
| 0x0EDE 3806 | uint16 | EEPROM_EXTRUDEMULTIPLY | ??? | ff ffh 65535 | Power panic Extruder multiplier | ??? | D3 Ax0ede C2
|
||||
| 0x0EDA 3802 | float | EEPROM_UVLO_TINY_CURRENT_POSITION_Z | ??? | ff ff ff ffh | Power panic Z position | ??? | D3 Ax0eda C4
|
||||
| 0x0ED8 3800 | uint16 | EEPROM_UVLO_TARGET_HOTEND | ??? | ff ffh 65535 | Power panic target Hotend temperature | ??? | D3 Ax0ed8 C2
|
||||
| 0x0ED7 3799 | uint8 | EEPROM_SOUND_MODE | 00h 0 | ffh 255 | Sound mode: __loud__ | ??? | D3 Ax0ed7 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Sound mode: __once__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | Sound mode: __silent__ | ^ | ^
|
||||
| ^ | ^ | ^ | 03h 3 | ^ | Sound mode: __assist__ | ^ | ^
|
||||
| 0x0ED6 3798 | bool | EEPROM_SPOOL_JOIN | 01h 1 | ffh 255 | MMU2/s autodeplete: __on__ | ??? | D3 Ax0ed6 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | MMU2/s autodeplete: __off__ | ^ | ^
|
||||
| 0x0ED5 3797 | bool | EEPROM_FSENS_RUNOUT_ENABLED | 01h 1 | ffh 255 __P__ | Filament runout: __enabled__ | LCD menu | D3 Ax0ed5 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament runout: __disabled__ | LCD menu | ^
|
||||
| 0x0ED3 3795 | uint16 | EEPROM_MMU_FAIL_TOT | ??? | ff ffh 65535 __S/P__ | MMU2/s total failures | ??? | D3 Ax0ed3 C2
|
||||
| 0x0ED2 3794 | uint8 | EEPROM_MMU_FAIL | ??? | ffh 255 __S/P__ | MMU2/s fails during print | ??? | D3 Ax0ed2 C1
|
||||
| 0x0ED0 3792 | uint16 | EEPROM_MMU_LOAD_FAIL_TOT | ??? | ff ffh 65535 __S/P__ | MMU2/s total load failures | ??? | D3 Ax0ed0 C2
|
||||
| 0x0ECF 3791 | uint8 | EEPROM_MMU_LOAD_FAIL | ??? | ffh 255 __S/P__ | MMU2/s load failures during print | ??? | D3 Ax0ecf C1
|
||||
| 0x0ECE 3790 | uint8 | EEPROM_MMU_CUTTER_ENABLED | 00h 0 | ffh 255 | MMU2/s cutter: __disabled__ | LCD menu | D3 Ax0ece C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | MMU2/s cutter: __enabled__ | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | MMU2/s cutter: __always__ | ^ | ^
|
||||
| 0x0DAE 3502 | uint16 | EEPROM_UVLO_MESH_BED_LEVELING_FULL | ??? | ff ffh 65535 | Power panic Mesh bed leveling points | ??? | D3 Ax0dae C288
|
||||
| 0x0DAD 3501 | uint8 | EEPROM_MBL_TYPE | ??? | ffh 255 | Mesh bed leveling precision _unused atm_ | ??? | D3 Ax0dad C1
|
||||
| 0x0DAC 3500 | bool | EEPROM_MBL_MAGNET_ELIMINATION | 01h 1 | ffh 255 | Mesh bed leveling does: __ignores__ magnets | LCD menu | D3 Ax0dac C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Mesh bed leveling does: __NOT ignores__ magnets | ^ | ^
|
||||
| 0x0DAB 3499 | uint8 | EEPROM_MBL_POINTS_NR | 03h 3 | ffh 255 | Mesh bed leveling points: __3x3__ | LCD menu | D3 Ax0dab C1
|
||||
| ^ | ^ | ^ | 07h 7 | ^ | Mesh bed leveling points: __7x7__ | ^ | ^
|
||||
| 0x0DAA 3498 | uint8 | EEPROM_MBL_PROBE_NR | 03h 3 | ffh 255 | MBL times measurements for each point: __3__ | LCD menu | D3 Ax0daa C1
|
||||
| ^ | ^ | ^ | 05h 5 | ^ | MBL times measurements for each point: __5__ | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | MBL times measurements for each point: __1__ | ^ | ^
|
||||
| 0x0DA9 3497 | uint8 | EEPROM_MMU_STEALTH | 01h 1 | ffh 255 | MMU2/s Silent mode: __on__ | ??? | D3 Ax0da9 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | MMU2/s Silent mode: __off__ | ^ | ^
|
||||
| 0x0DA8 3496 | uint8 | EEPROM_CHECK_MODE | 01h 1 | ffh 255 | Check mode for nozzle is: __warn__ | LCD menu | D3 Ax0da8 C1
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | Check mode for nozzle is: __strict__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for nozzle is: __none__ | ^ | ^
|
||||
| 0x0DA7 3495 | uint8 | EEPROM_NOZZLE_DIAMETER | 28h 40 | ffh 255 | Nozzle diameter is: __40 or 0.40mm__ | LCD menu | D3 Ax0da7 C1
|
||||
| ^ | ^ | ^ | 3ch 60 | ^ | Nozzle diameter is: __60 or 0.60mm__ | ^ | ^
|
||||
| ^ | ^ | ^ | 3ch 80 | ^ | Nozzle diameter is: __80 or 0.80mm__ | ^ | ^
|
||||
| ^ | ^ | ^ | 19h 25 | ^ | Nozzle diameter is: __25 or 0.25mm__ | ^ | ^
|
||||
| 0x0DA5 3493 | uint16 | EEPROM_NOZZLE_DIAMETER_uM | 9001h | ff ffh 65535 | Nozzle diameter is: __400um__ | LCD menu | D3 Ax0da5 C2
|
||||
| ^ | ^ | ^ | 5802h | ^ | Nozzle diameter is: __600um__ | ^ | ^
|
||||
| ^ | ^ | ^ | 2003h | ^ | Nozzle diameter is: __800um__ | ^ | ^
|
||||
| ^ | ^ | ^ | fa00h | ^ | Nozzle diameter is: __250um__ | ^ | ^
|
||||
| 0x0DA4 3492 | uint8 | EEPROM_CHECK_MODEL | 01h 1 | ffh 255 | Check mode for printer model is: __warn__ | LCD menu | D3 Ax0da4 C1
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | Check mode for printer model is: __strict__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for printer model is: __none__ | ^ | ^
|
||||
| 0x0DA3 3491 | uint8 | EEPROM_CHECK_VERSION | 01h 1 | ffh 255 | Check mode for firmware is: __warn__ | LCD menu | D3 Ax0da3 C1
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | Check mode for firmware is: __strict__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for firmware is: __none__ | ^ | ^
|
||||
| 0x0DA2 3490 | uint8 | EEPROM_CHECK_GCODE | 01h 1 | ffh 255 | Check mode for gcode is: __warn__ _unused atm_ | LCD menu | D3 Ax0da2 C1
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | Check mode for gcode is: __strict__ _unused atm_ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for gcode is: __none__ _unused atm_ | ^ | ^
|
||||
| 0x0D49 3401 | uint16 | EEPROM_SHEETS_BASE | ??? | ffh 255 | ??? | LCD menu | D3 Ax0d49 C89
|
||||
| 0x0D49 3401 | char | _1st Sheet block_ |536d6f6f746831| ffffffffffffff | 1st sheet - Name: _Smooth1_ | ^ | D3 Ax0d49 C7
|
||||
| 0x0D50 3408 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 1st sheet - Z offset | ^ | D3 Ax0d50 C2
|
||||
| 0x0D52 3410 | uint8 | ^ | 00h 0 | ffh 255 | 1st sheet - bed temp | ^ | D3 Ax0d52 C1
|
||||
| 0x0D53 3411 | uint8 | ^ | 00h 0 | ffh 255 | 1st sheet - PINDA temp | ^ | D3 Ax0d53 C1
|
||||
| 0x0D54 3412 | char | _2nd Sheet block_ |536d6f6f746832| ffffffffffffff | 2nd sheet - Name: _Smooth2_ | ^ | D3 Ax0d54 C7
|
||||
| 0x0D5B 3419 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 2nd sheet - Z offset | ^ | D3 Ax0d5b C2
|
||||
| 0x0D5D 3421 | uint8 | ^ | 00h 0 | ffh 255 | 2nd sheet - bed temp | ^ | D3 Ax0d5d C1
|
||||
| 0x0D5E 3422 | uint8 | ^ | 00h 0 | ffh 255 | 2nd sheet - PINDA temp | ^ | D3 Ax0d5e C1
|
||||
| 0x0D5F 3423 | char | _3rd Sheet block_ |54657874757231| ffffffffffffff | 3rd sheet - Name: _Textur1_ | ^ | D3 Ax0d5f C7
|
||||
| 0x0D66 3430 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 3rd sheet - Z offset | ^ | D3 Ax0d66 C2
|
||||
| 0x0D68 3432 | uint8 | ^ | 00h 0 | ffh 255 | 3rd sheet - bed temp | ^ | D3 Ax0d68 C1
|
||||
| 0x0D69 3433 | uint8 | ^ | 00h 0 | ffh 255 | 3rd sheet - PINDA temp | ^ | D3 Ax0d69 C1
|
||||
| 0x0D6A 3434 | char | _4th Sheet block_ |54657874757232| ffffffffffffff | 4th sheet - Name: _Textur2_ | ^ | D3 Ax0d6a C7
|
||||
| 0x0D71 3441 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 4th sheet - Z offset | ^ | D3 Ax0d71 C2
|
||||
| 0x0D73 3443 | uint8 | ^ | 00h 0 | ffh 255 | 4th sheet - bed temp | ^ | D3 Ax0d73 C1
|
||||
| 0x0D74 3444 | uint8 | ^ | 00h 0 | ffh 255 | 4th sheet - PINDA temp | ^ | D3 Ax0d74 C1
|
||||
| 0x0D75 3445 | char | _5th Sheet block_ |536174696e2031| ffffffffffffff | 5th sheet - Name: _Satin 1_ | ^ | D3 Ax0d75 C7
|
||||
| 0x0D7C 3452 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 5th sheet - Z offset | ^ | D3 Ax0d7c C2
|
||||
| 0x0D7E 3454 | uint8 | ^ | 00h 0 | ffh 255 | 5th sheet - bed temp | ^ | D3 Ax0d7e C1
|
||||
| 0x0D7F 3455 | uint8 | ^ | 00h 0 | ffh 255 | 5th sheet - PINDA temp | ^ | D3 Ax0d7f C1
|
||||
| 0x0D80 3456 | char | _6th Sheet block_ |536174696e2032| ffffffffffffff | 6th sheet - Name: _Satin 2_ | ^ | D3 Ax0d80 C7
|
||||
| 0x0D87 3463 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 6th sheet - Z offset | ^ | D3 Ax0d87 C2
|
||||
| 0x0D89 3465 | uint8 | ^ | 00h 0 | ffh 255 | 6th sheet - bed temp | ^ | D3 Ax0d89 C1
|
||||
| 0x0D8A 3466 | uint8 | ^ | 00h 0 | ffh 255 | 6th sheet - PINDA temp | ^ | D3 Ax0d8a C1
|
||||
| 0x0D8B 3467 | char | _7th Sheet block_ |437573746f6d31| ffffffffffffff | 7th sheet - Name: _Custom1_ | ^ | D3 Ax0d8b C7
|
||||
| 0x0D92 3474 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 7th sheet - Z offset | ^ | D3 Ax0d92 C2
|
||||
| 0x0D94 3476 | uint8 | ^ | 00h 0 | ffh 255 | 7th sheet - bed temp | ^ | D3 Ax0d94 C1
|
||||
| 0x0D95 3477 | uint8 | ^ | 00h 0 | ffh 255 | 7th sheet - PINDA temp | ^ | D3 Ax0d95 C1
|
||||
| 0x0D96 3478 | char | _8th Sheet block_ |437573746f6d32| ffffffffffffff | 8th sheet - Name: _Custom2_ | ^ | D3 Ax0d96 C7
|
||||
| 0x0D9D 3485 | uint16 | ^ | 00 00h 0 | ff ffh 65535 | 8th sheet - Z offset | ^ | D3 Ax0d9d C2
|
||||
| 0x0D9F 3487 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - bed temp | ^ | D3 Ax0d9f C1
|
||||
| 0x0DA0 3488 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - PINDA temp | ^ | D3 Ax0da0 C1
|
||||
| 0x0DA1 3489 | uint8 | active_sheet | 00h 0 | ffh 255 | Active sheet index | ^ | D3 Ax0da1 C1
|
||||
| 0x0D48 3400 | uint8 | EEPROM_FSENSOR_PCB | ffh 255 | ffh 255 | Filament Sensor type IR unknown | LCD Support | D3 Ax0d48 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Filament Sensor type IR 0.3 or older | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Filament Sensor type IR 0.4 or newer | ^ | ^
|
||||
| 0x0D47 3399 | uint8 | EEPROM_FSENSOR_ACTION_NA | 00h 0 | ffh 255 | Filament Sensor action: __Continue__ | LCD menu | D3 Ax0d47 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Filament Sensor action: __Pause__ | ^ | ^
|
||||
| 0x0D37 3383 | float | EEPROM_UVLO_SAVED_START_POSITION | ??? | ff ff ff ffh | Power panic saved start position all-axis | ??? | D3 Ax0d37 C16
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position e-axis | ^ | D3 Ax0d43 C4
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position z-axis | ^ | D3 Ax0d3f C4
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position y-axis | ^ | D3 Ax0d3b C4
|
||||
| ^ | ^ | ^ | ??? | ^ | Power panic saved start position x-axis | ^ | D3 Ax0d37 C4
|
||||
| 0x0D35 3381 | uint16 | EEPROM_UVLO_FEEDMULTIPLY | ??? | ff ffh 65355 | Power panic saved feed multiplier | ??? | D3 Ax0d35 C2
|
||||
| 0x0D34 3380 | uint8 | EEPROM_BACKLIGHT_LEVEL_HIGH | 00h - ffh | 82h 130 | LCD backlight bright: __128__ Dim value to 255 | LCD menu | D3 Ax0d34 C1
|
||||
| 0x0D33 3379 | uint8 | EEPROM_BACKLIGHT_LEVEL_LOW | 00h - ffh | 32h 50 | LCD backlight dim: __50__ 0 to Bright value | LCD menu | D3 Ax0d33 C1
|
||||
| 0x0D32 3378 | uint8 | EEPROM_BACKLIGHT_MODE | 02h 2 | ffh 255 | LCD backlight mode: __Auto__ | LCD menu | D3 Ax0d32 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | LCD backlight mode: __Bright__ | ^ | ^
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | LCD backlight mode: __Dim__ | ^ | ^
|
||||
| 0x0D30 3376 | uint16 | EEPROM_BACKLIGHT_TIMEOUT | 01 00 - ff ff| 0a 00h 65535 | LCD backlight timeout: __10__ seconds | LCD menu | D3 Ax0d30 C2
|
||||
| 0x0D2C 3372 | float | EEPROM_UVLO_LA_K | ??? | ff ff ff ffh | Power panic saved Linear Advanced K value | ??? | D3 Ax0d2c C4
|
||||
| 0x0D2B 3371 | uint8 | EEPROM_ALTFAN_OVERRIDE | ffh 255 | ffh 255 | ALTFAN override unknown state | LCD menu | D3 Ax0d2b C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | ALTFAN override deactivated | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | ALTFAN override activated | ^ | ^
|
||||
| 0x0D2A 3370 | uint8 | EEPROM_EXPERIMENTAL_VISIBILITY | ffh 255 | ffh 255 | Experimental menu visibility unknown state | LCD menu | D3 Ax0d2a C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | Experimental menu visibility hidden | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Experimental menu visibility visible | ^ | ^
|
||||
| 0x0D29 3369 | uint8 | EEPROM_PINDA_TEMP_COMPENSATION | ffh 255 | ffh 255 | PINDA temp compensation unknown state | LCD menu | D3 Ax0d29 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | PINDA has no temp compensation PINDA v1/2 | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | PINDA has temp compensation aka SuperPINDA | ^ | ^
|
||||
| 0x0D15 3349 | char[20]| EEPROM_PRUSA_SN | SN[19] == 0 | ffffffffffffffff... | PRUSA Serial number string | PRUSA SN | D3 Ax0d15 C20
|
||||
| 0x0D11 3345 | float | EEPROM_UVLO_ACCELL | ??? | ff ff ff ffh | Power panic saved normal acceleration | ??? | D3 Ax0d11 C4
|
||||
| 0x0D0D 3341 | float | EEPROM_UVLO_RETRACT_ACCELL | ??? | ff ff ff ffh | Power panic saved retract acceleration | ??? | D3 Ax0d0d C4
|
||||
| 0x0D09 3337 | float | EEPROM_UVLO_TRAVEL_ACCELL | ??? | ff ff ff ffh | Power panic saved travel acceleration | ??? | D3 Ax0d09 C4
|
||||
| 0x0D05 3333 | unint32 | EEPROM_JOB_ID | ??? | 00 00 00 00h | Job ID used by host software | D3 only | D3 Ax0d05 C4
|
||||
| 0x0D04 3332 | uint8 | EEPROM_ECOOL_ENABLE | ffh 255 | ^ | Disable extruder motor scaling for non-farm print | LCD menu | D3 Ax0d04 C1
|
||||
| ^ | ^ | ^ | 2ah 42 | ^ | Enable extruder motor scaling for non-farm print | ^ | D3 Ax0d04 C1
|
||||
| 0x0D03 3331 | uint8 | EEPROM_FW_CRASH_FLAG | ffh 255 | ffh 255 | Last FW crash reason (dump_crash_reason) | D21/D22 | D3 Ax0d03 C1
|
||||
| ^ | ^ | ^ | 00h 0 | ^ | manual | ^ | ^
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | stack_error | ^ | ^
|
||||
| ^ | ^ | ^ | 02h 2 | ^ | watchdog | ^ | ^
|
||||
| ^ | ^ | ^ | 03h 3 | ^ | bad_isr | ^ | ^
|
||||
| ^ | ^ | ^ | 04h 4 | ^ | bad_pullup_temp_isr | ^ | ^
|
||||
| ^ | ^ | ^ | 05h 5 | ^ | bad_pullup_step_isr | ^ | ^
|
||||
| 0x0D02 3330 | uint8 | EEPROM_TEMP_MODEL_ENABLE | 00h 0 | ff/00 | Temp model deactivated | Temp model | D3 Ax0d02 C1
|
||||
| ^ | ^ | ^ | 01h 1 | ^ | Temp model activated | ^ | ^
|
||||
| 0x0CFE 3326 | float | EEPROM_TEMP_MODEL_P | ??? | ff ff ff ffh | Temp model power (W) | Temp model | D3 Ax0cfe C4
|
||||
| 0x0CFA 3322 | float | EEPROM_TEMP_MODEL_C | ??? | ff ff ff ffh | Temp model capacitance (J/K) | Temp model | D3 Ax0cfa C4
|
||||
| 0x0CBA 3258 |float[16]| EEPROM_TEMP_MODEL_R | ??? | ff ff ff ffh | Temp model resistance (K/W) | Temp model | D3 Ax0cba C64
|
||||
| 0x0CB6 3254 | float | EEPROM_TEMP_MODEL_Ta_corr | ??? | ff ff ff ffh | Temp model ambient temperature correction (K) | Temp model | D3 Ax0cb6 C4
|
||||
| 0x0CB2 3250 | float | EEPROM_TEMP_MODEL_W | ??? | ff ff ff ffh | Temp model warning threshold (K/s) | Temp model | D3 Ax0cb2 C4
|
||||
| 0x0CAE 3246 | float | EEPROM_TEMP_MODEL_E | ??? | ff ff ff ffh | Temp model error threshold (K/s) | Temp model | D3 Ax0cae C4
|
||||
| 0x0CAD 3245 | uint8 | EEPROM_FSENSOR_JAM_DETECTION | 01h 1 | ff/01 | fsensor pat9125 jam detection feature | LCD menu | D3 Ax0cad C1
|
||||
| 0x0CAC 3244 | uint8 | EEPROM_MMU_ENABLED | 01h 1 | ff/01 | MMU enabled | LCD menu | D3 Ax0cac C1
|
||||
|
||||
|Address begin|Bit/Type | Name | Valid values | Default/FactoryReset | Description |Gcode/Function| Debug code
|
||||
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--:
|
||||
| 0x0012 18 | uint16 | EEPROM_FIRMWARE_VERSION_END | ??? | ff ffh 65535 | ??? | ??? | D3 Ax0012 C2
|
||||
| 0x0010 16 | uint16 | EEPROM_FIRMWARE_VERSION_FLAVOR | ??? | ff ffh 65535 | ??? | ??? | D3 Ax0010 C2
|
||||
| 0x000E 14 | uint16 | EEPROM_FIRMWARE_VERSION_REVISION | ??? | ff ffh 65535 | Firmware version revision number DEV/ALPHA/BETA/RC| ??? | D3 Ax000e C2
|
||||
| 0x000C 12 | uint16 | EEPROM_FIRMWARE_VERSION_MINOR | ??? | ff ffh 65535 | Firmware version minor number | ??? | D3 Ax000c C2
|
||||
| 0x000A 10 | uint16 | EEPROM_FIRMWARE_VERSION_MAJOR | ??? | ff ffh 65535 | Firmware version major number | ??? | D3 Ax000a C2
|
||||
| 0x0000 0 | char | FW_PRUSA3D_MAGIC | ??? | ffffffffffffffffffff | __`PRUSA3DFW`__ | ??? | D3 Ax0000 C10
|
||||
*/
|
||||
|
||||
#define EEPROM_EMPTY_VALUE 0xFF
|
||||
|
|
@ -384,19 +392,19 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
#define EEPROM_BED_CORRECTION_REAR (EEPROM_BED_CORRECTION_FRONT-1)
|
||||
#define EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY (EEPROM_BED_CORRECTION_REAR-1)
|
||||
#define EEPROM_PRINT_FLAG (EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY-1)
|
||||
#define EEPROM_PROBE_TEMP_SHIFT (EEPROM_PRINT_FLAG - 2*5) //5 x int for storing pinda probe temp shift relative to 50 C; unit: motor steps
|
||||
#define EEPROM_PROBE_TEMP_SHIFT (EEPROM_PRINT_FLAG - 2*5) //5 x int for storing pinda probe temp shift relative to 50 C; unit: motor steps
|
||||
#define EEPROM_TEMP_CAL_ACTIVE (EEPROM_PROBE_TEMP_SHIFT - 1)
|
||||
#define _EEPROM_FREE_NR6_ (EEPROM_TEMP_CAL_ACTIVE - 2*4) //4 x int (used to be for bowden lengths for SNMM)
|
||||
#define EEPROM_CALIBRATION_STATUS_PINDA (_EEPROM_FREE_NR6_ - 1) //0 - not calibrated; 1 - calibrated
|
||||
#define EEPROM_UVLO (EEPROM_CALIBRATION_STATUS_PINDA - 1) //1 - uvlo during print
|
||||
#define EEPROM_UVLO_CURRENT_POSITION (EEPROM_UVLO-2*4) // 2 x float for current_position in X and Y axes
|
||||
#define EEPROM_FILENAME (EEPROM_UVLO_CURRENT_POSITION - 8) //8chars to store filename without extension
|
||||
#define EEPROM_FILE_POSITION (EEPROM_FILENAME - 4) //32 bit for uint32_t file position
|
||||
#define EEPROM_FILE_POSITION (EEPROM_FILENAME - 4) //32 bit for uint32_t file position
|
||||
#define EEPROM_UVLO_CURRENT_POSITION_Z (EEPROM_FILE_POSITION - 4) //float for current position in Z
|
||||
#define EEPROM_UVLO_UNUSED_001 (EEPROM_UVLO_CURRENT_POSITION_Z - 1) // uint8_t (unused)
|
||||
#define EEPROM_UVLO_TARGET_BED (EEPROM_UVLO_UNUSED_001 - 1)
|
||||
#define EEPROM_UVLO_FEEDRATE (EEPROM_UVLO_TARGET_BED - 2) //uint16_t
|
||||
#define EEPROM_UVLO_FAN_SPEED (EEPROM_UVLO_FEEDRATE - 1)
|
||||
#define EEPROM_UVLO_FAN_SPEED (EEPROM_UVLO_FEEDRATE - 1)
|
||||
#define EEPROM_FAN_CHECK_ENABLED (EEPROM_UVLO_FAN_SPEED - 1)
|
||||
#define EEPROM_UVLO_MESH_BED_LEVELING (EEPROM_FAN_CHECK_ENABLED - 9*2)
|
||||
#define EEPROM_UVLO_Z_MICROSTEPS (EEPROM_UVLO_MESH_BED_LEVELING - 2) // uint16_t (could be removed)
|
||||
|
|
@ -407,12 +415,12 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
#define EEPROM_FREE_NR4 (EEPROM_UVLO_SAVED_SEGMENT_IDX - 1) // FREE EEPROM SPACE
|
||||
#define EEPROM_FREE_NR5 (EEPROM_FREE_NR4 - 1) // FREE EEPROM SPACE
|
||||
|
||||
// Crash detection mode EEPROM setting
|
||||
#define EEPROM_CRASH_DET (EEPROM_FREE_NR5 - 1) // uint8 (orig EEPROM_UVLO_MESH_BED_LEVELING-12)
|
||||
// Crash detection mode EEPROM setting
|
||||
#define EEPROM_CRASH_DET (EEPROM_FREE_NR5 - 1) // uint8 (orig EEPROM_UVLO_MESH_BED_LEVELING-12)
|
||||
// Crash detection counter Y (last print)
|
||||
#define EEPROM_CRASH_COUNT_Y (EEPROM_CRASH_DET - 1) // uint8 (orig EEPROM_UVLO_MESH_BED_LEVELING-15)
|
||||
// Filament sensor on/off EEPROM setting
|
||||
#define EEPROM_FSENSOR (EEPROM_CRASH_COUNT_Y - 1) // uint8 (orig EEPROM_UVLO_MESH_BED_LEVELING-14)
|
||||
// Filament sensor on/off EEPROM setting
|
||||
#define EEPROM_FSENSOR (EEPROM_CRASH_COUNT_Y - 1) // uint8 (orig EEPROM_UVLO_MESH_BED_LEVELING-14)
|
||||
// Crash detection counter X (last print)
|
||||
#define EEPROM_CRASH_COUNT_X (EEPROM_FSENSOR - 1) // uint8 (orig EEPROM_UVLO_MESH_BED_LEVELING-15)
|
||||
// Filament runout/error coutner (last print)
|
||||
|
|
@ -442,7 +450,7 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
#define EEPROM_POWER_COUNT_TOT (EEPROM_FERROR_COUNT_TOT - 2) // uint16
|
||||
|
||||
////////////////////////////////////////
|
||||
// TMC2130 Accurate sensorless homing
|
||||
// TMC2130 Accurate sensorless homing
|
||||
|
||||
// X-axis home origin (stepper phase in microsteps, 0..63 for 16ustep resolution)
|
||||
#define EEPROM_TMC2130_HOME_X_ORIGIN (EEPROM_POWER_COUNT_TOT - 1) // uint8
|
||||
|
|
@ -507,7 +515,7 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
#define EEPROM_UVLO_MESH_BED_LEVELING_FULL (EEPROM_MMU_CUTTER_ENABLED - 12*12*2) //allow 12 calibration points for future expansion
|
||||
|
||||
#define EEPROM_MBL_TYPE (EEPROM_UVLO_MESH_BED_LEVELING_FULL-1) //uint8_t for mesh bed leveling precision
|
||||
#define EEPROM_MBL_MAGNET_ELIMINATION (EEPROM_MBL_TYPE -1)
|
||||
#define EEPROM_MBL_MAGNET_ELIMINATION (EEPROM_MBL_TYPE -1)
|
||||
#define EEPROM_MBL_POINTS_NR (EEPROM_MBL_MAGNET_ELIMINATION -1) //uint8_t number of points in one exis for mesh bed leveling
|
||||
#define EEPROM_MBL_PROBE_NR (EEPROM_MBL_POINTS_NR-1) //number of measurements for each point
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
//! @brief First layer (Z offset) calibration
|
||||
|
||||
#include "first_lay_cal.h"
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
#include "language.h"
|
||||
#include "Marlin.h"
|
||||
#include "cmdqueue.h"
|
||||
|
|
@ -48,8 +48,8 @@ void lay1cal_load_filament(char *cmd_buffer, uint8_t filament)
|
|||
//! @brief Print intro line
|
||||
void lay1cal_intro_line()
|
||||
{
|
||||
static const char cmd_intro_mmu_3[] PROGMEM = "G1 X55.0 E32.0 F1073.0";
|
||||
static const char cmd_intro_mmu_4[] PROGMEM = "G1 X5.0 E32.0 F1800.0";
|
||||
static const char cmd_intro_mmu_3[] PROGMEM = "G1 X55.0 E29.0 F1073.0";
|
||||
static const char cmd_intro_mmu_4[] PROGMEM = "G1 X5.0 E29.0 F1800.0";
|
||||
static const char cmd_intro_mmu_5[] PROGMEM = "G1 X55.0 E8.0 F2000.0";
|
||||
static const char cmd_intro_mmu_6[] PROGMEM = "G1 Z0.3 F1000.0";
|
||||
static const char cmd_intro_mmu_7[] PROGMEM = "G92 E0.0";
|
||||
|
|
|
|||
|
|
@ -204,11 +204,12 @@ private:
|
|||
extern void lcd_set_custom_characters(void);
|
||||
extern void lcd_set_custom_characters_nextpage(void);
|
||||
|
||||
//! @brief Consume click event
|
||||
//! @brief Consume click and longpress event
|
||||
inline void lcd_consume_click()
|
||||
{
|
||||
lcd_button_pressed = 0;
|
||||
lcd_buttons &= 0xff^EN_C;
|
||||
lcd_longpress_trigger = 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
//messages.c
|
||||
#include "language.h"
|
||||
|
||||
//this is because we need include Configuration_prusa.h (CUSTOM_MENDEL_NAME)
|
||||
#include "Configuration_prusa.h"
|
||||
//this is because we need CUSTOM_MENDEL_NAME
|
||||
#include "Configuration_var.h"
|
||||
|
||||
//internationalized messages
|
||||
const char MSG_ALWAYS[] PROGMEM_I1 = ISTR("Always"); ////MSG_ALWAYS c=6
|
||||
|
|
@ -172,6 +172,9 @@ extern const char MSG_THERMAL_ANOMALY[] PROGMEM_I1 = ISTR("THERMAL ANOMALY");///
|
|||
extern const char MSG_LOAD_ALL[] PROGMEM_I1 = ISTR("Load All"); ////MSG_LOAD_ALL c=18
|
||||
|
||||
//not internationalized messages
|
||||
#if 0
|
||||
const char MSG_FW_VERSION_BETA[] PROGMEM_N1 = "You are using a BETA firmware version! It is in a development state! Use this version with CAUTION as it may DAMAGE the printer!"; ////MSG_FW_VERSION_BETA c=20 r=8
|
||||
#endif
|
||||
const char MSG_SPOOL_JOIN[] PROGMEM_N1 = "SpoolJoin"; ////MSG_SPOOL_JOIN c=13
|
||||
const char MSG_FIRMWARE[] PROGMEM_N1 = "Firmware"; ////MSG_FIRMWARE c=8
|
||||
const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[] PROGMEM_N1 = "FlashAir"; ////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY c=8
|
||||
|
|
|
|||
|
|
@ -76,7 +76,6 @@ extern const char MSG_NO[];
|
|||
extern const char MSG_NOZZLE[];
|
||||
extern const char MSG_PAPER[];
|
||||
extern const char MSG_PAUSE_PRINT[];
|
||||
extern const char MSG_PINDA[];
|
||||
extern const char MSG_PLACE_STEEL_SHEET[];
|
||||
extern const char MSG_PLEASE_WAIT[];
|
||||
extern const char MSG_POWER_FAILURES[];
|
||||
|
|
@ -90,7 +89,6 @@ extern const char MSG_REMOVE_STEEL_SHEET[];
|
|||
extern const char MSG_RESET[];
|
||||
extern const char MSG_RESUME_PRINT[];
|
||||
extern const char MSG_RESUMING_PRINT[];
|
||||
extern const char MSG_SD_WORKDIR_FAIL[];
|
||||
extern const char MSG_SELFTEST_PART_FAN[];
|
||||
extern const char MSG_SELFTEST_EXTRUDER_FAN[];
|
||||
extern const char MSG_SELFTEST_FAILED[];
|
||||
|
|
@ -130,24 +128,20 @@ extern const char MSG_WIZARD_WELCOME[];
|
|||
extern const char MSG_WIZARD_WELCOME_SHIPPING[];
|
||||
extern const char MSG_YES[];
|
||||
extern const char MSG_V2_CALIBRATION[];
|
||||
extern const char MSG_WELCOME[];
|
||||
extern const char MSG_OFF[];
|
||||
extern const char MSG_ON[];
|
||||
extern const char MSG_NA[];
|
||||
extern const char MSG_SPOOL_JOIN[];
|
||||
extern const char MSG_CUTTER[];
|
||||
extern const char MSG_NONE[];
|
||||
extern const char MSG_WARN[];
|
||||
extern const char MSG_STRICT[];
|
||||
extern const char MSG_MODEL[];
|
||||
extern const char MSG_FIRMWARE[];
|
||||
extern const char MSG_GCODE[];
|
||||
extern const char MSG_GCODE_DIFF_PRINTER_CONTINUE[];
|
||||
extern const char MSG_GCODE_DIFF_PRINTER_CANCELLED[];
|
||||
extern const char MSG_NOZZLE_DIAMETER[];
|
||||
extern const char MSG_MMU_MODE[];
|
||||
extern const char MSG_SD_CARD[];
|
||||
extern const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[];
|
||||
extern const char MSG_SORT[];
|
||||
extern const char MSG_SORT_TIME[];
|
||||
extern const char MSG_SORT_ALPHA[];
|
||||
|
|
@ -182,6 +176,15 @@ extern const char MSG_THERMAL_ANOMALY[];
|
|||
extern const char MSG_LOAD_ALL[];
|
||||
|
||||
//not internationalized messages
|
||||
#if 0
|
||||
extern const char MSG_FW_VERSION_BETA[];
|
||||
#endif
|
||||
extern const char MSG_SPOOL_JOIN[];
|
||||
extern const char MSG_FIRMWARE[];
|
||||
extern const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[];
|
||||
extern const char MSG_PINDA[];
|
||||
extern const char MSG_WELCOME[];
|
||||
extern const char MSG_SD_WORKDIR_FAIL[];
|
||||
extern const char MSG_BROWNOUT_RESET[];
|
||||
extern const char MSG_EXTERNAL_RESET[];
|
||||
extern const char MSG_FILE_SAVED[];
|
||||
|
|
|
|||
|
|
@ -39,7 +39,10 @@ static constexpr float MMU2_LOAD_TO_NOZZLE_LENGTH = 87.0F + 5.0F;
|
|||
// - ToolChange shall not try to push filament into the very tip of the nozzle
|
||||
// to have some space for additional G-code to tune the extruded filament length
|
||||
// in the profile
|
||||
static constexpr float MMU2_TOOL_CHANGE_LOAD_LENGTH = 30.0F;
|
||||
// Beware - this value is used to initialize the MMU logic layer - it will be sent to the MMU upon line up (written into its 8bit register 0x0b)
|
||||
// However - in the G-code we can get a request to set the extra load distance at runtime to something else (M708 A0xb Xsomething).
|
||||
// The printer intercepts such a call and sets its extra load distance to match the new value as well.
|
||||
static constexpr uint8_t MMU2_TOOL_CHANGE_LOAD_LENGTH = 5; // mm
|
||||
|
||||
static constexpr float MMU2_LOAD_TO_NOZZLE_FEED_RATE = 20.0F; // mm/s
|
||||
static constexpr float MMU2_UNLOAD_TO_FINDA_FEED_RATE = 120.0F; // mm/s
|
||||
|
|
@ -102,7 +105,7 @@ MMU2 mmu2;
|
|||
|
||||
MMU2::MMU2()
|
||||
: is_mmu_error_monitor_active(false)
|
||||
, logic(&mmu2Serial)
|
||||
, logic(&mmu2Serial, MMU2_TOOL_CHANGE_LOAD_LENGTH)
|
||||
, extruder(MMU2_NO_TOOL)
|
||||
, tool_change_extruder(MMU2_NO_TOOL)
|
||||
, resume_position()
|
||||
|
|
@ -197,6 +200,12 @@ bool MMU2::ReadRegister(uint8_t address){
|
|||
bool MMU2::WriteRegister(uint8_t address, uint16_t data){
|
||||
if( ! WaitForMMUReady())
|
||||
return false;
|
||||
|
||||
// special case - intercept requests of extra loading distance and perform the change even on the printer's side
|
||||
if( address == 0x0b ){
|
||||
logic.PlanExtraLoadDistance(data);
|
||||
}
|
||||
|
||||
logic.WriteRegister(address, data); // we may signal the accepted/rejected status of the response as return value of this function
|
||||
manage_response(false, false);
|
||||
return true;
|
||||
|
|
@ -216,7 +225,7 @@ void MMU2::mmu_loop() {
|
|||
if (is_mmu_error_monitor_active){
|
||||
// Call this every iteration to keep the knob rotation responsive
|
||||
// This includes when mmu_loop is called within manage_response
|
||||
ReportErrorHook((uint16_t)lastErrorCode, mmu2.MMUCurrentErrorCode() == ErrorCode::OK ? ErrorSourcePrinter : ErrorSourceMMU);
|
||||
ReportErrorHook((uint16_t)lastErrorCode);
|
||||
}
|
||||
|
||||
avoidRecursion = false;
|
||||
|
|
@ -380,6 +389,8 @@ bool MMU2::set_filament_type(uint8_t index, uint8_t type) {
|
|||
return false;
|
||||
|
||||
// @@TODO - this is not supported in the new MMU yet
|
||||
index = index; // @@TODO
|
||||
type = type; // @@TODO
|
||||
// cmd_arg = filamentType;
|
||||
// command(MMU_CMD_F0 + index);
|
||||
|
||||
|
|
@ -571,10 +582,13 @@ void MMU2::SaveAndPark(bool move_axes, bool turn_off_nozzle) {
|
|||
raise_z(MMU_ERR_Z_PAUSE_LIFT);
|
||||
|
||||
// move XY aside
|
||||
current_position[X_AXIS] = MMU_ERR_X_PAUSE_POS;
|
||||
current_position[Y_AXIS] = MMU_ERR_Y_PAUSE_POS;
|
||||
plan_buffer_line_curposXYZE(NOZZLE_PARK_XY_FEEDRATE);
|
||||
st_synchronize();
|
||||
if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS])
|
||||
{
|
||||
current_position[X_AXIS] = MMU_ERR_X_PAUSE_POS;
|
||||
current_position[Y_AXIS] = MMU_ERR_Y_PAUSE_POS;
|
||||
plan_buffer_line_curposXYZE(NOZZLE_PARK_XY_FEEDRATE);
|
||||
st_synchronize();
|
||||
}
|
||||
}
|
||||
|
||||
if (turn_off_nozzle){
|
||||
|
|
@ -793,7 +807,7 @@ void MMU2::execute_extruder_sequence(const E_Step *sequence, uint8_t steps) {
|
|||
}
|
||||
}
|
||||
|
||||
void MMU2::ReportError(ErrorCode ec, uint8_t res) {
|
||||
void MMU2::ReportError(ErrorCode ec, ErrorSource res) {
|
||||
// Due to a potential lossy error reporting layers linked to this hook
|
||||
// we'd better report everything to make sure especially the error states
|
||||
// do not get lost.
|
||||
|
|
@ -819,13 +833,14 @@ void MMU2::ReportError(ErrorCode ec, uint8_t res) {
|
|||
break;
|
||||
}
|
||||
|
||||
ReportErrorHook((uint16_t)ec, res);
|
||||
|
||||
if( ec != lastErrorCode ){ // deduplicate: only report changes in error codes into the log
|
||||
lastErrorCode = ec;
|
||||
lastErrorSource = res;
|
||||
LogErrorEvent_P( _O(PrusaErrorTitle(PrusaErrorCodeIndex((uint16_t)ec))) );
|
||||
}
|
||||
|
||||
ReportErrorHook((uint16_t)ec);
|
||||
|
||||
static_assert(mmu2Magic[0] == 'M'
|
||||
&& mmu2Magic[1] == 'M'
|
||||
&& mmu2Magic[2] == 'U'
|
||||
|
|
@ -900,8 +915,8 @@ void MMU2::OnMMUProgressMsgSame(ProgressCode pc){
|
|||
loadFilamentStarted = false;
|
||||
// After the MMU knows the FSENSOR is triggered it will:
|
||||
// 1. Push the filament by additional 30mm (see fsensorToNozzle)
|
||||
// 2. Disengage the idler and push another 5mm.
|
||||
current_position[E_AXIS] += 30.0f + 2.0f;
|
||||
// 2. Disengage the idler and push another 2mm.
|
||||
current_position[E_AXIS] += logic.ExtraLoadDistance() + 2;
|
||||
plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE);
|
||||
break;
|
||||
case FilamentState::NOT_PRESENT:
|
||||
|
|
|
|||
|
|
@ -70,9 +70,10 @@ public:
|
|||
};
|
||||
|
||||
/// Source of operation error
|
||||
enum ReportErrorSource: uint8_t {
|
||||
enum ErrorSource: uint8_t {
|
||||
ErrorSourcePrinter = 0,
|
||||
ErrorSourceMMU = 1,
|
||||
ErrorSourceNone = 0xFF,
|
||||
};
|
||||
|
||||
/// Perform a reset of the MMU
|
||||
|
|
@ -164,6 +165,9 @@ public:
|
|||
/// @returns Current error code
|
||||
inline ErrorCode MMUCurrentErrorCode() const { return logic.Error(); }
|
||||
|
||||
/// @returns Last error source
|
||||
inline ErrorSource MMULastErrorSource() const { return lastErrorSource; }
|
||||
|
||||
/// @returns the version of the connected MMU FW.
|
||||
/// In the future we'll return the trully detected FW version
|
||||
Version GetMMUFWVersion()const {
|
||||
|
|
@ -218,7 +222,7 @@ private:
|
|||
/// Reports an error into attached ExtUIs
|
||||
/// @param ec error code, see ErrorCode
|
||||
/// @param res reporter error source, is either Printer (0) or MMU (1)
|
||||
void ReportError(ErrorCode ec, uint8_t res);
|
||||
void ReportError(ErrorCode ec, ErrorSource res);
|
||||
|
||||
/// Reports progress of operations into attached ExtUIs
|
||||
/// @param pc progress code, see ProgressCode
|
||||
|
|
@ -264,6 +268,7 @@ private:
|
|||
|
||||
ProgressCode lastProgressCode = ProgressCode::OK;
|
||||
ErrorCode lastErrorCode = ErrorCode::MMU_NOT_RESPONDING;
|
||||
ErrorSource lastErrorSource = ErrorSource::ErrorSourceNone;
|
||||
Buttons lastButton = Buttons::NoButton;
|
||||
|
||||
StepStatus logicStepLastStatus;
|
||||
|
|
@ -279,9 +284,8 @@ private:
|
|||
/// unlike the mid-print ToolChange commands, which only load the first ~30mm and then the G-code takes over.
|
||||
bool loadingToNozzle;
|
||||
|
||||
uint8_t retryAttempts;
|
||||
|
||||
bool inAutoRetry;
|
||||
uint8_t retryAttempts;
|
||||
};
|
||||
|
||||
/// following Marlin's way of doing stuff - one and only instance of MMU implementation in the code base
|
||||
|
|
|
|||
|
|
@ -37,11 +37,11 @@ enum class ErrorCode : uint_fast16_t {
|
|||
HOMING_FAILED = 0x8007, ///< generic homing failed error - always reported with the corresponding axis bit set (Idler or Selector) as follows:
|
||||
HOMING_SELECTOR_FAILED = HOMING_FAILED | TMC_SELECTOR_BIT, ///< E32903 the Selector was unable to home properly - that means something is blocking its movement
|
||||
HOMING_IDLER_FAILED = HOMING_FAILED | TMC_IDLER_BIT, ///< E33031 the Idler was unable to home properly - that means something is blocking its movement
|
||||
STALLED_PULLEY = HOMING_FAILED | TMC_PULLEY_BIT, ///< E32839 for the Pulley "homing" means just stallguard detected during Pulley's operation (Pulley doesn't home)
|
||||
STALLED_PULLEY = HOMING_FAILED | TMC_PULLEY_BIT, ///< E32839 for the Pulley "homing" means just StallGuard detected during Pulley's operation (Pulley doesn't home)
|
||||
|
||||
FINDA_VS_EEPROM_DISREPANCY = 0x8008, ///< E32776 FINDA is pressed but we have no such record in EEPROM - this can only happen at the start of the MMU and can be resolved by issuing an Unload command
|
||||
|
||||
FSENSOR_TOO_EARLY = 0x8009, ///< E32777 FSensor triggered while doing FastFeedToExtruder - that means either:
|
||||
FSENSOR_TOO_EARLY = 0x8009, ///< E32777 FSensor triggered while doing FastFeedToBondtech - that means either:
|
||||
///< - the PTFE is too short
|
||||
///< - a piece of filament was left inside - pushed in front of the loaded filament causing the fsensor trigger too early
|
||||
///< - fsensor is faulty producing bogus triggers
|
||||
|
|
@ -60,7 +60,7 @@ enum class ErrorCode : uint_fast16_t {
|
|||
|
||||
/// TMC driver init error - TMC dead or bad communication
|
||||
/// - E33344 Pulley TMC driver
|
||||
/// - E33404 Selector TMC driver
|
||||
/// - E33408 Selector TMC driver
|
||||
/// - E33536 Idler TMC driver
|
||||
/// - E33728 All 3 TMC driver
|
||||
TMC_IOIN_MISMATCH = 0x8200,
|
||||
|
|
@ -105,5 +105,12 @@ enum class ErrorCode : uint_fast16_t {
|
|||
/// - E49280 Selector TMC driver
|
||||
/// - E49408 Idler TMC driver
|
||||
/// - E49600 All 3 TMC driver
|
||||
TMC_OVER_TEMPERATURE_ERROR = 0xC000
|
||||
TMC_OVER_TEMPERATURE_ERROR = 0xC000,
|
||||
|
||||
/// TMC driver - IO pins are unreliable. While in theory it's recoverable, in practice it most likely
|
||||
/// means your hardware is borked (we can't command the drivers reliably via STEP/EN/DIR due to electrical
|
||||
/// issues or hardware fault. Possible "fixable" cause is undervoltage on the 5v logic line.
|
||||
/// Unfixable possible cause: bad or cracked solder joints on the PCB, failed shift register, failed driver.
|
||||
MMU_SOLDERING_NEEDS_ATTENTION = 0xC200,
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -54,6 +54,9 @@ typedef enum : uint16_t {
|
|||
ERR_ELECTRICAL_SELECTOR_TMC_DRIVER_SHORTED = 314,
|
||||
ERR_ELECTRICAL_IDLER_TMC_DRIVER_SHORTED = 324,
|
||||
|
||||
ERR_ELECTRICAL_PULLEY_SELFTEST_FAILED = 305,
|
||||
ERR_ELECTRICAL_SELECTOR_SELFTEST_FAILED = 315,
|
||||
ERR_ELECTRICAL_IDLER_SELFTEST_FAILED = 325,
|
||||
|
||||
ERR_CONNECT = 400,
|
||||
ERR_CONNECT_MMU_NOT_RESPONDING = 401,
|
||||
|
|
@ -104,6 +107,9 @@ static const constexpr uint16_t errorCodes[] PROGMEM = {
|
|||
ERR_ELECTRICAL_PULLEY_TMC_DRIVER_SHORTED,
|
||||
ERR_ELECTRICAL_SELECTOR_TMC_DRIVER_SHORTED,
|
||||
ERR_ELECTRICAL_IDLER_TMC_DRIVER_SHORTED,
|
||||
ERR_ELECTRICAL_PULLEY_SELFTEST_FAILED,
|
||||
ERR_ELECTRICAL_SELECTOR_SELFTEST_FAILED,
|
||||
ERR_ELECTRICAL_IDLER_SELFTEST_FAILED,
|
||||
ERR_CONNECT_MMU_NOT_RESPONDING,
|
||||
ERR_CONNECT_COMMUNICATION_ERROR,
|
||||
ERR_SYSTEM_FILAMENT_ALREADY_LOADED,
|
||||
|
|
@ -143,6 +149,7 @@ static const char MSG_TITLE_TMC_UNDERVOLTAGE_ERROR[] PROGMEM_I1 = ISTR("TMC UND
|
|||
static const char MSG_TITLE_TMC_DRIVER_SHORTED[] PROGMEM_I1 = ISTR("TMC DRIVER SHORTED"); ////MSG_TITLE_TMC_DRIVER_SHORTED c=20
|
||||
//static const char MSG_TITLE_TMC_DRIVER_SHORTED[] PROGMEM_I1 = ISTR("TMC DRIVER SHORTED");
|
||||
//static const char MSG_TITLE_TMC_DRIVER_SHORTED[] PROGMEM_I1 = ISTR("TMC DRIVER SHORTED");
|
||||
static const char MSG_TITLE_SELFTEST_FAILED[] PROGMEM_I1 = ISTR("MMU SELFTEST FAILED"); ////MSG_TITLE_SELFTEST_FAILED c=20
|
||||
static const char MSG_TITLE_MMU_NOT_RESPONDING[] PROGMEM_I1 = ISTR("MMU NOT RESPONDING"); ////MSG_TITLE_MMU_NOT_RESPONDING c=20
|
||||
static const char MSG_TITLE_COMMUNICATION_ERROR[] PROGMEM_I1 = ISTR("COMMUNICATION ERROR"); ////MSG_TITLE_COMMUNICATION_ERROR c=20
|
||||
static const char MSG_TITLE_FIL_ALREADY_LOADED[] PROGMEM_I1 = ISTR("FILAMENT ALREADY LOA"); ////MSG_TITLE_FIL_ALREADY_LOADED c=20
|
||||
|
|
@ -181,6 +188,9 @@ static const char * const errorTitles [] PROGMEM = {
|
|||
_R(MSG_TITLE_TMC_DRIVER_SHORTED),
|
||||
_R(MSG_TITLE_TMC_DRIVER_SHORTED),
|
||||
_R(MSG_TITLE_TMC_DRIVER_SHORTED),
|
||||
_R(MSG_TITLE_SELFTEST_FAILED),
|
||||
_R(MSG_TITLE_SELFTEST_FAILED),
|
||||
_R(MSG_TITLE_SELFTEST_FAILED),
|
||||
_R(MSG_TITLE_MMU_NOT_RESPONDING),
|
||||
_R(MSG_TITLE_COMMUNICATION_ERROR),
|
||||
_R(MSG_TITLE_FIL_ALREADY_LOADED),
|
||||
|
|
@ -261,6 +271,9 @@ static const char * const errorDescs[] PROGMEM = {
|
|||
_R(MSG_DESC_TMC), // descPULLEY_TMC_DRIVER_SHORTED
|
||||
_R(MSG_DESC_TMC), // descSELECTOR_TMC_DRIVER_SHORTED
|
||||
_R(MSG_DESC_TMC), // descIDLER_TMC_DRIVER_SHORTED
|
||||
_R(MSG_DESC_TMC), // descPULLEY_SELFTEST_FAILED
|
||||
_R(MSG_DESC_TMC), // descSELECTOR_SELFTEST_FAILED
|
||||
_R(MSG_DESC_TMC), // descIDLER_SELFTEST_FAILED
|
||||
_R(MSG_DESC_MMU_NOT_RESPONDING),
|
||||
_R(MSG_DESC_COMMUNICATION_ERROR),
|
||||
_R(MSG_DESC_FILAMENT_ALREADY_LOADED),
|
||||
|
|
@ -273,18 +286,19 @@ static const char * const errorDescs[] PROGMEM = {
|
|||
|
||||
// we have max 3 buttons/operations to select from
|
||||
// one of them is "More" to show the explanation text normally hidden in the next screens.
|
||||
// It is displayed with W (Double down arrow, special character from CGRAM)
|
||||
// 01234567890123456789
|
||||
// >bttxt >bttxt>MoreW
|
||||
// Therefore at least some of the buttons, which can occur on the screen together, need to be 5-chars long max @@TODO.
|
||||
// >bttxt >bttxt >W
|
||||
// Therefore at least some of the buttons, which can occur on the screen together, can only be 8-chars long max @@TODO.
|
||||
// Beware - we only have space for 2 buttons on the LCD while the MMU has 3 buttons
|
||||
// -> the left button on the MMU is not used/rendered on the LCD (it is also almost unused on the MMU side)
|
||||
static const char MSG_BTN_RETRY[] PROGMEM_I1 = ISTR("Retry"); ////MSG_BTN_RETRY c=5
|
||||
static const char MSG_BTN_CONTINUE[] PROGMEM_I1 = ISTR("Done"); ////MSG_BTN_CONTINUE c=5
|
||||
static const char MSG_BTN_RETRY[] PROGMEM_I1 = ISTR("Retry"); ////MSG_BTN_RETRY c=8
|
||||
static const char MSG_BTN_CONTINUE[] PROGMEM_I1 = ISTR("Done"); ////MSG_BTN_CONTINUE c=8
|
||||
static const char MSG_BTN_RESTART_MMU[] PROGMEM_I1 = ISTR("Reset MMU"); ////MSG_BTN_RESTART_MMU c=9
|
||||
static const char MSG_BTN_UNLOAD[] PROGMEM_I1 = ISTR("Unload"); ////MSG_BTN_UNLOAD c=6
|
||||
static const char MSG_BTN_STOP[] PROGMEM_I1 = ISTR("Stop"); ////MSG_BTN_STOP c=5
|
||||
static const char MSG_BTN_UNLOAD[] PROGMEM_I1 = ISTR("Unload"); ////MSG_BTN_UNLOAD c=8
|
||||
static const char MSG_BTN_STOP[] PROGMEM_I1 = ISTR("Stop"); ////MSG_BTN_STOP c=8
|
||||
static const char MSG_BTN_DISABLE_MMU[] PROGMEM_I1 = ISTR("Disable"); ////MSG_BTN_DISABLE_MMU c=9
|
||||
static const char MSG_BTN_MORE[] PROGMEM_I1 = ISTR("More\x06"); ////MSG_BTN_MORE c=5
|
||||
static const char MSG_BTN_MORE[] PROGMEM_N1 = ISTR("\x06"); ////MSG_BTN_MORE c=8
|
||||
|
||||
// Used to parse the buttons from Btns().
|
||||
static const char * const btnOperation[] PROGMEM = {
|
||||
|
|
@ -335,6 +349,9 @@ static const uint8_t errorButtons[] PROGMEM = {
|
|||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//PULLEY_TMC_DRIVER_SHORTED
|
||||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//SELECTOR_TMC_DRIVER_SHORTED
|
||||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//IDLER_TMC_DRIVER_SHORTED
|
||||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//PULLEY_SELFTEST_FAILED
|
||||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//SELECTOR_SELFTEST_FAILED
|
||||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//IDLER_SELFTEST_FAILED
|
||||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//MMU_NOT_RESPONDING
|
||||
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//COMMUNICATION_ERROR
|
||||
|
||||
|
|
|
|||
|
|
@ -79,6 +79,20 @@ uint8_t PrusaErrorCodeIndex(uint16_t ec) {
|
|||
case (uint16_t)ErrorCode::FINDA_VS_EEPROM_DISREPANCY:
|
||||
return FindErrorIndex(ERR_SYSTEM_UNLOAD_MANUALLY);
|
||||
}
|
||||
|
||||
// Electrical issues which can be detected somehow.
|
||||
// Need to be placed before TMC-related errors in order to process couples of error bits between single ones
|
||||
// and to keep the code size down.
|
||||
if (ec & (uint16_t)ErrorCode::TMC_PULLEY_BIT) {
|
||||
if ((ec & (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION) == (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION)
|
||||
return FindErrorIndex(ERR_ELECTRICAL_PULLEY_SELFTEST_FAILED);
|
||||
} else if (ec & (uint16_t)ErrorCode::TMC_SELECTOR_BIT) {
|
||||
if ((ec & (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION) == (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION)
|
||||
return FindErrorIndex(ERR_ELECTRICAL_SELECTOR_SELFTEST_FAILED);
|
||||
} else if (ec & (uint16_t)ErrorCode::TMC_IDLER_BIT) {
|
||||
if ((ec & (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION) == (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION)
|
||||
return FindErrorIndex(ERR_ELECTRICAL_IDLER_SELFTEST_FAILED);
|
||||
}
|
||||
|
||||
// TMC-related errors - multiple of these can occur at once
|
||||
// - in such a case we report the first which gets found/converted into Prusa-Error-Codes (usually the fact, that one TMC has an issue is serious enough)
|
||||
|
|
@ -132,24 +146,24 @@ uint16_t PrusaErrorCode(uint8_t i){
|
|||
return pgm_read_word(errorCodes + i);
|
||||
}
|
||||
|
||||
const char * const PrusaErrorTitle(uint8_t i){
|
||||
return (const char * const)pgm_read_ptr(errorTitles + i);
|
||||
const char * PrusaErrorTitle(uint8_t i){
|
||||
return (const char *)pgm_read_ptr(errorTitles + i);
|
||||
}
|
||||
|
||||
const char * const PrusaErrorDesc(uint8_t i){
|
||||
return (const char * const)pgm_read_ptr(errorDescs + i);
|
||||
const char * PrusaErrorDesc(uint8_t i){
|
||||
return (const char *)pgm_read_ptr(errorDescs + i);
|
||||
}
|
||||
|
||||
uint8_t PrusaErrorButtons(uint8_t i){
|
||||
return pgm_read_byte(errorButtons + i);
|
||||
}
|
||||
|
||||
const char * const PrusaErrorButtonTitle(uint8_t bi){
|
||||
const char * PrusaErrorButtonTitle(uint8_t bi){
|
||||
// -1 represents the hidden NoOperation button which is not drawn in any way
|
||||
return (const char * const)pgm_read_ptr(btnOperation + bi - 1);
|
||||
return (const char *)pgm_read_ptr(btnOperation + bi - 1);
|
||||
}
|
||||
|
||||
const char * const PrusaErrorButtonMore(){
|
||||
const char * PrusaErrorButtonMore(){
|
||||
return _R(MSG_BTN_MORE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ uint8_t PrusaErrorCodeIndex(uint16_t ec);
|
|||
|
||||
/// @returns pointer to a PROGMEM string representing the Title of the Prusa-Error-Codes error
|
||||
/// @param i index of the error - obtained by calling ErrorCodeIndex
|
||||
const char * const PrusaErrorTitle(uint8_t i);
|
||||
const char * PrusaErrorTitle(uint8_t i);
|
||||
|
||||
/// @returns pointer to a PROGMEM string representing the multi-page Description of the Prusa-Error-Codes error
|
||||
/// @param i index of the error - obtained by calling ErrorCodeIndex
|
||||
const char * const PrusaErrorDesc(uint8_t i);
|
||||
const char * PrusaErrorDesc(uint8_t i);
|
||||
|
||||
/// @returns the actual numerical value of the Prusa-Error-Codes error
|
||||
/// @param i index of the error - obtained by calling ErrorCodeIndex
|
||||
|
|
@ -27,10 +27,10 @@ uint8_t PrusaErrorButtons(uint8_t i);
|
|||
|
||||
/// @returns pointer to a PROGMEM string representing the Title of a button
|
||||
/// @param i index of the error - obtained by calling PrusaErrorButtons + extracting low or high nibble from the Btns pair
|
||||
const char * const PrusaErrorButtonTitle(uint8_t bi);
|
||||
const char * PrusaErrorButtonTitle(uint8_t bi);
|
||||
|
||||
/// @returns pointer to a PROGMEM string representing the "More" button
|
||||
const char * const PrusaErrorButtonMore();
|
||||
const char * PrusaErrorButtonMore();
|
||||
|
||||
/// Sets the selected button for later pick-up by the MMU state machine.
|
||||
/// Used to save the GUI selection/decoupling
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include "mmu2_power.h"
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
#include "pins.h"
|
||||
#include "fastio.h"
|
||||
#include <util/delay.h>
|
||||
|
|
|
|||
|
|
@ -62,11 +62,11 @@ static const char * const progressTexts[] PROGMEM = {
|
|||
_R(MSG_PROGRESS_FEED_FSENSOR)
|
||||
};
|
||||
|
||||
const char * const ProgressCodeToText(uint16_t pc){
|
||||
const char * ProgressCodeToText(uint16_t pc){
|
||||
// @@TODO ?? a better fallback option?
|
||||
return ( pc <= (sizeof(progressTexts) / sizeof(progressTexts[0])) )
|
||||
? static_cast<const char * const>(pgm_read_ptr(&progressTexts[pc]))
|
||||
: static_cast<const char * const>(pgm_read_ptr(&progressTexts[0]));
|
||||
? static_cast<const char *>(pgm_read_ptr(&progressTexts[pc]))
|
||||
: static_cast<const char *>(pgm_read_ptr(&progressTexts[0]));
|
||||
}
|
||||
|
||||
} // namespace MMU2
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@
|
|||
|
||||
namespace MMU2 {
|
||||
|
||||
const char * const ProgressCodeToText(uint16_t pc);
|
||||
const char * ProgressCodeToText(uint16_t pc);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,6 +112,10 @@ DecodeStatus Protocol::DecodeRequest(uint8_t c) {
|
|||
rqState = RequestStates::Code;
|
||||
return DecodeStatus::MessageCompleted;
|
||||
}
|
||||
} else {
|
||||
requestMsg.code = RequestMsgCodes::unknown;
|
||||
rqState = RequestStates::Error;
|
||||
return DecodeStatus::Error;
|
||||
}
|
||||
default: //case error:
|
||||
if (IsNewLine(c)) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,22 @@
|
|||
|
||||
namespace MMU2 {
|
||||
|
||||
static const uint8_t supportedMmuFWVersion[3] PROGMEM = { 2, 1, 3 };
|
||||
static const uint8_t supportedMmuFWVersion[3] PROGMEM = { 2, 1, 4 };
|
||||
|
||||
const uint8_t ProtocolLogic::regs8Addrs[ProtocolLogic::regs8Count] PROGMEM = {
|
||||
8, // FINDA state
|
||||
0x1b, // Selector slot
|
||||
0x1c, // Idler slot
|
||||
};
|
||||
|
||||
const uint8_t ProtocolLogic::regs16Addrs[ProtocolLogic::regs16Count] PROGMEM = {
|
||||
4, // MMU errors - aka statistics
|
||||
0x1a, // Pulley position [mm]
|
||||
};
|
||||
|
||||
const uint8_t ProtocolLogic::initRegs8Addrs[ProtocolLogic::initRegs8Count] PROGMEM = {
|
||||
0x0b, // extra load distance
|
||||
};
|
||||
|
||||
void ProtocolLogic::CheckAndReportAsyncEvents() {
|
||||
// even when waiting for a query period, we need to report a change in filament sensor's state
|
||||
|
|
@ -22,9 +37,51 @@ void ProtocolLogic::SendQuery() {
|
|||
scopeState = ScopeState::QuerySent;
|
||||
}
|
||||
|
||||
void ProtocolLogic::SendFINDAQuery() {
|
||||
SendMsg(RequestMsg(RequestMsgCodes::Finda, 0));
|
||||
scopeState = ScopeState::FINDAReqSent;
|
||||
void ProtocolLogic::StartReading8bitRegisters() {
|
||||
regIndex = 0;
|
||||
SendReadRegister(pgm_read_byte(regs8Addrs + regIndex), ScopeState::Reading8bitRegisters);
|
||||
}
|
||||
|
||||
void ProtocolLogic::ProcessRead8bitRegister(){
|
||||
regs8[regIndex] = rsp.paramValue;
|
||||
++regIndex;
|
||||
if(regIndex >= regs8Count){
|
||||
// proceed with reading 16bit registers
|
||||
StartReading16bitRegisters();
|
||||
} else {
|
||||
SendReadRegister(pgm_read_byte(regs8Addrs + regIndex), ScopeState::Reading8bitRegisters);
|
||||
}
|
||||
}
|
||||
|
||||
void ProtocolLogic::StartReading16bitRegisters() {
|
||||
regIndex = 0;
|
||||
SendReadRegister(pgm_read_byte(regs16Addrs + regIndex), ScopeState::Reading16bitRegisters);
|
||||
}
|
||||
|
||||
ProtocolLogic::ScopeState __attribute__((noinline)) ProtocolLogic::ProcessRead16bitRegister(ProtocolLogic::ScopeState stateAtEnd){
|
||||
regs16[regIndex] = rsp.paramValue;
|
||||
++regIndex;
|
||||
if(regIndex >= regs16Count){
|
||||
return stateAtEnd;
|
||||
} else {
|
||||
SendReadRegister(pgm_read_byte(regs16Addrs + regIndex), ScopeState::Reading16bitRegisters);
|
||||
}
|
||||
return ScopeState::Reading16bitRegisters;
|
||||
}
|
||||
|
||||
void ProtocolLogic::StartWritingInitRegisters() {
|
||||
regIndex = 0;
|
||||
SendWriteRegister(pgm_read_byte(initRegs8Addrs + regIndex), initRegs8[regIndex], ScopeState::WritingInitRegisters);
|
||||
}
|
||||
|
||||
bool __attribute__((noinline)) ProtocolLogic::ProcessWritingInitRegister(){
|
||||
++regIndex;
|
||||
if(regIndex >= initRegs8Count){
|
||||
return true;
|
||||
} else {
|
||||
SendWriteRegister(pgm_read_byte(initRegs8Addrs + regIndex), initRegs8[regIndex], ScopeState::WritingInitRegisters);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ProtocolLogic::SendAndUpdateFilamentSensor() {
|
||||
|
|
@ -224,9 +281,12 @@ StepStatus ProtocolLogic::StartSeqStep() {
|
|||
SendVersion(3);
|
||||
} else {
|
||||
mmuFwVersionBuild = rsp.paramValue; // just register the build number
|
||||
// Start General Interrogation after line up.
|
||||
// For now we just send the state of the filament sensor, but we may request
|
||||
// data point states from the MMU as well. TBD in the future, especially with another protocol
|
||||
// Start General Interrogation after line up - initial parametrization is started
|
||||
StartWritingInitRegisters();
|
||||
}
|
||||
return Processing;
|
||||
case ScopeState::WritingInitRegisters:
|
||||
if( ProcessWritingInitRegister() ){
|
||||
SendAndUpdateFilamentSensor();
|
||||
}
|
||||
return Processing;
|
||||
|
|
@ -313,14 +373,13 @@ StepStatus ProtocolLogic::CommandStep() {
|
|||
case ScopeState::QuerySent:
|
||||
return ProcessCommandQueryResponse();
|
||||
case ScopeState::FilamentSensorStateSent:
|
||||
SendFINDAQuery();
|
||||
StartReading8bitRegisters();
|
||||
return Processing;
|
||||
case ScopeState::FINDAReqSent:
|
||||
findaPressed = rsp.paramValue;
|
||||
SendReadRegister(4, ScopeState::StatisticsSent);
|
||||
case ScopeState::Reading8bitRegisters:
|
||||
ProcessRead8bitRegister();
|
||||
return Processing;
|
||||
case ScopeState::StatisticsSent:
|
||||
scopeState = ScopeState::Wait;
|
||||
case ScopeState::Reading16bitRegisters:
|
||||
scopeState = ProcessRead16bitRegister(ScopeState::Wait);
|
||||
return Processing;
|
||||
case ScopeState::ButtonSent:
|
||||
if (rsp.paramCode == ResponseMsgParamCodes::Accepted) {
|
||||
|
|
@ -371,7 +430,7 @@ StepStatus ProtocolLogic::IdleStep() {
|
|||
// The user pushed a button on the MMU. Save it, do what we need to do
|
||||
// to prepare, then pass it back to the MMU so it can work its magic.
|
||||
buttonCode = static_cast<Buttons>(rsp.paramValue);
|
||||
SendFINDAQuery();
|
||||
StartReading8bitRegisters();
|
||||
return ButtonPushed;
|
||||
case ResponseMsgParamCodes::Processing:
|
||||
// @@TODO we may actually use this branch to report progress of manual operation on the MMU
|
||||
|
|
@ -382,29 +441,27 @@ StepStatus ProtocolLogic::IdleStep() {
|
|||
break;
|
||||
default:
|
||||
errorCode = static_cast<ErrorCode>(rsp.paramValue);
|
||||
SendFINDAQuery(); // continue Idle state without restarting the communication
|
||||
StartReading8bitRegisters(); // continue Idle state without restarting the communication
|
||||
return CommandError;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return ProtocolError;
|
||||
}
|
||||
SendFINDAQuery();
|
||||
StartReading8bitRegisters();
|
||||
return Processing;
|
||||
case ScopeState::FINDAReqSent:
|
||||
findaPressed = rsp.paramValue;
|
||||
SendReadRegister(4, ScopeState::StatisticsSent);
|
||||
case ScopeState::Reading8bitRegisters:
|
||||
ProcessRead8bitRegister();
|
||||
return Processing;
|
||||
case ScopeState::StatisticsSent:
|
||||
failStatistics = rsp.paramValue;
|
||||
scopeState = ScopeState::Ready;
|
||||
return Finished;
|
||||
case ScopeState::Reading16bitRegisters:
|
||||
scopeState = ProcessRead16bitRegister(ScopeState::Ready);
|
||||
return scopeState == ScopeState::Ready ? Finished : Processing;
|
||||
case ScopeState::ButtonSent:
|
||||
if (rsp.paramCode == ResponseMsgParamCodes::Accepted) {
|
||||
// Button was accepted, decrement the retry.
|
||||
mmu2.DecrementRetryAttempts();
|
||||
}
|
||||
SendFINDAQuery();
|
||||
StartReading8bitRegisters();
|
||||
return Processing;
|
||||
case ScopeState::ReadRegisterSent:
|
||||
if (rsp.paramCode == ResponseMsgParamCodes::Accepted) {
|
||||
|
|
@ -430,7 +487,7 @@ StepStatus ProtocolLogic::IdleStep() {
|
|||
return Finished;
|
||||
}
|
||||
|
||||
ProtocolLogic::ProtocolLogic(MMU2Serial *uart)
|
||||
ProtocolLogic::ProtocolLogic(MMU2Serial *uart, uint8_t extraLoadDistance)
|
||||
: currentScope(Scope::Stopped)
|
||||
, scopeState(ScopeState::Ready)
|
||||
, plannedRq(RequestMsgCodes::unknown, 0)
|
||||
|
|
@ -444,8 +501,10 @@ ProtocolLogic::ProtocolLogic(MMU2Serial *uart)
|
|||
, progressCode(ProgressCode::OK)
|
||||
, buttonCode(NoButton)
|
||||
, lastFSensor((uint8_t)WhereIsFilament())
|
||||
, findaPressed(false)
|
||||
, failStatistics(0)
|
||||
, regs8 { 0, 0, 0 }
|
||||
, regs16 { 0, 0 }
|
||||
, initRegs8 { extraLoadDistance }
|
||||
, regIndex(0)
|
||||
, mmuFwVersion { 0, 0, 0 }
|
||||
{}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
#include <stdint.h>
|
||||
#include <avr/pgmspace.h>
|
||||
// #include <array> //@@TODO Don't we have STL for AVR somewhere?
|
||||
template<typename T, uint8_t N>
|
||||
class array {
|
||||
|
|
@ -70,7 +71,7 @@ public:
|
|||
/// Logic layer of the MMU vs. printer communication protocol
|
||||
class ProtocolLogic {
|
||||
public:
|
||||
ProtocolLogic(MMU2Serial *uart);
|
||||
ProtocolLogic(MMU2Serial *uart, uint8_t extraLoadDistance);
|
||||
|
||||
/// Start/Enable communication with the MMU
|
||||
void Start();
|
||||
|
|
@ -91,6 +92,17 @@ public:
|
|||
void ReadRegister(uint8_t address);
|
||||
void WriteRegister(uint8_t address, uint16_t data);
|
||||
|
||||
/// Sets the extra load distance to be reported to the MMU.
|
||||
/// Beware - this call doesn't send anything to the MMU.
|
||||
/// The MMU gets the newly set value either by a communication restart or via an explicit WriteRegister call
|
||||
inline void PlanExtraLoadDistance(uint8_t eld_mm){
|
||||
initRegs8[0] = eld_mm;
|
||||
}
|
||||
/// @returns the currently preset extra load distance
|
||||
inline uint8_t ExtraLoadDistance()const {
|
||||
return initRegs8[0];
|
||||
}
|
||||
|
||||
/// Step the state machine
|
||||
StepStatus Step();
|
||||
|
||||
|
|
@ -110,11 +122,11 @@ public:
|
|||
}
|
||||
|
||||
inline bool FindaPressed() const {
|
||||
return findaPressed;
|
||||
return regs8[0];
|
||||
}
|
||||
|
||||
inline uint16_t FailStatistics() const {
|
||||
return failStatistics;
|
||||
return regs16[0];
|
||||
}
|
||||
|
||||
inline uint8_t MmuFwVersionMajor() const {
|
||||
|
|
@ -187,10 +199,11 @@ private:
|
|||
QuerySent,
|
||||
CommandSent,
|
||||
FilamentSensorStateSent,
|
||||
FINDAReqSent,
|
||||
StatisticsSent,
|
||||
Reading8bitRegisters,
|
||||
Reading16bitRegisters,
|
||||
WritingInitRegisters,
|
||||
ButtonSent,
|
||||
ReadRegisterSent,
|
||||
ReadRegisterSent, // standalone requests for reading registers - from higher layers
|
||||
WriteRegisterSent,
|
||||
|
||||
// States which do not expect a message - MSb set
|
||||
|
|
@ -217,7 +230,13 @@ private:
|
|||
/// So far, the only such a case is the filament sensor, but there can be more like this in the future.
|
||||
void CheckAndReportAsyncEvents();
|
||||
void SendQuery();
|
||||
void SendFINDAQuery();
|
||||
void StartReading8bitRegisters();
|
||||
void ProcessRead8bitRegister();
|
||||
void StartReading16bitRegisters();
|
||||
ScopeState ProcessRead16bitRegister(ProtocolLogic::ScopeState stateAtEnd);
|
||||
void StartWritingInitRegisters();
|
||||
/// @returns true when all registers have been written into the MMU
|
||||
bool ProcessWritingInitRegister();
|
||||
void SendAndUpdateFilamentSensor();
|
||||
void SendButton(uint8_t btn);
|
||||
void SendVersion(uint8_t stage);
|
||||
|
|
@ -278,7 +297,7 @@ private:
|
|||
State state; ///< internal state of ProtocolLogic
|
||||
|
||||
Protocol protocol; ///< protocol codec
|
||||
|
||||
|
||||
array<uint8_t, 16> lastReceivedBytes; ///< remembers the last few bytes of incoming communication for diagnostic purposes
|
||||
uint8_t lrb;
|
||||
|
||||
|
|
@ -290,8 +309,25 @@ private:
|
|||
|
||||
uint8_t lastFSensor; ///< last state of filament sensor
|
||||
|
||||
bool findaPressed;
|
||||
uint16_t failStatistics;
|
||||
// 8bit registers
|
||||
static constexpr uint8_t regs8Count = 3;
|
||||
static_assert(regs8Count > 0); // code is not ready for empty lists of registers
|
||||
static const uint8_t regs8Addrs[regs8Count] PROGMEM;
|
||||
uint8_t regs8[regs8Count];
|
||||
|
||||
// 16bit registers
|
||||
static constexpr uint8_t regs16Count = 2;
|
||||
static_assert(regs16Count > 0); // code is not ready for empty lists of registers
|
||||
static const uint8_t regs16Addrs[regs16Count] PROGMEM;
|
||||
uint16_t regs16[regs16Count];
|
||||
|
||||
// 8bit init values to be sent to the MMU after line up
|
||||
static constexpr uint8_t initRegs8Count = 1;
|
||||
static_assert(initRegs8Count > 0); // code is not ready for empty lists of registers
|
||||
static const uint8_t initRegs8Addrs[initRegs8Count] PROGMEM;
|
||||
uint8_t initRegs8[initRegs8Count];
|
||||
|
||||
uint8_t regIndex;
|
||||
|
||||
uint8_t mmuFwVersion[3];
|
||||
uint16_t mmuFwVersionBuild;
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@
|
|||
|
||||
namespace MMU2 {
|
||||
|
||||
const char * const ProgressCodeToText(uint16_t pc); // we may join progress convertor and reporter together
|
||||
const char * ProgressCodeToText(uint16_t pc); // we may join progress convertor and reporter together
|
||||
|
||||
void BeginReport(CommandInProgress cip, uint16_t ec) {
|
||||
void BeginReport(CommandInProgress /*cip*/, uint16_t ec) {
|
||||
custom_message_type = CustomMsg::MMUProgress;
|
||||
lcd_setstatuspgm( _T(ProgressCodeToText(ec)) );
|
||||
}
|
||||
|
||||
void EndReport(CommandInProgress cip, uint16_t ec) {
|
||||
void EndReport(CommandInProgress /*cip*/, uint16_t /*ec*/) {
|
||||
// clear the status msg line - let the printed filename get visible again
|
||||
custom_message_type = CustomMsg::Status;
|
||||
}
|
||||
|
|
@ -52,7 +52,7 @@ static void ReportErrorHookStaticRender(uint8_t ei) {
|
|||
//! |MMU FW update needed| <- title/header of the error: max 20 characters
|
||||
//! |prusa3d.com/ERR04504| <- URL 20 characters
|
||||
//! |FI:1 FS:1 5>3 t201°| <- status line, t is thermometer symbol
|
||||
//! |>Retry >Done >MoreW | <- buttons
|
||||
//! |>Retry >Done >W| <- buttons
|
||||
bool two_choices = false;
|
||||
|
||||
// Read and determine what operations should be shown on the menu
|
||||
|
|
@ -74,9 +74,9 @@ static void ReportErrorHookStaticRender(uint8_t ei) {
|
|||
lcd_printf_P(PSTR("%.20S\nprusa3d.com/ERR04%hu"), _T(PrusaErrorTitle(ei)), PrusaErrorCode(ei) );
|
||||
|
||||
ReportErrorHookSensorLineRender();
|
||||
|
||||
|
||||
// Render the choices
|
||||
lcd_show_choices_prompt_P(two_choices ? LCD_LEFT_BUTTON_CHOICE : LCD_MIDDLE_BUTTON_CHOICE, _T(PrusaErrorButtonTitle(button_op_middle)), _T(two_choices ? PrusaErrorButtonMore() : PrusaErrorButtonTitle(button_op_right)), two_choices ? 10 : 7, two_choices ? nullptr : _T(PrusaErrorButtonMore()));
|
||||
lcd_show_choices_prompt_P(two_choices ? LCD_LEFT_BUTTON_CHOICE : LCD_MIDDLE_BUTTON_CHOICE, _T(PrusaErrorButtonTitle(button_op_middle)), _T(two_choices ? PrusaErrorButtonMore() : PrusaErrorButtonTitle(button_op_right)), two_choices ? 18 : 9, two_choices ? nullptr : _T(PrusaErrorButtonMore()));
|
||||
}
|
||||
|
||||
extern void ReportErrorHookSensorLineRender()
|
||||
|
|
@ -166,12 +166,13 @@ static uint8_t ReportErrorHookMonitor(uint8_t ei) {
|
|||
lcd_print(current_selection == LCD_LEFT_BUTTON_CHOICE ? '>': ' ');
|
||||
if (two_choices == false)
|
||||
{
|
||||
lcd_set_cursor(7, 3);
|
||||
lcd_set_cursor(9, 3);
|
||||
lcd_print(current_selection == LCD_MIDDLE_BUTTON_CHOICE ? '>': ' ');
|
||||
lcd_set_cursor(13, 3);
|
||||
lcd_set_cursor(18, 3);
|
||||
lcd_print(current_selection == LCD_RIGHT_BUTTON_CHOICE ? '>': ' ');
|
||||
} else {
|
||||
lcd_set_cursor(10, 3);
|
||||
// More button for two button screen
|
||||
lcd_set_cursor(18, 3);
|
||||
lcd_print(current_selection == LCD_MIDDLE_BUTTON_CHOICE ? '>': ' ');
|
||||
}
|
||||
// Consume rotation event and make feedback sound
|
||||
|
|
@ -216,8 +217,8 @@ enum class ReportErrorHookStates : uint8_t {
|
|||
|
||||
enum ReportErrorHookStates ReportErrorHookState = ReportErrorHookStates::RENDER_ERROR_SCREEN;
|
||||
|
||||
void ReportErrorHook(uint16_t ec, uint8_t res) {
|
||||
if (mmu2.MMUCurrentErrorCode() == ErrorCode::OK && res == MMU2::ErrorSourceMMU)
|
||||
void ReportErrorHook(uint16_t ec) {
|
||||
if (mmu2.MMUCurrentErrorCode() == ErrorCode::OK && mmu2.MMULastErrorSource() == MMU2::ErrorSourceMMU)
|
||||
{
|
||||
// If the error code suddenly changes to OK, that means
|
||||
// a button was pushed on the MMU and the LCD should
|
||||
|
|
|
|||
|
|
@ -27,9 +27,8 @@ void EndReport(CommandInProgress cip, uint16_t ec);
|
|||
* Render MMU error screen on the LCD. This must be non-blocking
|
||||
* and allow the MMU and printer to communicate with each other.
|
||||
* @param[in] ec error code
|
||||
* @param[in] res reporter error source, is either Printer (0) or MMU (1)
|
||||
*/
|
||||
void ReportErrorHook(uint16_t ec, uint8_t res);
|
||||
void ReportErrorHook(uint16_t ec);
|
||||
|
||||
/// Called when the MMU sends operation progress update
|
||||
void ReportProgressHook(CommandInProgress cip, uint16_t ec);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ void MMU2Serial::flush() {
|
|||
// @@TODO - clear the output buffer
|
||||
}
|
||||
|
||||
size_t MMU2Serial::write(const uint8_t *buffer, size_t size) {
|
||||
void MMU2Serial::write(const uint8_t *buffer, size_t size) {
|
||||
while(size--){
|
||||
fputc(*buffer, uart2io);
|
||||
++buffer;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ public:
|
|||
void close();
|
||||
int read();
|
||||
void flush();
|
||||
size_t write(const uint8_t *buffer, size_t size);
|
||||
void write(const uint8_t *buffer, size_t size);
|
||||
};
|
||||
|
||||
extern MMU2Serial mmu2Serial;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include <avr/pgmspace.h>
|
||||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
|
||||
#if defined(FILAMENT_SENSOR) && (FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
#include "boards.h"
|
||||
#define false 0
|
||||
#define true 1
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
|
||||
|
||||
#ifdef NEW_XYZCAL
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include <util/delay.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "stdbool.h"
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
#include "pins.h"
|
||||
#include "fastio.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
#include "adc.h"
|
||||
#include "ConfigurationStore.h"
|
||||
#include "Timer.h"
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
#include "Prusa_farm.h"
|
||||
|
||||
#if (ADC_OVRSAMPL != OVERSAMPLENR)
|
||||
|
|
@ -1210,27 +1210,27 @@ FORCE_INLINE static void soft_pwm_core()
|
|||
static unsigned char slow_pwm_count = 0;
|
||||
static unsigned char state_heater_0 = 0;
|
||||
static unsigned char state_timer_heater_0 = 0;
|
||||
#endif
|
||||
#endif
|
||||
#if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL)
|
||||
static unsigned char soft_pwm_1;
|
||||
#ifdef SLOW_PWM_HEATERS
|
||||
static unsigned char state_heater_1 = 0;
|
||||
static unsigned char state_timer_heater_1 = 0;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#if EXTRUDERS > 2
|
||||
static unsigned char soft_pwm_2;
|
||||
#ifdef SLOW_PWM_HEATERS
|
||||
static unsigned char state_heater_2 = 0;
|
||||
static unsigned char state_timer_heater_2 = 0;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#if HEATER_BED_PIN > -1
|
||||
// @@DR static unsigned char soft_pwm_b;
|
||||
#ifdef SLOW_PWM_HEATERS
|
||||
static unsigned char state_heater_b = 0;
|
||||
static unsigned char state_timer_heater_b = 0;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)
|
||||
|
|
@ -2904,6 +2904,7 @@ void temp_model_autotune(int16_t temp, bool selftest)
|
|||
temp_model_report_settings();
|
||||
}
|
||||
|
||||
lcd_consume_click();
|
||||
menu_unset_block(MENU_BLOCK_TEMP_MODEL_AUTOTUNE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
// timer2 is used for System timer.
|
||||
|
||||
#include "system_timer.h"
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
|
||||
#ifdef SYSTEM_TIMER_2
|
||||
|
||||
|
|
|
|||
|
|
@ -297,32 +297,19 @@ const char STR_SEPARATOR[] PROGMEM = "------------";
|
|||
|
||||
static void lcd_implementation_drawmenu_sdfile(uint8_t row, const char* longFilename)
|
||||
{
|
||||
char c;
|
||||
uint8_t n = LCD_WIDTH - 1;
|
||||
uint8_t len = LCD_WIDTH - 1;
|
||||
lcd_set_cursor(0, row);
|
||||
lcd_print((lcd_encoder == menu_item)?'>':' ');
|
||||
while( ((c = *longFilename) != '\0') && (n>0) )
|
||||
{
|
||||
lcd_print(c);
|
||||
longFilename++;
|
||||
n--;
|
||||
}
|
||||
lcd_space(n);
|
||||
lcd_print((lcd_encoder == menu_item)?'>':' ');
|
||||
lcd_print_pad(longFilename, len);
|
||||
}
|
||||
|
||||
static void lcd_implementation_drawmenu_sddirectory(uint8_t row, const char* longFilename)
|
||||
{
|
||||
char c;
|
||||
uint8_t n = LCD_WIDTH - 2;
|
||||
uint8_t len = LCD_WIDTH - 2;
|
||||
lcd_set_cursor(0, row);
|
||||
lcd_print((lcd_encoder == menu_item)?'>':' ');
|
||||
lcd_print(LCD_STR_FOLDER[0]);
|
||||
while( ((c = *longFilename) != '\0') && (n>0) )
|
||||
{
|
||||
lcd_print(c);
|
||||
longFilename++;
|
||||
n--;
|
||||
}
|
||||
lcd_space(n);
|
||||
lcd_print((lcd_encoder == menu_item)?'>':' ');
|
||||
lcd_print(LCD_STR_FOLDER[0]);
|
||||
lcd_print_pad(longFilename, len);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -621,6 +608,8 @@ void lcdui_print_status_line(void) {
|
|||
case CustomMsg::M117: // M117 Set the status line message on the LCD
|
||||
case CustomMsg::Status: // Nothing special, print status message normally
|
||||
case CustomMsg::M0Wait: // M0/M1 Wait command working even from SD
|
||||
case CustomMsg::FilamentLoading: // If loading filament, print status
|
||||
case CustomMsg::MMUProgress: // MMU Progress Codes
|
||||
lcd_print_pad(lcd_status_message, LCD_WIDTH);
|
||||
break;
|
||||
case CustomMsg::MeshBedLeveling: // If mesh bed leveling in progress, show the status
|
||||
|
|
@ -643,9 +632,6 @@ void lcdui_print_status_line(void) {
|
|||
}
|
||||
}
|
||||
break;
|
||||
case CustomMsg::FilamentLoading: // If loading filament, print status
|
||||
lcd_print_pad(lcd_status_message, LCD_WIDTH);
|
||||
break;
|
||||
case CustomMsg::PidCal: // PID tuning in progress
|
||||
lcd_print_pad(lcd_status_message, LCD_WIDTH);
|
||||
if (pid_cycle <= pid_number_of_cycles && custom_message_state > 0) {
|
||||
|
|
@ -670,10 +656,6 @@ void lcdui_print_status_line(void) {
|
|||
case CustomMsg::Resuming: // Resuming
|
||||
lcd_puts_at_P(0, 3, _T(MSG_RESUMING_PRINT));
|
||||
break;
|
||||
case CustomMsg::MMUProgress:
|
||||
// set up at mmu2_reporting.cpp, just do nothing here
|
||||
lcd_print(lcd_status_message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1657,7 +1639,7 @@ static void lcd_support_menu()
|
|||
MENU_ITEM_BACK_P(PSTR(NOZZLE_TYPE));
|
||||
MENU_ITEM_BACK_P(STR_SEPARATOR);
|
||||
MENU_ITEM_BACK_P(_i("Date:"));////MSG_DATE c=17
|
||||
MENU_ITEM_BACK_P(PSTR(__DATE__));
|
||||
MENU_ITEM_BACK_P(PSTR(SOURCE_DATE_EPOCH));
|
||||
|
||||
#if defined(FILAMENT_SENSOR) && (FILAMENT_SENSOR_TYPE == FSENSOR_IR_ANALOG)
|
||||
MENU_ITEM_BACK_P(STR_SEPARATOR);
|
||||
|
|
@ -3165,25 +3147,21 @@ uint8_t lcd_show_multiscreen_message_yes_no_and_wait_P(const char *msg, bool all
|
|||
//! @param selected Show first choice as selected if true, the second otherwise
|
||||
//! @param first_choice text caption of first possible choice
|
||||
//! @param second_choice text caption of second possible choice
|
||||
//! @param second_col column on LCD where second choice is rendered. If third choice is set, this value is hardcoded to 7
|
||||
//! @param second_col column on LCD where second choice is rendered.
|
||||
//! @param third_choice text caption of third, optional, choice.
|
||||
void lcd_show_choices_prompt_P(uint8_t selected, const char *first_choice, const char *second_choice, uint8_t second_col, const char *third_choice)
|
||||
{
|
||||
lcd_set_cursor(0, 3);
|
||||
lcd_print(selected == LCD_LEFT_BUTTON_CHOICE ? '>': ' ');
|
||||
lcd_puts_P(first_choice);
|
||||
lcd_set_cursor(second_col, 3);
|
||||
lcd_print(selected == LCD_MIDDLE_BUTTON_CHOICE ? '>': ' ');
|
||||
lcd_puts_P(second_choice);
|
||||
if (third_choice)
|
||||
{
|
||||
lcd_set_cursor(7, 3);
|
||||
lcd_print(selected == LCD_MIDDLE_BUTTON_CHOICE ? '>': ' ');
|
||||
lcd_puts_P(second_choice);
|
||||
lcd_set_cursor(13, 3);
|
||||
lcd_set_cursor(18, 3);
|
||||
lcd_print(selected == LCD_RIGHT_BUTTON_CHOICE ? '>': ' ');
|
||||
lcd_puts_P(third_choice);
|
||||
} else {
|
||||
lcd_set_cursor(second_col, 3);
|
||||
lcd_print(selected == LCD_MIDDLE_BUTTON_CHOICE ? '>': ' ');
|
||||
lcd_puts_P(second_choice);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -7525,12 +7503,12 @@ static void lcd_updatestatus(const char *message, bool progmem = false)
|
|||
else
|
||||
strncpy(lcd_status_message, message, LCD_WIDTH);
|
||||
|
||||
lcd_status_message[LCD_WIDTH] = 0;
|
||||
lcd_status_message[LCD_WIDTH] = 0;
|
||||
|
||||
SERIAL_PROTOCOLLNRPGM(MSG_LCD_STATUS_CHANGED);
|
||||
SERIAL_PROTOCOLLNRPGM(MSG_LCD_STATUS_CHANGED);
|
||||
|
||||
// hack lcd_draw_update to 1, i.e. without clear
|
||||
lcd_draw_update = 1;
|
||||
// hack lcd_draw_update to 1, i.e. without clear
|
||||
lcd_draw_update = 1;
|
||||
}
|
||||
|
||||
void lcd_setstatus(const char* message)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
//xyzcal.cpp - xyz calibration with image processing
|
||||
|
||||
#include "Configuration_prusa.h"
|
||||
#include "Configuration_var.h"
|
||||
#ifdef NEW_XYZCAL
|
||||
|
||||
#include "xyzcal.h"
|
||||
|
|
@ -551,7 +551,7 @@ void go_manhattan(int16_t x, int16_t y, int16_t z, int16_t acc, uint16_t min_del
|
|||
// DBG(_n("\n"));
|
||||
}
|
||||
|
||||
void xyzcal_scan_pixels_32x32_Zhop(int16_t cx, int16_t cy, int16_t min_z, int16_t max_z, uint16_t delay_us, uint8_t *pixels){
|
||||
void __attribute__((noinline)) xyzcal_scan_pixels_32x32_Zhop(int16_t cx, int16_t cy, int16_t min_z, int16_t max_z, uint16_t delay_us, uint8_t *pixels){
|
||||
if (!pixels)
|
||||
return;
|
||||
int16_t z_trig;
|
||||
|
|
|
|||
56
PF-build.sh
56
PF-build.sh
|
|
@ -85,7 +85,7 @@
|
|||
# 15 Feb 2019, 3d-gussner, troubleshooting and minor fixes
|
||||
# 16 Feb 2019, 3d-gussner, Script can be run using arguments
|
||||
# $1 = variant, example "1_75mm_MK3-EINSy10a-E3Dv6full.h" at this moment it is not possible to use ALL
|
||||
# $2 = multi language OR English only [ALL/EN_ONLY]
|
||||
# $2 = multi language OR English only [ALL/EN_FARM]
|
||||
# $3 = development status [GOLD/RC/BETA/ALPHA/DEVEL/DEBUG]
|
||||
# If one argument is wrong a list of valid one will be shown
|
||||
# 13 Mar 2019, 3d-gussner, MKbel updated the Linux build environment to version 1.0.2 with an Fix maximum firmware flash size.
|
||||
|
|
@ -124,7 +124,7 @@
|
|||
# After compiling All multi-language variants it makes it easier to find missing or unused translations.
|
||||
# 12 May 2020, DRracer , Cleanup double MK2/s MK25/s `not_tran` and `not_used` files
|
||||
# 13 May 2020, leptun , If cleanup files do not exist don't try to.
|
||||
# 01 Oct 2020, 3d-gussner, Bug fix if using argument EN_ONLY. Thank to @leptun for pointing out.
|
||||
# 01 Oct 2020, 3d-gussner, Bug fix if using argument EN_FARM. Thank to @leptun for pointing out.
|
||||
# Change Build number to script commits 'git rev-list --count HEAD PF-build.sh'
|
||||
# 02 Oct 2020, 3d-gussner, Add UNKNOWN as argument option
|
||||
# 05 Oct 2020, 3d-gussner, Disable pause and warnings using command line with all needed arguments
|
||||
|
|
@ -268,7 +268,7 @@ echo " -d : '$(tput setaf 2)GOLD$(tput sgr0)', '$(tput setaf 2)RC$(tput sgr0)',
|
|||
echo " -g : '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' lite '$(tput setaf 2)2$(tput sgr0)' fancy '$(tput setaf 2)3$(tput sgr0)' lite with Quad_HR '$(tput setaf 2)4$(tput sgr0)' fancy with Quad_HR"
|
||||
echo " -i : '$(tput setaf 2)1.8.5$(tput sgr0)', '$(tput setaf 2)1.8.19$(tput sgr0)'"
|
||||
echo " -j : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes"
|
||||
echo " -l : '$(tput setaf 2)ALL$(tput sgr0)' for multi language or '$(tput setaf 2)EN_ONLY$(tput sgr0)' for English only"
|
||||
echo " -l : '$(tput setaf 2)ALL$(tput sgr0)' for multi language or '$(tput setaf 2)EN_FARM$(tput sgr0)' for English only"
|
||||
echo " -m : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '$(tput setaf 2)2$(tput sgr0)' with MMU2"
|
||||
echo " -n : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes"
|
||||
echo " -o : '$(tput setaf 2)1$(tput sgr0)' force or '$(tput setaf 2)0$(tput sgr0)' block output and delays"
|
||||
|
|
@ -530,19 +530,6 @@ fi
|
|||
}
|
||||
# End: Check python ... needed during language build
|
||||
|
||||
#Start: Check gawk ... needed during language build
|
||||
check_gawk()
|
||||
{
|
||||
if ! type gawk > /dev/null; then
|
||||
if [ $TARGET_OS == "linux" ]; then
|
||||
echo "$(tput setaf 1)Missing 'gawk' which is important to run this script"
|
||||
echo "install it with the command $(tput setaf 2)'sudo apt-get install gawk'."
|
||||
#sudo apt-get update && apt-get install gawk
|
||||
failures 4
|
||||
fi
|
||||
fi
|
||||
}
|
||||
#End: Check gawk ... needed during language build
|
||||
|
||||
#### Start: Set build environment
|
||||
set_build_env_variables()
|
||||
|
|
@ -551,20 +538,20 @@ BUILD_ENV="1.0.8"
|
|||
BOARD="prusa_einsy_rambo"
|
||||
BOARD_PACKAGE_NAME="PrusaResearch"
|
||||
if [ "$ARDUINO_ENV" == "1.8.19" ]; then
|
||||
BOARD_VERSION="1.0.5-2"
|
||||
BOARD_VERSION="1.0.6"
|
||||
else
|
||||
BOARD_VERSION="1.0.4"
|
||||
fi
|
||||
if [ "$ARDUINO_ENV" == "1.8.19" ]; then
|
||||
BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/devel/IDE_Board_Manager/package_prusa3d_index.json"
|
||||
#BOARD_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/devel/IDE_Board_Manager/package_prusa3d_index.json"
|
||||
BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
|
||||
#BOARD_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
|
||||
else
|
||||
BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
|
||||
fi
|
||||
BOARD_FILENAME="prusa3dboards"
|
||||
if [ "$ARDUINO_ENV" == "1.8.19" ]; then
|
||||
BOARD_FILE_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/devel/IDE_Board_Manager/prusa3dboards-$BOARD_VERSION.tar.bz2"
|
||||
#BOARD_FILE_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/devel/IDE_Board_Manager/prusa3dboards-$BOARD_VERSION.tar.bz2"
|
||||
BOARD_FILE_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-$BOARD_VERSION.tar.bz2"
|
||||
#BOARD_FILE_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-$BOARD_VERSION.tar.bz2"
|
||||
else
|
||||
BOARD_FILE_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-$BOARD_VERSION.tar.bz2"
|
||||
fi
|
||||
|
|
@ -882,7 +869,7 @@ else
|
|||
fi
|
||||
fi
|
||||
|
||||
#'-l' argument defines if it is an English only version. Known values EN_ONLY / ALL
|
||||
#'-l' argument defines if it is an English only version. Known values EN_FARM / ALL
|
||||
#Check default language mode
|
||||
MULTI_LANGUAGE_CHECK=$(grep --max-count=1 "^#define LANG_MODE *" $SCRIPT_PATH/Firmware/config.h|sed -e's/ */ /g'|cut -d ' ' -f3)
|
||||
|
||||
|
|
@ -897,7 +884,7 @@ if [ -z "$language_flag" ] ; then
|
|||
break
|
||||
;;
|
||||
"English only")
|
||||
LANGUAGES="EN_ONLY"
|
||||
LANGUAGES="EN_FARM"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
|
|
@ -906,11 +893,11 @@ if [ -z "$language_flag" ] ; then
|
|||
esac
|
||||
done
|
||||
else
|
||||
if [[ "$language_flag" == "ALL" || "$language_flag" == "EN_ONLY" ]] ; then
|
||||
if [[ "$language_flag" == "ALL" || "$language_flag" == "EN_FARM" ]] ; then
|
||||
LANGUAGES=$language_flag
|
||||
else
|
||||
echo "$(tput setaf 1)Language argument is wrong!$(tput sgr0)"
|
||||
echo "Only $(tput setaf 2)'ALL'$(tput sgr0) or $(tput setaf 2)'EN_ONLY'$(tput sgr0) are allowed as language '-l' argument!"
|
||||
echo "Only $(tput setaf 2)'ALL'$(tput sgr0) or $(tput setaf 2)'EN_FARM'$(tput sgr0) are allowed as language '-l' argument!"
|
||||
failures 5
|
||||
fi
|
||||
fi
|
||||
|
|
@ -1110,9 +1097,9 @@ prepare_hex_folders()
|
|||
if [ $OUTPUT == "1" ] ; then
|
||||
read -t 10 -p "Press Enter to continue..."
|
||||
fi
|
||||
elif [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_ONLY.hex" && "$LANGUAGES" == "EN_ONLY" ]]; then
|
||||
elif [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_FARM.hex" && "$LANGUAGES" == "EN_FARM" ]]; then
|
||||
echo ""
|
||||
ls -1 $SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_ONLY.hex | xargs -n1 basename
|
||||
ls -1 $SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_FARM.hex | xargs -n1 basename
|
||||
echo "$(tput setaf 6)This hex file to be compiled already exists! To cancel this process press CRTL+C and rename existing hex file.$(tput sgr 0)"
|
||||
if [ $OUTPUT == "1" ] ; then
|
||||
read -t 10 -p "Press Enter to continue..."
|
||||
|
|
@ -1171,7 +1158,7 @@ prepare_variant_for_compiling()
|
|||
sed -i -- 's/#define FW_REPOSITORY "Unknown"/#define FW_REPOSITORY "Prusa3d"/g' $SCRIPT_PATH/Firmware/Configuration.h
|
||||
|
||||
#Prepare English only or multi-language version to be build
|
||||
if [ $LANGUAGES == "EN_ONLY" ]; then
|
||||
if [ $LANGUAGES == "EN_FARM" ]; then
|
||||
echo " "
|
||||
echo "English only language firmware will be built"
|
||||
sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE 0/g" $SCRIPT_PATH/Firmware/config.h
|
||||
|
|
@ -1379,17 +1366,17 @@ create_multi_firmware()
|
|||
}
|
||||
#### End: Create and save Multi Language Prusa Firmware
|
||||
|
||||
#### Start: Save EN_ONLY language Prusa Firmware
|
||||
#### Start: Save EN_FARM language Prusa Firmware
|
||||
save_en_firmware()
|
||||
{
|
||||
#else
|
||||
echo "$(tput setaf 2)Copying English only firmware to PF-build-hex folder$(tput sgr 0)"
|
||||
cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_ONLY.hex || failures 12
|
||||
cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_FARM.hex || failures 12
|
||||
echo "$(tput setaf 2)Copying English only elf file to PF-build-hex folder$(tput sgr 0)"
|
||||
cp -f $BUILD_PATH/Firmware.ino.elf $SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_ONLY.elf || failures 12
|
||||
cp -f $BUILD_PATH/Firmware.ino.elf $SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_FARM.elf || failures 12
|
||||
#fi
|
||||
}
|
||||
#### End: Save EN_ONLY language Prusa Firmware
|
||||
#### End: Save EN_FARM language Prusa Firmware
|
||||
|
||||
#### Start: Cleanup Firmware
|
||||
cleanup_firmware()
|
||||
|
|
@ -1562,7 +1549,7 @@ if [[ ! -z "$mk404_flag" && "$variant_flag" != "All " ]]; then
|
|||
#cd ../MK404/master/build
|
||||
|
||||
|
||||
#Decide which hex file to use EN_ONLY or Multi language
|
||||
#Decide which hex file to use EN_FARM or Multi language
|
||||
if [ "$LANGUAGES" == "ALL" ]; then
|
||||
if [[ "$MK404_PRINTER" == "MK3" || "$MK404_PRINTER" == "MK3S" ]]; then
|
||||
MK404_firmware_file=$SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME.hex
|
||||
|
|
@ -1575,7 +1562,7 @@ if [[ ! -z "$mk404_flag" && "$variant_flag" != "All " ]]; then
|
|||
done
|
||||
fi
|
||||
else
|
||||
MK404_firmware_file=$SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_ONLY.hex
|
||||
MK404_firmware_file=$SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-EN_FARM.hex
|
||||
fi
|
||||
|
||||
# Start MK404
|
||||
|
|
@ -1601,7 +1588,6 @@ check_OS
|
|||
check_wget
|
||||
check_zip
|
||||
check_python
|
||||
check_gawk
|
||||
|
||||
#### Check for options/flags
|
||||
echo "Check for options"
|
||||
|
|
|
|||
2
build.sh
2
build.sh
|
|
@ -32,7 +32,7 @@ if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then
|
|||
cp $SCRIPT_PATH/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 8
|
||||
fi
|
||||
|
||||
if [[ ! -z $LANGUAGES && $LANGUAGES == "EN_ONLY" ]]; then
|
||||
if [[ ! -z $LANGUAGES && $LANGUAGES == "EN_FARM" ]]; then
|
||||
echo "English only language firmware will be built"
|
||||
sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE 0/g" $SCRIPT_PATH/Firmware/config.h
|
||||
else
|
||||
|
|
|
|||
|
|
@ -0,0 +1,101 @@
|
|||
get_filename_component(PROJECT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
|
||||
include("${PROJECT_CMAKE_DIR}/Utilities.cmake")
|
||||
set(CMAKE_SYSTEM_NAME Generic)
|
||||
set(CMAKE_SYSTEM_PROCESSOR avr)
|
||||
|
||||
#
|
||||
# Utilities
|
||||
|
||||
if(MINGW
|
||||
OR CYGWIN
|
||||
OR WIN32
|
||||
)
|
||||
set(UTIL_SEARCH_CMD where)
|
||||
set(EXECUTABLE_SUFFIX ".exe")
|
||||
elseif(UNIX OR APPLE)
|
||||
set(UTIL_SEARCH_CMD which)
|
||||
set(EXECUTABLE_SUFFIX "")
|
||||
endif()
|
||||
|
||||
set(TOOLCHAIN_PREFIX avr-)
|
||||
|
||||
#
|
||||
# Looking up the toolchain
|
||||
#
|
||||
|
||||
if(AVR_TOOLCHAIN_DIR)
|
||||
# using toolchain set by AvrGcc.cmake (locked version)
|
||||
message("ToolChain dir is ${AVR_TOOLCHAIN_DIR}")
|
||||
set(BINUTILS_PATH "${AVR_TOOLCHAIN_DIR}/bin")
|
||||
else()
|
||||
# search for ANY avr-gcc toolchain
|
||||
execute_process(
|
||||
COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc
|
||||
OUTPUT_VARIABLE AVR_GCC_PATH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE FIND_RESULT
|
||||
)
|
||||
# found?
|
||||
if(NOT "${FIND_RESULT}" STREQUAL "0")
|
||||
message(FATAL_ERROR "avr-gcc not found")
|
||||
endif()
|
||||
get_filename_component(BINUTILS_PATH "${AVR_GCC_PATH}" DIRECTORY)
|
||||
get_filename_component(AVR_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY)
|
||||
endif()
|
||||
|
||||
#
|
||||
# Setup CMake
|
||||
#
|
||||
|
||||
# Without that flag CMake is not able to pass test compilation check
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
|
||||
set(CMAKE_C_COMPILER
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}gcc${EXECUTABLE_SUFFIX}"
|
||||
CACHE FILEPATH "" FORCE
|
||||
)
|
||||
set(CMAKE_ASM_COMPILER
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}gcc${EXECUTABLE_SUFFIX}"
|
||||
CACHE FILEPATH "" FORCE
|
||||
)
|
||||
set(CMAKE_CXX_COMPILER
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}g++${EXECUTABLE_SUFFIX}"
|
||||
CACHE FILEPATH "" FORCE
|
||||
)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT
|
||||
""
|
||||
CACHE STRING "" FORCE
|
||||
)
|
||||
|
||||
set(CMAKE_ASM_COMPILE_OBJECT
|
||||
"<CMAKE_ASM_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>"
|
||||
CACHE STRING "" FORCE
|
||||
)
|
||||
|
||||
set(CMAKE_AR
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}gcc-ar${EXECUTABLE_SUFFIX}"
|
||||
CACHE FILEPATH "ar" FORCE
|
||||
)
|
||||
|
||||
set(CMAKE_RANLIB
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}gcc-ranlib${EXECUTABLE_SUFFIX}"
|
||||
CACHE FILEPATH "ranlib" FORCE
|
||||
)
|
||||
|
||||
set(CMAKE_OBJCOPY
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}objcopy${EXECUTABLE_SUFFIX}"
|
||||
CACHE INTERNAL "objcopy tool"
|
||||
)
|
||||
set(CMAKE_OBJDUMP
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}objdump${EXECUTABLE_SUFFIX}"
|
||||
CACHE INTERNAL "objdump tool"
|
||||
)
|
||||
set(CMAKE_SIZE_UTIL
|
||||
"${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}size${EXECUTABLE_SUFFIX}"
|
||||
CACHE INTERNAL "size tool"
|
||||
)
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH "${AVR_TOOLCHAIN_DIR}")
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
get_filename_component(PROJECT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
|
||||
include("${PROJECT_CMAKE_DIR}/Utilities.cmake")
|
||||
get_dependency_directory("avr-gcc" AVR_TOOLCHAIN_DIR)
|
||||
include("${PROJECT_CMAKE_DIR}/AnyAvrGcc.cmake")
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
cmake_minimum_required(VERSION 3.18)
|
||||
FILE(SIZE ${LANG_FILE} FILE_SIZE)
|
||||
get_filename_component(FILE_BASE ${LANG_FILE} NAME)
|
||||
MATH(EXPR PADDED_SIZE "((${FILE_SIZE}+4096-1) / 4096 * 4096 )")
|
||||
message(STATUS "${FILE_BASE} raw size ${FILE_SIZE} bytes (${PADDED_SIZE} b padded)")
|
||||
if(${PADDED_SIZE} GREATER ${LANG_MAX_SIZE})
|
||||
message(FATAL_ERROR "Language file ${FILE_BASE} (${PADDED_SIZE}b) exceeds maximum allowed size of ${LANG_MAX_SIZE} bytes - Aborting!")
|
||||
else()
|
||||
MATH(EXPR SIZE_PCT "( ${PADDED_SIZE} * 100) / ${LANG_MAX_SIZE} " )
|
||||
message(STATUS "Language file ${FILE_BASE} is ${PADDED_SIZE} bytes, ${SIZE_PCT}% of allowed space - OK")
|
||||
endif()
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
cmake_minimum_required(VERSION 3.18)
|
||||
FILE(SIZE ${LANG_FILE} FILE_SIZE)
|
||||
get_filename_component(FILE_BASE ${LANG_FILE} NAME)
|
||||
MATH(EXPR PADDED_SIZE "((${FILE_SIZE}+256-1) / 256 * 256 )")
|
||||
MATH(EXPR FREE_SPACE "(${LANG_MAX_SIZE}-${FILE_SIZE})")
|
||||
if(${PADDED_SIZE} GREATER ${LANG_MAX_SIZE})
|
||||
message(FATAL_ERROR "Language file ${FILE_BASE} (${PADDED_SIZE}b) exceeds maximum allowed size of ${LANG_MAX_SIZE} bytes - Aborting!")
|
||||
else()
|
||||
MATH(EXPR SIZE_PCT "( ${PADDED_SIZE} * 100) / ${LANG_MAX_SIZE} " )
|
||||
message(STATUS "Language file ${FILE_BASE} is ${PADDED_SIZE} (${FILE_SIZE}) bytes, ${SIZE_PCT}% of allowed space. Free bytes ${FREE_SPACE} - OK")
|
||||
endif()
|
||||
|
|
@ -0,0 +1,232 @@
|
|||
# * Returns a version string from Git
|
||||
#
|
||||
# These functions force a re-configure on each git commit so that you can trust the values of the
|
||||
# variables in your build system.
|
||||
#
|
||||
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
|
||||
#
|
||||
# Returns the refspec and sha hash of the current head revision
|
||||
#
|
||||
# git_describe(<var> [<additional arguments to git describe> ...])
|
||||
#
|
||||
# Returns the results of git describe on the source tree, and adjusting the output so that it tests
|
||||
# false if an error occurs.
|
||||
#
|
||||
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
|
||||
#
|
||||
# Returns the results of git describe --exact-match on the source tree, and adjusting the output so
|
||||
# that it tests false if there was no exact matching tag.
|
||||
#
|
||||
# git_local_changes(<var>)
|
||||
#
|
||||
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes. Uses the return code of
|
||||
# "git diff-index --quiet HEAD --". Does not regard untracked files.
|
||||
#
|
||||
# git_count_parent_commits(<var>)
|
||||
#
|
||||
# Returns number of commits preceeding current commit -1 if git rev-list --count HEAD failed or
|
||||
# "GIT-NOTFOUND" if git executable was not found or "HEAD-HASH-NOTFOUND" if head hash was not found.
|
||||
# I don't know if get_git_head_revision() must be called internally or not, as reason of calling it
|
||||
# is not clear for me also in git_local_changes().
|
||||
#
|
||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||
#
|
||||
# Original Author: 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||
# http://academic.cleardefinition.com Iowa State University HCI Graduate Program/VRAC
|
||||
#
|
||||
# Copyright Iowa State University 2009-2010. Distributed under the Boost Software License, Version
|
||||
# 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
if(__get_git_revision_description)
|
||||
return()
|
||||
endif()
|
||||
set(__get_git_revision_description YES)
|
||||
|
||||
# We must run the following at "include" time, not at function call time, to find the path to this
|
||||
# module rather than the path to a calling list file
|
||||
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
|
||||
|
||||
function(get_git_head_revision _refspecvar _hashvar)
|
||||
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
|
||||
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
|
||||
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
|
||||
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
|
||||
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
|
||||
# We have reached the root directory, we are not in git
|
||||
set(${_refspecvar}
|
||||
"GITDIR-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
set(${_hashvar}
|
||||
"GITDIR-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
|
||||
endwhile()
|
||||
# check if this is a submodule
|
||||
if(NOT IS_DIRECTORY ${GIT_DIR})
|
||||
file(READ ${GIT_DIR} submodule)
|
||||
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
|
||||
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
||||
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
|
||||
endif()
|
||||
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
|
||||
if(NOT EXISTS "${GIT_DATA}")
|
||||
file(MAKE_DIRECTORY "${GIT_DATA}")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${GIT_DIR}/HEAD")
|
||||
return()
|
||||
endif()
|
||||
set(HEAD_FILE "${GIT_DATA}/HEAD")
|
||||
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
|
||||
|
||||
configure_file(
|
||||
"${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" "${GIT_DATA}/grabRef.cmake" @ONLY
|
||||
)
|
||||
include("${GIT_DATA}/grabRef.cmake")
|
||||
|
||||
set(${_refspecvar}
|
||||
"${HEAD_REF}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
set(${_hashvar}
|
||||
"${HEAD_HASH}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(git_describe _var)
|
||||
if(NOT GIT_FOUND)
|
||||
find_package(Git QUIET)
|
||||
endif()
|
||||
get_git_head_revision(refspec hash)
|
||||
if(NOT GIT_FOUND)
|
||||
set(${_var}
|
||||
"GIT-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
if(NOT hash)
|
||||
set(${_var}
|
||||
"HEAD-HASH-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# TODO sanitize if((${ARGN}" MATCHES "&&") OR (ARGN MATCHES "||") OR (ARGN MATCHES "\\;"))
|
||||
# message("Please report the following error to the project!") message(FATAL_ERROR "Looks like
|
||||
# someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") endif()
|
||||
|
||||
# message(STATUS "Arguments to execute_process: ${ARGN}")
|
||||
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" describe ${hash} ${ARGN}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE res
|
||||
OUTPUT_VARIABLE out
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(NOT res EQUAL 0)
|
||||
set(out "${out}-${res}-NOTFOUND")
|
||||
endif()
|
||||
|
||||
set(${_var}
|
||||
"${out}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(git_get_exact_tag _var)
|
||||
git_describe(out --exact-match ${ARGN})
|
||||
set(${_var}
|
||||
"${out}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(git_local_changes _var)
|
||||
if(NOT GIT_FOUND)
|
||||
find_package(Git QUIET)
|
||||
endif()
|
||||
get_git_head_revision(refspec hash)
|
||||
if(NOT GIT_FOUND)
|
||||
set(${_var}
|
||||
"GIT-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
if(NOT hash)
|
||||
set(${_var}
|
||||
"HEAD-HASH-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE res
|
||||
OUTPUT_VARIABLE out
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(res EQUAL 0)
|
||||
set(${_var}
|
||||
"CLEAN"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
else()
|
||||
set(${_var}
|
||||
"DIRTY"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(git_count_parent_commits _var)
|
||||
if(NOT GIT_FOUND)
|
||||
find_package(Git QUIET)
|
||||
endif()
|
||||
get_git_head_revision(refspec hash)
|
||||
if(NOT GIT_FOUND)
|
||||
set(${_var}
|
||||
"GIT-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
if(NOT hash)
|
||||
set(${_var}
|
||||
"HEAD-HASH-NOTFOUND"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" rev-list --count HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE res
|
||||
OUTPUT_VARIABLE out
|
||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(res EQUAL 0)
|
||||
set(${_var}
|
||||
"${out}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
else()
|
||||
set(${_var}
|
||||
"-1"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#
|
||||
# Internal file for GetGitRevisionDescription.cmake
|
||||
#
|
||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||
#
|
||||
# Original Author: 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||
# http://academic.cleardefinition.com Iowa State University HCI Graduate Program/VRAC
|
||||
#
|
||||
# Copyright Iowa State University 2009-2010. Distributed under the Boost Software License, Version
|
||||
# 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
set(HEAD_HASH)
|
||||
|
||||
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
|
||||
|
||||
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
|
||||
if(HEAD_CONTENTS MATCHES "ref")
|
||||
# named branch
|
||||
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
||||
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
||||
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
||||
else()
|
||||
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
|
||||
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
|
||||
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
|
||||
set(HEAD_HASH "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
# detached HEAD
|
||||
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
||||
endif()
|
||||
|
||||
if(NOT HEAD_HASH)
|
||||
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
||||
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
||||
endif()
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
#
|
||||
# This file is responsible for setting the following variables:
|
||||
#
|
||||
# ~~~
|
||||
# BUILD_NUMBER (1035)
|
||||
# PROJECT_VERSION (4.0.3)
|
||||
# PROJECT_VERSION_FULL (4.0.3-BETA+1035.PR111.B4)
|
||||
# PROJECT_VERSION_SUFFIX (-BETA+1035.PR111.B4)
|
||||
# PROJECT_VERSION_SUFFIX_SHORT (+1035)
|
||||
#
|
||||
# The `PROJECT_VERSION` variable is set as soon as the file is included.
|
||||
# To set the rest, the function `resolve_version_variables` has to be called.
|
||||
#
|
||||
# ~~~
|
||||
|
||||
FILE(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/Configuration.h CFG_VER_DATA REGEX "#define FW_[A-Z]+ ([0-9]+)" )
|
||||
LIST(GET CFG_VER_DATA 0 PROJECT_VERSION_MAJOR)
|
||||
LIST(GET CFG_VER_DATA 1 PROJECT_VERSION_MINOR)
|
||||
LIST(GET CFG_VER_DATA 2 PROJECT_VERSION_REV)
|
||||
STRING(REGEX MATCH "FW_MAJOR ([0-9]+)" PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
|
||||
SET(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
||||
|
||||
STRING(REGEX MATCH "FW_MINOR ([0-9]+)" PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
|
||||
SET(PROJECT_VERSION_MINOR ${CMAKE_MATCH_1})
|
||||
|
||||
STRING(REGEX MATCH "FW_REVISION +([0-9]+)" PROJECT_VERSION_REV "${PROJECT_VERSION_REV}")
|
||||
SET(PROJECT_VERSION_REV ${CMAKE_MATCH_1})
|
||||
|
||||
SET(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_REV}")
|
||||
|
||||
|
||||
function(resolve_version_variables)
|
||||
# BUILD_NUMBER
|
||||
if(NOT BUILD_NUMBER)
|
||||
git_count_parent_commits(BUILD_NUMBER)
|
||||
set(ERRORS "GIT-NOTFOUND" "HEAD-HASH-NOTFOUND")
|
||||
if(BUILD_NUMBER IN_LIST ERRORS)
|
||||
message(WARNING "Failed to resolve build number: ${BUILD_NUMBER}. Setting to zero.")
|
||||
set(BUILD_NUMBER "0")
|
||||
endif()
|
||||
set(BUILD_NUMBER
|
||||
${BUILD_NUMBER}
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
# PROJECT_VERSION_SUFFIX
|
||||
if(PROJECT_VERSION_SUFFIX STREQUAL "<auto>")
|
||||
# TODO: set to +<sha>.dirty?.debug?
|
||||
set(PROJECT_VERSION_SUFFIX "+${BUILD_NUMBER}.LOCAL")
|
||||
set(PROJECT_VERSION_SUFFIX
|
||||
"+${BUILD_NUMBER}.LOCAL"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
# PROJECT_VERSION_SUFFIX_SHORT
|
||||
if(PROJECT_VERSION_SUFFIX_SHORT STREQUAL "<auto>")
|
||||
set(PROJECT_VERSION_SUFFIX_SHORT
|
||||
"+${BUILD_NUMBER}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
# PROJECT_VERSION_FULL
|
||||
set(PROJECT_VERSION_FULL
|
||||
"${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX}"
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
#
|
||||
# Functions and utilities for build reproducibility
|
||||
#
|
||||
|
||||
# Set a target to be reproducible
|
||||
function(set_reproducible_target target)
|
||||
# properties for static libraries
|
||||
set_target_properties(${target} PROPERTIES STATIC_LIBRARY_OPTIONS "-D")
|
||||
|
||||
# properties on executables
|
||||
target_link_options(${target} PRIVATE -fdebug-prefix-map=${CMAKE_SOURCE_DIR}=)
|
||||
target_link_options(${target} PRIVATE -fdebug-prefix-map=${CMAKE_BINARY_DIR}=)
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "8")
|
||||
target_compile_options(${target} PRIVATE -ffile-prefix-map=${CMAKE_SOURCE_DIR}=)
|
||||
endif()
|
||||
|
||||
# properties on sources
|
||||
get_target_property(sources ${target} SOURCES)
|
||||
get_target_property(source_dir ${target} SOURCE_DIR)
|
||||
foreach(file IN LISTS sources)
|
||||
cmake_path(ABSOLUTE_PATH file BASE_DIRECTORY ${source_dir})
|
||||
cmake_path(RELATIVE_PATH file BASE_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE rpath)
|
||||
set_property(
|
||||
SOURCE ${file}
|
||||
DIRECTORY ${source_dir}
|
||||
APPEND
|
||||
PROPERTY COMPILE_OPTIONS "-frandom-seed=${rpath}"
|
||||
)
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
# Get the list of targets for all directories
|
||||
function(get_all_targets _result _dir)
|
||||
get_property(
|
||||
_subdirs
|
||||
DIRECTORY "${_dir}"
|
||||
PROPERTY SUBDIRECTORIES
|
||||
)
|
||||
foreach(_subdir IN LISTS _subdirs)
|
||||
get_all_targets(${_result} "${_subdir}")
|
||||
endforeach()
|
||||
get_directory_property(_sub_targets DIRECTORY "${_dir}" BUILDSYSTEM_TARGETS)
|
||||
set(${_result}
|
||||
${${_result}} ${_sub_targets}
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
# Make every target reproducible
|
||||
function(set_all_targets_reproducible)
|
||||
get_all_targets(targets ${CMAKE_SOURCE_DIR})
|
||||
foreach(target IN LISTS targets)
|
||||
set_reproducible_target(${target})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
# Set source epoch
|
||||
function(set_source_epoch epoch)
|
||||
set(ENV{SOURCE_DATE_EPOCH} ${epoch})
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8")
|
||||
string(TIMESTAMP SOURCE_DATE_EPOCH "%Y-%m-%d")
|
||||
add_compile_definitions(SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH}")
|
||||
string(TIMESTAMP SOURCE_TIME_EPOCH "%H:%M:%S")
|
||||
add_compile_definitions(SOURCE_TIME_EPOCH="${SOURCE_TIME_EPOCH}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
get_filename_component(PROJECT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
|
||||
get_filename_component(PROJECT_ROOT_DIR "${PROJECT_CMAKE_DIR}" DIRECTORY)
|
||||
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
if(NOT Python3_FOUND)
|
||||
message(FATAL_ERROR "Python3 not found.")
|
||||
endif()
|
||||
|
||||
function(get_recommended_gcc_version var)
|
||||
execute_process(
|
||||
COMMAND "${Python3_EXECUTABLE}" "${PROJECT_ROOT_DIR}/utils/bootstrap.py"
|
||||
"--print-dependency-version" "avr-gcc"
|
||||
OUTPUT_VARIABLE RECOMMENDED_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE RETVAL
|
||||
)
|
||||
|
||||
if(NOT "${RETVAL}" STREQUAL "0")
|
||||
message(FATAL_ERROR "Failed to obtain recommended gcc version from utils/bootstrap.py")
|
||||
endif()
|
||||
|
||||
set(${var}
|
||||
${RECOMMENDED_VERSION}
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(get_dependency_directory dependency var)
|
||||
execute_process(
|
||||
COMMAND "${Python3_EXECUTABLE}" "${PROJECT_ROOT_DIR}/utils/bootstrap.py"
|
||||
"--print-dependency-directory" "${dependency}"
|
||||
OUTPUT_VARIABLE DEPENDENCY_DIRECTORY
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE RETVAL
|
||||
)
|
||||
|
||||
if(NOT "${RETVAL}" STREQUAL "0")
|
||||
message(FATAL_ERROR "Failed to find directory with ${dependency}")
|
||||
endif()
|
||||
|
||||
file(TO_CMAKE_PATH "${DEPENDENCY_DIRECTORY}" DEPENDENCY_DIRECTORY)
|
||||
set(${var}
|
||||
${DEPENDENCY_DIRECTORY}
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(objcopy target format suffix)
|
||||
add_custom_command(
|
||||
TARGET ${target} POST_BUILD
|
||||
COMMAND "${CMAKE_OBJCOPY}" -O ${format} -S "$<TARGET_FILE:${target}>"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${target}${suffix}"
|
||||
COMMENT "Generating ${format} from ${target}..."
|
||||
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${target}${suffix}"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(report_size target)
|
||||
add_custom_command(
|
||||
TARGET ${target} POST_BUILD
|
||||
COMMAND echo "" # visually separate the output
|
||||
COMMAND "${CMAKE_SIZE_UTIL}" -B "$<TARGET_FILE:${target}>"
|
||||
USES_TERMINAL
|
||||
)
|
||||
endfunction()
|
||||
|
|
@ -211,7 +211,7 @@ def check_translation(entry, msgids, is_pot, no_warning, no_suggest, warn_empty,
|
|||
return (errors == 0)
|
||||
|
||||
# Missing translation
|
||||
if len(translation) == 0 and (known_msgid or warn_empty):
|
||||
if len(translation) == 0 and (warn_empty or (not no_warning and known_msgid)):
|
||||
errors += 1
|
||||
if rows == 1:
|
||||
print(yellow("[W]: Empty translation for \"%s\" on line %d" % (source, line)))
|
||||
|
|
@ -307,6 +307,9 @@ def main():
|
|||
parser.add_argument(
|
||||
"--no-suggest", action="store_true",
|
||||
help="Disable suggestions")
|
||||
parser.add_argument(
|
||||
"--errors-only", action="store_true",
|
||||
help="Only check errors")
|
||||
parser.add_argument(
|
||||
"--pot", action="store_true",
|
||||
help="Do not check translations")
|
||||
|
|
@ -331,6 +334,10 @@ def main():
|
|||
print("{}: file does not exist or is not a regular file".format(args.po), file=stderr)
|
||||
return 1
|
||||
|
||||
if args.errors_only:
|
||||
args.no_warning = True
|
||||
args.no_suggest = True
|
||||
|
||||
# load the symbol map to supress empty (but unused) translation warnings
|
||||
msgids = None
|
||||
if args.map:
|
||||
|
|
|
|||
|
|
@ -434,7 +434,7 @@ msgid ""
|
|||
"heatbed?"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1176,12 +1176,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1713,7 +1707,7 @@ msgstr ""
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -1969,7 +1963,7 @@ msgstr ""
|
|||
msgid "Steel sheets"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2140,7 +2134,7 @@ msgid ""
|
|||
" is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -455,7 +455,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Chcete opakovat posledni krok a pozmenit vzdalenost mezi tryskou a podlozkou?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1210,12 +1210,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1761,7 +1755,7 @@ msgstr "Obnoveni tisku"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2025,7 +2019,7 @@ msgstr "Tichy"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Tiskove platy"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2200,7 +2194,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -442,7 +442,7 @@ msgid ""
|
|||
"heatbed?"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1185,12 +1185,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1722,7 +1716,7 @@ msgstr ""
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -1978,7 +1972,7 @@ msgstr ""
|
|||
msgid "Steel sheets"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2149,7 +2143,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ msgstr ""
|
|||
"Möchten Sie den letzten Schritt wiederholen, um den Abstand zwischen Düse "
|
||||
"und Druckbett neu einzustellen?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr "Klar"
|
||||
|
|
@ -1240,12 +1240,6 @@ msgstr "Modell"
|
|||
msgid "More details online."
|
||||
msgstr "Weiter Details online."
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr "Mehr⏬"
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1801,7 +1795,7 @@ msgstr "Druck fortgesetzt"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr "Einziehen von FINDA"
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr "Wdh."
|
||||
|
|
@ -2067,7 +2061,7 @@ msgstr "Leise"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Stahlbleche"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr "Stop"
|
||||
|
|
@ -2252,7 +2246,7 @@ msgstr ""
|
|||
"Unerwarteter FINDA-Wert. Stellen Sie sicher, dass sich kein Filament unter "
|
||||
"FINDA befindet und der Selektor frei ist. Prüfen Sie die FINDA-Verbindung."
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr "Entla."
|
||||
|
|
|
|||
|
|
@ -455,7 +455,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Quieres repetir el ultimo paso para reajustar la distancia boquilla-base?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1212,12 +1212,6 @@ msgstr "Modelo"
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1773,7 +1767,7 @@ msgstr "Continuan. impresion"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2044,7 +2038,7 @@ msgstr "Sigilo"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Lamina de acero"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2220,7 +2214,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -458,7 +458,7 @@ msgstr ""
|
|||
"Voulez-vous refaire l'etape pour reajuster la hauteur entre la buse et le "
|
||||
"plateau chauffant?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1219,12 +1219,6 @@ msgstr "Modele"
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1776,7 +1770,7 @@ msgstr "Reprise de l'impr."
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2045,7 +2039,7 @@ msgstr "Furtif"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Plaques en acier"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2221,7 +2215,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -453,7 +453,7 @@ msgstr ""
|
|||
"Zelite li ponoviti zadnji korak za ponovno podesavanje udaljenosti izmedu "
|
||||
"mlaznice i grijace podloge?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1210,12 +1210,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1762,7 +1756,7 @@ msgstr "Nastavak printa"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2032,7 +2026,7 @@ msgstr "Tiho"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Celicna ploca"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2207,7 +2201,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ msgstr ""
|
|||
"Meg szeretned ismetelni az utolso lepest, hogy finomhangold a fuvoka es az "
|
||||
"asztal kozotti tavolsagot?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1214,12 +1214,6 @@ msgstr "Modell"
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1769,7 +1763,7 @@ msgstr "Nyomtatas folytatasa"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2036,7 +2030,7 @@ msgstr "Halk"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Acellapok"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2212,7 +2206,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -442,7 +442,7 @@ msgid ""
|
|||
"heatbed?"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1185,12 +1185,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1722,7 +1716,7 @@ msgstr ""
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -1978,7 +1972,7 @@ msgstr ""
|
|||
msgid "Steel sheets"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2149,7 +2143,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -442,7 +442,7 @@ msgid ""
|
|||
"heatbed?"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1185,12 +1185,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1722,7 +1716,7 @@ msgstr ""
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -1978,7 +1972,7 @@ msgstr ""
|
|||
msgid "Steel sheets"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2149,7 +2143,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ msgstr ""
|
|||
"Wilt u de laatste stap herhalen om de afstand tussen de tuit en de bed "
|
||||
"opnieuw in te stellen?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr "Klaar"
|
||||
|
|
@ -1232,12 +1232,6 @@ msgstr "Model"
|
|||
msgid "More details online."
|
||||
msgstr "Meer details online."
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr "Meer⏬"
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1790,7 +1784,7 @@ msgstr "Hervatten print"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr "Intrekken van FINDA"
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr "Retry"
|
||||
|
|
@ -2062,7 +2056,7 @@ msgstr "Stil"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Staalplaten"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr "Stop"
|
||||
|
|
@ -2244,7 +2238,7 @@ msgstr ""
|
|||
"Onverwachte FINDA-aflezing. Zorg ervoor dat er geen filament onder FINDA zit"
|
||||
" en dat de selecteur vrij is. Controleer de FINDA-verbinding."
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr "Ontla."
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ msgstr ""
|
|||
"Vil du repetere det siste trinnet for å omjustere avstanden mellom dysen og "
|
||||
"platen?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1207,12 +1207,6 @@ msgstr "Modell"
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1755,7 +1749,7 @@ msgstr "Gjenopptar print"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2018,7 +2012,7 @@ msgstr "Stille"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Stål plate"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2194,7 +2188,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ msgstr ""
|
|||
"Chcesz powtorzyc ostatni krok i ponownie ustawic odleglosc miedzy dysza a "
|
||||
"stolikiem?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1211,12 +1211,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1762,7 +1756,7 @@ msgstr "Wznawianie druku"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2031,7 +2025,7 @@ msgstr "Cichy"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Plyty stalowe"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2207,7 +2201,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -457,7 +457,7 @@ msgstr ""
|
|||
"Vreti sa repetati ultimul pas pentru a reajusta distanta dintre varf si "
|
||||
"suprafata de print?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr "Gata"
|
||||
|
|
@ -1227,12 +1227,6 @@ msgstr "Model"
|
|||
msgid "More details online."
|
||||
msgstr "Mai multe detalii online"
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr "More⏬"
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1781,7 +1775,7 @@ msgstr "Reluare print..."
|
|||
msgid "Retract from FINDA"
|
||||
msgstr "Retract de la FINDA"
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr "Retry"
|
||||
|
|
@ -2050,7 +2044,7 @@ msgstr "Silent."
|
|||
msgid "Steel sheets"
|
||||
msgstr "Suprafete print"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr "Stop"
|
||||
|
|
@ -2230,7 +2224,7 @@ msgstr ""
|
|||
"Citire FINDA neasteptata.Asig. ca nu este Fil. sub FINDA si SELECTOR"
|
||||
"Verifica conexiune FINDA"
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr "Unload"
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -442,7 +442,7 @@ msgid ""
|
|||
"heatbed?"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1185,12 +1185,6 @@ msgstr ""
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1722,7 +1716,7 @@ msgstr ""
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -1978,7 +1972,7 @@ msgstr ""
|
|||
msgid "Steel sheets"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2149,7 +2143,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ msgstr ""
|
|||
"Vill du upprepa det sista steget för att justera avståndet mellan munstycket "
|
||||
"och värmebädden?"
|
||||
|
||||
#. MSG_BTN_CONTINUE c=5
|
||||
#. MSG_BTN_CONTINUE c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:282 ../../Firmware/mmu2/errors_list.h:292
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
|
@ -1214,12 +1214,6 @@ msgstr "Modell"
|
|||
msgid "More details online."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_MORE c=5
|
||||
#: ../../Firmware/mmu2/errors_list.h:287
|
||||
#: ../../Firmware/mmu2_error_converter.cpp:153
|
||||
msgid "More⏬"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_SELFTEST_MOTOR c=18
|
||||
#: ../../Firmware/messages.cpp:95 ../../Firmware/ultralcd.cpp:6981
|
||||
#: ../../Firmware/ultralcd.cpp:6990 ../../Firmware/ultralcd.cpp:7008
|
||||
|
|
@ -1770,7 +1764,7 @@ msgstr "Återupptar utskrift"
|
|||
msgid "Retract from FINDA"
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_RETRY c=5
|
||||
#. MSG_BTN_RETRY c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:281 ../../Firmware/mmu2/errors_list.h:291
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
|
@ -2036,7 +2030,7 @@ msgstr "Tyst"
|
|||
msgid "Steel sheets"
|
||||
msgstr "Metallskivor"
|
||||
|
||||
#. MSG_BTN_STOP c=5
|
||||
#. MSG_BTN_STOP c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:285 ../../Firmware/mmu2/errors_list.h:295
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
|
@ -2211,7 +2205,7 @@ msgid ""
|
|||
"is free. Check FINDA connection."
|
||||
msgstr ""
|
||||
|
||||
#. MSG_BTN_UNLOAD c=6
|
||||
#. MSG_BTN_UNLOAD c=8
|
||||
#: ../../Firmware/mmu2/errors_list.h:284 ../../Firmware/mmu2/errors_list.h:294
|
||||
msgid "Unload"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
if(NOT CMAKE_CROSSCOMPILING)
|
||||
add_subdirectory(Catch2)
|
||||
endif()
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
AccessModifierOffset: '-4'
|
||||
AlignEscapedNewlines: Left
|
||||
AllowAllConstructorInitializersOnNextLine: 'true'
|
||||
BinPackArguments: 'false'
|
||||
BinPackParameters: 'false'
|
||||
BreakConstructorInitializers: AfterColon
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: 'true'
|
||||
DerivePointerAlignment: 'false'
|
||||
FixNamespaceComments: 'true'
|
||||
IncludeBlocks: Regroup
|
||||
IndentCaseLabels: 'false'
|
||||
IndentPPDirectives: AfterHash
|
||||
IndentWidth: '4'
|
||||
Language: Cpp
|
||||
NamespaceIndentation: All
|
||||
PointerAlignment: Left
|
||||
SpaceBeforeCtorInitializerColon: 'false'
|
||||
SpaceInEmptyParentheses: 'false'
|
||||
SpacesInParentheses: 'true'
|
||||
Standard: Cpp11
|
||||
TabWidth: '4'
|
||||
UseTab: Never
|
||||
|
||||
...
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import re
|
||||
from cpt.packager import ConanMultiPackager
|
||||
from cpt.ci_manager import CIManager
|
||||
from cpt.printer import Printer
|
||||
|
||||
|
||||
class BuilderSettings(object):
|
||||
@property
|
||||
def username(self):
|
||||
""" Set catchorg as package's owner
|
||||
"""
|
||||
return os.getenv("CONAN_USERNAME", "catchorg")
|
||||
|
||||
@property
|
||||
def login_username(self):
|
||||
""" Set Bintray login username
|
||||
"""
|
||||
return os.getenv("CONAN_LOGIN_USERNAME", "horenmar")
|
||||
|
||||
@property
|
||||
def upload(self):
|
||||
""" Set Catch2 repository to be used on upload.
|
||||
The upload server address could be customized by env var
|
||||
CONAN_UPLOAD. If not defined, the method will check the branch name.
|
||||
Only master or CONAN_STABLE_BRANCH_PATTERN will be accepted.
|
||||
The master branch will be pushed to testing channel, because it does
|
||||
not match the stable pattern. Otherwise it will upload to stable
|
||||
channel.
|
||||
"""
|
||||
return os.getenv("CONAN_UPLOAD", "https://api.bintray.com/conan/catchorg/catch2")
|
||||
|
||||
@property
|
||||
def upload_only_when_stable(self):
|
||||
""" Force to upload when running over tag branch
|
||||
"""
|
||||
return os.getenv("CONAN_UPLOAD_ONLY_WHEN_STABLE", "True").lower() in ["true", "1", "yes"]
|
||||
|
||||
@property
|
||||
def stable_branch_pattern(self):
|
||||
""" Only upload the package the branch name is like a tag
|
||||
"""
|
||||
return os.getenv("CONAN_STABLE_BRANCH_PATTERN", r"v\d+\.\d+\.\d+")
|
||||
|
||||
@property
|
||||
def reference(self):
|
||||
""" Read project version from branch create Conan reference
|
||||
"""
|
||||
return os.getenv("CONAN_REFERENCE", "Catch2/{}".format(self._version))
|
||||
|
||||
@property
|
||||
def channel(self):
|
||||
""" Default Conan package channel when not stable
|
||||
"""
|
||||
return os.getenv("CONAN_CHANNEL", "testing")
|
||||
|
||||
@property
|
||||
def _version(self):
|
||||
""" Get version name from cmake file
|
||||
"""
|
||||
pattern = re.compile(r"project\(Catch2 LANGUAGES CXX VERSION (\d+\.\d+\.\d+)\)")
|
||||
version = "latest"
|
||||
with open("CMakeLists.txt") as file:
|
||||
for line in file:
|
||||
result = pattern.search(line)
|
||||
if result:
|
||||
version = result.group(1)
|
||||
return version
|
||||
|
||||
@property
|
||||
def _branch(self):
|
||||
""" Get branch name from CI manager
|
||||
"""
|
||||
printer = Printer(None)
|
||||
ci_manager = CIManager(printer)
|
||||
return ci_manager.get_branch()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
settings = BuilderSettings()
|
||||
builder = ConanMultiPackager(
|
||||
reference=settings.reference,
|
||||
channel=settings.channel,
|
||||
upload=settings.upload,
|
||||
upload_only_when_stable=settings.upload_only_when_stable,
|
||||
stable_branch_pattern=settings.stable_branch_pattern,
|
||||
login_username=settings.login_username,
|
||||
username=settings.username,
|
||||
test_folder=os.path.join(".conan", "test_package"))
|
||||
builder.add()
|
||||
builder.run()
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
cmake_minimum_required(VERSION 3.2.0)
|
||||
project(test_package CXX)
|
||||
|
||||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
conan_basic_setup(TARGETS)
|
||||
|
||||
find_package(Catch2 REQUIRED CONFIG)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.cpp)
|
||||
target_link_libraries(${PROJECT_NAME} CONAN_PKG::Catch2)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 11)
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from conans import ConanFile, CMake
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
generators = "cmake"
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
assert os.path.isfile(os.path.join(self.deps_cpp_info["Catch2"].rootpath, "licenses", "LICENSE.txt"))
|
||||
bin_path = os.path.join("bin", "test_package")
|
||||
self.run("%s -s" % bin_path, run_environment=True)
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#define CATCH_CONFIG_MAIN
|
||||
|
||||
#include <catch2/catch.hpp>
|
||||
|
||||
int Factorial( int number ) {
|
||||
return number <= 1 ? 1 : Factorial( number - 1 ) * number;
|
||||
}
|
||||
|
||||
TEST_CASE( "Factorial Tests", "[single-file]" ) {
|
||||
REQUIRE( Factorial(0) == 1 );
|
||||
REQUIRE( Factorial(1) == 1 );
|
||||
REQUIRE( Factorial(2) == 2 );
|
||||
REQUIRE( Factorial(3) == 6 );
|
||||
REQUIRE( Factorial(10) == 3628800 );
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# This sets the default behaviour, overriding core.autocrlf
|
||||
* text=auto
|
||||
|
||||
# All source files should have unix line-endings in the repository,
|
||||
# but convert to native line-endings on checkout
|
||||
*.cpp text
|
||||
*.h text
|
||||
*.hpp text
|
||||
|
||||
# Windows specific files should retain windows line-endings
|
||||
*.sln text eol=crlf
|
||||
|
||||
# Keep executable scripts with LFs so they can be run after being
|
||||
# checked out on Windows
|
||||
*.py text eol=lf
|
||||
|
||||
|
||||
# Keep the single include header with LFs to make sure it is uploaded,
|
||||
# hashed etc with LF
|
||||
single_include/**/*.hpp eol=lf
|
||||
# Also keep the LICENCE file with LFs for the same reason
|
||||
LICENCE.txt eol=lf
|
||||
|
|
@ -0,0 +1 @@
|
|||
custom: "https://www.paypal.me/horenmar"
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create an issue that documents a bug
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Reproduction steps**
|
||||
Steps to reproduce the bug.
|
||||
<!-- Usually this means a small and self-contained piece of code that uses Catch and specifying compiler flags if relevant. -->
|
||||
|
||||
|
||||
**Platform information:**
|
||||
<!-- Fill in any extra information that might be important for your issue. -->
|
||||
- OS: **Windows NT**
|
||||
- Compiler+version: **GCC v2.9.5**
|
||||
- Catch version: **v1.2.3**
|
||||
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Create an issue that requests a feature or other improvement
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Description**
|
||||
Describe the feature/change you request and why do you want it.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
Please do not submit pull requests changing the `version.hpp`
|
||||
or the single-include `catch.hpp` file, these are changed
|
||||
only when a new release is made.
|
||||
|
||||
Before submitting a PR you should probably read the contributor documentation
|
||||
at docs/contributing.md. It will tell you how to properly test your changes.
|
||||
-->
|
||||
|
||||
|
||||
## Description
|
||||
<!--
|
||||
Describe the what and the why of your pull request. Remember that these two
|
||||
are usually a bit different. As an example, if you have made various changes
|
||||
to decrease the number of new strings allocated, that's what. The why probably
|
||||
was that you have a large set of tests and found that this speeds them up.
|
||||
-->
|
||||
|
||||
## GitHub Issues
|
||||
<!--
|
||||
If this PR was motivated by some existing issues, reference them here.
|
||||
|
||||
If it is a simple bug-fix, please also add a line like 'Closes #123'
|
||||
to your commit message, so that it is automatically closed.
|
||||
If it is not, don't, as it might take several iterations for a feature
|
||||
to be done properly. If in doubt, leave it open and reference it in the
|
||||
PR itself, so that maintainers can decide.
|
||||
-->
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
*.build
|
||||
*.pbxuser
|
||||
*.mode1v3
|
||||
*.ncb
|
||||
*.suo
|
||||
Debug
|
||||
Release
|
||||
*.user
|
||||
*.xcuserstate
|
||||
.DS_Store
|
||||
xcuserdata
|
||||
CatchSelfTest.xcscheme
|
||||
Breakpoints.xcbkptlist
|
||||
projects/VS2010/TestCatch/_UpgradeReport_Files/
|
||||
projects/VS2010/TestCatch/TestCatch/TestCatch.vcxproj.filters
|
||||
projects/VisualStudio/TestCatch/UpgradeLog.XML
|
||||
projects/CMake/.idea
|
||||
projects/CMake/cmake-build-debug
|
||||
UpgradeLog.XML
|
||||
Resources/DWARF
|
||||
projects/Generated
|
||||
*.pyc
|
||||
DerivedData
|
||||
*.xccheckout
|
||||
Build
|
||||
.idea
|
||||
.vs
|
||||
cmake-build-*
|
||||
benchmark-dir
|
||||
.conan/test_package/build
|
||||
bazel-*
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
; DO NOT EDIT (unless you know what you are doing)
|
||||
;
|
||||
; This subdirectory is a git "subrepo", and this file is maintained by the
|
||||
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
|
||||
;
|
||||
[subrepo]
|
||||
remote = git@github.com:catchorg/Catch2.git
|
||||
branch = v2.x
|
||||
commit = 5c88067bd339465513af4aec606bd2292f1b594a
|
||||
parent = c58a5298d683f9b137f23a929eac699cd776f66c
|
||||
method = merge
|
||||
cmdver = 0.4.3
|
||||
|
|
@ -0,0 +1,339 @@
|
|||
language: cpp
|
||||
|
||||
branches:
|
||||
except:
|
||||
- /dev-appveyor.*/
|
||||
|
||||
common_sources: &all_sources
|
||||
- ubuntu-toolchain-r-test
|
||||
- llvm-toolchain-trusty
|
||||
- llvm-toolchain-trusty-3.9
|
||||
- llvm-toolchain-trusty-4.0
|
||||
- llvm-toolchain-xenial-5.0
|
||||
- llvm-toolchain-xenial-6.0
|
||||
|
||||
matrix:
|
||||
include:
|
||||
|
||||
# 1/ Linux Clang Builds
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-3.5']
|
||||
env: COMPILER='clang++-3.5'
|
||||
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-3.6']
|
||||
env: COMPILER='clang++-3.6'
|
||||
|
||||
# Clang 3.7 is intentionally skipped as we cannot get it easily on
|
||||
# TravisCI container
|
||||
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['lcov', 'clang-3.8']
|
||||
env: COMPILER='clang++-3.8'
|
||||
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-3.9']
|
||||
env: COMPILER='clang++-3.9'
|
||||
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-4.0']
|
||||
env: COMPILER='clang++-4.0'
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-5.0']
|
||||
env: COMPILER='clang++-5.0'
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-6.0']
|
||||
env: COMPILER='clang++-6.0'
|
||||
|
||||
# 2/ Linux GCC Builds
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['g++-4.8']
|
||||
env: COMPILER='g++-4.8'
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['g++-4.9']
|
||||
env: COMPILER='g++-4.9'
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['g++-5']
|
||||
env: COMPILER='g++-5'
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: &gcc6
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['g++-6']
|
||||
env: COMPILER='g++-6'
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: &gcc7
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['g++-7']
|
||||
env: COMPILER='g++-7'
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: &gcc8
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['g++-8']
|
||||
env: COMPILER='g++-8'
|
||||
|
||||
# 3b/ Linux C++14 Clang builds
|
||||
# Note that we need newer libstdc++ for C++14 support
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
packages: ['clang-3.8', 'libstdc++-6-dev']
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- llvm-toolchain-trusty
|
||||
env: COMPILER='clang++-3.8' CPP14=1
|
||||
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-3.9', 'libstdc++-6-dev']
|
||||
env: COMPILER='clang++-3.9' CPP14=1
|
||||
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-4.0', 'libstdc++-6-dev']
|
||||
env: COMPILER='clang++-4.0' CPP14=1
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-5.0', 'libstdc++-6-dev']
|
||||
env: COMPILER='clang++-5.0' CPP14=1
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-6.0', 'libstdc++-6-dev']
|
||||
env: COMPILER='clang++-6.0' CPP14=1
|
||||
|
||||
|
||||
# 4a/ Linux C++14 GCC builds
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: *gcc6
|
||||
env: COMPILER='g++-6' CPP14=1
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: *gcc7
|
||||
env: COMPILER='g++-7' CPP14=1
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: *gcc8
|
||||
env: COMPILER='g++-8' CPP14=1
|
||||
|
||||
# 5/ OSX Clang Builds
|
||||
- os: osx
|
||||
osx_image: xcode7.3
|
||||
compiler: clang
|
||||
env: COMPILER='clang++'
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode8
|
||||
compiler: clang
|
||||
env: COMPILER='clang++'
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9
|
||||
compiler: clang
|
||||
env: COMPILER='clang++'
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9.1
|
||||
compiler: clang
|
||||
env: COMPILER='clang++'
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9.1
|
||||
compiler: clang
|
||||
env: COMPILER='clang++' CPP14=1
|
||||
|
||||
# 6/ Special builds -- examples, coverage, valgrind, etc.
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['lcov', 'g++-7']
|
||||
env: COMPILER='g++-7' CPP14=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1
|
||||
|
||||
- os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
packages: ['clang-3.8', 'lcov']
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- llvm-toolchain-trusty
|
||||
env: COMPILER='clang++-3.8' EXAMPLES=1 COVERAGE=1 EXTRAS=1
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['valgrind', 'lcov', 'g++-7']
|
||||
env: COMPILER='g++-7' CPP14=1 VALGRIND=1
|
||||
|
||||
- os: osx
|
||||
osx_image: xcode9.1
|
||||
compiler: clang
|
||||
env: COMPILER='clang++' CPP14=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1
|
||||
|
||||
# 7/ C++17 builds
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: *gcc7
|
||||
env: COMPILER='g++-7' CPP17=1
|
||||
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
addons: *gcc7
|
||||
env: COMPILER='g++-7' EXAMPLES=1 COVERAGE=1 EXTRAS=1 CPP17=1
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-6.0', 'libstdc++-8-dev']
|
||||
env: COMPILER='clang++-6.0' CPP17=1
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources: *all_sources
|
||||
packages: ['clang-6.0', 'libstdc++-8-dev']
|
||||
env: COMPILER='clang++-6.0' CPP17=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1
|
||||
|
||||
# 8/ Conan
|
||||
- language: python
|
||||
python:
|
||||
- "3.7"
|
||||
dist: xenial
|
||||
install:
|
||||
- pip install conan-package-tools
|
||||
env:
|
||||
- CONAN_GCC_VERSIONS=8
|
||||
- CONAN_DOCKER_IMAGE=conanio/gcc8
|
||||
script:
|
||||
- python .conan/build.py
|
||||
|
||||
install:
|
||||
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
|
||||
- mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
|
||||
- |
|
||||
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
||||
CMAKE_URL="http://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gz"
|
||||
mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake
|
||||
export PATH=${DEPS_DIR}/cmake/bin:${PATH}
|
||||
elif [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
|
||||
which cmake || brew install cmake;
|
||||
fi
|
||||
|
||||
before_script:
|
||||
- export CXX=${COMPILER}
|
||||
- cd ${TRAVIS_BUILD_DIR}
|
||||
# Regenerate single header file, so it is tested in the examples...
|
||||
- python scripts/generateSingleHeader.py
|
||||
|
||||
- |
|
||||
if [[ ${CPP17} -eq 1 ]]; then
|
||||
export CPP_STANDARD=17
|
||||
elif [[ ${CPP14} -eq 1 ]]; then
|
||||
export CPP_STANDARD=14
|
||||
else
|
||||
export CPP_STANDARD=11
|
||||
fi
|
||||
|
||||
# Use Debug builds for running Valgrind and building examples
|
||||
- cmake -H. -BBuild-Debug -DCMAKE_BUILD_TYPE=Debug -Wdev -DCATCH_USE_VALGRIND=${VALGRIND} -DCATCH_BUILD_EXAMPLES=${EXAMPLES} -DCATCH_ENABLE_COVERAGE=${COVERAGE} -DCATCH_BUILD_EXTRA_TESTS=${EXTRAS} -DCMAKE_CXX_STANDARD=${CPP_STANDARD} -DCMAKE_CXX_STANDARD_REQUIRED=On -DCMAKE_CXX_EXTENSIONS=OFF
|
||||
# Don't bother with release build for coverage build
|
||||
- cmake -H. -BBuild-Release -DCMAKE_BUILD_TYPE=Release -Wdev -DCMAKE_CXX_STANDARD=${CPP_STANDARD} -DCMAKE_CXX_STANDARD_REQUIRED=On -DCMAKE_CXX_EXTENSIONS=OFF
|
||||
|
||||
|
||||
script:
|
||||
- cd Build-Debug
|
||||
- make -j 2
|
||||
- CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
|
||||
# Coverage collection does not work for OS X atm
|
||||
- |
|
||||
if [[ "${TRAVIS_OS_NAME}" == "linux" ]] && [[ "${COVERAGE}" == "1" ]]; then
|
||||
make gcov
|
||||
make lcov
|
||||
bash <(curl -s https://codecov.io/bash) -X gcov || echo "Codecov did not collect coverage reports"
|
||||
fi
|
||||
- # Go to release build
|
||||
- cd ../Build-Release
|
||||
- make -j 2
|
||||
- CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# Load the cc_library rule.
|
||||
load("@rules_cc//cc:defs.bzl", "cc_library")
|
||||
|
||||
# Header-only rule to export catch2/catch.hpp.
|
||||
cc_library(
|
||||
name = "catch2",
|
||||
hdrs = ["single_include/catch2/catch.hpp"],
|
||||
includes = ["single_include/"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "catch2_with_main",
|
||||
srcs = ["src/catch_with_main.cpp"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = ["//:catch2"],
|
||||
)
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
@PACKAGE_INIT@
|
||||
|
||||
|
||||
# Avoid repeatedly including the targets
|
||||
if(NOT TARGET Catch2::Catch2)
|
||||
# Provide path for scripts
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/Catch2Targets.cmake)
|
||||
endif()
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
# This file is part of CMake-codecov.
|
||||
#
|
||||
# Copyright (c)
|
||||
# 2015-2017 RWTH Aachen University, Federal Republic of Germany
|
||||
#
|
||||
# See the LICENSE file in the package base directory for details
|
||||
#
|
||||
# Written by Alexander Haase, alexander.haase@rwth-aachen.de
|
||||
#
|
||||
|
||||
|
||||
# include required Modules
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
|
||||
# Search for gcov binary.
|
||||
set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
|
||||
set(CMAKE_REQUIRED_QUIET ${codecov_FIND_QUIETLY})
|
||||
|
||||
get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
foreach (LANG ${ENABLED_LANGUAGES})
|
||||
# Gcov evaluation is dependent on the used compiler. Check gcov support for
|
||||
# each compiler that is used. If gcov binary was already found for this
|
||||
# compiler, do not try to find it again.
|
||||
if (NOT GCOV_${CMAKE_${LANG}_COMPILER_ID}_BIN)
|
||||
get_filename_component(COMPILER_PATH "${CMAKE_${LANG}_COMPILER}" PATH)
|
||||
|
||||
if ("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "GNU")
|
||||
# Some distributions like OSX (homebrew) ship gcov with the compiler
|
||||
# version appended as gcov-x. To find this binary we'll build the
|
||||
# suggested binary name with the compiler version.
|
||||
string(REGEX MATCH "^[0-9]+" GCC_VERSION
|
||||
"${CMAKE_${LANG}_COMPILER_VERSION}")
|
||||
|
||||
find_program(GCOV_BIN NAMES gcov-${GCC_VERSION} gcov
|
||||
HINTS ${COMPILER_PATH})
|
||||
|
||||
elseif ("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "Clang")
|
||||
# Some distributions like Debian ship llvm-cov with the compiler
|
||||
# version appended as llvm-cov-x.y. To find this binary we'll build
|
||||
# the suggested binary name with the compiler version.
|
||||
string(REGEX MATCH "^[0-9]+.[0-9]+" LLVM_VERSION
|
||||
"${CMAKE_${LANG}_COMPILER_VERSION}")
|
||||
|
||||
# llvm-cov prior version 3.5 seems to be not working with coverage
|
||||
# evaluation tools, but these versions are compatible with the gcc
|
||||
# gcov tool.
|
||||
if(LLVM_VERSION VERSION_GREATER 3.4)
|
||||
find_program(LLVM_COV_BIN NAMES "llvm-cov-${LLVM_VERSION}"
|
||||
"llvm-cov" HINTS ${COMPILER_PATH})
|
||||
mark_as_advanced(LLVM_COV_BIN)
|
||||
|
||||
if (LLVM_COV_BIN)
|
||||
find_program(LLVM_COV_WRAPPER "llvm-cov-wrapper" PATHS
|
||||
${CMAKE_MODULE_PATH})
|
||||
if (LLVM_COV_WRAPPER)
|
||||
set(GCOV_BIN "${LLVM_COV_WRAPPER}" CACHE FILEPATH "")
|
||||
|
||||
# set additional parameters
|
||||
set(GCOV_${CMAKE_${LANG}_COMPILER_ID}_ENV
|
||||
"LLVM_COV_BIN=${LLVM_COV_BIN}" CACHE STRING
|
||||
"Environment variables for llvm-cov-wrapper.")
|
||||
mark_as_advanced(GCOV_${CMAKE_${LANG}_COMPILER_ID}_ENV)
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (NOT GCOV_BIN)
|
||||
# Fall back to gcov binary if llvm-cov was not found or is
|
||||
# incompatible. This is the default on OSX, but may crash on
|
||||
# recent Linux versions.
|
||||
find_program(GCOV_BIN gcov HINTS ${COMPILER_PATH})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
|
||||
if (GCOV_BIN)
|
||||
set(GCOV_${CMAKE_${LANG}_COMPILER_ID}_BIN "${GCOV_BIN}" CACHE STRING
|
||||
"${LANG} gcov binary.")
|
||||
|
||||
if (NOT CMAKE_REQUIRED_QUIET)
|
||||
message("-- Found gcov evaluation for "
|
||||
"${CMAKE_${LANG}_COMPILER_ID}: ${GCOV_BIN}")
|
||||
endif()
|
||||
|
||||
unset(GCOV_BIN CACHE)
|
||||
endif ()
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
|
||||
|
||||
|
||||
# Add a new global target for all gcov targets. This target could be used to
|
||||
# generate the gcov files for the whole project instead of calling <TARGET>-gcov
|
||||
# for each target.
|
||||
if (NOT TARGET gcov)
|
||||
add_custom_target(gcov)
|
||||
endif (NOT TARGET gcov)
|
||||
|
||||
|
||||
|
||||
# This function will add gcov evaluation for target <TNAME>. Only sources of
|
||||
# this target will be evaluated and no dependencies will be added. It will call
|
||||
# Gcov on any source file of <TNAME> once and store the gcov file in the same
|
||||
# directory.
|
||||
function (add_gcov_target TNAME)
|
||||
set(TDIR ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TNAME}.dir)
|
||||
|
||||
# We don't have to check, if the target has support for coverage, thus this
|
||||
# will be checked by add_coverage_target in Findcoverage.cmake. Instead we
|
||||
# have to determine which gcov binary to use.
|
||||
get_target_property(TSOURCES ${TNAME} SOURCES)
|
||||
set(SOURCES "")
|
||||
set(TCOMPILER "")
|
||||
foreach (FILE ${TSOURCES})
|
||||
codecov_path_of_source(${FILE} FILE)
|
||||
if (NOT "${FILE}" STREQUAL "")
|
||||
codecov_lang_of_source(${FILE} LANG)
|
||||
if (NOT "${LANG}" STREQUAL "")
|
||||
list(APPEND SOURCES "${FILE}")
|
||||
set(TCOMPILER ${CMAKE_${LANG}_COMPILER_ID})
|
||||
endif ()
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
# If no gcov binary was found, coverage data can't be evaluated.
|
||||
if (NOT GCOV_${TCOMPILER}_BIN)
|
||||
message(WARNING "No coverage evaluation binary found for ${TCOMPILER}.")
|
||||
return()
|
||||
endif ()
|
||||
|
||||
set(GCOV_BIN "${GCOV_${TCOMPILER}_BIN}")
|
||||
set(GCOV_ENV "${GCOV_${TCOMPILER}_ENV}")
|
||||
|
||||
|
||||
set(BUFFER "")
|
||||
foreach(FILE ${SOURCES})
|
||||
get_filename_component(FILE_PATH "${TDIR}/${FILE}" PATH)
|
||||
|
||||
# call gcov
|
||||
add_custom_command(OUTPUT ${TDIR}/${FILE}.gcov
|
||||
COMMAND ${GCOV_ENV} ${GCOV_BIN} ${TDIR}/${FILE}.gcno > /dev/null
|
||||
DEPENDS ${TNAME} ${TDIR}/${FILE}.gcno
|
||||
WORKING_DIRECTORY ${FILE_PATH}
|
||||
)
|
||||
|
||||
list(APPEND BUFFER ${TDIR}/${FILE}.gcov)
|
||||
endforeach()
|
||||
|
||||
|
||||
# add target for gcov evaluation of <TNAME>
|
||||
add_custom_target(${TNAME}-gcov DEPENDS ${BUFFER})
|
||||
|
||||
# add evaluation target to the global gcov target.
|
||||
add_dependencies(gcov ${TNAME}-gcov)
|
||||
endfunction (add_gcov_target)
|
||||
|
|
@ -0,0 +1,354 @@
|
|||
# This file is part of CMake-codecov.
|
||||
#
|
||||
# Copyright (c)
|
||||
# 2015-2017 RWTH Aachen University, Federal Republic of Germany
|
||||
#
|
||||
# See the LICENSE file in the package base directory for details
|
||||
#
|
||||
# Written by Alexander Haase, alexander.haase@rwth-aachen.de
|
||||
#
|
||||
|
||||
|
||||
# configuration
|
||||
set(LCOV_DATA_PATH "${CMAKE_BINARY_DIR}/lcov/data")
|
||||
set(LCOV_DATA_PATH_INIT "${LCOV_DATA_PATH}/init")
|
||||
set(LCOV_DATA_PATH_CAPTURE "${LCOV_DATA_PATH}/capture")
|
||||
set(LCOV_HTML_PATH "${CMAKE_BINARY_DIR}/lcov/html")
|
||||
|
||||
|
||||
|
||||
|
||||
# Search for Gcov which is used by Lcov.
|
||||
find_package(Gcov)
|
||||
|
||||
|
||||
|
||||
|
||||
# This function will add lcov evaluation for target <TNAME>. Only sources of
|
||||
# this target will be evaluated and no dependencies will be added. It will call
|
||||
# geninfo on any source file of <TNAME> once and store the info file in the same
|
||||
# directory.
|
||||
#
|
||||
# Note: This function is only a wrapper to define this function always, even if
|
||||
# coverage is not supported by the compiler or disabled. This function must
|
||||
# be defined here, because the module will be exited, if there is no coverage
|
||||
# support by the compiler or it is disabled by the user.
|
||||
function (add_lcov_target TNAME)
|
||||
if (LCOV_FOUND)
|
||||
# capture initial coverage data
|
||||
lcov_capture_initial_tgt(${TNAME})
|
||||
|
||||
# capture coverage data after execution
|
||||
lcov_capture_tgt(${TNAME})
|
||||
endif ()
|
||||
endfunction (add_lcov_target)
|
||||
|
||||
|
||||
|
||||
|
||||
# include required Modules
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# Search for required lcov binaries.
|
||||
find_program(LCOV_BIN lcov)
|
||||
find_program(GENINFO_BIN geninfo)
|
||||
find_program(GENHTML_BIN genhtml)
|
||||
find_package_handle_standard_args(lcov
|
||||
REQUIRED_VARS LCOV_BIN GENINFO_BIN GENHTML_BIN
|
||||
)
|
||||
|
||||
# enable genhtml C++ demangeling, if c++filt is found.
|
||||
set(GENHTML_CPPFILT_FLAG "")
|
||||
find_program(CPPFILT_BIN c++filt)
|
||||
if (NOT CPPFILT_BIN STREQUAL "")
|
||||
set(GENHTML_CPPFILT_FLAG "--demangle-cpp")
|
||||
endif (NOT CPPFILT_BIN STREQUAL "")
|
||||
|
||||
# enable no-external flag for lcov, if available.
|
||||
if (GENINFO_BIN AND NOT DEFINED GENINFO_EXTERN_FLAG)
|
||||
set(FLAG "")
|
||||
execute_process(COMMAND ${GENINFO_BIN} --help OUTPUT_VARIABLE GENINFO_HELP)
|
||||
string(REGEX MATCH "external" GENINFO_RES "${GENINFO_HELP}")
|
||||
if (GENINFO_RES)
|
||||
set(FLAG "--no-external")
|
||||
endif ()
|
||||
|
||||
set(GENINFO_EXTERN_FLAG "${FLAG}"
|
||||
CACHE STRING "Geninfo flag to exclude system sources.")
|
||||
endif ()
|
||||
|
||||
# If Lcov was not found, exit module now.
|
||||
if (NOT LCOV_FOUND)
|
||||
return()
|
||||
endif (NOT LCOV_FOUND)
|
||||
|
||||
|
||||
|
||||
|
||||
# Create directories to be used.
|
||||
file(MAKE_DIRECTORY ${LCOV_DATA_PATH_INIT})
|
||||
file(MAKE_DIRECTORY ${LCOV_DATA_PATH_CAPTURE})
|
||||
|
||||
set(LCOV_REMOVE_PATTERNS "")
|
||||
|
||||
# This function will merge lcov files to a single target file. Additional lcov
|
||||
# flags may be set with setting LCOV_EXTRA_FLAGS before calling this function.
|
||||
function (lcov_merge_files OUTFILE ...)
|
||||
# Remove ${OUTFILE} from ${ARGV} and generate lcov parameters with files.
|
||||
list(REMOVE_AT ARGV 0)
|
||||
|
||||
# Generate merged file.
|
||||
string(REPLACE "${CMAKE_BINARY_DIR}/" "" FILE_REL "${OUTFILE}")
|
||||
add_custom_command(OUTPUT "${OUTFILE}.raw"
|
||||
COMMAND cat ${ARGV} > ${OUTFILE}.raw
|
||||
DEPENDS ${ARGV}
|
||||
COMMENT "Generating ${FILE_REL}"
|
||||
)
|
||||
|
||||
add_custom_command(OUTPUT "${OUTFILE}"
|
||||
COMMAND ${LCOV_BIN} --quiet -a ${OUTFILE}.raw --output-file ${OUTFILE}
|
||||
--base-directory ${PROJECT_SOURCE_DIR} ${LCOV_EXTRA_FLAGS}
|
||||
COMMAND ${LCOV_BIN} --quiet -r ${OUTFILE} ${LCOV_REMOVE_PATTERNS}
|
||||
--output-file ${OUTFILE} ${LCOV_EXTRA_FLAGS}
|
||||
DEPENDS ${OUTFILE}.raw
|
||||
COMMENT "Post-processing ${FILE_REL}"
|
||||
)
|
||||
endfunction ()
|
||||
|
||||
|
||||
|
||||
|
||||
# Add a new global target to generate initial coverage reports for all targets.
|
||||
# This target will be used to generate the global initial info file, which is
|
||||
# used to gather even empty report data.
|
||||
if (NOT TARGET lcov-capture-init)
|
||||
add_custom_target(lcov-capture-init)
|
||||
set(LCOV_CAPTURE_INIT_FILES "" CACHE INTERNAL "")
|
||||
endif (NOT TARGET lcov-capture-init)
|
||||
|
||||
|
||||
# This function will add initial capture of coverage data for target <TNAME>,
|
||||
# which is needed to get also data for objects, which were not loaded at
|
||||
# execution time. It will call geninfo for every source file of <TNAME> once and
|
||||
# store the info file in the same directory.
|
||||
function (lcov_capture_initial_tgt TNAME)
|
||||
# We don't have to check, if the target has support for coverage, thus this
|
||||
# will be checked by add_coverage_target in Findcoverage.cmake. Instead we
|
||||
# have to determine which gcov binary to use.
|
||||
get_target_property(TSOURCES ${TNAME} SOURCES)
|
||||
set(SOURCES "")
|
||||
set(TCOMPILER "")
|
||||
foreach (FILE ${TSOURCES})
|
||||
codecov_path_of_source(${FILE} FILE)
|
||||
if (NOT "${FILE}" STREQUAL "")
|
||||
codecov_lang_of_source(${FILE} LANG)
|
||||
if (NOT "${LANG}" STREQUAL "")
|
||||
list(APPEND SOURCES "${FILE}")
|
||||
set(TCOMPILER ${CMAKE_${LANG}_COMPILER_ID})
|
||||
endif ()
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
# If no gcov binary was found, coverage data can't be evaluated.
|
||||
if (NOT GCOV_${TCOMPILER}_BIN)
|
||||
message(WARNING "No coverage evaluation binary found for ${TCOMPILER}.")
|
||||
return()
|
||||
endif ()
|
||||
|
||||
set(GCOV_BIN "${GCOV_${TCOMPILER}_BIN}")
|
||||
set(GCOV_ENV "${GCOV_${TCOMPILER}_ENV}")
|
||||
|
||||
|
||||
set(TDIR ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TNAME}.dir)
|
||||
set(GENINFO_FILES "")
|
||||
foreach(FILE ${SOURCES})
|
||||
# generate empty coverage files
|
||||
set(OUTFILE "${TDIR}/${FILE}.info.init")
|
||||
list(APPEND GENINFO_FILES ${OUTFILE})
|
||||
|
||||
add_custom_command(OUTPUT ${OUTFILE} COMMAND ${GCOV_ENV} ${GENINFO_BIN}
|
||||
--quiet --base-directory ${PROJECT_SOURCE_DIR} --initial
|
||||
--gcov-tool ${GCOV_BIN} --output-filename ${OUTFILE}
|
||||
${GENINFO_EXTERN_FLAG} ${TDIR}/${FILE}.gcno
|
||||
DEPENDS ${TNAME}
|
||||
COMMENT "Capturing initial coverage data for ${FILE}"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# Concatenate all files generated by geninfo to a single file per target.
|
||||
set(OUTFILE "${LCOV_DATA_PATH_INIT}/${TNAME}.info")
|
||||
set(LCOV_EXTRA_FLAGS "--initial")
|
||||
lcov_merge_files("${OUTFILE}" ${GENINFO_FILES})
|
||||
add_custom_target(${TNAME}-capture-init ALL DEPENDS ${OUTFILE})
|
||||
|
||||
# add geninfo file generation to global lcov-geninfo target
|
||||
add_dependencies(lcov-capture-init ${TNAME}-capture-init)
|
||||
set(LCOV_CAPTURE_INIT_FILES "${LCOV_CAPTURE_INIT_FILES}"
|
||||
"${OUTFILE}" CACHE INTERNAL ""
|
||||
)
|
||||
endfunction (lcov_capture_initial_tgt)
|
||||
|
||||
|
||||
# This function will generate the global info file for all targets. It has to be
|
||||
# called after all other CMake functions in the root CMakeLists.txt file, to get
|
||||
# a full list of all targets that generate coverage data.
|
||||
function (lcov_capture_initial)
|
||||
# Skip this function (and do not create the following targets), if there are
|
||||
# no input files.
|
||||
if ("${LCOV_CAPTURE_INIT_FILES}" STREQUAL "")
|
||||
return()
|
||||
endif ()
|
||||
|
||||
# Add a new target to merge the files of all targets.
|
||||
set(OUTFILE "${LCOV_DATA_PATH_INIT}/all_targets.info")
|
||||
lcov_merge_files("${OUTFILE}" ${LCOV_CAPTURE_INIT_FILES})
|
||||
add_custom_target(lcov-geninfo-init ALL DEPENDS ${OUTFILE}
|
||||
lcov-capture-init
|
||||
)
|
||||
endfunction (lcov_capture_initial)
|
||||
|
||||
|
||||
|
||||
|
||||
# Add a new global target to generate coverage reports for all targets. This
|
||||
# target will be used to generate the global info file.
|
||||
if (NOT TARGET lcov-capture)
|
||||
add_custom_target(lcov-capture)
|
||||
set(LCOV_CAPTURE_FILES "" CACHE INTERNAL "")
|
||||
endif (NOT TARGET lcov-capture)
|
||||
|
||||
|
||||
# This function will add capture of coverage data for target <TNAME>, which is
|
||||
# needed to get also data for objects, which were not loaded at execution time.
|
||||
# It will call geninfo for every source file of <TNAME> once and store the info
|
||||
# file in the same directory.
|
||||
function (lcov_capture_tgt TNAME)
|
||||
# We don't have to check, if the target has support for coverage, thus this
|
||||
# will be checked by add_coverage_target in Findcoverage.cmake. Instead we
|
||||
# have to determine which gcov binary to use.
|
||||
get_target_property(TSOURCES ${TNAME} SOURCES)
|
||||
set(SOURCES "")
|
||||
set(TCOMPILER "")
|
||||
foreach (FILE ${TSOURCES})
|
||||
codecov_path_of_source(${FILE} FILE)
|
||||
if (NOT "${FILE}" STREQUAL "")
|
||||
codecov_lang_of_source(${FILE} LANG)
|
||||
if (NOT "${LANG}" STREQUAL "")
|
||||
list(APPEND SOURCES "${FILE}")
|
||||
set(TCOMPILER ${CMAKE_${LANG}_COMPILER_ID})
|
||||
endif ()
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
# If no gcov binary was found, coverage data can't be evaluated.
|
||||
if (NOT GCOV_${TCOMPILER}_BIN)
|
||||
message(WARNING "No coverage evaluation binary found for ${TCOMPILER}.")
|
||||
return()
|
||||
endif ()
|
||||
|
||||
set(GCOV_BIN "${GCOV_${TCOMPILER}_BIN}")
|
||||
set(GCOV_ENV "${GCOV_${TCOMPILER}_ENV}")
|
||||
|
||||
|
||||
set(TDIR ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TNAME}.dir)
|
||||
set(GENINFO_FILES "")
|
||||
foreach(FILE ${SOURCES})
|
||||
# Generate coverage files. If no .gcda file was generated during
|
||||
# execution, the empty coverage file will be used instead.
|
||||
set(OUTFILE "${TDIR}/${FILE}.info")
|
||||
list(APPEND GENINFO_FILES ${OUTFILE})
|
||||
|
||||
add_custom_command(OUTPUT ${OUTFILE}
|
||||
COMMAND test -f "${TDIR}/${FILE}.gcda"
|
||||
&& ${GCOV_ENV} ${GENINFO_BIN} --quiet --base-directory
|
||||
${PROJECT_SOURCE_DIR} --gcov-tool ${GCOV_BIN}
|
||||
--output-filename ${OUTFILE} ${GENINFO_EXTERN_FLAG}
|
||||
${TDIR}/${FILE}.gcda
|
||||
|| cp ${OUTFILE}.init ${OUTFILE}
|
||||
DEPENDS ${TNAME} ${TNAME}-capture-init
|
||||
COMMENT "Capturing coverage data for ${FILE}"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# Concatenate all files generated by geninfo to a single file per target.
|
||||
set(OUTFILE "${LCOV_DATA_PATH_CAPTURE}/${TNAME}.info")
|
||||
lcov_merge_files("${OUTFILE}" ${GENINFO_FILES})
|
||||
add_custom_target(${TNAME}-geninfo DEPENDS ${OUTFILE})
|
||||
|
||||
# add geninfo file generation to global lcov-capture target
|
||||
add_dependencies(lcov-capture ${TNAME}-geninfo)
|
||||
set(LCOV_CAPTURE_FILES "${LCOV_CAPTURE_FILES}" "${OUTFILE}" CACHE INTERNAL
|
||||
""
|
||||
)
|
||||
|
||||
# Add target for generating html output for this target only.
|
||||
file(MAKE_DIRECTORY ${LCOV_HTML_PATH}/${TNAME})
|
||||
add_custom_target(${TNAME}-genhtml
|
||||
COMMAND ${GENHTML_BIN} --quiet --sort --prefix ${PROJECT_SOURCE_DIR}
|
||||
--baseline-file ${LCOV_DATA_PATH_INIT}/${TNAME}.info
|
||||
--output-directory ${LCOV_HTML_PATH}/${TNAME}
|
||||
--title "${CMAKE_PROJECT_NAME} - target ${TNAME}"
|
||||
${GENHTML_CPPFILT_FLAG} ${OUTFILE}
|
||||
DEPENDS ${TNAME}-geninfo ${TNAME}-capture-init
|
||||
)
|
||||
endfunction (lcov_capture_tgt)
|
||||
|
||||
|
||||
# This function will generate the global info file for all targets. It has to be
|
||||
# called after all other CMake functions in the root CMakeLists.txt file, to get
|
||||
# a full list of all targets that generate coverage data.
|
||||
function (lcov_capture)
|
||||
# Skip this function (and do not create the following targets), if there are
|
||||
# no input files.
|
||||
if ("${LCOV_CAPTURE_FILES}" STREQUAL "")
|
||||
return()
|
||||
endif ()
|
||||
|
||||
# Add a new target to merge the files of all targets.
|
||||
set(OUTFILE "${LCOV_DATA_PATH_CAPTURE}/all_targets.info")
|
||||
lcov_merge_files("${OUTFILE}" ${LCOV_CAPTURE_FILES})
|
||||
add_custom_target(lcov-geninfo DEPENDS ${OUTFILE} lcov-capture)
|
||||
|
||||
# Add a new global target for all lcov targets. This target could be used to
|
||||
# generate the lcov html output for the whole project instead of calling
|
||||
# <TARGET>-geninfo and <TARGET>-genhtml for each target. It will also be
|
||||
# used to generate a html site for all project data together instead of one
|
||||
# for each target.
|
||||
if (NOT TARGET lcov)
|
||||
file(MAKE_DIRECTORY ${LCOV_HTML_PATH}/all_targets)
|
||||
add_custom_target(lcov
|
||||
COMMAND ${GENHTML_BIN} --quiet --sort
|
||||
--baseline-file ${LCOV_DATA_PATH_INIT}/all_targets.info
|
||||
--output-directory ${LCOV_HTML_PATH}/all_targets
|
||||
--title "${CMAKE_PROJECT_NAME}" --prefix "${PROJECT_SOURCE_DIR}"
|
||||
${GENHTML_CPPFILT_FLAG} ${OUTFILE}
|
||||
DEPENDS lcov-geninfo-init lcov-geninfo
|
||||
)
|
||||
endif ()
|
||||
endfunction (lcov_capture)
|
||||
|
||||
|
||||
|
||||
|
||||
# Add a new global target to generate the lcov html report for the whole project
|
||||
# instead of calling <TARGET>-genhtml for each target (to create an own report
|
||||
# for each target). Instead of the lcov target it does not require geninfo for
|
||||
# all targets, so you have to call <TARGET>-geninfo to generate the info files
|
||||
# the targets you'd like to have in your report or lcov-geninfo for generating
|
||||
# info files for all targets before calling lcov-genhtml.
|
||||
file(MAKE_DIRECTORY ${LCOV_HTML_PATH}/selected_targets)
|
||||
if (NOT TARGET lcov-genhtml)
|
||||
add_custom_target(lcov-genhtml
|
||||
COMMAND ${GENHTML_BIN}
|
||||
--quiet
|
||||
--output-directory ${LCOV_HTML_PATH}/selected_targets
|
||||
--title \"${CMAKE_PROJECT_NAME} - targets `find
|
||||
${LCOV_DATA_PATH_CAPTURE} -name \"*.info\" ! -name
|
||||
\"all_targets.info\" -exec basename {} .info \\\;`\"
|
||||
--prefix ${PROJECT_SOURCE_DIR}
|
||||
--sort
|
||||
${GENHTML_CPPFILT_FLAG}
|
||||
`find ${LCOV_DATA_PATH_CAPTURE} -name \"*.info\" ! -name
|
||||
\"all_targets.info\"`
|
||||
)
|
||||
endif (NOT TARGET lcov-genhtml)
|
||||
|
|
@ -0,0 +1,258 @@
|
|||
# This file is part of CMake-codecov.
|
||||
#
|
||||
# Copyright (c)
|
||||
# 2015-2017 RWTH Aachen University, Federal Republic of Germany
|
||||
#
|
||||
# See the LICENSE file in the package base directory for details
|
||||
#
|
||||
# Written by Alexander Haase, alexander.haase@rwth-aachen.de
|
||||
#
|
||||
|
||||
|
||||
# Add an option to choose, if coverage should be enabled or not. If enabled
|
||||
# marked targets will be build with coverage support and appropriate targets
|
||||
# will be added. If disabled coverage will be ignored for *ALL* targets.
|
||||
option(ENABLE_COVERAGE "Enable coverage build." OFF)
|
||||
|
||||
set(COVERAGE_FLAG_CANDIDATES
|
||||
# gcc and clang
|
||||
"-O0 -g -fprofile-arcs -ftest-coverage"
|
||||
|
||||
# gcc and clang fallback
|
||||
"-O0 -g --coverage"
|
||||
)
|
||||
|
||||
|
||||
# Add coverage support for target ${TNAME} and register target for coverage
|
||||
# evaluation. If coverage is disabled or not supported, this function will
|
||||
# simply do nothing.
|
||||
#
|
||||
# Note: This function is only a wrapper to define this function always, even if
|
||||
# coverage is not supported by the compiler or disabled. This function must
|
||||
# be defined here, because the module will be exited, if there is no coverage
|
||||
# support by the compiler or it is disabled by the user.
|
||||
function (add_coverage TNAME)
|
||||
# only add coverage for target, if coverage is support and enabled.
|
||||
if (ENABLE_COVERAGE)
|
||||
foreach (TNAME ${ARGV})
|
||||
add_coverage_target(${TNAME})
|
||||
endforeach ()
|
||||
endif ()
|
||||
endfunction (add_coverage)
|
||||
|
||||
|
||||
# Add global target to gather coverage information after all targets have been
|
||||
# added. Other evaluation functions could be added here, after checks for the
|
||||
# specific module have been passed.
|
||||
#
|
||||
# Note: This function is only a wrapper to define this function always, even if
|
||||
# coverage is not supported by the compiler or disabled. This function must
|
||||
# be defined here, because the module will be exited, if there is no coverage
|
||||
# support by the compiler or it is disabled by the user.
|
||||
function (coverage_evaluate)
|
||||
# add lcov evaluation
|
||||
if (LCOV_FOUND)
|
||||
lcov_capture_initial()
|
||||
lcov_capture()
|
||||
endif (LCOV_FOUND)
|
||||
endfunction ()
|
||||
|
||||
|
||||
# Exit this module, if coverage is disabled. add_coverage is defined before this
|
||||
# return, so this module can be exited now safely without breaking any build-
|
||||
# scripts.
|
||||
if (NOT ENABLE_COVERAGE)
|
||||
return()
|
||||
endif ()
|
||||
|
||||
|
||||
|
||||
|
||||
# Find the reuired flags foreach language.
|
||||
set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
|
||||
set(CMAKE_REQUIRED_QUIET ${codecov_FIND_QUIETLY})
|
||||
|
||||
get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
foreach (LANG ${ENABLED_LANGUAGES})
|
||||
# Coverage flags are not dependent on language, but the used compiler. So
|
||||
# instead of searching flags foreach language, search flags foreach compiler
|
||||
# used.
|
||||
set(COMPILER ${CMAKE_${LANG}_COMPILER_ID})
|
||||
if (NOT COVERAGE_${COMPILER}_FLAGS)
|
||||
foreach (FLAG ${COVERAGE_FLAG_CANDIDATES})
|
||||
if(NOT CMAKE_REQUIRED_QUIET)
|
||||
message(STATUS "Try ${COMPILER} code coverage flag = [${FLAG}]")
|
||||
endif()
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "${FLAG}")
|
||||
unset(COVERAGE_FLAG_DETECTED CACHE)
|
||||
|
||||
if (${LANG} STREQUAL "C")
|
||||
include(CheckCCompilerFlag)
|
||||
check_c_compiler_flag("${FLAG}" COVERAGE_FLAG_DETECTED)
|
||||
|
||||
elseif (${LANG} STREQUAL "CXX")
|
||||
include(CheckCXXCompilerFlag)
|
||||
check_cxx_compiler_flag("${FLAG}" COVERAGE_FLAG_DETECTED)
|
||||
|
||||
elseif (${LANG} STREQUAL "Fortran")
|
||||
# CheckFortranCompilerFlag was introduced in CMake 3.x. To be
|
||||
# compatible with older Cmake versions, we will check if this
|
||||
# module is present before we use it. Otherwise we will define
|
||||
# Fortran coverage support as not available.
|
||||
include(CheckFortranCompilerFlag OPTIONAL
|
||||
RESULT_VARIABLE INCLUDED)
|
||||
if (INCLUDED)
|
||||
check_fortran_compiler_flag("${FLAG}"
|
||||
COVERAGE_FLAG_DETECTED)
|
||||
elseif (NOT CMAKE_REQUIRED_QUIET)
|
||||
message("-- Performing Test COVERAGE_FLAG_DETECTED")
|
||||
message("-- Performing Test COVERAGE_FLAG_DETECTED - Failed"
|
||||
" (Check not supported)")
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
if (COVERAGE_FLAG_DETECTED)
|
||||
set(COVERAGE_${COMPILER}_FLAGS "${FLAG}"
|
||||
CACHE STRING "${COMPILER} flags for code coverage.")
|
||||
mark_as_advanced(COVERAGE_${COMPILER}_FLAGS)
|
||||
break()
|
||||
else ()
|
||||
message(WARNING "Code coverage is not available for ${COMPILER}"
|
||||
" compiler. Targets using this compiler will be "
|
||||
"compiled without it.")
|
||||
endif ()
|
||||
endforeach ()
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
|
||||
|
||||
|
||||
|
||||
|
||||
# Helper function to get the language of a source file.
|
||||
function (codecov_lang_of_source FILE RETURN_VAR)
|
||||
get_filename_component(FILE_EXT "${FILE}" EXT)
|
||||
string(TOLOWER "${FILE_EXT}" FILE_EXT)
|
||||
string(SUBSTRING "${FILE_EXT}" 1 -1 FILE_EXT)
|
||||
|
||||
get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
foreach (LANG ${ENABLED_LANGUAGES})
|
||||
list(FIND CMAKE_${LANG}_SOURCE_FILE_EXTENSIONS "${FILE_EXT}" TEMP)
|
||||
if (NOT ${TEMP} EQUAL -1)
|
||||
set(${RETURN_VAR} "${LANG}" PARENT_SCOPE)
|
||||
return()
|
||||
endif ()
|
||||
endforeach()
|
||||
|
||||
set(${RETURN_VAR} "" PARENT_SCOPE)
|
||||
endfunction ()
|
||||
|
||||
|
||||
# Helper function to get the relative path of the source file destination path.
|
||||
# This path is needed by FindGcov and FindLcov cmake files to locate the
|
||||
# captured data.
|
||||
function (codecov_path_of_source FILE RETURN_VAR)
|
||||
string(REGEX MATCH "TARGET_OBJECTS:([^ >]+)" _source ${FILE})
|
||||
|
||||
# If expression was found, SOURCEFILE is a generator-expression for an
|
||||
# object library. Currently we found no way to call this function automatic
|
||||
# for the referenced target, so it must be called in the directoryso of the
|
||||
# object library definition.
|
||||
if (NOT "${_source}" STREQUAL "")
|
||||
set(${RETURN_VAR} "" PARENT_SCOPE)
|
||||
return()
|
||||
endif ()
|
||||
|
||||
|
||||
string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}/" "" FILE "${FILE}")
|
||||
if(IS_ABSOLUTE ${FILE})
|
||||
file(RELATIVE_PATH FILE ${CMAKE_CURRENT_SOURCE_DIR} ${FILE})
|
||||
endif()
|
||||
|
||||
# get the right path for file
|
||||
string(REPLACE ".." "__" PATH "${FILE}")
|
||||
|
||||
set(${RETURN_VAR} "${PATH}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
|
||||
|
||||
# Add coverage support for target ${TNAME} and register target for coverage
|
||||
# evaluation.
|
||||
function(add_coverage_target TNAME)
|
||||
# Check if all sources for target use the same compiler. If a target uses
|
||||
# e.g. C and Fortran mixed and uses different compilers (e.g. clang and
|
||||
# gfortran) this can trigger huge problems, because different compilers may
|
||||
# use different implementations for code coverage.
|
||||
get_target_property(TSOURCES ${TNAME} SOURCES)
|
||||
set(TARGET_COMPILER "")
|
||||
set(ADDITIONAL_FILES "")
|
||||
foreach (FILE ${TSOURCES})
|
||||
# If expression was found, FILE is a generator-expression for an object
|
||||
# library. Object libraries will be ignored.
|
||||
string(REGEX MATCH "TARGET_OBJECTS:([^ >]+)" _file ${FILE})
|
||||
if ("${_file}" STREQUAL "")
|
||||
codecov_lang_of_source(${FILE} LANG)
|
||||
if (LANG)
|
||||
list(APPEND TARGET_COMPILER ${CMAKE_${LANG}_COMPILER_ID})
|
||||
|
||||
list(APPEND ADDITIONAL_FILES "${FILE}.gcno")
|
||||
list(APPEND ADDITIONAL_FILES "${FILE}.gcda")
|
||||
endif ()
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
list(REMOVE_DUPLICATES TARGET_COMPILER)
|
||||
list(LENGTH TARGET_COMPILER NUM_COMPILERS)
|
||||
|
||||
if (NUM_COMPILERS GREATER 1)
|
||||
message(WARNING "Can't use code coverage for target ${TNAME}, because "
|
||||
"it will be compiled by incompatible compilers. Target will be "
|
||||
"compiled without code coverage.")
|
||||
return()
|
||||
|
||||
elseif (NUM_COMPILERS EQUAL 0)
|
||||
message(WARNING "Can't use code coverage for target ${TNAME}, because "
|
||||
"it uses an unknown compiler. Target will be compiled without "
|
||||
"code coverage.")
|
||||
return()
|
||||
|
||||
elseif (NOT DEFINED "COVERAGE_${TARGET_COMPILER}_FLAGS")
|
||||
# A warning has been printed before, so just return if flags for this
|
||||
# compiler aren't available.
|
||||
return()
|
||||
endif()
|
||||
|
||||
|
||||
# enable coverage for target
|
||||
set_property(TARGET ${TNAME} APPEND_STRING
|
||||
PROPERTY COMPILE_FLAGS " ${COVERAGE_${TARGET_COMPILER}_FLAGS}")
|
||||
set_property(TARGET ${TNAME} APPEND_STRING
|
||||
PROPERTY LINK_FLAGS " ${COVERAGE_${TARGET_COMPILER}_FLAGS}")
|
||||
|
||||
|
||||
# Add gcov files generated by compiler to clean target.
|
||||
set(CLEAN_FILES "")
|
||||
foreach (FILE ${ADDITIONAL_FILES})
|
||||
codecov_path_of_source(${FILE} FILE)
|
||||
list(APPEND CLEAN_FILES "CMakeFiles/${TNAME}.dir/${FILE}")
|
||||
endforeach()
|
||||
|
||||
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
|
||||
"${CLEAN_FILES}")
|
||||
|
||||
|
||||
add_gcov_target(${TNAME})
|
||||
add_lcov_target(${TNAME})
|
||||
endfunction(add_coverage_target)
|
||||
|
||||
|
||||
|
||||
|
||||
# Include modules for parsing the collected data and output it in a readable
|
||||
# format (like gcov and lcov).
|
||||
find_package(Gcov)
|
||||
find_package(Lcov)
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
#checks that the given hard-coded list contains all headers + sources in the given folder
|
||||
function(CheckFileList LIST_VAR FOLDER)
|
||||
set(MESSAGE " should be added to the variable ${LIST_VAR}")
|
||||
set(MESSAGE "${MESSAGE} in ${CMAKE_CURRENT_LIST_FILE}\n")
|
||||
file(GLOB GLOBBED_LIST "${FOLDER}/*.cpp"
|
||||
"${FOLDER}/*.hpp"
|
||||
"${FOLDER}/*.h")
|
||||
list(REMOVE_ITEM GLOBBED_LIST ${${LIST_VAR}})
|
||||
foreach(EXTRA_ITEM ${GLOBBED_LIST})
|
||||
string(REPLACE "${CATCH_DIR}/" "" RELATIVE_FILE_NAME "${EXTRA_ITEM}")
|
||||
message(AUTHOR_WARNING "The file \"${RELATIVE_FILE_NAME}\"${MESSAGE}")
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(CheckFileListRec LIST_VAR FOLDER)
|
||||
set(MESSAGE " should be added to the variable ${LIST_VAR}")
|
||||
set(MESSAGE "${MESSAGE} in ${CMAKE_CURRENT_LIST_FILE}\n")
|
||||
file(GLOB_RECURSE GLOBBED_LIST "${FOLDER}/*.cpp"
|
||||
"${FOLDER}/*.hpp"
|
||||
"${FOLDER}/*.h")
|
||||
list(REMOVE_ITEM GLOBBED_LIST ${${LIST_VAR}})
|
||||
foreach(EXTRA_ITEM ${GLOBBED_LIST})
|
||||
string(REPLACE "${CATCH_DIR}/" "" RELATIVE_FILE_NAME "${EXTRA_ITEM}")
|
||||
message(AUTHOR_WARNING "The file \"${RELATIVE_FILE_NAME}\"${MESSAGE}")
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||
|
||||
Name: Catch2
|
||||
Description: A modern, C++-native, header-only, test framework for C++11
|
||||
URL: https://github.com/catchorg/Catch2
|
||||
Version: @Catch2_VERSION@
|
||||
Cflags: -I${includedir}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This file is part of CMake-codecov.
|
||||
#
|
||||
# Copyright (c)
|
||||
# 2015-2017 RWTH Aachen University, Federal Republic of Germany
|
||||
#
|
||||
# See the LICENSE file in the package base directory for details
|
||||
#
|
||||
# Written by Alexander Haase, alexander.haase@rwth-aachen.de
|
||||
#
|
||||
|
||||
if [ -z "$LLVM_COV_BIN" ]
|
||||
then
|
||||
echo "LLVM_COV_BIN not set!" >& 2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Get LLVM version to find out.
|
||||
LLVM_VERSION=$($LLVM_COV_BIN -version | grep -i "LLVM version" \
|
||||
| sed "s/^\([A-Za-z ]*\)\([0-9]\).\([0-9]\).*$/\2.\3/g")
|
||||
|
||||
if [ "$1" = "-v" ]
|
||||
then
|
||||
echo "llvm-cov-wrapper $LLVM_VERSION"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
if [ -n "$LLVM_VERSION" ]
|
||||
then
|
||||
MAJOR=$(echo $LLVM_VERSION | cut -d'.' -f1)
|
||||
MINOR=$(echo $LLVM_VERSION | cut -d'.' -f2)
|
||||
|
||||
if [ $MAJOR -eq 3 ] && [ $MINOR -le 4 ]
|
||||
then
|
||||
if [ -f "$1" ]
|
||||
then
|
||||
filename=$(basename "$1")
|
||||
extension="${filename##*.}"
|
||||
|
||||
case "$extension" in
|
||||
"gcno") exec $LLVM_COV_BIN --gcno="$1" ;;
|
||||
"gcda") exec $LLVM_COV_BIN --gcda="$1" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $MAJOR -eq 3 ] && [ $MINOR -le 5 ]
|
||||
then
|
||||
exec $LLVM_COV_BIN $@
|
||||
fi
|
||||
fi
|
||||
|
||||
exec $LLVM_COV_BIN gcov $@
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue