loader: reply dump mode. additional information in init reply.
This commit is contained in:
parent
0a5a737419
commit
42984320de
|
@ -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);
|
||||
|
|
|
@ -109,6 +109,20 @@ loader_send_simple(uint8_t dlci, uint8_t command) {
|
|||
sercomm_sendmsg(dlci, msg);
|
||||
}
|
||||
|
||||
extern unsigned char _start;
|
||||
|
||||
static void
|
||||
loader_send_init(uint8_t dlci) {
|
||||
struct msgb *msg = sercomm_alloc_msgb(1);
|
||||
if(!msg) {
|
||||
puts("Failed to allocate message buffer!\n");
|
||||
}
|
||||
msgb_put_u8(msg, LOADER_INIT);
|
||||
msgb_put_u32(msg, 0);
|
||||
msgb_put_u32(msg, &_start);
|
||||
sercomm_sendmsg(dlci, msg);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* Always disable wdt (some platforms enable it on boot) */
|
||||
|
@ -138,7 +152,7 @@ int main(void)
|
|||
sercomm_register_rx_cb(SC_DLCI_LOADER, &cmd_handler);
|
||||
|
||||
/* Notify any running osmoload about our startup */
|
||||
loader_send_simple(SC_DLCI_LOADER, LOADER_INIT);
|
||||
loader_send_init(SC_DLCI_LOADER);
|
||||
|
||||
/* Wait for events */
|
||||
while (1) {
|
||||
|
|
Loading…
Reference in New Issue