riscv: replace macro DIM() with ARRAY_SIZE()
[fw/openocd] / src / jtag / drivers / versaloon / versaloon.c
index aff0a1fb8115def4e4b95a4c6caeb265ed8a7ad0..6fea888ab0f4cf3c9ed74c8ee65ecc735917aa5f 100644 (file)
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#include "versaloon_include.h"
+
 #include <stdio.h>
 #include <string.h>
+#include <libusb.h>
 
-#include "versaloon_include.h"
 #include "versaloon.h"
 #include "versaloon_internal.h"
 #include "usbtoxxx/usbtoxxx.h"
@@ -36,15 +36,15 @@ uint16_t versaloon_buf_size;
 struct versaloon_pending_t versaloon_pending[VERSALOON_MAX_PENDING_NUMBER];
 uint16_t versaloon_pending_idx;
 
-usb_dev_handle *versaloon_usb_device_handle;
+struct libusb_device_handle *versaloon_usb_device_handle;
 static uint32_t versaloon_usb_to = VERSALOON_TIMEOUT;
 
-RESULT versaloon_init(void);
-RESULT versaloon_fini(void);
-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);
+static RESULT versaloon_init(void);
+static RESULT versaloon_fini(void);
+static RESULT versaloon_get_target_voltage(uint16_t *voltage);
+static RESULT versaloon_set_target_voltage(uint16_t voltage);
+static RESULT versaloon_delay_ms(uint16_t ms);
+static RESULT versaloon_delay_us(uint16_t us);
 
 struct versaloon_interface_t versaloon_interface = {
        .init                           = versaloon_init,
@@ -139,7 +139,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));
+       new_pos = malloc(sizeof(*new_pos));
        if (NULL == new_pos) {
                LOG_ERROR(ERRMSG_NOT_ENOUGH_MEMORY);
                return ERRCODE_NOT_ENOUGH_MEMORY;
@@ -196,6 +196,7 @@ RESULT versaloon_add_pending(uint8_t type, uint8_t cmd, uint16_t actual_szie,
 RESULT versaloon_send_command(uint16_t out_len, uint16_t *inlen)
 {
        int ret;
+       int transferred;
 
 #if PARAM_CHECK
        if (NULL == versaloon_buf) {
@@ -208,25 +209,24 @@ RESULT versaloon_send_command(uint16_t out_len, uint16_t *inlen)
        }
 #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) {
-               LOG_ERROR(ERRMSG_FAILURE_OPERATION_ERRSTRING, "send usb data",
-                       usb_strerror());
+       ret = libusb_bulk_transfer(versaloon_usb_device_handle,
+                       versaloon_interface.usb_setting.ep_out,
+                       versaloon_buf, out_len, &transferred, versaloon_usb_to);
+       if (0 != ret || transferred != out_len) {
+               LOG_ERROR(ERRMSG_FAILURE_OPERATION, "send usb data");
                return ERRCODE_FAILURE_OPERATION;
        }
 
        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) {
-                       *inlen = (uint16_t)ret;
+               ret = libusb_bulk_transfer(versaloon_usb_device_handle,
+                       versaloon_interface.usb_setting.ep_in,
+                       versaloon_buf, versaloon_interface.usb_setting.buf_size,
+                       &transferred, versaloon_usb_to);
+               if (0 == ret) {
+                       *inlen = (uint16_t)transferred;
                        return ERROR_OK;
                } else {
-                       LOG_ERROR(ERRMSG_FAILURE_OPERATION_ERRSTRING, "receive usb data",
-                               usb_strerror());
+                       LOG_ERROR(ERRMSG_FAILURE_OPERATION, "receive usb data");
                        return ERROR_FAIL;
                }
        } else
@@ -234,15 +234,14 @@ RESULT versaloon_send_command(uint16_t out_len, uint16_t *inlen)
 }
 
 #define VERSALOON_RETRY_CNT 10
-RESULT versaloon_init(void)
+static RESULT versaloon_init(void)
 {
        uint16_t ret = 0;
        uint8_t retry;
        uint32_t timeout_tmp;
 
        /* malloc temporary buffer */
-       versaloon_buf =
-               (uint8_t *)malloc(versaloon_interface.usb_setting.buf_size);
+       versaloon_buf = malloc(versaloon_interface.usb_setting.buf_size);
        if (NULL == versaloon_buf) {
                LOG_ERROR(ERRMSG_NOT_ENOUGH_MEMORY);
                return ERRCODE_NOT_ENOUGH_MEMORY;
@@ -250,7 +249,7 @@ RESULT versaloon_init(void)
 
        /* connect to versaloon */
        timeout_tmp = versaloon_usb_to;
-       /* not output error message when connectting */
+       /* not output error message when connecting */
        /* 100ms delay when connect */
        versaloon_usb_to = 100;
        for (retry = 0; retry < VERSALOON_RETRY_CNT; retry++) {
@@ -274,15 +273,13 @@ RESULT versaloon_init(void)
        free(versaloon_buf);
        versaloon_buf = NULL;
 
-       versaloon_buf =
-               (uint8_t *)malloc(versaloon_interface.usb_setting.buf_size);
+       versaloon_buf = malloc(versaloon_interface.usb_setting.buf_size);
        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);
+       versaloon_cmd_buf = malloc(versaloon_interface.usb_setting.buf_size - 3);
        if (NULL == versaloon_cmd_buf) {
                versaloon_fini();
                LOG_ERROR(ERRMSG_NOT_ENOUGH_MEMORY);
@@ -295,7 +292,7 @@ RESULT versaloon_init(void)
        return versaloon_get_target_voltage(&ret);
 }
 
-RESULT versaloon_fini(void)
+static RESULT versaloon_fini(void)
 {
        if (versaloon_usb_device_handle != NULL) {
                usbtoxxx_fini();
@@ -303,20 +300,17 @@ RESULT versaloon_fini(void)
 
                versaloon_usb_device_handle = NULL;
 
-               if (versaloon_buf != NULL) {
-                       free(versaloon_buf);
-                       versaloon_buf = NULL;
-               }
-               if (versaloon_cmd_buf != NULL) {
-                       free(versaloon_cmd_buf);
-                       versaloon_cmd_buf = NULL;
-               }
+               free(versaloon_buf);
+               versaloon_buf = NULL;
+
+               free(versaloon_cmd_buf);
+               versaloon_cmd_buf = NULL;
        }
 
        return ERROR_OK;
 }
 
-RESULT versaloon_set_target_voltage(uint16_t voltage)
+static RESULT versaloon_set_target_voltage(uint16_t voltage)
 {
        usbtopwr_init(0);
        usbtopwr_config(0);
@@ -326,7 +320,7 @@ RESULT versaloon_set_target_voltage(uint16_t voltage)
        return usbtoxxx_execute_command();
 }
 
-RESULT versaloon_get_target_voltage(uint16_t *voltage)
+static RESULT versaloon_get_target_voltage(uint16_t *voltage)
 {
        uint16_t inlen;
 
@@ -352,12 +346,12 @@ RESULT versaloon_get_target_voltage(uint16_t *voltage)
        }
 }
 
-RESULT versaloon_delay_ms(uint16_t ms)
+static RESULT versaloon_delay_ms(uint16_t ms)
 {
        return usbtodelay_delay(ms | 0x8000);
 }
 
-RESULT versaloon_delay_us(uint16_t us)
+static RESULT versaloon_delay_us(uint16_t us)
 {
        return usbtodelay_delay(us & 0x7FFF);
 }