Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add i2c slave interface
  • Loading branch information
BodongLiKolmostar committed Feb 3, 2021
commit 6093cc4ee7f6bcbf12b9c09ec2f746d3b652d1d5
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ __pycache__/
/MANIFEST
/dist
/ft4222.egg*

.idea/
12 changes: 11 additions & 1 deletion ft4222/clibft4222.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,24 @@ cdef extern from "libft4222.h":
FT4222_STATUS FT4222_GetMaxTransferSize(FT_HANDLE ftHandle, uint16* pMaxSize)
FT4222_STATUS FT4222_SetEventNotification(FT_HANDLE ftHandle, DWORD mask, PVOID param)
FT4222_STATUS FT4222_GetVersion(FT_HANDLE ftHandle, FT4222_Version* pVersion)
# FT4222 I2C Functions
# FT4222 I2C Master Functions
FT4222_STATUS FT4222_I2CMaster_Read(FT_HANDLE ftHandle, uint16 deviceAddress, uint8* buffer, uint16 bufferSize, uint16* sizeTransferred)
FT4222_STATUS FT4222_I2CMaster_Write(FT_HANDLE ftHandle, uint16 deviceAddress, uint8* buffer, uint16 bufferSize, uint16* sizeTransferred)
FT4222_STATUS FT4222_I2CMaster_Init(FT_HANDLE ftHandle, uint32 kbps)
FT4222_STATUS FT4222_I2CMaster_ReadEx(FT_HANDLE ftHandle, uint16 deviceAddress, uint8 flag, uint8* buffer, uint16 bufferSize, uint16* sizeTransferred)
FT4222_STATUS FT4222_I2CMaster_WriteEx(FT_HANDLE ftHandle, uint16 deviceAddress, uint8 flag, uint8* buffer, uint16 bufferSize, uint16* sizeTransferred)
FT4222_STATUS FT4222_I2CMaster_Reset(FT_HANDLE ftHandle)
FT4222_STATUS FT4222_I2CMaster_GetStatus(FT_HANDLE ftHandle, uint8 *controllerStatus)
# FT4222 I2C Slave Functions
FT4222_STATUS FT4222_I2CSlave_Init(FT_HANDLE ftHandle);
FT4222_STATUS FT4222_I2CSlave_Reset(FT_HANDLE ftHandle);
FT4222_STATUS FT4222_I2CSlave_GetAddress(FT_HANDLE ftHandle, uint8*addr);
FT4222_STATUS FT4222_I2CSlave_SetAddress(FT_HANDLE ftHandle, uint8 addr);
FT4222_STATUS FT4222_I2CSlave_GetRxStatus(FT_HANDLE ftHandle, uint16*pRxSize);
FT4222_STATUS FT4222_I2CSlave_Read(FT_HANDLE ftHandle, uint8*buffer, uint16 bufferSize, uint16*sizeTransferred);
FT4222_STATUS FT4222_I2CSlave_Write(FT_HANDLE ftHandle, uint8*buffer, uint16 bufferSize, uint16*sizeTransferred);
FT4222_STATUS FT4222_I2CSlave_SetClockStretch(FT_HANDLE ftHandle, BOOL enable);
FT4222_STATUS FT4222_I2CSlave_SetRespWord(FT_HANDLE ftHandle, uint8 responseWord);
# FT4222 GPIO Functions
FT4222_STATUS FT4222_GPIO_Init(FT_HANDLE ftHandle, GPIO_Dir gpioDir[4])
FT4222_STATUS FT4222_GPIO_Read(FT_HANDLE ftHandle, GPIO_Port portNum, BOOL* value)
Expand Down
143 changes: 143 additions & 0 deletions ft4222/ft4222.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,149 @@ cdef class FT4222:
return cs
raise FT4222DeviceError, status

def i2cSlave_Init(self):
"""Initialize the FT4222H as an I2C slave.

Raises:
FT4222DeviceError: on error

"""
status = FT4222_I2CSlave_Init(self._handle)
if status != FT4222_OK:
raise FT4222DeviceError, status

def i2cSlave_Reset(self):
"""Reset i2c slave

Raises:
FT4222DeviceError: on error

"""
status = FT4222_I2CSlave_Reset(self._handle)
if status != FT4222_OK:
raise FT4222DeviceError, status

def i2cSlave_GetAddress(self):
"""Get address of slave device

Returns:
int: address of slave device

Raises:
FT4222DeviceError: on error

"""
cdef uint8 addr
status = FT4222_I2CSlave_GetAddress(self._handle, &addr)
if status == FT4222_OK:
return addr
raise FT4222DeviceError, status

def i2cSlave_SetAddress(self, addr):
"""Set address of slave device

Args:
addr(int): address of slave device

Raises:
FT4222DeviceError: on error

"""
status = FT4222_I2CSlave_SetAddress(self._handle, addr)
if status != FT4222_OK:
raise FT4222DeviceError, status

def i2cSlave_GetRxStatus(self):
"""Get rx byte count of slave device

Returns:
int: rx byte count of slave device

Raises:
FT4222DeviceError: on error

"""
cdef uint16 rxSize
status = FT4222_I2CSlave_GetRxStatus(self._handle, &rxSize)
if status == FT4222_OK:
return rxSize
raise FT4222DeviceError, status

def i2cSlave_Read(self, bytesToRead):
"""Read bytes from master device

Args:
bytesToRead (int): Number of bytes to read from master

Returns:
bytes: Bytes read from master

Raises:
FT4222DeviceError: on error

"""
cdef:
array[uint8] buf = array('B', [])
uint16 bytesRead
resize(buf, bytesToRead)
status = FT4222_I2CSlave_Read(self._handle, buf.data.as_uchars, bytesToRead, &bytesRead)
resize(buf, bytesRead)
if status == FT4222_OK:
return bytes(buf)
raise FT4222DeviceError, status

def i2cSlave_Write(self, data):
"""write data to master

Args:
data (int, bytes, bytearray): Data to write to master

Returns:
int: Bytes sent to master

Raises:
FT4222DeviceError: on error

"""
if isinstance(data, int):
data = bytes([data])
elif not isinstance(data, (bytes, bytearray)):
raise TypeError("the data argument must be of type 'int', 'bytes' or 'bytearray'")
cdef:
uint16 bytesSent
uint8* cdata = data
status = FT4222_I2CSlave_Write(self._handle, cdata, len(data), &bytesSent)
if status == FT4222_OK:
return bytesSent
raise FT4222DeviceError, status

def i2cSlave_SetClockStretch(self, enable):
"""Set clock stretch

Args:
enable (bool): True for enable, False for disable

Raises:
FT4222DeviceError: on error

"""
status = FT4222_I2CSlave_SetClockStretch(self._handle, enable)
if status != FT4222_OK:
raise FT4222DeviceError, status

def i2cSlave_SetRespWord(self, responseWord):
"""Set response word

Args:
enable (bool): True for enable, False for disable

Raises:
FT4222DeviceError: on error

"""
status = FT4222_I2CSlave_SetRespWord(self._handle, responseWord)
if status != FT4222_OK:
raise FT4222DeviceError, status

def spi_Reset(self):
"""Reset the SPI master or slave device
Expand Down