aboutsummaryrefslogtreecommitdiff
path: root/testing/DMBootloader/create_dmbootloader_cmd.sh
blob: 4bb17b63efa6480fc23093f1e3f1a05d1b8cd9e4 (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
#!/bin/sh

# Generates the Erase, Read, and Write YUP commands for DMBootloader.
# Write command is generated with random data of the page.

cmd_write_header()
{
    little_endian=$(printf "%04X\n" $2 | sed 's,^\(..\)\(..\)$,\2\1,')
    
    printf '\x'$1 >"$file"
    printf '\x'$(echo $little_endian | cut -c1-2) >>"$3"
    printf '\x'$(echo $little_endian | cut -c3-4) >>"$3"
}

usage()
{
    {
	echo "Usage: $0  CMD  PAGE_NUMBER  OUT_FILE"
	echo "  CMD          write, read, or erase"
	echo "  PAGE_NUMBER  16-bit page number"
	echo "  OUT_FILE     file to which the command's binary data will be written"
    } >&2
    exit 1
}

[ $# -ne 3 ] && usage

cmd=$1
page_num=$2
file="${3}"

case "$cmd" in
    write)
	cmd_write_header 00 $page_num "$file"
        ;;
    read)
	cmd_write_header 02 $page_num "$file"
        ;;
    erase)
	cmd_write_header 01 $page_num "$file"
        ;;
    *)
        echo "Unknown command requested" >&2
	usage
esac

[ "$1" = "write" ] && dd if=/dev/urandom of="$file" bs=1 count=512 seek=3 2>/dev/null

exit 0