Skip to content

Instantly share code, notes, and snippets.

  • Save eblot/27b76ac849474dd4a770 to your computer and use it in GitHub Desktop.
Save eblot/27b76ac849474dd4a770 to your computer and use it in GitHub Desktop.
From 0648fd141255e9e7c19e83ef8daec785b1873317 Mon Sep 17 00:00:00 2001
From: Emmanuel Blot <eblot@moaningmarmot.info>
Date: Mon, 21 Jun 2010 22:24:34 +0200
Subject: [PATCH] Fixup API:
* ftdi.h: fix up multiple inclusion definition, as __ is reserved for the compiler and should not be used in library files
ftdi.h: add missing definition for LIBFTDI_LINUX_ASYNC_MODE, remove older API definitions that do not have any implementation anymore
* ftdi.c: implement the same API whatever LIBFTDI_LINUX_ASYNC_MODE, but return an error when ASYNC mode is not enabled
ftdi.c, ftdi_stream.c: remove a couple of left-over tabulations
* ftdi.i: do not include LIBFTDI_LINUX_ASYNC_MODE API in Python bindings, and remove implementation-less bindings
---
bindings/ftdi.i | 5 +++--
src/ftdi.c | 39 ++++++++++++++++++++++++---------------
src/ftdi.h | 9 ++++-----
src/ftdi_stream.c | 8 ++++----
4 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/bindings/ftdi.i b/bindings/ftdi.i
index 9af6057..1eceb58 100644
--- a/bindings/ftdi.i
+++ b/bindings/ftdi.i
@@ -3,8 +3,9 @@
%include "typemaps.i"
%include "cpointer.i"
%typemap(in) unsigned char* = char*;
-%ignore ftdi_write_data_async;
-%ignore ftdi_async_complete;
+%ignore ftdi_write_data_submit;
+%ignore ftdi_read_data_submit;
+%ignore ftdi_transfer_data_done;
%include ftdi.h
%{
diff --git a/src/ftdi.c b/src/ftdi.c
index 167810b..2a12d66 100644
--- a/src/ftdi.c
+++ b/src/ftdi.c
@@ -265,7 +265,7 @@ int ftdi_usb_find_all(struct ftdi_context *ftdi, struct ftdi_device_list **devli
*curdev = (struct ftdi_device_list*)malloc(sizeof(struct ftdi_device_list));
if (!*curdev)
ftdi_error_return(-3, "out of memory");
-
+
(*curdev)->next = NULL;
(*curdev)->dev = dev;
@@ -736,24 +736,24 @@ int ftdi_usb_open_string(struct ftdi_context *ftdi, const char* description)
{
libusb_device *dev;
libusb_device **devs;
- unsigned int bus_number, device_address;
- int i = 0;
+ unsigned int bus_number, device_address;
+ int i = 0;
if (libusb_init (&ftdi->usb_ctx) < 0)
- ftdi_error_return(-1, "libusb_init() failed");
+ ftdi_error_return(-1, "libusb_init() failed");
- if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
- ftdi_error_return(-2, "libusb_get_device_list() failed");
+ if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
+ ftdi_error_return(-2, "libusb_get_device_list() failed");
/* XXX: This doesn't handle symlinks/odd paths/etc... */
if (sscanf (description + 2, "%u/%u", &bus_number, &device_address) != 2)
- ftdi_error_return_free_device_list(-11, "illegal description format", devs);
+ ftdi_error_return_free_device_list(-11, "illegal description format", devs);
- while ((dev = devs[i++]) != NULL)
+ while ((dev = devs[i++]) != NULL)
{
int ret;
- if (bus_number == libusb_get_bus_number (dev)
- && device_address == libusb_get_device_address (dev))
+ if (bus_number == libusb_get_bus_number (dev)
+ && device_address == libusb_get_device_address (dev))
{
ret = ftdi_usb_open_dev(ftdi, dev);
libusb_free_device_list(devs,1);
@@ -1239,7 +1239,7 @@ int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size)
#ifdef LIBFTDI_LINUX_ASYNC_MODE
#ifdef USB_CLASS_PTP
#error LIBFTDI_LINUX_ASYNC_MODE is not compatible with libusb-compat-0.1!
-#endif
+#endif // USB_CLASS_PTP
static void ftdi_read_data_cb(struct libusb_transfer *transfer)
{
struct ftdi_transfer_control *tc = (struct ftdi_transfer_control *) transfer->user_data;
@@ -1321,7 +1321,6 @@ static void ftdi_read_data_cb(struct libusb_transfer *transfer)
tc->completed = 1;
}
-
static void ftdi_write_data_cb(struct libusb_transfer *transfer)
{
struct ftdi_transfer_control *tc = (struct ftdi_transfer_control *) transfer->user_data;
@@ -1348,7 +1347,7 @@ static void ftdi_write_data_cb(struct libusb_transfer *transfer)
tc->completed = 1;
}
}
-
+#endif // LIBFTDI_LINUX_ASYNC_MODE
/**
Writes data to the chip. Does not wait for completion of the transfer
@@ -1367,6 +1366,7 @@ static void ftdi_write_data_cb(struct libusb_transfer *transfer)
struct ftdi_transfer_control *ftdi_write_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size)
{
+#ifdef LIBFTDI_LINUX_ASYNC_MODE
struct ftdi_transfer_control *tc;
struct libusb_transfer *transfer = libusb_alloc_transfer(0);
int write_size, ret;
@@ -1407,6 +1407,9 @@ struct ftdi_transfer_control *ftdi_write_data_submit(struct ftdi_context *ftdi,
tc->transfer = transfer;
return tc;
+#else // LIBFTDI_LINUX_ASYNC_MODE
+ return NULL;
+#endif // ! LIBFTDI_LINUX_ASYNC_MODE
}
/**
@@ -1426,6 +1429,7 @@ struct ftdi_transfer_control *ftdi_write_data_submit(struct ftdi_context *ftdi,
struct ftdi_transfer_control *ftdi_read_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size)
{
+#ifdef LIBFTDI_LINUX_ASYNC_MODE
struct ftdi_transfer_control *tc;
struct libusb_transfer *transfer;
int ret;
@@ -1490,6 +1494,9 @@ struct ftdi_transfer_control *ftdi_read_data_submit(struct ftdi_context *ftdi, u
tc->transfer = transfer;
return tc;
+#else // LIBFTDI_LINUX_ASYNC_MODE
+ return NULL;
+#endif // ! LIBFTDI_LINUX_ASYNC_MODE
}
/**
@@ -1506,6 +1513,7 @@ struct ftdi_transfer_control *ftdi_read_data_submit(struct ftdi_context *ftdi, u
int ftdi_transfer_data_done(struct ftdi_transfer_control *tc)
{
+#ifdef LIBFTDI_LINUX_ASYNC_MODE
int ret;
while (!tc->completed)
@@ -1534,10 +1542,11 @@ int ftdi_transfer_data_done(struct ftdi_transfer_control *tc)
libusb_free_transfer(tc->transfer);
free(tc);
return ret;
+#else // LIBFTDI_LINUX_ASYNC_MODE
+ return -1;
+#endif // ! LIBFTDI_LINUX_ASYNC_MODE
}
-#endif // LIBFTDI_LINUX_ASYNC_MODE
-
/**
Configure write buffer chunk size.
Default is 4096.
diff --git a/src/ftdi.h b/src/ftdi.h
index 324d07b..13efba3 100644
--- a/src/ftdi.h
+++ b/src/ftdi.h
@@ -14,8 +14,8 @@
* *
***************************************************************************/
-#ifndef __libftdi_h__
-#define __libftdi_h__
+#ifndef _libftdi_h_
+#define _libftdi_h_
#include <libusb.h>
@@ -356,9 +356,8 @@ extern "C"
int ftdi_readstream(struct ftdi_context *ftdi, FTDIStreamCallback *callback,
void *userdata, int packetsPerTransfer, int numTransfers);
- int ftdi_write_data_async(struct ftdi_context *ftdi, unsigned char *buf, int size);
- void ftdi_async_complete(struct ftdi_context *ftdi, int wait_for_more);
+ struct ftdi_transfer_control *ftdi_write_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size);
struct ftdi_transfer_control *ftdi_read_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size);
int ftdi_transfer_data_done(struct ftdi_transfer_control *tc);
@@ -407,4 +406,4 @@ extern "C"
}
#endif
-#endif /* __libftdi_h__ */
+#endif /* _libftdi_h_ */
diff --git a/src/ftdi_stream.c b/src/ftdi_stream.c
index c3eb465..2ebe185 100644
--- a/src/ftdi_stream.c
+++ b/src/ftdi_stream.c
@@ -177,7 +177,7 @@ ftdi_readstream(struct ftdi_context *ftdi,
libusb_fill_bulk_transfer(transfer, ftdi->usb_dev, ftdi->out_ep,
malloc(bufferSize), bufferSize,
- ftdi_readstream_cb,
+ ftdi_readstream_cb,
&state, 0);
if (!transfer->buffer) {
@@ -247,10 +247,10 @@ ftdi_readstream(struct ftdi_context *ftdi,
&progress->prev.time);
progress->totalRate =
- progress->current.totalBytes /progress->totalTime;
+ progress->current.totalBytes /progress->totalTime;
progress->currentRate =
- (progress->current.totalBytes -
- progress->prev.totalBytes) / currentTime;
+ (progress->current.totalBytes -
+ progress->prev.totalBytes) / currentTime;
}
state.callback(NULL, 0, progress, state.userdata);
--
1.7.0.2+GitX
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment