Skip to content

Commit a652c9f

Browse files
committed
Doxygen
1 parent 1b40f5e commit a652c9f

30 files changed

+1757
-200
lines changed

ArduinoCore-Linux/cores/arduino/HardwareGPIO.h

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,107 @@
55
namespace arduino {
66

77
/**
8-
* Abstract base class for GPIO functions
9-
**/
8+
* @brief Abstract base class for GPIO (General Purpose Input/Output) functions
9+
*
10+
* HardwareGPIO defines the interface for hardware abstraction of GPIO operations
11+
* across different platforms and microcontrollers. This class provides a unified
12+
* API for digital and analog I/O operations that can be implemented by platform-specific
13+
* classes.
14+
*
15+
* The class supports:
16+
* - Digital pin operations (pinMode, digitalWrite, digitalRead)
17+
* - Analog operations (analogRead, analogWrite, analogReference)
18+
* - PWM and tone generation (analogWrite, tone, noTone)
19+
* - Pulse measurement (pulseIn, pulseInLong)
20+
*
21+
* Platform-specific implementations should inherit from this class and provide
22+
* concrete implementations for all pure virtual methods. Examples include
23+
* HardwareGPIO_RPI for Raspberry Pi, or similar classes for other platforms.
24+
*
25+
* @note All methods in this class are pure virtual and must be implemented
26+
* by derived classes to provide platform-specific functionality.
27+
*
28+
* @see HardwareGPIO_RPI
29+
* @see PinMode
30+
* @see PinStatus
31+
*
32+
*/
1033
class HardwareGPIO {
1134
public:
1235
HardwareGPIO() = default;
1336
virtual ~HardwareGPIO() = default;
1437

38+
/**
39+
* @brief Configure the specified pin to behave as an input or output
40+
* @param pinNumber The pin number to configure
41+
* @param pinMode The mode to set (INPUT, OUTPUT, INPUT_PULLUP, etc.)
42+
*/
1543
virtual void pinMode(pin_size_t pinNumber, PinMode pinMode) = 0;
44+
45+
/**
46+
* @brief Write a HIGH or LOW value to a digital pin
47+
* @param pinNumber The pin number to write to
48+
* @param status The value to write (HIGH or LOW)
49+
*/
1650
virtual void digitalWrite(pin_size_t pinNumber, PinStatus status) = 0;
51+
52+
/**
53+
* @brief Read the value from a specified digital pin
54+
* @param pinNumber The pin number to read from
55+
* @return HIGH or LOW
56+
*/
1757
virtual PinStatus digitalRead(pin_size_t pinNumber) = 0;
58+
59+
/**
60+
* @brief Read the value from the specified analog pin
61+
* @param pinNumber The analog pin to read from (A0, A1, etc.)
62+
* @return The analog reading on the pin (0-1023 for 10-bit ADC)
63+
*/
1864
virtual int analogRead(pin_size_t pinNumber) = 0;
65+
66+
/**
67+
* @brief Configure the reference voltage used for analog input
68+
* @param mode The reference type (DEFAULT, INTERNAL, EXTERNAL, etc.)
69+
*/
1970
virtual void analogReference(uint8_t mode) = 0;
71+
72+
/**
73+
* @brief Write an analog value (PWM wave) to a pin
74+
* @param pinNumber The pin to write to
75+
* @param value The duty cycle (0-255 for 8-bit PWM)
76+
*/
2077
virtual void analogWrite(pin_size_t pinNumber, int value) = 0;
78+
79+
/**
80+
* @brief Generate a square wave of the specified frequency on a pin
81+
* @param _pin The pin on which to generate the tone
82+
* @param frequency The frequency of the tone in hertz
83+
* @param duration The duration of the tone in milliseconds (0 = continuous)
84+
*/
2185
virtual void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0) = 0;
86+
87+
/**
88+
* @brief Stop the generation of a square wave triggered by tone()
89+
* @param _pin The pin on which to stop generating the tone
90+
*/
2291
virtual void noTone(uint8_t _pin) = 0;
92+
93+
/**
94+
* @brief Read a pulse (HIGH or LOW) on a pin
95+
* @param pin The pin on which you want to read the pulse
96+
* @param state Type of pulse to read (HIGH or LOW)
97+
* @param timeout Timeout in microseconds (default 1 second)
98+
* @return The length of the pulse in microseconds, or 0 if timeout
99+
*/
23100
virtual unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L) = 0;
101+
102+
/**
103+
* @brief Alternative to pulseIn() which is better at handling long pulses
104+
* @param pin The pin on which you want to read the pulse
105+
* @param state Type of pulse to read (HIGH or LOW)
106+
* @param timeout Timeout in microseconds (default 1 second)
107+
* @return The length of the pulse in microseconds, or 0 if timeout
108+
*/
24109
virtual unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L) = 0;
25110
};
26111

docs/html/_g_p_i_o_wrapper_8h_source.html

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,17 @@
8282
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html">GPIOWrapper</a>(<a class="code" href="classarduino_1_1_g_p_i_o_source.html">GPIOSource</a>&amp; source) { <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a4aaeb3adb73f412ee1743a33bb829d1a">setSource</a>(&amp;source); }</div>
8383
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html">GPIOWrapper</a>(<a class="code" href="classarduino_1_1_hardware_g_p_i_o.html">HardwareGPIO</a>&amp; gpio) { <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a4fbb67aaa1e606e6eadf23f4723f01a2">setGPIO</a>(&amp;gpio); }</div>
8484
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; ~<a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html">GPIOWrapper</a>() = <span class="keywordflow">default</span>;</div>
85-
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> pinMode(pin_size_t pinNumber, PinMode pinMode);</div>
86-
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> digitalWrite(pin_size_t pinNumber, PinStatus status);</div>
87-
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; PinStatus digitalRead(pin_size_t pinNumber);</div>
88-
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">int</span> analogRead(pin_size_t pinNumber);</div>
89-
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> analogReference(uint8_t mode);</div>
90-
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">void</span> analogWrite(pin_size_t pinNumber, <span class="keywordtype">int</span> value);</div>
91-
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> tone(uint8_t _pin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frequency, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> duration = 0);</div>
92-
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> noTone(uint8_t _pin);</div>
93-
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pulseIn(uint8_t pin, uint8_t state,</div>
85+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a468eaf21e5509581d2d7f8a8d41db4f5">pinMode</a>(pin_size_t pinNumber, PinMode <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a468eaf21e5509581d2d7f8a8d41db4f5">pinMode</a>);</div>
86+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a01ef49d52dfec84e3fa6375dd79da90d">digitalWrite</a>(pin_size_t pinNumber, PinStatus status);</div>
87+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; PinStatus <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a38c123198ff08bafe60d37050baa574e">digitalRead</a>(pin_size_t pinNumber);</div>
88+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a07ca4e15b7f8427964d9c4f91b7ca091">analogRead</a>(pin_size_t pinNumber);</div>
89+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#af2fa37727fa092d979506698f8d53ac2">analogReference</a>(uint8_t mode);</div>
90+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#aae31378a69ce59e97dee2d87f81f6cfe">analogWrite</a>(pin_size_t pinNumber, <span class="keywordtype">int</span> value);</div>
91+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a4eefb039ba6a8b29f2cce5d2ebf86697">tone</a>(uint8_t _pin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frequency, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> duration = 0);</div>
92+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a0aeb817fd33c6787d2c50f397d71ec51">noTone</a>(uint8_t _pin);</div>
93+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a26250c7e720502faa63b1ed63dfba45d">pulseIn</a>(uint8_t pin, uint8_t state,</div>
9494
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timeout = 1000000L);</div>
95-
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pulseInLong(uint8_t pin, uint8_t state,</div>
95+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a7bb614e9d5ff68db1564362a5f8b7f4d">pulseInLong</a>(uint8_t pin, uint8_t state,</div>
9696
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timeout = 1000000L);</div>
9797
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
9898
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classarduino_1_1_g_p_i_o_wrapper.html#a4fbb67aaa1e606e6eadf23f4723f01a2"> 55</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classarduino_1_1_g_p_i_o_wrapper.html#a4fbb67aaa1e606e6eadf23f4723f01a2">setGPIO</a>(<a class="code" href="classarduino_1_1_hardware_g_p_i_o.html">HardwareGPIO</a>* gpio) {</div>
@@ -122,9 +122,19 @@
122122
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;} <span class="comment">// namespace arduino</span></div>
123123
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_source_html"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_source.html">arduino::GPIOSource</a></div><div class="ttdoc">Abstract interface for providing GPIO hardware implementations.</div><div class="ttdef"><b>Definition:</b> Sources.h:48</div></div>
124124
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html">arduino::GPIOWrapper</a></div><div class="ttdoc">GPIO wrapper class that provides flexible hardware abstraction.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.h:35</div></div>
125+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a01ef49d52dfec84e3fa6375dd79da90d"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a01ef49d52dfec84e3fa6375dd79da90d">arduino::GPIOWrapper::digitalWrite</a></div><div class="ttdeci">void digitalWrite(pin_size_t pinNumber, PinStatus status)</div><div class="ttdoc">Write a HIGH or LOW value to a digital pin.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:21</div></div>
126+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a07ca4e15b7f8427964d9c4f91b7ca091"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a07ca4e15b7f8427964d9c4f91b7ca091">arduino::GPIOWrapper::analogRead</a></div><div class="ttdeci">int analogRead(pin_size_t pinNumber)</div><div class="ttdoc">Read the value from the specified analog pin.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:37</div></div>
127+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a0aeb817fd33c6787d2c50f397d71ec51"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a0aeb817fd33c6787d2c50f397d71ec51">arduino::GPIOWrapper::noTone</a></div><div class="ttdeci">void noTone(uint8_t _pin)</div><div class="ttdoc">Stop the generation of a square wave triggered by tone()</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:68</div></div>
128+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a26250c7e720502faa63b1ed63dfba45d"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a26250c7e720502faa63b1ed63dfba45d">arduino::GPIOWrapper::pulseIn</a></div><div class="ttdeci">unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout=1000000L)</div><div class="ttdoc">Read a pulse (HIGH or LOW) on a pin.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:75</div></div>
129+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a38c123198ff08bafe60d37050baa574e"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a38c123198ff08bafe60d37050baa574e">arduino::GPIOWrapper::digitalRead</a></div><div class="ttdeci">PinStatus digitalRead(pin_size_t pinNumber)</div><div class="ttdoc">Read the value from a specified digital pin.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:28</div></div>
130+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a468eaf21e5509581d2d7f8a8d41db4f5"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a468eaf21e5509581d2d7f8a8d41db4f5">arduino::GPIOWrapper::pinMode</a></div><div class="ttdeci">void pinMode(pin_size_t pinNumber, PinMode pinMode)</div><div class="ttdoc">Configure the specified pin to behave as an input or output.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:14</div></div>
125131
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a4aaeb3adb73f412ee1743a33bb829d1a"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a4aaeb3adb73f412ee1743a33bb829d1a">arduino::GPIOWrapper::setSource</a></div><div class="ttdeci">void setSource(GPIOSource *source)</div><div class="ttdoc">alternatively defines a class that provides the GPIO implementation</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.h:60</div></div>
132+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a4eefb039ba6a8b29f2cce5d2ebf86697"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a4eefb039ba6a8b29f2cce5d2ebf86697">arduino::GPIOWrapper::tone</a></div><div class="ttdeci">void tone(uint8_t _pin, unsigned int frequency, unsigned long duration=0)</div><div class="ttdoc">Generate a square wave of the specified frequency on a pin.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:60</div></div>
126133
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a4fbb67aaa1e606e6eadf23f4723f01a2"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a4fbb67aaa1e606e6eadf23f4723f01a2">arduino::GPIOWrapper::setGPIO</a></div><div class="ttdeci">void setGPIO(HardwareGPIO *gpio)</div><div class="ttdoc">defines the gpio implementation: use nullptr to reset.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.h:55</div></div>
127-
<div class="ttc" id="aclassarduino_1_1_hardware_g_p_i_o_html"><div class="ttname"><a href="classarduino_1_1_hardware_g_p_i_o.html">arduino::HardwareGPIO</a></div><div class="ttdef"><b>Definition:</b> HardwareGPIO.h:10</div></div>
134+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_a7bb614e9d5ff68db1564362a5f8b7f4d"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#a7bb614e9d5ff68db1564362a5f8b7f4d">arduino::GPIOWrapper::pulseInLong</a></div><div class="ttdeci">unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout=1000000L)</div><div class="ttdoc">Alternative to pulseIn() which is better at handling long pulses.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:85</div></div>
135+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_aae31378a69ce59e97dee2d87f81f6cfe"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#aae31378a69ce59e97dee2d87f81f6cfe">arduino::GPIOWrapper::analogWrite</a></div><div class="ttdeci">void analogWrite(pin_size_t pinNumber, int value)</div><div class="ttdoc">Write an analog value (PWM wave) to a pin.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:53</div></div>
136+
<div class="ttc" id="aclassarduino_1_1_g_p_i_o_wrapper_html_af2fa37727fa092d979506698f8d53ac2"><div class="ttname"><a href="classarduino_1_1_g_p_i_o_wrapper.html#af2fa37727fa092d979506698f8d53ac2">arduino::GPIOWrapper::analogReference</a></div><div class="ttdeci">void analogReference(uint8_t mode)</div><div class="ttdoc">Configure the reference voltage used for analog input.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:46</div></div>
137+
<div class="ttc" id="aclassarduino_1_1_hardware_g_p_i_o_html"><div class="ttname"><a href="classarduino_1_1_hardware_g_p_i_o.html">arduino::HardwareGPIO</a></div><div class="ttdoc">Abstract base class for GPIO (General Purpose Input/Output) functions.</div><div class="ttdef"><b>Definition:</b> HardwareGPIO.h:33</div></div>
128138
<div class="ttc" id="anamespacearduino_html"><div class="ttname"><a href="namespacearduino.html">arduino</a></div><div class="ttdoc">We provide the WiFi class to simulate the Arduino WIFI. In in Linux we can expect that networking is ...</div><div class="ttdef"><b>Definition:</b> CanMsg.cpp:31</div></div>
129139
<div class="ttc" id="anamespacearduino_html_a67230408a4be8e454f3947313e30c0e1"><div class="ttname"><a href="namespacearduino.html#a67230408a4be8e454f3947313e30c0e1">arduino::GPIO</a></div><div class="ttdeci">GPIOWrapper GPIO</div><div class="ttdoc">Global GPIO instance used by Arduino API functions and direct access.</div><div class="ttdef"><b>Definition:</b> GPIOWrapper.cpp:12</div></div>
130140
</div><!-- fragment --></div><!-- contents -->

0 commit comments

Comments
 (0)