aboutsummaryrefslogtreecommitdiff
path: root/src/jtag/drivers/versaloon/versaloon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jtag/drivers/versaloon/versaloon.c')
-rw-r--r--src/jtag/drivers/versaloon/versaloon.c215
1 files changed, 90 insertions, 125 deletions
diff --git a/src/jtag/drivers/versaloon/versaloon.c b/src/jtag/drivers/versaloon/versaloon.c
index dbb8e4fb..e33a260f 100644
--- a/src/jtag/drivers/versaloon/versaloon.c
+++ b/src/jtag/drivers/versaloon/versaloon.c
@@ -16,6 +16,7 @@
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -28,14 +29,14 @@
#include "versaloon_internal.h"
#include "usbtoxxx/usbtoxxx.h"
-uint8_t *versaloon_buf = NULL;
-uint8_t *versaloon_cmd_buf = NULL;
+uint8_t *versaloon_buf;
+uint8_t *versaloon_cmd_buf;
uint16_t versaloon_buf_size;
struct versaloon_pending_t versaloon_pending[VERSALOON_MAX_PENDING_NUMBER];
-uint16_t versaloon_pending_idx = 0;
+uint16_t versaloon_pending_idx;
-usb_dev_handle *versaloon_usb_device_handle = NULL;
+usb_dev_handle *versaloon_usb_device_handle;
static uint32_t versaloon_usb_to = VERSALOON_TIMEOUT;
RESULT versaloon_init(void);
@@ -44,58 +45,59 @@ RESULT versaloon_get_target_voltage(uint16_t *voltage);
RESULT versaloon_set_target_voltage(uint16_t voltage);
RESULT versaloon_delay_ms(uint16_t ms);
RESULT versaloon_delay_us(uint16_t us);
-struct versaloon_interface_t versaloon_interface =
-{
- .init = versaloon_init,
- .fini = versaloon_fini,
- {// adaptors
- {// target_voltage
- .get = versaloon_get_target_voltage,
- .set = versaloon_set_target_voltage,
+
+struct versaloon_interface_t versaloon_interface = {
+ .init = versaloon_init,
+ .fini = versaloon_fini,
+ { /* adaptors */
+ { /* target_voltage */
+ .get = versaloon_get_target_voltage,
+ .set = versaloon_set_target_voltage,
},
- {// gpio
- .init = usbtogpio_init,
- .fini = usbtogpio_fini,
- .config = usbtogpio_config,
- .out = usbtogpio_out,
- .in = usbtogpio_in,
+ { /* gpio */
+ .init = usbtogpio_init,
+ .fini = usbtogpio_fini,
+ .config = usbtogpio_config,
+ .out = usbtogpio_out,
+ .in = usbtogpio_in,
},
- {// delay
- .delayms = versaloon_delay_ms,
- .delayus = versaloon_delay_us,
+ { /* delay */
+ .delayms = versaloon_delay_ms,
+ .delayus = versaloon_delay_us,
},
- {// swd
- .init = usbtoswd_init,
- .fini = usbtoswd_fini,
- .config = usbtoswd_config,
- .seqout = usbtoswd_seqout,
- .seqin = usbtoswd_seqin,
- .transact = usbtoswd_transact,
+ { /* swd */
+ .init = usbtoswd_init,
+ .fini = usbtoswd_fini,
+ .config = usbtoswd_config,
+ .seqout = usbtoswd_seqout,
+ .seqin = usbtoswd_seqin,
+ .transact = usbtoswd_transact,
},
- {// jtag_raw
- .init = usbtojtagraw_init,
- .fini = usbtojtagraw_fini,
- .config = usbtojtagraw_config,
- .execute = usbtojtagraw_execute,
+ { /* jtag_raw */
+ .init = usbtojtagraw_init,
+ .fini = usbtojtagraw_fini,
+ .config = usbtojtagraw_config,
+ .execute = usbtojtagraw_execute,
},
- .peripheral_commit = usbtoxxx_execute_command,
+ .peripheral_commit = usbtoxxx_execute_command,
},
- {// usb_setting
- .vid = VERSALOON_VID,
- .pid = VERSALOON_PID,
- .ep_out = VERSALOON_OUTP,
- .ep_in = VERSALOON_INP,
- .interface = VERSALOON_IFACE,
- .serialstring = NULL,
- .buf_size = 256,
+ { /* usb_setting */
+ .vid = VERSALOON_VID,
+ .pid = VERSALOON_PID,
+ .ep_out = VERSALOON_OUTP,
+ .ep_in = VERSALOON_INP,
+ .interface = VERSALOON_IFACE,
+ .serialstring = NULL,
+ .buf_size = 256,
}
};
-// programmer_cmd
-static uint32_t versaloon_pending_id = 0;
-static versaloon_callback_t versaloon_callback = NULL;
-static void *versaloon_extra_data = NULL;
-static struct versaloon_want_pos_t *versaloon_want_pos = NULL;
+/* programmer_cmd */
+static uint32_t versaloon_pending_id;
+static versaloon_callback_t versaloon_callback;
+static void *versaloon_extra_data;
+static struct versaloon_want_pos_t *versaloon_want_pos;
+
void versaloon_set_pending_id(uint32_t id)
{
versaloon_pending_id = id;
@@ -104,7 +106,7 @@ void versaloon_set_callback(versaloon_callback_t callback)
{
versaloon_callback = callback;
}
-void versaloon_set_extra_data(void * p)
+void versaloon_set_extra_data(void *p)
{
versaloon_extra_data = p;
}
@@ -115,19 +117,16 @@ void versaloon_free_want_pos(void)
struct versaloon_want_pos_t *tmp, *free_tmp;
tmp = versaloon_want_pos;
- while (tmp != NULL)
- {
+ while (tmp != NULL) {
free_tmp = tmp;
tmp = tmp->next;
free(free_tmp);
}
versaloon_want_pos = NULL;
- for (i = 0; i < dimof(versaloon_pending); i++)
- {
+ for (i = 0; i < dimof(versaloon_pending); i++) {
tmp = versaloon_pending[i].pos;
- while (tmp != NULL)
- {
+ while (tmp != NULL) {
free_tmp = tmp;
tmp = tmp->next;
free(free_tmp);
@@ -141,8 +140,7 @@ RESULT versaloon_add_want_pos(uint16_t offset, uint16_t size, uint8_t *buff)
struct versaloon_want_pos_t *new_pos = NULL;
new_pos = (struct versaloon_want_pos_t *)malloc(sizeof(*new_pos));
- if (NULL == new_pos)
- {
+ if (NULL == new_pos) {
LOG_ERROR(ERRMSG_NOT_ENOUGH_MEMORY);
return ERRCODE_NOT_ENOUGH_MEMORY;
}
@@ -152,17 +150,12 @@ RESULT versaloon_add_want_pos(uint16_t offset, uint16_t size, uint8_t *buff)
new_pos->next = NULL;
if (NULL == versaloon_want_pos)
- {
versaloon_want_pos = new_pos;
- }
- else
- {
+ else {
struct versaloon_want_pos_t *tmp = versaloon_want_pos;
while (tmp->next != NULL)
- {
tmp = tmp->next;
- }
tmp->next = new_pos;
}
@@ -173,10 +166,9 @@ RESULT versaloon_add_pending(uint8_t type, uint8_t cmd, uint16_t actual_szie,
uint16_t want_pos, uint16_t want_size, uint8_t *buffer, uint8_t collect)
{
#if PARAM_CHECK
- if (versaloon_pending_idx >= VERSALOON_MAX_PENDING_NUMBER)
- {
+ if (versaloon_pending_idx >= VERSALOON_MAX_PENDING_NUMBER) {
LOG_BUG(ERRMSG_INVALID_INDEX, versaloon_pending_idx,
- "versaloon pending data");
+ "versaloon pending data");
return ERROR_FAIL;
}
#endif
@@ -206,83 +198,68 @@ RESULT versaloon_send_command(uint16_t out_len, uint16_t *inlen)
int ret;
#if PARAM_CHECK
- if (NULL == versaloon_buf)
- {
+ if (NULL == versaloon_buf) {
LOG_BUG(ERRMSG_INVALID_BUFFER, TO_STR(versaloon_buf));
return ERRCODE_INVALID_BUFFER;
}
- if ((0 == out_len) || (out_len > versaloon_interface.usb_setting.buf_size))
- {
- LOG_BUG(ERRMSG_INVALID_PARAMETER, __FUNCTION__);
+ if ((0 == out_len) || (out_len > versaloon_interface.usb_setting.buf_size)) {
+ LOG_BUG(ERRMSG_INVALID_PARAMETER, __func__);
return ERRCODE_INVALID_PARAMETER;
}
#endif
ret = usb_bulk_write(versaloon_usb_device_handle,
- versaloon_interface.usb_setting.ep_out, (char *)versaloon_buf,
- out_len, versaloon_usb_to);
- if (ret != out_len)
- {
+ versaloon_interface.usb_setting.ep_out, (char *)versaloon_buf,
+ out_len, versaloon_usb_to);
+ if (ret != out_len) {
LOG_ERROR(ERRMSG_FAILURE_OPERATION_ERRSTRING, "send usb data",
usb_strerror());
return ERRCODE_FAILURE_OPERATION;
}
- if (inlen != NULL)
- {
+ if (inlen != NULL) {
ret = usb_bulk_read(versaloon_usb_device_handle,
- versaloon_interface.usb_setting.ep_in, (char *)versaloon_buf,
- versaloon_interface.usb_setting.buf_size, versaloon_usb_to);
- if (ret > 0)
- {
+ versaloon_interface.usb_setting.ep_in, (char *)versaloon_buf,
+ versaloon_interface.usb_setting.buf_size, versaloon_usb_to);
+ if (ret > 0) {
*inlen = (uint16_t)ret;
return ERROR_OK;
- }
- else
- {
+ } else {
LOG_ERROR(ERRMSG_FAILURE_OPERATION_ERRSTRING, "receive usb data",
- usb_strerror());
+ usb_strerror());
return ERROR_FAIL;
}
- }
- else
- {
+ } else
return ERROR_OK;
- }
}
-#define VERSALOON_RETRY_CNT 10
+#define VERSALOON_RETRY_CNT 10
RESULT versaloon_init(void)
{
uint16_t ret = 0;
uint8_t retry;
uint32_t timeout_tmp;
- // malloc temporary buffer
+ /* malloc temporary buffer */
versaloon_buf =
(uint8_t *)malloc(versaloon_interface.usb_setting.buf_size);
- if (NULL == versaloon_buf)
- {
+ if (NULL == versaloon_buf) {
LOG_ERROR(ERRMSG_NOT_ENOUGH_MEMORY);
return ERRCODE_NOT_ENOUGH_MEMORY;
}
- // connect to versaloon
+ /* connect to versaloon */
timeout_tmp = versaloon_usb_to;
- // not output error message when connectting
- // 100ms delay when connect
+ /* not output error message when connectting */
+ /* 100ms delay when connect */
versaloon_usb_to = 100;
- for (retry = 0; retry < VERSALOON_RETRY_CNT; retry++)
- {
+ for (retry = 0; retry < VERSALOON_RETRY_CNT; retry++) {
versaloon_buf[0] = VERSALOON_GET_INFO;
if ((ERROR_OK == versaloon_send_command(1, &ret)) && (ret >= 3))
- {
break;
- }
}
versaloon_usb_to = timeout_tmp;
- if (VERSALOON_RETRY_CNT == retry)
- {
+ if (VERSALOON_RETRY_CNT == retry) {
versaloon_fini();
LOG_ERROR(ERRMSG_FAILURE_OPERATION, "communicate with versaloon");
return ERRCODE_FAILURE_OPERATION;
@@ -293,28 +270,25 @@ RESULT versaloon_init(void)
versaloon_interface.usb_setting.buf_size = versaloon_buf_size;
LOG_INFO("%s", versaloon_buf + 2);
- // free temporary buffer
+ /* free temporary buffer */
free(versaloon_buf);
versaloon_buf = NULL;
versaloon_buf =
(uint8_t *)malloc(versaloon_interface.usb_setting.buf_size);
- if (NULL == versaloon_buf)
- {
+ if (NULL == versaloon_buf) {
versaloon_fini();
LOG_ERROR(ERRMSG_NOT_ENOUGH_MEMORY);
return ERRCODE_NOT_ENOUGH_MEMORY;
}
versaloon_cmd_buf =
(uint8_t *)malloc(versaloon_interface.usb_setting.buf_size - 3);
- if (NULL == versaloon_cmd_buf)
- {
+ if (NULL == versaloon_cmd_buf) {
versaloon_fini();
LOG_ERROR(ERRMSG_NOT_ENOUGH_MEMORY);
return ERRCODE_NOT_ENOUGH_MEMORY;
}
- if (ERROR_OK != usbtoxxx_init())
- {
+ if (ERROR_OK != usbtoxxx_init()) {
LOG_ERROR(ERRMSG_FAILURE_OPERATION, "initialize usbtoxxx");
return ERROR_FAIL;
}
@@ -323,20 +297,17 @@ RESULT versaloon_init(void)
RESULT versaloon_fini(void)
{
- if (versaloon_usb_device_handle != NULL)
- {
+ if (versaloon_usb_device_handle != NULL) {
usbtoxxx_fini();
versaloon_free_want_pos();
versaloon_usb_device_handle = NULL;
- if (versaloon_buf != NULL)
- {
+ if (versaloon_buf != NULL) {
free(versaloon_buf);
versaloon_buf = NULL;
}
- if (versaloon_cmd_buf != NULL)
- {
+ if (versaloon_cmd_buf != NULL) {
free(versaloon_cmd_buf);
versaloon_cmd_buf = NULL;
}
@@ -360,27 +331,22 @@ RESULT versaloon_get_target_voltage(uint16_t *voltage)
uint16_t inlen;
#if PARAM_CHECK
- if (NULL == versaloon_buf)
- {
+ if (NULL == versaloon_buf) {
LOG_BUG(ERRMSG_INVALID_BUFFER, TO_STR(versaloon_buf));
return ERRCODE_INVALID_BUFFER;
}
- if (NULL == voltage)
- {
- LOG_BUG(ERRMSG_INVALID_PARAMETER, __FUNCTION__);
+ if (NULL == voltage) {
+ LOG_BUG(ERRMSG_INVALID_PARAMETER, __func__);
return ERRCODE_INVALID_PARAMETER;
}
#endif
versaloon_buf[0] = VERSALOON_GET_TVCC;
- if ((ERROR_OK != versaloon_send_command(1, &inlen)) || (inlen != 2))
- {
+ if ((ERROR_OK != versaloon_send_command(1, &inlen)) || (inlen != 2)) {
LOG_ERROR(ERRMSG_FAILURE_OPERATION, "communicate with versaloon");
return ERRCODE_FAILURE_OPERATION;
- }
- else
- {
+ } else {
*voltage = versaloon_buf[0] + (versaloon_buf[1] << 8);
return ERROR_OK;
}
@@ -395,4 +361,3 @@ RESULT versaloon_delay_us(uint16_t us)
{
return usbtodelay_delay(us & 0x7FFF);
}
-