This commit is contained in:
dfriedrich 2019-03-21 10:43:51 -03:00
commit 60ece440f6
553 changed files with 361616 additions and 0 deletions

View 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

View file

@ -0,0 +1,4 @@
#!/usr/bin/env bash
build_marlin $@ && exit 0
exit 1

View 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
View file

@ -0,0 +1,3 @@
#!/usr/bin/env bash
eval "echo \"#define ${1} ${2}\" >>Marlin/Configuration.h"

View file

@ -0,0 +1,3 @@
#!/usr/bin/env bash
eval "echo \"#define ${1} ${2}\" >>Marlin/Configuration_adv.h"

View 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

View 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
View 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

View 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
View 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"

View 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
View 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"

View 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

View 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

View 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
View 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

View 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"
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View 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
)

View 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
)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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.

View 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

View 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&nbsp;[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&nbsp;[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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|Prune your merged and remotely-deleted branches.
---
### Examples
Coming Soon!

View 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
View 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
View 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

View 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
View 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
View 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

View 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"

View 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
View 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
View 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
View 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
View 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
View 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
View 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

View 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:
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View 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

View 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

View 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();
}

View 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"

View 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:])

View 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

View 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')

View 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": "../../.."
}
]
}

View file

@ -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

View file

@ -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"
}
]

View file

@ -0,0 +1,2 @@
out
node_modules

View file

@ -0,0 +1,9 @@
.vscode/**
.vscode-test/**
out/test/**
test/**
src/**
**/*.map
.gitignore
tsconfig.json
vsc-extension-quickstart.md

View 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...`
![](./resources/view_command_palette.png)
Find and click on `Extensions: Install Extensions`
![](./resources/install_extensions.png)
Type `platformio` into the search box and click on `Install` under `PlatformIO IDE`.
![](./resources/platformio_install.png)
## Usage
This extension adds the Auto Build icon ![](./media/AB.svg) to the Activities bar.
### 1. Open the Marlin folder
Click on `File` > `Open Folder...`
![](./resources/Open_Folder.png)
This brings up the `Open Folder` dialog. Select the folder that has the `platformio.ini` file in it.
![](./resources/Open_Marlin.png)
You should see something like the following. If not, click on the Explorer icon in the Activities bar.
![](./resources/Activity_bar.png)
### 2. Click on the Auto Build Icon ![](./media/AB.svg)
This brings up the Auto Build menu icon bar.
![](./resources/AB_menu.png)
### 3. Click on one of the four icons
- ![](./resources/B_small.svg) - Clicking on it starts `PIO Build`
- ![](./resources/C_small.svg) - Clicking on it starts `PIO Clean`
- ![](./resources/U_small.svg) - Clicking on it starts `PIO Upload`
- ![](./resources/Ut_small.svg) - Clicking on it starts `PIO Upload (traceback)`

View 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;

View 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

File diff suppressed because it is too large Load diff

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View file

@ -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

View file

@ -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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

@ -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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,12 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"outDir": "out",
"lib": [
"es6"
],
"sourceMap": true,
"rootDir": "."
}
}