first
8
buildroot/bin/build_marlin
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
case "$#" in
|
||||
0 ) BOARD=arduino:avr:mega:cpu=atmega2560 ;;
|
||||
* ) BOARD=arduino:avr:$1 ;;
|
||||
esac
|
||||
|
||||
arduino --verify --board $BOARD Marlin/Marlin.ino
|
4
buildroot/bin/build_marlin_fail
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
build_marlin $@ && exit 0
|
||||
exit 1
|
55
buildroot/bin/generate_version_header_for_marlin
Normal file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env bash
|
||||
# generate_version_header_for_marlin
|
||||
|
||||
DIR="${1}"
|
||||
|
||||
BUILDATE=$(date '+%s')
|
||||
DISTDATE=$(date '+%Y-%m-%d %H:%M')
|
||||
|
||||
BRANCH=$(git -C "${DIR}" symbolic-ref -q --short HEAD)
|
||||
VERSION=$(git -C "${DIR}" describe --tags --first-parent 2>/dev/null)
|
||||
|
||||
if [ -z "${BRANCH}" ]; then
|
||||
BRANCH=$(echo "${TRAVIS_BRANCH}")
|
||||
fi
|
||||
|
||||
if [ -z "${VERSION}" ]; then
|
||||
VERSION=$(git -C "${DIR}" describe --tags --first-parent --always 2>/dev/null)
|
||||
fi
|
||||
|
||||
SHORT_BUILD_VERSION=$(echo "${BRANCH}")
|
||||
DETAILED_BUILD_VERSION=$(echo "${BRANCH}-${VERSION}")
|
||||
|
||||
# Gets some misc options from their defaults
|
||||
DEFAULT_MACHINE_UUID=$(awk -F'"' \
|
||||
'/#define DEFAULT_MACHINE_UUID/{ print $2 }' < "${DIR}/Version.h")
|
||||
MACHINE_NAME=$(awk -F'"' \
|
||||
'/#define MACHINE_NAME/{ print $2 }' < "${DIR}/Version.h")
|
||||
PROTOCOL_VERSION=$(awk -F'"' \
|
||||
'/#define PROTOCOL_VERSION/{ print $2 }' < "${DIR}/Version.h")
|
||||
SOURCE_CODE_URL=$(awk -F'"' \
|
||||
'/#define SOURCE_CODE_URL/{ print $2 }' < "${DIR}/Version.h")
|
||||
WEBSITE_URL=$(awk -F'"' \
|
||||
'/#define WEBSITE_URL/{ print $2 }' < "${DIR}/Version.h")
|
||||
|
||||
cat > "${DIR}/_Version.h" <<EOF
|
||||
/**
|
||||
* THIS FILE IS AUTOMATICALLY GENERATED DO NOT MANUALLY EDIT IT.
|
||||
* IT DOES NOT GET COMMITTED TO THE REPOSITORY.
|
||||
*
|
||||
* Branch: ${BRANCH}
|
||||
* Version: ${VERSION}
|
||||
*/
|
||||
|
||||
#define BUILD_UNIX_DATETIME "${BUILDATE}"
|
||||
#define STRING_DISTRIBUTION_DATE "${DISTDATE}"
|
||||
|
||||
#define SHORT_BUILD_VERSION "${SHORT_BUILD_VERSION}"
|
||||
#define DETAILED_BUILD_VERSION "${DETAILED_BUILD_VERSION}"
|
||||
|
||||
#define PROTOCOL_VERSION "${PROTOCOL_VERSION}"
|
||||
#define MACHINE_NAME "${MACHINE_NAME}"
|
||||
#define SOURCE_CODE_URL "${SOURCE_CODE_URL}"
|
||||
#define DEFAULT_MACHINE_UUID "${DEFAULT_MACHINE_UUID}"
|
||||
#define WEBSITE_URL "${WEBSITE_URL}"
|
||||
EOF
|
3
buildroot/bin/opt_add
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
eval "echo \"#define ${1} ${2}\" >>Marlin/Configuration.h"
|
3
buildroot/bin/opt_add_adv
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
eval "echo \"#define ${1} ${2}\" >>Marlin/Configuration_adv.h"
|
7
buildroot/bin/opt_disable
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SED=$(which gsed || which sed)
|
||||
|
||||
for opt in "$@" ; do
|
||||
eval "${SED} -i 's/\([[:blank:]]*\)\(#define \b${opt}\b\)/\1\/\/\2/g' Marlin/Configuration.h"
|
||||
done
|
7
buildroot/bin/opt_disable_adv
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SED=$(which gsed || which sed)
|
||||
|
||||
for opt in "$@" ; do
|
||||
eval "${SED} -i 's/\([[:blank:]]*\)\(#define \b${opt}\b\)/\1\/\/\2/g' Marlin/Configuration_adv.h"
|
||||
done
|
7
buildroot/bin/opt_enable
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SED=$(which gsed || which sed)
|
||||
|
||||
for opt in "$@" ; do
|
||||
eval "${SED} -i 's/\/\/[[:blank:]]*\(#define \b${opt}\b\)/\1/g' Marlin/Configuration.h"
|
||||
done
|
7
buildroot/bin/opt_enable_adv
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SED=$(which gsed || which sed)
|
||||
|
||||
for opt in "$@" ; do
|
||||
eval "${SED} -i 's/\/\/[[:blank:]]*\(#define \b${opt}\b\)/\1/g' Marlin/Configuration_adv.h"
|
||||
done
|
5
buildroot/bin/opt_set
Normal file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SED=$(which gsed || which sed)
|
||||
|
||||
eval "${SED} -i 's/\(#define \b${1}\b\).*$/\1 ${2}/g' Marlin/Configuration.h"
|
5
buildroot/bin/opt_set_adv
Normal file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SED=$(which gsed || which sed)
|
||||
|
||||
eval "${SED} -i 's/\(#define \b${1}\b\).*$/\1 ${2}/g' Marlin/Configuration_adv.h"
|
5
buildroot/bin/pins_set
Normal file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
SED=$(which gsed || which sed)
|
||||
|
||||
eval "${SED} -i 's/\(#define \b${2}\b\).*$/\1 ${3}/g' Marlin/src/pins/pins_${1}.h"
|
9
buildroot/bin/restore_configs
Normal file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
cp Marlin/Configuration.h.backup Marlin/Configuration.h
|
||||
cp Marlin/Configuration_adv.h.backup Marlin/Configuration_adv.h
|
||||
cp Marlin/pins_RAMPS.h.backup Marlin/pins_RAMPS.h
|
||||
|
||||
if [ -f Marlin/_Bootscreen.h ]; then
|
||||
rm Marlin/_Bootscreen.h
|
||||
fi
|
47
buildroot/bin/travis_at_home
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# travis_at_home
|
||||
#
|
||||
# Run all Travis test builds at home to save time finding typos
|
||||
# Make sure to have 'arduino' somewhere in your PATH
|
||||
#
|
||||
|
||||
LOG="travis-out.txt"
|
||||
|
||||
cd `dirname "$0"`/../..
|
||||
|
||||
TRAVIS_BUILD_DIR=`pwd`
|
||||
echo $'Tests for '$TRAVIS_BUILD_DIR$' ...\n' >"$LOG"
|
||||
|
||||
# Add a temporary execution PATH
|
||||
export PATH="./buildroot/bin:$PATH"
|
||||
|
||||
# Scan .travis.yml and run config/build commands only
|
||||
X=1
|
||||
while read P; do
|
||||
|
||||
# Command lines start with a hyphen
|
||||
if [[ $P =~ ^-\ (([^ ]+)(\ .*)?)$ ]]; then
|
||||
WORD="${BASH_REMATCH[2]}" ; # The first word
|
||||
CMD="${BASH_REMATCH[1]}" ; # The whole command
|
||||
RUN=1 ; BUILD=0
|
||||
case "$WORD" in
|
||||
cp|opt_*|pins_*|use_*|restore_*|gen*) ;;
|
||||
build_*) BUILD=1 ;;
|
||||
*) RUN=0 ;;
|
||||
esac
|
||||
|
||||
# Runnable command
|
||||
if [[ $RUN == 1 ]]; then
|
||||
echo "$CMD" >>"$LOG"
|
||||
RESULT=$( eval "$CMD >>\"$LOG\" 2>&1" )
|
||||
if [[ $BUILD == 1 ]]; then
|
||||
echo "--- Build $X done."
|
||||
echo >>"$LOG"
|
||||
X=$((X+1))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done <.travis.yml
|
||||
|
||||
cd - >/dev/null
|
9
buildroot/bin/use_example_configs
Normal file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
restore_configs
|
||||
|
||||
cp Marlin/example_configurations/"$@"/Configuration* Marlin/
|
||||
|
||||
if [ -f "Marlin/example_configurations/$@/_Bootscreen.h" ]; then
|
||||
cp "Marlin/example_configurations/$@/_Bootscreen.h" Marlin/
|
||||
fi
|
23
buildroot/etc/.astylerc
Normal file
|
@ -0,0 +1,23 @@
|
|||
--style=google
|
||||
--keep-one-line-blocks
|
||||
|
||||
--indent=spaces=2
|
||||
--indent-preproc-block
|
||||
--indent-preproc-define
|
||||
--indent-col1-comments
|
||||
|
||||
--remove-brackets
|
||||
--break-after-logical
|
||||
--delete-empty-lines
|
||||
|
||||
--pad-oper
|
||||
--pad-header
|
||||
--unpad-paren
|
||||
--align-pointer=type
|
||||
--align-reference=type
|
||||
|
||||
--attach-classes
|
||||
--attach-inlines
|
||||
--keep-one-line-statements
|
||||
|
||||
--indent-namespaces
|
20
buildroot/share/PlatformIO/boards/at90usb1286.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"build": {
|
||||
"core": "teensy",
|
||||
"extra_flags": "-DTEENSY2PP",
|
||||
"f_cpu": "16000000L",
|
||||
"mcu": "at90usb1286"
|
||||
},
|
||||
"frameworks": [
|
||||
"arduino"
|
||||
],
|
||||
"name": "at90usb1286.json",
|
||||
"upload": {
|
||||
"maximum_ram_size": 8192,
|
||||
"maximum_size": 122880,
|
||||
"require_upload_port": true,
|
||||
"protocol": ""
|
||||
},
|
||||
"url": "https://github.com/MarlinFirmware/Marlin",
|
||||
"vendor": "various"
|
||||
}
|
1455
buildroot/share/atom/auto_build.py
Normal file
15478
buildroot/share/atom/avrdude.conf
Normal file
BIN
buildroot/share/atom/avrdude_5.10_linux
Normal file
BIN
buildroot/share/atom/avrdude_5.10_macOS
Normal file
15478
buildroot/share/atom/avrdude_linux.conf
Normal file
15272
buildroot/share/atom/avrdude_macOS.conf
Normal file
141
buildroot/share/atom/create_custom_upload_command_CDC.py
Normal file
|
@ -0,0 +1,141 @@
|
|||
#
|
||||
# Builds custom upload command
|
||||
# 1) Run platformio as a subprocess to find a COM port
|
||||
# 2) Build the upload command
|
||||
# 3) Exit and let upload tool do the work
|
||||
#
|
||||
# This script runs between completion of the library/dependencies installation and compilation.
|
||||
#
|
||||
# Will continue on if a COM port isn't found so that the compilation can be done.
|
||||
#
|
||||
|
||||
import subprocess
|
||||
import os
|
||||
import sys
|
||||
from SCons.Script import DefaultEnvironment
|
||||
import platform
|
||||
current_OS = platform.system()
|
||||
|
||||
env = DefaultEnvironment()
|
||||
|
||||
build_type = os.environ.get("BUILD_TYPE", 'Not Set')
|
||||
|
||||
|
||||
if not(build_type == 'upload' or build_type == 'traceback' or build_type == 'Not Set') :
|
||||
env.Replace(UPLOAD_PROTOCOL = 'teensy-gui') # run normal Teensy2 scripts
|
||||
else:
|
||||
com_first = ''
|
||||
com_last = ''
|
||||
com_CDC = ''
|
||||
description_first = ''
|
||||
description_last = ''
|
||||
description_CDC = ''
|
||||
|
||||
#
|
||||
# grab the first com port that pops up unless we find one we know for sure
|
||||
# is a CDC device
|
||||
#
|
||||
def get_com_port(com_search_text, descr_search_text, start):
|
||||
|
||||
global com_first
|
||||
global com_last
|
||||
global com_CDC
|
||||
global description_first
|
||||
global description_last
|
||||
global description_CDC
|
||||
|
||||
|
||||
print '\nLooking for Serial Port\n'
|
||||
|
||||
# stream output from subprocess and split it into lines
|
||||
pio_subprocess = subprocess.Popen(['platformio', 'device', 'list'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
looking_for_description = False
|
||||
for line in iter(pio_subprocess.stdout.readline, ''):
|
||||
if 0 <= line.find(com_search_text):
|
||||
looking_for_description = True
|
||||
com_last = line.replace('\n', '')
|
||||
if com_first == '':
|
||||
com_first = com_last
|
||||
if 0 <= line.find(descr_search_text) and looking_for_description:
|
||||
looking_for_description = False
|
||||
description_last = line[ start : ]
|
||||
if description_first == '':
|
||||
description_first = description_last
|
||||
if 0 <= description_last.find('CDC'):
|
||||
com_CDC = com_last
|
||||
description_CDC = description_last
|
||||
|
||||
if com_CDC == '' and not(com_first == ''):
|
||||
com_CDC = com_first
|
||||
description_CDC = description_first
|
||||
elif com_CDC == '':
|
||||
com_CDC = 'COM_PORT_NOT_FOUND'
|
||||
|
||||
while 0 <= com_CDC.find('\n'):
|
||||
com_CDC = com_CDC.replace('\n', '')
|
||||
while 0 <= com_CDC.find('\r'):
|
||||
com_CDC = com_CDC.replace('\r', '')
|
||||
|
||||
if com_CDC == 'COM_PORT_NOT_FOUND':
|
||||
print com_CDC, '\n'
|
||||
else:
|
||||
print 'FOUND: ' ,com_CDC
|
||||
print 'DESCRIPTION: ', description_CDC , '\n'
|
||||
|
||||
if current_OS == 'Windows':
|
||||
|
||||
get_com_port('COM', 'Hardware ID:', 13)
|
||||
|
||||
# avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf'
|
||||
avrdude_conf_path = 'buildroot\\share\\atom\\avrdude.conf'
|
||||
|
||||
avrdude_exe_path = 'buildroot\\share\\atom\\avrdude_5.10.exe'
|
||||
|
||||
# source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex'
|
||||
source_path = '.pioenvs\\' + env.get("PIOENV") + '\\firmware.hex'
|
||||
|
||||
upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i'
|
||||
|
||||
|
||||
if current_OS == 'Darwin': # MAC
|
||||
|
||||
get_com_port('usbmodem', 'Description:', 13)
|
||||
|
||||
# avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf'
|
||||
avrdude_conf_path = 'buildroot/share/atom/avrdude_macOS.conf'
|
||||
|
||||
|
||||
avrdude_exe_path = 'buildroot/share/atom/avrdude_5.10_macOS'
|
||||
|
||||
# source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex'
|
||||
source_path = '.pioenvs/' + env.get("PIOENV") + '/firmware.hex'
|
||||
|
||||
|
||||
# upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i'
|
||||
upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i'
|
||||
print 'upload_string: ', upload_string
|
||||
|
||||
|
||||
|
||||
if current_OS == 'Linux':
|
||||
|
||||
get_com_port('/dev/tty', 'Description:', 13)
|
||||
|
||||
# avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf'
|
||||
avrdude_conf_path = 'buildroot/share/atom/avrdude_linux.conf'
|
||||
|
||||
|
||||
avrdude_exe_path = 'buildroot/share/atom/avrdude_5.10_linux'
|
||||
# source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex'
|
||||
source_path = '.pioenvs/' + env.get("PIOENV") + '/firmware.hex'
|
||||
|
||||
# upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i'
|
||||
upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i'
|
||||
|
||||
|
||||
env.Replace(
|
||||
UPLOADCMD = upload_string,
|
||||
MAXIMUM_RAM_SIZE = 8192,
|
||||
MAXIMUM_SIZE = 130048
|
||||
)
|
42
buildroot/share/atom/create_custom_upload_command_DFU.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
#
|
||||
# Builds custom upload command
|
||||
# 1) Run platformio as a subprocess to find a COM port
|
||||
# 2) Build the upload command
|
||||
# 3) Exit and let upload tool do the work
|
||||
#
|
||||
# This script runs between completion of the library/dependencies installation and compilation.
|
||||
#
|
||||
# Will continue on if a COM port isn't found so that the compilation can be done.
|
||||
#
|
||||
|
||||
import os
|
||||
import sys
|
||||
from SCons.Script import DefaultEnvironment
|
||||
import platform
|
||||
current_OS = platform.system()
|
||||
|
||||
env = DefaultEnvironment()
|
||||
|
||||
build_type = os.environ.get("BUILD_TYPE", 'Not Set')
|
||||
if not(build_type == 'upload' or build_type == 'traceback' or build_type == 'Not Set') :
|
||||
env.Replace(UPLOAD_PROTOCOL = 'teensy-gui') # run normal Teensy2 scripts
|
||||
else:
|
||||
|
||||
if current_OS == 'Windows':
|
||||
avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf'
|
||||
|
||||
source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex'
|
||||
|
||||
upload_string = 'avrdude -p usb1286 -c flip1 -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i'
|
||||
|
||||
else:
|
||||
source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex'
|
||||
|
||||
upload_string = 'avrdude -p usb1286 -c flip1 -U flash:w:' + source_path + ':i'
|
||||
|
||||
|
||||
env.Replace(
|
||||
UPLOADCMD = upload_string,
|
||||
MAXIMUM_RAM_SIZE = 8192,
|
||||
MAXIMUM_SIZE = 130048
|
||||
)
|
BIN
buildroot/share/fonts/HD44780_C.fon
Normal file
BIN
buildroot/share/fonts/HD44780_J.fon
Normal file
BIN
buildroot/share/fonts/HD44780_W.fon
Normal file
BIN
buildroot/share/fonts/ISO10646-1-tr.fon
Normal file
BIN
buildroot/share/fonts/ISO10646-1.fon
Normal file
BIN
buildroot/share/fonts/ISO10646-4_Greek.fon
Normal file
BIN
buildroot/share/fonts/ISO10646-5_Cyrillic.fon
Normal file
BIN
buildroot/share/fonts/ISO10646_CN.fon
Normal file
BIN
buildroot/share/fonts/ISO10646_CZ.fon
Normal file
BIN
buildroot/share/fonts/ISO10646_Kana.fon
Normal file
BIN
buildroot/share/fonts/ISO10646_SK.fon
Normal file
BIN
buildroot/share/fonts/Marlin_symbols.fon
Normal file
23
buildroot/share/fonts/README.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Marlin fonts
|
||||
|
||||
|
||||
## Author and license
|
||||
The original author of the following font files is [A. Hardtung](https://github.com/AnHardt).
|
||||
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
- HD44780_C.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
|
||||
- HD44780_J.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
|
||||
- HD44780_W.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
|
||||
- ISO10646-1.fon ([be79235](https://github.com/MarlinFirmware/Marlin/commit/be79235ef255a5c42fd385820447ec351f23b9b1))
|
||||
- ISO10646_5_Cyrillic.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
|
||||
- ISO10646_CN.fon ([6b1b718](https://github.com/MarlinFirmware/Marlin/commit/6b1b71837c98ceab55db7433357a13cd829d1ede))
|
||||
- ISO10646_Kana.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
|
||||
- Marlin_symbols.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
|
||||
|
||||
Additional changes to the original font files being distritubted with Marlin are copyrighted under the terms of the [GPLv3](http://www.gnu.org/licenses/gpl-3.0.txt) license.
|
||||
|
||||
|
||||
## Documentation
|
||||
For detailed information about [adding new fonts](http://www.marlinfw.org/docs/development/fonts.html) to Marlin visit our documentation website.
|
10
buildroot/share/fonts/make_fonts.bat
Normal file
|
@ -0,0 +1,10 @@
|
|||
.\bdf2u8g.exe -b 1 -e 9 Marlin_symbols.bdf Marlin_symbols dogm_font_data_Marlin_symbols.h
|
||||
.\bdf2u8g.exe -b 16 -e 255 HD44780_W.bdf HD44780_W_5x7 dogm_font_data_HD44780_W.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 HD44780_C.bdf HD44780_C_5x7 dogm_font_data_HD44780_C.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 HD44780_J.bdf HD44780_J_5x7 dogm_font_data_HD44780_J.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 ISO10646-1.bdf ISO10646_1_5x7 dogm_font_data_ISO10646_1.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 ISO10646-1-tr.bdf ISO10646_1_tr_5x7 dogm_font_data_ISO10646_1-tr.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 ISO10646_5_Cyrillic.bdf ISO10646_5_Cyrillic_5x7 dogm_font_data_ISO10646_5_Cyrillic.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 ISO10646_Kana.bdf ISO10646_Kana_5x7 dogm_font_data_ISO10646_Kana.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 ISO10646_CN.bdf ISO10646_CN dogm_font_data_ISO10646_CN.h
|
||||
.\bdf2u8g.exe -b 32 -e 255 ISO10646_4_Greek.bdf ISO10646_Greek_5x7 dogm_font_data_ISO10646_Greek.h
|
59
buildroot/share/git/README.md
Normal file
|
@ -0,0 +1,59 @@
|
|||
## Marlin Github Helper Scripts
|
||||
|
||||
### Introduction
|
||||
|
||||
A Pull Request is often just the start of a longer process of patching and refining the code until it's ready to merge. In that process it's common to accumulate a lot of commits, some of which are non-functional. Before merging any PR, excess commits need to be "squashed" and sometimes rearranged or reworked to produce a well-packaged set of changes and keep the commit history relatively clean.
|
||||
|
||||
In addition, while a PR is being worked on other commits may be merged, leading to conflicts that need resolution. For this reason, it's a best practice to periodically refresh the PR so the working copy closely reflects the final merge into upstream `MarlinFirmware`.
|
||||
|
||||
#### Merge vs Rebase
|
||||
|
||||
If you plan to create PRs and work on them after submission I recommend not using Github Desktop to sync and merge. Use the command line instead. Github Desktop provides a "merge" option, but I've found that "`git rebase`" is much cleaner and easier to manage. Merge applies new work _after_ your commits, which buries them deeper in the commit history and makes it hard to bring them together as a final packaged unit. Rebase helpfully moves your commits to the tip of the branch, ensuring that your commits are adapted to the current code. This makes it easier to keep revising the commits in-place.
|
||||
|
||||
### The Scripts
|
||||
|
||||
The following scripts can be used on any system with a GNU environment to speed up the process of working with Marlin branches and submitting changes to the project.
|
||||
|
||||
#### Remotes
|
||||
|
||||
File|Description
|
||||
----|-----------
|
||||
mfadd [user]|Add and Fetch Remote - Add another Github user's fork of Marlin as a remote, then fetch it. Optionally, check out one of their branches.
|
||||
mfinit|Init Working Copy - Create a remote named '`upstream`' (for use by the other scripts) pointing to the '`MarlinFirmware`' fork. This only needs to be used once. Newer versions of Github Desktop may create `upstream` on your behalf.
|
||||
|
||||
#### Branches
|
||||
|
||||
File|Description
|
||||
----|-----------
|
||||
mfnew [branch]|New Branch - Creates a new branch based on `upstream/[PR-target]`. All new work should start with this command.
|
||||
mffp|Fast Push - Push the HEAD or a commit ID to `upstream` immediately. Requires privileged access to the MarlinFirmware repo.
|
||||
firstpush|Push the current branch to 'origin' -your fork on Github- and set it to track '`origin`'. The branch needs to reside on Github before you can use it to make a PR.
|
||||
|
||||
#### Making / Amending PRs
|
||||
|
||||
File|Description
|
||||
----|-----------
|
||||
mfpr|Pull Request - Open the Compare / Pull Request page on Github for the current branch.
|
||||
mfrb|Do a `git rebase` then `git rebase -i` of the current branch onto `upstream/[PR-target]`. Use this to edit your commits anytime.
|
||||
mfqp|Quick Patch - Commit all current changes as "patch", then do `mfrb`, followed by `git push -f` if no conflicts need resolution.
|
||||
|
||||
#### Documentation
|
||||
|
||||
File|Description
|
||||
----|-----------
|
||||
mfdoc|Build the documentation and preview it locally.
|
||||
mfpub|Build the documentation and publish it to marlinfw.org via Github.
|
||||
|
||||
#### Utilities
|
||||
|
||||
File|Description
|
||||
----|-----------
|
||||
ghtp -[h/s]|Set the protocol to use for all remotes. -h for HTTPS, -s for SSL.
|
||||
mfinfo|This utility script is used by the other scripts to get:<br/>- The upstream project ('`MarlinFirmware`')<br/>- the '`origin`' project (i.e., your Github username),<br/>- the repository name ('`Marlin`'),<br/>- the PR target branch ('`bugfix-1.1.x`'), and<br/>- the current branch (or the first command-line argument).<br/><br/>By itself, `mfinfo` simply prints these values to the console.
|
||||
mfclean |Prune your merged and remotely-deleted branches.
|
||||
|
||||
---
|
||||
|
||||
### Examples
|
||||
|
||||
Coming Soon!
|
28
buildroot/share/git/firstpush
Normal file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# firstpush
|
||||
#
|
||||
# Push a branch to 'origin' and open the
|
||||
# commit log to watch Travis CI progress.
|
||||
#
|
||||
|
||||
[[ $# == 0 ]] || { echo "Usage: `basename $0`" 1>&2 ; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo) || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
FORK=${INFO[1]}
|
||||
REPO=${INFO[2]}
|
||||
BRANCH=${INFO[5]}
|
||||
|
||||
git push --set-upstream origin $BRANCH
|
||||
|
||||
TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
|
||||
URL="https://github.com/$FORK/$REPO/commits/$BRANCH"
|
||||
|
||||
if [ -z "$TOOL" ]; then
|
||||
echo "Can't find a tool to open the URL:"
|
||||
echo $URL
|
||||
else
|
||||
echo "Viewing commits on $BRANCH..."
|
||||
"$TOOL" "$URL"
|
||||
fi
|
33
buildroot/share/git/ghtp
Normal file
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# ghtp (GitHub Transport Protocol)
|
||||
#
|
||||
# Set all remotes in the current repo to HTTPS or SSH connection.
|
||||
# Useful when switching environments, using public wifi, etc.
|
||||
#
|
||||
|
||||
GH_SSH="git@github\.com:"
|
||||
GH_HTTPS="https:\/\/github\.com\/"
|
||||
|
||||
case "$1" in
|
||||
-[Hh]) TYPE=HTTPS ; MATCH="git@" ; FORMULA="$GH_SSH/$GH_HTTPS" ;;
|
||||
-[Ss]) TYPE=SSH ; MATCH="https:" ; FORMULA="$GH_HTTPS/$GH_SSH" ;;
|
||||
*)
|
||||
echo "Usage: `basename $0` -h | -s" 1>&2
|
||||
echo -e " \e[0;92m-h\e[0m to switch to HTTPS" 1>&2
|
||||
echo -e " \e[0;92m-s\e[0m to switch to SSH" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
REMOTES=$(git remote -v | egrep "\t$MATCH" | gawk '{print $1 " " $2}' | sort -u | sed "s/$FORMULA/")
|
||||
|
||||
if [[ -z $REMOTES ]]; then
|
||||
echo "Nothing to do." ; exit
|
||||
fi
|
||||
|
||||
echo "$REMOTES" | xargs -n2 git remote set-url
|
||||
|
||||
echo -n "Remotes set to $TYPE: "
|
||||
echo "$REMOTES" | gawk '{printf "%s ", $1}'
|
||||
echo
|
32
buildroot/share/git/mfadd
Normal file
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfadd
|
||||
#
|
||||
# Add a remote and fetch it. Optionally copy a branch.
|
||||
#
|
||||
# Example: mfadd thinkyhead:patch-1 copy_of_patch-1
|
||||
#
|
||||
|
||||
[[ $# > 0 && $# < 3 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` (user | ref copyname)" 1>&2 ; exit 1; }
|
||||
|
||||
# If a colon is included, split the parts
|
||||
if [[ $1 =~ ":" ]]; then
|
||||
IFS=':' read -a DATA <<< "$1"
|
||||
USER=${DATA[0]}
|
||||
BRANCH=${DATA[1]}
|
||||
NAME=$2
|
||||
else
|
||||
USER=$1
|
||||
fi
|
||||
|
||||
MFINFO=$(mfinfo) || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
REPO=${INFO[2]}
|
||||
|
||||
set -e
|
||||
|
||||
echo "Adding and fetching $USER..."
|
||||
git remote add "$USER" "git@github.com:$USER/$REPO.git" >/dev/null 2>&1 || echo "Remote exists."
|
||||
git fetch "$USER"
|
||||
|
||||
[[ ! -z "$BRANCH" && ! -z "$NAME" ]] && git checkout $USER/$BRANCH -b $NAME
|
30
buildroot/share/git/mfclean
Normal file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfclean
|
||||
#
|
||||
# Prune all your merged branches and any branches whose remotes are gone
|
||||
# Great way to clean up your branches after messing around a lot
|
||||
#
|
||||
|
||||
KEEP="RC|RCBugFix|dev|master|bugfix-1|bugfix-2"
|
||||
|
||||
echo "Fetching latest upstream and origin..."
|
||||
git fetch upstream
|
||||
git fetch origin
|
||||
echo
|
||||
|
||||
echo "Pruning Merged Branches..."
|
||||
git branch --merged | egrep -v "^\*|$KEEP" | xargs -n 1 git branch -d
|
||||
echo
|
||||
|
||||
echo "Pruning Remotely-deleted Branches..."
|
||||
git branch -vv | egrep -v "^\*|$KEEP" | grep ': gone]' | gawk '{print $1}' | xargs -n 1 git branch -D
|
||||
echo
|
||||
|
||||
# List fork branches that don't match local branches
|
||||
echo "You may want to remove (or checkout) these refs..."
|
||||
comm -23 \
|
||||
<(git branch --all | sed 's/^[\* ] //' | grep origin/ | grep -v "\->" | awk '{ print $1; }' | sed 's/remotes\/origin\///') \
|
||||
<(git branch --all | sed 's/^[\* ] //' | grep -v remotes/ | awk '{ print $1; }') \
|
||||
| awk '{ print "git branch -d -r origin/" $1; print "git checkout origin/" $1 " -b " $1; print ""; }'
|
||||
echo
|
35
buildroot/share/git/mfdoc
Normal file
|
@ -0,0 +1,35 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfdoc
|
||||
#
|
||||
# Start Jekyll in watch mode to work on Marlin Documentation and preview locally
|
||||
#
|
||||
|
||||
[[ $# == 0 ]] || { echo "Usage: `basename $0`" 1>&2 ; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo "$@") || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
ORG=${INFO[0]}
|
||||
REPO=${INFO[2]}
|
||||
BRANCH=${INFO[5]}
|
||||
|
||||
[[ $ORG == "MarlinFirmware" && $REPO == "MarlinDocumentation" ]] || { echo "Wrong repository." 1>&2; exit 1; }
|
||||
|
||||
opensite() {
|
||||
TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
|
||||
URL="http://127.0.0.1:4000/"
|
||||
if [ -z "$TOOL" ]; then
|
||||
echo "Can't find a tool to open the URL:"
|
||||
echo $URL
|
||||
else
|
||||
echo "Opening preview site in the browser..."
|
||||
"$TOOL" "$URL"
|
||||
fi
|
||||
}
|
||||
|
||||
echo "Previewing MarlinDocumentation..."
|
||||
|
||||
# wait to open the url for about 8s
|
||||
( sleep 45; opensite ) &
|
||||
|
||||
bundle exec jekyll serve --watch --incremental
|
27
buildroot/share/git/mffp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mffp
|
||||
#
|
||||
# Push the given commit (or HEAD) upstream immediately.
|
||||
# By default: `git push upstream HEAD:bugfix-1.1.x`
|
||||
#
|
||||
|
||||
[[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` [1|2] [commit-id]" 1>&2 ; exit 1; }
|
||||
|
||||
if [[ $1 == '1' || $1 == '2' ]]; then
|
||||
MFINFO=$(mfinfo "$1") || exit 1
|
||||
REF=${2:-HEAD}
|
||||
else
|
||||
MFINFO=$(mfinfo) || exit 1
|
||||
REF=${1:-HEAD}
|
||||
fi
|
||||
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
ORG=${INFO[0]}
|
||||
TARG=${INFO[3]}
|
||||
|
||||
if [[ $ORG == "MarlinFirmware" ]]; then
|
||||
git push upstream $REF:$TARG
|
||||
else
|
||||
echo "Not a MarlinFirmware working copy."; exit 1
|
||||
fi
|
57
buildroot/share/git/mfinfo
Normal file
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfinfo
|
||||
#
|
||||
# Provide the following info about the working directory:
|
||||
#
|
||||
# - Remote (upstream) Org name (MarlinFirmware)
|
||||
# - Remote (origin) Org name (your Github username)
|
||||
# - Repo Name (Marlin, MarlinDev, MarlinDocumentation)
|
||||
# - PR Target branch (bugfix-1.1.x, bugfix-2.0.x, or master)
|
||||
# - Branch Arg (the branch argument or current branch)
|
||||
# - Current Branch
|
||||
#
|
||||
|
||||
usage() {
|
||||
echo "Usage: `basename $0` [1|2] [branch]" 1>&2
|
||||
}
|
||||
|
||||
[[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { usage; exit 1; }
|
||||
|
||||
CURR=$(git branch 2>/dev/null | grep ^* | sed 's/\* //g')
|
||||
[[ -z $CURR ]] && { echo "No git repository here!" 1>&2 ; exit 1; }
|
||||
[[ $CURR == "(no"* ]] && { echo "Git is busy with merge, rebase, etc." 1>&2 ; exit 1; }
|
||||
|
||||
REPO=$(git remote get-url upstream 2>/dev/null | sed -E 's/.*\/(.*)\.git/\1/')
|
||||
[[ -z $REPO ]] && { echo "`basename $0`: No 'upstream' remote found. (Did you run mfinit?)" 1>&2 ; exit 1; }
|
||||
|
||||
ORG=$(git remote get-url upstream 2>/dev/null | sed -E 's/.*[\/:](.*)\/.*$/\1/')
|
||||
[[ $ORG == MarlinFirmware ]] || { echo "`basename $0`: Not a Marlin repository." 1>&2 ; exit 1; }
|
||||
|
||||
case "$REPO" in
|
||||
Marlin ) TARG=bugfix-1.1.x ;
|
||||
[[ $# > 0 ]] && [[ $1 == 2 ]] && TARG=bugfix-2.0.x
|
||||
;;
|
||||
MarlinDocumentation ) TARG=master ;;
|
||||
esac
|
||||
|
||||
FORK=$(git remote get-url origin 2>/dev/null | sed -E 's/.*[\/:](.*)\/.*$/\1/')
|
||||
|
||||
# BRANCH can be given as the last argument
|
||||
case "$#" in
|
||||
0 ) BRANCH=$CURR ;;
|
||||
1 )
|
||||
case "$1" in
|
||||
1|2) BRANCH=$CURR ;;
|
||||
*) BRANCH=$1 ;;
|
||||
esac
|
||||
;;
|
||||
2 )
|
||||
case "$1" in
|
||||
1|2) BRANCH=$2 ;;
|
||||
*) usage ; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "$ORG $FORK $REPO $TARG $BRANCH $CURR"
|
17
buildroot/share/git/mfinit
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfinit
|
||||
#
|
||||
# Create the upstream remote for a forked repository
|
||||
#
|
||||
|
||||
[[ $# == 0 ]] || { echo "Usage: `basename $0`" 1>&2 ; exit 1; }
|
||||
|
||||
[[ -z $(git branch 2>/dev/null | grep ^* | sed 's/\* //g') ]] && { echo "No git repository here!" 1>&2 ; exit 1; }
|
||||
|
||||
REPO=$(git remote get-url origin 2>/dev/null | sed -E 's/.*\/(.*)\.git/\1/')
|
||||
[[ -z $REPO ]] && { echo "`basename $0`: No 'origin' remote found." 1>&2 ; exit 1; }
|
||||
|
||||
echo "Adding 'upstream' remote for convenience."
|
||||
git remote add upstream "git@github.com:MarlinFirmware/$REPO.git"
|
||||
git fetch upstream
|
34
buildroot/share/git/mfnew
Normal file
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfnew
|
||||
#
|
||||
# Create a new branch from the default target with the given name
|
||||
#
|
||||
|
||||
usage() {
|
||||
echo "Usage: `basename $0` [1|2] [name]" 1>&2
|
||||
}
|
||||
|
||||
[[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { usage; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo "$@") || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
TARG=${INFO[3]}
|
||||
BRANCH=pr_for_$TARG-$(date +"%G-%m-%d_%H.%M.%S")
|
||||
|
||||
# BRANCH can be given as the last argument
|
||||
case "$#" in
|
||||
1 ) case "$1" in
|
||||
1|2) ;;
|
||||
*) BRANCH=$1 ;;
|
||||
esac
|
||||
;;
|
||||
2 ) case "$1" in
|
||||
1|2) BRANCH=$2 ;;
|
||||
*) usage ; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
git fetch upstream
|
||||
git checkout --no-track upstream/$TARG -b $BRANCH
|
37
buildroot/share/git/mfpr
Normal file
|
@ -0,0 +1,37 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfpr
|
||||
#
|
||||
# Make a PR of the current branch against RCBugFix or dev
|
||||
#
|
||||
|
||||
[[ $# < 2 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` [branch]" 1>&2 ; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo "$@") || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
ORG=${INFO[0]}
|
||||
FORK=${INFO[1]}
|
||||
REPO=${INFO[2]}
|
||||
TARG=${INFO[3]}
|
||||
BRANCH=${INFO[4]}
|
||||
OLDBRANCH=${INFO[5]}
|
||||
|
||||
[[ $BRANCH == $TARG ]] && { echo "Can't create a PR from the PR Target ($BRANCH). Make a copy first." 1>&2 ; exit 1; }
|
||||
|
||||
[[ $BRANCH != $OLDBRANCH ]] && { git checkout $BRANCH || exit 1; }
|
||||
|
||||
# See if it's been pushed yet
|
||||
if [ -z "$(git branch -vv | grep ^\* | grep \\[origin)" ]; then firstpush; fi
|
||||
|
||||
TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
|
||||
URL="https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1"
|
||||
|
||||
if [ -z "$TOOL" ]; then
|
||||
echo "Can't find a tool to open the URL:"
|
||||
echo $URL
|
||||
else
|
||||
echo "Opening a New PR Form..."
|
||||
"$TOOL" "$URL"
|
||||
fi
|
||||
|
||||
[[ $BRANCH != $OLDBRANCH ]] && git checkout $OLDBRANCH
|
127
buildroot/share/git/mfpub
Normal file
|
@ -0,0 +1,127 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfpub
|
||||
#
|
||||
# Use Jekyll to generate Marlin Documentation, which is then
|
||||
# git-pushed to Github to publish it to the live site.
|
||||
# This publishes the current branch, and doesn't force
|
||||
# changes to be pushed to the 'master' branch. Be sure to push
|
||||
# any permanent changes to 'master'.
|
||||
#
|
||||
|
||||
[[ $# < 2 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` [branch]" 1>&2 ; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo "$@") || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
ORG=${INFO[0]}
|
||||
FORK=${INFO[1]}
|
||||
REPO=${INFO[2]}
|
||||
TARG=${INFO[3]}
|
||||
BRANCH=${INFO[4]}
|
||||
|
||||
if [[ $ORG != "MarlinFirmware" || $REPO != "MarlinDocumentation" ]]; then
|
||||
echo "Wrong repository."
|
||||
exit
|
||||
fi
|
||||
|
||||
# Check out the named branch (or stay in current)
|
||||
git checkout $BRANCH
|
||||
|
||||
if [[ $BRANCH == "gh-pages" ]]; then
|
||||
echo "Can't build from 'gh-pages.' Only the Jekyll branches (based on 'master')."
|
||||
exit
|
||||
fi
|
||||
|
||||
echo "Stashing any changes to files..."
|
||||
echo "Don't forget to update and push 'master'!"
|
||||
# GOJF Card
|
||||
[[ $(git stash) != "No local "* ]] && HAS_STASH=1
|
||||
|
||||
COMMIT=$( git log --format="%H" -n 1 )
|
||||
|
||||
# Clean out changes and other junk in the branch
|
||||
git clean -d -f
|
||||
|
||||
# Push 'master' to the fork and make a proper PR...
|
||||
if [[ $BRANCH == "master" ]]; then
|
||||
|
||||
# Don't lose upstream changes!
|
||||
git fetch upstream
|
||||
|
||||
# Rebase onto latest master
|
||||
if git rebase upstream/master; then
|
||||
|
||||
# Allow working directly with the main fork
|
||||
echo
|
||||
echo -n "Pushing to origin/master... "
|
||||
git push -f origin
|
||||
|
||||
echo
|
||||
echo -n "Pushing to upstream/master... "
|
||||
git push -f upstream
|
||||
|
||||
else
|
||||
|
||||
echo "Merge conflicts? Stopping here."
|
||||
exit
|
||||
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
if [ -z "$(git branch -vv | grep ^\* | grep \\[origin)" ]; then
|
||||
firstpush
|
||||
else
|
||||
echo
|
||||
echo -n "Pushing to origin/$BRANCH... "
|
||||
git push -f origin
|
||||
fi
|
||||
|
||||
TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
|
||||
URL="https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1"
|
||||
|
||||
if [ -z "$TOOL" ]; then
|
||||
echo "Can't find a tool to open the URL:"
|
||||
echo $URL
|
||||
else
|
||||
echo "Opening a New PR Form..."
|
||||
"$TOOL" "$URL"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Uncomment to compress the final html files
|
||||
# mv ./_plugins/jekyll-press.rb-disabled ./_plugins/jekyll-press.rb
|
||||
# bundle install
|
||||
|
||||
echo
|
||||
echo "Generating MarlinDocumentation..."
|
||||
|
||||
# build the site statically and proof it
|
||||
bundle exec jekyll build --profile --trace --no-watch
|
||||
bundle exec htmlproofer ./_site --only-4xx --allow-hash-href --check-favicon --check-html --url-swap ".*marlinfw.org/:/"
|
||||
|
||||
# Sync the built site into a temporary folder
|
||||
TMPFOLDER=$( mktemp -d )
|
||||
rsync -av _site/ ${TMPFOLDER}/
|
||||
|
||||
# Clean out changes and other junk in the branch
|
||||
git reset --hard
|
||||
git clean -d -f
|
||||
|
||||
# Copy built-site into the gh-pages branch
|
||||
git checkout gh-pages
|
||||
rsync -av ${TMPFOLDER}/ ./
|
||||
|
||||
# Commit and push the new live site directly
|
||||
git add --all
|
||||
git commit --message "Built from ${COMMIT}"
|
||||
git push upstream
|
||||
|
||||
# remove the temporary folder
|
||||
rm -rf ${TMPFOLDER}
|
||||
|
||||
# Go back to the branch we started from
|
||||
git checkout $BRANCH
|
||||
|
||||
[[ $HAS_STASH == 1 ]] && git stash pop
|
27
buildroot/share/git/mfqp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfqp
|
||||
#
|
||||
# Add all changed files, commit as "patch", do `mfrb` and `git push -f`
|
||||
#
|
||||
|
||||
[[ $# < 2 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` [1|2]" 1>&2 ; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo "$@") || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
REPO=${INFO[2]}
|
||||
TARG=${INFO[3]}
|
||||
CURR=${INFO[5]}
|
||||
|
||||
git add .
|
||||
git commit -m "patch"
|
||||
|
||||
if [[ $CURR == $TARG ]]; then
|
||||
if [[ $REPO == "MarlinDocumentation" ]]; then
|
||||
git rebase -i HEAD~2 && git push -f
|
||||
else
|
||||
echo "Don't alter the PR Target branch."; exit 1
|
||||
fi
|
||||
else
|
||||
mfrb "$@" && git push -f
|
||||
fi
|
19
buildroot/share/git/mfrb
Normal file
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfrb
|
||||
#
|
||||
# Do "git rebase -i" against the "target" branch (bugfix-1.1.x, bugfix-2.0.x, or master)
|
||||
#
|
||||
|
||||
[[ $# < 2 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` [1|2]" 1>&2 ; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo "$@") || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
TARG=${INFO[3]}
|
||||
CURR=${INFO[5]}
|
||||
|
||||
# If the branch isn't currently the PR target
|
||||
if [[ $TARG != $CURR ]]; then
|
||||
git fetch upstream
|
||||
git rebase upstream/$TARG && git rebase -i upstream/$TARG
|
||||
fi
|
48
buildroot/share/git/mfup
Normal file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# mfup
|
||||
#
|
||||
# - Fetch latest upstream and replace the PR Target branch with
|
||||
# - Rebase the (current or specified) branch on the PR Target
|
||||
# - Force-push the branch to 'origin'
|
||||
#
|
||||
|
||||
[[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` [1|2] [branch]" 1>&2 ; exit 1; }
|
||||
|
||||
MFINFO=$(mfinfo "$@") || exit 1
|
||||
IFS=' ' read -a INFO <<< "$MFINFO"
|
||||
ORG=${INFO[0]}
|
||||
FORK=${INFO[1]}
|
||||
REPO=${INFO[2]}
|
||||
TARG=${INFO[3]}
|
||||
BRANCH=${INFO[4]}
|
||||
CURR=${INFO[5]}
|
||||
|
||||
set -e
|
||||
|
||||
# Prevent accidental loss of current changes
|
||||
[[ $(git stash) != "No local "* ]] && HAS_STASH=1
|
||||
|
||||
echo "Fetching upstream ($ORG/$REPO)..."
|
||||
git fetch upstream
|
||||
|
||||
if [[ $BRANCH != $TARG ]]; then
|
||||
echo ; echo "Rebasing $BRANCH on $TARG..."
|
||||
if [[ $BRANCH == $CURR ]] || git checkout $BRANCH; then
|
||||
if git rebase upstream/$TARG; then
|
||||
git push -f
|
||||
else
|
||||
echo "Looks like merge conflicts. Stopping here."
|
||||
exit
|
||||
fi
|
||||
else
|
||||
echo "No such branch!"
|
||||
fi
|
||||
else
|
||||
git reset --hard upstream/$TARG
|
||||
fi
|
||||
|
||||
echo
|
||||
[[ $BRANCH != $CURR ]] && git checkout $CURR
|
||||
|
||||
[[ $HAS_STASH == 1 ]] && git stash pop
|
32
buildroot/share/pin_interrupt_test/pin_interrupt_test.ino
Normal file
|
@ -0,0 +1,32 @@
|
|||
// Search pins usable for endstop-interrupts
|
||||
// Compile with the same build settings you'd use for Marlin.
|
||||
|
||||
#if defined(ARDUINO_AVR_MEGA2560) || defined(ARDUINO_AVR_MEGA)
|
||||
#undef digitalPinToPCICR
|
||||
#define digitalPinToPCICR(p) ( ((p) >= 10 && (p) <= 15) || \
|
||||
((p) >= 50 && (p) <= 53) || \
|
||||
((p) >= 62 && (p) <= 69) ? &PCICR : (uint8_t *)0)
|
||||
#endif
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
Serial.println("PINs causing interrups are:");
|
||||
for (int i = 2; i < NUM_DIGITAL_PINS; i++) {
|
||||
if (digitalPinToPCICR(i) || (int)digitalPinToInterrupt(i) != -1) {
|
||||
for (int j = 0; j < NUM_ANALOG_INPUTS; j++) {
|
||||
if (analogInputToDigitalPin(j) == i) {
|
||||
Serial.print('A');
|
||||
Serial.print(j);
|
||||
Serial.print(" = ");
|
||||
}
|
||||
}
|
||||
Serial.print('D');
|
||||
Serial.println(i);
|
||||
}
|
||||
}
|
||||
Serial.println("Arduino pin numbering!");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// put your main code here, to run repeatedly:
|
||||
}
|
BIN
buildroot/share/pixmaps/logo/marlin-1080.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
buildroot/share/pixmaps/logo/marlin-250.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
buildroot/share/pixmaps/logo/marlin-old-250.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
buildroot/share/pixmaps/logo/marlin-old-627.png
Normal file
After Width: | Height: | Size: 39 KiB |
106
buildroot/share/pixmaps/logo/marlin-old.svg
Normal file
|
@ -0,0 +1,106 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="297mm"
|
||||
height="210mm"
|
||||
viewBox="0 0 1052.3622 744.09448"
|
||||
id="svg3359"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="marlin-old.svg"
|
||||
inkscape:export-filename="C:\Users\jbrazio\Desktop\marlin-old.png"
|
||||
inkscape:export-xdpi="27"
|
||||
inkscape:export-ydpi="27">
|
||||
<title
|
||||
id="title3362">Marlin Firmware</title>
|
||||
<defs
|
||||
id="defs3361" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.95552381"
|
||||
inkscape:cx="526.1811"
|
||||
inkscape:cy="372.04724"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1234"
|
||||
inkscape:window-height="878"
|
||||
inkscape:window-x="365"
|
||||
inkscape:window-y="46"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata3364">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Marlin Firmware</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Ahmet Cem TURAN</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>MarlinFirmware</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>João Brázio</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>marlin-logo-old</dc:identifier>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-308.26772)">
|
||||
<g
|
||||
id="g3335"
|
||||
transform="matrix(1.2688266,0,0,1.2688266,0.33525798,503.35041)">
|
||||
<path
|
||||
id="path3337"
|
||||
d="m 364.271,4.24 -312.9,0.26 -7,2.33 c -21.42,7.13 -38.03,25.09 -42.99,46.47 -1.37,5.89 -1.53,17.24 -1.29,88.98 0.28,81.931 0.29,82.24 2.5,88.74 6.46,18.97 21.811,34.33 40.7,40.74 l 8.08,2.739 360,0.28 c 330.609,0.25 360.609,0.14 367.5,-1.37 24.069,-5.26 42.26,-22.859 48.46,-46.869 1.22,-4.74 1.54,-12.301 1.54,-36.91 0,-30.881 -0.006,-185.553 -0.006,-185.553 0,0 -152.264,-0.097 -464.594,0.163 z m 388.85,76.75 68.75,69.771 -0.011,33.87 c -0.02,37.899 -0.5,41.85 -6.529,53.32 -6.57,12.51 -19.25,23.039 -32.92,27.329 l -7.04,2.22 -361.5,0 -361.5,0 -6.5,-2.34 c -17.34,-6.229 -30.4,-19.24 -36.22,-36.05 l -2.28,-6.61 0,-83 0,-83 2.31,-6.69 c 6.78,-19.62 24.62,-34.88 44.13,-37.75 3.061,-0.45 146.19,-0.82 318.061,-0.82 l 312.5,-0.01 68.749,69.76 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3339"
|
||||
d="m 540.871,119.04 c 0,57.4 0.229,68.15 1.59,74.75 4.97,24.069 21.26,37.209 46.149,37.209 l 8.311,0 -0.271,-14.629 -0.279,-14.631 -5.421,-0.439 c -6.039,-0.48 -9.51,-1.961 -12.76,-5.45 -4.87,-5.229 -4.8,-4.19 -5.109,-76.1 l -0.3,-67.75 -15.96,0 -15.949,0 0,67.04 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3341"
|
||||
d="m 96.871,61.58 c -16.21,4.25 -30.58,15.65 -37.42,29.66 -6.641,13.59 -6.58,12.86 -6.58,77.82 0,55.529 0.1,58.72 1.83,60.29 1.52,1.37 4.22,1.649 16,1.649 l 14.17,0 0.01,-58.75 c 0,-37.39 0.38,-60.1 1.04,-62.47 2.66,-9.58 13.22,-17.63 24.31,-18.52 12.82,-1.03 23.841,5.09 28.75,15.95 l 2.391,5.29 0.29,59.25 0.3,59.25 15.95,0 15.96,0 0,-57.819 c 0,-63.17 0.05,-63.81 5.819,-71.77 3.94,-5.44 11.851,-9.53 19.62,-10.16 12.36,-0.99 22.79,4.57 28.351,15.11 l 2.71,5.14 0.29,59.75 0.279,59.75 15.971,0 15.96,0 0,-59.34 c 0,-55.37 -0.13,-59.85 -1.931,-66.89 C 257.952,93.08 253.622,85.52 244.981,76.9 233.152,65.1 220.402,60 202.691,60 c -16.14,0 -27.949,4.52 -39.109,14.95 l -6.391,5.98 -2.18,-2.96 c -3.8,-5.14 -15.83,-12.79 -24.359,-15.48 -6.351,-2.01 -9.86,-2.479 -18.08,-2.42 -5.611,0.03 -12.67,0.71 -15.701,1.51 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3343"
|
||||
d="m 612.891,61.7 c -1.91,0.99 -4.5,3.33 -5.75,5.2 -2.04,3.05 -2.27,4.59 -2.27,15.25 l 0,11.85 16,0 16,0 0,-10.53 c 0,-11.8 -1.051,-15.37 -5.881,-19.91 -4.029,-3.79 -12.659,-4.68 -18.099,-1.86 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3345"
|
||||
d="m 314.871,106.34 c -10.95,3.26 -17.54,7.22 -26.09,15.66 -8.91,8.79 -14.74,19.339 -17.471,31.621 -2.46,11.06 -1.59,26.26 2.07,36.379 5.53,15.24 16.53,27.931 29.99,34.57 9.78,4.83 18.38,6.391 35.25,6.41 l 14.25,0.02 0,-15.379 0,-15.391 -13.25,-0.4 c -11.601,-0.359 -13.94,-0.729 -18.8,-2.97 -7.62,-3.521 -12.37,-7.97 -15.66,-14.68 -2.391,-4.86 -2.79,-6.9 -2.79,-14.181 0,-7.27 0.399,-9.319 2.78,-14.16 3.38,-6.889 9.229,-12.93 15.529,-16.029 6.66,-3.28 19.771,-3.28 25.98,0 6.12,3.24 11.99,9.49 15.06,16.04 l 2.65,5.649 0.3,35.75 0.29,35.75 44.96,0 44.95,0 0.02,-39.25 c 0.03,-44.39 -0.01,-44.18 7.84,-50.899 11.42,-9.78 29.91,-7.05 36.24,5.34 1.27,2.5 2.29,6.92 2.63,11.44 l 0.561,7.369 15.85,0 15.86,0 0,-6.84 c 0,-8.149 -2.98,-20.56 -6.771,-28.14 -5.63,-11.29 -18.86,-21.31 -32.32,-24.48 -7.54,-1.78 -22.6,-2 -30.109,-0.44 -14.79,3.06 -29.391,14.09 -35.601,26.9 -5.58,11.49 -6.199,15.83 -6.199,43.21 l 0,24.791 -13,0 -13,0 0,-20.34 c 0,-16.97 -0.33,-21.619 -1.97,-28.05 -5.82,-22.75 -23.29,-40.45 -45.49,-46.09 -9.088,-2.32 -25.309,-1.93 -34.539,0.82 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3347"
|
||||
d="m 705.081,105.56 c -18.091,4.86 -31.98,18.26 -37.771,36.439 -1.439,4.5 -1.84,10.381 -2.189,32.25 l -0.44,26.75 -13.91,0 -13.899,0 0,-47 0,-47 -16,0 -16,0 0,62 0,62 46,0 46,0 0,-36.449 c 0,-22.16 0.42,-38.41 1.069,-41.45 1.38,-6.431 5.771,-12.45 11.17,-15.31 3.391,-1.79 5.9,-2.26 12.261,-2.27 10.569,-0.03 16.04,2.91 19.899,10.66 l 2.601,5.21 0,39.811 0,39.799 13.89,0 c 12.189,0 14.18,-0.229 16.25,-1.91 l 2.36,-1.92 -0.011,-38.83 c 0,-33.729 -0.229,-39.67 -1.739,-45.129 -2.94,-10.681 -6.641,-17.25 -13.671,-24.28 -10.8,-10.79 -22.069,-14.98 -40.039,-14.86 -5.801,0.029 -12.922,0.699 -15.831,1.489 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
131
buildroot/share/pixmaps/logo/marlin.svg
Normal file
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 744.09448 1052.3622"
|
||||
enable-background="new 0 0 732.76 821.023"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="marlin.svg"
|
||||
inkscape:export-filename="C:\Users\jbrazio\Desktop\marlin.png"
|
||||
inkscape:export-xdpi="27.424898"
|
||||
inkscape:export-ydpi="27.424898"><title
|
||||
id="title3357">Marlin Firmware </title><metadata
|
||||
id="metadata55"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>Marlin Firmware </dc:title><dc:creator><cc:Agent><dc:title>Ahmet Cem TURAN</dc:title></cc:Agent></dc:creator><dc:publisher><cc:Agent><dc:title>João Brázio</dc:title></cc:Agent></dc:publisher><dc:rights><cc:Agent><dc:title>MarlinFirmware</dc:title></cc:Agent></dc:rights><dc:identifier>marlin-logo-new</dc:identifier></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs53" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1206"
|
||||
inkscape:window-height="871"
|
||||
id="namedview51"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.66897119"
|
||||
inkscape:cx="372.04724"
|
||||
inkscape:cy="526.1811"
|
||||
inkscape:window-x="309"
|
||||
inkscape:window-y="54"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1"
|
||||
units="mm"
|
||||
inkscape:snap-object-midpoints="false" /><g
|
||||
id="g3383"
|
||||
transform="matrix(1.0758487,0,0,-1.0758487,5.9413219,1144.5066)"><g
|
||||
id="g3"
|
||||
transform="matrix(0.9288179,0,0,-0.9288179,-0.00839045,956.02381)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5"
|
||||
d="m 484.324,3.644 c -11.78,8.81 -20.69,19.069 -29.891,34.38 -13.85,23.04 -20.51,39.79 -23.54,59.16 -2.22,14.22 -2.939,34.95 -1.59,45.84 0.8,6.5 0.8,6.5 23.5,6.59 25.48,0.11 33.09,1.03 48.19,5.85 33.22,10.61 50.779,19.66 68.77,35.44 4.25,3.73 9.03,7.87 10.61,9.2 4.56,3.83 18.27,20.479 23.3,28.29 2.521,3.92 6.13,9.5 8.021,12.39 1.88,2.9 4.319,7.28 5.409,9.75 2.21,4.99 4.511,6.15 3.44,1.74 -0.9,-3.771 -8.6,-18.76 -14.6,-28.42 -2.721,-4.4 -4.95,-8.32 -4.95,-8.73 0,-0.41 -2.021,-3.359 -4.5,-6.55 -2.471,-3.18 -4.5,-6.34 -4.5,-7.02 0,-0.67 -2.04,-3.08 -4.54,-5.36 -2.5,-2.271 -5.21,-5.71 -6.021,-7.65 -0.81,-1.939 -1.939,-3.52 -2.529,-3.52 -1.7,0 -16.91,-15.62 -16.91,-17.37 0,-0.87 -1.24,-2.22 -2.75,-3 -1.511,-0.79 -4.21,-2.82 -5.99,-4.53 -1.78,-1.7 -3.87,-3.1 -4.63,-3.1 -0.76,0 -1.97,-0.7 -2.68,-1.561 -1.261,-1.52 0.75,-0.89 12.14,3.811 2.22,0.92 3.22,0.64 7,-1.96 2.43,-1.67 9.99,-5.83 16.82,-9.25 26.25,-13.15 53.329,-18.29 68.64,-13.021 7.91,2.721 8.8,2.051 2.59,-1.93 -10.96,-7.03 -29.7,-12.07 -39.11,-10.51 -9.13,1.5 -23.8,4.75 -29.01,6.41 -14.42,4.609 -38.72,18.189 -40.41,22.59 -0.89,2.31 -3.279,0.189 -4.13,-3.65 -0.35,-1.609 -1.04,-2.93 -1.52,-2.93 -2.24,0 -7.94,-6.38 -8.53,-9.54 -0.4,-2.09 -1.37,-3.62 -2.55,-4 -2.3,-0.73 -4.88,-5.42 -4.88,-8.88 0,-1.79 -0.87,-2.98 -2.971,-4.061 -3.43,-1.779 -5.029,-4.31 -5.029,-7.949 0,-1.971 -0.851,-2.96 -3.721,-4.311 -4.55,-2.149 -6.25,-5.27 -6.27,-11.51 -0.01,-3.3 -0.42,-4.75 -1.36,-4.75 -2.529,0 -5.02,-3.97 -5.09,-8.11 -0.04,-2.75 -0.609,-4.34 -1.81,-5.01 -2.63,-1.47 -5,-6.73 -4.3,-9.54 0.409,-1.63 -0.03,-3.26 -1.311,-4.89 -1.66,-2.11 -1.78,-3.021 -0.88,-6.58 0.96,-3.78 0.85,-4.28 -1.26,-5.87 -2.15,-1.62 -2.271,-2.25 -1.721,-8.8 0.46,-5.471 0.271,-7.33 -0.84,-8.25 -1.71,-1.42 -1.899,-7.23 -0.34,-10.141 0.84,-1.56 0.8,-2.26 -0.16,-2.85 -2.8,-1.73 -1.3,-7.8 4.09,-16.5 2.904,-4.698 0.704,-4.637 -5.696,0.163 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7"
|
||||
d="m 593.494,151.913 c -27.23,11.9 -27.17,11.86 -21.75,13.91 11.35,4.28 11.56,4.28 16.51,0.34 7.01,-5.6 26.74,-22.42 26.74,-22.8 0,-0.759 -2.33,0.17 -21.5,8.55 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9"
|
||||
d="m 430.115,153.243 c -2.301,0.61 -6.46,4.01 -13,10.61 -7.41,7.479 -11.69,10.859 -18.61,14.689 -13.109,7.261 -23.34,15.221 -29.3,22.811 -7.94,10.1 -28.14,30.55 -33,33.39 -2.37,1.391 -4.06,2.76 -3.77,3.061 1.02,1.01 14.09,-5.181 22.56,-10.681 12.22,-7.939 22.06,-12.14 41,-17.489 22.01,-6.211 24.47,-7.351 33.439,-15.49 9.061,-8.21 11.03,-8.641 39.061,-8.54 48.56,0.16 79.989,8.78 118.6,32.52 5.29,3.24 9.9,5.9 10.25,5.9 1.851,0 -0.16,-2.9 -8.1,-11.71 -12.36,-13.7 -12.07,-13.41 -19.25,-18.96 -26.48,-20.46 -55.641,-33.22 -86.431,-37.84 -21.619,-3.25 -45.96,-4.28 -53.449,-2.271 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path11"
|
||||
d="m 565.994,169.783 c 0,0.5 3.71,2.78 8.25,5.061 15.34,7.71 34.29,24.04 54.56,47.02 23.07,26.15 45.3,70.01 52.54,103.66 8.28,38.47 9.72,48.08 11.78,78.5 0.96,14.05 0.479,70.63 -0.66,78.5 -0.23,1.649 -0.86,7.27 -1.4,12.5 -0.8,7.819 -2.96,27.56 -4.409,40.279 -0.61,5.33 1.84,2.061 5.51,-7.359 3.34,-8.601 8.2,-29.86 13.22,-57.92 0.83,-4.681 2.19,-11.65 3.01,-15.5 5.23,-24.471 7.87,-68.561 5.67,-94.65 -3.04,-36.1 -8.819,-57.53 -22.31,-82.85 -23.54,-44.14 -53.6,-75.34 -92.76,-96.29 -11.34,-6.061 -33.001,-13.25 -33.001,-10.951 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path13"
|
||||
d="m 324.754,228.673 c -9.16,1.23 -12.33,2.19 -21.49,6.5 -22.39,10.54 -28.569,12.45 -54.739,16.94 -29.301,5.03 -56.101,7.71 -86.53,8.66 -19.67,0.62 -77.15,-1.351 -83.9,-2.87 -6.76,-1.51 -7.39,0.43 -1.17,3.59 13.07,6.62 20.16,7.73 83.57,13.07 9.9,0.84 18.68,1.71 19.5,1.939 0.83,0.24 7.13,0.681 14,0.99 22.22,1.01 61.86,4.89 71.5,7 34.56,7.58 43.47,10.48 64.31,20.93 5.94,2.98 15.04,8.16 20.221,11.51 5.17,3.351 9.989,6.091 10.689,6.091 1.74,0 1.61,-3.5 -0.29,-7.511 -2.56,-5.39 -11.96,-15.02 -19.029,-19.479 -17.591,-11.11 -37.101,-18.97 -64.24,-25.88 -8.431,-2.15 -14.96,-4.11 -14.5,-4.37 0.46,-0.25 4.5,-1.66 8.97,-3.12 10.04,-3.28 19.37,-8.39 28.15,-15.43 7.54,-6.05 19.779,-12.58 25.529,-13.63 5.631,-1.021 14.73,-4.71 14.11,-5.71 -0.651,-1.06 -1.171,-1.029 -14.661,0.78 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path15"
|
||||
d="m 421.244,246.264 c 4.71,21.72 5,24.26 4.45,38.26 -0.57,14.38 -1.73,19.409 -7.54,32.72 -4.46,10.21 -15.931,18.67 -30.44,22.46 -8.55,2.24 -25.97,2.22 -55.39,-0.04 -26.11,-2.01 -36.95,-1.5 -43.59,2.05 -3.24,1.73 -3.24,1.73 3.76,2.49 12.45,1.35 27.75,5.07 48.43,11.77 10.8,3.5 23.141,6.21 32.07,7.04 4.68,0.44 8.76,0.641 9.07,0.45 0.319,-0.18 3.239,-0.62 6.5,-0.96 11.949,-1.27 24.72,-8.109 36.43,-19.52 19.189,-18.69 23.85,-45.7 12.76,-73.96 -3.88,-9.891 -12.31,-23.23 -15.43,-24.43 -1.209,-0.46 -1.459,-0.08 -1.08,1.67 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path17"
|
||||
d="m 342.594,268.073 c -6.18,5.43 -6.96,13.45 -2.04,21.11 5.341,8.31 17.33,6.92 21.82,-2.54 3.37,-7.12 0.99,-14.431 -6.3,-19.351 -4.78,-3.209 -9.23,-2.959 -13.48,0.781 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path19"
|
||||
d="m 628.284,279.654 c 0.27,3.37 0.109,8.17 -0.351,10.68 -0.64,3.431 -0.479,5.3 0.66,7.58 0.83,1.66 1.65,5.41 1.83,8.32 0.18,2.91 1.07,6.72 1.99,8.47 0.91,1.75 1.91,5.58 2.21,8.5 0.31,2.93 1.189,6.74 1.96,8.47 0.78,1.73 1.41,5.46 1.41,8.29 0,3.01 0.66,6.13 1.59,7.561 0.88,1.34 1.84,5.26 2.14,8.71 0.3,3.46 1.33,7.87 2.29,9.79 0.96,1.92 3.01,8.56 4.561,14.75 1.55,6.189 3.18,11.25 3.62,11.25 2.979,0 -2.73,-54.45 -7.811,-74.5 -4.34,-17.141 -11.46,-37.04 -14.939,-41.75 -1.6,-2.171 -1.64,-2.022 -1.16,3.879 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path21"
|
||||
d="m 565.994,286.123 c 0,0.61 2.93,4.271 6.52,8.141 8.78,9.489 16.561,19.979 20.271,27.34 3.84,7.609 10.02,25.739 10.85,31.84 0.63,4.59 0.63,4.59 -3.56,3.109 -15.601,-5.51 -51.141,-8.55 -71.2,-6.1 -23.68,2.9 -27.91,3.68 -41.021,7.53 -3.729,1.1 -6.59,3.5 -5.159,4.33 0.439,0.25 9.579,0.8 20.3,1.22 30.16,1.189 30.27,1.189 35.02,1.939 15.29,2.391 36.601,7.181 43.24,9.73 7.41,2.84 16.74,7.53 16.74,8.41 0,0.22 -30.391,0.41 -67.53,0.41 -67.52,0 -67.52,0 -65.85,-3.25 0.93,-1.79 3.159,-5.2 4.979,-7.57 8.01,-10.521 6.7,-20.93 -3.28,-26.06 -3.229,-1.65 -15.8,-1.45 -17.239,0.279 -0.931,1.12 -0.53,1.86 1.989,3.65 2.971,2.109 3.131,2.54 2.7,7.35 -0.25,2.8 -1.899,9.71 -3.66,15.351 -3.199,10.25 -3.199,10.25 -9.72,10.25 -5.76,0 -6.46,-0.21 -5.97,-1.75 0.3,-0.96 1.46,-5.13 2.569,-9.25 1.11,-4.13 3.091,-11.391 4.391,-16.15 1.3,-4.759 2.08,-9.07 1.74,-9.59 -0.69,-1.04 -12.16,-1.54 -16.25,-0.69 -2.16,0.44 -3.351,2.09 -6.67,9.23 -2.221,4.79 -5.08,13.09 -6.351,18.45 -2.319,9.75 -2.319,9.75 -185.949,9.75 -111.271,0 -185.591,0.37 -188.62,0.949 -9,1.7 -23.08,9.601 -27.051,15.171 -0.699,0.979 -1.899,2.409 -2.67,3.17 -1.779,1.79 -5.56,8.819 -5.56,10.359 0,0.65 -0.41,1.33 -0.9,1.521 -2.13,0.779 -3.09,20.439 -3.09,63.33 0,42.89 0.96,62.55 3.09,63.33 0.49,0.189 0.9,1.029 0.9,1.89 0,1.7 3.33,7.43 6.479,11.17 5.66,6.71 13.311,12.17 21.761,15.52 5.26,2.091 5.26,2.091 216.26,2.36 211,0.271 211,0.271 205,3.72 -3.3,1.9 -8.101,5.15 -10.67,7.23 -2.58,2.08 -7.53,5.97 -11,8.65 -11.59,8.92 -33.36,32.439 -31.63,34.159 0.27,0.271 3.819,-2.229 7.899,-5.569 11.69,-9.58 35.11,-20.721 55.9,-26.601 17.84,-5.04 61.729,-9 88.979,-8.029 23.2,0.829 37.181,3.27 64.63,11.239 7.051,2.061 7.521,1.63 10.17,-9.069 1.921,-7.75 2.91,-12.681 7.261,-36 1.12,-6.051 2.279,-11.79 2.569,-12.75 0.681,-2.28 -0.68,-2.21 -6.67,0.37 -4.939,2.13 -4.939,2.13 -4.939,17.5 0,15.38 0,15.38 -20.25,15.289 -18.641,-0.079 -19.87,-0.189 -15.44,-1.409 16.22,-4.46 29.5,-16.811 33.99,-31.591 1.5,-4.92 1.7,-11.27 1.7,-53.069 0,-47.48 0,-47.48 3.47,-47.2 5.12,0.4 8.53,3 8.53,6.51 0,1.601 0.64,3.16 1.43,3.46 1.8,0.69 3.57,5.66 3.57,9.99 0,2.24 0.85,4.16 2.63,5.94 2.34,2.33 2.56,3.17 2.05,7.489 -0.47,4.021 -0.28,4.971 1.12,5.42 0.939,0.311 4.31,4.33 7.5,8.94 6.02,8.68 7.86,10.62 16.09,16.88 7.8,5.94 8.68,4.93 2.68,-3.06 -5.38,-7.16 -8.83,-14.79 -11.55,-25.59 -3.01,-11.95 -3.47,-15.921 -4.18,-35.87 -0.68,-18.99 0.09,-17.79 -9.76,-15.23 -7.9,2.061 -18.301,7.36 -21.2,10.811 -2.38,2.819 -2.38,2.819 -2.34,-12.5 0.029,-13.641 0.18,-15.051 1.42,-12.83 1.81,3.239 2.38,1.739 2.88,-7.5 1.17,-21.61 -8.39,-54.021 -22.13,-75 -11.45,-17.49 -25.54,-32.69 -36.94,-39.851 -4.728,-2.958 -5.268,-3.117 -5.268,-1.548 z M 409.671,394.947 c 0.64,1.94 0.574,5.107 0.574,11.916 0,7.165 -0.678,17.899 24.231,17.899 0.659,-31.659 -1.163,-30.738 41.147,-30.738 42.31,0 42.31,0 47.59,4.87 2.9,2.67 6.47,5.93 7.92,7.25 7.811,7.06 20.66,18.819 23.91,21.88 2.04,1.92 7.9,7.33 13.01,12 5.11,4.67 10.75,9.85 12.53,11.5 1.78,1.649 7.39,6.819 12.47,11.5 24.38,22.439 22.07,17.439 21.74,47.12 -0.3,26.38 -0.3,26.38 -3.05,31.97 -3.601,7.33 -9.66,13.2 -17.721,17.189 -6.529,3.221 -6.529,3.221 -280.529,3.221 -274,0 -274,0 -280.51,-3.08 -9.811,-4.65 -17.92,-13.84 -19.931,-22.561 -1.359,-5.85 -1.359,-110.87 0,-116.72 1,-4.38 4.601,-10.37 9.131,-15.23 3.22,-3.449 13.289,-8.899 18.289,-9.89 6.383,-1.269 368.768,-1.366 369.199,-0.096 z" /><path
|
||||
style="display:none"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path23"
|
||||
d="m 79.994,425.043 c -6.2,0.83 -12.82,3.13 -18,6.24 -4.73,2.84 -12.08,10.729 -14.36,15.42 -1.02,2.1 -2.37,4.72 -3,5.82 -0.79,1.38 -1.239,14.939 -1.449,43.97 -0.29,39.04 -0.19,42.06 1.439,43.25 1.14,0.83 5.17,1.28 11.561,1.28 9.81,0 9.81,0 9.819,-38.75 0.021,-43.25 0.24,-44.92 6.61,-50.931 4.34,-4.09 12.88,-6.779 18.729,-5.89 6.37,0.97 11.71,4.5 15.11,10 3.04,4.91 3.04,4.91 3.32,45.24 0.29,40.33 0.29,40.33 11.75,40.33 11.47,0 11.47,0 11.47,-36.67 0,-43 0.5,-47.48 5.83,-52.61 3.63,-3.49 11.09,-6.72 15.52,-6.72 4.83,0 12.78,3.159 15.74,6.25 5.93,6.21 5.87,5.72 6.15,49.25 0.26,40 0.26,40 11.76,40 11.5,0 11.5,0 11.5,-42.5 0,-42.5 0,-42.5 -3.32,-49.24 -5.42,-11.01 -13.09,-17.65 -25.229,-21.86 -8.86,-3.06 -23.681,-2.979 -32.24,0.181 -3.41,1.26 -6.43,2.55 -6.71,2.859 -0.271,0.311 -2.07,1.65 -4,2.99 -1.92,1.33 -3.86,3.02 -4.3,3.75 -1.26,2.09 -3.59,1.56 -6.51,-1.49 -7.579,-7.919 -22.89,-12.098 -37.19,-10.169 z"
|
||||
display="none" /><path
|
||||
style="display:none"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path25"
|
||||
d="m 464.014,425.053 c -6.38,1.49 -9.76,8.38 -8.85,18 0.33,3.471 0.33,3.471 12.08,3.75 11.75,0.28 11.75,0.28 11.75,-7.83 0,-7.619 -0.17,-8.279 -2.92,-11.029 -1.61,-1.601 -3.601,-2.92 -4.42,-2.92 -0.82,0 -2.101,-0.181 -2.83,-0.4 -0.73,-0.211 -2.9,-0.02 -4.81,0.429 z"
|
||||
display="none" /><path
|
||||
style="display:none"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path27"
|
||||
d="m 234.994,457.404 c -3.021,1.18 -6.85,2.899 -8.5,3.819 -3.29,1.83 -12.28,10.28 -14.22,13.36 -5.44,8.64 -7.91,20.35 -6.271,29.73 1.17,6.699 4.021,14.699 5.24,14.71 0.41,0 0.75,0.56 0.75,1.25 0,1.51 9.49,11.75 10.88,11.75 0.54,0 1.57,0.56 2.3,1.25 4.99,4.72 20.5,8.199 33.82,7.59 7.5,-0.34 7.5,-0.34 7.5,-10.84 0,-10.5 0,-10.5 -11.5,-11.011 -10.23,-0.46 -11.94,-0.8 -15.5,-3.119 -5.11,-3.341 -6.8,-5.37 -8.84,-10.641 -2.07,-5.34 -2.03,-9.59 0.149,-14.76 2.45,-5.83 4.091,-7.79 9.69,-11.59 4.61,-3.11 5.59,-3.38 12.5,-3.33 6.31,0.04 8.13,0.45 11.5,2.63 4.59,2.96 7.4,6.01 10.02,10.89 1.58,2.96 1.921,6.74 2.41,27.431 0.57,24 0.57,24 33.271,24.26 32.71,0.27 32.71,0.27 33,-27.16 0.3,-27.42 0.3,-27.42 3.399,-31.26 1.74,-2.15 5.101,-4.67 7.63,-5.72 11.94,-4.98 24.771,2.96 24.771,15.329 0,4.051 0,4.051 11.44,4.051 6.289,0 11.699,-0.42 12.02,-0.94 1.11,-1.8 -1.58,-15.61 -4.01,-20.56 -2.53,-5.16 -8.601,-12.5 -10.33,-12.5 -0.54,0 -1.57,-0.58 -2.3,-1.29 -0.73,-0.7 -3.95,-2.28 -7.16,-3.5 -4.78,-1.811 -7.9,-2.21 -17.21,-2.21 -17.45,0 -25.69,3.72 -36.08,16.29 -0.62,0.75 -1.46,2.449 -1.87,3.79 -0.41,1.329 -1.25,3.05 -1.87,3.819 -0.72,0.9 -1.26,8.41 -1.49,20.75 -0.35,19.351 -0.35,19.351 -9.75,19.351 -9.39,0 -9.39,0 -9.39,-9.61 0,-10.02 -2.62,-27.39 -4.13,-27.39 -0.48,0 -0.87,-0.681 -0.87,-1.521 0,-4.109 -10.54,-15.67 -18.12,-19.85 -7.939,-4.391 -13.75,-5.63 -25.79,-5.51 -9.299,0.092 -12.678,0.541 -17.089,2.262 z"
|
||||
display="none" /><path
|
||||
style="display:none"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path29"
|
||||
d="m 525.764,457.104 c -2.6,1.029 -6.43,2.939 -8.51,4.25 -4.58,2.899 -11.26,10.109 -11.26,12.17 0,0.83 -0.37,1.5 -0.82,1.5 -0.45,0 -1.57,2.399 -2.5,5.34 -1.31,4.16 -1.68,9.229 -1.68,23.03 0,17.699 0,17.699 -10.75,17.409 -10.75,-0.279 -10.75,-0.279 -11.011,-32.56 -0.27,-32.29 -0.27,-32.29 -11.5,-32 -11.239,0.28 -11.239,0.28 -11.5,42.54 -0.26,42.27 -0.26,42.27 34,42 34.261,-0.26 34.261,-0.26 34.761,-27.76 0.359,-19.86 0.859,-28.13 1.79,-29.761 0.71,-1.25 3.189,-3.489 5.5,-4.97 8.13,-5.22 20.939,-3.13 25.34,4.14 1.67,2.761 1.92,6.04 2.37,30.591 0.5,27.5 0.5,27.5 9.87,27.79 15.01,0.46 14.13,2.18 14.13,-27.73 0,-27.34 -0.91,-33.85 -5.82,-41.49 -3.86,-6 -7.84,-9.31 -15.78,-13.14 -6.97,-3.36 -7.35,-3.43 -19.5,-3.33 -9.59,0.08 -13.47,0.531 -17.13,1.981 z"
|
||||
display="none" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path31"
|
||||
d="m 291.834,301.894 c -31.39,15.779 -65.61,48.069 -73.51,69.369 -0.95,2.58 -1.44,4.99 -1.07,5.351 0.36,0.37 4.62,-3.05 9.45,-7.58 9.01,-8.45 29.87,-22.99 38.79,-27.04 2.75,-1.24 7.93,-3.59 11.5,-5.2 15.81,-7.16 35.55,-13.08 56.75,-17.02 6.19,-1.15 11.25,-2.471 11.25,-2.92 0,-1.87 -27.38,-0.83 -41.5,1.569 -19.89,3.38 -23.5,3.83 -23.49,2.91 0.01,-1.46 10.38,-11.8 17.26,-17.2 3.7,-2.91 6.48,-5.7 6.171,-6.199 -0.851,-1.38 -1.231,-1.25 -11.601,3.96 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path33"
|
||||
d="m 714.554,427.213 c -1.97,6.01 -4.8,28.311 -4.92,38.83 -0.14,12.521 -0.14,12.521 3.36,18.42 3.58,6.021 15.01,18.561 16.93,18.561 1.78,0 1.24,-1.33 -2.68,-6.58 -2.061,-2.771 -5.29,-8.261 -7.181,-12.21 -3.43,-7.17 -3.43,-7.17 -2.31,-14.94 1.88,-13.02 2.85,-18.21 3.5,-18.86 0.34,-0.35 2,0.351 3.68,1.551 1.83,1.3 3.061,1.689 3.061,0.979 0,-2.34 -5.181,-15.51 -8.13,-20.66 -3.3,-5.771 -4.66,-7.081 -5.31,-5.091 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path35"
|
||||
d="m 685.124,557.274 c -2.561,9.659 -3.08,13.8 -3.11,24.779 -0.02,12.341 3.33,34.88 6.98,46.971 1.08,3.569 2.88,10.55 4.01,15.5 1.13,4.949 2.92,12.37 4,16.5 2.88,11.109 6,30.409 5.94,36.85 -0.051,5.65 -0.051,5.65 -4.12,-2.35 -5.23,-10.271 -15.091,-25.28 -21.83,-33.24 -11.53,-13.59 -27.24,-23.95 -37.891,-24.98 -3.25,-0.31 -6.449,-1.279 -7.609,-2.29 -2.83,-2.489 -8.05,-4.989 -10.391,-4.989 -1.1,0 -3.55,-0.92 -5.449,-2.04 -2.28,-1.34 -6.641,-2.37 -12.811,-3.021 -5.14,-0.54 -10.42,-1.439 -11.729,-2 -2.811,-1.2 -3.511,-0.75 -2.721,1.73 0.95,3 5.33,7.13 12.051,11.37 3.909,2.47 6.779,5.09 7.51,6.869 0.81,1.961 2.13,3.061 4.149,3.461 1.78,0.359 5.601,3.17 9.63,7.109 3.681,3.59 7.48,6.521 8.45,6.521 2.65,0 9.73,3.029 14.811,6.34 7,4.56 20.069,18.439 24.64,26.17 6.08,10.29 13.92,26.89 23.36,49.49 8.43,20.18 17.1,51.35 19.26,69.25 0.65,5.359 1.42,9.75 1.72,9.75 0.58,0 1.15,-1.24 6.57,-14.46 9.29,-22.66 11.439,-32.16 12.11,-53.54 0.97,-31.2 -4.49,-62.19 -16.66,-94.5 -9.29,-24.681 -23.91,-70.03 -25.46,-79 -0.86,-4.95 -1.851,-12.94 -2.2,-17.75 -0.351,-4.811 -0.96,-8.75 -1.36,-8.75 -0.4,0 -1.23,1.909 -1.85,4.25 z" /></g><g
|
||||
transform="matrix(92.881793,0,0,92.881793,0.51490554,-87841.16)"
|
||||
id="g37"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path39"
|
||||
d="m 4.097,951.447 c 0,-0.434 0.002,-0.516 0.012,-0.566 C 4.146,950.7 4.27,950.6 4.458,950.6 l 0.063,0 -0.002,0.111 -0.002,0.111 -0.041,0.003 c -0.046,0.004 -0.072,0.015 -0.097,0.041 -0.037,0.04 -0.036,0.032 -0.039,0.576 l -0.002,0.513 -0.12,0 -0.121,0 0,-0.508 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path41"
|
||||
d="m 0.736,951.882 c -0.123,-0.032 -0.231,-0.118 -0.283,-0.224 -0.05,-0.103 -0.05,-0.097 -0.05,-0.589 0,-0.42 0.001,-0.444 0.014,-0.456 0.012,-0.01 0.032,-0.013 0.121,-0.013 l 0.107,0 0,0.445 c 0,0.283 0.003,0.455 0.008,0.473 0.02,0.073 0.1,0.133 0.184,0.14 0.097,0.008 0.18,-0.039 0.218,-0.121 l 0.018,-0.04 0.002,-0.448 0.002,-0.448 0.121,0 0.121,0 0,0.438 c 0,0.478 0,0.483 0.044,0.543 0.03,0.041 0.09,0.072 0.149,0.077 0.094,0.008 0.173,-0.035 0.215,-0.114 l 0.021,-0.039 0.002,-0.452 0.002,-0.452 0.121,0 0.121,0 0,0.449 c 0,0.419 -10e-4,0.453 -0.015,0.506 -0.023,0.089 -0.055,0.146 -0.121,0.211 -0.09,0.089 -0.186,0.128 -0.32,0.128 -0.122,0 -0.212,-0.034 -0.296,-0.113 l -0.048,-0.045 -0.017,0.022 c -0.029,0.039 -0.12,0.097 -0.184,0.117 -0.048,0.015 -0.075,0.019 -0.137,0.018 -0.044,-10e-4 -0.097,-0.007 -0.12,-0.013 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path43"
|
||||
d="m 4.642,951.881 c -0.014,-0.007 -0.034,-0.025 -0.044,-0.039 -0.015,-0.023 -0.017,-0.035 -0.017,-0.115 l 0,-0.09 0.121,0 0.121,0 0,0.08 c 0,0.089 -0.008,0.116 -0.045,0.151 -0.03,0.028 -0.095,0.035 -0.136,0.013 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path45"
|
||||
d="m 2.386,951.544 c -0.083,-0.025 -0.133,-0.055 -0.197,-0.118 -0.067,-0.067 -0.112,-0.146 -0.132,-0.239 -0.019,-0.084 -0.012,-0.199 0.016,-0.275 0.042,-0.115 0.125,-0.211 0.227,-0.262 0.074,-0.037 0.139,-0.048 0.267,-0.049 l 0.108,0 0,0.116 0,0.117 -0.1,0.003 c -0.088,0.003 -0.106,0.006 -0.142,0.023 -0.058,0.027 -0.094,0.06 -0.119,0.111 -0.018,0.037 -0.021,0.052 -0.021,0.107 0,0.055 0.003,0.071 0.021,0.107 0.026,0.052 0.07,0.098 0.118,0.121 0.05,0.025 0.15,0.025 0.197,0 0.046,-0.025 0.091,-0.072 0.114,-0.121 l 0.02,-0.043 0.002,-0.271 0.002,-0.271 0.34,0 0.34,0 0,0.297 c 0,0.336 0,0.334 0.059,0.385 0.086,0.074 0.226,0.053 0.274,-0.04 0.01,-0.019 0.017,-0.052 0.02,-0.087 l 0.004,-0.056 0.12,0 0.12,0 0,0.052 c 0,0.062 -0.023,0.156 -0.051,0.213 -0.043,0.085 -0.143,0.161 -0.245,0.185 -0.057,0.013 -0.171,0.015 -0.228,0.003 -0.112,-0.023 -0.222,-0.107 -0.269,-0.204 -0.042,-0.087 -0.047,-0.12 -0.047,-0.327 l 0,-0.188 -0.099,0 -0.098,0 0,0.154 c 0,0.128 -0.002,0.164 -0.015,0.212 -0.044,0.172 -0.176,0.306 -0.344,0.349 -0.069,0.019 -0.192,0.016 -0.262,-0.004 z" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path47"
|
||||
d="M 5.34,951.549 C 5.203,951.512 5.098,951.411 5.054,951.273 5.043,951.239 5.04,951.194 5.037,951.029 l -0.003,-0.203 -0.105,0 -0.106,0 0,0.356 0,0.356 -0.121,0 -0.121,0 0,-0.469 0,-0.469 0.348,0 0.348,0 0,0.276 c 0,0.168 0.003,0.291 0.008,0.314 0.01,0.049 0.044,0.094 0.085,0.116 0.026,0.014 0.045,0.017 0.093,0.017 0.08,0 0.121,-0.022 0.151,-0.081 l 0.02,-0.039 0,-0.301 0,-0.302 0.105,0 c 0.092,0 0.107,0.002 0.123,0.014 l 0.018,0.015 0,0.294 c 0,0.255 -0.002,0.3 -0.013,0.342 -0.022,0.081 -0.05,0.131 -0.103,0.184 -0.082,0.082 -0.167,0.113 -0.303,0.112 -0.045,0 -0.099,-0.006 -0.121,-0.012 z" /></g><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path49"
|
||||
d="M 403.52901,561.50203" /></g></svg>
|
After Width: | Height: | Size: 21 KiB |
256
buildroot/share/scripts/MarlinMesh.scad
Normal file
|
@ -0,0 +1,256 @@
|
|||
/**************************************\
|
||||
* *
|
||||
* OpenSCAD Mesh Display *
|
||||
* by Thinkyhead - April 2017 *
|
||||
* *
|
||||
* Copy the grid output from Marlin, *
|
||||
* paste below as shown, and use *
|
||||
* OpenSCAD to see a visualization *
|
||||
* of your mesh. *
|
||||
* *
|
||||
\**************************************/
|
||||
|
||||
//$t = 0.15; // comment out during animation
|
||||
|
||||
//
|
||||
// Mesh info and points
|
||||
//
|
||||
|
||||
mesh_width = 200; // X Size in mm of the probed area
|
||||
mesh_height = 200; // Y Size...
|
||||
zprobe_offset = 0; // Added to the points
|
||||
NAN = 0; // Z to use for un-measured points
|
||||
|
||||
measured_z = [
|
||||
[ -1.20, -1.13, -1.09, -1.03, -1.19 ],
|
||||
[ -1.16, -1.25, -1.27, -1.25, -1.08 ],
|
||||
[ -1.13, -1.26, -1.39, -1.31, -1.18 ],
|
||||
[ -1.09, -1.20, -1.26, -1.21, -1.18 ],
|
||||
[ -1.13, -0.99, -1.03, -1.06, -1.32 ]
|
||||
];
|
||||
|
||||
//
|
||||
// Geometry
|
||||
//
|
||||
|
||||
max_z_scale = 100; // Scale at Time 0.5
|
||||
min_z_scale = 10; // Scale at Time 0.0 and 1.0
|
||||
thickness = 0.5; // thickness of the mesh triangles
|
||||
tesselation = 1; // levels of tesselation from 0-2
|
||||
alternation = 2; // direction change modulus (try it)
|
||||
|
||||
//
|
||||
// Appearance
|
||||
//
|
||||
|
||||
show_plane = true;
|
||||
show_labels = true;
|
||||
arrow_length = 5;
|
||||
|
||||
label_font_lg = "Arial";
|
||||
label_font_sm = "Arial";
|
||||
mesh_color = [1,1,1,0.5];
|
||||
plane_color = [0.4,0.6,0.9,0.6];
|
||||
|
||||
//================================================ Derive useful values
|
||||
|
||||
big_z = max_2D(measured_z,0);
|
||||
lil_z = min_2D(measured_z,0);
|
||||
|
||||
mean_value = (big_z + lil_z) / 2.0;
|
||||
|
||||
mesh_points_y = len(measured_z);
|
||||
mesh_points_x = len(measured_z[0]);
|
||||
|
||||
xspace = mesh_width / (mesh_points_x - 1);
|
||||
yspace = mesh_height / (mesh_points_y - 1);
|
||||
|
||||
// At $t=0 and $t=1 scale will be 100%
|
||||
z_scale_factor = min_z_scale + (($t > 0.5) ? 1.0 - $t : $t) * (max_z_scale - min_z_scale) * 2;
|
||||
|
||||
//
|
||||
// Min and max recursive functions for 1D and 2D arrays
|
||||
// Return the smallest or largest value in the array
|
||||
//
|
||||
function min_1D(b,i) = (i<len(b)-1) ? min(b[i], min_1D(b,i+1)) : b[i];
|
||||
function min_2D(a,j) = (j<len(a)-1) ? min_2D(a,j+1) : min_1D(a[j], 0);
|
||||
function max_1D(b,i) = (i<len(b)-1) ? max(b[i], max_1D(b,i+1)) : b[i];
|
||||
function max_2D(a,j) = (j<len(a)-1) ? max_2D(a,j+1) : max_1D(a[j], 0);
|
||||
|
||||
//
|
||||
// Get the corner probe points of a grid square.
|
||||
//
|
||||
// Input : x,y grid indexes
|
||||
// Output : An array of the 4 corner points
|
||||
//
|
||||
function grid_square(x,y) = [
|
||||
[x * xspace, y * yspace, z_scale_factor * (measured_z[y][x] - mean_value)],
|
||||
[x * xspace, (y+1) * yspace, z_scale_factor * (measured_z[y+1][x] - mean_value)],
|
||||
[(x+1) * xspace, (y+1) * yspace, z_scale_factor * (measured_z[y+1][x+1] - mean_value)],
|
||||
[(x+1) * xspace, y * yspace, z_scale_factor * (measured_z[y][x+1] - mean_value)]
|
||||
];
|
||||
|
||||
// The corner point of a grid square with Z centered on the mean
|
||||
function pos(x,y,z) = [x * xspace, y * yspace, z_scale_factor * (z - mean_value)];
|
||||
|
||||
//
|
||||
// Draw the point markers and labels
|
||||
//
|
||||
module point_markers(show_home=true) {
|
||||
// Mark the home position 0,0
|
||||
color([0,0,0,0.25]) translate([1,1]) cylinder(r=1, h=z_scale_factor, center=true);
|
||||
|
||||
for (x=[0:mesh_points_x-1], y=[0:mesh_points_y-1]) {
|
||||
z = measured_z[y][x];
|
||||
down = z < mean_value;
|
||||
translate(pos(x, y, z)) {
|
||||
|
||||
// Label each point with the Z
|
||||
if (show_labels) {
|
||||
v = z - mean_value;
|
||||
|
||||
color(abs(v) < 0.1 ? [0,0.5,0] : [0.25,0,0])
|
||||
translate([0,0,down?-10:10]) {
|
||||
|
||||
$fn=8;
|
||||
rotate([90,0])
|
||||
text(str(z), 6, label_font_lg, halign="center", valign="center");
|
||||
|
||||
translate([0,0,down?-6:6]) rotate([90,0])
|
||||
text(str(down ? "" : "+", v), 3, label_font_sm, halign="center", valign="center");
|
||||
}
|
||||
}
|
||||
|
||||
// Show an arrow pointing up or down
|
||||
rotate([0, down ? 180 : 0]) translate([0,0,-1])
|
||||
cylinder(
|
||||
r1=0.5,
|
||||
r2=0.1,
|
||||
h=arrow_length, $fn=12, center=1
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Split a square on the diagonal into
|
||||
// two triangles and render them.
|
||||
//
|
||||
// s : a square
|
||||
// alt : a flag to split on the other diagonal
|
||||
//
|
||||
module tesselated_square(s, alt=false) {
|
||||
add = [0,0,thickness];
|
||||
p1 = [
|
||||
s[0], s[1], s[2], s[3],
|
||||
s[0]+add, s[1]+add, s[2]+add, s[3]+add
|
||||
];
|
||||
f1 = alt
|
||||
? [ [0,1,3], [4,5,1,0], [4,7,5], [5,7,3,1], [7,4,0,3] ]
|
||||
: [ [0,1,2], [4,5,1,0], [4,6,5], [5,6,2,1], [6,4,0,2] ];
|
||||
f2 = alt
|
||||
? [ [1,2,3], [5,6,2,1], [5,6,7], [6,7,3,2], [7,5,1,3] ]
|
||||
: [ [0,2,3], [4,6,2,0], [4,7,6], [6,7,3,2], [7,4,0,3] ];
|
||||
|
||||
// Use the other diagonal
|
||||
polyhedron(points=p1, faces=f1);
|
||||
polyhedron(points=p1, faces=f2);
|
||||
}
|
||||
|
||||
/**
|
||||
* The simplest mesh display
|
||||
*/
|
||||
module simple_mesh(show_plane=show_plane) {
|
||||
if (show_plane) color(plane_color) cube([mesh_width, mesh_height, thickness]);
|
||||
color(mesh_color)
|
||||
for (x=[0:mesh_points_x-2], y=[0:mesh_points_y-2])
|
||||
tesselated_square(grid_square(x, y));
|
||||
}
|
||||
|
||||
/**
|
||||
* Subdivide the mesh into smaller squares.
|
||||
*/
|
||||
module bilinear_mesh(show_plane=show_plane,tesselation=tesselation) {
|
||||
if (show_plane) color(plane_color) translate([-5,-5]) cube([mesh_width+10, mesh_height+10, thickness]);
|
||||
tesselation = tesselation % 4;
|
||||
color(mesh_color)
|
||||
for (x=[0:mesh_points_x-2], y=[0:mesh_points_y-2]) {
|
||||
square = grid_square(x, y);
|
||||
if (tesselation < 1) {
|
||||
tesselated_square(square,(x%alternation)-(y%alternation));
|
||||
}
|
||||
else {
|
||||
subdiv_4 = subdivided_square(square);
|
||||
if (tesselation < 2) {
|
||||
for (i=[0:3]) tesselated_square(subdiv_4[i],i%alternation);
|
||||
}
|
||||
else {
|
||||
for (i=[0:3]) {
|
||||
subdiv_16 = subdivided_square(subdiv_4[i]);
|
||||
if (tesselation < 3) {
|
||||
for (j=[0:3]) tesselated_square(subdiv_16[j],j%alternation);
|
||||
}
|
||||
else {
|
||||
for (j=[0:3]) {
|
||||
subdiv_64 = subdivided_square(subdiv_16[j]);
|
||||
if (tesselation < 4) {
|
||||
for (k=[0:3]) tesselated_square(subdiv_64[k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Subdivision helpers
|
||||
//
|
||||
function ctrz(a) = (a[0][2]+a[1][2]+a[3][2]+a[2][2])/4;
|
||||
function avgx(a,i) = (a[i][0]+a[(i+1)%4][0])/2;
|
||||
function avgy(a,i) = (a[i][1]+a[(i+1)%4][1])/2;
|
||||
function avgz(a,i) = (a[i][2]+a[(i+1)%4][2])/2;
|
||||
|
||||
//
|
||||
// Convert one square into 4, applying bilinear averaging
|
||||
//
|
||||
// Input : 1 square (4 points)
|
||||
// Output : An array of 4 squares
|
||||
//
|
||||
function subdivided_square(a) = [
|
||||
[ // SW square
|
||||
a[0], // SW
|
||||
[a[0][0],avgy(a,0),avgz(a,0)], // CW
|
||||
[avgx(a,1),avgy(a,0),ctrz(a)], // CC
|
||||
[avgx(a,1),a[0][1],avgz(a,3)] // SC
|
||||
],
|
||||
[ // NW square
|
||||
[a[0][0],avgy(a,0),avgz(a,0)], // CW
|
||||
a[1], // NW
|
||||
[avgx(a,1),a[1][1],avgz(a,1)], // NC
|
||||
[avgx(a,1),avgy(a,0),ctrz(a)] // CC
|
||||
],
|
||||
[ // NE square
|
||||
[avgx(a,1),avgy(a,0),ctrz(a)], // CC
|
||||
[avgx(a,1),a[1][1],avgz(a,1)], // NC
|
||||
a[2], // NE
|
||||
[a[2][0],avgy(a,0),avgz(a,2)] // CE
|
||||
],
|
||||
[ // SE square
|
||||
[avgx(a,1),a[0][1],avgz(a,3)], // SC
|
||||
[avgx(a,1),avgy(a,0),ctrz(a)], // CC
|
||||
[a[2][0],avgy(a,0),avgz(a,2)], // CE
|
||||
a[3] // SE
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
//================================================ Run the plan
|
||||
|
||||
translate([-mesh_width / 2, -mesh_height / 2]) {
|
||||
$fn = 12;
|
||||
point_markers();
|
||||
bilinear_mesh();
|
||||
}
|
50
buildroot/share/scripts/createSpeedLookupTable.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
""" Generate the stepper delay lookup table for Marlin firmware. """
|
||||
|
||||
import argparse
|
||||
|
||||
__author__ = "Ben Gamari <bgamari@gmail.com>"
|
||||
__copyright__ = "Copyright 2012, Ben Gamari"
|
||||
__license__ = "GPL"
|
||||
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('-f', '--cpu-freq', type=int, default=16, help='CPU clockrate in MHz (default=16)')
|
||||
parser.add_argument('-d', '--divider', type=int, default=8, help='Timer/counter pre-scale divider (default=8)')
|
||||
args = parser.parse_args()
|
||||
|
||||
cpu_freq = args.cpu_freq * 1000000
|
||||
timer_freq = cpu_freq / args.divider
|
||||
|
||||
print "#ifndef SPEED_LOOKUPTABLE_H"
|
||||
print "#define SPEED_LOOKUPTABLE_H"
|
||||
print
|
||||
print '#include "Marlin.h"'
|
||||
print
|
||||
|
||||
print "const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {"
|
||||
a = [ timer_freq / ((i*256)+(args.cpu_freq*2)) for i in range(256) ]
|
||||
b = [ a[i] - a[i+1] for i in range(255) ]
|
||||
b.append(b[-1])
|
||||
for i in range(32):
|
||||
print " ",
|
||||
for j in range(8):
|
||||
print "{%d, %d}," % (a[8*i+j], b[8*i+j]),
|
||||
print
|
||||
print "};"
|
||||
print
|
||||
|
||||
print "const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {"
|
||||
a = [ timer_freq / ((i*8)+(args.cpu_freq*2)) for i in range(256) ]
|
||||
b = [ a[i] - a[i+1] for i in range(255) ]
|
||||
b.append(b[-1])
|
||||
for i in range(32):
|
||||
print " ",
|
||||
for j in range(8):
|
||||
print "{%d, %d}," % (a[8*i+j], b[8*i+j]),
|
||||
print
|
||||
print "};"
|
||||
print
|
||||
|
||||
print "#endif"
|
||||
|
155
buildroot/share/scripts/createTemperatureLookupMarlin.py
Normal file
|
@ -0,0 +1,155 @@
|
|||
#!/usr/bin/python
|
||||
"""Thermistor Value Lookup Table Generator
|
||||
|
||||
Generates lookup to temperature values for use in a microcontroller in C format based on:
|
||||
http://en.wikipedia.org/wiki/Steinhart-Hart_equation
|
||||
|
||||
The main use is for Arduino programs that read data from the circuit board described here:
|
||||
http://reprap.org/wiki/Temperature_Sensor_v2.0
|
||||
|
||||
Usage: python createTemperatureLookupMarlin.py [options]
|
||||
|
||||
Options:
|
||||
-h, --help show this help
|
||||
--rp=... pull-up resistor
|
||||
--t1=ttt:rrr low temperature temperature:resistance point (around 25 degC)
|
||||
--t2=ttt:rrr middle temperature temperature:resistance point (around 150 degC)
|
||||
--t3=ttt:rrr high temperature temperature:resistance point (around 250 degC)
|
||||
--num-temps=... the number of temperature points to calculate (default: 36)
|
||||
"""
|
||||
|
||||
from math import *
|
||||
import sys
|
||||
import getopt
|
||||
|
||||
"Constants"
|
||||
ZERO = 273.15 # zero point of Kelvin scale
|
||||
VADC = 5 # ADC voltage
|
||||
VCC = 5 # supply voltage
|
||||
ARES = pow(2,10) # 10 Bit ADC resolution
|
||||
VSTEP = VADC / ARES # ADC voltage resolution
|
||||
TMIN = 0 # lowest temperature in table
|
||||
TMAX = 350 # highest temperature in table
|
||||
|
||||
class Thermistor:
|
||||
"Class to do the thermistor maths"
|
||||
def __init__(self, rp, t1, r1, t2, r2, t3, r3):
|
||||
l1 = log(r1)
|
||||
l2 = log(r2)
|
||||
l3 = log(r3)
|
||||
y1 = 1.0 / (t1 + ZERO) # adjust scale
|
||||
y2 = 1.0 / (t2 + ZERO)
|
||||
y3 = 1.0 / (t3 + ZERO)
|
||||
x = (y2 - y1) / (l2 - l1)
|
||||
y = (y3 - y1) / (l3 - l1)
|
||||
c = (y - x) / ((l3 - l2) * (l1 + l2 + l3))
|
||||
b = x - c * (l1**2 + l2**2 + l1*l2)
|
||||
a = y1 - (b + l1**2 *c)*l1
|
||||
|
||||
if c < 0:
|
||||
print "//////////////////////////////////////////////////////////////////////////////////////"
|
||||
print "// WARNING: negative coefficient 'c'! Something may be wrong with the measurements! //"
|
||||
print "//////////////////////////////////////////////////////////////////////////////////////"
|
||||
c = -c
|
||||
self.c1 = a # Steinhart-Hart coefficients
|
||||
self.c2 = b
|
||||
self.c3 = c
|
||||
self.rp = rp # pull-up resistance
|
||||
|
||||
def resol(self, adc):
|
||||
"Convert ADC reading into a resolution"
|
||||
res = self.temp(adc)-self.temp(adc+1)
|
||||
return res
|
||||
|
||||
def voltage(self, adc):
|
||||
"Convert ADC reading into a Voltage"
|
||||
return adc * VSTEP # convert the 10 bit ADC value to a voltage
|
||||
|
||||
def resist(self, adc):
|
||||
"Convert ADC reading into a resistance in Ohms"
|
||||
r = self.rp * self.voltage(adc) / (VCC - self.voltage(adc)) # resistance of thermistor
|
||||
return r
|
||||
|
||||
def temp(self, adc):
|
||||
"Convert ADC reading into a temperature in Celcius"
|
||||
l = log(self.resist(adc))
|
||||
Tinv = self.c1 + self.c2*l + self.c3* l**3 # inverse temperature
|
||||
return (1/Tinv) - ZERO # temperature
|
||||
|
||||
def adc(self, temp):
|
||||
"Convert temperature into a ADC reading"
|
||||
x = (self.c1 - (1.0 / (temp+ZERO))) / (2*self.c3)
|
||||
y = sqrt((self.c2 / (3*self.c3))**3 + x**2)
|
||||
r = exp((y-x)**(1.0/3) - (y+x)**(1.0/3))
|
||||
return (r / (self.rp + r)) * ARES
|
||||
|
||||
def main(argv):
|
||||
"Default values"
|
||||
t1 = 25 # low temperature in Kelvin (25 degC)
|
||||
r1 = 100000 # resistance at low temperature (10 kOhm)
|
||||
t2 = 150 # middle temperature in Kelvin (150 degC)
|
||||
r2 = 1641.9 # resistance at middle temperature (1.6 KOhm)
|
||||
t3 = 250 # high temperature in Kelvin (250 degC)
|
||||
r3 = 226.15 # resistance at high temperature (226.15 Ohm)
|
||||
rp = 4700; # pull-up resistor (4.7 kOhm)
|
||||
num_temps = 36; # number of entries for look-up table
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(argv, "h", ["help", "rp=", "t1=", "t2=", "t3=", "num-temps="])
|
||||
except getopt.GetoptError as err:
|
||||
print str(err)
|
||||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
for opt, arg in opts:
|
||||
if opt in ("-h", "--help"):
|
||||
usage()
|
||||
sys.exit()
|
||||
elif opt == "--rp":
|
||||
rp = int(arg)
|
||||
elif opt == "--t1":
|
||||
arg = arg.split(':')
|
||||
t1 = float(arg[0])
|
||||
r1 = float(arg[1])
|
||||
elif opt == "--t2":
|
||||
arg = arg.split(':')
|
||||
t2 = float(arg[0])
|
||||
r2 = float(arg[1])
|
||||
elif opt == "--t3":
|
||||
arg = arg.split(':')
|
||||
t3 = float(arg[0])
|
||||
r3 = float(arg[1])
|
||||
elif opt == "--num-temps":
|
||||
num_temps = int(arg)
|
||||
|
||||
t = Thermistor(rp, t1, r1, t2, r2, t3, r3)
|
||||
increment = int((ARES-1)/(num_temps-1));
|
||||
step = (TMIN-TMAX) / (num_temps-1)
|
||||
low_bound = t.temp(ARES-1);
|
||||
up_bound = t.temp(1);
|
||||
min_temp = int(TMIN if TMIN > low_bound else low_bound)
|
||||
max_temp = int(TMAX if TMAX < up_bound else up_bound)
|
||||
temps = range(max_temp, TMIN+step, step);
|
||||
|
||||
print "// Thermistor lookup table for Marlin"
|
||||
print "// ./createTemperatureLookupMarlin.py --rp=%s --t1=%s:%s --t2=%s:%s --t3=%s:%s --num-temps=%s" % (rp, t1, r1, t2, r2, t3, r3, num_temps)
|
||||
print "// Steinhart-Hart Coefficients: a=%.15g, b=%.15g, c=%.15g " % (t.c1, t.c2, t.c3)
|
||||
print "// Theoretical limits of thermistor: %.2f to %.2f degC" % (low_bound, up_bound)
|
||||
print
|
||||
print "const short temptable[][2] PROGMEM = {"
|
||||
|
||||
for temp in temps:
|
||||
adc = t.adc(temp)
|
||||
print " { OV(%7.2f), %4s }%s // v=%.3f\tr=%.3f\tres=%.3f degC/count" % (adc , temp, \
|
||||
',' if temp != temps[-1] else ' ', \
|
||||
t.voltage(adc), \
|
||||
t.resist( adc), \
|
||||
t.resol( adc) \
|
||||
)
|
||||
print "};"
|
||||
|
||||
def usage():
|
||||
print __doc__
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
47
buildroot/share/scripts/findMissingTranslations.sh
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# findMissingTranslations.sh
|
||||
#
|
||||
# Locate all language strings needing an update based on English
|
||||
#
|
||||
# Usage: findMissingTranslations.sh [language codes]
|
||||
#
|
||||
# If no language codes are specified then all languages will be checked
|
||||
#
|
||||
|
||||
[ -d "Marlin" ] && cd "Marlin"
|
||||
|
||||
FILES=$(ls language_*.h | grep -v -E "(_en|_test)\.h" | sed -E 's/language_([^\.]+)\.h/\1/')
|
||||
declare -A STRING_MAP
|
||||
|
||||
# Get files matching the given arguments
|
||||
TEST_LANGS=$FILES
|
||||
if [[ -n $@ ]]; then
|
||||
TEST_LANGS=""
|
||||
for K in "$@"; do
|
||||
for F in $FILES; do
|
||||
[[ "$F" != "${F%$K*}" ]] && TEST_LANGS="$TEST_LANGS $F"
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
echo -n "Building list of missing strings..."
|
||||
|
||||
for i in $(awk '/#ifndef/{print $2}' language_en.h); do
|
||||
[[ $i == "LANGUAGE_EN_H" || $i == "CHARSIZE" ]] && continue
|
||||
LANG_LIST=""
|
||||
for j in $TEST_LANGS; do
|
||||
[[ $(grep -c " ${i} " language_${j}.h) -eq 0 ]] && LANG_LIST="$LANG_LIST $j"
|
||||
done
|
||||
[[ -z $LANG_LIST ]] && continue
|
||||
STRING_MAP[$i]=$LANG_LIST
|
||||
done
|
||||
|
||||
echo
|
||||
|
||||
for K in $( printf "%s\n" "${!STRING_MAP[@]}" | sort ); do
|
||||
case "$#" in
|
||||
1 ) echo $K ;;
|
||||
* ) printf "%-35s :%s\n" "$K" "${STRING_MAP[$K]}" ;;
|
||||
esac
|
||||
done
|
186
buildroot/share/scripts/g29_auto.py
Normal file
|
@ -0,0 +1,186 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
# This file is for preprocessing gcode and the new G29 Autobedleveling from Marlin
|
||||
# It will analyse the first 2 Layer and return the maximum size for this part
|
||||
# After this it will replace with g29_keyword = ';MarlinG29Script' with the new G29 LRFB
|
||||
# the new file will be created in the same folder.
|
||||
|
||||
# your gcode-file/folder
|
||||
folder = './'
|
||||
my_file = 'test.gcode'
|
||||
|
||||
# this is the minimum of G1 instructions which should be between 2 different heights
|
||||
min_g1 = 3
|
||||
|
||||
# maximum number of lines to parse, I don't want to parse the complete file
|
||||
# only the first plane is we are interested in
|
||||
max_g1 = 100000000
|
||||
|
||||
# g29 keyword
|
||||
g29_keyword = 'g29'
|
||||
g29_keyword = g29_keyword.upper()
|
||||
|
||||
# output filename
|
||||
output_file = folder + 'g29_' + my_file
|
||||
# input filename
|
||||
input_file = folder + my_file
|
||||
|
||||
# minimum scan size
|
||||
min_size = 40
|
||||
probing_points = 3 # points x points
|
||||
|
||||
# other stuff
|
||||
min_x = 500
|
||||
min_y = min_x
|
||||
max_x = -500
|
||||
max_y = max_x
|
||||
last_z = 0.001
|
||||
|
||||
layer = 0
|
||||
lines_of_g1 = 0
|
||||
|
||||
gcode = []
|
||||
|
||||
|
||||
# return only g1-lines
|
||||
def has_g1(line):
|
||||
return line[:2].upper() == "G1"
|
||||
|
||||
|
||||
# find position in g1 (x,y,z)
|
||||
def find_axis(line, axis):
|
||||
found = False
|
||||
number = ""
|
||||
for char in line:
|
||||
if found:
|
||||
if char == ".":
|
||||
number += char
|
||||
elif char == "-":
|
||||
number += char
|
||||
else:
|
||||
try:
|
||||
int(char)
|
||||
number += char
|
||||
except ValueError:
|
||||
break
|
||||
else:
|
||||
found = char.upper() == axis.upper()
|
||||
try:
|
||||
return float(number)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
|
||||
# save the min or max-values for each axis
|
||||
def set_mima(line):
|
||||
global min_x, max_x, min_y, max_y, last_z
|
||||
|
||||
current_x = find_axis(line, 'x')
|
||||
current_y = find_axis(line, 'y')
|
||||
|
||||
if current_x is not None:
|
||||
min_x = min(current_x, min_x)
|
||||
max_x = max(current_x, max_x)
|
||||
if current_y is not None:
|
||||
min_y = min(current_y, min_y)
|
||||
max_y = max(current_y, max_y)
|
||||
|
||||
return min_x, max_x, min_y, max_y
|
||||
|
||||
|
||||
# find z in the code and return it
|
||||
def find_z(gcode, start_at_line=0):
|
||||
for i in range(start_at_line, len(gcode)):
|
||||
my_z = find_axis(gcode[i], 'Z')
|
||||
if my_z is not None:
|
||||
return my_z, i
|
||||
|
||||
|
||||
def z_parse(gcode, start_at_line=0, end_at_line=0):
|
||||
i = start_at_line
|
||||
all_z = []
|
||||
line_between_z = []
|
||||
z_at_line = []
|
||||
# last_z = 0
|
||||
last_i = -1
|
||||
|
||||
while len(gcode) > i:
|
||||
try:
|
||||
z, i = find_z(gcode, i + 1)
|
||||
except TypeError:
|
||||
break
|
||||
|
||||
all_z.append(z)
|
||||
z_at_line.append(i)
|
||||
temp_line = i - last_i -1
|
||||
line_between_z.append(i - last_i - 1)
|
||||
# last_z = z
|
||||
last_i = i
|
||||
if 0 < end_at_line <= i or temp_line >= min_g1:
|
||||
# print('break at line {} at heigth {}'.format(i, z))
|
||||
break
|
||||
|
||||
line_between_z = line_between_z[1:]
|
||||
return all_z, line_between_z, z_at_line
|
||||
|
||||
|
||||
# get the lines which should be the first layer
|
||||
def get_lines(gcode, minimum):
|
||||
i = 0
|
||||
all_z, line_between_z, z_at_line = z_parse(gcode, end_at_line=max_g1)
|
||||
for count in line_between_z:
|
||||
i += 1
|
||||
if count > minimum:
|
||||
# print('layer: {}:{}'.format(z_at_line[i-1], z_at_line[i]))
|
||||
return z_at_line[i - 1], z_at_line[i]
|
||||
|
||||
|
||||
with open(input_file, 'r') as file:
|
||||
lines = 0
|
||||
for line in file:
|
||||
lines += 1
|
||||
if lines > 1000:
|
||||
break
|
||||
if has_g1(line):
|
||||
gcode.append(line)
|
||||
file.close()
|
||||
|
||||
start, end = get_lines(gcode, min_g1)
|
||||
for i in range(start, end):
|
||||
set_mima(gcode[i])
|
||||
|
||||
print('x_min:{} x_max:{}\ny_min:{} y_max:{}'.format(min_x, max_x, min_y, max_y))
|
||||
|
||||
# resize min/max - values for minimum scan
|
||||
if max_x - min_x < min_size:
|
||||
offset_x = int((min_size - (max_x - min_x)) / 2 + 0.5) # int round up
|
||||
# print('min_x! with {}'.format(int(max_x - min_x)))
|
||||
min_x = int(min_x) - offset_x
|
||||
max_x = int(max_x) + offset_x
|
||||
if max_y - min_y < min_size:
|
||||
offset_y = int((min_size - (max_y - min_y)) / 2 + 0.5) # int round up
|
||||
# print('min_y! with {}'.format(int(max_y - min_y)))
|
||||
min_y = int(min_y) - offset_y
|
||||
max_y = int(max_y) + offset_y
|
||||
|
||||
|
||||
new_command = 'G29 L{0} R{1} F{2} B{3} P{4}\n'.format(min_x,
|
||||
max_x,
|
||||
min_y,
|
||||
max_y,
|
||||
probing_points)
|
||||
|
||||
out_file = open(output_file, 'w')
|
||||
in_file = open(input_file, 'r')
|
||||
|
||||
for line in in_file:
|
||||
if line[:len(g29_keyword)].upper() == g29_keyword:
|
||||
out_file.write(new_command)
|
||||
print('write G29')
|
||||
else:
|
||||
out_file.write(line)
|
||||
|
||||
file.close()
|
||||
out_file.close()
|
||||
|
||||
print('auto G29 finished')
|
25
buildroot/share/sublime/MarlinFirmware.sublime-project
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"folders":
|
||||
[
|
||||
{
|
||||
"file_exclude_patterns":
|
||||
[
|
||||
"Marlin/platformio.ini",
|
||||
"Marlin/.travis.yml",
|
||||
"Marlin/.gitignore",
|
||||
"Marlin/*/platformio.ini",
|
||||
"Marlin/*/.travis.yml",
|
||||
"Marlin/*/.gitignore"
|
||||
],
|
||||
"folder_exclude_patterns":
|
||||
[
|
||||
".pio*",
|
||||
"Marlin/lib",
|
||||
"datatmp",
|
||||
"Marlin/*/src",
|
||||
".vscode"
|
||||
],
|
||||
"path": "../../.."
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
Overview:
|
||||
1) Install Sublime
|
||||
2) Install Deviot (?optional?)
|
||||
3) Install WebDevShell (this will execute the auto-build script)
|
||||
4) Copy the menu configuration to the proper Sublime directory
|
||||
5) Add platformio to your path (usually not needed)
|
||||
|
||||
|
||||
Sublime with autobuild
|
||||
Tools
|
||||
Install Package Control
|
||||
Tools
|
||||
Command Palette
|
||||
Package Control: Install Package
|
||||
type in deviot and click on it
|
||||
Tools
|
||||
Command Palette
|
||||
Package Control: Install Package
|
||||
type in WebDevShell and click on it
|
||||
|
||||
in Sublime, open Marlin directory with "platformio.ini" in it
|
||||
|
||||
starting in the top level directory, go to the folder "Buildroot/shared/Sublime"
|
||||
copy the folder "auto_build_sublime_menu" and contents to:
|
||||
Windows
|
||||
\Users\your_user_name\AppData\Roaming\Sublime Text 3\Packages
|
||||
Linux
|
||||
/home/your_user_name/.config/sublime-text-3/Packages/User
|
||||
macOS (Click on the Finder's 'Go' menu and hold down Option to open...)
|
||||
~/Library/Application Support/Sublime Text 3/Packages/User
|
||||
|
||||
The menu should now be visible
|
||||
|
||||
If you get an error message that says "file not found" and "subprocess.Popen(['platformio' ... "
|
||||
then you'll need to add platformio to your path.
|
||||
macOS
|
||||
sudo nano /etc/paths
|
||||
add these to the bottom
|
||||
/Users/bob/.platformio
|
||||
/Users/bob/.platformio/penv/bin
|
|
@ -0,0 +1,66 @@
|
|||
[
|
||||
|
||||
{
|
||||
"caption": "Auto Build",
|
||||
"children": [
|
||||
{
|
||||
"caption": "PIO Build",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py build"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "PIO Clean",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py clean"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "PIO Upload",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py upload"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "PIO Upload (traceback)",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py traceback"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "PIO Upload using Programmer",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py program"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "PIO Test",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py test"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "PIO Debug",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py debug"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "PIO Remote",
|
||||
"command": "webdevshell",
|
||||
"args": {
|
||||
"command": "python buildroot/share/atom/auto_build.py remote"
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "AutoBuild",
|
||||
"mnemonic": "A"
|
||||
}
|
||||
]
|
2
buildroot/share/vscode/AutoBuildMarlin/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
out
|
||||
node_modules
|
9
buildroot/share/vscode/AutoBuildMarlin/.vscodeignore
Normal file
|
@ -0,0 +1,9 @@
|
|||
.vscode/**
|
||||
.vscode-test/**
|
||||
out/test/**
|
||||
test/**
|
||||
src/**
|
||||
**/*.map
|
||||
.gitignore
|
||||
tsconfig.json
|
||||
vsc-extension-quickstart.md
|
52
buildroot/share/vscode/AutoBuildMarlin/README.md
Normal file
|
@ -0,0 +1,52 @@
|
|||
# Auto Build support for Visual Studio Code
|
||||
This `Visual Studio Code` extension provides access to the `Auto Build` script.
|
||||
|
||||
## Installation
|
||||
|
||||
Get the MarlinFirmware repository from GitHub. Open the directory `buildroot/share/vscode` and copy the `AutoBuildMarlin` folder to the `Visual Studio Code` extension directory. Relaunch `Visual Studio Code` to complete the installation.
|
||||
|
||||
To find the `Visual Studio Code` extension directory:
|
||||
|
||||
- Windows - Use Windows Explorer's address bar to open `C:/Users/USERNAME/.vscode/extensions`.
|
||||
- Mac - Use the Finder's `Go` menu to open `~/.vscode/extensions`.
|
||||
- Linux - In the Terminal type `open ~/.vscode/extensions`.
|
||||
|
||||
### 3. Install the PlatformIO extension
|
||||
Click on `View` > `Command Palette...`
|
||||
|
||||

|
||||
|
||||
Find and click on `Extensions: Install Extensions`
|
||||
|
||||

|
||||
|
||||
Type `platformio` into the search box and click on `Install` under `PlatformIO IDE`.
|
||||
|
||||

|
||||
|
||||
## Usage
|
||||
|
||||
This extension adds the Auto Build icon  to the Activities bar.
|
||||
|
||||
### 1. Open the Marlin folder
|
||||
Click on `File` > `Open Folder...`
|
||||
|
||||

|
||||
|
||||
This brings up the `Open Folder` dialog. Select the folder that has the `platformio.ini` file in it.
|
||||
|
||||

|
||||
|
||||
You should see something like the following. If not, click on the Explorer icon in the Activities bar.
|
||||
|
||||

|
||||
|
||||
### 2. Click on the Auto Build Icon 
|
||||
This brings up the Auto Build menu icon bar.
|
||||

|
||||
|
||||
### 3. Click on one of the four icons
|
||||
-  - Clicking on it starts `PIO Build`
|
||||
-  - Clicking on it starts `PIO Clean`
|
||||
-  - Clicking on it starts `PIO Upload`
|
||||
-  - Clicking on it starts `PIO Upload (traceback)`
|
37
buildroot/share/vscode/AutoBuildMarlin/extension.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
'use strict';
|
||||
|
||||
var vscode = require('vscode');
|
||||
|
||||
function activate(context) {
|
||||
|
||||
console.log('Extension "AutoBuildMarlin" is now active!');
|
||||
|
||||
var NEXT_TERM_ID = 1;
|
||||
var pio_build = vscode.commands.registerCommand('piobuild', function () {
|
||||
const terminal = vscode.window.createTerminal(`#${NEXT_TERM_ID++}`);
|
||||
terminal.sendText("python buildroot/share/atom/auto_build.py build");
|
||||
});
|
||||
var pio_clean = vscode.commands.registerCommand('pioclean', function () {
|
||||
const terminal = vscode.window.createTerminal(`#${NEXT_TERM_ID++}`);
|
||||
terminal.sendText("python buildroot/share/atom/auto_build.py clean");
|
||||
});
|
||||
var pio_upload = vscode.commands.registerCommand('pioupload', function () {
|
||||
const terminal = vscode.window.createTerminal(`#${NEXT_TERM_ID++}`);
|
||||
terminal.sendText("python buildroot/share/atom/auto_build.py upload");
|
||||
});
|
||||
var pio_traceback = vscode.commands.registerCommand('piotraceback', function () {
|
||||
const terminal = vscode.window.createTerminal(`#${NEXT_TERM_ID++}`);
|
||||
terminal.sendText("python buildroot/share/atom/auto_build.py traceback");
|
||||
});
|
||||
|
||||
context.subscriptions.push(pio_build);
|
||||
context.subscriptions.push(pio_clean);
|
||||
context.subscriptions.push(pio_upload);
|
||||
context.subscriptions.push(pio_traceback);
|
||||
}
|
||||
exports.activate = activate;
|
||||
|
||||
// this method is called when your extension is deactivated
|
||||
function deactivate() {
|
||||
}
|
||||
exports.deactivate = deactivate;
|
12
buildroot/share/vscode/AutoBuildMarlin/media/AB.svg
Normal file
|
@ -0,0 +1,12 @@
|
|||
<svg width="50" height="40" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
|
||||
<title>VScode view icon</title>
|
||||
<g stroke="null">
|
||||
<title>Layer 2</title>
|
||||
<text stroke="#000000" transform="matrix(0.8130887717336464,0,0,1,5.526016946709532,0) " xml:space="preserve" text-anchor="middle" font-family="serif" font-size="24" id="svg_2" y="28.27701" x="24.48401" stroke-width="0" fill="#ffffff">AB</text>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<rect fill-opacity="0" id="svg_1" height="28" width="28" y="6" x="11" stroke-width="0.5" stroke="#ffffff" fill="#000000"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 666 B |
3323
buildroot/share/vscode/AutoBuildMarlin/package-lock.json
generated
Normal file
96
buildroot/share/vscode/AutoBuildMarlin/package.json
Normal file
|
@ -0,0 +1,96 @@
|
|||
{
|
||||
"name": "auto-build",
|
||||
"displayName": "Auto Build Marlin",
|
||||
"description": "Auto Build Marlin for VS code",
|
||||
"version": "0.1.0",
|
||||
"publisher": "marlinfirmware",
|
||||
"engines": {
|
||||
"vscode": "^1.23.0"
|
||||
},
|
||||
"enableProposedApi": true,
|
||||
"categories": [
|
||||
"Other"
|
||||
],
|
||||
"activationEvents": [
|
||||
"onCommand:piobuild",
|
||||
"onCommand:pioclean",
|
||||
"onCommand:pioupload",
|
||||
"onCommand:piotraceback"
|
||||
],
|
||||
"main": "./extension",
|
||||
"contributes": {
|
||||
"viewsContainers": {
|
||||
"activitybar": [
|
||||
{
|
||||
"id": "auto-build",
|
||||
"title": "Auto Build Marlin",
|
||||
"icon": "media/AB.svg"
|
||||
}
|
||||
]
|
||||
},
|
||||
"views": {
|
||||
"auto-build": [
|
||||
{
|
||||
"id": "autobuild",
|
||||
"name": " "
|
||||
}
|
||||
]
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"command": "piobuild",
|
||||
"title": "PIO Build",
|
||||
"icon": "resources/B32x32_white.svg"
|
||||
},
|
||||
{
|
||||
"command": "pioclean",
|
||||
"title": "PIO Clean",
|
||||
"icon": "resources/C32x32_white.svg"
|
||||
},
|
||||
{
|
||||
"command": "pioupload",
|
||||
"title": "PIO Upload",
|
||||
"icon": "resources/U32x32_white.svg"
|
||||
},
|
||||
{
|
||||
"command": "piotraceback",
|
||||
"title": "PIO Upload (traceback)",
|
||||
"icon": "resources/Ut32x32_white.svg"
|
||||
}
|
||||
],
|
||||
"menus": {
|
||||
"view/title": [
|
||||
{
|
||||
"command": "piobuild",
|
||||
"group": "navigation@1"
|
||||
},
|
||||
{
|
||||
"command": "pioclean",
|
||||
"group": "navigation@2"
|
||||
},
|
||||
{
|
||||
"command": "pioupload",
|
||||
"group": "navigation@3"
|
||||
},
|
||||
{
|
||||
"command": "piotraceback",
|
||||
"group": "navigation@4"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"vscode:prepublish": "npm run compile",
|
||||
"compile": "tsc -p ./",
|
||||
"watch": "tsc -watch -p ./",
|
||||
"postinstall": "node ./node_modules/vscode/bin/install",
|
||||
"test": "npm run compile && node ./node_modules/vscode/bin/test"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vscode": "^1.1.17",
|
||||
"typescript": "^2.6.1",
|
||||
"tslint": "^5.8.0",
|
||||
"@types/node": "^7.0.43",
|
||||
"@types/mocha": "^2.2.42"
|
||||
}
|
||||
}
|
BIN
buildroot/share/vscode/AutoBuildMarlin/resources/AB_menu.png
Normal file
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 37 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="480px" height="480px" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="24" height="24" style="fill: black; stroke: black;"/><text style="fill:white;font-family:Arial;font-size:14px;font-weight:lighter;stroke:white;stroke-width:0.3;" x="7.75" y="16.8" id="e2_texte" dy="" dx="">B</text></svg>
|
After Width: | Height: | Size: 440 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="610px" height="390px" viewBox="-9.02564 0 50.0513 32" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="32" height="32" style="fill: black; stroke: black;"/><text style="fill:white;font-family:Arial;font-size:45px;stroke:white;stroke-width:0.5;font-style:normal;font-weight:lighter;" x="2.18804" y="32.2188" id="e1_texte" dy="" dx="">B</text></svg>
|
After Width: | Height: | Size: 476 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="28" height="28" style="fill:black; stroke:black;"/><text style="fill:white;font-family:Arial;font-size:24px;stroke:white;font-weight:lighter;stroke-width:0.4;" x="7.18702" y="22.6128" id="e1_texte" dy="" dx="">B</text></svg>
|
After Width: | Height: | Size: 442 B |
BIN
buildroot/share/vscode/AutoBuildMarlin/resources/Build.png
Normal file
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="610px" height="390px" viewBox="-9.02564 0 50.0513 32" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="32" height="32" style="fill: black; stroke: black;"/><text style="font-family: Arial; font-size:42px; font-style: normal; font-weight: lighter; stroke: white; stroke-width: 0.5;fill:white;" x="0.437605" y="31.1795" id="e2_texte" dy="" dx="">C</text></svg>
|
After Width: | Height: | Size: 487 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="28" height="28" style="fill: black; stroke: black;"/><text style="fill:white;font-family:Arial;font-size:24px;font-weight:lighter;stroke:white;stroke-width:0.4;" x="5.51903" y="23.0989" id="e1_texte" dy="" dx="">C</text></svg>
|
After Width: | Height: | Size: 444 B |
BIN
buildroot/share/vscode/AutoBuildMarlin/resources/Clean.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
buildroot/share/vscode/AutoBuildMarlin/resources/Open_Folder.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
buildroot/share/vscode/AutoBuildMarlin/resources/Open_Marlin.png
Normal file
After Width: | Height: | Size: 56 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="610px" height="390px" viewBox="-9.02564 0 50.0513 32" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="32" height="32" style="fill: black; stroke: black;"/><text style="fill:white;font-family:Arial;font-size:42px;font-weight:lighter;stroke:white;stroke-width:0.5;" x="3.06325" y="31.1795" id="e4_texte" dy="" dx="">T</text></svg>
|
After Width: | Height: | Size: 458 B |
BIN
buildroot/share/vscode/AutoBuildMarlin/resources/Traceback.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="610px" height="390px" viewBox="-9.02564 0 50.0513 32" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="32" height="32" style="fill: black; stroke: black;"/><text style="fill:white;font-family:Arial;font-size:42px;font-weight:lighter;stroke:white;stroke-width:0.5;" x="0.71111" y="31.2342" id="e3_texte" dy="" dx="">U</text></svg>
|
After Width: | Height: | Size: 458 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="28" height="28" style="fill: black; stroke: black;"/><text style="fill:white;font-family:Arial;font-size:24px;font-weight:lighter;stroke:white;stroke-width:0.4;" x="5.17808" y="22.0335" id="e2_texte" dy="" dx="">U</text></svg>
|
After Width: | Height: | Size: 444 B |
BIN
buildroot/share/vscode/AutoBuildMarlin/resources/Upload.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="610px" height="390px" viewBox="-9.02564 0 50.0513 32" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="32" height="32" style="fill: black; stroke: black;"/><text style="fill: white; font-family: Arial; font-size:42px; font-weight: lighter; stroke: white; stroke-width: 0.5;font-stretch:condensed;" x="-2.40683" y="31.0701" id="e6_texte" dy="" dx="">Ut</text></svg>
|
After Width: | Height: | Size: 493 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="28" height="28" style="fill: black; stroke: black;"/><text style="fill:white;font-family:Arial;font-size:24px;font-weight:lighter;font-stretch:condensed;stroke:white;stroke-width:0.4;" x="3.34551" y="22.8858" id="e3_texte" dy="" dx="">Ut</text></svg>
|
After Width: | Height: | Size: 468 B |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 10 KiB |
12
buildroot/share/vscode/AutoBuildMarlin/tsconfig.json
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"outDir": "out",
|
||||
"lib": [
|
||||
"es6"
|
||||
],
|
||||
"sourceMap": true,
|
||||
"rootDir": "."
|
||||
}
|
||||
}
|