mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2025-03-01 12:27:13 +00:00
🔧 Add date, version to Config Export
This commit is contained in:
parent
4c9146cffd
commit
b7fd046d59
6 changed files with 50 additions and 130 deletions
Marlin
buildroot/share/PlatformIO/scripts
|
@ -35,9 +35,9 @@
|
||||||
// @section develop
|
// @section develop
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration Dump
|
* Configuration Export
|
||||||
*
|
*
|
||||||
* Dump the configuration as part of the build. (See signature.py)
|
* Export the configuration as part of the build. (See signature.py)
|
||||||
* Output files are saved with the build (e.g., .pio/build/mega2560).
|
* Output files are saved with the build (e.g., .pio/build/mega2560).
|
||||||
*
|
*
|
||||||
* See `build_all_examples --ini` as an example of config.ini archiving.
|
* See `build_all_examples --ini` as an example of config.ini archiving.
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
* 3 = schema.json - The entire configuration schema. (13 = pattern groups)
|
* 3 = schema.json - The entire configuration schema. (13 = pattern groups)
|
||||||
* 4 = schema.yml - The entire configuration schema.
|
* 4 = schema.yml - The entire configuration schema.
|
||||||
*/
|
*/
|
||||||
//#define CONFIG_DUMP // :[1:'JSON', 2:'config.ini', 3:'schema.json', 4:'schema.yml']
|
//#define CONFIG_EXPORT // :[1:'JSON', 2:'config.ini', 3:'schema.json', 4:'schema.yml']
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================= Thermal Settings ============================
|
//============================= Thermal Settings ============================
|
||||||
|
|
107
Marlin/base.ini
107
Marlin/base.ini
|
@ -1,107 +0,0 @@
|
||||||
#
|
|
||||||
# Marlin Firmware
|
|
||||||
# base.ini - A base ini to include for testing
|
|
||||||
#
|
|
||||||
[config:base]
|
|
||||||
motherboard = BOARD_RAMPS_14_EFB
|
|
||||||
serial_port = 0
|
|
||||||
baudrate = 250000
|
|
||||||
|
|
||||||
use_watchdog = on
|
|
||||||
thermal_protection_hotends = on
|
|
||||||
thermal_protection_hysteresis = 4
|
|
||||||
thermal_protection_period = 40
|
|
||||||
|
|
||||||
bufsize = 4
|
|
||||||
block_buffer_size = 16
|
|
||||||
max_cmd_size = 96
|
|
||||||
|
|
||||||
extruders = 1
|
|
||||||
temp_sensor_0 = 1
|
|
||||||
|
|
||||||
temp_hysteresis = 3
|
|
||||||
heater_0_mintemp = 5
|
|
||||||
heater_0_maxtemp = 275
|
|
||||||
preheat_1_temp_hotend = 180
|
|
||||||
|
|
||||||
bang_max = 255
|
|
||||||
pidtemp = on
|
|
||||||
pid_k1 = 0.95
|
|
||||||
pid_max = BANG_MAX
|
|
||||||
pid_functional_range = 10
|
|
||||||
|
|
||||||
default_kp = 22.20
|
|
||||||
default_ki = 1.08
|
|
||||||
default_kd = 114.00
|
|
||||||
|
|
||||||
x_driver_type = A4988
|
|
||||||
y_driver_type = A4988
|
|
||||||
z_driver_type = A4988
|
|
||||||
e0_driver_type = A4988
|
|
||||||
|
|
||||||
x_bed_size = 200
|
|
||||||
x_min_pos = 0
|
|
||||||
x_max_pos = X_BED_SIZE
|
|
||||||
|
|
||||||
y_bed_size = 200
|
|
||||||
y_min_pos = 0
|
|
||||||
y_max_pos = Y_BED_SIZE
|
|
||||||
|
|
||||||
z_min_pos = 0
|
|
||||||
z_max_pos = 200
|
|
||||||
|
|
||||||
x_home_dir = -1
|
|
||||||
y_home_dir = -1
|
|
||||||
z_home_dir = -1
|
|
||||||
|
|
||||||
use_xmin_plug = on
|
|
||||||
use_ymin_plug = on
|
|
||||||
use_zmin_plug = on
|
|
||||||
|
|
||||||
x_min_endstop_inverting = false
|
|
||||||
y_min_endstop_inverting = false
|
|
||||||
z_min_endstop_inverting = false
|
|
||||||
|
|
||||||
default_axis_steps_per_unit = { 80, 80, 400, 500 }
|
|
||||||
axis_relative_modes = { false, false, false, false }
|
|
||||||
default_max_feedrate = { 300, 300, 5, 25 }
|
|
||||||
default_max_acceleration = { 3000, 3000, 100, 10000 }
|
|
||||||
|
|
||||||
homing_feedrate_mm_m = { (50*60), (50*60), (4*60) }
|
|
||||||
homing_bump_divisor = { 2, 2, 4 }
|
|
||||||
|
|
||||||
x_enable_on = 0
|
|
||||||
y_enable_on = 0
|
|
||||||
z_enable_on = 0
|
|
||||||
e_enable_on = 0
|
|
||||||
|
|
||||||
invert_x_dir = false
|
|
||||||
invert_y_dir = true
|
|
||||||
invert_z_dir = false
|
|
||||||
invert_e0_dir = false
|
|
||||||
|
|
||||||
invert_e_step_pin = false
|
|
||||||
invert_x_step_pin = false
|
|
||||||
invert_y_step_pin = false
|
|
||||||
invert_z_step_pin = false
|
|
||||||
|
|
||||||
disable_x = false
|
|
||||||
disable_y = false
|
|
||||||
disable_z = false
|
|
||||||
disable_e = false
|
|
||||||
|
|
||||||
proportional_font_ratio = 1.0
|
|
||||||
default_nominal_filament_dia = 1.75
|
|
||||||
|
|
||||||
junction_deviation_mm = 0.013
|
|
||||||
|
|
||||||
default_acceleration = 3000
|
|
||||||
default_travel_acceleration = 3000
|
|
||||||
default_retract_acceleration = 3000
|
|
||||||
|
|
||||||
default_minimumfeedrate = 0.0
|
|
||||||
default_mintravelfeedrate = 0.0
|
|
||||||
|
|
||||||
minimum_planner_speed = 0.05
|
|
||||||
min_steps_per_segment = 6
|
|
||||||
default_minsegmenttime = 20000
|
|
|
@ -4,12 +4,20 @@
|
||||||
#
|
#
|
||||||
[config:base]
|
[config:base]
|
||||||
ini_use_config = none
|
ini_use_config = none
|
||||||
#ini_use_config = base.ini, another.ini
|
|
||||||
#ini_use_config = example/Creality/Ender-5 Plus
|
|
||||||
#ini_use_config = https://me.myserver.com/path/to/configs
|
|
||||||
#ini_use_config = base
|
|
||||||
#config_dump = 2
|
|
||||||
|
|
||||||
|
# Load all config: sections in this file
|
||||||
|
;ini_use_config = all
|
||||||
|
# Load config file relative to Marlin/
|
||||||
|
;ini_use_config = another.ini
|
||||||
|
# Download configurations from GitHub
|
||||||
|
;ini_use_config = example/Creality/Ender-5 Plus @ bugfix-2.1.x
|
||||||
|
# Download configurations from your server
|
||||||
|
;ini_use_config = https://me.myserver.com/path/to/configs
|
||||||
|
# Evaluate config:base and do a config dump
|
||||||
|
;ini_use_config = base
|
||||||
|
;config_export = 2
|
||||||
|
|
||||||
|
[config:minimal]
|
||||||
motherboard = BOARD_RAMPS_14_EFB
|
motherboard = BOARD_RAMPS_14_EFB
|
||||||
serial_port = 0
|
serial_port = 0
|
||||||
baudrate = 250000
|
baudrate = 250000
|
||||||
|
|
|
@ -18,7 +18,7 @@ def apply_opt(name, val, conf=None):
|
||||||
if name == "lcd": name, val = val, "on"
|
if name == "lcd": name, val = val, "on"
|
||||||
|
|
||||||
# Create a regex to match the option and capture parts of the line
|
# Create a regex to match the option and capture parts of the line
|
||||||
regex = re.compile(r'^(\s*)(//\s*)?(#define\s+)(' + name + r'\b)(\s*)(.*?)(\s*)(//.*)?$', re.IGNORECASE)
|
regex = re.compile(rf'^(\s*)(//\s*)?(#define\s+)({name}\b)(\s*)(.*?)(\s*)(//.*)?$', re.IGNORECASE)
|
||||||
|
|
||||||
# Find and enable and/or update all matches
|
# Find and enable and/or update all matches
|
||||||
for file in ("Configuration.h", "Configuration_adv.h"):
|
for file in ("Configuration.h", "Configuration_adv.h"):
|
||||||
|
@ -87,6 +87,9 @@ def fetch_example(path):
|
||||||
if path.endswith("/"):
|
if path.endswith("/"):
|
||||||
path = path[:-1]
|
path = path[:-1]
|
||||||
|
|
||||||
|
if '@' in path:
|
||||||
|
path, brch = map(strip, path.split('@'))
|
||||||
|
|
||||||
url = path.replace("%", "%25").replace(" ", "%20")
|
url = path.replace("%", "%25").replace(" ", "%20")
|
||||||
if not path.startswith('http'):
|
if not path.startswith('http'):
|
||||||
url = "https://raw.githubusercontent.com/MarlinFirmware/Configurations/bugfix-2.1.x/config/%s" % url
|
url = "https://raw.githubusercontent.com/MarlinFirmware/Configurations/bugfix-2.1.x/config/%s" % url
|
||||||
|
|
|
@ -95,7 +95,7 @@ def extract():
|
||||||
# Regex for #define NAME [VALUE] [COMMENT] with sanitized line
|
# Regex for #define NAME [VALUE] [COMMENT] with sanitized line
|
||||||
defgrep = re.compile(r'^(//)?\s*(#define)\s+([A-Za-z0-9_]+)\s*(.*?)\s*(//.+)?$')
|
defgrep = re.compile(r'^(//)?\s*(#define)\s+([A-Za-z0-9_]+)\s*(.*?)\s*(//.+)?$')
|
||||||
# Defines to ignore
|
# Defines to ignore
|
||||||
ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_DUMP')
|
ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_EXPORT')
|
||||||
# Start with unknown state
|
# Start with unknown state
|
||||||
state = Parse.NORMAL
|
state = Parse.NORMAL
|
||||||
# Serial ID
|
# Serial ID
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
#
|
#
|
||||||
# signature.py
|
# signature.py
|
||||||
#
|
#
|
||||||
import subprocess,re,json,hashlib
|
|
||||||
import schema
|
import schema
|
||||||
|
|
||||||
|
import subprocess,re,json,hashlib
|
||||||
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -112,9 +114,9 @@ def compute_build_signature(env):
|
||||||
defines[key] = value if len(value) else ""
|
defines[key] = value if len(value) else ""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Continue to gather data for CONFIGURATION_EMBEDDING or CONFIG_DUMP
|
# Continue to gather data for CONFIGURATION_EMBEDDING or CONFIG_EXPORT
|
||||||
#
|
#
|
||||||
if not ('CONFIGURATION_EMBEDDING' in defines or 'CONFIG_DUMP' in defines):
|
if not ('CONFIGURATION_EMBEDDING' in defines or 'CONFIG_EXPORT' in defines):
|
||||||
return
|
return
|
||||||
|
|
||||||
# Second step is to filter useless macro
|
# Second step is to filter useless macro
|
||||||
|
@ -157,18 +159,32 @@ def compute_build_signature(env):
|
||||||
except:
|
except:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
config_dump = tryint('CONFIG_DUMP')
|
config_dump = tryint('CONFIG_EXPORT')
|
||||||
|
|
||||||
#
|
#
|
||||||
# Produce an INI file if CONFIG_DUMP == 2
|
# Produce an INI file if CONFIG_EXPORT == 2
|
||||||
#
|
#
|
||||||
if config_dump == 2:
|
if config_dump == 2:
|
||||||
print("Generating config.ini ...")
|
print("Generating config.ini ...")
|
||||||
ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_DUMP')
|
|
||||||
filegrp = { 'Configuration.h':'config:basic', 'Configuration_adv.h':'config:advanced' }
|
|
||||||
config_ini = build_path / 'config.ini'
|
config_ini = build_path / 'config.ini'
|
||||||
with config_ini.open('w') as outfile:
|
with config_ini.open('w') as outfile:
|
||||||
outfile.write('#\n# Marlin Firmware\n# config.ini - Options to apply before the build\n#\n')
|
ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_EXPORT')
|
||||||
|
filegrp = { 'Configuration.h':'config:basic', 'Configuration_adv.h':'config:advanced' }
|
||||||
|
vers = defines["CONFIGURATION_H_VERSION"]
|
||||||
|
dt_string = datetime.now().strftime("%Y-%m-%d at %H:%M:%S")
|
||||||
|
ini_fmt = '{0:40}{1}\n'
|
||||||
|
outfile.write(
|
||||||
|
'#\n'
|
||||||
|
+ '# Marlin Firmware\n'
|
||||||
|
+ '# config.ini - Options to apply before the build\n'
|
||||||
|
+ '#\n'
|
||||||
|
+ f'# Generated by Marlin build on {dt_string}\n'
|
||||||
|
+ '#\n'
|
||||||
|
+ '\n'
|
||||||
|
+ '[config:base]\n'
|
||||||
|
+ ini_fmt.format('ini_use_config', ' = all')
|
||||||
|
+ ini_fmt.format('ini_config_vers', f' = {vers}')
|
||||||
|
)
|
||||||
# Loop through the data array of arrays
|
# Loop through the data array of arrays
|
||||||
for header in data:
|
for header in data:
|
||||||
if header.startswith('__'):
|
if header.startswith('__'):
|
||||||
|
@ -177,10 +193,10 @@ def compute_build_signature(env):
|
||||||
for key in sorted(data[header]):
|
for key in sorted(data[header]):
|
||||||
if key not in ignore:
|
if key not in ignore:
|
||||||
val = 'on' if data[header][key] == '' else data[header][key]
|
val = 'on' if data[header][key] == '' else data[header][key]
|
||||||
outfile.write('{0:40}{1}'.format(key.lower(), ' = ' + val) + '\n')
|
outfile.write(ini_fmt.format(key.lower(), ' = ' + val))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Produce a schema.json file if CONFIG_DUMP == 3
|
# Produce a schema.json file if CONFIG_EXPORT == 3
|
||||||
#
|
#
|
||||||
if config_dump >= 3:
|
if config_dump >= 3:
|
||||||
try:
|
try:
|
||||||
|
@ -191,7 +207,7 @@ def compute_build_signature(env):
|
||||||
|
|
||||||
if conf_schema:
|
if conf_schema:
|
||||||
#
|
#
|
||||||
# Produce a schema.json file if CONFIG_DUMP == 3
|
# Produce a schema.json file if CONFIG_EXPORT == 3
|
||||||
#
|
#
|
||||||
if config_dump in (3, 13):
|
if config_dump in (3, 13):
|
||||||
print("Generating schema.json ...")
|
print("Generating schema.json ...")
|
||||||
|
@ -201,7 +217,7 @@ def compute_build_signature(env):
|
||||||
schema.dump_json(conf_schema, build_path / 'schema_grouped.json')
|
schema.dump_json(conf_schema, build_path / 'schema_grouped.json')
|
||||||
|
|
||||||
#
|
#
|
||||||
# Produce a schema.yml file if CONFIG_DUMP == 4
|
# Produce a schema.yml file if CONFIG_EXPORT == 4
|
||||||
#
|
#
|
||||||
elif config_dump == 4:
|
elif config_dump == 4:
|
||||||
print("Generating schema.yml ...")
|
print("Generating schema.yml ...")
|
||||||
|
@ -226,7 +242,7 @@ def compute_build_signature(env):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
#
|
#
|
||||||
# Produce a JSON file for CONFIGURATION_EMBEDDING or CONFIG_DUMP == 1
|
# Produce a JSON file for CONFIGURATION_EMBEDDING or CONFIG_EXPORT == 1
|
||||||
#
|
#
|
||||||
if config_dump == 1 or 'CONFIGURATION_EMBEDDING' in defines:
|
if config_dump == 1 or 'CONFIGURATION_EMBEDDING' in defines:
|
||||||
with marlin_json.open('w') as outfile:
|
with marlin_json.open('w') as outfile:
|
||||||
|
|
Loading…
Reference in a new issue