int logging_level;
int listen_port;
int persistent;
+ int reset;
} st_state_t;
{"stlinkv1", no_argument, NULL, '1'},
{"listen_port", required_argument, NULL, 'p'},
{"multi", optional_argument, NULL, 'm'},
+ {"no-reset", optional_argument, NULL, 'n'},
{0, 0, 0, 0},
};
const char * help_str = "%s - usage:\n\n"
" -m, --multi\n"
"\t\t\tSet gdb server to extended mode.\n"
"\t\t\tst-util will continue listening for connections after disconnect.\n"
+ " -n, --no-reset\n"
+ "\t\t\tDo not reset board on connection.\n"
;
int option_index = 0;
int c;
int q;
- while ((c = getopt_long(argc, argv, "hv::d:s:1p:m", long_options, &option_index)) != -1) {
+ while ((c = getopt_long(argc, argv, "hv::d:s:1p:mn", long_options, &option_index)) != -1) {
switch (c) {
case 0:
printf("XXXXX Shouldn't really normally come here, only if there's no corresponding option\n");
case 'm':
st->persistent = 1;
break;
+ case 'n':
+ st->reset = 0;
+ break;
}
}
state.stlink_version = 2;
state.logging_level = DEFAULT_LOGGING_LEVEL;
state.listen_port = DEFAULT_GDB_LISTEN_PORT;
+ state.reset = 1; /* By default, reset board */
parse_options(argc, argv, &state);
switch (state.stlink_version) {
case 2:
- sl = stlink_open_usb(state.logging_level);
+ sl = stlink_open_usb(state.logging_level, 0);
if(sl == NULL) return 1;
break;
case 1:
- sl = stlink_v1_open(state.logging_level);
+ sl = stlink_v1_open(state.logging_level, 0);
if(sl == NULL) return 1;
break;
}
signal(SIGINT, &cleanup);
signal(SIGTERM, &cleanup);
+ if (state.reset) {
+ stlink_reset(sl);
+ }
+
printf("Chip ID is %08x, Core ID is %08x.\n", sl->chip_id, sl->core_id);
sl->verbose=0;
do {
serve(sl, &state);
+
+ /* Continue */
+ stlink_run(sl);
} while (state.persistent);
#ifdef __MINGW32__
#endif
/* Switch back to mass storage mode before closing. */
- stlink_run(sl);
stlink_exit_debug_mode(sl);
stlink_close(sl);
return 1;
}
- stlink_force_debug(sl);
- stlink_reset(sl);
- init_code_breakpoints(sl);
- init_data_watchpoints(sl);
-
printf("Listening at *:%d...\n", st->listen_port);
int client = accept(sock, NULL, NULL);
close(sock);
+ stlink_force_debug(sl);
+ if (st->reset) {
+ stlink_reset(sl);
+ }
+ init_code_breakpoints(sl);
+ init_data_watchpoints(sl);
+
printf("GDB connected.\n");
/*
return sl;
}
-stlink_t* stlink_v1_open(const int verbose) {
+stlink_t* stlink_v1_open(const int verbose, int reset) {
stlink_t *sl = stlink_v1_open_inner(verbose);
if (sl == NULL) {
fputs("Error: could not open stlink device\n", stderr);
// by now, it _must_ be fully open and in a useful mode....
stlink_enter_swd_mode(sl);
/* Now we are ready to read the parameters */
- stlink_reset(sl);
+ if (reset) {
+ stlink_reset(sl);
+ }
stlink_load_device_params(sl);
ILOG("Successfully opened a stlink v1 debugger\n");
return sl;