11//
22// FILE: Multiplex.cpp
33// AUTHOR: Rob Tillaart
4- // VERSION: 0.1 .0
4+ // VERSION: 0.2 .0
55// PURPOSE: Arduino library to multiplex streams
66// DATE: 2021-01-09
77// URL: https://github.com/RobTillaart/Multiplex
88//
99// HISTORY:
1010// 0.1.0 2021-01-09 initial version
11+ // 0.2.0 2021-08-09 See issues #2 and #3
1112
1213
1314#include " Multiplex.h"
@@ -29,6 +30,7 @@ void Multiplex::reset()
2930
3031bool Multiplex::add (Print * stream)
3132{
33+ if (index (stream) != 0xFF ) return false ;
3234 if (_count >= _size) return false ;
3335 _enabled[_count] = true ;
3436 _stream[_count++] = stream;
@@ -53,23 +55,61 @@ size_t Multiplex::write(uint8_t c)
5355 return n;
5456}
5557
58+ size_t Multiplex::write (const uint8_t *buffer, size_t size) {
59+ uint8_t n = 0 ;
60+ for (uint8_t i = 0 ; i < _count; i++)
61+ {
62+ if (_enabled[i])
63+ {
64+ n += _stream[i]->write (buffer, size);
65+ }
66+ }
67+ return n;
68+ }
69+
70+ // private
71+ uint8_t Multiplex::index (Print *stream)
72+ {
73+ uint8_t i = 0 ;
74+ for (; i < _count; i++)
75+ {
76+ if (stream == _stream[i])
77+ {
78+ return i;
79+ }
80+ }
81+ return 0xFF ;
82+ }
5683
5784void Multiplex::enable (uint8_t n)
5885{
59- if (n < _count) _enabled[n] = true ;
86+ if (n < _count && n != 0xFF ) _enabled[n] = true ;
6087}
6188
89+ void Multiplex::enableStream (Print *stream)
90+ {
91+ return enable (index (stream));
92+ }
6293
6394void Multiplex::disable (uint8_t n)
6495{
65- if (n < _count) _enabled[n] = false ;
96+ if (n != 0xFF && n < _count) _enabled[n] = false ;
6697}
6798
99+ void Multiplex::disableStream (Print *stream)
100+ {
101+ return disable (index (stream));
102+ }
68103
69104bool Multiplex::isEnabled (uint8_t n)
70105{
71- if (n >= _count) return false ;
106+ if (n != 0xFF && n >= _count) return false ;
72107 return _enabled[n];
73108}
74109
110+ bool Multiplex::isEnabledStream (Print *stream)
111+ {
112+ return isEnabled (index (stream));
113+ }
114+
75115// -- END OF FILE --
0 commit comments