summaryrefslogtreecommitdiff
path: root/avr
diff options
context:
space:
mode:
authorLeo C2015-05-05 15:41:33 +0200
committerLeo C2015-05-05 15:41:33 +0200
commitbf5870430d2d1903b6dcdf1431d80b261f9a5d45 (patch)
treefd50a509913a6964d4440632bbb616e4202d0627 /avr
parent64cc220767e870fad388fb9021cf96ff2958275b (diff)
downloadz180-stamp-bf5870430d2d1903b6dcdf1431d80b261f9a5d45.zip
loadi cosmetic changes
Diffstat (limited to 'avr')
-rw-r--r--avr/cmd_loadihex.c34
-rw-r--r--avr/command_tbl.c5
2 files changed, 29 insertions, 10 deletions
diff --git a/avr/cmd_loadihex.c b/avr/cmd_loadihex.c
index aaee064..18d5331 100644
--- a/avr/cmd_loadihex.c
+++ b/avr/cmd_loadihex.c
@@ -93,11 +93,17 @@ int ihex_get_record(ihex_t *rec) {
uint8_t sum;
rec->status = IHX_BROKEN;
+ rec->len = 0;
+ rec->type = 0xff;
-
- while ((c = my_getchar(0)) != ':')
+ while ((c = my_getchar(0)) != ':') {
if (c == 0x03)
- return -1;
+ return -1; /* Control-C */
+ if (c == 0x04) {
+ rec->status = IHX_OK;
+ return 0; /*Control-D, EOF */
+ }
+ }
if ((c = get_hexbyte()) < 0) /* Start code */
return -1;
@@ -154,6 +160,7 @@ command_ret_t do_loadihex(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
uint32_t address_low = address_max;
command_ret_t rcode = CMD_RET_FAILURE;
ihex_t rec;
+ bool firstrec = true;
(void) cmdtp; (void) flag;
@@ -161,12 +168,18 @@ command_ret_t do_loadihex(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
if (argc > 1)
offset = strtol(argv[1], NULL, 16);
+ printf_P(PSTR("Waiting for Intel Hex Records...\n"));
+
while (ihex_get_record(&rec) > 0 &&
rec.status == IHX_OK &&
rec.type != 1 ) {
switch (rec.type) {
case 0: /* Data record */
+ if (firstrec) {
+ printf_P(PSTR("Loading: 0x....."));
+ firstrec = false;
+ }
if (rec.len) {
uint32_t addr = base_address + rec.address + offset;
if (addr < address_low)
@@ -176,7 +189,7 @@ command_ret_t do_loadihex(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
// debug("low: 0x%.5lX, high: 0x%.5lX, max: 0x%.5lX, addr: 0x%.5lX, len: %d\n",
// address_low, address_high, address_max, addr, rec.len);
-
+ printf_P(PSTR("\b\b\b\b\b%.5lX"), addr);
if (addr < address_max) {
uint32_t tmplen = address_max - addr;
if (rec.len > tmplen)
@@ -224,11 +237,16 @@ command_ret_t do_loadihex(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
break;
}
- /* flush input buffer */
- while (my_getchar(0) > 0)
- ;
- printf_P(PSTR("Data loaded: "));
+ for (uint_fast8_t i=0; i<100; ++i) {
+ /* flush input buffer */
+ while (my_getchar(0) > 0)
+ ;
+ udelay(1000);
+ }
+
+
+ printf_P(PSTR("\nData loaded: "));
if (address_low >= MIN(address_high, address_max))
printf_P(PSTR("None.\n"));
else
diff --git a/avr/command_tbl.c b/avr/command_tbl.c
index b3c401c..23d0803 100644
--- a/avr/command_tbl.c
+++ b/avr/command_tbl.c
@@ -128,8 +128,9 @@ CMD_TBL_ITEM(
),
CMD_TBL_ITEM(
loadi, 2, 0, do_loadihex,
- "load intel hex file",
- "[[-]offset]"
+ "load intel hex file over serial line",
+ "[[-]offset]\n"
+ " - load Intel-Hex-Record file over serial line with offset 'offset'"
),
CMD_TBL_ITEM(
go, 2, 0, do_go,