blob: d2139f21de19b7375fc47f5cf977fdd646d40e65 (
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#!/bin/bash
# TS100 Flasher for Linux by Alex Wigen (https://github.com/awigen)
# Jan 2021 - Update by Ysard (https://github.com/ysard)
DIR_TMP="/tmp/ts100"
HEX_FIRMWARE="$DIR_TMP/ts100.hex"
usage() {
echo
echo "#################"
echo "# TS100 Flasher #"
echo "#################"
echo
echo " Usage: $0 <HEXFILE>"
echo
echo "This script has been tested to work on Fedora."
echo "If you experience any issues please open a ticket at:"
echo "https://github.com/Ralim/IronOS/issues/new"
echo
}
GAUTOMOUNT=0
disable_gautomount() {
if ! GSETTINGS=$(which gsettings); then
return 1
fi
if ! gsettings get org.gnome.desktop.media-handling automount | grep true > /dev/null; then
GAUTOMOUNT=1
gsettings set org.gnome.desktop.media-handling automount false
fi
}
enable_gautomount() {
if [ "$GAUTOMOUNT" -ne 0 ]; then
gsettings set org.gnome.desktop.media-handling automount true
fi
}
is_attached() {
if ! output=$(lsblk -b --raw --output NAME,MODEL | grep 'DFU.*Disk'); then
return 1
fi
DEVICE=$(echo "$output" | awk '{print "/dev/"$1}')
}
instructions="not printed"
wait_for_ts100() {
while ! is_attached; do
if [ "$instructions" = "not printed" ]; then
echo
echo "#####################################################"
echo "# Waiting for TS100 config disk device to appear #"
echo "# #"
echo "# Connect the soldering iron with a USB cable while #"
echo "# holding the button closest to the tip pressed #"
echo "#####################################################"
echo
instructions="printed"
fi
sleep 0.1
done
}
mount_ts100() {
mkdir -p "$DIR_TMP"
user="${UID:-$(id -u)}"
if ! sudo mount -t msdos -o uid=$user "$DEVICE" "$DIR_TMP"; then
echo "Failed to mount $DEVICE on $DIR_TMP"
exit 1
fi
}
umount_ts100() {
if ! (mountpoint "$DIR_TMP" > /dev/null && sudo umount "$DIR_TMP"); then
echo "Failed to unmount $DIR_TMP"
exit 1
fi
sudo rmdir "$DIR_TMP"
}
check_flash() {
RDY_FIRMWARE="${HEX_FIRMWARE%.*}.rdy"
ERR_FIRMWARE="${HEX_FIRMWARE%.*}.err"
if [ -f "$RDY_FIRMWARE" ]; then
echo -e "\e[92mFlash is done\e[0m"
echo "Disconnect the USB and power up the iron. You're good to go."
elif [ -f "$ERR_FIRMWARE" ]; then
echo -e "\e[91mFlash error; Please retry!\e[0m"
else
echo -e "\e[91mUNKNOWN error\e[0m"
echo "Flash result: "
ls "$DIR_TMP"/ts100*
fi
}
cleanup() {
enable_gautomount
if [ -d "$DIR_TMP" ]; then
umount_ts100
fi
}
trap cleanup EXIT
if [ "$#" -ne 1 ]; then
echo "Please provide a HEX file to flash"
usage
exit 1
fi
if [ ! -f "$1" ]; then
echo "'$1' is not a regular file, please provide a HEX file to flash"
usage
exit 1
fi
if [ "$(head -c1 "$1")" != ":" ] || [ "$(tail -n1 "$1" | head -c1)" != ":" ]; then
echo "'$1' doesn't look like a valid HEX file. Please provide a HEX file to flash"
usage
exit 1
fi
disable_gautomount
wait_for_ts100
echo "Found TS100 config disk device on $DEVICE"
mount_ts100
echo "Mounted config disk drive, flashing..."
dd if="$1" of="$HEX_FIRMWARE" oflag=direct
umount_ts100
echo "Waiting for TS100 to flash"
sleep 5
echo "Remounting config disk drive"
wait_for_ts100
mount_ts100
check_flash
|