%module(docstring="Python interface to libftdi") ftdi
-%include "typemaps.i"
-%include "cpointer.i"
-%include "cstring.i"
+%include <typemaps.i>
+%include <cstring.i>
%typemap(in) unsigned char* = char*;
%rename("%(strip:[ftdi_])s") "";
-%apply char *OUTPUT { char * manufacturer };
-%apply char *OUTPUT { char * description };
-%apply char *OUTPUT { char * serial };
+%newobject ftdi_new;
+%typemap(newfree) struct ftdi_context *ftdi "ftdi_free($1);";
+%delobject ftdi_free;
+
+%typemap(in,numinputs=0) SWIGTYPE** OUTPUT ($*ltype temp) %{ $1 = &temp; %}
+%typemap(argout) SWIGTYPE** OUTPUT %{ $result = SWIG_Python_AppendOutput($result, SWIG_NewPointerObj((void*)*$1,$*descriptor,0)); %}
+%apply SWIGTYPE** OUTPUT { struct ftdi_device_list **devlist };
+ int ftdi_usb_find_all(struct ftdi_context *ftdi, struct ftdi_device_list **devlist,
+ int vendor, int product);
+%clear struct ftdi_device_list **devlist;
+
+%apply char *OUTPUT { char * manufacturer, char * description, char * serial };
%cstring_bounded_output( char * manufacturer, 256 );
%cstring_bounded_output( char * description, 256 );
%cstring_bounded_output( char * serial, 256 );
+%typemap(default,noblock=1) int mnf_len, int desc_len, int serial_len { $1 = 256; }
int ftdi_usb_get_strings(struct ftdi_context *ftdi, struct libusb_device *dev,
char * manufacturer, int mnf_len,
char * description, int desc_len,
char * serial, int serial_len);
-%clear char * manufacturer;
-%clear char * description;
-%clear char * serial;
+%clear char * manufacturer, char * description, char * serial;
+%clear int mnf_len, int desc_len, int serial_len;
%apply char *OUTPUT { unsigned char *buf };
int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size);
int ftdi_get_eeprom_value(struct ftdi_context *ftdi, enum ftdi_eeprom_value value_name, int* value);
%clear int* value;
+%apply char *OUTPUT { unsigned char *buf };
+%typemap(in,numinputs=0) unsigned char *buf(char temp[FTDI_MAX_EEPROM_SIZE]) %{ $1 = ($1_ltype) temp; %}
+%typemap(freearg,match="in") unsigned char *buf "";
+%typemap(argout,fragment="SWIG_FromCharPtrAndSize") unsigned char *buf %{ $result = SWIG_Python_AppendOutput($result, SWIG_FromCharPtrAndSize((char*)$1,FTDI_MAX_EEPROM_SIZE)); %}
+%typemap(default,noblock=1) int size { $1 = 128; }
+ int ftdi_get_eeprom_buf(struct ftdi_context *ftdi, unsigned char * buf, int size);
+%clear unsigned char *buf;
+%clear int size;
+
%apply short *OUTPUT { unsigned short *eeprom_val };
int ftdi_read_eeprom_location (struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val);
%clear unsigned short *eeprom_val;
%{
#include <ftdi_i.h>
%}
-
-%pointer_functions(struct ftdi_device_list *, device_listpp)
if ftdic == 0:
print 'new failed: %d', ret
os._exit( 1 )
-
+
+
# list all devices
-devlist = ftdi.new_device_listpp()
-ret = ftdi.usb_find_all( ftdic, devlist, 0x0403, 0x6001 )
+ret, devlist = ftdi.usb_find_all( ftdic, 0x0403, 0x6001 )
if ret < 0:
print 'ftdi_usb_find_all failed: %d (%s)' % ( ret, ftdi.get_error_string( ftdic ) )
os._exit( 1 )
print 'Number of FTDI devices found: %d\n' % ret
-count = ret
-curdev = devlist
-for i in range( count ):
- print 'Checking device: %d' % i
-
- curnode = ftdi.device_listpp_value( curdev )
- ret, manufacturer, description, serial = ftdi.usb_get_strings( ftdic, curnode.dev, 128, 128, 128 )
+curnode = devlist
+i = 0
+while( curnode != None ):
+ ret, manufacturer, description, serial = ftdi.usb_get_strings( ftdic, curnode.dev )
if ret < 0:
print 'ftdi_usb_get_strings failed: %d (%s)' % ( ret, ftdi.get_error_string( ftdic ) )
os._exit( 1 )
- print 'Manufacturer: %s, Description: %s, Serial: %s\n' % ( manufacturer, description, serial )
- ftdi.device_listpp_assign( curdev, curnode.next )
+ print 'Device #%d: manufacturer="%s" description="%s" serial="%s"\n' % ( i, manufacturer, description, serial )
+ curnode = curnode.next
+ i += 1
# open usb
ret = ftdi.usb_open( ftdic, 0x0403, 0x6001 )
ftdi.write_data( ftdic, chr(0x00), 1 )
time.sleep( 1 )
for i in range( 8 ):
- print 'enabling bit', i
val = 2**i
+ print 'enabling bit #%d (0x%02x)' % (i, val)
ftdi.write_data( ftdic, chr(val), 1 )
time.sleep ( 1 )
ftdi.disable_bitbang( ftdic )
# read eeprom
eeprom_addr = 1
ret, eeprom_val = ftdi.read_eeprom_location( ftdic, eeprom_addr )
-print 'eeprom @ %d: 0x%04x\n' % ( eeprom_addr, eeprom_val )
-
-print 'eeprom:'
-ret=ftdi.read_eeprom( ftdic )
-ret=ftdi.eeprom_decode( ftdic ,1)
-
-
+if (ret==0):
+ print 'eeprom @ %d: 0x%04x\n' % ( eeprom_addr, eeprom_val )
+
+print 'complete eeprom:'
+ret = ftdi.read_eeprom( ftdic )
+ret, eeprom = ftdi.get_eeprom_buf ( ftdic )
+if ( ret == 0 ):
+ for i in range( 128 ):
+ print '%02x' % ord( eeprom[i] ),
+ if ( i % 8 == 7 ):
+ print ''
+
+
# close usb
ret = ftdi.usb_close( ftdic )
if ret < 0:
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
"""Python example program.
Small program to demonstrate the usage
(version_info.major, version_info.minor, version_info.micro,
version_info.version_str, version_info.snapshot_str))
- print("ftdi.usb_open(): %d" % ftdi.usb_open(context, 0x0403, 0x6001))
+ print("ftdi.usb_open(): %d" % ftdi.usb_open(context, 0x0403, 0x6010))
print("ftdi.set_baudrate(): %d" % ftdi.set_baudrate(context, 9600))
ftdi.free(context)