26#include "HardwareGPIO.h"
74 const char*
description =
nullptr,
const char* serial =
nullptr);
136 unsigned long duration = 0)
override;
152 unsigned long timeout = 1000000L)
override;
162 unsigned long timeout = 1000000L)
override;
175 operator bool() {
return is_open && ftdi_context !=
nullptr; }
188 struct ftdi_context* ftdi_context =
nullptr;
189 bool is_open =
false;
192 uint8_t pin_directions_a = 0x00;
194 uint8_t pin_directions_b = 0x00;
198 std::map<pin_size_t, PinMode> pin_modes;
202 bool enabled =
false;
207 std::chrono::high_resolution_clock::time_point period_start;
208 bool current_state =
false;
215 std::map<pin_size_t, PWMPin> pwm_pins;
216 std::thread pwm_thread;
217 std::atomic<bool> pwm_thread_running{
false};
218 std::mutex pwm_mutex;
GPIO hardware abstraction for FTDI FT2232HL in the Arduino emulator.
Definition HardwareGPIO_FTDI.h:53
void noTone(uint8_t _pin) override
Stop tone generation on a pin (not supported by FT2232HL).
Definition HardwareGPIO_FTDI.cpp:292
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.
Definition HardwareGPIO_FTDI.cpp:550
PinStatus digitalRead(pin_size_t pinNumber) override
Read a digital value from a GPIO pin.
Definition HardwareGPIO_FTDI.cpp:175
HardwareGPIO_FTDI()=default
Constructor for HardwareGPIO_FTDI.
int getBitPosition(pin_size_t pin)
Get the bit position within a channel for a given pin.
Definition HardwareGPIO_FTDI.h:247
~HardwareGPIO_FTDI()
Destructor for HardwareGPIO_FTDI.
Definition HardwareGPIO_FTDI.cpp:25
void analogWriteResolution(uint8_t bits) override
Set the resolution for analogWrite() operations.
Definition HardwareGPIO_FTDI.cpp:565
void stopPWMThread()
Stop the PWM background thread.
Definition HardwareGPIO_FTDI.cpp:522
int analogRead(pin_size_t pinNumber) override
Read an analog value from a pin (not supported by FT2232HL).
Definition HardwareGPIO_FTDI.cpp:192
void analogReference(uint8_t mode) override
Set the analog reference mode (not supported by FT2232HL).
Definition HardwareGPIO_FTDI.cpp:197
void pwmThreadFunction()
PWM thread function that handles software PWM generation.
Definition HardwareGPIO_FTDI.cpp:386
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.
Definition HardwareGPIO_FTDI.cpp:29
void end()
Close the FTDI connection and cleanup resources.
Definition HardwareGPIO_FTDI.cpp:97
bool updateGPIOState(int channel)
Update the GPIO state on the FTDI device.
Definition HardwareGPIO_FTDI.cpp:306
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).
Definition HardwareGPIO_FTDI.cpp:301
void updatePWMPin(pin_size_t pin, uint8_t duty_cycle, uint32_t frequency=1000)
Update PWM pin configuration.
Definition HardwareGPIO_FTDI.cpp:532
void analogWrite(pin_size_t pinNumber, int value) override
Write an analog value (PWM) to a pin using software PWM.
Definition HardwareGPIO_FTDI.cpp:201
int getChannel(pin_size_t pin)
Get the channel number for a given pin.
Definition HardwareGPIO_FTDI.h:240
void digitalWrite(pin_size_t pinNumber, PinStatus status) override
Write a digital value to a GPIO pin.
Definition HardwareGPIO_FTDI.cpp:140
void analogWriteFrequency(pin_size_t pinNumber, uint32_t frequency)
Set the PWM frequency for analogWrite() on a specific pin.
Definition HardwareGPIO_FTDI.cpp:252
bool readGPIOState(int channel, uint8_t &value)
Read current GPIO state from the FTDI device.
Definition HardwareGPIO_FTDI.cpp:353
void pinMode(pin_size_t pinNumber, PinMode pinMode) override
Set the mode of a GPIO pin (INPUT, OUTPUT, etc).
Definition HardwareGPIO_FTDI.cpp:111
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration=0) override
Generate a tone on a pin (not supported by FT2232HL).
Definition HardwareGPIO_FTDI.cpp:288
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout=1000000L) override
Measure pulse duration on a pin (not supported by FT2232HL).
Definition HardwareGPIO_FTDI.cpp:296
void startPWMThread()
Start the PWM background thread.
Definition HardwareGPIO_FTDI.cpp:501
Abstract base class for GPIO (General Purpose Input/Output) functions.
Definition HardwareGPIO.h:51
We provide the WiFi class to simulate the Arduino WIFI. In in Linux we can expect that networking is ...
Definition CanMsg.cpp:31
Definition HardwareGPIO_FTDI.h:201