28#include "api/Common.h"
29#include "api/HardwareI2C.h"
30#include "api/Stream.h"
77 const char*
description =
nullptr,
const char* serial =
nullptr);
166 void flush()
override;
173 void onReceive(
void(*function)(
int))
override;
180 void onRequest(
void(*function)(
void))
override;
186 operator bool() {
return is_open && ftdi_context !=
nullptr; }
189 struct ftdi_context* ftdi_context =
nullptr;
190 int ftdi_channel = 0;
191 bool is_open =
false;
194 uint8_t current_slave_address = 0;
195 uint32_t i2c_clock_frequency = 100000;
199 size_t tx_buffer_length = 0;
203 size_t rx_buffer_length = 0;
204 size_t rx_buffer_index = 0;
207 static const uint8_t I2C_DATA_SHIFT_OUT = 0x11;
208 static const uint8_t I2C_DATA_SHIFT_IN = 0x24;
209 static const uint8_t I2C_DATA_SHIFT_OUT_IN = 0x31;
210 static const uint8_t I2C_SET_DATA_BITS_LOW_BYTE = 0x80;
211 static const uint8_t I2C_SET_DATA_BITS_HIGH_BYTE = 0x82;
212 static const uint8_t I2C_GET_DATA_BITS_LOW_BYTE = 0x81;
213 static const uint8_t I2C_GET_DATA_BITS_HIGH_BYTE = 0x83;
216 static const uint8_t SCL_BIT = 0;
217 static const uint8_t SDA_OUT_BIT = 1;
218 static const uint8_t SDA_IN_BIT = 2;
Implementation of I2C communication for FTDI FT2232HL using MPSSE mode.
Definition HardwareI2C_FTDI.h:55
bool setLineStates(bool sda_state, bool scl_state)
Set the state of SDA and SCL lines.
Definition HardwareI2C_FTDI.cpp:399
int receiveData(uint8_t *data, size_t length)
Receive raw data from FTDI device.
Definition HardwareI2C_FTDI.cpp:392
uint8_t endTransmission(void) override
End transmission and send data to slave device (with stop condition).
Definition HardwareI2C_FTDI.cpp:425
uint8_t receiveByteSendAck(bool send_ack)
Receive a byte over I2C and send ACK/NACK.
Definition HardwareI2C_FTDI.cpp:356
void end() override
Close the I2C interface and cleanup resources.
Definition HardwareI2C_FTDI.cpp:97
bool setClockFrequency(uint32_t frequency)
Set the I2C clock frequency.
Definition HardwareI2C_FTDI.cpp:280
bool configureMPSSE()
Configure FTDI device for I2C MPSSE mode.
Definition HardwareI2C_FTDI.cpp:244
void setClock(uint32_t freq) override
Set the I2C clock frequency.
Definition HardwareI2C_FTDI.cpp:109
int peek() override
Peek at the next byte without removing it from buffer.
Definition HardwareI2C_FTDI.cpp:226
bool sendStart()
Send I2C start condition.
Definition HardwareI2C_FTDI.cpp:302
bool sendByteCheckAck(uint8_t data)
Send a byte over I2C and check for ACK.
Definition HardwareI2C_FTDI.cpp:326
~HardwareI2C_FTDI()
Destructor - closes FTDI connection.
Definition HardwareI2C_FTDI.cpp:33
void onReceive(void(*function)(int)) override
Register a function to be called when data is received as a slave.
Definition HardwareI2C_FTDI.cpp:429
int read() override
Read a byte from the receive buffer.
Definition HardwareI2C_FTDI.cpp:233
size_t write(uint8_t data) override
Write a single byte to the I2C bus.
Definition HardwareI2C_FTDI.cpp:121
bool sendRepeatedStart()
Send I2C repeated start condition.
Definition HardwareI2C_FTDI.cpp:322
void flush() override
Flush the output buffer (no-op for I2C).
Definition HardwareI2C_FTDI.cpp:240
bool sendStop()
Send I2C stop condition.
Definition HardwareI2C_FTDI.cpp:312
size_t requestFrom(uint8_t address, size_t quantity, bool stopBit=true) override
Request data from an I2C slave device.
Definition HardwareI2C_FTDI.cpp:180
void onRequest(void(*function)(void)) override
Register a function to be called when master requests data from slave.
Definition HardwareI2C_FTDI.cpp:434
void beginTransmission(uint8_t address) override
Begin transmission to an I2C slave device.
Definition HardwareI2C_FTDI.cpp:116
int available() override
Get the number of bytes available for reading.
Definition HardwareI2C_FTDI.cpp:222
int sendData(const uint8_t *data, size_t length)
Send raw data to FTDI device.
Definition HardwareI2C_FTDI.cpp:385
void begin() override
Initialize I2C as master (same as begin()).
Definition HardwareI2C_FTDI.h:82
Definition HardwareI2C.h:28
We provide the WiFi class to simulate the Arduino WIFI. In in Linux we can expect that networking is ...
Definition CanMsg.cpp:31