blob: 3c802b440facaa647e80df0625c0c531f028232f (
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
#!/bin/sh
DFU_MODE=0
CPLD=0
get_dfu() {
if [ -r "/usr/share/hackrf/hackrf_one_usb.dfu" ]; then
ram_firmware="/usr/share/hackrf/hackrf_one_usb.dfu"
else
printf "Unable to find hackrf_one_usb.dfu in the search path\n"
exit 1
fi
export ram_firmware
}
get_cpld() {
if [ -r "/usr/share/hackrf/hackrf_cpld_default.xsvf" ]; then
cpld="/usr/share/hackrf/hackrf_cpld_default.xsvf"
else
printf "Unable to find default.xsvf in the search path\n"
exit 1
fi
export cpld
}
usage() {
printf "hackrf_easy_flash list\n"
printf "hackrf_easy_flash upgrade\n"
}
if [ -z "${1}" ]; then
usage
exit 0
fi
list_firmware() {
if [ ${DFU_MODE} = 1 ]; then
if [ -z "${ram_firmware}" ]; then
get_dfu
fi
printf "Best DFU found: ${ram_firmware}\n"
fi
printf "Available firmware options:\n"
if [ -r "/usr/share/hackrf/hackrf_one_usb.bin" ]; then
printf "hackrf (default)\n"
fi
if [ -r "/usr/share/hackrf/portapack-h1-firmware.bin" ]; then
printf "portapack (--portapack)\n"
fi
if [ -r "/usr/share/hackrf/portapack-h1-havoc.bin" ]; then
printf "portapack-havoc (--havoc)\n"
fi
}
#parse args
while [ -n "${1}" ]; do
case $1 in
-h|--help)
usage
exit 0
;;
list|--list)
list_firmware
exit 0
;;
update|--update|upgrade|--upgrade|hackrf|--hackrf)
firmware="/usr/share/hackrf/hackrf_one_usb.bin"
TARGET=hackrf
shift
;;
portapack|--portapack)
firmware="/usr/share/hackrf/portapack-h1-firmware.bin"
TARGET=portapack
shift
;;
havoc|--havoc)
firmware="/usr/share/hackrf/portapack-h1-havoc.bin"
TARGET=havoc
shift
;;
cpld|--cpld)
CPLD=1
get_cpld
shift
;;
dfu|--dfu)
DFU_MODE=1
get_dfu
shift
;;
--)
shift
break
;;
*)
break
;;
esac
done
if [ -z "${firmware}" ]; then
firmware="/usr/share/hackrf/hackrf_one_usb.bin"
TARGET="hackrf"
fi
if [ ! -r "${firmware}" ]; then
printf "Unable to find or read ${firmware}\n"
printf "Please ensure the requested firmware is installed and readable\n"
exit 1
fi
if [ "${CPLD}" = 1 ] && [ "${TARGET}" != "hackrf" ]; then
printf "To update the CPLD you must use the stock hackrf firmware or do this update manually\n"
printf "Try \"$(basename $0) --cpld && $(basename $0) ${TARGET}\"\n"
exit 1
fi
if [ ${DFU_MODE} = 1 ]; then
printf "Preparing to reset hackrf with DFU ${ram_firmware}\n"
printf "Then flashing with ${firmware}\n\n"
printf "Hold down the HackRF's DFU button (the button closest to the antenna jack)\n"
printf "then plug the HackRF into a USB port on your computer.\n"
printf "After the HackRF is plugged in, you may release the DFU button.\n"
printf "Press any key to continue or ^c to abort\n"
read
if ! dfu-util --device 1fc9:000c --download "${ram_firmware}" --reset; then
printf "dfu-util reported failure, quitting\n"
exit 1
fi
sleep 2s
else
if hackrf_info | grep -q 'No HackRF boards found.'; then
printf "No hackrf found, please ensure you are in hackrf mode or try --dfu\n"
exit 1
fi
fi
if hackrf_spiflash -w "${firmware}"; then
sleep 3s
hackrf_spiflash -R
sleep 3s
else
printf "hackrf_spiflash reported failure, quitting\n"
exit 1
fi
if [ "${CPLD}" = 1 ]; then
#printf "To update the cpld, please reset your hackrf into it's new firmware before updating the cpld\n"
#printf "Please reset your hackrf by pressing the button furthest from the antenna or power cycling it.\n"
#printf "Press any key to continue or ^c to abort\n"
#read
if hackrf_cpldjtag -x "${cpld}"; then
sleep 3s
hackrf_spiflash -R
else
printf "hackrf_cpldjtag reported failure\n"
exit 1
fi
fi
if [ "${TARGET}" = "hackrf" ]; then
hackrf_info
fi
printf "If you saw no errors, you are up to date with the requested firmware\n"
|