summaryrefslogtreecommitdiff
path: root/utils/hwstub
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2016-02-07 21:50:28 +0000
committerAmaury Pouly <amaury.pouly@gmail.com>2016-04-08 18:52:36 +0100
commit4934bd6f24f97923f2dacd5afa022055a4b52a6e (patch)
treec285f8b47a55c82e896751473dd6d1bb744d30c3 /utils/hwstub
parent5ac0166388ac9a493491a30fbc3570f23950dc51 (diff)
hwstub: remove the old library
Change-Id: I94d0f67cfd0d636407cd9cf3afbe0db4064de28e
Diffstat (limited to 'utils/hwstub')
-rw-r--r--utils/hwstub/include/hwstub.h70
-rw-r--r--utils/hwstub/lib/Makefile13
-rw-r--r--utils/hwstub/lib/hwstub.c255
3 files changed, 3 insertions, 335 deletions
diff --git a/utils/hwstub/include/hwstub.h b/utils/hwstub/include/hwstub.h
deleted file mode 100644
index 4d12de8eda..0000000000
--- a/utils/hwstub/include/hwstub.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * $Id$
- *
- * Copyright (C) 2012 by Amaury Pouly
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-#ifndef __HWSTUB__
-#define __HWSTUB__
-
-#include <libusb.h>
-#include "hwstub_protocol.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- *
- * Low-Level interface
- *
- */
-
-struct hwstub_device_t;
-
-/* Returns hwstub interface, or -1 if none was found */
-int hwstub_probe(libusb_device *dev);
-/* Helper function which returns a list of all hwstub devices found. The caller
- * must unref all of them when done, possibly using libusb_free_device_list().
- * Return number of devices or <0 on error */
-ssize_t hwstub_get_device_list(libusb_context *ctx, libusb_device ***list);
-/* Returns NULL on error */
-struct hwstub_device_t *hwstub_open(libusb_device_handle *handle);
-/* Returns 0 on success. Does *NOT* close the usb handle */
-int hwstub_release(struct hwstub_device_t *dev);
-
-/* Returns number of bytes filled */
-int hwstub_get_desc(struct hwstub_device_t *dev, uint16_t desc, void *info, size_t sz);
-/* Returns number of bytes filled */
-int hwstub_get_log(struct hwstub_device_t *dev, void *buf, size_t sz);
-/* Returns number of bytes written/read or <0 on error */
-int hwstub_read(struct hwstub_device_t *dev, uint32_t addr, void *buf, size_t sz);
-int hwstub_read_atomic(struct hwstub_device_t *dev, uint32_t addr, void *buf, size_t sz);
-int hwstub_write(struct hwstub_device_t *dev, uint32_t addr, const void *buf, size_t sz);
-int hwstub_write_atomic(struct hwstub_device_t *dev, uint32_t addr, const void *buf, size_t sz);
-int hwstub_rw_mem(struct hwstub_device_t *dev, int read, uint32_t addr, void *buf, size_t sz);
-int hwstub_rw_mem_atomic(struct hwstub_device_t *dev, int read, uint32_t addr, void *buf, size_t sz);
-/* Returns <0 on error */
-int hwstub_exec(struct hwstub_device_t *dev, uint32_t addr, uint16_t flags);
-int hwstub_call(struct hwstub_device_t *dev, uint32_t addr);
-int hwstub_jump(struct hwstub_device_t *dev, uint32_t addr);
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif /* __HWSTUB__ */ \ No newline at end of file
diff --git a/utils/hwstub/lib/Makefile b/utils/hwstub/lib/Makefile
index 92dd358ce3..1cc61d6d20 100644
--- a/utils/hwstub/lib/Makefile
+++ b/utils/hwstub/lib/Makefile
@@ -1,19 +1,14 @@
AR=ar
INCLUDE=../include
-CFLAGS=-W -Wall -O2 `pkg-config --cflags libusb-1.0` -std=c99 -g -fPIC -D_XOPEN_SOURCE=700 -I$(INCLUDE)
CXXFLAGS=-W -Wall -O2 `pkg-config --cflags libusb-1.0` -std=c++11 -g -fPIC -D_XOPEN_SOURCE=700 -I$(INCLUDE)
LDFLAGS=`pkg-config --libs libusb-1.0` -fPIC -lpthread
LIB=libhwstub.a
-SRC=$(wildcard *.c)
-SRCXX=$(wildcard *.cpp)
-OBJ=$(SRCXX:.cpp=.oxx) $(SRCXX:.cpp=.o)
+SRC=$(wildcard *.cpp)
+OBJ=$(SRC:.cpp=.o)
all: $(LIB)
-%.o: %.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-%.oxx: %.cpp
+%.o: %.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(LIB): $(OBJ)
@@ -21,5 +16,3 @@ $(LIB): $(OBJ)
clean:
rm -rf $(OBJ) $(LIB)
-
-
diff --git a/utils/hwstub/lib/hwstub.c b/utils/hwstub/lib/hwstub.c
deleted file mode 100644
index d3908585da..0000000000
--- a/utils/hwstub/lib/hwstub.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * $Id$
- *
- * Copyright (C) 2012 by Amaury Pouly
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-#include "hwstub.h"
-#include <string.h>
-#include <stdlib.h>
-
-#ifndef MIN
-#define MIN(a,b) ((a) <= (b) ? (a) : (b))
-#endif
-
-struct hwstub_device_t
-{
- libusb_device_handle *handle;
- int intf;
- unsigned buf_sz;
- uint16_t id;
- uint8_t minor_ver;
-};
-
-int hwstub_probe(libusb_device *dev)
-{
- struct libusb_config_descriptor *config = NULL;
- int ret = -1;
- if(libusb_get_config_descriptor(dev, 0, &config) != 0)
- goto Lend;
- /* search hwstub interface */
- for(unsigned i = 0; i < config->bNumInterfaces; i++)
- {
- /* hwstub interface has only one setting */
- if(config->interface[i].num_altsetting != 1)
- continue;
- const struct libusb_interface_descriptor *intf = &config->interface[i].altsetting[0];
- /* check class/subclass/protocol */
- if(intf->bInterfaceClass != HWSTUB_CLASS ||
- intf->bInterfaceSubClass != HWSTUB_SUBCLASS ||
- intf->bInterfaceProtocol != HWSTUB_PROTOCOL)
- continue;
- /* found ! */
- ret = i;
- break;
- }
-Lend:
- if(config)
- libusb_free_config_descriptor(config);
- return ret;
-}
-
-ssize_t hwstub_get_device_list(libusb_context *ctx, libusb_device ***list)
-{
- libusb_device **great_list;
- ssize_t great_cnt = libusb_get_device_list(ctx, &great_list);
- if(great_cnt < 0)
- return great_cnt;
- /* allocate a list (size at least one NULL entry at the end) */
- libusb_device **mylist = malloc(sizeof(libusb_device *) * (great_cnt + 1));
- memset(mylist, 0, sizeof(libusb_device *) * (great_cnt + 1));
- /* list hwstub devices */
- ssize_t cnt = 0;
- for(int i = 0; i < great_cnt; i++)
- if(hwstub_probe(great_list[i]) >= 0)
- {
- libusb_ref_device(great_list[i]);
- mylist[cnt++] = great_list[i];
- }
- /* free old list */
- libusb_free_device_list(great_list, 1);
- /* return */
- *list = mylist;
- return cnt;
-}
-
-struct hwstub_device_t *hwstub_open(libusb_device_handle *handle)
-{
- struct hwstub_device_t *dev = malloc(sizeof(struct hwstub_device_t));
- memset(dev, 0, sizeof(struct hwstub_device_t));
- dev->handle = handle;
- dev->intf = -1;
- dev->buf_sz = 1024; /* default size */
- libusb_device *mydev = libusb_get_device(dev->handle);
- dev->intf = hwstub_probe(mydev);
- if(dev->intf == -1)
- goto Lerr;
- /* try to get version */
- struct hwstub_version_desc_t m_hwdev_ver;
- int sz = hwstub_get_desc(dev, HWSTUB_DT_VERSION, &m_hwdev_ver, sizeof(m_hwdev_ver));
- if(sz != sizeof(m_hwdev_ver))
- goto Lerr;
- /* major version must match, minor version is taken to be the minimum between
- * what library and device support */
- if(m_hwdev_ver.bMajor != HWSTUB_VERSION_MAJOR)
- goto Lerr;
- dev->minor_ver = MIN(m_hwdev_ver.bMinor, HWSTUB_VERSION_MINOR);
- /* try to get actual buffer size */
- struct hwstub_layout_desc_t layout;
- sz = hwstub_get_desc(dev, HWSTUB_DT_LAYOUT, &layout, sizeof(layout));
- if(sz == (int)sizeof(layout))
- dev->buf_sz = layout.dBufferSize;
- return dev;
-
-Lerr:
- free(dev);
- return NULL;
-}
-
-int hwstub_release(struct hwstub_device_t *dev)
-{
- free(dev);
- return 0;
-}
-
-int hwstub_get_desc(struct hwstub_device_t *dev, uint16_t desc, void *info, size_t sz)
-{
- return libusb_control_transfer(dev->handle,
- LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_IN,
- LIBUSB_REQUEST_GET_DESCRIPTOR, desc << 8, dev->intf, info, sz, 1000);
-}
-
-int hwstub_get_log(struct hwstub_device_t *dev, void *buf, size_t sz)
-{
- return libusb_control_transfer(dev->handle,
- LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_IN,
- HWSTUB_GET_LOG, 0, dev->intf, buf, sz, 1000);
-}
-
-static int _hwstub_read(struct hwstub_device_t *dev, uint8_t breq, uint32_t addr,
- void *buf, size_t sz)
-{
- struct hwstub_read_req_t read;
- read.dAddress = addr;
- int size = libusb_control_transfer(dev->handle,
- LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT,
- HWSTUB_READ, dev->id, dev->intf, (void *)&read, sizeof(read), 1000);
- if(size != (int)sizeof(read))
- return -1;
- return libusb_control_transfer(dev->handle,
- LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_IN,
- breq, dev->id++, dev->intf, buf, sz, 1000);
-}
-
-static int _hwstub_write(struct hwstub_device_t *dev, uint8_t breq, uint32_t addr,
- const void *buf, size_t sz)
-{
- size_t hdr_sz = sizeof(struct hwstub_write_req_t);
- struct hwstub_write_req_t *req = malloc(sz + hdr_sz);
- req->dAddress = addr;
- memcpy(req + 1, buf, sz);
- int size = libusb_control_transfer(dev->handle,
- LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT,
- breq, dev->id++, dev->intf, (void *)req, sz + hdr_sz, 1000);
- free(req);
- return size - hdr_sz;
-}
-
-int hwstub_read_atomic(struct hwstub_device_t *dev, uint32_t addr, void *buf, size_t sz)
-{
- /* reject any read greater than the buffer, it makes no sense anyway */
- if(sz > dev->buf_sz)
- return -1;
- return _hwstub_read(dev, HWSTUB_READ2_ATOMIC, addr, buf, sz);
-}
-
-int hwstub_write_atomic(struct hwstub_device_t *dev, uint32_t addr, const void *buf, size_t sz)
-{
- /* reject any write greater than the buffer, it makes no sense anyway */
- if(sz + sizeof(struct hwstub_write_req_t) > dev->buf_sz)
- return -1;
- return _hwstub_write(dev, HWSTUB_WRITE_ATOMIC, addr, buf, sz);
-}
-
-/* Intermediate function which make sure we don't overflow the device buffer */
-int hwstub_read(struct hwstub_device_t *dev, uint32_t addr, void *buf, size_t sz)
-{
- int cnt = 0;
- while(sz > 0)
- {
- int xfer = _hwstub_read(dev, HWSTUB_READ2, addr, buf, MIN(sz, dev->buf_sz));
- if(xfer < 0)
- return xfer;
- sz -= xfer;
- buf += xfer;
- addr += xfer;
- cnt += xfer;
- }
- return cnt;
-}
-
-/* Intermediate function which make sure we don't overflow the device buffer */
-int hwstub_write(struct hwstub_device_t *dev, uint32_t addr, const void *buf, size_t sz)
-{
- int cnt = 0;
- while(sz > 0)
- {
- int xfer = _hwstub_write(dev, HWSTUB_WRITE, addr, buf,
- MIN(sz, dev->buf_sz - sizeof(struct hwstub_write_req_t)));
- if(xfer < 0)
- return xfer;
- sz -= xfer;
- buf += xfer;
- addr += xfer;
- cnt += xfer;
- }
- return cnt;
-}
-
-int hwstub_rw_mem(struct hwstub_device_t *dev, int read, uint32_t addr, void *buf, size_t sz)
-{
- return read ? hwstub_read(dev, addr, buf, sz) : hwstub_write(dev, addr, buf, sz);
-}
-
-int hwstub_rw_mem_atomic(struct hwstub_device_t *dev, int read, uint32_t addr, void *buf, size_t sz)
-{
- return read ? hwstub_read_atomic(dev, addr, buf, sz) :
- hwstub_write_atomic(dev, addr, buf, sz);
-}
-
-int hwstub_exec(struct hwstub_device_t *dev, uint32_t addr, uint16_t flags)
-{
- struct hwstub_exec_req_t exec;
- exec.dAddress = addr;
- exec.bmFlags = flags;
- int size = libusb_control_transfer(dev->handle,
- LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT,
- HWSTUB_EXEC, dev->id, dev->intf, (void *)&exec, sizeof(exec), 1000);
- if(size != (int)sizeof(exec))
- return -1;
- return 0;
-}
-
-int hwstub_call(struct hwstub_device_t *dev, uint32_t addr)
-{
- return hwstub_exec(dev, addr, HWSTUB_EXEC_CALL);
-}
-
-int hwstub_jump(struct hwstub_device_t *dev, uint32_t addr)
-{
- return hwstub_exec(dev, addr, HWSTUB_EXEC_JUMP);
-}