Added version attribute.
[libftdi] / examples / python / complete.py
... / ...
CommitLineData
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4"""Python example program.
5
6Complete program to demonstrate the usage
7of the swig generated python wrapper
8
9You need to build and install the wrapper first"""
10
11import os
12import sys
13import ftdi1 as ftdi
14import time
15
16# initialize
17ftdic = ftdi.new()
18if ftdic == 0:
19 print( 'new failed: %d', ret )
20 os._exit( 1 )
21
22# try to list ftdi devices 0x6010 or 0x6001
23ret, devlist = ftdi.usb_find_all( ftdic, 0x0403, 0x6010 )
24if ret <= 0:
25 ret, devlist = ftdi.usb_find_all( ftdic, 0x0403, 0x6001)
26
27if ret < 0:
28 print( 'ftdi_usb_find_all failed: %d (%s)' % ( ret, ftdi.get_error_string( ftdic ) ) )
29 os._exit( 1 )
30print( 'Number of FTDI devices found: %d\n' % ret )
31curnode = devlist
32i = 0
33while( curnode != None ):
34 ret, manufacturer, description, serial = ftdi.usb_get_strings( ftdic, curnode.dev )
35 if ret < 0:
36 print( 'ftdi_usb_get_strings failed: %d (%s)' % ( ret, ftdi.get_error_string( ftdic ) ) )
37 os._exit( 1 )
38 print( 'Device #%d: manufacturer="%s" description="%s" serial="%s"\n' % ( i, manufacturer, description, serial ) )
39 curnode = curnode.next
40 i += 1
41
42# open usb
43ret = ftdi.usb_open( ftdic, 0x0403, 0x6001 )
44if ret < 0:
45 print( 'unable to open ftdi device: %d (%s)' % ( ret, ftdi.get_error_string( ftdic ) ) )
46 os._exit( 1 )
47
48
49# bitbang
50ret = ftdi.set_bitmode( ftdic, 0xff, ftdi.BITMODE_BITBANG )
51if ret < 0:
52 print( 'Cannot enable bitbang' )
53 os._exit( 1 )
54print( 'turning everything on' )
55ftdi.write_data( ftdic, chr(0xff), 1 )
56time.sleep( 1 )
57print( 'turning everything off\n' )
58ftdi.write_data( ftdic, chr(0x00), 1 )
59time.sleep( 1 )
60for i in range( 8 ):
61 val = 2**i
62 print( 'enabling bit #%d (0x%02x)' % (i, val) )
63 ftdi.write_data( ftdic, chr(val), 1 )
64 time.sleep ( 1 )
65ftdi.disable_bitbang( ftdic )
66print( '' )
67
68
69# read pins
70# FIXME: read_pins fails with python3, so I disabled it for now
71# tested on ubuntu 12.04 ( python3.2.3 / swig 2.0.4 )
72if (sys.version_info[0]<3):
73 ret, pins = ftdi.read_pins( ftdic )
74 if ( ret == 0 ):
75 print( 'pins: %02x' % ord( pins[0] ) )
76
77
78# read chip id
79ret, chipid = ftdi.read_chipid( ftdic )
80if (ret==0):
81 print( 'chip id: %X\n' % chipid )
82
83
84# read eeprom
85eeprom_addr = 1
86ret, eeprom_val = ftdi.read_eeprom_location( ftdic, eeprom_addr )
87if (ret==0):
88 print( 'eeprom @ %d: 0x%04x\n' % ( eeprom_addr, eeprom_val ) )
89
90print( 'eeprom:' )
91ret = ftdi.read_eeprom( ftdic )
92size = 128
93ret, eeprom = ftdi.get_eeprom_buf ( ftdic, size )
94if ( ret == 0 ):
95 for i in range( size ):
96 if isinstance(eeprom[i], str):
97 octet = ord( eeprom[i] ) # python2
98 else:
99 octet = eeprom[i] # python3
100 sys.stdout.write( '%02x ' % octet )
101 if ( i % 8 == 7 ):
102 print( '' )
103print( '' )
104
105
106# close usb
107ret = ftdi.usb_close( ftdic )
108if ret < 0:
109 print( 'unable to close ftdi device: %d (%s)' % ( ret, ftdi.get_error_string( ftdic ) ) )
110 os._exit( 1 )
111
112print ('device closed')
113ftdi.free( ftdic )