arduino-emulator
Loading...
Searching...
No Matches
GPIOWrapper.h
1/*
2 GPIOWrapper.h
3 Copyright (c) 2025 Phil Schatzmann. All right reserved.
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18*/
19
20#pragma once
21#include "HardwareGPIO.h"
22#include "HardwareService.h"
23#include "Sources.h"
24
25namespace arduino {
26
54class GPIOWrapper : public HardwareGPIO {
55 public:
56 GPIOWrapper() = default;
58 GPIOWrapper(HardwareGPIO& gpio) { setGPIO(&gpio); }
59 ~GPIOWrapper() = default;
60
66 void pinMode(pin_size_t pinNumber, PinMode pinMode);
67
73 void digitalWrite(pin_size_t pinNumber, PinStatus status);
74
80 PinStatus digitalRead(pin_size_t pinNumber);
81
87 int analogRead(pin_size_t pinNumber);
88
94
100 void analogWrite(pin_size_t pinNumber, int value);
101
108 void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
109
114 void noTone(uint8_t _pin);
115
123 unsigned long pulseIn(uint8_t pin, uint8_t state,
124 unsigned long timeout = 1000000L);
125
133 unsigned long pulseInLong(uint8_t pin, uint8_t state,
134 unsigned long timeout = 1000000L);
135
141 void analogWriteFrequency(pin_size_t pin, uint32_t freq);
142
148
153 void setGPIO(HardwareGPIO* gpio) {
154 p_gpio = gpio;
155 p_source = nullptr;
156 }
157
163 p_source = source;
164 p_gpio = nullptr;
165 }
166
167 protected:
168 HardwareGPIO* p_gpio = nullptr;
169 GPIOSource* p_source = nullptr;
170
171 HardwareGPIO* getGPIO() {
172 HardwareGPIO* result = p_gpio;
173 if (result == nullptr && p_source != nullptr) {
174 result = p_source->getGPIO();
175 }
176 return result;
177 }
178};
179
181extern GPIOWrapper GPIO;
182
183} // namespace arduino
Definition DMAPool.h:103
Abstract interface for providing GPIO hardware implementations.
Definition Sources.h:66
GPIO wrapper class that provides flexible hardware abstraction.
Definition GPIOWrapper.h:54
void digitalWrite(pin_size_t pinNumber, PinStatus status)
Write a digital value to a pin.
Definition GPIOWrapper.cpp:44
int analogRead(pin_size_t pinNumber)
Read an analog value from a pin.
Definition GPIOWrapper.cpp:60
void noTone(uint8_t _pin)
Stop tone generation on a pin.
Definition GPIOWrapper.cpp:92
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout=1000000L)
Measure the duration of a pulse on a pin (microseconds precision)
Definition GPIOWrapper.cpp:99
PinStatus digitalRead(pin_size_t pinNumber)
Read the digital value from a pin.
Definition GPIOWrapper.cpp:51
void pinMode(pin_size_t pinNumber, PinMode pinMode)
Configure the digital pin mode for input/output operations.
Definition GPIOWrapper.cpp:37
void setSource(GPIOSource *source)
Set a GPIO source that provides the GPIO implementation.
Definition GPIOWrapper.h:162
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration=0)
Generate a square wave tone on a pin.
Definition GPIOWrapper.cpp:84
void setGPIO(HardwareGPIO *gpio)
Set the GPIO implementation directly.
Definition GPIOWrapper.h:153
void analogWriteFrequency(pin_size_t pin, uint32_t freq)
Set the PWM frequency for a pin (legacy 8-bit interface)
Definition GPIOWrapper.cpp:119
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout=1000000L)
Measure long pulse duration on a pin (microseconds precision)
Definition GPIOWrapper.cpp:109
void analogWriteResolution(uint8_t bits)
Set the resolution for analog write operations.
Definition GPIOWrapper.cpp:126
void analogWrite(pin_size_t pinNumber, int value)
Write an analog value (PWM) to a pin.
Definition GPIOWrapper.cpp:76
void analogReference(uint8_t mode)
Set the analog reference voltage for ADC measurements.
Definition GPIOWrapper.cpp:69
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
GPIOWrapper GPIO
Global GPIO instance used by Arduino API functions and direct access.
Definition GPIOWrapper.cpp:35