arduino-emulator
Loading...
Searching...
No Matches
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
arduino::HardwareGPIO_FTDI Class Reference

GPIO hardware abstraction for FTDI FT2232HL in the Arduino emulator. More...

#include <HardwareGPIO_FTDI.h>

Inheritance diagram for arduino::HardwareGPIO_FTDI:
arduino::HardwareGPIO

Classes

struct  PWMPin
 

Public Member Functions

 HardwareGPIO_FTDI ()=default
 Constructor for HardwareGPIO_FTDI.
 
 ~HardwareGPIO_FTDI ()
 Destructor for HardwareGPIO_FTDI.
 
int analogRead (pin_size_t pinNumber) override
 Read an analog value from a pin (not supported by FT2232HL).
 
void analogReference (uint8_t mode) override
 Set the analog reference mode (not supported by FT2232HL).
 
void analogWrite (pin_size_t pinNumber, int value) override
 Write an analog value (PWM) to a pin using software PWM.
 
void analogWriteFrequency (pin_size_t pinNumber, uint32_t frequency)
 Set the PWM frequency for analogWrite() on a specific pin.
 
void analogWriteResolution (uint8_t bits) override
 Set the resolution for analogWrite() operations.
 
bool begin (int vendor_id=0x0403, int product_id=0x6010, const char *description=nullptr, const char *serial=nullptr)
 Initialize the GPIO hardware interface for FTDI FT2232HL.
 
PinStatus digitalRead (pin_size_t pinNumber) override
 Read a digital value from a GPIO pin.
 
void digitalWrite (pin_size_t pinNumber, PinStatus status) override
 Write a digital value to a GPIO pin.
 
void end ()
 Close the FTDI connection and cleanup resources.
 
void getPWMStatistics (pin_size_t pin, uint64_t &cycles, uint64_t &max_jitter_us, uint64_t &avg_jitter_us)
 Get PWM statistics for monitoring timing accuracy.
 
void noTone (uint8_t _pin) override
 Stop tone generation on a pin (not supported by FT2232HL).
 
 operator bool ()
 Boolean conversion operator.
 
void pinMode (pin_size_t pinNumber, PinMode pinMode) override
 Set the mode of a GPIO pin (INPUT, OUTPUT, etc).
 
unsigned long pulseIn (uint8_t pin, uint8_t state, unsigned long timeout=1000000L) override
 Measure pulse duration on a pin (not supported by FT2232HL).
 
unsigned long pulseInLong (uint8_t pin, uint8_t state, unsigned long timeout=1000000L) override
 Measure long pulse duration on a pin (not supported by FT2232HL).
 
void tone (uint8_t _pin, unsigned int frequency, unsigned long duration=0) override
 Generate a tone on a pin (not supported by FT2232HL).
 

Protected Member Functions

int getBitPosition (pin_size_t pin)
 Get the bit position within a channel for a given pin.
 
int getChannel (pin_size_t pin)
 Get the channel number for a given pin.
 
void pwmThreadFunction ()
 PWM thread function that handles software PWM generation.
 
bool readGPIOState (int channel, uint8_t &value)
 Read current GPIO state from the FTDI device.
 
void startPWMThread ()
 Start the PWM background thread.
 
void stopPWMThread ()
 Stop the PWM background thread.
 
bool updateGPIOState (int channel)
 Update the GPIO state on the FTDI device.
 
void updatePWMPin (pin_size_t pin, uint8_t duty_cycle, uint32_t frequency=1000)
 Update PWM pin configuration.
 

Protected Attributes

struct ftdi_context * ftdi_context = nullptr
 
bool is_open = false
 
uint8_t pin_directions_a = 0x00
 
uint8_t pin_directions_b = 0x00
 
std::map< pin_size_t, PinMode > pin_modes
 
uint8_t pin_values_a = 0x00
 
uint8_t pin_values_b = 0x00
 
std::mutex pwm_mutex
 
std::map< pin_size_t, PWMPinpwm_pins
 
std::thread pwm_thread
 
std::atomic< boolpwm_thread_running {false}
 

Detailed Description

GPIO hardware abstraction for FTDI FT2232HL in the Arduino emulator.

This class implements the Arduino-style GPIO interface for FTDI FT2232HL devices, allowing digital I/O operations to be used in a manner compatible with Arduino code. The FT2232HL provides 16 GPIO pins (8 per channel) that can be configured for digital input/output.

Pin mapping for FT2232HL:

The class inherits from HardwareGPIO and is intended for use within the emulator when communicating with FTDI FT2232HL devices. It manages pin state and direction for supported pins.

Note
This class is only available when USE_FTDI is defined.
Requires libftdi1 development library to be installed.

Member Function Documentation

◆ analogRead()

int arduino::HardwareGPIO_FTDI::analogRead ( pin_size_t  pinNumber)
overridevirtual

Read an analog value from a pin (not supported by FT2232HL).

Parameters
pinNumberPin number
Returns
Always returns 0 (no ADC on FT2232HL)

Implements arduino::HardwareGPIO.

◆ analogReference()

void arduino::HardwareGPIO_FTDI::analogReference ( uint8_t  mode)
overridevirtual

Set the analog reference mode (not supported by FT2232HL).

Parameters
modeReference mode (ignored)

Implements arduino::HardwareGPIO.

◆ analogWrite()

void arduino::HardwareGPIO_FTDI::analogWrite ( pin_size_t  pinNumber,
int  value 
)
overridevirtual

Write an analog value (PWM) to a pin using software PWM.

Parameters
pinNumberPin number (0-15)
valuePWM duty cycle (0-255, where 0=0% and 255=100%)

Implements arduino::HardwareGPIO.

◆ analogWriteFrequency()

void arduino::HardwareGPIO_FTDI::analogWriteFrequency ( pin_size_t  pinNumber,
uint32_t  frequency 
)
virtual

Set the PWM frequency for analogWrite() on a specific pin.

Parameters
pinNumberPin number (0-15)
frequencyPWM frequency in Hz (default: 1000Hz)

Implements arduino::HardwareGPIO.

◆ analogWriteResolution()

void arduino::HardwareGPIO_FTDI::analogWriteResolution ( uint8_t  bits)
overridevirtual

Set the resolution for analogWrite() operations.

Parameters
bitsThe resolution in bits (8-bit by default for FTDI)
Note
FT2232HL supports 8-bit PWM resolution (0-255)

Implements arduino::HardwareGPIO.

◆ begin()

bool arduino::HardwareGPIO_FTDI::begin ( int  vendor_id = 0x0403,
int  product_id = 0x6010,
const char description = nullptr,
const char serial = nullptr 
)

Initialize the GPIO hardware interface for FTDI FT2232HL.

Parameters
vendor_idUSB vendor ID (default: 0x0403)
product_idUSB product ID (default: 0x6010 for FT2232HL)
descriptionDevice description string (optional)
serialDevice serial number (optional)
Returns
true if initialization successful, false otherwise

◆ digitalRead()

PinStatus arduino::HardwareGPIO_FTDI::digitalRead ( pin_size_t  pinNumber)
overridevirtual

Read a digital value from a GPIO pin.

Parameters
pinNumberPin number (0-15)
Returns
Pin status (HIGH or LOW)

Implements arduino::HardwareGPIO.

◆ digitalWrite()

void arduino::HardwareGPIO_FTDI::digitalWrite ( pin_size_t  pinNumber,
PinStatus  status 
)
overridevirtual

Write a digital value to a GPIO pin.

Parameters
pinNumberPin number (0-15)
statusPin status (HIGH or LOW)

Implements arduino::HardwareGPIO.

◆ getBitPosition()

int arduino::HardwareGPIO_FTDI::getBitPosition ( pin_size_t  pin)
inlineprotected

Get the bit position within a channel for a given pin.

Parameters
pinPin number (0-15)
Returns
Bit position (0-7)

◆ getChannel()

int arduino::HardwareGPIO_FTDI::getChannel ( pin_size_t  pin)
inlineprotected

Get the channel number for a given pin.

Parameters
pinPin number (0-15)
Returns
Channel number (0 for pins 0-7, 1 for pins 8-15)

◆ getPWMStatistics()

void arduino::HardwareGPIO_FTDI::getPWMStatistics ( pin_size_t  pin,
uint64_t cycles,
uint64_t max_jitter_us,
uint64_t avg_jitter_us 
)

Get PWM statistics for monitoring timing accuracy.

Parameters
pinPin number
cyclesTotal number of PWM cycles completed
max_jitter_usMaximum jitter observed in microseconds
avg_jitter_usAverage jitter in microseconds

◆ noTone()

void arduino::HardwareGPIO_FTDI::noTone ( uint8_t  _pin)
overridevirtual

Stop tone generation on a pin (not supported by FT2232HL).

Parameters
_pinPin number (ignored)

Implements arduino::HardwareGPIO.

◆ operator bool()

arduino::HardwareGPIO_FTDI::operator bool ( )
inline

Boolean conversion operator.

Returns
true if the FTDI interface is open and initialized, false otherwise.

◆ pinMode()

void arduino::HardwareGPIO_FTDI::pinMode ( pin_size_t  pinNumber,
PinMode  pinMode 
)
overridevirtual

Set the mode of a GPIO pin (INPUT, OUTPUT, etc).

Parameters
pinNumberPin number (0-15 for FT2232HL)
pinModePin mode (INPUT, OUTPUT, INPUT_PULLUP)

Implements arduino::HardwareGPIO.

◆ pulseIn()

unsigned long arduino::HardwareGPIO_FTDI::pulseIn ( uint8_t  pin,
uint8_t  state,
unsigned long  timeout = 1000000L 
)
overridevirtual

Measure pulse duration on a pin (not supported by FT2232HL).

Parameters
pinPin number
statePin state to measure
timeoutTimeout in microseconds
Returns
Always returns 0 (not implemented)

Implements arduino::HardwareGPIO.

◆ pulseInLong()

unsigned long arduino::HardwareGPIO_FTDI::pulseInLong ( uint8_t  pin,
uint8_t  state,
unsigned long  timeout = 1000000L 
)
overridevirtual

Measure long pulse duration on a pin (not supported by FT2232HL).

Parameters
pinPin number
statePin state to measure
timeoutTimeout in microseconds
Returns
Always returns 0 (not implemented)

Implements arduino::HardwareGPIO.

◆ readGPIOState()

bool arduino::HardwareGPIO_FTDI::readGPIOState ( int  channel,
uint8_t value 
)
protected

Read current GPIO state from the FTDI device.

Parameters
channelChannel to read (0 for A, 1 for B)
valueReference to store the read value
Returns
true if successful, false on error

◆ tone()

void arduino::HardwareGPIO_FTDI::tone ( uint8_t  _pin,
unsigned int  frequency,
unsigned long  duration = 0 
)
overridevirtual

Generate a tone on a pin (not supported by FT2232HL).

Parameters
_pinPin number
frequencyFrequency in Hz (ignored)
durationDuration in ms (ignored)

Implements arduino::HardwareGPIO.

◆ updateGPIOState()

bool arduino::HardwareGPIO_FTDI::updateGPIOState ( int  channel)
protected

Update the GPIO state on the FTDI device.

Parameters
channelChannel to update (0 for A, 1 for B)
Returns
true if successful, false on error

◆ updatePWMPin()

void arduino::HardwareGPIO_FTDI::updatePWMPin ( pin_size_t  pin,
uint8_t  duty_cycle,
uint32_t  frequency = 1000 
)
protected

Update PWM pin configuration.

Parameters
pinPin number
duty_cycleDuty cycle (0-255)
frequencyFrequency in Hz

The documentation for this class was generated from the following files: