* configure.ac: reactivate check for TYPE_232H, which does not exist in libftdi < 0.20

* avrftdi*.*: changed include check for libftdi/libusb, deactivate 232H if not available
* ft245r.c: changed include check for libftdi/libusb

git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1180 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
Rene Liebscher 2013-05-16 17:11:35 +00:00
parent d0625e8fec
commit 22477da39e
6 changed files with 106 additions and 125 deletions

View File

@ -1,3 +1,9 @@
2013-05-16 Rene Liebscher <R.Liebscher@gmx.de>
* configure.ac: reactivate check for TYPE_232H, which does not exist in libftdi < 0.20
* avrftdi*.*: changed include check for libftdi/libusb, deactivate 232H if not available
* ft245r.c: changed include check for libftdi/libusb
2013-05-08 Joerg Wunsch <j.gnu@uriah.heep.sax.de> 2013-05-08 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
* main.c (main): Add option -l logfile. * main.c (main): Add option -l logfile.

View File

@ -42,15 +42,24 @@
#include "avrftdi_tpi.h" #include "avrftdi_tpi.h"
#include "avrftdi_private.h" #include "avrftdi_private.h"
#ifdef HAVE_LIBUSB_1_0 #ifdef DO_NOT_BUILD_AVRFTDI
#if defined(HAVE_LIBFTDI1) || defined(HAVE_LIBFTDI)
#include <libusb-1.0/libusb.h> static int avrftdi_noftdi_open (struct programmer_t *pgm, char * name)
#ifdef HAVE_LIBFTDI1 {
#include <libftdi1/ftdi.h> fprintf(stderr,
#elif HAVE_LIBFTDI "%s: Error: no libftdi or libusb support. Install libftdi1/libusb-1.0 or libftdi/libusb and run configure/make again.\n",
#include <ftdi.h> progname);
#endif
return -1;
}
void avrftdi_initpgm(PROGRAMMER * pgm)
{
strcpy(pgm->type, "avrftdi");
pgm->open = avrftdi_noftdi_open;
}
#else
enum { FTDI_SCK = 0, FTDI_MOSI, FTDI_MISO, FTDI_RESET }; enum { FTDI_SCK = 0, FTDI_MOSI, FTDI_MISO, FTDI_RESET };
@ -647,10 +656,14 @@ static int avrftdi_open(PROGRAMMER * pgm, char *port)
pdata->pin_limit = 16; pdata->pin_limit = 16;
pdata->rx_buffer_size = 4096; pdata->rx_buffer_size = 4096;
break; break;
#ifdef HAVE_LIBFTDI_TYPE_232H
case TYPE_232H: case TYPE_232H:
pdata->pin_limit = 16; pdata->pin_limit = 16;
pdata->rx_buffer_size = 1024; pdata->rx_buffer_size = 1024;
break; break;
#else
#warning No support for 232H, use a newer libftdi, version >= 0.20
#endif
case TYPE_4232H: case TYPE_4232H:
pdata->pin_limit = 8; pdata->pin_limit = 8;
pdata->rx_buffer_size = 2048; pdata->rx_buffer_size = 2048;
@ -1168,43 +1181,8 @@ void avrftdi_initpgm(PROGRAMMER * pgm)
pgm->vfy_led = set_led_vfy; pgm->vfy_led = set_led_vfy;
} }
#else /*HAVE_LIBFTDI1*/ #endif /* DO_NOT_BUILD_AVRFTDI */
static int avrftdi_noftdi_open (struct programmer_t *pgm, char * name)
{
fprintf(stderr,
"%s: Error: no libftdi1 support. Install libftdi1 and run configure/make again.\n",
progname);
exit(1);
}
void avrftdi_initpgm(PROGRAMMER * pgm)
{
strcpy(pgm->type, "avrftdi");
pgm->open = avrftdi_noftdi_open;
}
#endif /* HAVE_LIBFTDI1 */
#else /*HAVE_LIBUSB_1_0*/
static int avrftdi_nousb_open (struct programmer_t *pgm, char * name)
{
fprintf(stderr,
"%s: Error: no USB support. Install libusb-1.0 and run configure/make again.\n",
progname);
exit(1);
}
void avrftdi_initpgm(PROGRAMMER * pgm)
{
strcpy(pgm->type, "avrftdi");
pgm->open = avrftdi_nousb_open;
}
#endif /*HAVE_LIBUSB_1_0*/
const char avrftdi_desc[] = "Interface to the MPSSE Engine of FTDI Chips using libftdi."; const char avrftdi_desc[] = "Interface to the MPSSE Engine of FTDI Chips using libftdi.";

View File

@ -3,15 +3,24 @@
#include <stdint.h> #include <stdint.h>
#ifdef HAVE_LIBUSB_1_0 #if defined(HAVE_LIBFTDI1) && defined(HAVE_LIBUSB_1_0)
#if defined(HAVE_LIBFTDI1) || defined(HAVE_LIBFTDI) # if defined(HAVE_LIBUSB_1_0_LIBUSB_H)
# include <libusb-1.0/libusb.h> # include <libusb-1.0/libusb.h>
#ifdef HAVE_LIBFTDI1 # else
#include <libftdi1/ftdi.h> # include <libusb.h>
#elif HAVE_LIBFTDI
#include <ftdi.h>
# endif # endif
# include <libftdi1/ftdi.h>
# undef HAVE_LIBFTDI_TYPE_232H
# define HAVE_LIBFTDI_TYPE_232H 1
#elif defined(HAVE_LIBFTDI) && defined(HAVE_USB_H)
/* ftdi.h includes usb.h */
#include <ftdi.h>
#else
#warning No libftdi or libusb support. Install libftdi1/libusb-1.0 or libftdi/libusb and run configure/make again.
#define DO_NOT_BUILD_AVRFTDI
#endif
#ifndef DO_NOT_BUILD_AVRFTDI
#include "pgm.h" #include "pgm.h"
#include "pindefs.h" #include "pindefs.h"
@ -75,15 +84,5 @@ typedef struct avrftdi_s {
void avrftdi_log(int level, const char * func, int line, const char * fmt, ...); void avrftdi_log(int level, const char * func, int line, const char * fmt, ...);
#else /* HAVE_LIBFTDI1 */ #endif /* DO_NOT_BUILD_AVRFDTI */
#warning "libftdi1 required for programmer avrftdi."
#endif /* HAVE_LIBFTDI1 */
#else /* HAVE_LIBUSB_1_0 */
#warning "libusb-1.0 required for programmer avrftdi."
#endif /* HAVE_LIBUSB_1_0 */

View File

@ -15,15 +15,7 @@
#include "avrftdi_tpi.h" #include "avrftdi_tpi.h"
#include "avrftdi_private.h" #include "avrftdi_private.h"
#ifdef HAVE_LIBUSB_1_0 #ifndef DO_NOT_BUILD_AVRFTDI
#if defined(HAVE_LIBFTDI1) || defined(HAVE_LIBFTDI)
#include <libusb-1.0/libusb.h>
#ifdef HAVE_LIBFTDI1
#include <libftdi1/ftdi.h>
#elif HAVE_LIBFTDI
#include <ftdi.h>
#endif
static void avrftdi_tpi_disable(PROGRAMMER *); static void avrftdi_tpi_disable(PROGRAMMER *);
static int avrftdi_tpi_program_enable(PROGRAMMER * pgm, AVRPART * p); static int avrftdi_tpi_program_enable(PROGRAMMER * pgm, AVRPART * p);
@ -256,11 +248,5 @@ avrftdi_tpi_disable(PROGRAMMER * pgm)
log_info("Leaving Programming mode.\n"); log_info("Leaving Programming mode.\n");
} }
#else /* HAVE_LIBFTDI1 */ #endif /* DO_NOT_BUILD_AVRFTDI */
#endif /* HAVE_LIBFTDI1 */
#else /* HAVE_LIBUSB_1_0 */
#endif /* HAVE_LIBUSB_1_0 */

View File

@ -161,6 +161,10 @@ else
LIBFTDI="-lftdi -lusb" LIBFTDI="-lftdi -lusb"
AC_DEFINE([HAVE_LIBFTDI]) AC_DEFINE([HAVE_LIBFTDI])
AC_SUBST(LIBFTDI, $LIBFTDI) AC_SUBST(LIBFTDI, $LIBFTDI)
AC_CHECK_DECL(TYPE_232H,[have_libftdi_FT232H=yes], [], [[#include <ftdi.h>]])
if test x$have_libftdi_FT232H = xyes; then
AC_DEFINE([HAVE_LIBFTDI_TYPE_232H])
fi
fi fi
fi fi
AC_CHECK_HEADERS([pthread.h]) AC_CHECK_HEADERS([pthread.h])

102
ft245r.c
View File

@ -69,7 +69,60 @@
#include "bitbang.h" #include "bitbang.h"
#include "ft245r.h" #include "ft245r.h"
#ifdef HAVE_PTHREAD_H #if defined(_WIN32)
#include <windows.h>
#endif
#if defined(HAVE_LIBFTDI1) && defined(HAVE_LIBUSB_1_0)
# if defined(HAVE_LIBUSB_1_0_LIBUSB_H)
# include <libusb-1.0/libusb.h>
# else
# include <libusb.h>
# endif
# include <libftdi1/ftdi.h>
#elif defined(HAVE_LIBFTDI) && defined(HAVE_USB_H)
/* ftdi.h includes usb.h */
#include <ftdi.h>
#else
#warning No libftdi or libusb support. Install libftdi1/libusb-1.0 or libftdi/libusb and run configure/make again.
#define DO_NOT_BUILD_FT245R
#endif
#ifndef HAVE_PTHREAD_H
static int ft245r_nopthread_open (struct programmer_t *pgm, char * name) {
fprintf(stderr,
"%s: error: no pthread support. Please compile again with pthread installed."
#if defined(_WIN32)
" See http://sourceware.org/pthreads-win32/."
#endif
"\n",
progname);
return -1;
}
void ft245r_initpgm(PROGRAMMER * pgm) {
strcpy(pgm->type, "ftdi_syncbb");
pgm->open = ft245r_nopthread_open;
}
#elif defined(DO_NOT_BUILD_FT245R)
static int ft245r_noftdi_open (struct programmer_t *pgm, char * name) {
fprintf(stderr,
"%s: error: no libftdi or libusb support. Install libftdi1/libusb-1.0 or libftdi/libusb and run configure/make again.\n",
progname);
return -1;
}
void ft245r_initpgm(PROGRAMMER * pgm) {
strcpy(pgm->type, "ftdi_syncbb");
pgm->open = ft245r_noftdi_open;
}
#else
#include <pthread.h> #include <pthread.h>
@ -86,19 +139,6 @@ typedef dispatch_semaphore_t sem_t;
#include <semaphore.h> #include <semaphore.h>
#endif #endif
#if defined(HAVE_LIBFTDI1) || defined(HAVE_LIBFTDI)
#if defined(_WIN32)
#include <windows.h>
#endif
#ifdef HAVE_LIBFTDI1
#include <libftdi1/ftdi.h>
#elif HAVE_LIBFTDI
#include <ftdi.h>
#endif
#define FT245R_CYCLES 2 #define FT245R_CYCLES 2
#define FT245R_FRAGMENT_SIZE 512 #define FT245R_FRAGMENT_SIZE 512
#define REQ_OUTSTANDINGS 10 #define REQ_OUTSTANDINGS 10
@ -589,6 +629,7 @@ cleanup:
cleanup_no_usb: cleanup_no_usb:
ftdi_deinit (handle); ftdi_deinit (handle);
free(handle); free(handle);
handle = NULL;
return -1; return -1;
} }
@ -899,39 +940,6 @@ void ft245r_initpgm(PROGRAMMER * pgm) {
handle = NULL; handle = NULL;
} }
#else
static int ft245r_noftdi_open (struct programmer_t *pgm, char * name) {
fprintf(stderr,
"%s: error: no ftdi support. Please compile again with libftdi installed.\n",
progname);
exit(1);
}
void ft245r_initpgm(PROGRAMMER * pgm) {
strcpy(pgm->type, "ftdi_syncbb");
pgm->open = ft245r_noftdi_open;
}
#endif
#else
static int ft245r_nopthread_open (struct programmer_t *pgm, char * name) {
fprintf(stderr,
"%s: error: no pthread support. Please compile again with pthread installed."
#if defined(_WIN32)
" See http://sourceware.org/pthreads-win32/."
#endif
"\n",
progname);
exit(1);
}
void ft245r_initpgm(PROGRAMMER * pgm) {
strcpy(pgm->type, "ftdi_syncbb");
pgm->open = ft245r_nopthread_open;
}
#endif #endif
const char ft245r_desc[] = "FT245R/FT232R Synchronous BitBangMode Programmer"; const char ft245r_desc[] = "FT245R/FT232R Synchronous BitBangMode Programmer";