From caf9ce473207b936fb070ba41dd2f2b46960c9d2 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Wed, 12 Apr 2023 00:33:36 +0000 Subject: automatic import of python-ft4222 --- python-ft4222.spec | 434 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 434 insertions(+) create mode 100644 python-ft4222.spec (limited to 'python-ft4222.spec') diff --git a/python-ft4222.spec b/python-ft4222.spec new file mode 100644 index 0000000..05060c3 --- /dev/null +++ b/python-ft4222.spec @@ -0,0 +1,434 @@ +%global _empty_manifest_terminate_build 0 +Name: python-ft4222 +Version: 1.8.0 +Release: 1 +Summary: Python wrapper around libFT4222. +License: MIT +URL: https://gitlab.com/msrelectronics/python-ft4222 +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/39/ba/75d0eedc2f2a80d4d320831a4d826761180cb4c3c700248f8144dd9990e8/ft4222-1.8.0.tar.gz + + +%description +# python-ft4222 + +The FT4222H is a High/Full Speed USB2.0-to-Quad SPI/I2C device controller. This project +provides (incomplete) python binding to LibFT4222 +([user guide](http://www.ftdichip.com/Support/Documents/AppNotes/AN_329_User_Guide_for_LibFT4222.pdf)). +It provides a similar api than LibFT4222 does. + +The complete documentation can be found [here](https://msrelectronics.gitlab.io/python-ft4222/) + +## Example + +### I2C Master + +```python +import ft4222 +import ft4222.I2CMaster + + +# list devices +nbDev = ft4222.createDeviceInfoList() +for i in range(nbDev): + print(ft4222.getDeviceInfoDetail(i, False)) + +# open device with default description 'FT4222 A' +dev = ft4222.openByDescription('FT4222 A') + +# init i2c master, clock speed 100kHz +dev.i2cMaster_Init(100000) + +# do a i2c transfers where full control is required +slave = 1 # address +# read one byte, don't stop +data = dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.REPEATED_START, 1)[0] +# read another 5 bytes +data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.NONE, 5) +# another byte, than stop +data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.STOP, 1) +``` + +### GPIO + +```python +import time +import ft4222 +from ft4222.GPIO import Dir, Port, Output + +# open device with default description 'FT4222 A' +dev = ft4222.openByDescription('FT4222 A') + +# use GPIO2 as gpio (not suspend out) +dev.setSuspendOut(False) +# use GPIO3 as gpio (not wakeup) +dev.setWakeUpInterrupt(False) + +# init GPIO2 as output +dev.gpio_Init(gpio2 = Dir.OUTPUT) + +# generate a square wave signal with GPIO2 +while True: + dev.gpio_Write(Port.P2, output) + output = not output + time.sleep(0.1) +``` + +### SPI Master and GPIO + +The gpio used in this example indicate the duration of the whole spi transfer and is **not** used as chip/slave select. + +```python +import ft4222 +from ft4222.SPI import Cpha, Cpol +from ft4222.SPIMaster import Mode, Clock, SlaveSelect +from ft4222.GPIO import Port, Dir +from time import sleep + +# open 'device' with default description 'FT4222 A' +devA = ft4222.openByDescription('FT4222 A') +# and the second 'device' on the same chip +devB = ft4222.openByDescription('FT4222 B') + +# init spi master +devA.spiMaster_Init(Mode.SINGLE, Clock.DIV_8, Cpha.CLK_LEADING, Cpol.IDLE_LOW, SlaveSelect.SS0) +# also use gpio +devB.gpio_Init(gpio0 = Dir.OUTPUT) + +# generate data to send +data = bytes([x for x in range(256)]*4) + +# set port0 1 (-> note this is *not* the spi chip select, the chip select (SS0) is generated by the spi core) +devB.gpio_Write(Port.P0, 1) + +for _ in range(3): + # write data in a single write + devA.spiMaster_SingleWrite(data, True) + # wait a short while + sleep(0.5) + +# set port0 0 +devB.gpio_Write(Port.P0, 1) + +``` + +## Accessrights + +Under Linux, the usb device is normally not accessibly by a normal user, therefor +a udev rule is required. Create or extend ``/etc/udev/rules.d/99-ftdi.rules`` to +contain the following text: + +```bash +# FTDI's ft4222 USB-I2C Adapter +SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="601c", GROUP="plugdev", MODE="0666" +``` + +## Requirements + +### Windows + +MSVCR100.dll/MSVCP100.dll from Microsoft Visual C++ 2010 Redistributable Package +need to be installed. Today, on most systems, these DLLs (or the package) should +already be installed. + + +%package -n python3-ft4222 +Summary: Python wrapper around libFT4222. +Provides: python-ft4222 +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +BuildRequires: python3-cffi +BuildRequires: gcc +BuildRequires: gdb +%description -n python3-ft4222 +# python-ft4222 + +The FT4222H is a High/Full Speed USB2.0-to-Quad SPI/I2C device controller. This project +provides (incomplete) python binding to LibFT4222 +([user guide](http://www.ftdichip.com/Support/Documents/AppNotes/AN_329_User_Guide_for_LibFT4222.pdf)). +It provides a similar api than LibFT4222 does. + +The complete documentation can be found [here](https://msrelectronics.gitlab.io/python-ft4222/) + +## Example + +### I2C Master + +```python +import ft4222 +import ft4222.I2CMaster + + +# list devices +nbDev = ft4222.createDeviceInfoList() +for i in range(nbDev): + print(ft4222.getDeviceInfoDetail(i, False)) + +# open device with default description 'FT4222 A' +dev = ft4222.openByDescription('FT4222 A') + +# init i2c master, clock speed 100kHz +dev.i2cMaster_Init(100000) + +# do a i2c transfers where full control is required +slave = 1 # address +# read one byte, don't stop +data = dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.REPEATED_START, 1)[0] +# read another 5 bytes +data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.NONE, 5) +# another byte, than stop +data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.STOP, 1) +``` + +### GPIO + +```python +import time +import ft4222 +from ft4222.GPIO import Dir, Port, Output + +# open device with default description 'FT4222 A' +dev = ft4222.openByDescription('FT4222 A') + +# use GPIO2 as gpio (not suspend out) +dev.setSuspendOut(False) +# use GPIO3 as gpio (not wakeup) +dev.setWakeUpInterrupt(False) + +# init GPIO2 as output +dev.gpio_Init(gpio2 = Dir.OUTPUT) + +# generate a square wave signal with GPIO2 +while True: + dev.gpio_Write(Port.P2, output) + output = not output + time.sleep(0.1) +``` + +### SPI Master and GPIO + +The gpio used in this example indicate the duration of the whole spi transfer and is **not** used as chip/slave select. + +```python +import ft4222 +from ft4222.SPI import Cpha, Cpol +from ft4222.SPIMaster import Mode, Clock, SlaveSelect +from ft4222.GPIO import Port, Dir +from time import sleep + +# open 'device' with default description 'FT4222 A' +devA = ft4222.openByDescription('FT4222 A') +# and the second 'device' on the same chip +devB = ft4222.openByDescription('FT4222 B') + +# init spi master +devA.spiMaster_Init(Mode.SINGLE, Clock.DIV_8, Cpha.CLK_LEADING, Cpol.IDLE_LOW, SlaveSelect.SS0) +# also use gpio +devB.gpio_Init(gpio0 = Dir.OUTPUT) + +# generate data to send +data = bytes([x for x in range(256)]*4) + +# set port0 1 (-> note this is *not* the spi chip select, the chip select (SS0) is generated by the spi core) +devB.gpio_Write(Port.P0, 1) + +for _ in range(3): + # write data in a single write + devA.spiMaster_SingleWrite(data, True) + # wait a short while + sleep(0.5) + +# set port0 0 +devB.gpio_Write(Port.P0, 1) + +``` + +## Accessrights + +Under Linux, the usb device is normally not accessibly by a normal user, therefor +a udev rule is required. Create or extend ``/etc/udev/rules.d/99-ftdi.rules`` to +contain the following text: + +```bash +# FTDI's ft4222 USB-I2C Adapter +SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="601c", GROUP="plugdev", MODE="0666" +``` + +## Requirements + +### Windows + +MSVCR100.dll/MSVCP100.dll from Microsoft Visual C++ 2010 Redistributable Package +need to be installed. Today, on most systems, these DLLs (or the package) should +already be installed. + + +%package help +Summary: Development documents and examples for ft4222 +Provides: python3-ft4222-doc +%description help +# python-ft4222 + +The FT4222H is a High/Full Speed USB2.0-to-Quad SPI/I2C device controller. This project +provides (incomplete) python binding to LibFT4222 +([user guide](http://www.ftdichip.com/Support/Documents/AppNotes/AN_329_User_Guide_for_LibFT4222.pdf)). +It provides a similar api than LibFT4222 does. + +The complete documentation can be found [here](https://msrelectronics.gitlab.io/python-ft4222/) + +## Example + +### I2C Master + +```python +import ft4222 +import ft4222.I2CMaster + + +# list devices +nbDev = ft4222.createDeviceInfoList() +for i in range(nbDev): + print(ft4222.getDeviceInfoDetail(i, False)) + +# open device with default description 'FT4222 A' +dev = ft4222.openByDescription('FT4222 A') + +# init i2c master, clock speed 100kHz +dev.i2cMaster_Init(100000) + +# do a i2c transfers where full control is required +slave = 1 # address +# read one byte, don't stop +data = dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.REPEATED_START, 1)[0] +# read another 5 bytes +data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.NONE, 5) +# another byte, than stop +data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.STOP, 1) +``` + +### GPIO + +```python +import time +import ft4222 +from ft4222.GPIO import Dir, Port, Output + +# open device with default description 'FT4222 A' +dev = ft4222.openByDescription('FT4222 A') + +# use GPIO2 as gpio (not suspend out) +dev.setSuspendOut(False) +# use GPIO3 as gpio (not wakeup) +dev.setWakeUpInterrupt(False) + +# init GPIO2 as output +dev.gpio_Init(gpio2 = Dir.OUTPUT) + +# generate a square wave signal with GPIO2 +while True: + dev.gpio_Write(Port.P2, output) + output = not output + time.sleep(0.1) +``` + +### SPI Master and GPIO + +The gpio used in this example indicate the duration of the whole spi transfer and is **not** used as chip/slave select. + +```python +import ft4222 +from ft4222.SPI import Cpha, Cpol +from ft4222.SPIMaster import Mode, Clock, SlaveSelect +from ft4222.GPIO import Port, Dir +from time import sleep + +# open 'device' with default description 'FT4222 A' +devA = ft4222.openByDescription('FT4222 A') +# and the second 'device' on the same chip +devB = ft4222.openByDescription('FT4222 B') + +# init spi master +devA.spiMaster_Init(Mode.SINGLE, Clock.DIV_8, Cpha.CLK_LEADING, Cpol.IDLE_LOW, SlaveSelect.SS0) +# also use gpio +devB.gpio_Init(gpio0 = Dir.OUTPUT) + +# generate data to send +data = bytes([x for x in range(256)]*4) + +# set port0 1 (-> note this is *not* the spi chip select, the chip select (SS0) is generated by the spi core) +devB.gpio_Write(Port.P0, 1) + +for _ in range(3): + # write data in a single write + devA.spiMaster_SingleWrite(data, True) + # wait a short while + sleep(0.5) + +# set port0 0 +devB.gpio_Write(Port.P0, 1) + +``` + +## Accessrights + +Under Linux, the usb device is normally not accessibly by a normal user, therefor +a udev rule is required. Create or extend ``/etc/udev/rules.d/99-ftdi.rules`` to +contain the following text: + +```bash +# FTDI's ft4222 USB-I2C Adapter +SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="601c", GROUP="plugdev", MODE="0666" +``` + +## Requirements + +### Windows + +MSVCR100.dll/MSVCP100.dll from Microsoft Visual C++ 2010 Redistributable Package +need to be installed. Today, on most systems, these DLLs (or the package) should +already be installed. + + +%prep +%autosetup -n ft4222-1.8.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-ft4222 -f filelist.lst +%dir %{python3_sitearch}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed Apr 12 2023 Python_Bot - 1.8.0-1 +- Package Spec generated -- cgit v1.2.3