diff options
author | Ingo Albrecht <prom@berlin.ccc.de> | 2010-03-13 22:25:47 +0100 |
---|---|---|
committer | Ingo Albrecht <prom@berlin.ccc.de> | 2010-07-20 14:41:19 +0200 |
commit | 42984320de6b8c8f3d3bf72cd6640d743f499538 (patch) | |
tree | 55c12875fc027230345f700dcfc70e9c7bd3e2ef /src/host/osmocon | |
parent | 0a5a7374192b58ad39048dd7daf422509e109307 (diff) |
loader: reply dump mode. additional information in init reply.
Diffstat (limited to 'src/host/osmocon')
-rw-r--r-- | src/host/osmocon/osmoload.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/host/osmocon/osmoload.c b/src/host/osmocon/osmoload.c index a9953531..782db05a 100644 --- a/src/host/osmocon/osmoload.c +++ b/src/host/osmocon/osmoload.c @@ -54,7 +54,7 @@ enum { STATE_QUERY_PENDING, STATE_DUMP_IN_PROGRESS, STATE_LOAD_IN_PROGRESS, - + STATE_DUMPING, }; static struct { @@ -95,6 +95,7 @@ static int usage(const char *name) puts(" ping - Ping the loader"); puts(" reset - Reset device"); puts(" off - Power off device"); + puts(" dump - Dump loader traffic to console"); exit(2); } @@ -185,12 +186,15 @@ loader_handle_reply(struct msgb *msg) { uint8_t length; uint32_t address; + uint32_t entrypoint; void *data; switch(cmd) { case LOADER_INIT: - printf("Loader has been started\n"); + address = msgb_get_u32(msg); + entrypoint = msgb_get_u32(msg); + printf("Loader at entry %x has been started, requesting load to %x\n", entrypoint, address); break; case LOADER_PING: case LOADER_RESET: @@ -219,6 +223,7 @@ loader_handle_reply(struct msgb *msg) { switch(osmoload.state) { case STATE_QUERY_PENDING: + case STATE_DUMPING: switch(cmd) { case LOADER_PING: printf("Received pong.\n"); @@ -248,8 +253,10 @@ loader_handle_reply(struct msgb *msg) { default: break; } - if(osmoload.command == cmd) { - osmoload.quit = 1; + if(osmoload.state == STATE_QUERY_PENDING) { + if(osmoload.command == cmd) { + osmoload.quit = 1; + } } break; case STATE_DUMP_IN_PROGRESS: @@ -532,7 +539,9 @@ loader_command(char *name, int cmdc, char **cmdv) { char buf[MEM_MSG_MAX]; memset(buf, 23, sizeof(buf)); - if(!strcmp(cmd, "ping")) { + if(!strcmp(cmd, "dump")) { + osmoload.state = STATE_DUMPING; + } else if(!strcmp(cmd, "ping")) { loader_send_query(LOADER_PING); } else if(!strcmp(cmd, "off")) { loader_send_query(LOADER_POWEROFF); |