hosted: Implemented the extra logic to implement auto-scan in the CLI
This commit is contained in:
parent
2aea7238af
commit
10a4c3f77e
|
@ -232,7 +232,8 @@ void cl_init(BMP_CL_OPTIONS_t *opt, int argc, char **argv)
|
||||||
opt->opt_flash_size = 0xffffffff;
|
opt->opt_flash_size = 0xffffffff;
|
||||||
opt->opt_flash_start = 0xffffffff;
|
opt->opt_flash_start = 0xffffffff;
|
||||||
opt->opt_max_swj_frequency = 4000000;
|
opt->opt_max_swj_frequency = 4000000;
|
||||||
while((c = getopt_long(argc, argv, "eEhHv:d:f:s:I:c:Cln:m:M:wVtTa:S:jpP:rR::", long_options, NULL)) != -1) {
|
opt->opt_scanmode = BMP_SCAN_SWD;
|
||||||
|
while((c = getopt_long(argc, argv, "eEhHv:d:f:s:I:c:Cln:m:M:wVtTa:S:jApP:rR::", long_options, NULL)) != -1) {
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case 'c':
|
case 'c':
|
||||||
if (optarg)
|
if (optarg)
|
||||||
|
@ -250,7 +251,10 @@ void cl_init(BMP_CL_OPTIONS_t *opt, int argc, char **argv)
|
||||||
cl_debuglevel = strtol(optarg, NULL, 0) & (BMP_DEBUG_MAX - 1);
|
cl_debuglevel = strtol(optarg, NULL, 0) & (BMP_DEBUG_MAX - 1);
|
||||||
break;
|
break;
|
||||||
case 'j':
|
case 'j':
|
||||||
opt->opt_usejtag = true;
|
opt->opt_scanmode = BMP_SCAN_JTAG;
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
opt->opt_scanmode = BMP_SCAN_AUTO;
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
opt->opt_list_only = true;
|
opt->opt_list_only = true;
|
||||||
|
@ -419,11 +423,24 @@ int cl_execute(BMP_CL_OPTIONS_t *opt)
|
||||||
if (opt->opt_mode == BMP_MODE_TEST)
|
if (opt->opt_mode == BMP_MODE_TEST)
|
||||||
DEBUG_INFO("Running in Test Mode\n");
|
DEBUG_INFO("Running in Test Mode\n");
|
||||||
DEBUG_INFO("Target voltage: %s Volt\n", platform_target_voltage());
|
DEBUG_INFO("Target voltage: %s Volt\n", platform_target_voltage());
|
||||||
if (opt->opt_usejtag)
|
|
||||||
num_targets = platform_jtag_scan(NULL);
|
|
||||||
else
|
|
||||||
num_targets = platform_adiv5_swdp_scan(opt->opt_targetid);
|
|
||||||
|
|
||||||
|
if (opt->opt_scanmode == BMP_SCAN_JTAG)
|
||||||
|
num_targets = platform_jtag_scan(NULL);
|
||||||
|
else if (opt->opt_scanmode == BMP_SCAN_SWD)
|
||||||
|
num_targets = platform_adiv5_swdp_scan(opt->opt_targetid);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_targets = platform_jtag_scan(NULL);
|
||||||
|
if (num_targets > 0)
|
||||||
|
goto found_targets;
|
||||||
|
DEBUG_INFO("JTAG scan found no devices, trying SWD.\n");
|
||||||
|
num_targets = platform_adiv5_swdp_scan(opt->opt_targetid);
|
||||||
|
if (num_targets > 0)
|
||||||
|
goto found_targets;
|
||||||
|
DEBUG_INFO("SW-DP scan failed!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
found_targets:
|
||||||
if (!num_targets) {
|
if (!num_targets) {
|
||||||
DEBUG_WARN("No target found\n");
|
DEBUG_WARN("No target found\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -40,9 +40,15 @@ enum bmp_cl_mode {
|
||||||
BMP_MODE_MONITOR,
|
BMP_MODE_MONITOR,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef enum bmp_scan_mode_e {
|
||||||
|
BMP_SCAN_JTAG,
|
||||||
|
BMP_SCAN_SWD,
|
||||||
|
BMP_SCAN_AUTO
|
||||||
|
} bmp_scan_mode_t;
|
||||||
|
|
||||||
typedef struct BMP_CL_OPTIONS_s {
|
typedef struct BMP_CL_OPTIONS_s {
|
||||||
enum bmp_cl_mode opt_mode;
|
enum bmp_cl_mode opt_mode;
|
||||||
bool opt_usejtag;
|
bmp_scan_mode_t opt_scanmode;
|
||||||
bool opt_tpwr;
|
bool opt_tpwr;
|
||||||
bool opt_list_only;
|
bool opt_list_only;
|
||||||
bool opt_connect_under_reset;
|
bool opt_connect_under_reset;
|
||||||
|
|
|
@ -375,9 +375,9 @@ int ftdi_bmp_init(BMP_CL_OPTIONS_t *cl_opts, bmp_info_t *info)
|
||||||
active_cable->mpsse_swd_read.set_data_low = MPSSE_DO;
|
active_cable->mpsse_swd_read.set_data_low = MPSSE_DO;
|
||||||
active_cable->mpsse_swd_write.set_data_low = MPSSE_DO;
|
active_cable->mpsse_swd_write.set_data_low = MPSSE_DO;
|
||||||
} else if (!libftdi_swd_possible(NULL, NULL) &&
|
} else if (!libftdi_swd_possible(NULL, NULL) &&
|
||||||
!cl_opts->opt_usejtag) {
|
cl_opts->opt_scanmode != BMP_SCAN_JTAG) {
|
||||||
DEBUG_WARN("SWD with cable not possible, trying JTAG\n");
|
DEBUG_WARN("SWD with cable not possible, trying JTAG\n");
|
||||||
cl_opts->opt_usejtag = true;
|
cl_opts->opt_scanmode = BMP_SCAN_JTAG;
|
||||||
}
|
}
|
||||||
if(ftdic) {
|
if(ftdic) {
|
||||||
ftdi_usb_close(ftdic);
|
ftdi_usb_close(ftdic);
|
||||||
|
|
Loading…
Reference in New Issue