aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/flash-sdcard.sh
blob: 2e85fd355d87fe601b388040b8c58a6fb25b2dfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash
#  This script launches flash_sdcard.py, a utility that enables
#  unattended firmware updates on boards with "SD Card" bootloaders

# Non-standard installations may need to change this location
KLIPPY_ENV="${HOME}/klippy-env/bin/python"
SRCDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/.. && pwd )"
KUTTER_BIN="${SRCDIR}/out/kutter.bin"
KUTTER_BIN_DEFAULT=$KUTTER_BIN
KUTTER_DICT_DEFAULT="${SRCDIR}/out/kutter.dict"
SPI_FLASH="${SRCDIR}/scripts/spi_flash/spi_flash.py"
BAUD_ARG=""
CHECK_ARG=""
# Force script to exit if an error occurs
set -e

print_help_message()
{
    echo "SD Card upload utility for Kutter"
    echo
    echo "usage: flash_sdcard.sh [-h] [-l] [-c] [-b <baud>] [-f <firmware>] [-d <dictionary>]"
    echo "                       <device> <board>"
    echo
    echo "positional arguments:"
    echo "  <device>          device serial port"
    echo "  <board>           board type"
    echo
    echo "optional arguments:"
    echo "  -h                show this message"
    echo "  -l                list available boards"
    echo "  -c                run flash check/verify only (skip upload)"
    echo "  -b <baud>         serial baud rate (default is 250000)"
    echo "  -f <firmware>     path to kutter.bin"
    echo "  -d <dictionary>   path to kutter.dict for firmware validation"
}

# Parse command line "optional args"
while getopts "hlcb:f:d:" arg; do
    case $arg in
        h)
            print_help_message
            exit 0
            ;;
        l)
            ${KLIPPY_ENV} ${SPI_FLASH} -l
            exit 0
            ;;
        c) CHECK_ARG="-c";;
        b) BAUD_ARG="-b ${OPTARG}";;
        f) KUTTER_BIN=$OPTARG;;
        d) KUTTER_DICT=$OPTARG;;
    esac
done

# Make sure that we have the correct number of positional args
if [ $(($# - $OPTIND + 1)) -ne 2 ]; then
    echo "Invalid number of args: $(($# - $OPTIND + 1))"
    exit -1
fi

DEVICE=${@:$OPTIND:1}
BOARD=${@:$OPTIND+1:1}

if [ ! -f $KUTTER_BIN ]; then
    echo "No file found at '${KUTTER_BIN}'"
    exit -1
fi

if [ ! -e $DEVICE ]; then
    echo "No device found at '${DEVICE}'"
    exit -1
fi

if [ ! $KUTTER_DICT ] && [ $KUTTER_BIN == $KUTTER_BIN_DEFAULT ] ; then
    KUTTER_DICT=$KUTTER_DICT_DEFAULT
fi

if [ $KUTTER_DICT ]; then
    if [ ! -f $KUTTER_DICT ]; then
        echo "No file found at '${KUTTER_BIN}'"
        exit -1
    fi
    KUTTER_DICT="-d ${KUTTER_DICT}"
fi

# Run Script
echo "Flashing ${KUTTER_BIN} to ${DEVICE}"
${KLIPPY_ENV} ${SPI_FLASH} ${CHECK_ARG} ${BAUD_ARG} ${KUTTER_DICT} ${DEVICE} ${BOARD} ${KUTTER_BIN}