stlink: code factorization by introducing stlink_usb_exit_mode
Change-Id: I4abd6432c4ef969e382bfed96cd19a49d9610000 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com> Reviewed-on: http://openocd.zylin.com/5612 Tested-by: jenkins
This commit is contained in:
parent
9a690c6bdb
commit
bd6072072e
|
@ -1303,12 +1303,11 @@ static enum stlink_mode stlink_get_mode(enum hl_transports t)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
static int stlink_usb_init_mode(void *handle, bool connect_under_reset, int initial_interface_speed)
|
static int stlink_usb_exit_mode(void *handle)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
uint8_t mode;
|
uint8_t mode;
|
||||||
enum stlink_mode emode;
|
enum stlink_mode emode;
|
||||||
struct stlink_usb_handle_s *h = handle;
|
|
||||||
|
|
||||||
assert(handle != NULL);
|
assert(handle != NULL);
|
||||||
|
|
||||||
|
@ -1337,12 +1336,25 @@ static int stlink_usb_init_mode(void *handle, bool connect_under_reset, int init
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (emode != STLINK_MODE_UNKNOWN) {
|
if (emode != STLINK_MODE_UNKNOWN)
|
||||||
res = stlink_usb_mode_leave(handle, emode);
|
return stlink_usb_mode_leave(handle, emode);
|
||||||
|
|
||||||
if (res != ERROR_OK)
|
return ERROR_OK;
|
||||||
return res;
|
}
|
||||||
}
|
|
||||||
|
/** */
|
||||||
|
static int stlink_usb_init_mode(void *handle, bool connect_under_reset, int initial_interface_speed)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
uint8_t mode;
|
||||||
|
enum stlink_mode emode;
|
||||||
|
struct stlink_usb_handle_s *h = handle;
|
||||||
|
|
||||||
|
assert(handle != NULL);
|
||||||
|
|
||||||
|
res = stlink_usb_exit_mode(handle);
|
||||||
|
if (res != ERROR_OK)
|
||||||
|
return res;
|
||||||
|
|
||||||
res = stlink_usb_current_mode(handle, &mode);
|
res = stlink_usb_current_mode(handle, &mode);
|
||||||
|
|
||||||
|
@ -2683,45 +2695,14 @@ static int stlink_speed(void *handle, int khz, bool query)
|
||||||
/** */
|
/** */
|
||||||
static int stlink_usb_close(void *handle)
|
static int stlink_usb_close(void *handle)
|
||||||
{
|
{
|
||||||
int res;
|
|
||||||
uint8_t mode;
|
|
||||||
enum stlink_mode emode;
|
|
||||||
struct stlink_usb_handle_s *h = handle;
|
struct stlink_usb_handle_s *h = handle;
|
||||||
|
|
||||||
if (h && h->fd)
|
if (h && h->fd) {
|
||||||
res = stlink_usb_current_mode(handle, &mode);
|
stlink_usb_exit_mode(h);
|
||||||
else
|
/* do not check return code, it prevent
|
||||||
res = ERROR_FAIL;
|
us from closing jtag_libusb */
|
||||||
/* do not exit if return code != ERROR_OK,
|
|
||||||
it prevents us from closing jtag_libusb */
|
|
||||||
|
|
||||||
if (res == ERROR_OK) {
|
|
||||||
/* try to exit current mode */
|
|
||||||
switch (mode) {
|
|
||||||
case STLINK_DEV_DFU_MODE:
|
|
||||||
emode = STLINK_MODE_DFU;
|
|
||||||
break;
|
|
||||||
case STLINK_DEV_DEBUG_MODE:
|
|
||||||
emode = STLINK_MODE_DEBUG_SWD;
|
|
||||||
break;
|
|
||||||
case STLINK_DEV_SWIM_MODE:
|
|
||||||
emode = STLINK_MODE_DEBUG_SWIM;
|
|
||||||
break;
|
|
||||||
case STLINK_DEV_BOOTLOADER_MODE:
|
|
||||||
case STLINK_DEV_MASS_MODE:
|
|
||||||
default:
|
|
||||||
emode = STLINK_MODE_UNKNOWN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (emode != STLINK_MODE_UNKNOWN)
|
|
||||||
stlink_usb_mode_leave(handle, emode);
|
|
||||||
/* do not check return code, it prevent
|
|
||||||
us from closing jtag_libusb */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h && h->fd)
|
|
||||||
jtag_libusb_close(h->fd);
|
jtag_libusb_close(h->fd);
|
||||||
|
}
|
||||||
|
|
||||||
free(h);
|
free(h);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue