arduino-emulator
Loading...
Searching...
No Matches
RemoteGPIO.h
1/*
2 RemoteGPIO.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
24namespace arduino {
25
50class RemoteGPIO : public HardwareGPIO {
51 public:
52 RemoteGPIO() = default;
53 RemoteGPIO(Stream* stream) { service.setStream(stream); }
54 void setStream(Stream* stream) { service.setStream(stream); }
55
56 void pinMode(pin_size_t pinNumber, PinMode pinMode) {
57 service.send((uint16_t)GpioPinMode);
58 service.send((int8_t)pinNumber);
59 service.send((int8_t)pinMode);
60 service.flush();
61 }
62
63 void digitalWrite(pin_size_t pinNumber, PinStatus status) {
64 service.send((uint16_t)GpioDigitalWrite);
65 service.send((uint8_t)pinNumber);
66 service.send((uint8_t)status);
67 service.flush();
68 }
69
70 PinStatus digitalRead(pin_size_t pinNumber) {
71 service.send((uint16_t)GpioDigitalRead);
72 service.send((uint8_t)pinNumber);
73 service.flush();
74 return (PinStatus)service.receive8();
75 }
76
77 int analogRead(pin_size_t pinNumber) {
78 service.send((uint16_t)GpioAnalogRead);
79 service.send((uint8_t)pinNumber);
80 service.flush();
81 return service.receive16();
82 }
83
85 service.send((uint16_t)GpioAnalogReference);
86 service.send(mode);
87 service.flush();
88 }
89
90 void analogWrite(pin_size_t pinNumber, int value) {
91 service.send((uint16_t)GpioAnalogWrite);
92 service.send((uint8_t)pinNumber);
93 service.send(value);
94 service.flush();
95 }
96
97 virtual void tone(uint8_t pinNumber, unsigned int frequency,
98 unsigned long duration = 0) {
99 service.send((uint16_t)GpioTone);
100 service.send((uint8_t)pinNumber);
101 service.send(frequency);
102 service.send((uint64_t)duration);
103 service.flush();
104 }
105
106 virtual void noTone(uint8_t pinNumber) {
107 service.send((uint16_t)GpioNoTone);
108 service.send((uint8_t)pinNumber);
109 service.flush();
110 }
111
112 virtual unsigned long pulseIn(uint8_t pinNumber, uint8_t state,
113 unsigned long timeout = 1000000L) {
114 service.send((uint16_t)GpioPulseIn);
115 service.send((uint8_t)pinNumber);
116 service.send(state);
117 service.send((uint64_t)timeout);
118 service.flush();
119 return service.receive64();
120 }
121
122 virtual unsigned long pulseInLong(uint8_t pinNumber, uint8_t state,
123 unsigned long timeout = 1000000L) {
124 service.send((uint16_t)GpioPulseInLong);
125 service.send((uint8_t)pinNumber);
126 service.send(state);
127 service.send((uint64_t)timeout);
128 service.flush();
129 return service.receive64();
130 }
131 virtual void analogWriteFrequency(pin_size_t pin, uint32_t freq){
132 service.send((uint16_t)GpioAnalogWriteFrequency);
133 service.send((uint8_t)pin);
134 service.send((uint32_t)freq);
135 service.flush();
136 }
138 service.send((uint16_t)GpioAnalogWriteResolution);
139 service.send((uint8_t)bits);
140 service.flush();
141 }
142
143 operator bool() { return service; }
144
145 protected:
146 HardwareService service;
147};
148
149} // namespace arduino
Definition DMAPool.h:103
Abstract base class for GPIO (General Purpose Input/Output) functions.
Definition HardwareGPIO.h:51
Remote GPIO implementation that operates over a communication stream.
Definition RemoteGPIO.h:50
void analogWrite(pin_size_t pinNumber, int value)
Write an analog value (PWM wave) to a pin.
Definition RemoteGPIO.h:90
virtual void analogWriteResolution(uint8_t bits)
Set the resolution of the analogWrite() values.
Definition RemoteGPIO.h:137
void analogReference(uint8_t mode)
Configure the reference voltage used for analog input.
Definition RemoteGPIO.h:84
void digitalWrite(pin_size_t pinNumber, PinStatus status)
Write a HIGH or LOW value to a digital pin.
Definition RemoteGPIO.h:63
virtual void tone(uint8_t pinNumber, unsigned int frequency, unsigned long duration=0)
Generate a square wave of the specified frequency on a pin.
Definition RemoteGPIO.h:97
void pinMode(pin_size_t pinNumber, PinMode pinMode)
Configure the specified pin to behave as an input or output.
Definition RemoteGPIO.h:56
virtual void analogWriteFrequency(pin_size_t pin, uint32_t freq)
Set the PWM frequency for analogWrite() on the specified pin.
Definition RemoteGPIO.h:131
virtual void noTone(uint8_t pinNumber)
Stop the generation of a square wave triggered by tone()
Definition RemoteGPIO.h:106
PinStatus digitalRead(pin_size_t pinNumber)
Read the value from a specified digital pin.
Definition RemoteGPIO.h:70
virtual unsigned long pulseInLong(uint8_t pinNumber, uint8_t state, unsigned long timeout=1000000L)
Alternative to pulseIn() which is better at handling long pulses.
Definition RemoteGPIO.h:122
int analogRead(pin_size_t pinNumber)
Read the value from the specified analog pin.
Definition RemoteGPIO.h:77
virtual unsigned long pulseIn(uint8_t pinNumber, uint8_t state, unsigned long timeout=1000000L)
Read a pulse (HIGH or LOW) on a pin.
Definition RemoteGPIO.h:112
Definition Stream.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