Skip to content

Commit 164f9f8

Browse files
authored
Merge pull request #14 from pschatzmann/templates
Templates
2 parents 5d9ce0a + 777f372 commit 164f9f8

File tree

84 files changed

+1210
-1196
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+1210
-1196
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,21 @@ MidiLogLevel = MidiDebug; // or MidiInfo, MidiWarning, MidiError
8989

9090
All the midi classes are defined using the midi namespace. If you include Midi.h the using namespace is already defined. However, if you include the individual class specific header files you need to add a using namespace midi; in your sketch.
9191

92+
### Class Templates / Alternatives Networking Stacks
93+
94+
The following classes support class templates for selecting the networking stack:
95+
96+
- ```AppleMidiServer``` (= ```AppleMidiServer<WiFiUDP>``` )
97+
- ```MidiIpserver``` (= ```AppleMidiServer<WiFiServer,WiFiClient>``` )
98+
- ```MidiUdp``` (= ```MidiUdp<WiFiUDP>``` )
99+
- ```MidiUdpServer``` (= ```MidiUdpServer<WiFiUDP>``` )
100+
101+
By default the WiFi classes are used. If you want to use it with Ethernet please use the corresponding class template parameters:
102+
103+
- ```AppleMidiServer<EthernetUDP>```
104+
- ```MidiIpserver<EthernetServer, EthernetClient>```
105+
- ```MidiUdp<EthernetUDP>```
106+
- ```MidiUdpServer<EthernetUDP>```
92107

93108

94109
### Installation in Arduino

docs/html/_apple_midi_server_8h_source.html

Lines changed: 183 additions & 76 deletions
Large diffs are not rendered by default.

docs/html/_midi_common_8h_source.html

Lines changed: 24 additions & 23 deletions
Large diffs are not rendered by default.

docs/html/_midi_ip_server_8h_source.html

Lines changed: 45 additions & 48 deletions
Large diffs are not rendered by default.

docs/html/_midi_server_8h_source.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@
9090
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
9191
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">bool</span> begin(Stream &amp;stream){</div>
9292
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; MIDI_LOGI( __PRETTY_FUNCTION__);</div>
93-
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; in.setup(&amp;stream, <span class="keyword">new</span> <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a>(p_action), <span class="keyword">true</span>);</div>
94-
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; out.setup(&amp;stream);</div>
93+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; in.<a class="code" href="classmidi_1_1_midi_stream_in.html#a0d28ac77f721f80b1a2c6e812b3804a9">setup</a>(&amp;stream, <span class="keyword">new</span> <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a>(p_action), <span class="keyword">true</span>);</div>
94+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; out.<a class="code" href="classmidi_1_1_midi_stream_out.html#a3d9f4f789bd9e65c43e660f8b19fb704">setup</a>(&amp;stream);</div>
9595
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
9696
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div>
9797
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
@@ -124,7 +124,9 @@
124124
<div class="ttc" id="aclassmidi_1_1_midi_parser_html"><div class="ttname"><a href="classmidi_1_1_midi_parser.html">midi::MidiParser</a></div><div class="ttdoc">A simple Midi Parser which calls the corresponding events. It supports Midi and BLE Midi messages....</div><div class="ttdef"><b>Definition:</b> MidiParser.h:29</div></div>
125125
<div class="ttc" id="aclassmidi_1_1_midi_server_html"><div class="ttname"><a href="classmidi_1_1_midi_server.html">midi::MidiServer</a></div><div class="ttdoc">A simple Serial Server which which receives and creates MIDI messages.</div><div class="ttdef"><b>Definition:</b> MidiServer.h:20</div></div>
126126
<div class="ttc" id="aclassmidi_1_1_midi_stream_in_html"><div class="ttname"><a href="classmidi_1_1_midi_stream_in.html">midi::MidiStreamIn</a></div><div class="ttdoc">Input of Midi Messages from the Aruduino HardwareSerial port. You need to give the default MidiParser...</div><div class="ttdef"><b>Definition:</b> MidiStreamIn.h:27</div></div>
127+
<div class="ttc" id="aclassmidi_1_1_midi_stream_in_html_a0d28ac77f721f80b1a2c6e812b3804a9"><div class="ttname"><a href="classmidi_1_1_midi_stream_in.html#a0d28ac77f721f80b1a2c6e812b3804a9">midi::MidiStreamIn::setup</a></div><div class="ttdeci">void setup(Stream *stream, MidiParser *handler, bool releaseHandler)</div><div class="ttdoc">Call setup when created with empty constructor.</div><div class="ttdef"><b>Definition:</b> MidiStreamIn.cpp:25</div></div>
127128
<div class="ttc" id="aclassmidi_1_1_midi_stream_out_html"><div class="ttname"><a href="classmidi_1_1_midi_stream_out.html">midi::MidiStreamOut</a></div><div class="ttdoc">Output of Midi Messages to an Arduino Stream (eg output to Serial, UDP or IP).</div><div class="ttdef"><b>Definition:</b> MidiStreamOut.h:17</div></div>
129+
<div class="ttc" id="aclassmidi_1_1_midi_stream_out_html_a3d9f4f789bd9e65c43e660f8b19fb704"><div class="ttname"><a href="classmidi_1_1_midi_stream_out.html#a3d9f4f789bd9e65c43e660f8b19fb704">midi::MidiStreamOut::setup</a></div><div class="ttdeci">virtual void setup(Print *stream)</div><div class="ttdoc">Call setup when created with empty constructor.</div><div class="ttdef"><b>Definition:</b> MidiStreamOut.cpp:12</div></div>
128130
<div class="ttc" id="astructmidi_1_1_midi_message_html"><div class="ttname"><a href="structmidi_1_1_midi_message.html">midi::MidiMessage</a></div><div class="ttdoc">The content of the midi message: timestamp, status, arg1 and arg2.</div><div class="ttdef"><b>Definition:</b> MidiCommon.h:48</div></div>
129131
</div><!-- fragment --></div><!-- contents -->
130132
<!-- start footer part -->

docs/html/_midi_stream_in_8h_source.html

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -85,40 +85,32 @@
8585
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">/***************************************************/</span></div>
8686
<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classmidi_1_1_midi_stream_in.html"> 27</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmidi_1_1_midi_stream_in.html">MidiStreamIn</a> : <span class="keyword">public</span> <a class="code" href="classmidi_1_1_midi_common.html">MidiCommon</a> {</div>
8787
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">public</span>:</div>
88-
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html">MidiStreamIn</a>(Stream &amp;stream, <a class="code" href="classmidi_1_1_midi_action.html">MidiAction</a> &amp;action);</div>
89-
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html">MidiStreamIn</a>(Stream &amp;stream, <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a> &amp;handler);</div>
90-
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html#aadf64b3479f9b35bf466c49595622131">~MidiStreamIn</a>();</div>
91-
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// Parse/Process the next midi message</span></div>
92-
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> loop();</div>
93-
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
94-
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">protected</span>:</div>
95-
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmidi_1_1_midi_server.html">MidiServer</a>;</div>
96-
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmidi_1_1_midi_ip_server.html">MidiIpServer</a>;</div>
97-
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmidi_1_1_midi_udp_server.html">MidiUdpServer</a>;</div>
98-
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
99-
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">int</span> getLastStatusPos(uint8_t *buffer, <span class="keywordtype">int</span> endPos);</div>
100-
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; Stream *pStream = <span class="keyword">nullptr</span>;</div>
101-
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a> *pHandler = <span class="keyword">nullptr</span>;</div>
102-
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">bool</span> ownsHandler = <span class="keyword">false</span>;</div>
103-
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint8_t buffer[BUFFER_LEN];</div>
104-
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">int</span> startPos = 0;</div>
88+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html">MidiStreamIn</a>() = <span class="keywordflow">default</span>;</div>
89+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html">MidiStreamIn</a>(Stream &amp;stream, <a class="code" href="classmidi_1_1_midi_action.html">MidiAction</a> &amp;action);</div>
90+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html">MidiStreamIn</a>(Stream &amp;stream, <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a> &amp;handler);</div>
91+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html#aadf64b3479f9b35bf466c49595622131">~MidiStreamIn</a>();</div>
92+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Parse/Process the next midi message</span></div>
93+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> loop(); </div>
94+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmidi_1_1_midi_stream_in.html#a0d28ac77f721f80b1a2c6e812b3804a9">setup</a>(Stream *stream, <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a> *handler, <span class="keywordtype">bool</span> releaseHandler);</div>
95+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">protected</span>:</div>
96+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">int</span> getLastStatusPos(uint8_t *buffer, <span class="keywordtype">int</span> endPos);</div>
97+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; Stream *pStream = <span class="keyword">nullptr</span>;</div>
98+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a> *pHandler = <span class="keyword">nullptr</span>;</div>
99+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">bool</span> ownsHandler = <span class="keyword">false</span>;</div>
100+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint8_t buffer[BUFFER_LEN];</div>
101+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">int</span> startPos = 0;</div>
102+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
103+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;};</div>
105104
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
106-
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classmidi_1_1_midi_stream_in.html">MidiStreamIn</a>() = <span class="keywordflow">default</span>;</div>
105+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;} <span class="comment">// namespace</span></div>
107106
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
108-
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> setup(Stream *stream, <a class="code" href="classmidi_1_1_midi_parser.html">MidiParser</a> *handler, <span class="keywordtype">bool</span> releaseHandler);</div>
109-
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
110-
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
111-
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;} <span class="comment">// namespace</span></div>
112-
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
113-
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#endif</span></div>
107+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#endif</span></div>
114108
<div class="ttc" id="aclassmidi_1_1_midi_action_html"><div class="ttname"><a href="classmidi_1_1_midi_action.html">midi::MidiAction</a></div><div class="ttdoc">Abstract class for a MidiAction.</div><div class="ttdef"><b>Definition:</b> MidiAction.h:15</div></div>
115109
<div class="ttc" id="aclassmidi_1_1_midi_common_html"><div class="ttname"><a href="classmidi_1_1_midi_common.html">midi::MidiCommon</a></div><div class="ttdoc">The common methods provided by all Arduino Midi subclasses which can be used to generate Midi message...</div><div class="ttdef"><b>Definition:</b> MidiCommon.h:75</div></div>
116-
<div class="ttc" id="aclassmidi_1_1_midi_ip_server_html"><div class="ttname"><a href="classmidi_1_1_midi_ip_server.html">midi::MidiIpServer</a></div><div class="ttdoc">A simple IP Server which which receives and creates MIDI messages.</div><div class="ttdef"><b>Definition:</b> MidiIpServer.h:21</div></div>
117110
<div class="ttc" id="aclassmidi_1_1_midi_parser_html"><div class="ttname"><a href="classmidi_1_1_midi_parser.html">midi::MidiParser</a></div><div class="ttdoc">A simple Midi Parser which calls the corresponding events. It supports Midi and BLE Midi messages....</div><div class="ttdef"><b>Definition:</b> MidiParser.h:29</div></div>
118-
<div class="ttc" id="aclassmidi_1_1_midi_server_html"><div class="ttname"><a href="classmidi_1_1_midi_server.html">midi::MidiServer</a></div><div class="ttdoc">A simple Serial Server which which receives and creates MIDI messages.</div><div class="ttdef"><b>Definition:</b> MidiServer.h:20</div></div>
119111
<div class="ttc" id="aclassmidi_1_1_midi_stream_in_html"><div class="ttname"><a href="classmidi_1_1_midi_stream_in.html">midi::MidiStreamIn</a></div><div class="ttdoc">Input of Midi Messages from the Aruduino HardwareSerial port. You need to give the default MidiParser...</div><div class="ttdef"><b>Definition:</b> MidiStreamIn.h:27</div></div>
112+
<div class="ttc" id="aclassmidi_1_1_midi_stream_in_html_a0d28ac77f721f80b1a2c6e812b3804a9"><div class="ttname"><a href="classmidi_1_1_midi_stream_in.html#a0d28ac77f721f80b1a2c6e812b3804a9">midi::MidiStreamIn::setup</a></div><div class="ttdeci">void setup(Stream *stream, MidiParser *handler, bool releaseHandler)</div><div class="ttdoc">Call setup when created with empty constructor.</div><div class="ttdef"><b>Definition:</b> MidiStreamIn.cpp:25</div></div>
120113
<div class="ttc" id="aclassmidi_1_1_midi_stream_in_html_aadf64b3479f9b35bf466c49595622131"><div class="ttname"><a href="classmidi_1_1_midi_stream_in.html#aadf64b3479f9b35bf466c49595622131">midi::MidiStreamIn::~MidiStreamIn</a></div><div class="ttdeci">~MidiStreamIn()</div><div class="ttdoc">Destructor.</div><div class="ttdef"><b>Definition:</b> MidiStreamIn.cpp:17</div></div>
121-
<div class="ttc" id="aclassmidi_1_1_midi_udp_server_html"><div class="ttname"><a href="classmidi_1_1_midi_udp_server.html">midi::MidiUdpServer</a></div><div class="ttdoc">A simple UDP Server which receives and creates MIDI messages.</div><div class="ttdef"><b>Definition:</b> MidiUdpServer.h:21</div></div>
122114
</div><!-- fragment --></div><!-- contents -->
123115
<!-- start footer part -->
124116
<hr class="footer"/><address class="footer"><small>

0 commit comments

Comments
 (0)