static int cmd_writemem_run( chain_t *chain, char *params[] ) { uint32_t adr; uint32_t len; FILE *f; if (cmd_params( params ) != 4) return -1; if (!bus) { printf( _("Error: Bus driver missing.\n") ); return 1; } if (cmd_get_number( params[1], &adr) || cmd_get_number( params[2], &len)) return -1; f = fopen( params[3], "r" ); if (!f) { printf( _("Unable to open file `%s'!\n"), params[3] ); return 1; } writemem( bus, f, adr, len ); fclose( f ); return 1; }
static int cmd_part_run( char *params[] ) { unsigned int n; if (cmd_params( params ) != 2) return -1; if (!cmd_test_cable()) return 1; if (!chain->parts) { printf( _("Run \"detect\" first.\n") ); return 1; } if (cmd_get_number( params[1], &n )) return -1; if (n >= chain->parts->len) { printf( _("%s: invalid part number\n"), "part" ); return 1; } chain->active_part = n; return 1; }
static int cmd_bus_run( chain_t *chain, char *params[] ) { unsigned int n; if (cmd_params( params ) != 2) return -1; if (!cmd_test_cable( chain )) return 1; if (!chain->parts) { printf( _("Run \"detect\" first.\n") ); return 1; } if (cmd_get_number( params[1], &n )) return -1; if (n >= buses.len) { printf( _("%s: invalid bus number\n"), "bus" ); return 1; } bus = buses.buses[n]; return 1; }
static int cmd_eraseflash_run( chain_t *chain, char *params[] ) { uint32_t adr = 0; unsigned int number = 0; if (cmd_params( params ) != 3) return -1; if (!cmd_test_cable( chain )) return 1; if (!bus) { printf( _("Error: Bus driver missing.\n") ); return 1; } if (cmd_get_number( params[1], &adr )) return -1; if (cmd_get_number( params[2], &number )) return -1; flasherase( bus, adr, number ); return 1; }
static int cmd_detectflash_run( char *params[] ) { uint32_t adr; if (cmd_params( params ) != 2) return -1; if (!bus) { printf( _("Error: Bus driver missing.\n") ); return 1; } if (cmd_get_number( params[1], &adr )) return -1; detectflash( bus, adr ); return 1; }
static int cmd_frequency_run( char *params[] ) { unsigned int freq; if (cmd_params( params ) == 1) { printf( _("Current TCK frequency is %u Hz\n"), frequency ); return 1; } if (cmd_params( params ) != 2) return -1; if (cmd_get_number( params[1], &freq )) return -1; printf( _("Setting TCK frequency to %u Hz\n"), freq ); frequency = freq; return 1; }
static int cmd_flashmem_run( chain_t *chain, char *params[] ) { int msbin; int noverify = 0; uint32_t adr = 0; FILE *f; int paramc = cmd_params( params ); if (paramc < 3) return -1; if (!bus) { printf( _("Error: Bus driver missing.\n") ); return 1; } msbin = strcasecmp( "msbin", params[1] ) == 0; if (!msbin && cmd_get_number( params[1], &adr )) return -1; if (paramc > 3) noverify = strcasecmp( "noverify", params[3] ) == 0; else noverify = 0; f = fopen( params[2], "rb" ); if (!f) { printf( _("Unable to open file `%s'!\n"), params[2] ); return 1; } if (msbin) flashmsbin( bus, f, noverify ); else flashmem( bus, f, adr, noverify ); fclose( f ); return 1; }
static int cmd_instruction_run( chain_t *chain, char *params[] ) { part_t *part; if (!cmd_test_cable( chain )) return 1; if (!chain->parts) { printf( _("Run \"detect\" first.\n") ); return 1; } if (chain->active_part >= chain->parts->len) { printf( _("%s: no active part\n"), "instruction" ); return 1; } part = chain->parts->parts[chain->active_part]; if (cmd_params( params ) == 2) { part_set_instruction( part, params[1] ); if (part->active_instruction == NULL) printf( _("%s: unknown instruction '%s'\n"), "instruction", params[1] ); return 1; } if (cmd_params( params ) == 3) { unsigned int len; if (strcasecmp( params[1], "length" ) != 0) return -1; if (part->instructions != NULL) { printf( _("instruction length is already set and used\n") ); return 1; } if (cmd_get_number( params[2], &len )) return -1; part->instruction_length = len; return 1; } if (cmd_params( params ) == 4) { instruction *i; if (strlen( params[2] ) != part->instruction_length) { printf( _("invalid instruction length\n") ); return 1; } if (part_find_instruction( part, params[1] ) != NULL) { printf( _("Instruction '%s' already defined\n"), params[1] ); return 1; } i = instruction_alloc( params[1], part->instruction_length, params[2] ); if (!i) { printf( _("out of memory\n") ); return 1; } i->next = part->instructions; part->instructions = i; i->data_register = part_find_data_register( part, params[3] ); if (i->data_register == NULL) { printf( _("unknown data register '%s'\n"), params[3] ); return 1; } return 1; } return -1; }