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 },  }; | 
