diff options
author | Keith Packard <keithp@keithp.com> | 2013-03-24 15:24:42 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-05-07 20:16:52 -0700 |
commit | 9362d400d06aa3badfc826d8edbd7c55406b4f7d (patch) | |
tree | a5c2582f67e6700fae027c9259a49aa32ee03391 /src | |
parent | a3f668e71751608ea2e38519003446bc6ceb348f (diff) |
altos: Switch ao_stm_flash to read/write binary blocks
Change from development testing code to something that actually reads
and writes data from the USB link.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/stm-flash/ao_stm_flash.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/stm-flash/ao_stm_flash.c b/src/stm-flash/ao_stm_flash.c index 51856b46..344bceb9 100644 --- a/src/stm-flash/ao_stm_flash.c +++ b/src/stm-flash/ao_stm_flash.c @@ -74,11 +74,11 @@ ao_block_write(void) uint16_t i; if (addr < 0x08002000 || 0x08200000 <= addr) { - puts("Invalid address"); + ao_put_string("Invalid address\n"); return; } for (i = 0; i < 256; i++) - u.data8[i] = i; + u.data8[i] = getchar(); ao_flash_page(p, u.data32); } @@ -103,18 +103,43 @@ ao_block_read(void) for (i = 0; i < 256; i++) { c = *p++; - puthex(c); + (*ao_stdios[ao_cur_stdio].putchar)(c); + } +} + +void +ao_block_read_hex(void) +{ + uint32_t addr = ao_cmd_hex32(); + uint8_t *p = (uint8_t *) addr; + uint16_t i; + uint8_t c; + + for (i = 0; i < 256; i++) { + c = *p++; puthex(c>>4); + puthex(c); if ((i & 0xf) == 0xf) putchar('\n'); } } +static void +ao_show_version(void) +{ + puts("altos-loader"); + ao_put_string("manufacturer "); puts(ao_manufacturer); + ao_put_string("product "); puts(ao_product); + ao_put_string("software-version "); puts(ao_version); +} + __code struct ao_cmds ao_flash_cmds[] = { + { ao_show_version, "v\0Version" }, { ao_application, "a\0Switch to application" }, - { ao_block_erase, "e <addr>\0Erase block." }, + { ao_block_erase, "X <addr>\0Erase block." }, { ao_block_write, "W <addr>\0Write block. 256 binary bytes follow newline" }, - { ao_block_read, "R <addr>\0Read block. Returns 256 bytes" }, + { ao_block_read, "R <addr>\0Read block. Returns 256 binary bytes" }, + { ao_block_read_hex, "H <addr>\0Hex read block. Returns 256 bytes in hex" }, { 0, NULL }, }; |