int main(int argc, char **argv) { region_t r; int pc = 0, ret; region_addr_t start, end, len; while (1) { switch (bcode_program[pc++]) { case BCODE_END: exit(0); case BCODE_CREATE: start = bcode_program[pc++]; end = bcode_program[pc++]; printf("Creating region with args(%d, %d)\n", start, end); r = region_create(start, end); if (!r) { fprintf(stderr, "Couldn't create region.\n"); exit(1); } break; case BCODE_ALLOCATE: start = bcode_program[pc++]; end = bcode_program[pc++]; ret = region_allocate(r, start, end); printf("Region_allocate(%d, %d) returns %d\n", start, end, ret); break; case BCODE_PRINT: region_print(r, stdout); break; } } }
int main(int argc, char *argv[]) { command_t *cmd; mem_region_t *mr; target_context_t *tc; #if !defined(WIN32) cmd = get_commands(argc, argv); if(cmd == NULL) return -1; #endif /* open raw ethernet socket if desired, then drop root */ #if !defined(WIN32) if (opt_ethernet) eth_raw_socket(); #endif drop_root(); /* miscellaneous initialization */ init_crc32(); /* open a connection to the target */ if (!(tc = target_open(opt_port, opt_ethernet ? opt_netif : NULL))){ panic("couldn't open connection to target"); return -1; } while (cmd) { command_t *tmp; if (opt_verbose) print_command(cmd); switch (cmd->type) { #ifdef AJ_FIRMUPDATE_SUPPORT case CMD_FIRMUPDATE: mr = slurp_file_or_die(cmd->input_path); if(require_flags(tc, REQ_MEM_MAP) == -1){ return -1; } firmupdate(tc, mr); break; #endif case CMD_DOWNLOAD: if (cmd->region && cmd->info.download.have_address){ panic("can't specify both region and address"); return -1; } mr = slurp_file_or_die(cmd->input_path); if(require_flags(tc, REQ_MEM_MAP) == -1){ return -1; } if (cmd->region) download_to_region(tc, mr, cmd->region); else if (cmd->info.download.have_address) download_to_addr(tc, mr, cmd->addr); else{ warn("download: must specify address or region\n"); return -1; } break; case CMD_ERASE: if (cmd->region && cmd->info.download.have_address){ panic("can't specify both region and address"); return -1; } if(require_flags(tc, REQ_MEM_MAP) == -1){ return -1; } if (cmd->region) erase_region(tc, cmd->region); else if (cmd->info.download.have_address) erase_addr(tc, cmd->addr); else{ warn("erase: must specify address or region\n"); return -1; } break; case CMD_MAP: if(require_flags(tc, REQ_MEM_MAP) == -1){ return -1; } region_print(tc->memmap); return 0; case CMD_TERMINAL: if(restore_interactive(tc) == -1){ return -1; } #if !defined(WIN32) serial_terminal(); #endif return 0; case CMD_MD5SUM: if (cmd->region && cmd->info.download.have_address){ panic("md5sum: can't specify both region and address"); return -1; } if (cmd->size == 0) { warn("md5sum: must specify size\n"); return -1; } if (cmd->region){ if(require_flags(tc, REQ_MEM_MAP) == -1){ return -1; } md5sum_region(tc, cmd->region, cmd->size); } else if (cmd->info.download.have_address) { md5sum_addr(tc, cmd->addr, cmd->size); } else{ warn("md5sum: must specify address or region\n"); return -1; } break; default: warn("unsupported command\n"); return -1; } tmp = cmd; cmd = cmd->next; /* * We don't free paths in the command because we don't * know whether or not they're dynamically allocated. * Thus we leak a little memory. It's not like this * is a long-running program... */ free(tmp); } restore_interactive(tc); return 0; }
static void region_print_callback(GtkWidget *w, gpointer context) { if (current_region != -1) region_print(eps_file(ss), "region", rsp->chans[0]); }