diff --git a/Doxyfile b/Doxyfile index 04137f37f..af9451ccd 100644 --- a/Doxyfile +++ b/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = SensESP # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.4.2 +PROJECT_NUMBER = 0.4.3 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/docs/analog__input_8cpp.html b/docs/analog__input_8cpp.html index b6d57f3ca..f95bc6d08 100644 --- a/docs/analog__input_8cpp.html +++ b/docs/analog__input_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/analog__input_8cpp_source.html b/docs/analog__input_8cpp_source.html index 51b6bddbb..cda0eb290 100644 --- a/docs/analog__input_8cpp_source.html +++ b/docs/analog__input_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/analog__input_8h.html b/docs/analog__input_8h.html index c4f3aad40..5dc8fadbc 100644 --- a/docs/analog__input_8h.html +++ b/docs/analog__input_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/analog__input_8h_source.html b/docs/analog__input_8h_source.html index 5b5a66600..762c0449a 100644 --- a/docs/analog__input_8h_source.html +++ b/docs/analog__input_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/analogvoltage_8h.html b/docs/analogvoltage_8h.html index c8a755ced..c7cc66a95 100644 --- a/docs/analogvoltage_8h.html +++ b/docs/analogvoltage_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/analogvoltage_8h_source.html b/docs/analogvoltage_8h_source.html index 64881192a..dba0ccb3c 100644 --- a/docs/analogvoltage_8h_source.html +++ b/docs/analogvoltage_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/angle__correction_8cpp.html b/docs/angle__correction_8cpp.html index a5406ad55..b08ce5e14 100644 --- a/docs/angle__correction_8cpp.html +++ b/docs/angle__correction_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/angle__correction_8cpp_source.html b/docs/angle__correction_8cpp_source.html index 19fc6b0ff..6312e4501 100644 --- a/docs/angle__correction_8cpp_source.html +++ b/docs/angle__correction_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/angle__correction_8h.html b/docs/angle__correction_8h.html index e232038f4..12c5baec9 100644 --- a/docs/angle__correction_8h.html +++ b/docs/angle__correction_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/angle__correction_8h_source.html b/docs/angle__correction_8h_source.html index 24e616299..369b3983e 100644 --- a/docs/angle__correction_8h_source.html +++ b/docs/angle__correction_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/annotated.html b/docs/annotated.html index 2236e7386..a0f633665 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -96,59 +96,61 @@  CAnalogInput  CAnalogVoltage  CAngleCorrection - CConfigurable - CCurveInterpolator - CSample - CDallasTemperatureSensors - CDebounce - CDifference - CDigitalInput - CDigitalInputCounter - CDigitalInputValue - CEnable - CENUVector - CFreeMem - CFrequency - CGPGGASentenceParser - CGPGLLSentenceParser - CGPRMCSentenceParser - CGPSInput - CHTTPServer - CIntegerSensor - CIntegrator - CIPAddrDev - CLedBlinker - CLinear - CMovingAverage - CNetworking - CNMEAData - CNMEAParser - CNumericSensor - CObservable - CObservableValue - COneWireTemperature - CPosition - CPSTI030SentenceParser - CPSTI032SentenceParser - CPSTISentenceParser - CSensESPApp - CSensor - CSentenceParser - CSKDelta - CSKEmitter - CSKOutput - CSKOutputTime - CStringSensor - CSymmetricTransform - CSystemHz - CTimeString - CTransform - CTransformBase - CUptime - CValueConsumer - CValueProducer - CVoltageDividerR2 - CWSClient + CChangeFilter + CConfigurable + CCurveInterpolator + CSample + CDallasTemperatureSensors + CDebounce + CDifference + CDigitalInput + CDigitalInputCounter + CDigitalInputValue + CEnable + CENUVector + CFreeMem + CFrequency + CGPGGASentenceParser + CGPGLLSentenceParser + CGPRMCSentenceParser + CGPSInput + CHTTPServer + CIntegerSensor + CIntegrator + CIPAddrDev + CLedBlinker + CLinear + CMedian + CMovingAverage + CNetworking + CNMEAData + CNMEAParser + CNumericSensor + CObservable + CObservableValue + COneWireTemperature + CPosition + CPSTI030SentenceParser + CPSTI032SentenceParser + CPSTISentenceParser + CSensESPApp + CSensor + CSentenceParser + CSKDelta + CSKEmitter + CSKOutput + CSKOutputTime + CStringSensor + CSymmetricTransform + CSystemHz + CTimeString + CTransform + CTransformBase + CUptime + CValueConsumer + CValueProducer + CVoltageDividerR2 + CWSClient diff --git a/docs/annotated_dup.js b/docs/annotated_dup.js index 77f972274..7aa5ccabc 100644 --- a/docs/annotated_dup.js +++ b/docs/annotated_dup.js @@ -3,6 +3,7 @@ var annotated_dup = [ "AnalogInput", "class_analog_input.html", "class_analog_input" ], [ "AnalogVoltage", "class_analog_voltage.html", "class_analog_voltage" ], [ "AngleCorrection", "class_angle_correction.html", "class_angle_correction" ], + [ "ChangeFilter", "class_change_filter.html", "class_change_filter" ], [ "Configurable", "class_configurable.html", "class_configurable" ], [ "CurveInterpolator", "class_curve_interpolator.html", "class_curve_interpolator" ], [ "DallasTemperatureSensors", "class_dallas_temperature_sensors.html", "class_dallas_temperature_sensors" ], @@ -25,6 +26,7 @@ var annotated_dup = [ "IPAddrDev", "class_i_p_addr_dev.html", "class_i_p_addr_dev" ], [ "LedBlinker", "class_led_blinker.html", "class_led_blinker" ], [ "Linear", "class_linear.html", "class_linear" ], + [ "Median", "class_median.html", "class_median" ], [ "MovingAverage", "class_moving_average.html", "class_moving_average" ], [ "Networking", "class_networking.html", "class_networking" ], [ "NMEAData", "struct_n_m_e_a_data.html", "struct_n_m_e_a_data" ], diff --git a/docs/change__filter_8cpp.html b/docs/change__filter_8cpp.html new file mode 100644 index 000000000..196f9a018 --- /dev/null +++ b/docs/change__filter_8cpp.html @@ -0,0 +1,136 @@ + + + + + + + +SensESP: src/transforms/change_filter.cpp File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
change_filter.cpp File Reference
+
+
+
#include "change_filter.h"
+
+Include dependency graph for change_filter.cpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/docs/change__filter_8cpp__incl.map b/docs/change__filter_8cpp__incl.map new file mode 100644 index 000000000..50a3e5c9a --- /dev/null +++ b/docs/change__filter_8cpp__incl.map @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/change__filter_8cpp__incl.md5 b/docs/change__filter_8cpp__incl.md5 new file mode 100644 index 000000000..a75fa2b5e --- /dev/null +++ b/docs/change__filter_8cpp__incl.md5 @@ -0,0 +1 @@ +8fd87f511fb80f8aa2bb6af998fd1bd6 \ No newline at end of file diff --git a/docs/change__filter_8cpp__incl.png b/docs/change__filter_8cpp__incl.png new file mode 100644 index 000000000..3aa3f0711 Binary files /dev/null and b/docs/change__filter_8cpp__incl.png differ diff --git a/docs/change__filter_8cpp_source.html b/docs/change__filter_8cpp_source.html new file mode 100644 index 000000000..c4178d7a7 --- /dev/null +++ b/docs/change__filter_8cpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +SensESP: src/transforms/change_filter.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
change_filter.cpp
+
+
+Go to the documentation of this file.
1 #include "change_filter.h"
2 
3 
4 static float absf(float val) {
5  if (val < 0) {
6  return -val;
7  }
8  else {
9  return val;
10  }
11 }
12 
13 
14 ChangeFilter::ChangeFilter(float minDelta, float maxDelta, int maxSkips, String config_path) :
15  minDelta{minDelta},
16  maxDelta{maxDelta},
17  maxSkips{maxSkips},
18  NumericTransform(config_path) {
19 
20  load_configuration();
21  skips = maxSkips+1;
22 }
23 
24 
25 void ChangeFilter::set_input(float newValue, uint8_t inputChannel) {
26 
27  float delta = absf(newValue - output);
28  if ((delta >= minDelta && delta <= maxDelta) || skips > maxSkips) {
29  output = newValue;
30  skips = 0;
31  notify();
32  }
33  else {
34  skips++;
35  }
36 }
37 
38 
39 JsonObject& ChangeFilter::get_configuration(JsonBuffer& buf) {
40  JsonObject& root = buf.createObject();
41  root["minDelta"] = minDelta;
42  root["maxDelta"] = maxDelta;
43  root["maxSkips"] = maxSkips;
44  return root;
45 }
46 
47 static const char SCHEMA[] PROGMEM = R"({
48  "type": "object",
49  "properties": {
50  "minDelta": { "title": "Minimum delta", "description": "Minimum difference in change of value before forwarding", "type": "number" },
51  "maxDelta": { "title": "Maximum delta", "description": "Maximum difference in change of value to allow forwarding", "type": "number" },
52  "maxSkips": { "title": "Max skip count", "description": "Maximum number of consecutive filtered values before one is allowed through", "type": "number" }
53  }
54  })";
55 
56 
58  return FPSTR(SCHEMA);
59 }
60 
61 
62 bool ChangeFilter::set_configuration(const JsonObject& config) {
63  String expected[] = {"minDelta", "maxDelta", "maxSkips" };
64  for (auto str : expected) {
65  if (!config.containsKey(str)) {
66  return false;
67  }
68  }
69  minDelta = config["minDelta"];
70  maxDelta = config["maxDelta"];
71  maxSkips = config["maxSkips"];
72  skips = maxSkips+1;
73  return true;
74 }
virtual JsonObject & get_configuration(JsonBuffer &buf) override
+ +
virtual String get_config_schema() override
+
void notify()
Definition: observable.cpp:3
+
virtual void set_input(float newValue, uint8_t inputChannel=0) override
+
SymmetricTransform< float > NumericTransform
Definition: transform.h:114
+ + +
ChangeFilter(float minDelta=0.0, float maxDelta=9999.0, int maxSkips=99, String config_path="")
+ +
virtual bool set_configuration(const JsonObject &config) override
+ + +
const char PAGE_index [] PROGMEM
Definition: index.h:2
+
+
+ + + + diff --git a/docs/change__filter_8h.html b/docs/change__filter_8h.html new file mode 100644 index 000000000..1cbcb35d0 --- /dev/null +++ b/docs/change__filter_8h.html @@ -0,0 +1,152 @@ + + + + + + + +SensESP: src/transforms/change_filter.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
change_filter.h File Reference
+
+
+
+Include dependency graph for change_filter.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ChangeFilter
 
+
+
+ + + + diff --git a/docs/change__filter_8h__dep__incl.map b/docs/change__filter_8h__dep__incl.map new file mode 100644 index 000000000..895d9417e --- /dev/null +++ b/docs/change__filter_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/change__filter_8h__dep__incl.md5 b/docs/change__filter_8h__dep__incl.md5 new file mode 100644 index 000000000..877a7bb3f --- /dev/null +++ b/docs/change__filter_8h__dep__incl.md5 @@ -0,0 +1 @@ +e878835fa9bf30d395fbeab7da32661c \ No newline at end of file diff --git a/docs/change__filter_8h__dep__incl.png b/docs/change__filter_8h__dep__incl.png new file mode 100644 index 000000000..e7ab1a552 Binary files /dev/null and b/docs/change__filter_8h__dep__incl.png differ diff --git a/docs/change__filter_8h__incl.map b/docs/change__filter_8h__incl.map new file mode 100644 index 000000000..3e89f007f --- /dev/null +++ b/docs/change__filter_8h__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/change__filter_8h__incl.md5 b/docs/change__filter_8h__incl.md5 new file mode 100644 index 000000000..09dda4e5f --- /dev/null +++ b/docs/change__filter_8h__incl.md5 @@ -0,0 +1 @@ +5262db3d0805331a225bf5f0d5a54a93 \ No newline at end of file diff --git a/docs/change__filter_8h__incl.png b/docs/change__filter_8h__incl.png new file mode 100644 index 000000000..fc7ffd678 Binary files /dev/null and b/docs/change__filter_8h__incl.png differ diff --git a/docs/change__filter_8h_source.html b/docs/change__filter_8h_source.html new file mode 100644 index 000000000..93c5cbb20 --- /dev/null +++ b/docs/change__filter_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +SensESP: src/transforms/change_filter.h Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
change_filter.h
+
+
+Go to the documentation of this file.
1 #ifndef change_filter_H
2 #define change_filter_H
3 
4 #include "transforms/transform.h"
5 
17 
18  public:
19  ChangeFilter(float minDelta = 0.0, float maxDelta = 9999.0, int maxSkips = 99, String config_path="");
20 
21  virtual void set_input(float newValue, uint8_t inputChannel = 0) override;
22 
23  virtual JsonObject& get_configuration(JsonBuffer& buf) override;
24  virtual bool set_configuration(const JsonObject& config) override;
25  virtual String get_config_schema() override;
26 
27  protected:
28  float minDelta;
29  float maxDelta;
30  int maxSkips;
31  int skips;
32 };
33 
34 
35 #endif
+
virtual JsonObject & get_configuration(JsonBuffer &buf) override
+ +
virtual String get_config_schema() override
+
virtual void set_input(float newValue, uint8_t inputChannel=0) override
+ + +
ChangeFilter(float minDelta=0.0, float maxDelta=9999.0, int maxSkips=99, String config_path="")
+ + + +
const String config_path
Definition: configurable.h:29
+
virtual bool set_configuration(const JsonObject &config) override
+
+
+ + + + diff --git a/docs/class_analog_input-members.html b/docs/class_analog_input-members.html index 21d883810..a0ee1b007 100644 --- a/docs/class_analog_input-members.html +++ b/docs/class_analog_input-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -109,7 +109,7 @@ get_configuration(JsonBuffer &buf)Configurablevirtual get_sensors()Sensorinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline load_configuration()Configurableprotectedvirtual notify()Observable NumericSensor(String config_path="")NumericSensor diff --git a/docs/class_analog_input.html b/docs/class_analog_input.html index 619661275..bf2990b16 100644 --- a/docs/class_analog_input.html +++ b/docs/class_analog_input.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -146,8 +146,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueProducer< float > diff --git a/docs/class_analog_voltage-members.html b/docs/class_analog_voltage-members.html index da40765f9..a7b99a942 100644 --- a/docs/class_analog_voltage-members.html +++ b/docs/class_analog_voltage-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -111,7 +111,7 @@ get_configuration(JsonBuffer &buf) overrideLinearvirtual get_transforms()TransformBaseinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline Linear(float k, float c, String config_path="")Linear load_configuration()Configurableprotectedvirtual notify()Observable diff --git a/docs/class_analog_voltage.html b/docs/class_analog_voltage.html index 71310be64..6eb64752a 100644 --- a/docs/class_analog_voltage.html +++ b/docs/class_analog_voltage.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -154,8 +154,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueConsumer< float > diff --git a/docs/class_angle_correction-members.html b/docs/class_angle_correction-members.html index 85b2638fc..5fb049726 100644 --- a/docs/class_angle_correction-members.html +++ b/docs/class_angle_correction-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -111,7 +111,7 @@ get_configuration(JsonBuffer &buf) overrideAngleCorrectionvirtual get_transforms()TransformBaseinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline load_configuration()Configurableprotectedvirtual notify()Observable outputValueProducer< float >protected diff --git a/docs/class_angle_correction.html b/docs/class_angle_correction.html index 00e6836c5..02b247428 100644 --- a/docs/class_angle_correction.html +++ b/docs/class_angle_correction.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -150,8 +150,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueConsumer< float > diff --git a/docs/class_change_filter-members.html b/docs/class_change_filter-members.html new file mode 100644 index 000000000..29e2d4a1e --- /dev/null +++ b/docs/class_change_filter-members.html @@ -0,0 +1,142 @@ + + + + + + + +SensESP: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ChangeFilter Member List
+
+
+ +

This is the complete list of members for ChangeFilter, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
attach(std::function< void()> observer)Observable
ChangeFilter(float minDelta=0.0, float maxDelta=9999.0, int maxSkips=99, String config_path="")ChangeFilter
classNameEnableprotected
config_pathConfigurable
Configurable(String config_path)Configurable
connectFrom(ValueProducer< float > *pProducer0, ValueProducer< float > *pProducer1=NULL, ValueProducer< float > *pProducer2=NULL, ValueProducer< float > *pProducer3=NULL, ValueProducer< float > *pProducer4=NULL)Transform< float, float >inline
ValueConsumer< float >::connectFrom(ValueProducer< float > *pProducer, uint8_t inputChannel=0)ValueConsumer< float >inline
connectTo(ValueConsumer< float > *pConsumer, uint8_t inputChannel=0)ValueProducer< float >inline
connectTo(Transform< float, T2 > *pConsumerProducer, uint8_t inputChannel=0)ValueProducer< float >inline
Enable(uint8_t priority=0)Enable
enable()Enableinlinevirtual
enableAll()Enablestatic
get()ValueProducer< float >inlinevirtual
get_config_schema() overrideChangeFiltervirtual
get_configuration(JsonBuffer &buf) overrideChangeFiltervirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
maxDeltaChangeFilterprotected
maxSkipsChangeFilterprotected
minDeltaChangeFilterprotected
notify()Observable
outputValueProducer< float >protected
save_configuration()Configurablevirtual
set_configuration(const JsonObject &config) overrideChangeFiltervirtual
set_input(float newValue, uint8_t inputChannel=0) overrideChangeFiltervirtual
setClassName(const char *newClassName)Enableinline
setPriority(uint8_t priority)Enableinline
skipsChangeFilterprotected
SymmetricTransform(String config_path="")SymmetricTransform< float >inline
Transform(String config_path="")Transform< float, float >inline
TransformBase(String config_path="")TransformBase
ValueProducer()ValueProducer< float >inline
+
+ + + + diff --git a/docs/class_change_filter.html b/docs/class_change_filter.html new file mode 100644 index 000000000..2cec136f3 --- /dev/null +++ b/docs/class_change_filter.html @@ -0,0 +1,508 @@ + + + + + + + +SensESP: ChangeFilter Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
ChangeFilter Class Reference
+
+
+ +

#include <change_filter.h>

+
+Inheritance diagram for ChangeFilter:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ChangeFilter (float minDelta=0.0, float maxDelta=9999.0, int maxSkips=99, String config_path="")
 
virtual void set_input (float newValue, uint8_t inputChannel=0) override
 
virtual JsonObject & get_configuration (JsonBuffer &buf) override
 
virtual bool set_configuration (const JsonObject &config) override
 
virtual String get_config_schema () override
 
- Public Member Functions inherited from SymmetricTransform< float >
 SymmetricTransform (String config_path="")
 
- Public Member Functions inherited from Transform< float, float >
 Transform (String config_path="")
 
Transform< float, float > * connectFrom (ValueProducer< float > *pProducer0, ValueProducer< float > *pProducer1=NULL, ValueProducer< float > *pProducer2=NULL, ValueProducer< float > *pProducer3=NULL, ValueProducer< float > *pProducer4=NULL)
 
- Public Member Functions inherited from TransformBase
 TransformBase (String config_path="")
 
- Public Member Functions inherited from Configurable
 Configurable (String config_path)
 
virtual void save_configuration ()
 
- Public Member Functions inherited from Enable
 Enable (uint8_t priority=0)
 
virtual void enable ()
 
void setClassName (const char *newClassName)
 
virtual const char * getClassName ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< float >
void connectFrom (ValueProducer< float > *pProducer, uint8_t inputChannel=0)
 
- Public Member Functions inherited from ValueProducer< float >
 ValueProducer ()
 
virtual const float & get ()
 
void connectTo (ValueConsumer< float > *pConsumer, uint8_t inputChannel=0)
 
Transform< float, T2 > * connectTo (Transform< float, T2 > *pConsumerProducer, uint8_t inputChannel=0)
 
- Public Member Functions inherited from Observable
void notify ()
 
void attach (std::function< void()> observer)
 
+ + + + + + + + + + + + + + + +

+Protected Attributes

float minDelta
 
float maxDelta
 
int maxSkips
 
int skips
 
- Protected Attributes inherited from Enable
const char * className = "Enable"
 
- Protected Attributes inherited from ValueProducer< float >
float output
 
+ + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from TransformBase
static const std::set< TransformBase * > & get_transforms ()
 
- Static Public Member Functions inherited from Enable
static void enableAll ()
 
- Public Attributes inherited from Configurable
const String config_path
 
- Protected Member Functions inherited from Configurable
virtual void load_configuration ()
 
+

Detailed Description

+

ChangeFilter is a numeric passthrough transform that will only pass that value through if it is "sufficiently different" from the last value passed through. More specifically, the absolute value of the difference between the new value and the last passed value has to be greater than or equal to the specified minDelta, and less than or equal to the specified maxDelta. If the consecutive skip count ever reaches maxSkips, the value will be let through regardless.

+ +

Definition at line 16 of file change_filter.h.

+

Constructor & Destructor Documentation

+ +

◆ ChangeFilter()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ChangeFilter::ChangeFilter (float minDelta = 0.0,
float maxDelta = 9999.0,
int maxSkips = 99,
String config_path = "" 
)
+
+ +

Definition at line 14 of file change_filter.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ get_config_schema()

+ +
+
+ + + + + +
+ + + + + + + +
String ChangeFilter::get_config_schema ()
+
+overridevirtual
+
+

Returns a configuration schema that specifies the key/value pairs that can be expected when calling get_configuration(), or are expected by set_configuration(). The schema will be in JSON Schema format

See also
https://json-schema.org
+ +

Reimplemented from Configurable.

+ +

Definition at line 57 of file change_filter.cpp.

+ +
+
+ +

◆ get_configuration()

+ +
+
+ + + + + +
+ + + + + + + + +
JsonObject & ChangeFilter::get_configuration (JsonBuffer & buf)
+
+overridevirtual
+
+

Returns the current configuration data as a JsonObject. In general, the current state of local member variables are saved to a new object created with JsonBuffer::createObject() and returned.

+ +

Reimplemented from Configurable.

+ +

Definition at line 39 of file change_filter.cpp.

+ +
+
+ +

◆ set_configuration()

+ +
+
+ + + + + +
+ + + + + + + + +
bool ChangeFilter::set_configuration (const JsonObject & config)
+
+overridevirtual
+
+

Sets the current state of local member variables using the data stored in config.

+ +

Reimplemented from Configurable.

+ +

Definition at line 62 of file change_filter.cpp.

+ +
+
+ +

◆ set_input()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ChangeFilter::set_input (float newValue,
uint8_t inputChannel = 0 
)
+
+overridevirtual
+
+

Used to set an input of this consumer. It is usually called automatically by a ValueProducer.

Parameters
+ + + +
newValuethe value of the input
inputChannelConsumers can have one or more inputs feeding them. This parameter allows you to specify which input number the producer is connecting to. For single input consumers, leave the index at zero.
+
+
+ +

Reimplemented from ValueConsumer< float >.

+ +

Definition at line 25 of file change_filter.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ maxDelta

+ +
+
+ + + + + +
+ + + + +
float ChangeFilter::maxDelta
+
+protected
+
+ +

Definition at line 29 of file change_filter.h.

+ +
+
+ +

◆ maxSkips

+ +
+
+ + + + + +
+ + + + +
int ChangeFilter::maxSkips
+
+protected
+
+ +

Definition at line 30 of file change_filter.h.

+ +
+
+ +

◆ minDelta

+ +
+
+ + + + + +
+ + + + +
float ChangeFilter::minDelta
+
+protected
+
+ +

Definition at line 28 of file change_filter.h.

+ +
+
+ +

◆ skips

+ +
+
+ + + + + +
+ + + + +
int ChangeFilter::skips
+
+protected
+
+ +

Definition at line 31 of file change_filter.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/class_change_filter.js b/docs/class_change_filter.js new file mode 100644 index 000000000..a04f0be52 --- /dev/null +++ b/docs/class_change_filter.js @@ -0,0 +1,12 @@ +var class_change_filter = +[ + [ "ChangeFilter", "class_change_filter.html#a6ca0d72e2d4f5afc36ec6c38513cb9c3", null ], + [ "get_config_schema", "class_change_filter.html#a769403176db0e4a619811bbba603d597", null ], + [ "get_configuration", "class_change_filter.html#a6cd0d60d57663d94c1972bf939b40d76", null ], + [ "set_configuration", "class_change_filter.html#a0bbe692080d7ee9a41fcd77a3f581ca9", null ], + [ "set_input", "class_change_filter.html#a592657a8a1c12a9c16dc334aa804865c", null ], + [ "maxDelta", "class_change_filter.html#aa92a8149f304a8627cc8c990dc929c35", null ], + [ "maxSkips", "class_change_filter.html#a48314db9ee86e057f0c771573b302331", null ], + [ "minDelta", "class_change_filter.html#accc1a8a8df0fd7051708b183b8570b5a", null ], + [ "skips", "class_change_filter.html#ae51076f79fdfc36e34b8383a0e13e700", null ] +]; \ No newline at end of file diff --git a/docs/class_change_filter__inherit__graph.map b/docs/class_change_filter__inherit__graph.map new file mode 100644 index 000000000..186858261 --- /dev/null +++ b/docs/class_change_filter__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/class_change_filter__inherit__graph.md5 b/docs/class_change_filter__inherit__graph.md5 new file mode 100644 index 000000000..d84f68d4c --- /dev/null +++ b/docs/class_change_filter__inherit__graph.md5 @@ -0,0 +1 @@ +6934053f5b5c41ddd296e829a8f3eea5 \ No newline at end of file diff --git a/docs/class_change_filter__inherit__graph.png b/docs/class_change_filter__inherit__graph.png new file mode 100644 index 000000000..e29f50ee7 Binary files /dev/null and b/docs/class_change_filter__inherit__graph.png differ diff --git a/docs/class_configurable-members.html b/docs/class_configurable-members.html index 5a6db9751..0574bb8ae 100644 --- a/docs/class_configurable-members.html +++ b/docs/class_configurable-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/class_configurable.html b/docs/class_configurable.html index 42b66e2bf..7857f1ebf 100644 --- a/docs/class_configurable.html +++ b/docs/class_configurable.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -115,33 +115,35 @@ - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + +
[legend]
@@ -224,7 +226,7 @@

Returns a configuration schema that specifies the key/value pairs that can be expected when calling get_configuration(), or are expected by set_configuration(). The schema will be in JSON Schema format

See also
https://json-schema.org
-

Reimplemented in SKOutput< T >, CurveInterpolator, WSClient, OneWireTemperature, VoltageDividerR2, Networking, Frequency, MovingAverage, AngleCorrection, Linear, SKOutputTime, Integrator, and Difference.

+

Reimplemented in SKOutput< T >, CurveInterpolator, WSClient, OneWireTemperature, MovingAverage, VoltageDividerR2, ChangeFilter, Networking, Median, Frequency, AngleCorrection, Linear, SKOutputTime, Integrator, and Difference.

Definition at line 35 of file configurable.cpp.

@@ -264,7 +266,7 @@

Returns the current configuration data as a JsonObject. In general, the current state of local member variables are saved to a new object created with JsonBuffer::createObject() and returned.

-

Reimplemented in SKOutput< T >, CurveInterpolator, WSClient, OneWireTemperature, VoltageDividerR2, Networking, Frequency, MovingAverage, AngleCorrection, Linear, SKOutputTime, Integrator, and Difference.

+

Reimplemented in SKOutput< T >, CurveInterpolator, WSClient, OneWireTemperature, MovingAverage, VoltageDividerR2, ChangeFilter, Networking, Median, Frequency, AngleCorrection, Linear, SKOutputTime, Integrator, and Difference.

Definition at line 23 of file configurable.cpp.

@@ -326,7 +328,7 @@

- + @@ -411,7 +413,7 @@

Sets the current state of local member variables using the data stored in config.

-

Reimplemented in SKOutput< T >, CurveInterpolator, WSClient, OneWireTemperature, VoltageDividerR2, Networking, Frequency, MovingAverage, AngleCorrection, Linear, SKOutputTime, Integrator, and Difference.

+

Reimplemented in SKOutput< T >, CurveInterpolator, WSClient, OneWireTemperature, MovingAverage, VoltageDividerR2, ChangeFilter, Networking, Median, Frequency, AngleCorrection, Linear, SKOutputTime, Integrator, and Difference.

Definition at line 29 of file configurable.cpp.

@@ -422,7 +424,7 @@

- + diff --git a/docs/class_configurable__inherit__graph.map b/docs/class_configurable__inherit__graph.map index 50991df2e..a51cbf6e8 100644 --- a/docs/class_configurable__inherit__graph.map +++ b/docs/class_configurable__inherit__graph.map @@ -3,7 +3,7 @@ - + @@ -11,31 +11,33 @@ - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/docs/class_configurable__inherit__graph.md5 b/docs/class_configurable__inherit__graph.md5 index 51d0b1c03..695774529 100644 --- a/docs/class_configurable__inherit__graph.md5 +++ b/docs/class_configurable__inherit__graph.md5 @@ -1 +1 @@ -60d99818b9c5dc922924e5f703e15f46 \ No newline at end of file +00bf452f1193870ecc892e63503f1f5f \ No newline at end of file diff --git a/docs/class_configurable__inherit__graph.png b/docs/class_configurable__inherit__graph.png index 1baf655a5..7aa85ad5e 100644 Binary files a/docs/class_configurable__inherit__graph.png and b/docs/class_configurable__inherit__graph.png differ diff --git a/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.map b/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.map index ccadfd6d2..c6e182044 100644 --- a/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.map +++ b/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.map @@ -2,7 +2,7 @@ - + diff --git a/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.md5 b/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.md5 index 4435eed7f..17fcb1c81 100644 --- a/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.md5 +++ b/docs/class_configurable_a6e0281fe25cfbdf024bdb05147ffb52b_icgraph.md5 @@ -1 +1 @@ -05294b425b4ee9bfda4d9d80e7c2071f \ No newline at end of file +ace56510a109497a474be9a0f07afe21 \ No newline at end of file diff --git a/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.map b/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.map index 857ab7ac0..48af2a842 100644 --- a/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.map +++ b/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.map @@ -1,6 +1,6 @@ - + diff --git a/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.md5 b/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.md5 index 5545b590d..854a20294 100644 --- a/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.md5 +++ b/docs/class_configurable_ac2ba4044c81acc2fc6bf95cce411f6a4_icgraph.md5 @@ -1 +1 @@ -c793c73bba3e24a6299b487924b2569a \ No newline at end of file +c8b9a249dd834e24ccb34b6cd10d0b96 \ No newline at end of file diff --git a/docs/class_curve_interpolator-members.html b/docs/class_curve_interpolator-members.html index 3d90d22d8..72a643490 100644 --- a/docs/class_curve_interpolator-members.html +++ b/docs/class_curve_interpolator-members.html @@ -30,7 +30,7 @@

@@ -113,7 +113,7 @@ - + diff --git a/docs/class_curve_interpolator.html b/docs/class_curve_interpolator.html index 2125148d4..042f48475 100644 --- a/docs/class_curve_interpolator.html +++ b/docs/class_curve_interpolator.html @@ -30,7 +30,7 @@ @@ -160,8 +160,8 @@ - - + + diff --git a/docs/class_curve_interpolator_1_1_sample-members.html b/docs/class_curve_interpolator_1_1_sample-members.html index 25384c320..fa9c7a4b2 100644 --- a/docs/class_curve_interpolator_1_1_sample-members.html +++ b/docs/class_curve_interpolator_1_1_sample-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_curve_interpolator_1_1_sample.html b/docs/class_curve_interpolator_1_1_sample.html index 1cc6721bb..fd0d41ba2 100644 --- a/docs/class_curve_interpolator_1_1_sample.html +++ b/docs/class_curve_interpolator_1_1_sample.html @@ -30,7 +30,7 @@ diff --git a/docs/class_dallas_temperature_sensors-members.html b/docs/class_dallas_temperature_sensors-members.html index fd6c670f1..52f02dc95 100644 --- a/docs/class_dallas_temperature_sensors-members.html +++ b/docs/class_dallas_temperature_sensors-members.html @@ -30,7 +30,7 @@ @@ -107,7 +107,7 @@ - + diff --git a/docs/class_dallas_temperature_sensors.html b/docs/class_dallas_temperature_sensors.html index 2d2e8b9c3..934d6dad2 100644 --- a/docs/class_dallas_temperature_sensors.html +++ b/docs/class_dallas_temperature_sensors.html @@ -30,7 +30,7 @@ @@ -146,8 +146,8 @@ - - + +
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf) overrideCurveInterpolatorvirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< float >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< float >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_next_address(OWDevAddr *addr)DallasTemperatureSensors
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
register_address(const OWDevAddr &addr)DallasTemperatureSensors
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
diff --git a/docs/class_debounce-members.html b/docs/class_debounce-members.html index d4f0037e7..8492757c6 100644 --- a/docs/class_debounce-members.html +++ b/docs/class_debounce-members.html @@ -30,7 +30,7 @@ @@ -111,7 +111,7 @@ - + diff --git a/docs/class_debounce.html b/docs/class_debounce.html index 9afabaf29..6f816c94b 100644 --- a/docs/class_debounce.html +++ b/docs/class_debounce.html @@ -30,7 +30,7 @@ @@ -151,8 +151,8 @@ - - + + diff --git a/docs/class_difference-members.html b/docs/class_difference-members.html index 6d539df3c..0d2398b95 100644 --- a/docs/class_difference-members.html +++ b/docs/class_difference-members.html @@ -30,7 +30,7 @@ @@ -111,7 +111,7 @@ - + diff --git a/docs/class_difference.html b/docs/class_difference.html index 805eacb55..3116a40ca 100644 --- a/docs/class_difference.html +++ b/docs/class_difference.html @@ -30,7 +30,7 @@ @@ -150,8 +150,8 @@ - - + + diff --git a/docs/class_digital_input-members.html b/docs/class_digital_input-members.html index cb2d28539..79c5504a5 100644 --- a/docs/class_digital_input-members.html +++ b/docs/class_digital_input-members.html @@ -30,7 +30,7 @@ @@ -106,7 +106,7 @@ - + diff --git a/docs/class_digital_input.html b/docs/class_digital_input.html index e1c25590e..628b11b03 100644 --- a/docs/class_digital_input.html +++ b/docs/class_digital_input.html @@ -30,7 +30,7 @@ @@ -144,8 +144,8 @@ - - + +
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
lastTimeDebounceprotected
load_configuration()Configurableprotectedvirtual
msMinDelayDebounceprotected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< T >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf) overrideDifferencevirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< float >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< float >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
interrupt_typeDigitalInputprotected
load_configuration()Configurableprotectedvirtual
notify()Observable
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
diff --git a/docs/class_digital_input_counter-members.html b/docs/class_digital_input_counter-members.html index a59d9b022..4c0bfc0dd 100644 --- a/docs/class_digital_input_counter-members.html +++ b/docs/class_digital_input_counter-members.html @@ -30,7 +30,7 @@ @@ -106,11 +106,9 @@ - - - + @@ -118,10 +116,9 @@ - - - - + + +
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
Enable(uint8_t priority=0)Enable
enableAll()Enablestatic
get()ValueProducer< int >inlinevirtual
get_config_schema()Configurablevirtual
get_configuration(JsonBuffer &buf)Configurablevirtual
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
interrupt_typeDigitalInputprotected
load_configuration()Configurableprotectedvirtual
notify()Observable
pinDigitalInputprotected
save_configuration()Configurablevirtual
Sensor(String config_path="")Sensor
set_configuration(const JsonObject &config)Configurablevirtual
setClassName(const char *newClassName)Enableinline
setPriority(uint8_t priority)Enableinline
ValueProducer()ValueProducer< int >inline
setClassName(const char *newClassName)Enableinline
setPriority(uint8_t priority)Enableinline
ValueProducer()ValueProducer< int >inline
diff --git a/docs/class_digital_input_counter.html b/docs/class_digital_input_counter.html index 15b1ad713..b6c7a1de3 100644 --- a/docs/class_digital_input_counter.html +++ b/docs/class_digital_input_counter.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -131,12 +131,6 @@ - Public Member Functions inherited from
Configurable  Configurable (String config_path)   -virtual JsonObject & get_configuration (JsonBuffer &buf) -  -virtual bool set_configuration (const JsonObject &config) -  -virtual String get_config_schema () -  virtual void save_configuration ()   - Public Member Functions inherited from Enable @@ -146,8 +140,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueProducer< int > diff --git a/docs/class_digital_input_value-members.html b/docs/class_digital_input_value-members.html index 19701e50a..439c8d834 100644 --- a/docs/class_digital_input_value-members.html +++ b/docs/class_digital_input_value-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -110,7 +110,7 @@ get_configuration(JsonBuffer &buf)Configurablevirtual get_sensors()Sensorinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline interrupt_typeDigitalInputprotected load_configuration()Configurableprotectedvirtual notify()Observable diff --git a/docs/class_digital_input_value.html b/docs/class_digital_input_value.html index 3e545edca..62d8627fd 100644 --- a/docs/class_digital_input_value.html +++ b/docs/class_digital_input_value.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -146,8 +146,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueProducer< T > diff --git a/docs/class_enable-members.html b/docs/class_enable-members.html index 10e577f52..97fe57cdf 100644 --- a/docs/class_enable-members.html +++ b/docs/class_enable-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -99,7 +99,7 @@ enable()Enableinlinevirtual enableAll()Enablestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline operator<(const Enable &lhs, const Enable &rhs)Enablefriend setClassName(const char *newClassName)Enableinline setPriority(uint8_t priority)Enableinline diff --git a/docs/class_enable.html b/docs/class_enable.html index fc3175b60..0a9652b0c 100644 --- a/docs/class_enable.html +++ b/docs/class_enable.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -104,43 +104,45 @@
Inheritance graph
- + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
@@ -154,8 +156,8 @@ - - + +
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
@@ -224,7 +226,7 @@

Called during the initialization process. Override this method to add runtime initialization code to your class

-

Reimplemented in IPAddrDev, DigitalInputCounter, OneWireTemperature, Uptime, DigitalInputValue, FreeMem, DallasTemperatureSensors, GPSInput, Frequency, AnalogInput, Integrator, and SystemHz.

+

Reimplemented in IPAddrDev, DigitalInputCounter, OneWireTemperature, Uptime, DigitalInputValue, FreeMem, DallasTemperatureSensors, Frequency, GPSInput, AnalogInput, Integrator, and SystemHz.

Definition at line 24 of file enable.h.

@@ -295,8 +297,8 @@

-

◆ getEnablePriority()

+ +

◆ getEnablePriority()

@@ -305,7 +307,7 @@

- + diff --git a/docs/class_enable.js b/docs/class_enable.js index 12edc94bd..ef1d3c650 100644 --- a/docs/class_enable.js +++ b/docs/class_enable.js @@ -3,7 +3,7 @@ var class_enable = [ "Enable", "class_enable.html#a62d0a37863086502e168bfa8ab94ebc0", null ], [ "enable", "class_enable.html#a62ea021bf8d986150be346977a8eede3", null ], [ "getClassName", "class_enable.html#af924d33e6ccb0a065af78f264997299f", null ], - [ "getEnablePriority", "class_enable.html#a12a65d666c56d9909c2a1958b7cfda40", null ], + [ "getEnablePriority", "class_enable.html#a38bebd90f45effcd9fa2781cc43f0d34", null ], [ "setClassName", "class_enable.html#a5c8fbdba606732e028a6bf194a3e2529", null ], [ "setPriority", "class_enable.html#ab4ca14d496a85788896df6c78143994c", null ], [ "operator<", "class_enable.html#a5e6385aea4a61b890368ce0b411f690c", null ], diff --git a/docs/class_enable__inherit__graph.map b/docs/class_enable__inherit__graph.map index 336485051..74d8c9457 100644 --- a/docs/class_enable__inherit__graph.map +++ b/docs/class_enable__inherit__graph.map @@ -1,39 +1,41 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/class_enable__inherit__graph.md5 b/docs/class_enable__inherit__graph.md5 index b1603e167..3681c41af 100644 --- a/docs/class_enable__inherit__graph.md5 +++ b/docs/class_enable__inherit__graph.md5 @@ -1 +1 @@ -6b156c2197b97990ec23b9993c35f02f \ No newline at end of file +f26f8cd42fe977d3ba51add860646cd4 \ No newline at end of file diff --git a/docs/class_enable__inherit__graph.png b/docs/class_enable__inherit__graph.png index 3a4c75004..573ba0d3d 100644 Binary files a/docs/class_enable__inherit__graph.png and b/docs/class_enable__inherit__graph.png differ diff --git a/docs/class_free_mem-members.html b/docs/class_free_mem-members.html index 4a9f89ab8..076f8e519 100644 --- a/docs/class_free_mem-members.html +++ b/docs/class_free_mem-members.html @@ -30,7 +30,7 @@ @@ -110,7 +110,7 @@ - + diff --git a/docs/class_free_mem.html b/docs/class_free_mem.html index e66820dac..b2d906a02 100644 --- a/docs/class_free_mem.html +++ b/docs/class_free_mem.html @@ -30,7 +30,7 @@ @@ -144,8 +144,8 @@ - - + + diff --git a/docs/class_frequency-members.html b/docs/class_frequency-members.html index 37e1c6331..66fd4b13c 100644 --- a/docs/class_frequency-members.html +++ b/docs/class_frequency-members.html @@ -30,7 +30,7 @@ @@ -111,7 +111,7 @@ - + diff --git a/docs/class_frequency.html b/docs/class_frequency.html index 6827ad7e0..cb420cd47 100644 --- a/docs/class_frequency.html +++ b/docs/class_frequency.html @@ -30,7 +30,7 @@ @@ -146,8 +146,8 @@ - - + + diff --git a/docs/class_g_p_g_g_a_sentence_parser-members.html b/docs/class_g_p_g_g_a_sentence_parser-members.html index fce1973ef..acd36be1f 100644 --- a/docs/class_g_p_g_g_a_sentence_parser-members.html +++ b/docs/class_g_p_g_g_a_sentence_parser-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_g_p_g_g_a_sentence_parser.html b/docs/class_g_p_g_g_a_sentence_parser.html index f19ab4615..dcb8c53d5 100644 --- a/docs/class_g_p_g_g_a_sentence_parser.html +++ b/docs/class_g_p_g_g_a_sentence_parser.html @@ -30,7 +30,7 @@ @@ -201,13 +201,13 @@

SentenceParser.

-

Definition at line 181 of file nmea_parser.cpp.

+

Definition at line 189 of file nmea_parser.cpp.

Here is the call graph for this function:
- + @@ -215,8 +215,9 @@

- - + + +

diff --git a/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.map b/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.map index 205133464..6d2eccd0f 100644 --- a/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.map +++ b/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.map @@ -1,5 +1,5 @@ - + @@ -7,6 +7,7 @@ - - + + + diff --git a/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.md5 b/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.md5 index 832c2080f..df977f6d7 100644 --- a/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.md5 +++ b/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.md5 @@ -1 +1 @@ -96a298a28c22de92cf9bf8e90883e385 \ No newline at end of file +cebfee1db2cb4cf3d7a41355d6e900c0 \ No newline at end of file diff --git a/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.png b/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.png index 28ba90d54..95c807b20 100644 Binary files a/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.png and b/docs/class_g_p_g_g_a_sentence_parser_a6bce986c2fb84af7c54477cd7d43f1b1_cgraph.png differ diff --git a/docs/class_g_p_g_g_a_sentence_parser_ac70d60b587cd0e48479c397bb30983a3_icgraph.md5 b/docs/class_g_p_g_g_a_sentence_parser_ac70d60b587cd0e48479c397bb30983a3_icgraph.md5 index 1f327d2c0..1f4cba7fe 100644 --- a/docs/class_g_p_g_g_a_sentence_parser_ac70d60b587cd0e48479c397bb30983a3_icgraph.md5 +++ b/docs/class_g_p_g_g_a_sentence_parser_ac70d60b587cd0e48479c397bb30983a3_icgraph.md5 @@ -1 +1 @@ -4e9922e74cf9f41ffcfe457000f98eed \ No newline at end of file +8a0123cc777ea83ff86d3601eab258e6 \ No newline at end of file diff --git a/docs/class_g_p_g_l_l_sentence_parser-members.html b/docs/class_g_p_g_l_l_sentence_parser-members.html index 6b9dde8b6..6bb246d8f 100644 --- a/docs/class_g_p_g_l_l_sentence_parser-members.html +++ b/docs/class_g_p_g_l_l_sentence_parser-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_g_p_g_l_l_sentence_parser.html b/docs/class_g_p_g_l_l_sentence_parser.html index 630ec5f58..a3545ab87 100644 --- a/docs/class_g_p_g_l_l_sentence_parser.html +++ b/docs/class_g_p_g_l_l_sentence_parser.html @@ -30,7 +30,7 @@ @@ -201,18 +201,19 @@

SentenceParser.

-

Definition at line 256 of file nmea_parser.cpp.

+

Definition at line 264 of file nmea_parser.cpp.

Here is the call graph for this function:
- + - - + + +
diff --git a/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.map b/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.map index ac9d404c1..8a3e792d4 100644 --- a/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.map +++ b/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.map @@ -1,8 +1,9 @@ - + - - + + + diff --git a/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.md5 b/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.md5 index 83728fb7d..90e427845 100644 --- a/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.md5 +++ b/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.md5 @@ -1 +1 @@ -9166168d02fbfeca0731111ee1185c91 \ No newline at end of file +d4d91bdd3d8fb0806d9e4875b145cbc0 \ No newline at end of file diff --git a/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.png b/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.png index 2ef650321..2d1b68cda 100644 Binary files a/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.png and b/docs/class_g_p_g_l_l_sentence_parser_ab1583e721b24183fcc59f2b2826b8c52_cgraph.png differ diff --git a/docs/class_g_p_g_l_l_sentence_parser_acbee347184ae22343a9af2515ae57c98_icgraph.md5 b/docs/class_g_p_g_l_l_sentence_parser_acbee347184ae22343a9af2515ae57c98_icgraph.md5 index 8414d1ddc..47d75724c 100644 --- a/docs/class_g_p_g_l_l_sentence_parser_acbee347184ae22343a9af2515ae57c98_icgraph.md5 +++ b/docs/class_g_p_g_l_l_sentence_parser_acbee347184ae22343a9af2515ae57c98_icgraph.md5 @@ -1 +1 @@ -a5b819ce8cbd1918b34192091b0d9928 \ No newline at end of file +4665e693dbb5d4db4c6099dd95af61f0 \ No newline at end of file diff --git a/docs/class_g_p_r_m_c_sentence_parser-members.html b/docs/class_g_p_r_m_c_sentence_parser-members.html index 5f493428c..cd06d4a82 100644 --- a/docs/class_g_p_r_m_c_sentence_parser-members.html +++ b/docs/class_g_p_r_m_c_sentence_parser-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_g_p_r_m_c_sentence_parser.html b/docs/class_g_p_r_m_c_sentence_parser.html index d903dfd57..7c8a8636e 100644 --- a/docs/class_g_p_r_m_c_sentence_parser.html +++ b/docs/class_g_p_r_m_c_sentence_parser.html @@ -30,7 +30,7 @@ @@ -201,13 +201,13 @@

SentenceParser.

-

Definition at line 283 of file nmea_parser.cpp.

+

Definition at line 291 of file nmea_parser.cpp.

Here is the call graph for this function:
- + @@ -216,8 +216,9 @@

- - + + +

diff --git a/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.map b/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.map index a80e2ea4c..45fa5206d 100644 --- a/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.map +++ b/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.map @@ -1,5 +1,5 @@ - + @@ -8,6 +8,7 @@ - - + + + diff --git a/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.md5 b/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.md5 index 7be9f8466..3d688827c 100644 --- a/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.md5 +++ b/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.md5 @@ -1 +1 @@ -1571d36ea4a1d824a64bb7e5afd245f9 \ No newline at end of file +6690ca66a62622550b53ec3587d8163b \ No newline at end of file diff --git a/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.png b/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.png index aeff42f4d..12f2f7978 100644 Binary files a/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.png and b/docs/class_g_p_r_m_c_sentence_parser_a67589bcbddabbe32aac949c3ca9f4a75_cgraph.png differ diff --git a/docs/class_g_p_r_m_c_sentence_parser_a75afdae2ce4e8a27676d86ef2f5cbf9f_icgraph.md5 b/docs/class_g_p_r_m_c_sentence_parser_a75afdae2ce4e8a27676d86ef2f5cbf9f_icgraph.md5 index ad85fe64f..d73a41d11 100644 --- a/docs/class_g_p_r_m_c_sentence_parser_a75afdae2ce4e8a27676d86ef2f5cbf9f_icgraph.md5 +++ b/docs/class_g_p_r_m_c_sentence_parser_a75afdae2ce4e8a27676d86ef2f5cbf9f_icgraph.md5 @@ -1 +1 @@ -7753813f9b04bd0d6e767ff66fbd12c5 \ No newline at end of file +c1e54e6b78280032e92bce45ab708fc0 \ No newline at end of file diff --git a/docs/class_g_p_s_input-members.html b/docs/class_g_p_s_input-members.html index 9465e69be..595772c6e 100644 --- a/docs/class_g_p_s_input-members.html +++ b/docs/class_g_p_s_input-members.html @@ -30,7 +30,7 @@

@@ -105,8 +105,8 @@ - - + + diff --git a/docs/class_g_p_s_input.html b/docs/class_g_p_s_input.html index 31954c6a6..be9a144b6 100644 --- a/docs/class_g_p_s_input.html +++ b/docs/class_g_p_s_input.html @@ -30,7 +30,7 @@ @@ -112,8 +112,8 @@
const int8_t Enable::getEnablePriority const uint8_t Enable::getEnablePriority ( )
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_sensors()Sensorinlinestatic
get_value_name()FreeMeminline
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< uint32_t >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueProducer< uint32_t >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf) overrideFrequencyvirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< float >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< int >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
GPSInput(int reset_pin, String config_path="")GPSInput
getEnablePriority()Enableinline
GPSInput(Stream *rx_stream, String config_path="")GPSInput
load_configuration()Configurableprotectedvirtual
nmea_dataGPSInput
notify()Observable
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
- - + + @@ -142,8 +142,8 @@ - - + +

Public Member Functions

 GPSInput (int reset_pin, String config_path="")
 
 GPSInput (Stream *rx_stream, String config_path="")
 
virtual void enable () override final
 
- Public Member Functions inherited from Sensor
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
@@ -172,10 +172,10 @@

Detailed Description

-

Definition at line 12 of file gps.h.

+

Definition at line 10 of file gps.h.

Constructor & Destructor Documentation

- -

◆ GPSInput()

+ +

◆ GPSInput()

@@ -183,8 +183,8 @@

GPSInput::GPSInput ( - int  - reset_pin, + Stream *  + rx_stream, @@ -204,8 +204,8 @@

Here is the call graph for this function:

-
- +
+ @@ -250,7 +250,7 @@

- +
@@ -269,7 +269,7 @@

-

Definition at line 16 of file gps.h.

+

Definition at line 14 of file gps.h.

diff --git a/docs/class_g_p_s_input.js b/docs/class_g_p_s_input.js index f07cb53ba..6255143ca 100644 --- a/docs/class_g_p_s_input.js +++ b/docs/class_g_p_s_input.js @@ -1,6 +1,6 @@ var class_g_p_s_input = [ - [ "GPSInput", "class_g_p_s_input.html#ab763769a97cf52221aeb9e63d3004737", null ], + [ "GPSInput", "class_g_p_s_input.html#ac434000c2641c7ef06badb2d51f79520", null ], [ "enable", "class_g_p_s_input.html#af94497b920d346ed5ccad18bd4dbfd9c", null ], [ "nmea_data", "class_g_p_s_input.html#ae31d915c7701418b950dcbba4f87f72a", null ] ]; \ No newline at end of file diff --git a/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.map b/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.map new file mode 100644 index 000000000..776cfe676 --- /dev/null +++ b/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.md5 b/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.md5 new file mode 100644 index 000000000..106c1aebb --- /dev/null +++ b/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.md5 @@ -0,0 +1 @@ +4e1b62300ef17e66e05831cc5e82614e \ No newline at end of file diff --git a/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.png b/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.png new file mode 100644 index 000000000..3ad1635e5 Binary files /dev/null and b/docs/class_g_p_s_input_ac434000c2641c7ef06badb2d51f79520_cgraph.png differ diff --git a/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.map b/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.map index fc6956fd6..9e7d01fe2 100644 --- a/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.map +++ b/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.map @@ -1,4 +1,4 @@ - + diff --git a/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.md5 b/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.md5 index 1266a8bfa..904394ca2 100644 --- a/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.md5 +++ b/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.md5 @@ -1 +1 @@ -bebdad9b794a6baefa87712ac022e59b \ No newline at end of file +79d29cd99af93ab1d1f0c26ea9c082e5 \ No newline at end of file diff --git a/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.png b/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.png index ae573e4b0..d23772084 100644 Binary files a/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.png and b/docs/class_g_p_s_input_af94497b920d346ed5ccad18bd4dbfd9c_cgraph.png differ diff --git a/docs/class_h_t_t_p_server-members.html b/docs/class_h_t_t_p_server-members.html index 9adeec407..bc84c4a8d 100644 --- a/docs/class_h_t_t_p_server-members.html +++ b/docs/class_h_t_t_p_server-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/class_h_t_t_p_server.html b/docs/class_h_t_t_p_server.html index 92ef4ee07..1dd4af1b5 100644 --- a/docs/class_h_t_t_p_server.html +++ b/docs/class_h_t_t_p_server.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -236,7 +236,7 @@

-

Definition at line 198 of file http.cpp.

+

Definition at line 206 of file http.cpp.

@@ -256,7 +256,7 @@

-

Definition at line 203 of file http.cpp.

+

Definition at line 211 of file http.cpp.

Here is the caller graph for this function:
@@ -285,7 +285,7 @@

-

Definition at line 209 of file http.cpp.

+

Definition at line 217 of file http.cpp.

Here is the caller graph for this function:
@@ -314,7 +314,7 @@

-

Definition at line 215 of file http.cpp.

+

Definition at line 223 of file http.cpp.

Here is the caller graph for this function:
diff --git a/docs/class_i_p_addr_dev-members.html b/docs/class_i_p_addr_dev-members.html index 8da203b00..1ba4ace67 100644 --- a/docs/class_i_p_addr_dev-members.html +++ b/docs/class_i_p_addr_dev-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -109,7 +109,7 @@ get_sensors()Sensorinlinestatic get_value_name()IPAddrDevinline getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline IPAddrDev()IPAddrDevinline load_configuration()Configurableprotectedvirtual notify()Observable diff --git a/docs/class_i_p_addr_dev.html b/docs/class_i_p_addr_dev.html index 1db1d42b1..4084d05bc 100644 --- a/docs/class_i_p_addr_dev.html +++ b/docs/class_i_p_addr_dev.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -148,8 +148,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueProducer< String > diff --git a/docs/class_integer_sensor-members.html b/docs/class_integer_sensor-members.html index ce81bce53..d6866fcfb 100644 --- a/docs/class_integer_sensor-members.html +++ b/docs/class_integer_sensor-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -108,7 +108,7 @@ get_configuration(JsonBuffer &buf)Configurablevirtual get_sensors()Sensorinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline IntegerSensor(String config_path="")IntegerSensor load_configuration()Configurableprotectedvirtual notify()Observable diff --git a/docs/class_integer_sensor.html b/docs/class_integer_sensor.html index bc496c419..b3de0eedb 100644 --- a/docs/class_integer_sensor.html +++ b/docs/class_integer_sensor.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -142,8 +142,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueProducer< int > diff --git a/docs/class_integrator-members.html b/docs/class_integrator-members.html index 45e80df85..6342a82eb 100644 --- a/docs/class_integrator-members.html +++ b/docs/class_integrator-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -110,7 +110,7 @@ get_configuration(JsonBuffer &buf) override finalIntegratorvirtual get_transforms()TransformBaseinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline Integrator(float k=1, float value=0, String config_path="")Integrator load_configuration()Configurableprotectedvirtual notify()Observable diff --git a/docs/class_integrator.html b/docs/class_integrator.html index 9937b4f83..b0a4ce48a 100644 --- a/docs/class_integrator.html +++ b/docs/class_integrator.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -150,8 +150,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueConsumer< float > diff --git a/docs/class_led_blinker-members.html b/docs/class_led_blinker-members.html index 8780a11e7..816eaf8dc 100644 --- a/docs/class_led_blinker-members.html +++ b/docs/class_led_blinker-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/class_led_blinker.html b/docs/class_led_blinker.html index 4ccdd069b..34a5f89e1 100644 --- a/docs/class_led_blinker.html +++ b/docs/class_led_blinker.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/class_linear-members.html b/docs/class_linear-members.html index cf1beb428..6722fc902 100644 --- a/docs/class_linear-members.html +++ b/docs/class_linear-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -110,7 +110,7 @@ get_configuration(JsonBuffer &buf) overrideLinearvirtual get_transforms()TransformBaseinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline Linear(float k, float c, String config_path="")Linear load_configuration()Configurableprotectedvirtual notify()Observable diff --git a/docs/class_linear.html b/docs/class_linear.html index 620cf3f28..75358dc76 100644 --- a/docs/class_linear.html +++ b/docs/class_linear.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -151,8 +151,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueConsumer< float > diff --git a/docs/class_median-members.html b/docs/class_median-members.html new file mode 100644 index 000000000..97769b2be --- /dev/null +++ b/docs/class_median-members.html @@ -0,0 +1,138 @@ + + + + + + + +SensESP: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Median Member List
+
+
+ +

This is the complete list of members for Median, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
attach(std::function< void()> observer)Observable
classNameEnableprotected
config_pathConfigurable
Configurable(String config_path)Configurable
connectFrom(ValueProducer< float > *pProducer0, ValueProducer< float > *pProducer1=NULL, ValueProducer< float > *pProducer2=NULL, ValueProducer< float > *pProducer3=NULL, ValueProducer< float > *pProducer4=NULL)Transform< float, float >inline
ValueConsumer< float >::connectFrom(ValueProducer< float > *pProducer, uint8_t inputChannel=0)ValueConsumer< float >inline
connectTo(ValueConsumer< float > *pConsumer, uint8_t inputChannel=0)ValueProducer< float >inline
connectTo(Transform< float, T2 > *pConsumerProducer, uint8_t inputChannel=0)ValueProducer< float >inline
Enable(uint8_t priority=0)Enable
enable()Enableinlinevirtual
enableAll()Enablestatic
get()ValueProducer< float >inlinevirtual
get_config_schema() overrideMedianvirtual
get_configuration(JsonBuffer &buf) overrideMedianvirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
Median(unsigned int sampleSize=10, String config_path="")Median
notify()Observable
outputValueProducer< float >protected
save_configuration()Configurablevirtual
set_configuration(const JsonObject &config) overrideMedianvirtual
set_input(float input, uint8_t inputChannel=0) overrideMedianvirtual
setClassName(const char *newClassName)Enableinline
setPriority(uint8_t priority)Enableinline
SymmetricTransform(String config_path="")SymmetricTransform< float >inline
Transform(String config_path="")Transform< float, float >inline
TransformBase(String config_path="")TransformBase
ValueProducer()ValueProducer< float >inline
+
+ + + + diff --git a/docs/class_median.html b/docs/class_median.html new file mode 100644 index 000000000..37285abc1 --- /dev/null +++ b/docs/class_median.html @@ -0,0 +1,396 @@ + + + + + + + +SensESP: Median Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Median Class Reference
+
+
+ +

#include <median.h>

+
+Inheritance diagram for Median:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Median (unsigned int sampleSize=10, String config_path="")
 
virtual void set_input (float input, uint8_t inputChannel=0) override
 
virtual JsonObject & get_configuration (JsonBuffer &buf) override
 
virtual bool set_configuration (const JsonObject &config) override
 
virtual String get_config_schema () override
 
- Public Member Functions inherited from SymmetricTransform< float >
 SymmetricTransform (String config_path="")
 
- Public Member Functions inherited from Transform< float, float >
 Transform (String config_path="")
 
Transform< float, float > * connectFrom (ValueProducer< float > *pProducer0, ValueProducer< float > *pProducer1=NULL, ValueProducer< float > *pProducer2=NULL, ValueProducer< float > *pProducer3=NULL, ValueProducer< float > *pProducer4=NULL)
 
- Public Member Functions inherited from TransformBase
 TransformBase (String config_path="")
 
- Public Member Functions inherited from Configurable
 Configurable (String config_path)
 
virtual void save_configuration ()
 
- Public Member Functions inherited from Enable
 Enable (uint8_t priority=0)
 
virtual void enable ()
 
void setClassName (const char *newClassName)
 
virtual const char * getClassName ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< float >
void connectFrom (ValueProducer< float > *pProducer, uint8_t inputChannel=0)
 
- Public Member Functions inherited from ValueProducer< float >
 ValueProducer ()
 
virtual const float & get ()
 
void connectTo (ValueConsumer< float > *pConsumer, uint8_t inputChannel=0)
 
Transform< float, T2 > * connectTo (Transform< float, T2 > *pConsumerProducer, uint8_t inputChannel=0)
 
- Public Member Functions inherited from Observable
void notify ()
 
void attach (std::function< void()> observer)
 
+ + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from TransformBase
static const std::set< TransformBase * > & get_transforms ()
 
- Static Public Member Functions inherited from Enable
static void enableAll ()
 
- Public Attributes inherited from Configurable
const String config_path
 
- Protected Member Functions inherited from Configurable
virtual void load_configuration ()
 
- Protected Attributes inherited from Enable
const char * className = "Enable"
 
- Protected Attributes inherited from ValueProducer< float >
float output
 
+

Detailed Description

+

Median collects a list of input values of size sampleSize and outputs the median value (i.e. element number sampleSize / 2 of a sorted sample list).

+ +

Definition at line 13 of file median.h.

+

Constructor & Destructor Documentation

+ +

◆ Median()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Median::Median (unsigned int sampleSize = 10,
String config_path = "" 
)
+
+ +

Definition at line 4 of file median.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ get_config_schema()

+ +
+
+ + + + + +
+ + + + + + + +
String Median::get_config_schema ()
+
+overridevirtual
+
+

Returns a configuration schema that specifies the key/value pairs that can be expected when calling get_configuration(), or are expected by set_configuration(). The schema will be in JSON Schema format

See also
https://json-schema.org
+ +

Reimplemented from Configurable.

+ +

Definition at line 40 of file median.cpp.

+ +
+
+ +

◆ get_configuration()

+ +
+
+ + + + + +
+ + + + + + + + +
JsonObject & Median::get_configuration (JsonBuffer & buf)
+
+overridevirtual
+
+

Returns the current configuration data as a JsonObject. In general, the current state of local member variables are saved to a new object created with JsonBuffer::createObject() and returned.

+ +

Reimplemented from Configurable.

+ +

Definition at line 27 of file median.cpp.

+ +
+
+ +

◆ set_configuration()

+ +
+
+ + + + + +
+ + + + + + + + +
bool Median::set_configuration (const JsonObject & config)
+
+overridevirtual
+
+

Sets the current state of local member variables using the data stored in config.

+ +

Reimplemented from Configurable.

+ +

Definition at line 45 of file median.cpp.

+ +
+
+ +

◆ set_input()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Median::set_input (float newValue,
uint8_t inputChannel = 0 
)
+
+overridevirtual
+
+

Used to set an input of this consumer. It is usually called automatically by a ValueProducer.

Parameters
+ + + +
newValuethe value of the input
inputChannelConsumers can have one or more inputs feeding them. This parameter allows you to specify which input number the producer is connecting to. For single input consumers, leave the index at zero.
+
+
+ +

Reimplemented from ValueConsumer< float >.

+ +

Definition at line 13 of file median.cpp.

+
+Here is the call graph for this function:
+
+
+ + + + +
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/class_median.js b/docs/class_median.js new file mode 100644 index 000000000..ca772395c --- /dev/null +++ b/docs/class_median.js @@ -0,0 +1,8 @@ +var class_median = +[ + [ "Median", "class_median.html#a986e318f167a85623757c0e247f892fd", null ], + [ "get_config_schema", "class_median.html#aa8515edf3b34ee8439bd77dcfc69a93f", null ], + [ "get_configuration", "class_median.html#a2ce826a6b0cc7e467345671b843d7af2", null ], + [ "set_configuration", "class_median.html#ac06073c22b922aceee9f01ddaccfb54a", null ], + [ "set_input", "class_median.html#a012bc8d16c361b38ab01f56898ead20b", null ] +]; \ No newline at end of file diff --git a/docs/class_median__inherit__graph.map b/docs/class_median__inherit__graph.map new file mode 100644 index 000000000..0a0639383 --- /dev/null +++ b/docs/class_median__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/class_median__inherit__graph.md5 b/docs/class_median__inherit__graph.md5 new file mode 100644 index 000000000..e530f7d89 --- /dev/null +++ b/docs/class_median__inherit__graph.md5 @@ -0,0 +1 @@ +c89cbbac45650e56cdf540a3bb3283c3 \ No newline at end of file diff --git a/docs/class_median__inherit__graph.png b/docs/class_median__inherit__graph.png new file mode 100644 index 000000000..2a0b339f1 Binary files /dev/null and b/docs/class_median__inherit__graph.png differ diff --git a/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.map b/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.map new file mode 100644 index 000000000..0c50d682e --- /dev/null +++ b/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.md5 b/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.md5 new file mode 100644 index 000000000..4dac4b6c4 --- /dev/null +++ b/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.md5 @@ -0,0 +1 @@ +448011ec120887a2046fef12bd9f2953 \ No newline at end of file diff --git a/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.png b/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.png new file mode 100644 index 000000000..e2eb57c41 Binary files /dev/null and b/docs/class_median_a012bc8d16c361b38ab01f56898ead20b_cgraph.png differ diff --git a/docs/class_moving_average-members.html b/docs/class_moving_average-members.html index 3c9f1254f..c1454b782 100644 --- a/docs/class_moving_average-members.html +++ b/docs/class_moving_average-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -110,7 +110,7 @@ get_configuration(JsonBuffer &buf) overrideMovingAveragevirtual get_transforms()TransformBaseinlinestatic getClassName()Enableinlinevirtual - getEnablePriority()Enableinline + getEnablePriority()Enableinline load_configuration()Configurableprotectedvirtual MovingAverage(int n, float k=1., String config_path="")MovingAverage notify()Observable diff --git a/docs/class_moving_average.html b/docs/class_moving_average.html index d35b2a28e..084437b57 100644 --- a/docs/class_moving_average.html +++ b/docs/class_moving_average.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -150,8 +150,8 @@   virtual const char * getClassName ()   -const int8_t getEnablePriority () -  +const uint8_t getEnablePriority () +  void setPriority (uint8_t priority)   - Public Member Functions inherited from ValueConsumer< float > @@ -194,8 +194,9 @@  

Detailed Description

-
-

Definition at line 9 of file moving_average.h.

+

MovingAverage is used to smooth the output of a value (signal) that has frequent variations. For example, the output of a temperature sensor may vary from 180 to 185 several times over a short period, but you just want to see the average of that. MovingAverage outputs the average of the most recent n values. It also incorporates a "scale" factor, in case you want to increase or decrease your final output by a fixed percentage.

+ +

Definition at line 18 of file moving_average.h.

Constructor & Destructor Documentation

◆ MovingAverage()

@@ -228,6 +229,13 @@

+
Parameters
+ + + +
nis the number of most recent values you want to average for your output
themoving average will be multiplied by k before it is output - make it something other than 1. if you need to scale your output up or down by a fixed percentage
+
+

Definition at line 5 of file moving_average.cpp.

@@ -260,7 +268,7 @@

Configurable.

-

Definition at line 39 of file moving_average.cpp.

+

Definition at line 53 of file moving_average.cpp.

@@ -291,7 +299,7 @@

Configurable.

-

Definition at line 23 of file moving_average.cpp.

+

Definition at line 37 of file moving_average.cpp.

@@ -322,7 +330,7 @@

Configurable.

-

Definition at line 44 of file moving_average.cpp.

+

Definition at line 58 of file moving_average.cpp.

@@ -369,7 +377,7 @@

ValueConsumer< float >.

-

Definition at line 14 of file moving_average.cpp.

+

Definition at line 15 of file moving_average.cpp.

Here is the call graph for this function:
diff --git a/docs/class_n_m_e_a_parser-members.html b/docs/class_n_m_e_a_parser-members.html index dfeea6019..495c0bdb2 100644 --- a/docs/class_n_m_e_a_parser-members.html +++ b/docs/class_n_m_e_a_parser-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -95,8 +95,8 @@

This is the complete list of members for NMEAParser, including all inherited members.

- - + +
add_sentence_parser(SentenceParser *parser)NMEAParser
NMEAParser()NMEAParser
read(char c)NMEAParser
handle(char c)NMEAParser
NMEAParser()NMEAParser
diff --git a/docs/class_n_m_e_a_parser.html b/docs/class_n_m_e_a_parser.html index 21059f3db..763176bf1 100644 --- a/docs/class_n_m_e_a_parser.html +++ b/docs/class_n_m_e_a_parser.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -101,8 +101,8 @@ Public Member Functions

 NMEAParser ()   -void read (char c) -  +void handle (char c) +  void add_sentence_parser (SentenceParser *parser)   @@ -125,7 +125,7 @@

-

Definition at line 533 of file nmea_parser.cpp.

+

Definition at line 544 of file nmea_parser.cpp.

@@ -146,7 +146,7 @@

-

Definition at line 538 of file nmea_parser.cpp.

+

Definition at line 549 of file nmea_parser.cpp.

Here is the call graph for this function:
@@ -162,20 +162,20 @@

- + - -

◆ read()

+ +

◆ handle()

- + @@ -184,13 +184,13 @@

-

Definition at line 543 of file nmea_parser.cpp.

+

Definition at line 554 of file nmea_parser.cpp.

Here is the caller graph for this function:
-
- - +
+ +
diff --git a/docs/class_n_m_e_a_parser.js b/docs/class_n_m_e_a_parser.js index e60ad8bce..0124ded63 100644 --- a/docs/class_n_m_e_a_parser.js +++ b/docs/class_n_m_e_a_parser.js @@ -2,5 +2,5 @@ var class_n_m_e_a_parser = [ [ "NMEAParser", "class_n_m_e_a_parser.html#acf7b68ddc8fc466324abede2dd592ad0", null ], [ "add_sentence_parser", "class_n_m_e_a_parser.html#a438b3fd8f8587b55a3785656651f73a6", null ], - [ "read", "class_n_m_e_a_parser.html#a0f7e6a8f7ee6d7f2ab69a0b05341861b", null ] + [ "handle", "class_n_m_e_a_parser.html#a8687b75207c6df0c049721fe5a586913", null ] ]; \ No newline at end of file diff --git a/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.map b/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.map index 8e27f1618..7567742b8 100644 --- a/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.map +++ b/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.map @@ -1,4 +1,4 @@ - + diff --git a/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.md5 b/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.md5 index d74798c54..0af7a7275 100644 --- a/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.md5 +++ b/docs/class_n_m_e_a_parser_a438b3fd8f8587b55a3785656651f73a6_icgraph.md5 @@ -1 +1 @@ -bf9f24351f472c74e2cfdb212e49e193 \ No newline at end of file +f2e5ee7e8e218fe7daac79ea04d08d1c \ No newline at end of file diff --git a/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.map b/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.map new file mode 100644 index 000000000..aa94df842 --- /dev/null +++ b/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.md5 b/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.md5 new file mode 100644 index 000000000..518151cec --- /dev/null +++ b/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.md5 @@ -0,0 +1 @@ +d23e22573d92a5ad1beca1c90d8ff5dd \ No newline at end of file diff --git a/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.png b/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.png new file mode 100644 index 000000000..86915b8ee Binary files /dev/null and b/docs/class_n_m_e_a_parser_a8687b75207c6df0c049721fe5a586913_icgraph.png differ diff --git a/docs/class_networking-members.html b/docs/class_networking-members.html index 77a0d762c..cb189fe89 100644 --- a/docs/class_networking-members.html +++ b/docs/class_networking-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_networking.html b/docs/class_networking.html index 1d475c6d9..a31519e97 100644 --- a/docs/class_networking.html +++ b/docs/class_networking.html @@ -30,7 +30,7 @@ diff --git a/docs/class_numeric_sensor-members.html b/docs/class_numeric_sensor-members.html index 9167ad778..f7f8833af 100644 --- a/docs/class_numeric_sensor-members.html +++ b/docs/class_numeric_sensor-members.html @@ -30,7 +30,7 @@ @@ -108,7 +108,7 @@ - + diff --git a/docs/class_numeric_sensor.html b/docs/class_numeric_sensor.html index e47059018..5410ac354 100644 --- a/docs/class_numeric_sensor.html +++ b/docs/class_numeric_sensor.html @@ -30,7 +30,7 @@ @@ -146,8 +146,8 @@ - - + + diff --git a/docs/class_observable-members.html b/docs/class_observable-members.html index 426f01e0c..6cefb1e7f 100644 --- a/docs/class_observable-members.html +++ b/docs/class_observable-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_observable.html b/docs/class_observable.html index 68abd10a0..eddc2f9cb 100644 --- a/docs/class_observable.html +++ b/docs/class_observable.html @@ -30,7 +30,7 @@ @@ -140,8 +140,8 @@ - - + + @@ -186,12 +186,11 @@

- + - - - - + + + @@ -218,7 +217,7 @@

- + @@ -230,9 +229,10 @@

- - - + + + + diff --git a/docs/class_observable__inherit__graph.map b/docs/class_observable__inherit__graph.map index 66f3841d9..f8c1ba727 100644 --- a/docs/class_observable__inherit__graph.map +++ b/docs/class_observable__inherit__graph.map @@ -38,8 +38,8 @@ - - + + diff --git a/docs/class_observable__inherit__graph.md5 b/docs/class_observable__inherit__graph.md5 index 48f203c40..c2de6b22d 100644 --- a/docs/class_observable__inherit__graph.md5 +++ b/docs/class_observable__inherit__graph.md5 @@ -1 +1 @@ -7cbaeed062187dad70db939a90eed83f \ No newline at end of file +5652e601a7834de51b2986c575e6cfdb \ No newline at end of file diff --git a/docs/class_observable__inherit__graph.png b/docs/class_observable__inherit__graph.png index cfa56ee3d..3dca56f78 100644 Binary files a/docs/class_observable__inherit__graph.png and b/docs/class_observable__inherit__graph.png differ diff --git a/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.map b/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.map index 155d72edf..5b38d2074 100644 --- a/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.map +++ b/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.map @@ -1,5 +1,5 @@ - + @@ -11,7 +11,8 @@ - - - + + + + diff --git a/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.md5 b/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.md5 index d76d15bc3..09d8b54c8 100644 --- a/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.md5 +++ b/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.md5 @@ -1 +1 @@ -547127f9ad1c880e878233833621393b \ No newline at end of file +f34c64ee025a313a00c822a20ae8d237 \ No newline at end of file diff --git a/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.png b/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.png index 569e3a0be..00c625ff1 100644 Binary files a/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.png and b/docs/class_observable_a099bf851e05bb8c1a25e83f2a1389e58_icgraph.png differ diff --git a/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.map b/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.map index fdce10bca..1533ea039 100644 --- a/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.map +++ b/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.map @@ -1,8 +1,7 @@ - + - - - - + + + diff --git a/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.md5 b/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.md5 index c94a77707..dee3b78f8 100644 --- a/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.md5 +++ b/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.md5 @@ -1 +1 @@ -96621c35e10c917ba10eca51bd97c9a0 \ No newline at end of file +de4f050b67ab3096d1972087d33f3afc \ No newline at end of file diff --git a/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.png b/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.png index 1bdc82356..98d5e89f7 100644 Binary files a/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.png and b/docs/class_observable_af72ed9c9cf7157a33caad4b930232e69_icgraph.png differ diff --git a/docs/class_observable_value-members.html b/docs/class_observable_value-members.html index e684baa4f..97e4dc3f8 100644 --- a/docs/class_observable_value-members.html +++ b/docs/class_observable_value-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_observable_value.html b/docs/class_observable_value.html index 26b5a047d..e58087a8d 100644 --- a/docs/class_observable_value.html +++ b/docs/class_observable_value.html @@ -30,7 +30,7 @@ diff --git a/docs/class_one_wire_temperature-members.html b/docs/class_one_wire_temperature-members.html index 824d1b122..cc80803d7 100644 --- a/docs/class_one_wire_temperature-members.html +++ b/docs/class_one_wire_temperature-members.html @@ -30,7 +30,7 @@ @@ -108,7 +108,7 @@ - + diff --git a/docs/class_one_wire_temperature.html b/docs/class_one_wire_temperature.html index ae5cf8bfc..d59f96ee4 100644 --- a/docs/class_one_wire_temperature.html +++ b/docs/class_one_wire_temperature.html @@ -30,7 +30,7 @@ @@ -146,8 +146,8 @@ - - + + diff --git a/docs/class_p_s_t_i030_sentence_parser-members.html b/docs/class_p_s_t_i030_sentence_parser-members.html index 2ad92a1c7..d86f79230 100644 --- a/docs/class_p_s_t_i030_sentence_parser-members.html +++ b/docs/class_p_s_t_i030_sentence_parser-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_p_s_t_i030_sentence_parser.html b/docs/class_p_s_t_i030_sentence_parser.html index aca41fda6..2958c1f88 100644 --- a/docs/class_p_s_t_i030_sentence_parser.html +++ b/docs/class_p_s_t_i030_sentence_parser.html @@ -30,7 +30,7 @@ @@ -201,13 +201,13 @@

SentenceParser.

-

Definition at line 370 of file nmea_parser.cpp.

+

Definition at line 378 of file nmea_parser.cpp.

Here is the call graph for this function:
- + @@ -216,8 +216,9 @@

- - + + +

diff --git a/docs/class_p_s_t_i030_sentence_parser_adf5b386bffd76b1055d70aa59615d493_icgraph.md5 b/docs/class_p_s_t_i030_sentence_parser_adf5b386bffd76b1055d70aa59615d493_icgraph.md5 index 5b30f61b3..f369825ea 100644 --- a/docs/class_p_s_t_i030_sentence_parser_adf5b386bffd76b1055d70aa59615d493_icgraph.md5 +++ b/docs/class_p_s_t_i030_sentence_parser_adf5b386bffd76b1055d70aa59615d493_icgraph.md5 @@ -1 +1 @@ -1a5089407b3f817184abb1b8a5b9ec0d \ No newline at end of file +a8538cb61cb6fffb07578e01fb549a2b \ No newline at end of file diff --git a/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.map b/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.map index 88bd58fa1..d7acd1906 100644 --- a/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.map +++ b/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.map @@ -1,5 +1,5 @@ - + @@ -8,6 +8,7 @@ - - + + + diff --git a/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.md5 b/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.md5 index 2f84b6147..6df48a02f 100644 --- a/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.md5 +++ b/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.md5 @@ -1 +1 @@ -314cc041a376c31ddf7e374e58fddab0 \ No newline at end of file +86f8c9bd89f57d030a6493f1ee803c85 \ No newline at end of file diff --git a/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.png b/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.png index 7dc6c9480..a9192d751 100644 Binary files a/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.png and b/docs/class_p_s_t_i030_sentence_parser_aee500dadf0a5ff089d8281c642cdb9bc_cgraph.png differ diff --git a/docs/class_p_s_t_i032_sentence_parser-members.html b/docs/class_p_s_t_i032_sentence_parser-members.html index 7d309fa72..51c864084 100644 --- a/docs/class_p_s_t_i032_sentence_parser-members.html +++ b/docs/class_p_s_t_i032_sentence_parser-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_p_s_t_i032_sentence_parser.html b/docs/class_p_s_t_i032_sentence_parser.html index 88f8a0fa3..4d04cc8e1 100644 --- a/docs/class_p_s_t_i032_sentence_parser.html +++ b/docs/class_p_s_t_i032_sentence_parser.html @@ -30,7 +30,7 @@ @@ -201,21 +201,22 @@

SentenceParser.

-

Definition at line 457 of file nmea_parser.cpp.

+

Definition at line 465 of file nmea_parser.cpp.

Here is the call graph for this function:
- + - - + + +
diff --git a/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.map b/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.map index 57bcd2713..e93fd8ada 100644 --- a/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.map +++ b/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.map @@ -1,11 +1,12 @@ - + - - + + + diff --git a/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.md5 b/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.md5 index 2d12ac93b..5dc3e7ce9 100644 --- a/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.md5 +++ b/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.md5 @@ -1 +1 @@ -a11454454920a3c20268f7e234ba34be \ No newline at end of file +9c477c0019cfaa6b0fa286ff4a014161 \ No newline at end of file diff --git a/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.png b/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.png index 2d3722fbe..633f71854 100644 Binary files a/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.png and b/docs/class_p_s_t_i032_sentence_parser_ac25a7c9f31987ce7a01ce499f045a6a9_cgraph.png differ diff --git a/docs/class_p_s_t_i032_sentence_parser_acbe297f07ea6729d870ec8222535b1ce_icgraph.md5 b/docs/class_p_s_t_i032_sentence_parser_acbe297f07ea6729d870ec8222535b1ce_icgraph.md5 index 607bbcc4d..c062ec968 100644 --- a/docs/class_p_s_t_i032_sentence_parser_acbe297f07ea6729d870ec8222535b1ce_icgraph.md5 +++ b/docs/class_p_s_t_i032_sentence_parser_acbe297f07ea6729d870ec8222535b1ce_icgraph.md5 @@ -1 +1 @@ -79106d0c8946da777c529b7f99cc8a4d \ No newline at end of file +1d02abecaafda5ddf020a0f6427267dd \ No newline at end of file diff --git a/docs/class_p_s_t_i_sentence_parser-members.html b/docs/class_p_s_t_i_sentence_parser-members.html index cd940efb4..3b3f4c881 100644 --- a/docs/class_p_s_t_i_sentence_parser-members.html +++ b/docs/class_p_s_t_i_sentence_parser-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_p_s_t_i_sentence_parser.html b/docs/class_p_s_t_i_sentence_parser.html index 5c7836756..1ed4f4823 100644 --- a/docs/class_p_s_t_i_sentence_parser.html +++ b/docs/class_p_s_t_i_sentence_parser.html @@ -30,7 +30,7 @@ @@ -253,15 +253,16 @@

SentenceParser.

-

Definition at line 346 of file nmea_parser.cpp.

+

Definition at line 354 of file nmea_parser.cpp.

Here is the call graph for this function:
- + - + +
diff --git a/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.map b/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.map index 28ee7ba5c..d8a012da5 100644 --- a/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.map +++ b/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.map @@ -1,5 +1,6 @@ - + - + + diff --git a/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.md5 b/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.md5 index 1a5079e13..0a38b8941 100644 --- a/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.md5 +++ b/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.md5 @@ -1 +1 @@ -d2bf9b94e5da734e5c90bc9a6430f753 \ No newline at end of file +438164142174918971428c33ed8f0418 \ No newline at end of file diff --git a/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.png b/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.png index 9d487d522..14bba510b 100644 Binary files a/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.png and b/docs/class_p_s_t_i_sentence_parser_a94f6b75ee9ad9965c4a5cf27e44a12e5_cgraph.png differ diff --git a/docs/class_p_s_t_i_sentence_parser_add6764d7c0579101840b82a86f6bd2ef_icgraph.md5 b/docs/class_p_s_t_i_sentence_parser_add6764d7c0579101840b82a86f6bd2ef_icgraph.md5 index 6c117a42d..7efcff4db 100644 --- a/docs/class_p_s_t_i_sentence_parser_add6764d7c0579101840b82a86f6bd2ef_icgraph.md5 +++ b/docs/class_p_s_t_i_sentence_parser_add6764d7c0579101840b82a86f6bd2ef_icgraph.md5 @@ -1 +1 @@ -e19f2564e9c0767acc38d087f0cf7844 \ No newline at end of file +41f10b631b77fcc5d69d68bcf0376375 \ No newline at end of file diff --git a/docs/class_s_k_delta-members.html b/docs/class_s_k_delta-members.html index 6a638ffb9..e00d9d9ee 100644 --- a/docs/class_s_k_delta-members.html +++ b/docs/class_s_k_delta-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_s_k_delta.html b/docs/class_s_k_delta.html index 557fb8da8..625b41fe7 100644 --- a/docs/class_s_k_delta.html +++ b/docs/class_s_k_delta.html @@ -30,7 +30,7 @@ @@ -140,7 +140,7 @@

-

Definition at line 6 of file signalk_delta.cpp.

+

Definition at line 7 of file signalk_delta.cpp.

@@ -161,7 +161,7 @@

-

Definition at line 10 of file signalk_delta.cpp.

+

Definition at line 11 of file signalk_delta.cpp.

Here is the caller graph for this function:
@@ -189,7 +189,7 @@

-

Definition at line 17 of file signalk_delta.cpp.

+

Definition at line 18 of file signalk_delta.cpp.

Here is the caller graph for this function:
@@ -220,7 +220,7 @@

-

Definition at line 21 of file signalk_delta.cpp.

+

Definition at line 22 of file signalk_delta.cpp.

Here is the caller graph for this function:
diff --git a/docs/class_s_k_emitter-members.html b/docs/class_s_k_emitter-members.html index 456ea5493..ba639ccb4 100644 --- a/docs/class_s_k_emitter-members.html +++ b/docs/class_s_k_emitter-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_s_k_emitter.html b/docs/class_s_k_emitter.html index 72c5d092f..540c94ed1 100644 --- a/docs/class_s_k_emitter.html +++ b/docs/class_s_k_emitter.html @@ -30,7 +30,7 @@ diff --git a/docs/class_s_k_output-members.html b/docs/class_s_k_output-members.html index 69561b6ca..0f4c668c4 100644 --- a/docs/class_s_k_output-members.html +++ b/docs/class_s_k_output-members.html @@ -30,7 +30,7 @@ @@ -115,7 +115,7 @@ - + diff --git a/docs/class_s_k_output.html b/docs/class_s_k_output.html index 53d8bae76..38a768b0a 100644 --- a/docs/class_s_k_output.html +++ b/docs/class_s_k_output.html @@ -30,7 +30,7 @@ @@ -173,8 +173,8 @@ - - + + diff --git a/docs/class_s_k_output_time-members.html b/docs/class_s_k_output_time-members.html index 00c254952..9b6b80ae6 100644 --- a/docs/class_s_k_output_time-members.html +++ b/docs/class_s_k_output_time-members.html @@ -30,7 +30,7 @@ @@ -113,7 +113,7 @@ - + diff --git a/docs/class_s_k_output_time.html b/docs/class_s_k_output_time.html index e4fac6d55..4362646a6 100644 --- a/docs/class_s_k_output_time.html +++ b/docs/class_s_k_output_time.html @@ -30,7 +30,7 @@ @@ -153,8 +153,8 @@ - - + + diff --git a/docs/class_sens_e_s_p_app-members.html b/docs/class_sens_e_s_p_app-members.html index 8e8999bad..83026e357 100644 --- a/docs/class_sens_e_s_p_app-members.html +++ b/docs/class_sens_e_s_p_app-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_sens_e_s_p_app.html b/docs/class_sens_e_s_p_app.html index 150a76bf5..7f4a5b1d1 100644 --- a/docs/class_sens_e_s_p_app.html +++ b/docs/class_sens_e_s_p_app.html @@ -30,7 +30,7 @@ @@ -296,35 +296,34 @@

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -345,7 +344,7 @@

-

Definition at line 168 of file sensesp_app.cpp.

+

Definition at line 169 of file sensesp_app.cpp.

Here is the call graph for this function:
@@ -439,7 +438,7 @@

-

Definition at line 161 of file sensesp_app.cpp.

+

Definition at line 162 of file sensesp_app.cpp.

Here is the call graph for this function:
diff --git a/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_cgraph.md5 b/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_cgraph.md5 index e33c575fd..64b987778 100644 --- a/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_cgraph.md5 +++ b/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_cgraph.md5 @@ -1 +1 @@ -873b57fb26d4819369cbc6ef96861503 \ No newline at end of file +34155e58db063da01c9272143824e849 \ No newline at end of file diff --git a/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_icgraph.md5 b/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_icgraph.md5 index df6d187bf..d0490b662 100644 --- a/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_icgraph.md5 +++ b/docs/class_sens_e_s_p_app_a0f7605a2c63a3ed250e1c742608956b2_icgraph.md5 @@ -1 +1 @@ -ab8f01e33b529afe1b5559e5494364c6 \ No newline at end of file +5c31268001574a6c1b4d30f71391db6a \ No newline at end of file diff --git a/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.map b/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.map index e7d41268f..5757f4f83 100644 --- a/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.map +++ b/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.map @@ -1,31 +1,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.md5 b/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.md5 index 05a03867f..453a7800d 100644 --- a/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.md5 +++ b/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.md5 @@ -1 +1 @@ -909b4f73189ef1cdea79e25edfd51ec1 \ No newline at end of file +bb2145d25503df4da71e6acc23c814ab \ No newline at end of file diff --git a/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.png b/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.png index dbd529e20..9c9e8f0eb 100644 Binary files a/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.png and b/docs/class_sens_e_s_p_app_a3d70c22bfd1bf842f6daa83ab2f50f79_cgraph.png differ diff --git a/docs/class_sens_e_s_p_app_ac068882b9e9f6092da0818c5e42b48b8_cgraph.md5 b/docs/class_sens_e_s_p_app_ac068882b9e9f6092da0818c5e42b48b8_cgraph.md5 index ebdd8514b..48fb08e3f 100644 --- a/docs/class_sens_e_s_p_app_ac068882b9e9f6092da0818c5e42b48b8_cgraph.md5 +++ b/docs/class_sens_e_s_p_app_ac068882b9e9f6092da0818c5e42b48b8_cgraph.md5 @@ -1 +1 @@ -988010ebd378c29ae8eab9e3089e7f11 \ No newline at end of file +f116716e0108dc861b8f5dd781e9b13b \ No newline at end of file diff --git a/docs/class_sens_e_s_p_app_adee3f53bc75ae6d5d73a8707dd75600e_cgraph.md5 b/docs/class_sens_e_s_p_app_adee3f53bc75ae6d5d73a8707dd75600e_cgraph.md5 index 28da511b8..45459f33f 100644 --- a/docs/class_sens_e_s_p_app_adee3f53bc75ae6d5d73a8707dd75600e_cgraph.md5 +++ b/docs/class_sens_e_s_p_app_adee3f53bc75ae6d5d73a8707dd75600e_cgraph.md5 @@ -1 +1 @@ -485d9997e687c5e660404fa7634052b8 \ No newline at end of file +0a52e8e6d54992a41e30922aeac9c608 \ No newline at end of file diff --git a/docs/class_sensor-members.html b/docs/class_sensor-members.html index edeb10312..b200951e9 100644 --- a/docs/class_sensor-members.html +++ b/docs/class_sensor-members.html @@ -30,7 +30,7 @@

@@ -105,7 +105,7 @@ - + diff --git a/docs/class_sensor.html b/docs/class_sensor.html index 27a50be50..d8bbf47aa 100644 --- a/docs/class_sensor.html +++ b/docs/class_sensor.html @@ -30,7 +30,7 @@ @@ -152,8 +152,8 @@ - - + +
void NMEAParser::read void NMEAParser::handle ( char  c)
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
NumericSensor(String config_path="")NumericSensor
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueProducer< float >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf) override finalOneWireTemperaturevirtual
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
NumericSensor(String config_path="")NumericSensor
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueProducer< float >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_sources()SKEmitterinlinestatic
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< T >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< T >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_sources()SKEmitterinlinestatic
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< String >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< time_t >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
save_configuration()Configurablevirtual
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
diff --git a/docs/class_sentence_parser-members.html b/docs/class_sentence_parser-members.html index 72e7336c2..b8408e839 100644 --- a/docs/class_sentence_parser-members.html +++ b/docs/class_sentence_parser-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_sentence_parser.html b/docs/class_sentence_parser.html index 1d2d0348b..84cae8fc8 100644 --- a/docs/class_sentence_parser.html +++ b/docs/class_sentence_parser.html @@ -30,7 +30,7 @@ @@ -148,7 +148,7 @@

-

Definition at line 531 of file nmea_parser.cpp.

+

Definition at line 542 of file nmea_parser.cpp.

@@ -298,7 +298,7 @@

- + diff --git a/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.map b/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.map index dfbde1e04..e7053e6a6 100644 --- a/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.map +++ b/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.map @@ -1,5 +1,5 @@ - + diff --git a/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.md5 b/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.md5 index 70a99604a..72e74138c 100644 --- a/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.md5 +++ b/docs/class_sentence_parser_aa079d8ee1b96e2f03a9c7a1f2ddf7519_icgraph.md5 @@ -1 +1 @@ -8a46c54756f913788ab069d78f275736 \ No newline at end of file +0d9dd4852bd46bf98b5cde4693727e93 \ No newline at end of file diff --git a/docs/class_string_sensor-members.html b/docs/class_string_sensor-members.html index 160a43650..a809e3618 100644 --- a/docs/class_string_sensor-members.html +++ b/docs/class_string_sensor-members.html @@ -30,7 +30,7 @@

@@ -108,7 +108,7 @@ - + diff --git a/docs/class_string_sensor.html b/docs/class_string_sensor.html index 537749525..081de80ab 100644 --- a/docs/class_string_sensor.html +++ b/docs/class_string_sensor.html @@ -30,7 +30,7 @@ @@ -143,8 +143,8 @@ - - + + diff --git a/docs/class_symmetric_transform-members.html b/docs/class_symmetric_transform-members.html index 93a5ff52c..551b8f67e 100644 --- a/docs/class_symmetric_transform-members.html +++ b/docs/class_symmetric_transform-members.html @@ -30,7 +30,7 @@ @@ -110,7 +110,7 @@ - + diff --git a/docs/class_symmetric_transform.html b/docs/class_symmetric_transform.html index ee1dab744..381184ac2 100644 --- a/docs/class_symmetric_transform.html +++ b/docs/class_symmetric_transform.html @@ -30,7 +30,7 @@ @@ -146,8 +146,8 @@ - - + + diff --git a/docs/class_system_hz-members.html b/docs/class_system_hz-members.html index 24ded02fc..c6623e9ad 100644 --- a/docs/class_system_hz-members.html +++ b/docs/class_system_hz-members.html @@ -30,7 +30,7 @@ @@ -109,7 +109,7 @@ - + diff --git a/docs/class_system_hz.html b/docs/class_system_hz.html index ca52143d8..310e70b5f 100644 --- a/docs/class_system_hz.html +++ b/docs/class_system_hz.html @@ -30,7 +30,7 @@ @@ -148,8 +148,8 @@ - - + + diff --git a/docs/class_time_string-members.html b/docs/class_time_string-members.html index 9a110b69d..5eb387393 100644 --- a/docs/class_time_string-members.html +++ b/docs/class_time_string-members.html @@ -30,7 +30,7 @@ @@ -110,7 +110,7 @@ - + diff --git a/docs/class_time_string.html b/docs/class_time_string.html index 62e7bf79d..89d936fb3 100644 --- a/docs/class_time_string.html +++ b/docs/class_time_string.html @@ -30,7 +30,7 @@ @@ -147,8 +147,8 @@ - - + + diff --git a/docs/class_transform-members.html b/docs/class_transform-members.html index e03e72d1f..909fc8d61 100644 --- a/docs/class_transform-members.html +++ b/docs/class_transform-members.html @@ -30,7 +30,7 @@ @@ -110,7 +110,7 @@ - + diff --git a/docs/class_transform.html b/docs/class_transform.html index fe716a639..c4528ba45 100644 --- a/docs/class_transform.html +++ b/docs/class_transform.html @@ -30,7 +30,7 @@ @@ -140,8 +140,8 @@ - - + + diff --git a/docs/class_transform_base-members.html b/docs/class_transform_base-members.html index 5aca4af48..fe4688071 100644 --- a/docs/class_transform_base-members.html +++ b/docs/class_transform_base-members.html @@ -30,7 +30,7 @@ @@ -104,7 +104,7 @@ - + diff --git a/docs/class_transform_base.html b/docs/class_transform_base.html index 7e31e20c5..ecbcaee50 100644 --- a/docs/class_transform_base.html +++ b/docs/class_transform_base.html @@ -30,7 +30,7 @@ @@ -102,29 +102,31 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_sensors()Sensorinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< String >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueProducer< String >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< T >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< T >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_sensors()Sensorinlinestatic
get_value_name()SystemHzinline
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
NumericSensor(String config_path="")NumericSensor
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueProducer< float >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< String >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< time_t >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< P >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< C >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf)Configurablevirtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
save_configuration()Configurablevirtual
set_configuration(const JsonObject &config)Configurablevirtual
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -152,8 +154,8 @@ - - + +
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
diff --git a/docs/class_transform_base__inherit__graph.map b/docs/class_transform_base__inherit__graph.map index adb99fb9f..c1504b8c4 100644 --- a/docs/class_transform_base__inherit__graph.map +++ b/docs/class_transform_base__inherit__graph.map @@ -1,25 +1,27 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/docs/class_transform_base__inherit__graph.md5 b/docs/class_transform_base__inherit__graph.md5 index 3f493de11..ee11b123e 100644 --- a/docs/class_transform_base__inherit__graph.md5 +++ b/docs/class_transform_base__inherit__graph.md5 @@ -1 +1 @@ -34e0cbfdfc46193dad6b990580f856fa \ No newline at end of file +e9ffc4d78f414ed563c800e2c93739fa \ No newline at end of file diff --git a/docs/class_transform_base__inherit__graph.png b/docs/class_transform_base__inherit__graph.png index a89c7a3b7..680efc052 100644 Binary files a/docs/class_transform_base__inherit__graph.png and b/docs/class_transform_base__inherit__graph.png differ diff --git a/docs/class_uptime-members.html b/docs/class_uptime-members.html index 4c05a9d48..847adbeea 100644 --- a/docs/class_uptime-members.html +++ b/docs/class_uptime-members.html @@ -30,7 +30,7 @@ @@ -109,7 +109,7 @@ - + diff --git a/docs/class_uptime.html b/docs/class_uptime.html index f663d1848..6259ca0c0 100644 --- a/docs/class_uptime.html +++ b/docs/class_uptime.html @@ -30,7 +30,7 @@ @@ -148,8 +148,8 @@ - - + + diff --git a/docs/class_value_consumer-members.html b/docs/class_value_consumer-members.html index 1f32b3feb..8679f56a7 100644 --- a/docs/class_value_consumer-members.html +++ b/docs/class_value_consumer-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_value_consumer.html b/docs/class_value_consumer.html index dadca83de..ea07febd5 100644 --- a/docs/class_value_consumer.html +++ b/docs/class_value_consumer.html @@ -30,7 +30,7 @@ @@ -222,7 +222,7 @@

CurveInterpolator, SKOutput< T >, VoltageDividerR2, TimeString, Frequency, MovingAverage, AngleCorrection, Linear, Integrator, and Difference.

+

Reimplemented in CurveInterpolator, MovingAverage, SKOutput< T >, VoltageDividerR2, ChangeFilter, Median, TimeString, Frequency, AngleCorrection, Linear, Integrator, and Difference.

Definition at line 28 of file valueconsumer.h.

diff --git a/docs/class_value_producer-members.html b/docs/class_value_producer-members.html index 03d9ef0ae..204c985a9 100644 --- a/docs/class_value_producer-members.html +++ b/docs/class_value_producer-members.html @@ -30,7 +30,7 @@

diff --git a/docs/class_value_producer.html b/docs/class_value_producer.html index c64befa37..181392b23 100644 --- a/docs/class_value_producer.html +++ b/docs/class_value_producer.html @@ -30,7 +30,7 @@ @@ -225,7 +225,7 @@

- + diff --git a/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.map b/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.map index 8afe3530b..78bfee903 100644 --- a/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.map +++ b/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.map @@ -2,5 +2,5 @@ - + diff --git a/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.md5 b/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.md5 index 25a57ab01..4dfbf798d 100644 --- a/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.md5 +++ b/docs/class_value_producer_a1669282467997608ce6164fe4d729bb2_icgraph.md5 @@ -1 +1 @@ -8e7ae4b3996957314d53a6a7dfde225d \ No newline at end of file +4dc67688f79d1959bdfc4477e3e2a966 \ No newline at end of file diff --git a/docs/class_voltage_divider_r2-members.html b/docs/class_voltage_divider_r2-members.html index d98932145..749f2ac5d 100644 --- a/docs/class_voltage_divider_r2-members.html +++ b/docs/class_voltage_divider_r2-members.html @@ -30,7 +30,7 @@

@@ -110,7 +110,7 @@ - + diff --git a/docs/class_voltage_divider_r2.html b/docs/class_voltage_divider_r2.html index 71a895ec3..26449bbd3 100644 --- a/docs/class_voltage_divider_r2.html +++ b/docs/class_voltage_divider_r2.html @@ -30,7 +30,7 @@ @@ -151,8 +151,8 @@ - - + + diff --git a/docs/class_w_s_client-members.html b/docs/class_w_s_client-members.html index 51b4a0dfa..088398d7f 100644 --- a/docs/class_w_s_client-members.html +++ b/docs/class_w_s_client-members.html @@ -30,7 +30,7 @@ diff --git a/docs/class_w_s_client.html b/docs/class_w_s_client.html index a223a37ff..f494369b7 100644 --- a/docs/class_w_s_client.html +++ b/docs/class_w_s_client.html @@ -30,7 +30,7 @@ @@ -193,7 +193,7 @@

-

Definition at line 38 of file ws_client.cpp.

+

Definition at line 41 of file ws_client.cpp.

@@ -213,7 +213,7 @@

-

Definition at line 108 of file ws_client.cpp.

+

Definition at line 111 of file ws_client.cpp.

Here is the caller graph for this function:
@@ -242,7 +242,7 @@

-

Definition at line 51 of file ws_client.cpp.

+

Definition at line 54 of file ws_client.cpp.

Here is the call graph for this function:
@@ -294,7 +294,7 @@

Configurable.

-

Definition at line 353 of file ws_client.cpp.

+

Definition at line 364 of file ws_client.cpp.

@@ -325,7 +325,7 @@

Configurable.

-

Definition at line 332 of file ws_client.cpp.

+

Definition at line 343 of file ws_client.cpp.

@@ -344,7 +344,7 @@

-

Definition at line 310 of file ws_client.cpp.

+

Definition at line 321 of file ws_client.cpp.

Here is the caller graph for this function:
@@ -372,7 +372,7 @@

-

Definition at line 306 of file ws_client.cpp.

+

Definition at line 317 of file ws_client.cpp.

Here is the caller graph for this function:
@@ -402,7 +402,7 @@

-

Definition at line 84 of file ws_client.cpp.

+

Definition at line 87 of file ws_client.cpp.

Here is the caller graph for this function:
@@ -430,7 +430,7 @@

-

Definition at line 64 of file ws_client.cpp.

+

Definition at line 67 of file ws_client.cpp.

Here is the caller graph for this function:
@@ -458,7 +458,7 @@

-

Definition at line 78 of file ws_client.cpp.

+

Definition at line 81 of file ws_client.cpp.

Here is the caller graph for this function:
@@ -487,7 +487,7 @@

-

Definition at line 90 of file ws_client.cpp.

+

Definition at line 93 of file ws_client.cpp.

Here is the caller graph for this function:
@@ -515,7 +515,7 @@

-

Definition at line 314 of file ws_client.cpp.

+

Definition at line 325 of file ws_client.cpp.

@@ -534,7 +534,7 @@

-

Definition at line 321 of file ws_client.cpp.

+

Definition at line 332 of file ws_client.cpp.

Here is the call graph for this function:
@@ -585,7 +585,7 @@

Configurable.

-

Definition at line 358 of file ws_client.cpp.

+

Definition at line 369 of file ws_client.cpp.

diff --git a/docs/classes.html b/docs/classes.html index 92b99cfdf..51f0e35ee 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -30,7 +30,7 @@

@@ -95,43 +95,43 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_sensors()Sensorinlinestatic
get_value_name()Uptimeinline
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
NumericSensor(String config_path="")NumericSensor
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueProducer< float >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
get_configuration(JsonBuffer &buf) overrideVoltageDividerR2virtual
get_transforms()TransformBaseinlinestatic
getClassName()Enableinlinevirtual
getEnablePriority()Enableinline
getEnablePriority()Enableinline
load_configuration()Configurableprotectedvirtual
notify()Observable
outputValueProducer< float >protected
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
 
virtual const char * getClassName ()
 
const int8_t getEnablePriority ()
 
const uint8_t getEnablePriority ()
 
void setPriority (uint8_t priority)
 
- Public Member Functions inherited from ValueConsumer< float >
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
- - - + + + + - - - + + + + - + + + - - - - - - + + + + - + + -
  a  
ENUVector   
  l  
-
PSTI030SentenceParser   Transform   
  f  
-
PSTI032SentenceParser   TransformBase   
AnalogInput   LedBlinker   PSTISentenceParser   
  u  
+
  p  
+
  t  
AnalogVoltage   FreeMem   Linear   
  s  
-
  f  
+
AnalogInput   LedBlinker   Position   TimeString   
AnalogVoltage   FreeMem   Linear   PSTI030SentenceParser   Transform   
AngleCorrection   Frequency   
  m  
-
Uptime   
PSTI032SentenceParser   TransformBase   
  c  
  g  
-
CurveInterpolator::Sample   
  v  
+
PSTISentenceParser   
  u  
MovingAverage   SensESPApp   
Configurable   GPGGASentenceParser   
  n  
-
Sensor   ValueConsumer   
CurveInterpolator   GPGLLSentenceParser   SentenceParser   ValueProducer   
Median   
  s  
+
ChangeFilter   GPGGASentenceParser   MovingAverage   Uptime   
Configurable   GPGLLSentenceParser   
  n  
+
CurveInterpolator::Sample   
  v  
+
CurveInterpolator   GPRMCSentenceParser   SensESPApp   
  d  
-
GPRMCSentenceParser   Networking   SKDelta   VoltageDividerR2   
GPSInput   NMEAData   SKEmitter   
  w  
+
GPSInput   Networking   Sensor   ValueConsumer   
  h  
+
NMEAData   SentenceParser   ValueProducer   
DallasTemperatureSensors   NMEAParser   SKDelta   VoltageDividerR2   
Debounce   HTTPServer   NumericSensor   SKEmitter   
  w  
DallasTemperatureSensors   
  h  
-
NMEAParser   SKOutput   
Debounce   NumericSensor   SKOutputTime   WSClient   
Difference   HTTPServer   
  o  
-
StringSensor   
DigitalInput   
  i  
-
SymmetricTransform   
DigitalInputCounter   Observable   SystemHz   
DigitalInputValue   IntegerSensor   ObservableValue   
  t  
-
Difference   
  i  
+
  o  
+
SKOutput   
DigitalInput   SKOutputTime   WSClient   
DigitalInputCounter   IntegerSensor   Observable   StringSensor   
DigitalInputValue   Integrator   ObservableValue   SymmetricTransform   
  e  
-
Integrator   OneWireTemperature   
IPAddrDev   
  p  
-
TimeString   
IPAddrDev   OneWireTemperature   SystemHz   
Enable   
Position   
a | c | d | e | f | g | h | i | l | m | n | o | p | s | t | u | v | w
diff --git a/docs/configurable_8cpp.html b/docs/configurable_8cpp.html index ec7c81810..1b909b0ec 100644 --- a/docs/configurable_8cpp.html +++ b/docs/configurable_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/configurable_8cpp_source.html b/docs/configurable_8cpp_source.html index 279da5f28..3821acb1c 100644 --- a/docs/configurable_8cpp_source.html +++ b/docs/configurable_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/configurable_8h.html b/docs/configurable_8h.html index d1437192c..834da5a4c 100644 --- a/docs/configurable_8h.html +++ b/docs/configurable_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -113,56 +113,56 @@
- + - - - - - - - - - + + + + + + + + + - + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/configurable_8h__dep__incl.map b/docs/configurable_8h__dep__incl.map index 8d4e36114..736b9192b 100644 --- a/docs/configurable_8h__dep__incl.map +++ b/docs/configurable_8h__dep__incl.map @@ -1,52 +1,52 @@ - + - - - - - - - - - + + + + + + + + + - + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/configurable_8h__dep__incl.md5 b/docs/configurable_8h__dep__incl.md5 index 43313341c..e0bccd72f 100644 --- a/docs/configurable_8h__dep__incl.md5 +++ b/docs/configurable_8h__dep__incl.md5 @@ -1 +1 @@ -8c48623ae3e9c07ded556bc7f8cd3374 \ No newline at end of file +f0fa9529dac4aded948d76179285cb50 \ No newline at end of file diff --git a/docs/configurable_8h__dep__incl.png b/docs/configurable_8h__dep__incl.png index 954d30917..ade49870e 100644 Binary files a/docs/configurable_8h__dep__incl.png and b/docs/configurable_8h__dep__incl.png differ diff --git a/docs/configurable_8h_source.html b/docs/configurable_8h_source.html index f611b55fd..29e84df3f 100644 --- a/docs/configurable_8h_source.html +++ b/docs/configurable_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/curveinterpolator_8cpp.html b/docs/curveinterpolator_8cpp.html index 9eef80b30..93be5c719 100644 --- a/docs/curveinterpolator_8cpp.html +++ b/docs/curveinterpolator_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/curveinterpolator_8cpp_source.html b/docs/curveinterpolator_8cpp_source.html index 767cf573f..8521c4f31 100644 --- a/docs/curveinterpolator_8cpp_source.html +++ b/docs/curveinterpolator_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/curveinterpolator_8h.html b/docs/curveinterpolator_8h.html index a1fdde1a1..efca17275 100644 --- a/docs/curveinterpolator_8h.html +++ b/docs/curveinterpolator_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/curveinterpolator_8h_source.html b/docs/curveinterpolator_8h_source.html index 81857dc4e..39d6a096b 100644 --- a/docs/curveinterpolator_8h_source.html +++ b/docs/curveinterpolator_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/debounce_8cpp.html b/docs/debounce_8cpp.html index 0a806f5c2..4441bdf5d 100644 --- a/docs/debounce_8cpp.html +++ b/docs/debounce_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/debounce_8cpp_source.html b/docs/debounce_8cpp_source.html index c1055ea68..658781035 100644 --- a/docs/debounce_8cpp_source.html +++ b/docs/debounce_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/debounce_8h.html b/docs/debounce_8h.html index 91af13284..d0d676f6b 100644 --- a/docs/debounce_8h.html +++ b/docs/debounce_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/debounce_8h_source.html b/docs/debounce_8h_source.html index 6a8eb568b..a2501260d 100644 --- a/docs/debounce_8h_source.html +++ b/docs/debounce_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/difference_8cpp.html b/docs/difference_8cpp.html index ccc1688b3..116b87ce1 100644 --- a/docs/difference_8cpp.html +++ b/docs/difference_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/difference_8cpp_source.html b/docs/difference_8cpp_source.html index f48c13ee7..452897834 100644 --- a/docs/difference_8cpp_source.html +++ b/docs/difference_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/difference_8h.html b/docs/difference_8h.html index 938f144ca..e61ca7327 100644 --- a/docs/difference_8h.html +++ b/docs/difference_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/difference_8h_source.html b/docs/difference_8h_source.html index 1d1d4788a..6746250b5 100644 --- a/docs/difference_8h_source.html +++ b/docs/difference_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/digital__input_8cpp.html b/docs/digital__input_8cpp.html index 4f1869b68..e6bee3077 100644 --- a/docs/digital__input_8cpp.html +++ b/docs/digital__input_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/digital__input_8cpp_source.html b/docs/digital__input_8cpp_source.html index 3dcc315b2..c7a91c92b 100644 --- a/docs/digital__input_8cpp_source.html +++ b/docs/digital__input_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,7 +91,7 @@
digital_input.cpp
-Go to the documentation of this file.
1 #include "digital_input.h"
2 
3 #include <FunctionalInterrupt.h>
4 
5 #include "sensesp.h"
6 
8  uint8_t pin, int pin_mode, int interrupt_type,
9  String config_path)
10  : Sensor(config_path), pin{pin}, interrupt_type{interrupt_type} {
11  className = "DigitalInput";
12  pinMode(pin, pin_mode);
13 }
14 
16  uint8_t pin, int pin_mode, int interrupt_type,
17  String config_path) :
19  BooleanProducer() {
20  className = "DigitalInputValue";
21  }
22 
24  app.onInterrupt(
26  [this](){
27  output = digitalRead(pin);
28  triggered = true;
29  });
30  app.onTick(
31  [this](){
32  if (triggered) {
33  triggered = false;
34  notify();
35  }
36  }
37  );
38 }
39 
40 
42  uint8_t pin, int pin_mode, int interrupt_type,
43  uint read_delay,
44  String config_path) :
47  read_delay{read_delay} {
48  className = "DigitalInputCounter";
49  }
50 
52  app.onInterrupt(pin, interrupt_type,
53  [this](){
54  this->counter++;
55  });
56 
57  app.onRepeat(read_delay, [this](){
58  noInterrupts();
59  output = counter;
60  counter = 0;
61  interrupts();
62  notify();
63  });
64 }
Definition: sensor.h:15
+Go to the documentation of this file.
1 #include "digital_input.h"
2 
3 #include <FunctionalInterrupt.h>
4 
5 #include "sensesp.h"
6 
8  uint8_t pin, int pin_mode, int interrupt_type,
9  String config_path)
10  : Sensor(config_path), pin{pin}, interrupt_type{interrupt_type} {
11  className = "DigitalInput";
12  pinMode(pin, pin_mode);
13 }
14 
16  uint8_t pin, int pin_mode, int interrupt_type,
17  String config_path) :
19  BooleanProducer() {
20  className = "DigitalInputValue";
21  }
22 
24  app.onInterrupt(
26  [this](){
27  output = digitalRead(pin);
28  triggered = true;
29  });
30  app.onTick(
31  [this](){
32  if (triggered) {
33  triggered = false;
34  notify();
35  }
36  }
37  );
38 }
39 
40 
42  uint8_t pin, int pin_mode, int interrupt_type,
43  uint read_delay,
44  String config_path) :
47  read_delay{read_delay} {
48  className = "DigitalInputCounter";
49  }
50 
52  app.onInterrupt(pin, interrupt_type,
53  [this](){
54  this->counter++;
55  });
56 
57  app.onRepeat(read_delay, [this](){
58  noInterrupts();
59  output = counter;
60  counter = 0;
61  interrupts();
62  notify();
63  });
64  }
65 
66  JsonObject& DigitalInputCounter::get_configuration(JsonBuffer& buf) {
67  JsonObject& root = buf.createObject();
68  root["read_delay"] = read_delay;
69  root["value"] = output;
70  return root;
71  };
72 
73  static const char SCHEMA[] PROGMEM = R"###({
74  "type": "object",
75  "properties": {
76  "read_delay": { "title": "Read delay", "type": "number", "description": "The time, in milliseconds, between each read of the input" },
77  "value": { "title": "Last value", "type" : "number", "readOnly": true }
78  }
79  })###";
80 
81  String DigitalInputCounter::get_config_schema() {
82  return FPSTR(SCHEMA);
83 }
84 
85 bool DigitalInputCounter::set_configuration(const JsonObject& config) {
86  String expected[] = {"read_delay"};
87  for (auto str : expected) {
88  if (!config.containsKey(str)) {
89  return false;
90  }
91  }
92  read_delay = config["read_delay"];
93  return true;
94 }
Definition: sensor.h:15
ValueProducer< bool > BooleanProducer
Definition: valueproducer.h:80
void notify()
Definition: observable.cpp:3
@@ -105,6 +105,7 @@
const String config_path
Definition: configurable.h:29
virtual void enable() override final
+
const char PAGE_index [] PROGMEM
Definition: index.h:2
ValueProducer< int > IntegerProducer
Definition: valueproducer.h:79
ReactESP app
diff --git a/docs/digital__input_8h.html b/docs/digital__input_8h.html index 4ea35eea9..7e00f40a5 100644 --- a/docs/digital__input_8h.html +++ b/docs/digital__input_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/digital__input_8h_source.html b/docs/digital__input_8h_source.html index 51d342ab8..90cef4d25 100644 --- a/docs/digital__input_8h_source.html +++ b/docs/digital__input_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,7 +91,7 @@
digital_input.h
-Go to the documentation of this file.
1 #ifndef _digital_input_H_
2 #define _digital_input_H_
3 
4 #include "sensor.h"
5 
6 class DigitalInput : public Sensor {
7  public:
8  DigitalInput(uint8_t pin, int pin_mode, int interrupt_type,
9  String config_path="");
10 
11  protected:
12  uint8_t pin;
14 };
15 
16 
17 // DigitalInputValue is meant to report directly the state of
18 // a slowly changing signal
20  public:
21  DigitalInputValue(uint8_t pin, int pin_mode, int interrupt_type,
22  String config_path="");
23 
24  virtual void enable() override final;
25 
26  private:
27  bool triggered = false;
28 };
29 
30 // DigitalInputCounter tracks rapidly changing digital inputs
32  public:
33  DigitalInputCounter(uint8_t pin, int pin_mode, int interrupt_type,
34  uint read_delay,
35  String config_path="");
36 
37  void enable() override final;
38 
39  private:
40  uint read_delay;
41  volatile uint counter = 0;
42 };
43 
44 #endif
Definition: sensor.h:15
+Go to the documentation of this file.
1 #ifndef _digital_input_H_
2 #define _digital_input_H_
3 
4 #include "sensor.h"
5 
6 class DigitalInput : public Sensor {
7  public:
8  DigitalInput(uint8_t pin, int pin_mode, int interrupt_type,
9  String config_path="");
10 
11  protected:
12  uint8_t pin;
14 };
15 
16 
17 // DigitalInputValue is meant to report directly the state of
18 // a slowly changing signal
20  public:
21  DigitalInputValue(uint8_t pin, int pin_mode, int interrupt_type,
22  String config_path="");
23 
24  virtual void enable() override final;
25 
26  private:
27  bool triggered = false;
28 };
29 
30 // DigitalInputCounter tracks rapidly changing digital inputs
32  public:
33  DigitalInputCounter(uint8_t pin, int pin_mode, int interrupt_type,
34  uint read_delay,
35  String config_path="");
36 
37  void enable() override final;
38 
39  private:
40  uint read_delay;
41  volatile uint counter = 0;
42  virtual JsonObject& get_configuration(JsonBuffer& buf) override;
43  virtual bool set_configuration(const JsonObject& config) override;
44  virtual String get_config_schema() override;
45 };
46 
47 #endif
Definition: sensor.h:15
diff --git a/docs/dir_000001_000002.html b/docs/dir_000001_000002.html index 4cf7c03ee..1cae59f77 100644 --- a/docs/dir_000001_000002.html +++ b/docs/dir_000001_000002.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_000001_000004.html b/docs/dir_000001_000004.html index 019fd7a1d..68556618a 100644 --- a/docs/dir_000001_000004.html +++ b/docs/dir_000001_000004.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_000001_000005.html b/docs/dir_000001_000005.html index 6df0e54ee..d1a2d0f1e 100644 --- a/docs/dir_000001_000005.html +++ b/docs/dir_000001_000005.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_000003_000005.html b/docs/dir_000003_000005.html index 1c6d83974..49e84b764 100644 --- a/docs/dir_000003_000005.html +++ b/docs/dir_000003_000005.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_000004_000003.html b/docs/dir_000004_000003.html index 23fdc1eab..eaa067740 100644 --- a/docs/dir_000004_000003.html +++ b/docs/dir_000004_000003.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_000004_000005.html b/docs/dir_000004_000005.html index 7a0eda925..4d24db08d 100644 --- a/docs/dir_000004_000005.html +++ b/docs/dir_000004_000005.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_000004_000006.html b/docs/dir_000004_000006.html index 22c8418f7..3845bf7ee 100644 --- a/docs/dir_000004_000006.html +++ b/docs/dir_000004_000006.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_000006_000005.html b/docs/dir_000006_000005.html index 3bf1277f1..722a40f60 100644 --- a/docs/dir_000006_000005.html +++ b/docs/dir_000006_000005.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 05b449ab5..454329fbb 100644 --- a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_7349e89ef19c117195f8e371603e1b1f.html b/docs/dir_7349e89ef19c117195f8e371603e1b1f.html index c611428a5..fefd9cea9 100644 --- a/docs/dir_7349e89ef19c117195f8e371603e1b1f.html +++ b/docs/dir_7349e89ef19c117195f8e371603e1b1f.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_7349e89ef19c117195f8e371603e1b1f.js b/docs/dir_7349e89ef19c117195f8e371603e1b1f.js index 4293d89c6..3b3385aba 100644 --- a/docs/dir_7349e89ef19c117195f8e371603e1b1f.js +++ b/docs/dir_7349e89ef19c117195f8e371603e1b1f.js @@ -11,7 +11,9 @@ var dir_7349e89ef19c117195f8e371603e1b1f = [ "DigitalInputCounter", "class_digital_input_counter.html", "class_digital_input_counter" ] ] ], [ "gps.cpp", "gps_8cpp.html", null ], - [ "gps.h", "gps_8h.html", "gps_8h" ], + [ "gps.h", "gps_8h.html", [ + [ "GPSInput", "class_g_p_s_input.html", "class_g_p_s_input" ] + ] ], [ "onewire_temperature.cpp", "onewire__temperature_8cpp.html", "onewire__temperature_8cpp" ], [ "onewire_temperature.h", "onewire__temperature_8h.html", "onewire__temperature_8h" ], [ "sensor.cpp", "sensor_8cpp.html", null ], diff --git a/docs/dir_846aa835ffd15ea225ad18b5b4aa0d4f.html b/docs/dir_846aa835ffd15ea225ad18b5b4aa0d4f.html index 2955aa376..09adeb1f4 100644 --- a/docs/dir_846aa835ffd15ea225ad18b5b4aa0d4f.html +++ b/docs/dir_846aa835ffd15ea225ad18b5b4aa0d4f.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_85858df28c9c737bf6d126646f545b97.html b/docs/dir_85858df28c9c737bf6d126646f545b97.html index e7358e5fc..759e8c381 100644 --- a/docs/dir_85858df28c9c737bf6d126646f545b97.html +++ b/docs/dir_85858df28c9c737bf6d126646f545b97.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_859cad99e661c8c6c06da42378c04432.html b/docs/dir_859cad99e661c8c6c06da42378c04432.html index 739aa6177..32ce32176 100644 --- a/docs/dir_859cad99e661c8c6c06da42378c04432.html +++ b/docs/dir_859cad99e661c8c6c06da42378c04432.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -111,6 +111,10 @@   file  angle_correction.h [code]   +file  change_filter.cpp [code] +  +file  change_filter.h [code] +  file  curveinterpolator.cpp [code]   file  curveinterpolator.h [code] @@ -135,6 +139,10 @@   file  linear.h [code]   +file  median.cpp [code] +  +file  median.h [code] +  file  moving_average.cpp [code]   file  moving_average.h [code] diff --git a/docs/dir_859cad99e661c8c6c06da42378c04432.js b/docs/dir_859cad99e661c8c6c06da42378c04432.js index 08d225e90..478351ebe 100644 --- a/docs/dir_859cad99e661c8c6c06da42378c04432.js +++ b/docs/dir_859cad99e661c8c6c06da42378c04432.js @@ -7,6 +7,10 @@ var dir_859cad99e661c8c6c06da42378c04432 = [ "angle_correction.h", "angle__correction_8h.html", [ [ "AngleCorrection", "class_angle_correction.html", "class_angle_correction" ] ] ], + [ "change_filter.cpp", "change__filter_8cpp.html", null ], + [ "change_filter.h", "change__filter_8h.html", [ + [ "ChangeFilter", "class_change_filter.html", "class_change_filter" ] + ] ], [ "curveinterpolator.cpp", "curveinterpolator_8cpp.html", null ], [ "curveinterpolator.h", "curveinterpolator_8h.html", [ [ "CurveInterpolator", "class_curve_interpolator.html", "class_curve_interpolator" ], @@ -32,6 +36,10 @@ var dir_859cad99e661c8c6c06da42378c04432 = [ "linear.h", "linear_8h.html", [ [ "Linear", "class_linear.html", "class_linear" ] ] ], + [ "median.cpp", "median_8cpp.html", null ], + [ "median.h", "median_8h.html", [ + [ "Median", "class_median.html", "class_median" ] + ] ], [ "moving_average.cpp", "moving__average_8cpp.html", null ], [ "moving_average.h", "moving__average_8h.html", [ [ "MovingAverage", "class_moving_average.html", "class_moving_average" ] diff --git a/docs/dir_c72b25b75abe208498b36a3e44a3726c.html b/docs/dir_c72b25b75abe208498b36a3e44a3726c.html index b27b4d2c9..90fcd604e 100644 --- a/docs/dir_c72b25b75abe208498b36a3e44a3726c.html +++ b/docs/dir_c72b25b75abe208498b36a3e44a3726c.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/dir_d501334aeb1b78ad67cd3c72c37b1e87.html b/docs/dir_d501334aeb1b78ad67cd3c72c37b1e87.html index aa052d233..853061b3e 100644 --- a/docs/dir_d501334aeb1b78ad67cd3c72c37b1e87.html +++ b/docs/dir_d501334aeb1b78ad67cd3c72c37b1e87.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/discovery_8cpp.html b/docs/discovery_8cpp.html index 38195754b..776711ee3 100644 --- a/docs/discovery_8cpp.html +++ b/docs/discovery_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/discovery_8cpp_source.html b/docs/discovery_8cpp_source.html index a5b17ec6d..8b088366c 100644 --- a/docs/discovery_8cpp_source.html +++ b/docs/discovery_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/discovery_8h.html b/docs/discovery_8h.html index 3693390da..c7987303e 100644 --- a/docs/discovery_8h.html +++ b/docs/discovery_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/discovery_8h_source.html b/docs/discovery_8h_source.html index 11bf68527..ed914804b 100644 --- a/docs/discovery_8h_source.html +++ b/docs/discovery_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/enable_8cpp.html b/docs/enable_8cpp.html index 89e3e988c..e1c9c29f1 100644 --- a/docs/enable_8cpp.html +++ b/docs/enable_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/enable_8cpp_source.html b/docs/enable_8cpp_source.html index 0488f475b..f5a8dd4bd 100644 --- a/docs/enable_8cpp_source.html +++ b/docs/enable_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/enable_8h.html b/docs/enable_8h.html index 0c0941b44..8a6bd2c15 100644 --- a/docs/enable_8h.html +++ b/docs/enable_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -110,54 +110,56 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/enable_8h__dep__incl.map b/docs/enable_8h__dep__incl.map index d0e7a8678..ccdb11e39 100644 --- a/docs/enable_8h__dep__incl.map +++ b/docs/enable_8h__dep__incl.map @@ -1,50 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/enable_8h__dep__incl.md5 b/docs/enable_8h__dep__incl.md5 index 7c82a57c9..041244453 100644 --- a/docs/enable_8h__dep__incl.md5 +++ b/docs/enable_8h__dep__incl.md5 @@ -1 +1 @@ -05820ac350e7ddf7a7c7ea99f9f4f0f5 \ No newline at end of file +55a1eec326c81779452c4ad01e856636 \ No newline at end of file diff --git a/docs/enable_8h__dep__incl.png b/docs/enable_8h__dep__incl.png index a13da7a54..ada8f0761 100644 Binary files a/docs/enable_8h__dep__incl.png and b/docs/enable_8h__dep__incl.png differ diff --git a/docs/enable_8h_source.html b/docs/enable_8h_source.html index 217b7f77f..184473cb8 100644 --- a/docs/enable_8h_source.html +++ b/docs/enable_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,14 +91,14 @@
enable.h
-Go to the documentation of this file.
1 #ifndef _enable_H_
2 #define _enable_H_
3 
4 #include <queue>
5 #include <stdint.h>
6 
15 class Enable {
16 
17  public:
18  Enable(uint8_t priority = 0);
19 
24  virtual void enable() {}
25 
26 
27  void setClassName(const char* newClassName) { className = newClassName; }
28 
29 
30  virtual const char* getClassName() { return className; };
31 
32 
33  const int8_t getEnablePriority() { return priority; }
34 
35 
36  void setPriority(uint8_t priority) { this-> priority = priority; }
37 
38 
48  static void enableAll();
49 
50 
51  friend bool operator<(const Enable& lhs, const Enable& rhs) { return lhs.priority < rhs.priority; }
52 
53 
54  protected:
55  const char* className = "Enable";
56 
57 
58  private:
59  int8_t priority;
60 
61  static std::priority_queue<Enable*> enableList;
62 };
63 
64 
65 #endif
static void enableAll()
Definition: enable.cpp:12
+Go to the documentation of this file.
1 #ifndef _enable_H_
2 #define _enable_H_
3 
4 #include <queue>
5 #include <stdint.h>
6 
15 class Enable {
16 
17  public:
18  Enable(uint8_t priority = 0);
19 
24  virtual void enable() {}
25 
26 
27  void setClassName(const char* newClassName) { className = newClassName; }
28 
29 
30  virtual const char* getClassName() { return className; };
31 
32 
33  const uint8_t getEnablePriority() { return priority; }
34 
35 
36  void setPriority(uint8_t priority) { this-> priority = priority; }
37 
38 
48  static void enableAll();
49 
50 
51  friend bool operator<(const Enable& lhs, const Enable& rhs) { return lhs.priority < rhs.priority; }
52 
53 
54  protected:
55  const char* className = "Enable";
56 
57 
58  private:
59  uint8_t priority;
60 
61  static std::priority_queue<Enable*> enableList;
62 };
63 
64 
65 #endif
static void enableAll()
Definition: enable.cpp:12
+
const uint8_t getEnablePriority()
Definition: enable.h:33
void setPriority(uint8_t priority)
Definition: enable.h:36
virtual void enable()
Definition: enable.h:24
virtual const char * getClassName()
Definition: enable.h:30
friend bool operator<(const Enable &lhs, const Enable &rhs)
Definition: enable.h:51
Definition: enable.h:15
void setClassName(const char *newClassName)
Definition: enable.h:27
-
const int8_t getEnablePriority()
Definition: enable.h:33
Enable(uint8_t priority=0)
Definition: enable.cpp:7
const char * className
Definition: enable.h:55
diff --git a/docs/files.html b/docs/files.html index e9ad2a52b..12ebb93c8 100644 --- a/docs/files.html +++ b/docs/files.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -153,26 +153,30 @@  analogvoltage.h  angle_correction.cpp  angle_correction.h - curveinterpolator.cpp - curveinterpolator.h - debounce.cpp - debounce.h - difference.cpp - difference.h - frequency.cpp - frequency.h - integrator.cpp - integrator.h - linear.cpp - linear.h - moving_average.cpp - moving_average.h - timestring.cpp - timestring.h - transform.cpp - transform.h - voltagedividerR2.cpp - voltagedividerR2.h + change_filter.cpp + change_filter.h + curveinterpolator.cpp + curveinterpolator.h + debounce.cpp + debounce.h + difference.cpp + difference.h + frequency.cpp + frequency.h + integrator.cpp + integrator.h + linear.cpp + linear.h + median.cpp + median.h + moving_average.cpp + moving_average.h + timestring.cpp + timestring.h + transform.cpp + transform.h + voltagedividerR2.cpp + voltagedividerR2.h  sensesp.h  sensesp_app.cpp  sensesp_app.h diff --git a/docs/frequency_8cpp.html b/docs/frequency_8cpp.html index cdda11018..7572ab73b 100644 --- a/docs/frequency_8cpp.html +++ b/docs/frequency_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/frequency_8cpp_source.html b/docs/frequency_8cpp_source.html index 62b447f57..284fed963 100644 --- a/docs/frequency_8cpp_source.html +++ b/docs/frequency_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/frequency_8h.html b/docs/frequency_8h.html index c2f74085f..db8762a43 100644 --- a/docs/frequency_8h.html +++ b/docs/frequency_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/frequency_8h_source.html b/docs/frequency_8h_source.html index 6d94494b3..7b51fa7be 100644 --- a/docs/frequency_8h_source.html +++ b/docs/frequency_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/functions.html b/docs/functions.html index 4d6b68b62..2b0718bad 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/functions_b.html b/docs/functions_b.html index 04501fc55..73c65cba9 100644 --- a/docs/functions_b.html +++ b/docs/functions_b.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/functions_c.html b/docs/functions_c.html index ab59b5bf1..207b92e64 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -90,6 +90,9 @@
Here is a list of all class members with links to the classes they belong to:

- c -

    +
  • ChangeFilter() +: ChangeFilter +
  • check_connection() : Networking
  • @@ -117,7 +120,7 @@

    - c -

      , ValueConsumer< T >
    • connectTo() -: ValueProducer< T > +: ValueProducer< T >
    • CurveInterpolator() : CurveInterpolator diff --git a/docs/functions_d.html b/docs/functions_d.html index 1527de8bf..bdc97be34 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_e.html b/docs/functions_e.html index 01c8be474..f7f4c4247 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_f.html b/docs/functions_f.html index 1bc500c50..0ebeca929 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_func.html b/docs/functions_func.html index 5f0e72a5f..c71d8f31f 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html index 88fedd0db..2f67b0e6e 100644 --- a/docs/functions_func_c.html +++ b/docs/functions_func_c.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      @@ -90,6 +90,9 @@  

      - c -

diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html index 05ad86335..dde46fdd7 100644 --- a/docs/functions_func_h.html +++ b/docs/functions_func_h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -90,6 +90,9 @@  

- h -

    +
  • handle() +: NMEAParser +
  • handle_config() : HTTPServer
  • diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html index ffb5d87d2..32c823488 100644 --- a/docs/functions_func_i.html +++ b/docs/functions_func_i.html @@ -30,7 +30,7 @@
    SensESP -  0.4.2 +  0.4.3
    Universal Signal K sensor framework for ESP8266 and ESP32
    diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html index 0da35a979..e39177334 100644 --- a/docs/functions_func_l.html +++ b/docs/functions_func_l.html @@ -30,7 +30,7 @@
    SensESP -  0.4.2 +  0.4.3
    Universal Signal K sensor framework for ESP8266 and ESP32
    diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html index 460fb7cc7..0980d04b5 100644 --- a/docs/functions_func_m.html +++ b/docs/functions_func_m.html @@ -30,7 +30,7 @@
    SensESP -  0.4.2 +  0.4.3
    Universal Signal K sensor framework for ESP8266 and ESP32
    @@ -90,6 +90,9 @@  

    - m -

      +
    • Median() +: Median +
    • MovingAverage() : MovingAverage
    • diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html index f4a0c99b0..633b5d906 100644 --- a/docs/functions_func_n.html +++ b/docs/functions_func_n.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html index eb0b8954a..677b78d11 100644 --- a/docs/functions_func_o.html +++ b/docs/functions_func_o.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html index c483ee604..a5b27aabb 100644 --- a/docs/functions_func_p.html +++ b/docs/functions_func_p.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html index 931ce3fa2..d6dd82e5d 100644 --- a/docs/functions_func_r.html +++ b/docs/functions_func_r.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      @@ -90,9 +90,6 @@  

      - r -

diff --git a/docs/functions_h.html b/docs/functions_h.html index 436a20eec..8b394cae5 100644 --- a/docs/functions_h.html +++ b/docs/functions_h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -90,6 +90,9 @@
Here is a list of all class members with links to the classes they belong to:

- h -

    +
  • handle() +: NMEAParser +
  • handle_config() : HTTPServer
  • diff --git a/docs/functions_i.html b/docs/functions_i.html index ca887b4fd..2f2936600 100644 --- a/docs/functions_i.html +++ b/docs/functions_i.html @@ -30,7 +30,7 @@
    SensESP -  0.4.2 +  0.4.3
    Universal Signal K sensor framework for ESP8266 and ESP32
    diff --git a/docs/functions_l.html b/docs/functions_l.html index 8cec9f730..f3657eef3 100644 --- a/docs/functions_l.html +++ b/docs/functions_l.html @@ -30,7 +30,7 @@
    SensESP -  0.4.2 +  0.4.3
    Universal Signal K sensor framework for ESP8266 and ESP32
    diff --git a/docs/functions_m.html b/docs/functions_m.html index 3180333fb..85bc3a040 100644 --- a/docs/functions_m.html +++ b/docs/functions_m.html @@ -30,7 +30,7 @@
    SensESP -  0.4.2 +  0.4.3
    Universal Signal K sensor framework for ESP8266 and ESP32
    @@ -90,6 +90,18 @@
    Here is a list of all class members with links to the classes they belong to:

    - m -

      +
    • maxDelta +: ChangeFilter +
    • +
    • maxSkips +: ChangeFilter +
    • +
    • Median() +: Median +
    • +
    • minDelta +: ChangeFilter +
    • MovingAverage() : MovingAverage
    • diff --git a/docs/functions_n.html b/docs/functions_n.html index fcc5143fe..7623046f1 100644 --- a/docs/functions_n.html +++ b/docs/functions_n.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_o.html b/docs/functions_o.html index 4dfcfe3ee..4f04bdfbc 100644 --- a/docs/functions_o.html +++ b/docs/functions_o.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_p.html b/docs/functions_p.html index 058ce452b..9207ba987 100644 --- a/docs/functions_p.html +++ b/docs/functions_p.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      diff --git a/docs/functions_r.html b/docs/functions_r.html index cf82caf23..fcb366b08 100644 --- a/docs/functions_r.html +++ b/docs/functions_r.html @@ -30,7 +30,7 @@
      SensESP -  0.4.2 +  0.4.3
      Universal Signal K sensor framework for ESP8266 and ESP32
      @@ -93,9 +93,6 @@

      - r -

class  GPSInput   - - - -

-Variables

constexpr int GPS_SERIAL_BITRATE = 115200
 
-

Variable Documentation

- -

◆ GPS_SERIAL_BITRATE

- -
-
- - - - -
constexpr int GPS_SERIAL_BITRATE = 115200
-
- -

Definition at line 10 of file gps.h.

- -
-
diff --git a/docs/gps_8h__dep__incl.map b/docs/gps_8h__dep__incl.map index ae452c4ee..bfcdf38cd 100644 --- a/docs/gps_8h__dep__incl.map +++ b/docs/gps_8h__dep__incl.map @@ -1,7 +1,8 @@ - + - - + + + diff --git a/docs/gps_8h__dep__incl.md5 b/docs/gps_8h__dep__incl.md5 index 2772e0238..cd5df4ce3 100644 --- a/docs/gps_8h__dep__incl.md5 +++ b/docs/gps_8h__dep__incl.md5 @@ -1 +1 @@ -515d076b2679c305c9d1c9e5c4b42000 \ No newline at end of file +799cd34b5f4dc9204637da55308dbc8d \ No newline at end of file diff --git a/docs/gps_8h__dep__incl.png b/docs/gps_8h__dep__incl.png index 03e3af3d3..abe4ad457 100644 Binary files a/docs/gps_8h__dep__incl.png and b/docs/gps_8h__dep__incl.png differ diff --git a/docs/gps_8h_source.html b/docs/gps_8h_source.html index 766e836ce..6328a8ccf 100644 --- a/docs/gps_8h_source.html +++ b/docs/gps_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,17 +91,16 @@
gps.h
-Go to the documentation of this file.
1 #ifndef _gps_H_
2 #define _gps_H_
3 
4 #include "sensor.h"
5 #include "system/nmea_parser.h"
6 
7 // Support for a GPS module communicating with NMEA-0183
8 // messages over a serial interface
9 
10 constexpr int GPS_SERIAL_BITRATE = 115200;
11 
12 class GPSInput : public Sensor {
13  public:
14  GPSInput(int reset_pin, String config_path="");
15  virtual void enable() override final;
17  private:
18  int reset_pin;
19  NMEAParser nmea_parser;
20 };
21 
22 // must parse the following sentences:
23 // - GPGGA - Global Positioning System Fix Data
24 // - GPGLL - Latitude/Longitude
25 // - GPRMC - The Recommended Minimum
26 // - GPVTG - Course Over Ground and Ground Speed
27 // - GPGSA - GNSS DOP and Active Satellites
28 // - GLGSA - GNSS DOP and Active Satellites
29 // - GPGSV - GNSS Satellites in View
30 // - GLGSV - GNSS Satellites in View
31 // - PSTI,030 - Recommended Minimum 3D GNSS Data
32 // - PSTI,032 - RTK Baseline Data
33 
34 #endif
constexpr int GPS_SERIAL_BITRATE
Definition: gps.h:10
-
virtual void enable() override final
Definition: gps.cpp:23
+Go to the documentation of this file.
1 #ifndef _gps_H_
2 #define _gps_H_
3 
4 #include "sensor.h"
5 #include "system/nmea_parser.h"
6 
7 // Support for a GPS module communicating with NMEA-0183
8 // messages over a serial interface
9 
10 class GPSInput : public Sensor {
11  public:
12  GPSInput(Stream* rx_stream, String config_path="");
13  virtual void enable() override final;
15  private:
16  Stream* rx_stream;
17  NMEAParser nmea_parser;
18 };
19 
20 // must parse the following sentences:
21 // - GPGGA - Global Positioning System Fix Data
22 // - GPGLL - Latitude/Longitude
23 // - GPRMC - The Recommended Minimum
24 // - GPVTG - Course Over Ground and Ground Speed
25 // - GPGSA - GNSS DOP and Active Satellites
26 // - GLGSA - GNSS DOP and Active Satellites
27 // - GPGSV - GNSS Satellites in View
28 // - GLGSV - GNSS Satellites in View
29 // - PSTI,030 - Recommended Minimum 3D GNSS Data
30 // - PSTI,032 - RTK Baseline Data
31 
32 #endif
virtual void enable() override final
Definition: gps.cpp:23
Definition: sensor.h:15
-
NMEAData nmea_data
Definition: gps.h:16
+
GPSInput(Stream *rx_stream, String config_path="")
Definition: gps.cpp:7
+
NMEAData nmea_data
Definition: gps.h:14
const String config_path
Definition: configurable.h:29
-
GPSInput(int reset_pin, String config_path="")
Definition: gps.cpp:7
-
Definition: gps.h:12
+
Definition: gps.h:10
diff --git a/docs/graph_legend.html b/docs/graph_legend.html index ba05cdce2..fa1ed9aca 100644 --- a/docs/graph_legend.html +++ b/docs/graph_legend.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 54263f1b6..aa8bd019f 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -115,86 +115,88 @@  CTransformBase  CTransform< C, P >  CTransform< float, float > - CSymmetricTransform< float > - CAngleCorrection - CCurveInterpolator - CDifference - CIntegrator - CLinear - CAnalogVoltage - CMovingAverage - CVoltageDividerR2 + CSymmetricTransform< float > + CAngleCorrection + CChangeFilter + CCurveInterpolator + CDifference + CIntegrator + CLinear + CAnalogVoltage + CMedian + CMovingAverage + CVoltageDividerR2  CTransform< int, float >  CFrequency  CTransform< T, T > - CSymmetricTransform< T > - CDebounce - CSKOutput< T > + CSymmetricTransform< T > + CDebounce + CSKOutput< T >  CTransform< time_t, String > - CTimeString - CSKOutputTime - CWSClient - CEnable - CSensor - CTransformBase - CENUVector - CHTTPServer - CLedBlinker - CNMEAData - CNMEAParser - CObservable - CSensor - CSKEmitter - CSKOutput< T > - CSKOutputTime - CValueProducer< T > - CDigitalInputValue - CObservableValue< T > - CTransform< T, T > - CValueProducer< ENUVector > - CObservableValue< ENUVector > - CValueProducer< float > - CNumericSensor - CObservableValue< float > - CTransform< float, float > - CTransform< int, float > - CValueProducer< int > - CDigitalInputCounter - CIntegerSensor - CObservableValue< int > - CValueProducer< P > - CTransform< C, P > - CValueProducer< Position > - CObservableValue< Position > - CValueProducer< String > - CObservableValue< String > - CStringSensor - CTransform< time_t, String > - CValueProducer< time_t > - CObservableValue< time_t > - CValueProducer< uint32_t > - CFreeMem - CPosition - CCurveInterpolator::Sample - CSensESPApp - CSentenceParser - CGPGGASentenceParser - CGPGLLSentenceParser - CGPRMCSentenceParser - CPSTI030SentenceParser - CPSTI032SentenceParser - CPSTISentenceParser - CSKDelta - CValueConsumer< T > - CTransform< T, T > - CValueConsumer< C > - CTransform< C, P > - CValueConsumer< float > - CTransform< float, float > - CValueConsumer< int > - CTransform< int, float > - CValueConsumer< time_t > - CTransform< time_t, String > + CTimeString + CSKOutputTime + CWSClient + CEnable + CSensor + CTransformBase + CENUVector + CHTTPServer + CLedBlinker + CNMEAData + CNMEAParser + CObservable + CSensor + CSKEmitter + CSKOutput< T > + CSKOutputTime + CValueProducer< T > + CDigitalInputValue + CObservableValue< T > + CTransform< T, T > + CValueProducer< ENUVector > + CObservableValue< ENUVector > + CValueProducer< float > + CNumericSensor + CObservableValue< float > + CTransform< float, float > + CTransform< int, float > + CValueProducer< int > + CDigitalInputCounter + CIntegerSensor + CObservableValue< int > + CValueProducer< P > + CTransform< C, P > + CValueProducer< Position > + CObservableValue< Position > + CValueProducer< String > + CObservableValue< String > + CStringSensor + CTransform< time_t, String > + CValueProducer< time_t > + CObservableValue< time_t > + CValueProducer< uint32_t > + CFreeMem + CPosition + CCurveInterpolator::Sample + CSensESPApp + CSentenceParser + CGPGGASentenceParser + CGPGLLSentenceParser + CGPRMCSentenceParser + CPSTI030SentenceParser + CPSTI032SentenceParser + CPSTISentenceParser + CSKDelta + CValueConsumer< T > + CTransform< T, T > + CValueConsumer< C > + CTransform< C, P > + CValueConsumer< float > + CTransform< float, float > + CValueConsumer< int > + CTransform< int, float > + CValueConsumer< time_t > + CTransform< time_t, String > diff --git a/docs/hierarchy.js b/docs/hierarchy.js index cf82abd90..58d2732a2 100644 --- a/docs/hierarchy.js +++ b/docs/hierarchy.js @@ -26,12 +26,14 @@ var hierarchy = [ "Transform< float, float >", "class_transform.html", [ [ "SymmetricTransform< float >", "class_symmetric_transform.html", [ [ "AngleCorrection", "class_angle_correction.html", null ], + [ "ChangeFilter", "class_change_filter.html", null ], [ "CurveInterpolator", "class_curve_interpolator.html", null ], [ "Difference", "class_difference.html", null ], [ "Integrator", "class_integrator.html", null ], [ "Linear", "class_linear.html", [ [ "AnalogVoltage", "class_analog_voltage.html", null ] ] ], + [ "Median", "class_median.html", null ], [ "MovingAverage", "class_moving_average.html", null ], [ "VoltageDividerR2", "class_voltage_divider_r2.html", null ] ] ] diff --git a/docs/http_8cpp.html b/docs/http_8cpp.html index 55e010490..bb519cff0 100644 --- a/docs/http_8cpp.html +++ b/docs/http_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/http_8cpp_source.html b/docs/http_8cpp_source.html index 1ea83561e..ebe280541 100644 --- a/docs/http_8cpp_source.html +++ b/docs/http_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,25 +91,25 @@
http.cpp
-Go to the documentation of this file.
1 #include "http.h"
2 
3 #include <functional>
4 
5 #include <FS.h>
6 #ifdef ESP32
7 #include "SPIFFS.h"
8 #endif
9 
10 #include "Arduino.h"
11 #include "AsyncJson.h"
12 #include "ArduinoJson.h"
13 #include <ESPAsyncWebServer.h>
14 
15 #include "sensesp_app.h"
16 #include "system/configurable.h"
17 
18 // Include the web UI stored in PROGMEM space
19 #include "web/index.h"
20 #include "web/setup.h"
21 #include "web/js_jsoneditor.h"
22 #include "web/js_sensesp.h"
23 
24 // HTTP port for the configuration interface
25 #ifndef HTTP_SERVER_PORT
26 #define HTTP_SERVER_PORT 80
27 #endif
28 
29 HTTPServer::HTTPServer(std::function<void()> reset_device) {
30  this->reset_device = reset_device;
31  server = new AsyncWebServer(HTTP_SERVER_PORT);
32  using std::placeholders::_1;
33 
34  server->onNotFound(std::bind(&HTTPServer::handle_not_found, this, _1));
35 
36  // Handle setting configuration values of a Configurable via a Json PUT to /config
37  AsyncCallbackJsonWebHandler* config_put_handler
38  = new AsyncCallbackJsonWebHandler(
39  "/config",
40  [](AsyncWebServerRequest *request, JsonVariant &json) {
41  // omit the "/config" part of the url
42  String url_tail = request->url().substring(7);
43 
44  if (url_tail=="") {
45  request->send(405, "text/plain",
46  F("PUT to /config not allowed.\n"));
47  return;
48  }
49 
50  std::map<String, Configurable*>::iterator it
51  = configurables.find(url_tail);
52  if (it==configurables.end()) {
53  request->send(404, "text/plain",
54  F("Configuration key not found.\n"));
55  return;
56  }
57  Configurable* confable = it->second;
58 
59  JsonObject& body = json.as<JsonObject>();
60  if (body.success()) {
61  if (!confable->set_configuration(body)) {
62  request->send(400, "text/plain",
63  F("Unable to extract keys from JSON.\n"));
64  return;
65  }
66  confable->save_configuration();
67  request->send(200, "text/plain", F("Configuration successful.\n"));
68  return;
69  } else {
70  request->send(400, "text/plain", F("Unable to parse JSON body.\n"));
71  return;
72  }
73  });
74  config_put_handler->setMethod(HTTP_PUT);
75  server->addHandler(config_put_handler);
76 
77 
78  // Handle requests to retrieve the current Json configuration of a Configurable
79  // via HTTP GET on /config
80  server->on("/config", HTTP_GET, [this] (AsyncWebServerRequest *request) {
81  // omit the "/config" part of the url
82  String url_tail = request->url().substring(7);
83 
84  if (url_tail=="" || url_tail=="/") {
85  this->handle_config_list(request);
86  return;
87  }
88 
89  std::map<String, Configurable*>::iterator it
90  = configurables.find(url_tail);
91  if (it==configurables.end()) {
92  request->send(404, "text/plain",
93  F("Configuration key not found.\n"));
94  return;
95  }
96  Configurable* confable = it->second;
97 
98  AsyncResponseStream *response = request->beginResponseStream("application/json");
99  DynamicJsonBuffer json_buffer;
100  JsonObject& root = json_buffer.createObject();
101  root["config"] = confable->get_configuration(json_buffer);
102  root["schema"] = RawJson(confable->get_config_schema());
103  root.printTo(*response);
104  request->send(response);
105  });
106 
107 
108  server->on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
109  debugD("Serving index.html");
110  request->send_P(200, "text/html", PAGE_index);
111  });
112 
113  server->on("/setup", HTTP_GET, [](AsyncWebServerRequest *request) {
114  debugD("Serving setup.html");
115  request->send_P(200, "text/html", PAGE_setup);
116  });
117 
118  server->on("/js/jsoneditor.min.js", HTTP_GET, [](AsyncWebServerRequest *request) {
119  debugD("Serving jsoneditor.min.js");
120  request->send_P(200, "text/javascript", PAGE_js_jsoneditor);
121  });
122 
123 
124  server->on("/js/sensesp.js", HTTP_GET, [](AsyncWebServerRequest *request) {
125  debugD("Serving sensesp.js");
126  request->send_P(200, "text/javascript", PAGE_js_sensesp);
127  });
128 
129 
130  server->on("/device/reset", HTTP_GET,
131  std::bind(&HTTPServer::handle_device_reset, this, _1));
132  server->on("/device/restart", HTTP_GET,
133  std::bind(&HTTPServer::handle_device_restart, this, _1));
134  server->on("/info", HTTP_GET,
135  std::bind(&HTTPServer::handle_info, this, _1));
136 }
137 
138 
139 void HTTPServer::handle_not_found(AsyncWebServerRequest* request) {
140  debugD("NOT_FOUND: ");
141  if(request->method() == HTTP_GET)
142  debugD("GET");
143  else if(request->method() == HTTP_POST)
144  debugD("POST");
145  else if(request->method() == HTTP_DELETE)
146  debugD("DELETE");
147  else if(request->method() == HTTP_PUT)
148  debugD("PUT");
149  else if(request->method() == HTTP_PATCH)
150  debugD("PATCH");
151  else if(request->method() == HTTP_HEAD)
152  debugD("HEAD");
153  else if(request->method() == HTTP_OPTIONS)
154  debugD("OPTIONS");
155  else
156  debugD("UNKNOWN");
157  debugD(" http://%s%s\n", request->host().c_str(), request->url().c_str());
158 
159  if(request->contentLength()){
160  debugD("_CONTENT_TYPE: %s\n", request->contentType().c_str());
161  debugD("_CONTENT_LENGTH: %u\n", request->contentLength());
162  }
163 
164  int headers = request->headers();
165  int i;
166  for(i=0;i<headers;i++){
167  AsyncWebHeader* h = request->getHeader(i);
168  debugD("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
169  }
170 
171  int params = request->params();
172  for(i=0;i<params;i++){
173  AsyncWebParameter* p = request->getParam(i);
174  if(p->isFile()){
175  debugD("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
176  } else if(p->isPost()){
177  debugD("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
178  } else {
179  debugD("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
180  }
181  }
182 
183  request->send(404);
184 }
185 
186 void HTTPServer::handle_config_list(AsyncWebServerRequest* request) {
187  AsyncResponseStream *response = request->beginResponseStream("application/json");
188  DynamicJsonBuffer json_buffer;
189  JsonObject& root = json_buffer.createObject();
190  JsonArray& arr = root.createNestedArray("keys");
191  for (auto it = configurables.begin(); it!=configurables.end(); ++it) {
192  arr.add(it->first);
193  }
194  root.printTo(*response);
195  request->send(response);
196 }
197 
198 void HTTPServer::handle_config(AsyncWebServerRequest* request) {
199  debugD("%s", request->url().c_str());
200  request->send(200, "text/plain", "/config");
201 }
202 
203 void HTTPServer::handle_device_reset(AsyncWebServerRequest* request) {
204  request->send(200, "text/plain",
205  "OK, resetting the device settings back to factory defaults.\n");
206  app.onDelay(500, [this](){ this->reset_device(); });
207 }
208 
209 void HTTPServer::handle_device_restart(AsyncWebServerRequest* request) {
210  request->send(200, "text/plain", "OK, restarting\n");
211  app.onDelay(50, [](){ ESP.restart(); });
212 }
213 
214 
215 void HTTPServer::handle_info(AsyncWebServerRequest* request) {
216  request->send(200, "text/plain", "/info");
217 }
218 
virtual bool set_configuration(const JsonObject &config)
+Go to the documentation of this file.
1 #include "http.h"
2 
3 #include <functional>
4 
5 #include <FS.h>
6 #ifdef ESP32
7 #include "SPIFFS.h"
8 #endif
9 
10 #include "Arduino.h"
11 #include "AsyncJson.h"
12 #include "ArduinoJson.h"
13 #include <ESPAsyncWebServer.h>
14 
15 #include "sensesp_app.h"
16 #include "system/configurable.h"
17 
18 // Include the web UI stored in PROGMEM space
19 #include "web/index.h"
20 #include "web/setup.h"
21 #include "web/js_jsoneditor.h"
22 #include "web/js_sensesp.h"
23 
24 // HTTP port for the configuration interface
25 #ifndef HTTP_SERVER_PORT
26 #define HTTP_SERVER_PORT 80
27 #endif
28 
29 HTTPServer::HTTPServer(std::function<void()> reset_device) {
30  this->reset_device = reset_device;
31  server = new AsyncWebServer(HTTP_SERVER_PORT);
32  using std::placeholders::_1;
33 
34  server->onNotFound(std::bind(&HTTPServer::handle_not_found, this, _1));
35 
36  // Handle setting configuration values of a Configurable via a Json PUT to /config
37  AsyncCallbackJsonWebHandler* config_put_handler
38  = new AsyncCallbackJsonWebHandler(
39  "/config",
40  [](AsyncWebServerRequest *request, JsonVariant &json) {
41  // omit the "/config" part of the url
42  String url_tail = request->url().substring(7);
43 
44  if (url_tail=="") {
45  request->send(405, "text/plain",
46  F("PUT to /config not allowed.\n"));
47  return;
48  }
49 
50  std::map<String, Configurable*>::iterator it
51  = configurables.find(url_tail);
52  if (it==configurables.end()) {
53  request->send(404, "text/plain",
54  F("Configuration key not found.\n"));
55  return;
56  }
57  Configurable* confable = it->second;
58 
59  JsonObject& body = json.as<JsonObject>();
60  if (body.success()) {
61  if (!confable->set_configuration(body)) {
62  request->send(400, "text/plain",
63  F("Unable to extract keys from JSON.\n"));
64  return;
65  }
66  confable->save_configuration();
67  request->send(200, "text/plain", F("Configuration successful.\n"));
68  return;
69  } else {
70  request->send(400, "text/plain", F("Unable to parse JSON body.\n"));
71  return;
72  }
73  });
74  config_put_handler->setMethod(HTTP_PUT);
75  server->addHandler(config_put_handler);
76 
77 
78  // Handle requests to retrieve the current Json configuration of a Configurable
79  // via HTTP GET on /config
80  server->on("/config", HTTP_GET, [this] (AsyncWebServerRequest *request) {
81  // omit the "/config" part of the url
82  String url_tail = request->url().substring(7);
83 
84  if (url_tail=="" || url_tail=="/") {
85  this->handle_config_list(request);
86  return;
87  }
88 
89  std::map<String, Configurable*>::iterator it
90  = configurables.find(url_tail);
91  if (it==configurables.end()) {
92  request->send(404, "text/plain",
93  F("Configuration key not found.\n"));
94  return;
95  }
96  Configurable* confable = it->second;
97 
98  AsyncResponseStream *response = request->beginResponseStream("application/json");
99  DynamicJsonBuffer json_buffer;
100  JsonObject& root = json_buffer.createObject();
101  root["config"] = confable->get_configuration(json_buffer);
102  root["schema"] = RawJson(confable->get_config_schema());
103  root.printTo(*response);
104  request->send(response);
105  });
106 
107 
108  server->on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
109  debugD("Serving index.html");
110  request->send_P(200, "text/html", PAGE_index);
111  });
112 
113  server->on("/setup", HTTP_GET, [](AsyncWebServerRequest *request) {
114  debugD("Serving setup.html");
115  request->send_P(200, "text/html", PAGE_setup);
116  });
117 
118  server->on("/js/jsoneditor.min.js", HTTP_GET, [](AsyncWebServerRequest *request) {
119  debugD("Serving jsoneditor.min.js");
120  request->send_P(200, "text/javascript", PAGE_js_jsoneditor);
121  });
122 
123 
124  server->on("/js/sensesp.js", HTTP_GET, [](AsyncWebServerRequest *request) {
125  debugD("Serving sensesp.js");
126  request->send_P(200, "text/javascript", PAGE_js_sensesp);
127  });
128 
129 
130  server->on("/device/reset", HTTP_GET,
131  std::bind(&HTTPServer::handle_device_reset, this, _1));
132  server->on("/device/restart", HTTP_GET,
133  std::bind(&HTTPServer::handle_device_restart, this, _1));
134  server->on("/info", HTTP_GET,
135  std::bind(&HTTPServer::handle_info, this, _1));
136 }
137 
138 
139 void HTTPServer::handle_not_found(AsyncWebServerRequest* request) {
140  debugD("NOT_FOUND: ");
141  if(request->method() == HTTP_GET) {
142  debugD("GET");
143  }
144  else if(request->method() == HTTP_POST) {
145  debugD("POST");
146  }
147  else if(request->method() == HTTP_DELETE) {
148  debugD("DELETE");
149  }
150  else if(request->method() == HTTP_PUT) {
151  debugD("PUT");
152  }
153  else if(request->method() == HTTP_PATCH) {
154  debugD("PATCH");
155  }
156  else if(request->method() == HTTP_HEAD) {
157  debugD("HEAD");
158  }
159  else if(request->method() == HTTP_OPTIONS) {
160  debugD("OPTIONS");
161  }
162  else {
163  debugD("UNKNOWN");
164  }
165  debugD(" http://%s%s\n", request->host().c_str(), request->url().c_str());
166 
167  if(request->contentLength()){
168  debugD("_CONTENT_TYPE: %s\n", request->contentType().c_str());
169  debugD("_CONTENT_LENGTH: %u\n", request->contentLength());
170  }
171 
172  int headers = request->headers();
173  int i;
174  for(i=0;i<headers;i++){
175  AsyncWebHeader* h = request->getHeader(i);
176  debugD("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
177  }
178 
179  int params = request->params();
180  for(i=0;i<params;i++){
181  AsyncWebParameter* p = request->getParam(i);
182  if(p->isFile()){
183  debugD("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
184  } else if(p->isPost()){
185  debugD("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
186  } else {
187  debugD("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
188  }
189  }
190 
191  request->send(404);
192 }
193 
194 void HTTPServer::handle_config_list(AsyncWebServerRequest* request) {
195  AsyncResponseStream *response = request->beginResponseStream("application/json");
196  DynamicJsonBuffer json_buffer;
197  JsonObject& root = json_buffer.createObject();
198  JsonArray& arr = root.createNestedArray("keys");
199  for (auto it = configurables.begin(); it!=configurables.end(); ++it) {
200  arr.add(it->first);
201  }
202  root.printTo(*response);
203  request->send(response);
204 }
205 
206 void HTTPServer::handle_config(AsyncWebServerRequest* request) {
207  debugD("%s", request->url().c_str());
208  request->send(200, "text/plain", "/config");
209 }
210 
211 void HTTPServer::handle_device_reset(AsyncWebServerRequest* request) {
212  request->send(200, "text/plain",
213  "OK, resetting the device settings back to factory defaults.\n");
214  app.onDelay(500, [this](){ this->reset_device(); });
215 }
216 
217 void HTTPServer::handle_device_restart(AsyncWebServerRequest* request) {
218  request->send(200, "text/plain", "OK, restarting\n");
219  app.onDelay(50, [](){ ESP.restart(); });
220 }
221 
222 
223 void HTTPServer::handle_info(AsyncWebServerRequest* request) {
224  request->send(200, "text/plain", "/info");
225 }
226 
virtual bool set_configuration(const JsonObject &config)
virtual JsonObject & get_configuration(JsonBuffer &buf)
void handle_not_found(AsyncWebServerRequest *request)
Definition: http.cpp:139
-
void handle_device_reset(AsyncWebServerRequest *request)
Definition: http.cpp:203
+
void handle_device_reset(AsyncWebServerRequest *request)
Definition: http.cpp:211
virtual void save_configuration()
std::map< String, Configurable * > configurables
virtual String get_config_schema()
-
void handle_info(AsyncWebServerRequest *request)
Definition: http.cpp:215
+
void handle_info(AsyncWebServerRequest *request)
Definition: http.cpp:223
HTTPServer(std::function< void()> reset_device)
Definition: http.cpp:29
-
void handle_device_restart(AsyncWebServerRequest *request)
Definition: http.cpp:209
+
void handle_device_restart(AsyncWebServerRequest *request)
Definition: http.cpp:217
-
void handle_config(AsyncWebServerRequest *request)
Definition: http.cpp:198
+
void handle_config(AsyncWebServerRequest *request)
Definition: http.cpp:206
ReactESP app
diff --git a/docs/http_8h.html b/docs/http_8h.html index 3ba855666..97bca1578 100644 --- a/docs/http_8h.html +++ b/docs/http_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/http_8h_source.html b/docs/http_8h_source.html index 4d026c2bd..9eeeabc44 100644 --- a/docs/http_8h_source.html +++ b/docs/http_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -93,13 +93,13 @@
Go to the documentation of this file.
1 #ifndef _http_H_
2 #define _http_H_
3 
4 #include <functional>
5 
6 #include <ESPAsyncWebServer.h>
7 
8 class HTTPServer {
9  public:
10  HTTPServer(std::function<void()> reset_device);
11  ~HTTPServer() { delete server; }
12  void enable() { server->begin(); }
13  void handle_not_found(AsyncWebServerRequest* request);
14  void handle_config(AsyncWebServerRequest* request);
15  void handle_device_reset(AsyncWebServerRequest* request);
16  void handle_device_restart(AsyncWebServerRequest* request);
17  void handle_info(AsyncWebServerRequest* request);
18  private:
19  AsyncWebServer* server;
20  std::function<void()> reset_device;
21  void handle_config_list(AsyncWebServerRequest* request);
22 };
23 
24 
25 #endif
~HTTPServer()
Definition: http.h:11
void handle_not_found(AsyncWebServerRequest *request)
Definition: http.cpp:139
-
void handle_device_reset(AsyncWebServerRequest *request)
Definition: http.cpp:203
-
void handle_info(AsyncWebServerRequest *request)
Definition: http.cpp:215
+
void handle_device_reset(AsyncWebServerRequest *request)
Definition: http.cpp:211
+
void handle_info(AsyncWebServerRequest *request)
Definition: http.cpp:223
void enable()
Definition: http.h:12
HTTPServer(std::function< void()> reset_device)
Definition: http.cpp:29
-
void handle_device_restart(AsyncWebServerRequest *request)
Definition: http.cpp:209
+
void handle_device_restart(AsyncWebServerRequest *request)
Definition: http.cpp:217
Definition: http.h:8
-
void handle_config(AsyncWebServerRequest *request)
Definition: http.cpp:198
+
void handle_config(AsyncWebServerRequest *request)
Definition: http.cpp:206
diff --git a/docs/index.html b/docs/index.html index 6f3b650f5..2b27c72ef 100644 --- a/docs/index.html +++ b/docs/index.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/index_8h.html b/docs/index_8h.html index 10ccfe9fe..545941d50 100644 --- a/docs/index_8h.html +++ b/docs/index_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/index_8h_source.html b/docs/index_8h_source.html index ecf960620..53bedd347 100644 --- a/docs/index_8h_source.html +++ b/docs/index_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/inherit_graph_10.map b/docs/inherit_graph_10.map index 19f65eda1..3a1b73385 100644 --- a/docs/inherit_graph_10.map +++ b/docs/inherit_graph_10.map @@ -1,65 +1,67 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/inherit_graph_10.md5 b/docs/inherit_graph_10.md5 index 4b9ca3432..468503d0f 100644 --- a/docs/inherit_graph_10.md5 +++ b/docs/inherit_graph_10.md5 @@ -1 +1 @@ -29d19f120f1543ab23560508535eb62a \ No newline at end of file +6a21714d0b612afba1092e7c55fa9038 \ No newline at end of file diff --git a/docs/inherit_graph_10.png b/docs/inherit_graph_10.png index bf57ae3e1..7d102ff18 100644 Binary files a/docs/inherit_graph_10.png and b/docs/inherit_graph_10.png differ diff --git a/docs/inherits.html b/docs/inherits.html index ffeb1a3a0..d50e44d3d 100644 --- a/docs/inherits.html +++ b/docs/inherits.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -152,69 +152,71 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/integrator_8cpp.html b/docs/integrator_8cpp.html index ada6fcac6..3fd5ec2d8 100644 --- a/docs/integrator_8cpp.html +++ b/docs/integrator_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/integrator_8cpp_source.html b/docs/integrator_8cpp_source.html index aac117049..13cd18c80 100644 --- a/docs/integrator_8cpp_source.html +++ b/docs/integrator_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/integrator_8h.html b/docs/integrator_8h.html index 229631aac..697b13b2f 100644 --- a/docs/integrator_8h.html +++ b/docs/integrator_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/integrator_8h_source.html b/docs/integrator_8h_source.html index 786ef1a8e..d7ee5a4aa 100644 --- a/docs/integrator_8h_source.html +++ b/docs/integrator_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/js__jsoneditor_8h.html b/docs/js__jsoneditor_8h.html index 2d3ab95b0..fb1081d7a 100644 --- a/docs/js__jsoneditor_8h.html +++ b/docs/js__jsoneditor_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/js__jsoneditor_8h_source.html b/docs/js__jsoneditor_8h_source.html index 2e0b88fa0..abd41df4c 100644 --- a/docs/js__jsoneditor_8h_source.html +++ b/docs/js__jsoneditor_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/js__sensesp_8h.html b/docs/js__sensesp_8h.html index bcae57a25..d5266de75 100644 --- a/docs/js__sensesp_8h.html +++ b/docs/js__sensesp_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/js__sensesp_8h_source.html b/docs/js__sensesp_8h_source.html index 926526c48..d63efb1a3 100644 --- a/docs/js__sensesp_8h_source.html +++ b/docs/js__sensesp_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/led__blinker_8cpp.html b/docs/led__blinker_8cpp.html index 74ac46648..470b4d0e4 100644 --- a/docs/led__blinker_8cpp.html +++ b/docs/led__blinker_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/led__blinker_8cpp_source.html b/docs/led__blinker_8cpp_source.html index 0ad977c03..3dee99ac8 100644 --- a/docs/led__blinker_8cpp_source.html +++ b/docs/led__blinker_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/led__blinker_8h.html b/docs/led__blinker_8h.html index 434d1752a..44a4957ee 100644 --- a/docs/led__blinker_8h.html +++ b/docs/led__blinker_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/led__blinker_8h_source.html b/docs/led__blinker_8h_source.html index bf110ef84..5d03c053e 100644 --- a/docs/led__blinker_8h_source.html +++ b/docs/led__blinker_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/linear_8cpp.html b/docs/linear_8cpp.html index 5351100af..9beb27790 100644 --- a/docs/linear_8cpp.html +++ b/docs/linear_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/linear_8cpp_source.html b/docs/linear_8cpp_source.html index 9db6667fd..2a2c7ae2d 100644 --- a/docs/linear_8cpp_source.html +++ b/docs/linear_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/linear_8h.html b/docs/linear_8h.html index 4797ddbe0..b496954fa 100644 --- a/docs/linear_8h.html +++ b/docs/linear_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/linear_8h_source.html b/docs/linear_8h_source.html index 3dca60e6f..d4396d935 100644 --- a/docs/linear_8h_source.html +++ b/docs/linear_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/median_8cpp.html b/docs/median_8cpp.html new file mode 100644 index 000000000..49ec86022 --- /dev/null +++ b/docs/median_8cpp.html @@ -0,0 +1,136 @@ + + + + + + + +SensESP: src/transforms/median.cpp File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
median.cpp File Reference
+
+
+
#include "median.h"
+
+Include dependency graph for median.cpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/docs/median_8cpp__incl.map b/docs/median_8cpp__incl.map new file mode 100644 index 000000000..2bc753dae --- /dev/null +++ b/docs/median_8cpp__incl.map @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/median_8cpp__incl.md5 b/docs/median_8cpp__incl.md5 new file mode 100644 index 000000000..763afe1d7 --- /dev/null +++ b/docs/median_8cpp__incl.md5 @@ -0,0 +1 @@ +805b5fdaea4ee1ff8fbc8e334a9cbbde \ No newline at end of file diff --git a/docs/median_8cpp__incl.png b/docs/median_8cpp__incl.png new file mode 100644 index 000000000..76cf79d03 Binary files /dev/null and b/docs/median_8cpp__incl.png differ diff --git a/docs/median_8cpp_source.html b/docs/median_8cpp_source.html new file mode 100644 index 000000000..bba364798 --- /dev/null +++ b/docs/median_8cpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +SensESP: src/transforms/median.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
median.cpp
+
+
+Go to the documentation of this file.
1 #include "median.h"
2 
3 
4 Median::Median(unsigned int sampleSize, String config_path) :
5  sampleSize{sampleSize},
6  NumericTransform(config_path) {
7  className = "Median";
8  load_configuration();
9  buf.reserve(sampleSize);
10  buf.clear();
11 }
12 
13 void Median::set_input(float input, uint8_t inputChannel) {
14 
15  buf.push_back(input);
16  if (buf.size() >= sampleSize) {
17  // Its time to output a value
18  sort(buf.begin(), buf.end());
19  int mid = sampleSize / 2;
20  output = buf[mid];
21  buf.clear();
22  notify();
23  }
24 }
25 
26 
27 JsonObject& Median::get_configuration(JsonBuffer& buf) {
28  JsonObject& root = buf.createObject();
29  root["sampleSize"] = sampleSize;
30  return root;
31 }
32 
33 static const char SCHEMA[] PROGMEM = R"({
34  "type": "object",
35  "properties": {
36  "sampleSize": { "title": "Sample size", "description": "Number of samples to take before outputing a value", "type": "integer" }
37  }
38  })";
39 
41  return FPSTR(SCHEMA);
42 }
43 
44 
45 bool Median::set_configuration(const JsonObject& config) {
46  String expected[] = {"sampleSize"};
47  for (auto str : expected) {
48  if (!config.containsKey(str)) {
49  return false;
50  }
51  }
52  unsigned int sampleSize_new = config["sampleSize"];
53  if (sampleSize != sampleSize_new) {
54  sampleSize = sampleSize_new;
55  buf.reserve(sampleSize);
56  buf.clear();
57  }
58  return true;
59 }
Median(unsigned int sampleSize=10, String config_path="")
Definition: median.cpp:4
+
virtual JsonObject & get_configuration(JsonBuffer &buf) override
Definition: median.cpp:27
+
void notify()
Definition: observable.cpp:3
+
SymmetricTransform< float > NumericTransform
Definition: transform.h:114
+
virtual String get_config_schema() override
Definition: median.cpp:40
+
virtual bool set_configuration(const JsonObject &config) override
Definition: median.cpp:45
+ + +
const char PAGE_index [] PROGMEM
Definition: index.h:2
+
virtual void set_input(float input, uint8_t inputChannel=0) override
Definition: median.cpp:13
+
+
+ + + + diff --git a/docs/median_8h.html b/docs/median_8h.html new file mode 100644 index 000000000..290eaffca --- /dev/null +++ b/docs/median_8h.html @@ -0,0 +1,153 @@ + + + + + + + +SensESP: src/transforms/median.h File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
median.h File Reference
+
+
+
#include <vector>
+#include "transforms/transform.h"
+
+Include dependency graph for median.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  Median
 
+
+
+ + + + diff --git a/docs/median_8h__dep__incl.map b/docs/median_8h__dep__incl.map new file mode 100644 index 000000000..365dfe7ec --- /dev/null +++ b/docs/median_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/median_8h__dep__incl.md5 b/docs/median_8h__dep__incl.md5 new file mode 100644 index 000000000..9572d205b --- /dev/null +++ b/docs/median_8h__dep__incl.md5 @@ -0,0 +1 @@ +7ec4bcd1de4f0807f386416ade4e9414 \ No newline at end of file diff --git a/docs/median_8h__dep__incl.png b/docs/median_8h__dep__incl.png new file mode 100644 index 000000000..88ce1cc71 Binary files /dev/null and b/docs/median_8h__dep__incl.png differ diff --git a/docs/median_8h__incl.map b/docs/median_8h__incl.map new file mode 100644 index 000000000..b03294a4e --- /dev/null +++ b/docs/median_8h__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/median_8h__incl.md5 b/docs/median_8h__incl.md5 new file mode 100644 index 000000000..739a12108 --- /dev/null +++ b/docs/median_8h__incl.md5 @@ -0,0 +1 @@ +33b1ce209d16806a79ef333e846d211f \ No newline at end of file diff --git a/docs/median_8h__incl.png b/docs/median_8h__incl.png new file mode 100644 index 000000000..fa7330111 Binary files /dev/null and b/docs/median_8h__incl.png differ diff --git a/docs/median_8h_source.html b/docs/median_8h_source.html new file mode 100644 index 000000000..e06cfa8f9 --- /dev/null +++ b/docs/median_8h_source.html @@ -0,0 +1,115 @@ + + + + + + + +SensESP: src/transforms/median.h Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
SensESP +  0.4.3 +
+
Universal Signal K sensor framework for ESP8266 and ESP32
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
median.h
+
+
+Go to the documentation of this file.
1 #ifndef _median_H_
2 #define _median_H_
3 
4 #include <vector>
5 
6 #include "transforms/transform.h"
7 
13 class Median : public NumericTransform {
14 
15  public:
16  Median(unsigned int sampleSize = 10, String config_path="");
17  virtual void set_input(float input, uint8_t inputChannel = 0) override;
18  virtual JsonObject& get_configuration(JsonBuffer& buf) override;
19  virtual bool set_configuration(const JsonObject& config) override;
20  virtual String get_config_schema() override;
21 
22  private:
23  std::vector<float> buf;
24  unsigned int sampleSize;
25 };
26 
27 #endif
Median(unsigned int sampleSize=10, String config_path="")
Definition: median.cpp:4
+
virtual JsonObject & get_configuration(JsonBuffer &buf) override
Definition: median.cpp:27
+
virtual String get_config_schema() override
Definition: median.cpp:40
+ + +
const String config_path
Definition: configurable.h:29
+
virtual bool set_configuration(const JsonObject &config) override
Definition: median.cpp:45
+
Definition: median.h:13
+
virtual void set_input(float input, uint8_t inputChannel=0) override
Definition: median.cpp:13
+
+
+ + + + diff --git a/docs/moving__average_8cpp.html b/docs/moving__average_8cpp.html index d712fcf47..793e081bc 100644 --- a/docs/moving__average_8cpp.html +++ b/docs/moving__average_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/moving__average_8cpp_source.html b/docs/moving__average_8cpp_source.html index 65bbabb3e..88d51c31d 100644 --- a/docs/moving__average_8cpp_source.html +++ b/docs/moving__average_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,14 +91,14 @@
moving_average.cpp
-Go to the documentation of this file.
1 #include "moving_average.h"
2 
3 // MovingAverage
4 
5 MovingAverage::MovingAverage(int n, float k, String config_path) :
6  NumericTransform(config_path),
7  n{ n },
8  k{ k } {
9  className = "MovingAverage";
10  buf.resize(n, 0);
11  load_configuration();
12 }
13 
14 void MovingAverage::set_input(float input, uint8_t inputChannel) {
15  output += -k*buf[ptr]/n;
16  buf[ptr] = input;
17  ptr = (ptr+1) % n;
18  output += k * input/n;
19  notify();
20 }
21 
22 
23 JsonObject& MovingAverage::get_configuration(JsonBuffer& buf) {
24  JsonObject& root = buf.createObject();
25  root["k"] = k;
26  root["n"] = n;
27  root["value"] = output;
28  return root;
29 }
30 
31 static const char SCHEMA[] PROGMEM = R"({
32  "type": "object",
33  "properties": {
34  "n": { "title": "Number of samples in average", "type": "integer" },
35  "k": { "title": "Multiplier", "type": "number" }
36  }
37  })";
38 
40  return FPSTR(SCHEMA);
41 }
42 
43 
44 bool MovingAverage::set_configuration(const JsonObject& config) {
45  String expected[] = {"k", "n"};
46  for (auto str : expected) {
47  if (!config.containsKey(str)) {
48  return false;
49  }
50  }
51  k = config["k"];
52  int n_new = config["n"];
53  // need to reset the ring buffer if size changes
54  if (n != n_new) {
55  buf.assign(n, 0);
56  ptr = 0;
57  output = 0;
58  }
59  return true;
60 }
+Go to the documentation of this file.
1 #include "moving_average.h"
2 
3 // MovingAverage
4 
5 MovingAverage::MovingAverage(int n, float k, String config_path) :
6  NumericTransform(config_path),
7  n{ n },
8  k{ k } {
9  className = "MovingAverage";
10  buf.resize(n, 0);
11  initialized = false;
12  load_configuration();
13 }
14 
15 void MovingAverage::set_input(float input, uint8_t inputChannel) {
16 
17  // So the first value to be included in the average doesn't default to 0.0
18  if (!initialized) {
19  buf.assign(n, input);
20  output = input;
21  initialized = true;
22  }
23  else {
24  // Subtract 1/nth of the oldest value and add 1/nth of the newest value
25  output += -k*buf[ptr]/n;
26  output += k * input/n;
27 
28  // Save the most recent input, then advance to the next storage location.
29  // When storage location n is reached, start over again at 0.
30  buf[ptr] = input;
31  ptr = (ptr+1) % n;
32  }
33  notify();
34 }
35 
36 
37 JsonObject& MovingAverage::get_configuration(JsonBuffer& buf) {
38  JsonObject& root = buf.createObject();
39  root["k"] = k;
40  root["n"] = n;
41  root["value"] = output;
42  return root;
43 }
44 
45 static const char SCHEMA[] PROGMEM = R"({
46  "type": "object",
47  "properties": {
48  "n": { "title": "Number of samples in average", "type": "integer" },
49  "k": { "title": "Multiplier", "type": "number" }
50  }
51  })";
52 
54  return FPSTR(SCHEMA);
55 }
56 
57 
58 bool MovingAverage::set_configuration(const JsonObject& config) {
59  String expected[] = {"k", "n"};
60  for (auto str : expected) {
61  if (!config.containsKey(str)) {
62  return false;
63  }
64  }
65  k = config["k"];
66  int n_new = config["n"];
67  // need to reset the ring buffer if size changes
68  if (n != n_new) {
69  buf.assign(n, 0);
70  ptr = 0;
71  initialized = false;
72  n = n_new;
73  }
74  return true;
75 }
void notify()
Definition: observable.cpp:3
MovingAverage(int n, float k=1., String config_path="")
-
virtual void set_input(float input, uint8_t inputChannel=0) override
-
virtual bool set_configuration(const JsonObject &config) override
-
virtual String get_config_schema() override
+
virtual void set_input(float input, uint8_t inputChannel=0) override
+
virtual bool set_configuration(const JsonObject &config) override
+
virtual String get_config_schema() override
-
virtual JsonObject & get_configuration(JsonBuffer &buf) override
+
virtual JsonObject & get_configuration(JsonBuffer &buf) override
const char PAGE_index [] PROGMEM
Definition: index.h:2
diff --git a/docs/moving__average_8h.html b/docs/moving__average_8h.html index 7d629e666..d44380b31 100644 --- a/docs/moving__average_8h.html +++ b/docs/moving__average_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/moving__average_8h_source.html b/docs/moving__average_8h_source.html index 20d2f7c22..2a6fef74f 100644 --- a/docs/moving__average_8h_source.html +++ b/docs/moving__average_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,15 +91,15 @@
moving_average.h
-Go to the documentation of this file.
1 #ifndef _moving_average_H_
2 #define _moving_average_H_
3 
4 #include <vector>
5 
6 #include "transform.h"
7 
8 // y = k * 1/n * \sum_k=1^n(x_k)
10 
11  public:
12  MovingAverage(int n, float k=1., String config_path="");
13  virtual void set_input(float input, uint8_t inputChannel = 0) override;
14  virtual JsonObject& get_configuration(JsonBuffer& buf) override;
15  virtual bool set_configuration(const JsonObject& config) override;
16  virtual String get_config_schema() override;
17 
18  private:
19  std::vector<float> buf;
20  int ptr = 0;
21  const int n;
22  float k;
23 };
24 
25 #endif
+Go to the documentation of this file.
1 #ifndef _moving_average_H_
2 #define _moving_average_H_
3 
4 #include <vector>
5 
6 #include "transform.h"
7 
17 // y = k * 1/n * \sum_k=1^n(x_k)
19 
20  public:
29  MovingAverage(int n, float k=1., String config_path="");
30  virtual void set_input(float input, uint8_t inputChannel = 0) override;
31  virtual JsonObject& get_configuration(JsonBuffer& buf) override;
32  virtual bool set_configuration(const JsonObject& config) override;
33  virtual String get_config_schema() override;
34 
35  private:
36  std::vector<float> buf;
37  int ptr = 0;
38  int n;
39  float k;
40  bool initialized;
41 };
42 
43 #endif
MovingAverage(int n, float k=1., String config_path="")
-
virtual void set_input(float input, uint8_t inputChannel=0) override
-
virtual bool set_configuration(const JsonObject &config) override
+
virtual void set_input(float input, uint8_t inputChannel=0) override
+
virtual bool set_configuration(const JsonObject &config) override
-
virtual String get_config_schema() override
+
virtual String get_config_schema() override
const String config_path
Definition: configurable.h:29
-
virtual JsonObject & get_configuration(JsonBuffer &buf) override
+
virtual JsonObject & get_configuration(JsonBuffer &buf) override
diff --git a/docs/navtreedata.js b/docs/navtreedata.js index 4d290f447..9b17cdc06 100644 --- a/docs/navtreedata.js +++ b/docs/navtreedata.js @@ -53,8 +53,8 @@ var NAVTREE = var NAVTREEINDEX = [ "analog__input_8cpp.html", -"class_time_string.html#adc18ed47c4b6d88acceec81741aab5c3", -"sensor_8h.html" +"class_sens_e_s_p_app.html#ac53d90429563f50e4aca5224a1e85afd", +"onewire__temperature_8h_source.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/docs/navtreeindex0.js b/docs/navtreeindex0.js index c84b249fe..bb0146c57 100644 --- a/docs/navtreeindex0.js +++ b/docs/navtreeindex0.js @@ -11,6 +11,10 @@ var NAVTREEINDEX0 = "angle__correction_8h.html":[1,0,0,4,2], "angle__correction_8h_source.html":[1,0,0,4,2], "annotated.html":[0,0], +"change__filter_8cpp.html":[1,0,0,4,3], +"change__filter_8cpp_source.html":[1,0,0,4,3], +"change__filter_8h.html":[1,0,0,4,4], +"change__filter_8h_source.html":[1,0,0,4,4], "class_analog_input.html":[0,0,0], "class_analog_input.html#a34942eae263f68e8f44fa3f405d057fb":[0,0,0,1], "class_analog_input.html#af40968136e406531f8838434f1c1356b":[0,0,0,0], @@ -22,232 +26,228 @@ var NAVTREEINDEX0 = "class_angle_correction.html#a6a023df6e49e8ada977738dc8cbe150c":[0,0,2,0], "class_angle_correction.html#ad31bbb6a8fd400879eceba5f0b2880fe":[0,0,2,1], "class_angle_correction.html#afd9a559ce1218e9b78137ff1a9c6d77d":[0,0,2,4], -"class_configurable.html":[0,0,3], -"class_configurable.html#a657419f13060caa20c45a41935b9d53a":[0,0,3,4], -"class_configurable.html#a6e0281fe25cfbdf024bdb05147ffb52b":[0,0,3,5], -"class_configurable.html#a73131c4e7dd8134f23a93de861e1c0e4":[0,0,3,1], -"class_configurable.html#a787559a1a907f909d6088d2ec6825b44":[0,0,3,2], -"class_configurable.html#a8972a439fb9b734ff68d27c699640f78":[0,0,3,0], -"class_configurable.html#aaa54fa6156d9c7f5848d670bd9b18aa9":[0,0,3,6], -"class_configurable.html#ac2ba4044c81acc2fc6bf95cce411f6a4":[0,0,3,3], -"class_curve_interpolator.html":[0,0,4], -"class_curve_interpolator.html#a09bdf144307f1264c36d5afaea5c96a3":[0,0,4,1], -"class_curve_interpolator.html#a274cd3426b3e379db1538c71bebad9c8":[0,0,4,5], -"class_curve_interpolator.html#a314df8dc54dc73798197c9c9ce6859ac":[0,0,4,2], -"class_curve_interpolator.html#a6e4fcb3bb046ecacbe1855d74cdc47bb":[0,0,4,7], -"class_curve_interpolator.html#a6f9c593782d05c95ba92810b8f70f287":[0,0,4,4], -"class_curve_interpolator.html#acfda195c475a261d2e2a3af365fd6c19":[0,0,4,6], -"class_curve_interpolator.html#afb1dbb8e85015e2909dff8495875f8f5":[0,0,4,3], -"class_curve_interpolator_1_1_sample.html":[0,0,4,0], -"class_curve_interpolator_1_1_sample.html#a1cf03a106b3a98056fdb448df6fb9c17":[0,0,4,0,3], -"class_curve_interpolator_1_1_sample.html#a43dd7cc1fd950a03a6674056194e935b":[0,0,4,0,4], -"class_curve_interpolator_1_1_sample.html#a5f69567a227e29b795b68e4310a9da40":[0,0,4,0,2], -"class_curve_interpolator_1_1_sample.html#a7ad23733bf31c9a8ccbe9689b55f6d67":[0,0,4,0,0], -"class_curve_interpolator_1_1_sample.html#aa2ed35560a823ced306ef02a50d95cac":[0,0,4,0,1], -"class_curve_interpolator_1_1_sample.html#ada14a8de02c7cc737db52aa3a54a330b":[0,0,4,0,5], -"class_dallas_temperature_sensors.html":[0,0,5], -"class_dallas_temperature_sensors.html#a020ae149bf4372f926d4414ac5c67f5a":[0,0,5,3], -"class_dallas_temperature_sensors.html#a1e1b9cd3dd2bde0d51ef657a490881eb":[0,0,5,2], -"class_dallas_temperature_sensors.html#a778aa28e0e329028f2811c5ed71cb11d":[0,0,5,0], -"class_dallas_temperature_sensors.html#abd79995496fd66d416e6d9cd1ff56342":[0,0,5,4], -"class_dallas_temperature_sensors.html#ae30b8206143d488a4d887b4294da6bb2":[0,0,5,1], -"class_debounce.html":[0,0,6], -"class_debounce.html#a1cf5653ecaffe84d03202cd9f002bba4":[0,0,6,0], -"class_debounce.html#a3e1dca3d133fdef71d95b58a922c478a":[0,0,6,3], -"class_debounce.html#a41ba3a24ea3490fc0717fa4d5f7fae0b":[0,0,6,1], -"class_debounce.html#a52075b35c5a7036ea7a06813a71117ea":[0,0,6,2], -"class_difference.html":[0,0,7], -"class_difference.html#a432ef87751c6bee8e5dadc610dfcb4ff":[0,0,7,4], -"class_difference.html#a57e134a00cd6688d147f93c662520040":[0,0,7,3], -"class_difference.html#a70f6832fd0b14c5eb5c2c05188757b72":[0,0,7,2], -"class_difference.html#ab37fbe4fe6592f7591a124c1b90f8f48":[0,0,7,0], -"class_difference.html#ac5b6559e3820f2f58bed5d120a440a55":[0,0,7,1], -"class_digital_input.html":[0,0,8], -"class_digital_input.html#a92b46ff35c6b0fcf13644727c0a6b61f":[0,0,8,2], -"class_digital_input.html#aa4e30fc0836ce2d0934b9eb5d507f116":[0,0,8,1], -"class_digital_input.html#ac87da1c4d7b53427d71d71b34d25c6eb":[0,0,8,0], -"class_digital_input_counter.html":[0,0,9], -"class_digital_input_counter.html#a9848278592225d90ff71b99ce940771e":[0,0,9,1], -"class_digital_input_counter.html#adde82c1aeae1f8f452b3bbb31a3114a5":[0,0,9,0], -"class_digital_input_value.html":[0,0,10], -"class_digital_input_value.html#a04759be73328ea38d11eb7ec63517761":[0,0,10,0], -"class_digital_input_value.html#a504c6c9ad6578156df7eb524f9635912":[0,0,10,1], -"class_enable.html":[0,0,11], -"class_enable.html#a12a65d666c56d9909c2a1958b7cfda40":[0,0,11,3], -"class_enable.html#a5c8fbdba606732e028a6bf194a3e2529":[0,0,11,4], -"class_enable.html#a5e6385aea4a61b890368ce0b411f690c":[0,0,11,6], -"class_enable.html#a62d0a37863086502e168bfa8ab94ebc0":[0,0,11,0], -"class_enable.html#a62ea021bf8d986150be346977a8eede3":[0,0,11,1], -"class_enable.html#a88a9d200883d86ac64d5b1cd03c07d29":[0,0,11,7], -"class_enable.html#ab4ca14d496a85788896df6c78143994c":[0,0,11,5], -"class_enable.html#af924d33e6ccb0a065af78f264997299f":[0,0,11,2], -"class_free_mem.html":[0,0,13], -"class_free_mem.html#a114359cfbb1cffce40e545bf00889757":[0,0,13,2], -"class_free_mem.html#aa3487ef2dff96a33778881da391b2129":[0,0,13,1], -"class_free_mem.html#aa8b5f3ef10c4148f75d6dc531a3d46c3":[0,0,13,0], -"class_frequency.html":[0,0,14], -"class_frequency.html#a0d6846952b3295809421ac18633e397e":[0,0,14,1], -"class_frequency.html#a87d16c67ce064b9b0f671747808c3963":[0,0,14,4], -"class_frequency.html#a93e3f28917f7faa7411b95745171f6af":[0,0,14,2], -"class_frequency.html#a99df388f446a8aa46f465fe464023f55":[0,0,14,5], -"class_frequency.html#abbaff61b74433bb8a990685be24c3c8b":[0,0,14,0], -"class_frequency.html#ae121e43d37643d390bc607def68e0e02":[0,0,14,3], -"class_g_p_g_g_a_sentence_parser.html":[0,0,15], -"class_g_p_g_g_a_sentence_parser.html#a1a3a77042194bd6ef59b7960c0f35fd1":[0,0,15,0], -"class_g_p_g_g_a_sentence_parser.html#a6bce986c2fb84af7c54477cd7d43f1b1":[0,0,15,1], -"class_g_p_g_g_a_sentence_parser.html#ac70d60b587cd0e48479c397bb30983a3":[0,0,15,2], -"class_g_p_g_l_l_sentence_parser.html":[0,0,16], -"class_g_p_g_l_l_sentence_parser.html#ab1583e721b24183fcc59f2b2826b8c52":[0,0,16,1], -"class_g_p_g_l_l_sentence_parser.html#acbee347184ae22343a9af2515ae57c98":[0,0,16,2], -"class_g_p_g_l_l_sentence_parser.html#af4335548b0e919cb23ec9149bc2e8012":[0,0,16,0], -"class_g_p_r_m_c_sentence_parser.html":[0,0,17], -"class_g_p_r_m_c_sentence_parser.html#a67589bcbddabbe32aac949c3ca9f4a75":[0,0,17,1], -"class_g_p_r_m_c_sentence_parser.html#a75afdae2ce4e8a27676d86ef2f5cbf9f":[0,0,17,2], -"class_g_p_r_m_c_sentence_parser.html#a8ea0212728334cc4b6fa4aa650fa2e58":[0,0,17,0], -"class_g_p_s_input.html":[0,0,18], -"class_g_p_s_input.html#ab763769a97cf52221aeb9e63d3004737":[0,0,18,0], -"class_g_p_s_input.html#ae31d915c7701418b950dcbba4f87f72a":[0,0,18,2], -"class_g_p_s_input.html#af94497b920d346ed5ccad18bd4dbfd9c":[0,0,18,1], -"class_h_t_t_p_server.html":[0,0,19], -"class_h_t_t_p_server.html#a3b7406f8ac0cb9b90e86513acee23542":[0,0,19,3], -"class_h_t_t_p_server.html#a6f5600d8187ec82cb83e84252a387c38":[0,0,19,2], -"class_h_t_t_p_server.html#a8b03465f1ad5631d0e20cc67e5419562":[0,0,19,5], -"class_h_t_t_p_server.html#aafce79dc976b69b318f8fe69f45542be":[0,0,19,7], -"class_h_t_t_p_server.html#ab088a2530794acb9db8a8e1910729c35":[0,0,19,4], -"class_h_t_t_p_server.html#ac854fa80c31eba36ad3f2dd5f02d4a14":[0,0,19,6], -"class_h_t_t_p_server.html#adacba9a090d5b0465da86dd6c82953a9":[0,0,19,0], -"class_h_t_t_p_server.html#af09066b05417f9a9ce9f1cd8e5ad9e18":[0,0,19,1], -"class_i_p_addr_dev.html":[0,0,22], -"class_i_p_addr_dev.html#aad770ae7db264bfc4bc33d3d1dca71fb":[0,0,22,2], -"class_i_p_addr_dev.html#ae5d89601ff69fb635850bbaacdd61664":[0,0,22,0], -"class_i_p_addr_dev.html#afd8dec59375d39cf785819f8ea3685a1":[0,0,22,1], -"class_integer_sensor.html":[0,0,20], -"class_integer_sensor.html#a2214ecc518fbbb314be8ca987aa0e730":[0,0,20,0], -"class_integrator.html":[0,0,21], -"class_integrator.html#a1b4cfd7f598d8456a582865a88d768e7":[0,0,21,3], -"class_integrator.html#a513afaf30460fee68abd295780527d05":[0,0,21,2], -"class_integrator.html#a787de1dd45b1ced5607e6209f0e01dd0":[0,0,21,0], -"class_integrator.html#a7fb38d2d19aa3e918dbee34b9096f7a6":[0,0,21,5], -"class_integrator.html#aa53205d3211635dad0a035adf5d511a6":[0,0,21,4], -"class_integrator.html#ad52503a30ef9abf171209988d256ec22":[0,0,21,1], -"class_led_blinker.html":[0,0,23], -"class_led_blinker.html#a0cdd9d7e8cc453edd234ce2785ce28ea":[0,0,23,2], -"class_led_blinker.html#a394a529a52a7ee1e0321498de017f788":[0,0,23,5], -"class_led_blinker.html#a7e774b60394cf16d0be68cfd38197199":[0,0,23,0], -"class_led_blinker.html#a9c0b4f9aaacc14ab555df6abb43e8ae5":[0,0,23,6], -"class_led_blinker.html#aa9870e4cb1a35a175edcd710142b8595":[0,0,23,4], -"class_led_blinker.html#ab0f765b76f30406a7b53d4360c897d64":[0,0,23,3], -"class_led_blinker.html#af00270a463b74c855dfc95d98c7bfd7e":[0,0,23,1], -"class_linear.html":[0,0,24], -"class_linear.html#a057c8519f6eb7dd28392073010a2cfc3":[0,0,24,4], -"class_linear.html#a98f7cf12073c2aa89bbb7f89b13f6299":[0,0,24,2], -"class_linear.html#ab12c626261e763892d4253f48478771a":[0,0,24,3], -"class_linear.html#ad9477f54820b5a234339d342836e9869":[0,0,24,0], -"class_linear.html#afc896eaed1df40409ea3ce17d81929cc":[0,0,24,1], -"class_moving_average.html":[0,0,25], -"class_moving_average.html#a1cac9948f8ca32b8d4446e419b09cccb":[0,0,25,2], -"class_moving_average.html#a22a08de98351ed805b49beecb234ab0b":[0,0,25,4], -"class_moving_average.html#a9f02a3c253c6456e4d5c063ea5f6d364":[0,0,25,3], -"class_moving_average.html#ad6f06b147a017e528e3d8b991cec2763":[0,0,25,1], -"class_moving_average.html#adda127d69bc5441a3f4ca98d51c87f4b":[0,0,25,0], -"class_n_m_e_a_parser.html":[0,0,28], -"class_n_m_e_a_parser.html#a0f7e6a8f7ee6d7f2ab69a0b05341861b":[0,0,28,2], -"class_n_m_e_a_parser.html#a438b3fd8f8587b55a3785656651f73a6":[0,0,28,1], -"class_n_m_e_a_parser.html#acf7b68ddc8fc466324abede2dd592ad0":[0,0,28,0], -"class_networking.html":[0,0,26], -"class_networking.html#a082fa99914f8f6f277b640667877c85e":[0,0,26,10], -"class_networking.html#a207f306c10b8f65ca0904cc26a9ef15c":[0,0,26,5], -"class_networking.html#a253025ed2a3c36eb998e7b900155359e":[0,0,26,2], -"class_networking.html#a2b8f2f52b332dc0af375113a64881a8a":[0,0,26,3], -"class_networking.html#a4b8c4d193f59be9aea6b09fd36b4f956":[0,0,26,0], -"class_networking.html#a500aa01c7d7da3d823a43c40212353f5":[0,0,26,7], -"class_networking.html#a59d475a2f12b88ef8334274a9a0b1cee":[0,0,26,6], -"class_networking.html#a7a3cac2e878aa2c513451f235c70aff7":[0,0,26,4], -"class_networking.html#a91507b52fbc31dd34d143c8a5634027e":[0,0,26,9], -"class_networking.html#a94815dd34af734e9fc3839cbe6279355":[0,0,26,8], -"class_networking.html#ae4b12924970227730df3377144301a7c":[0,0,26,1], -"class_numeric_sensor.html":[0,0,29], -"class_numeric_sensor.html#a456c5509bf2af2007bd9ee1703e8315f":[0,0,29,0], -"class_observable.html":[0,0,30], -"class_observable.html#a099bf851e05bb8c1a25e83f2a1389e58":[0,0,30,1], -"class_observable.html#af72ed9c9cf7157a33caad4b930232e69":[0,0,30,0], -"class_observable_value.html":[0,0,31], -"class_observable_value.html#a51cf25d4951d3214021da0c25985838d":[0,0,31,3], -"class_observable_value.html#a900b99ef37a8d31e84c48a97b8eff10d":[0,0,31,2], -"class_observable_value.html#a92bc2f2646592dc209717bb546d86a2c":[0,0,31,0], -"class_observable_value.html#adaf97ca440787ba883915603056f002b":[0,0,31,1], -"class_one_wire_temperature.html":[0,0,32], -"class_one_wire_temperature.html#a4331b2b91d6c7d000454e741cdce9d0a":[0,0,32,2], -"class_one_wire_temperature.html#a4a1058669383f507ed70bd46f9f0d2f0":[0,0,32,3], -"class_one_wire_temperature.html#a6ceb584282ee0949f76a35ca5ae40a51":[0,0,32,0], -"class_one_wire_temperature.html#a83bce20a52e396dbd97a43a6e72b2824":[0,0,32,4], -"class_one_wire_temperature.html#a86817f083dfb5e9373b48d8fd1f8d165":[0,0,32,1], -"class_p_s_t_i030_sentence_parser.html":[0,0,34], -"class_p_s_t_i030_sentence_parser.html#aa368abaa7d559a9a0893d3846a01fdb7":[0,0,34,0], -"class_p_s_t_i030_sentence_parser.html#adf5b386bffd76b1055d70aa59615d493":[0,0,34,2], -"class_p_s_t_i030_sentence_parser.html#aee500dadf0a5ff089d8281c642cdb9bc":[0,0,34,1], -"class_p_s_t_i032_sentence_parser.html":[0,0,35], -"class_p_s_t_i032_sentence_parser.html#ac25a7c9f31987ce7a01ce499f045a6a9":[0,0,35,1], -"class_p_s_t_i032_sentence_parser.html#acbe297f07ea6729d870ec8222535b1ce":[0,0,35,2], -"class_p_s_t_i032_sentence_parser.html#af44c303ec78c3a24a18eacb265cee013":[0,0,35,0], -"class_p_s_t_i_sentence_parser.html":[0,0,36], -"class_p_s_t_i_sentence_parser.html#a308af730f992717a0d1e84416396ae38":[0,0,36,1], -"class_p_s_t_i_sentence_parser.html#a4bb2246e947c443d5bca3706e2853cd0":[0,0,36,0], -"class_p_s_t_i_sentence_parser.html#a94f6b75ee9ad9965c4a5cf27e44a12e5":[0,0,36,2], -"class_p_s_t_i_sentence_parser.html#add6764d7c0579101840b82a86f6bd2ef":[0,0,36,3], -"class_s_k_delta.html":[0,0,40], -"class_s_k_delta.html#a3d4825fc72903feaebe635dc643d2b16":[0,0,40,0], -"class_s_k_delta.html#a74ab20a661a4f80a336b50fccc4bd9bc":[0,0,40,2], -"class_s_k_delta.html#ab1592b494b343964703102a4797d3bbc":[0,0,40,3], -"class_s_k_delta.html#acd3c98ae0fe75f92d5d9c1e6a216a8dd":[0,0,40,4], -"class_s_k_delta.html#afacfa3952be6179d0e96960575f393a8":[0,0,40,1], -"class_s_k_emitter.html":[0,0,41], -"class_s_k_emitter.html#a06dbe70e930074437b12b86ac4e2464c":[0,0,41,4], -"class_s_k_emitter.html#a670348fb1ef1bf3d5e1ba49660fc15d9":[0,0,41,3], -"class_s_k_emitter.html#aa08f537c7d7b1782fea4d381a65cf521":[0,0,41,1], -"class_s_k_emitter.html#ab619d4a66c7683bf06350809e8c2153f":[0,0,41,2], -"class_s_k_emitter.html#aeba0ccd27a8b6bad1e2ddbf2603a5d8d":[0,0,41,0], -"class_s_k_output.html":[0,0,42], -"class_s_k_output.html#a07b3524ca9ffa1dff03f4bf522d9e3d2":[0,0,42,4], -"class_s_k_output.html#a0f29018517bcb51943dae1dd7bbace0a":[0,0,42,5], -"class_s_k_output.html#a1020f0eb3e0eb6bc10f57034c7fbc0c6":[0,0,42,6], -"class_s_k_output.html#a406e7e56220dd41bd567c56c0e6b9a4d":[0,0,42,7], -"class_s_k_output.html#a43d76eef72e8dad90ee13a001c265be8":[0,0,42,8], -"class_s_k_output.html#a811a99c30626b6840000b0c152aa1f37":[0,0,42,1], -"class_s_k_output.html#a88f9638dd4779818b41a62738ba44876":[0,0,42,0], -"class_s_k_output.html#afb74fff00aed31212a5150035ddacd4e":[0,0,42,2], -"class_s_k_output.html#afb74fff00aed31212a5150035ddacd4e":[0,0,42,3], -"class_s_k_output_time.html":[0,0,43], -"class_s_k_output_time.html#a03982e7159ac7e6d44b8f7c6976617c4":[0,0,43,3], -"class_s_k_output_time.html#a09b9f813788470bd06891f34ba58d84b":[0,0,43,1], -"class_s_k_output_time.html#a41ad61c700a444916873e908612eca63":[0,0,43,4], -"class_s_k_output_time.html#aa283f508ef59103626c835cd37b9bfb3":[0,0,43,2], -"class_s_k_output_time.html#ab77e9bdfeb69fd37c6fc87ac247146e4":[0,0,43,0], -"class_sens_e_s_p_app.html":[0,0,37], -"class_sens_e_s_p_app.html#a092f600dda1a51189bc2c9fd5de360e8":[0,0,37,0], -"class_sens_e_s_p_app.html#a0f7605a2c63a3ed250e1c742608956b2":[0,0,37,7], -"class_sens_e_s_p_app.html#a15f6e0569533b417e9724540d758c884":[0,0,37,6], -"class_sens_e_s_p_app.html#a3d70c22bfd1bf842f6daa83ab2f50f79":[0,0,37,3], -"class_sens_e_s_p_app.html#aa6e3bc4bb1c696cc0bef02835ce0f7bf":[0,0,37,2], -"class_sens_e_s_p_app.html#ac068882b9e9f6092da0818c5e42b48b8":[0,0,37,4], -"class_sens_e_s_p_app.html#ac53d90429563f50e4aca5224a1e85afd":[0,0,37,1], -"class_sens_e_s_p_app.html#adee3f53bc75ae6d5d73a8707dd75600e":[0,0,37,5], -"class_sensor.html":[0,0,38], -"class_sensor.html#a921d5f94f7f77fa42b5950a807a8e79c":[0,0,38,0], -"class_sentence_parser.html":[0,0,39], -"class_sentence_parser.html#a20be85c734aab87cf783aaa6a999a29a":[0,0,39,0], -"class_sentence_parser.html#a74ed90a9386887e9ff2c13dbb12a556e":[0,0,39,2], -"class_sentence_parser.html#a77a87f5f20ac471591d2110856e8232b":[0,0,39,4], -"class_sentence_parser.html#aa079d8ee1b96e2f03a9c7a1f2ddf7519":[0,0,39,3], -"class_sentence_parser.html#ad92490af20d92f942b2e52abfc26007f":[0,0,39,1], -"class_string_sensor.html":[0,0,44], -"class_string_sensor.html#a8ed16d934bf90314e4f00dba25b1d202":[0,0,44,0], -"class_symmetric_transform.html":[0,0,45], -"class_symmetric_transform.html#a77383aeb8a2dc0e27a2fbc24b451bc90":[0,0,45,0], -"class_system_hz.html":[0,0,46], -"class_system_hz.html#a2f2337dcbe45cce879392f28579e233d":[0,0,46,1], -"class_system_hz.html#a72aa9d59ca93c864b3c4bba55fdd4ec6":[0,0,46,0], -"class_system_hz.html#aafe9250142a6c4b234f3d8e64771ce95":[0,0,46,2], -"class_time_string.html":[0,0,47], -"class_time_string.html#a631583475f42183fdc5cd02914a26320":[0,0,47,1] +"class_change_filter.html":[0,0,3], +"class_change_filter.html#a0bbe692080d7ee9a41fcd77a3f581ca9":[0,0,3,3], +"class_change_filter.html#a48314db9ee86e057f0c771573b302331":[0,0,3,6], +"class_change_filter.html#a592657a8a1c12a9c16dc334aa804865c":[0,0,3,4], +"class_change_filter.html#a6ca0d72e2d4f5afc36ec6c38513cb9c3":[0,0,3,0], +"class_change_filter.html#a6cd0d60d57663d94c1972bf939b40d76":[0,0,3,2], +"class_change_filter.html#a769403176db0e4a619811bbba603d597":[0,0,3,1], +"class_change_filter.html#aa92a8149f304a8627cc8c990dc929c35":[0,0,3,5], +"class_change_filter.html#accc1a8a8df0fd7051708b183b8570b5a":[0,0,3,7], +"class_change_filter.html#ae51076f79fdfc36e34b8383a0e13e700":[0,0,3,8], +"class_configurable.html":[0,0,4], +"class_configurable.html#a657419f13060caa20c45a41935b9d53a":[0,0,4,4], +"class_configurable.html#a6e0281fe25cfbdf024bdb05147ffb52b":[0,0,4,5], +"class_configurable.html#a73131c4e7dd8134f23a93de861e1c0e4":[0,0,4,1], +"class_configurable.html#a787559a1a907f909d6088d2ec6825b44":[0,0,4,2], +"class_configurable.html#a8972a439fb9b734ff68d27c699640f78":[0,0,4,0], +"class_configurable.html#aaa54fa6156d9c7f5848d670bd9b18aa9":[0,0,4,6], +"class_configurable.html#ac2ba4044c81acc2fc6bf95cce411f6a4":[0,0,4,3], +"class_curve_interpolator.html":[0,0,5], +"class_curve_interpolator.html#a09bdf144307f1264c36d5afaea5c96a3":[0,0,5,1], +"class_curve_interpolator.html#a274cd3426b3e379db1538c71bebad9c8":[0,0,5,5], +"class_curve_interpolator.html#a314df8dc54dc73798197c9c9ce6859ac":[0,0,5,2], +"class_curve_interpolator.html#a6e4fcb3bb046ecacbe1855d74cdc47bb":[0,0,5,7], +"class_curve_interpolator.html#a6f9c593782d05c95ba92810b8f70f287":[0,0,5,4], +"class_curve_interpolator.html#acfda195c475a261d2e2a3af365fd6c19":[0,0,5,6], +"class_curve_interpolator.html#afb1dbb8e85015e2909dff8495875f8f5":[0,0,5,3], +"class_curve_interpolator_1_1_sample.html":[0,0,5,0], +"class_curve_interpolator_1_1_sample.html#a1cf03a106b3a98056fdb448df6fb9c17":[0,0,5,0,3], +"class_curve_interpolator_1_1_sample.html#a43dd7cc1fd950a03a6674056194e935b":[0,0,5,0,4], +"class_curve_interpolator_1_1_sample.html#a5f69567a227e29b795b68e4310a9da40":[0,0,5,0,2], +"class_curve_interpolator_1_1_sample.html#a7ad23733bf31c9a8ccbe9689b55f6d67":[0,0,5,0,0], +"class_curve_interpolator_1_1_sample.html#aa2ed35560a823ced306ef02a50d95cac":[0,0,5,0,1], +"class_curve_interpolator_1_1_sample.html#ada14a8de02c7cc737db52aa3a54a330b":[0,0,5,0,5], +"class_dallas_temperature_sensors.html":[0,0,6], +"class_dallas_temperature_sensors.html#a020ae149bf4372f926d4414ac5c67f5a":[0,0,6,3], +"class_dallas_temperature_sensors.html#a1e1b9cd3dd2bde0d51ef657a490881eb":[0,0,6,2], +"class_dallas_temperature_sensors.html#a778aa28e0e329028f2811c5ed71cb11d":[0,0,6,0], +"class_dallas_temperature_sensors.html#abd79995496fd66d416e6d9cd1ff56342":[0,0,6,4], +"class_dallas_temperature_sensors.html#ae30b8206143d488a4d887b4294da6bb2":[0,0,6,1], +"class_debounce.html":[0,0,7], +"class_debounce.html#a1cf5653ecaffe84d03202cd9f002bba4":[0,0,7,0], +"class_debounce.html#a3e1dca3d133fdef71d95b58a922c478a":[0,0,7,3], +"class_debounce.html#a41ba3a24ea3490fc0717fa4d5f7fae0b":[0,0,7,1], +"class_debounce.html#a52075b35c5a7036ea7a06813a71117ea":[0,0,7,2], +"class_difference.html":[0,0,8], +"class_difference.html#a432ef87751c6bee8e5dadc610dfcb4ff":[0,0,8,4], +"class_difference.html#a57e134a00cd6688d147f93c662520040":[0,0,8,3], +"class_difference.html#a70f6832fd0b14c5eb5c2c05188757b72":[0,0,8,2], +"class_difference.html#ab37fbe4fe6592f7591a124c1b90f8f48":[0,0,8,0], +"class_difference.html#ac5b6559e3820f2f58bed5d120a440a55":[0,0,8,1], +"class_digital_input.html":[0,0,9], +"class_digital_input.html#a92b46ff35c6b0fcf13644727c0a6b61f":[0,0,9,2], +"class_digital_input.html#aa4e30fc0836ce2d0934b9eb5d507f116":[0,0,9,1], +"class_digital_input.html#ac87da1c4d7b53427d71d71b34d25c6eb":[0,0,9,0], +"class_digital_input_counter.html":[0,0,10], +"class_digital_input_counter.html#a9848278592225d90ff71b99ce940771e":[0,0,10,1], +"class_digital_input_counter.html#adde82c1aeae1f8f452b3bbb31a3114a5":[0,0,10,0], +"class_digital_input_value.html":[0,0,11], +"class_digital_input_value.html#a04759be73328ea38d11eb7ec63517761":[0,0,11,0], +"class_digital_input_value.html#a504c6c9ad6578156df7eb524f9635912":[0,0,11,1], +"class_enable.html":[0,0,12], +"class_enable.html#a38bebd90f45effcd9fa2781cc43f0d34":[0,0,12,3], +"class_enable.html#a5c8fbdba606732e028a6bf194a3e2529":[0,0,12,4], +"class_enable.html#a5e6385aea4a61b890368ce0b411f690c":[0,0,12,6], +"class_enable.html#a62d0a37863086502e168bfa8ab94ebc0":[0,0,12,0], +"class_enable.html#a62ea021bf8d986150be346977a8eede3":[0,0,12,1], +"class_enable.html#a88a9d200883d86ac64d5b1cd03c07d29":[0,0,12,7], +"class_enable.html#ab4ca14d496a85788896df6c78143994c":[0,0,12,5], +"class_enable.html#af924d33e6ccb0a065af78f264997299f":[0,0,12,2], +"class_free_mem.html":[0,0,14], +"class_free_mem.html#a114359cfbb1cffce40e545bf00889757":[0,0,14,2], +"class_free_mem.html#aa3487ef2dff96a33778881da391b2129":[0,0,14,1], +"class_free_mem.html#aa8b5f3ef10c4148f75d6dc531a3d46c3":[0,0,14,0], +"class_frequency.html":[0,0,15], +"class_frequency.html#a0d6846952b3295809421ac18633e397e":[0,0,15,1], +"class_frequency.html#a87d16c67ce064b9b0f671747808c3963":[0,0,15,4], +"class_frequency.html#a93e3f28917f7faa7411b95745171f6af":[0,0,15,2], +"class_frequency.html#a99df388f446a8aa46f465fe464023f55":[0,0,15,5], +"class_frequency.html#abbaff61b74433bb8a990685be24c3c8b":[0,0,15,0], +"class_frequency.html#ae121e43d37643d390bc607def68e0e02":[0,0,15,3], +"class_g_p_g_g_a_sentence_parser.html":[0,0,16], +"class_g_p_g_g_a_sentence_parser.html#a1a3a77042194bd6ef59b7960c0f35fd1":[0,0,16,0], +"class_g_p_g_g_a_sentence_parser.html#a6bce986c2fb84af7c54477cd7d43f1b1":[0,0,16,1], +"class_g_p_g_g_a_sentence_parser.html#ac70d60b587cd0e48479c397bb30983a3":[0,0,16,2], +"class_g_p_g_l_l_sentence_parser.html":[0,0,17], +"class_g_p_g_l_l_sentence_parser.html#ab1583e721b24183fcc59f2b2826b8c52":[0,0,17,1], +"class_g_p_g_l_l_sentence_parser.html#acbee347184ae22343a9af2515ae57c98":[0,0,17,2], +"class_g_p_g_l_l_sentence_parser.html#af4335548b0e919cb23ec9149bc2e8012":[0,0,17,0], +"class_g_p_r_m_c_sentence_parser.html":[0,0,18], +"class_g_p_r_m_c_sentence_parser.html#a67589bcbddabbe32aac949c3ca9f4a75":[0,0,18,1], +"class_g_p_r_m_c_sentence_parser.html#a75afdae2ce4e8a27676d86ef2f5cbf9f":[0,0,18,2], +"class_g_p_r_m_c_sentence_parser.html#a8ea0212728334cc4b6fa4aa650fa2e58":[0,0,18,0], +"class_g_p_s_input.html":[0,0,19], +"class_g_p_s_input.html#ac434000c2641c7ef06badb2d51f79520":[0,0,19,0], +"class_g_p_s_input.html#ae31d915c7701418b950dcbba4f87f72a":[0,0,19,2], +"class_g_p_s_input.html#af94497b920d346ed5ccad18bd4dbfd9c":[0,0,19,1], +"class_h_t_t_p_server.html":[0,0,20], +"class_h_t_t_p_server.html#a3b7406f8ac0cb9b90e86513acee23542":[0,0,20,3], +"class_h_t_t_p_server.html#a6f5600d8187ec82cb83e84252a387c38":[0,0,20,2], +"class_h_t_t_p_server.html#a8b03465f1ad5631d0e20cc67e5419562":[0,0,20,5], +"class_h_t_t_p_server.html#aafce79dc976b69b318f8fe69f45542be":[0,0,20,7], +"class_h_t_t_p_server.html#ab088a2530794acb9db8a8e1910729c35":[0,0,20,4], +"class_h_t_t_p_server.html#ac854fa80c31eba36ad3f2dd5f02d4a14":[0,0,20,6], +"class_h_t_t_p_server.html#adacba9a090d5b0465da86dd6c82953a9":[0,0,20,0], +"class_h_t_t_p_server.html#af09066b05417f9a9ce9f1cd8e5ad9e18":[0,0,20,1], +"class_i_p_addr_dev.html":[0,0,23], +"class_i_p_addr_dev.html#aad770ae7db264bfc4bc33d3d1dca71fb":[0,0,23,2], +"class_i_p_addr_dev.html#ae5d89601ff69fb635850bbaacdd61664":[0,0,23,0], +"class_i_p_addr_dev.html#afd8dec59375d39cf785819f8ea3685a1":[0,0,23,1], +"class_integer_sensor.html":[0,0,21], +"class_integer_sensor.html#a2214ecc518fbbb314be8ca987aa0e730":[0,0,21,0], +"class_integrator.html":[0,0,22], +"class_integrator.html#a1b4cfd7f598d8456a582865a88d768e7":[0,0,22,3], +"class_integrator.html#a513afaf30460fee68abd295780527d05":[0,0,22,2], +"class_integrator.html#a787de1dd45b1ced5607e6209f0e01dd0":[0,0,22,0], +"class_integrator.html#a7fb38d2d19aa3e918dbee34b9096f7a6":[0,0,22,5], +"class_integrator.html#aa53205d3211635dad0a035adf5d511a6":[0,0,22,4], +"class_integrator.html#ad52503a30ef9abf171209988d256ec22":[0,0,22,1], +"class_led_blinker.html":[0,0,24], +"class_led_blinker.html#a0cdd9d7e8cc453edd234ce2785ce28ea":[0,0,24,2], +"class_led_blinker.html#a394a529a52a7ee1e0321498de017f788":[0,0,24,5], +"class_led_blinker.html#a7e774b60394cf16d0be68cfd38197199":[0,0,24,0], +"class_led_blinker.html#a9c0b4f9aaacc14ab555df6abb43e8ae5":[0,0,24,6], +"class_led_blinker.html#aa9870e4cb1a35a175edcd710142b8595":[0,0,24,4], +"class_led_blinker.html#ab0f765b76f30406a7b53d4360c897d64":[0,0,24,3], +"class_led_blinker.html#af00270a463b74c855dfc95d98c7bfd7e":[0,0,24,1], +"class_linear.html":[0,0,25], +"class_linear.html#a057c8519f6eb7dd28392073010a2cfc3":[0,0,25,4], +"class_linear.html#a98f7cf12073c2aa89bbb7f89b13f6299":[0,0,25,2], +"class_linear.html#ab12c626261e763892d4253f48478771a":[0,0,25,3], +"class_linear.html#ad9477f54820b5a234339d342836e9869":[0,0,25,0], +"class_linear.html#afc896eaed1df40409ea3ce17d81929cc":[0,0,25,1], +"class_median.html":[0,0,26], +"class_median.html#a012bc8d16c361b38ab01f56898ead20b":[0,0,26,4], +"class_median.html#a2ce826a6b0cc7e467345671b843d7af2":[0,0,26,2], +"class_median.html#a986e318f167a85623757c0e247f892fd":[0,0,26,0], +"class_median.html#aa8515edf3b34ee8439bd77dcfc69a93f":[0,0,26,1], +"class_median.html#ac06073c22b922aceee9f01ddaccfb54a":[0,0,26,3], +"class_moving_average.html":[0,0,27], +"class_moving_average.html#a1cac9948f8ca32b8d4446e419b09cccb":[0,0,27,2], +"class_moving_average.html#a22a08de98351ed805b49beecb234ab0b":[0,0,27,4], +"class_moving_average.html#a9f02a3c253c6456e4d5c063ea5f6d364":[0,0,27,3], +"class_moving_average.html#ad6f06b147a017e528e3d8b991cec2763":[0,0,27,1], +"class_moving_average.html#adda127d69bc5441a3f4ca98d51c87f4b":[0,0,27,0], +"class_n_m_e_a_parser.html":[0,0,30], +"class_n_m_e_a_parser.html#a438b3fd8f8587b55a3785656651f73a6":[0,0,30,1], +"class_n_m_e_a_parser.html#a8687b75207c6df0c049721fe5a586913":[0,0,30,2], +"class_n_m_e_a_parser.html#acf7b68ddc8fc466324abede2dd592ad0":[0,0,30,0], +"class_networking.html":[0,0,28], +"class_networking.html#a082fa99914f8f6f277b640667877c85e":[0,0,28,10], +"class_networking.html#a207f306c10b8f65ca0904cc26a9ef15c":[0,0,28,5], +"class_networking.html#a253025ed2a3c36eb998e7b900155359e":[0,0,28,2], +"class_networking.html#a2b8f2f52b332dc0af375113a64881a8a":[0,0,28,3], +"class_networking.html#a4b8c4d193f59be9aea6b09fd36b4f956":[0,0,28,0], +"class_networking.html#a500aa01c7d7da3d823a43c40212353f5":[0,0,28,7], +"class_networking.html#a59d475a2f12b88ef8334274a9a0b1cee":[0,0,28,6], +"class_networking.html#a7a3cac2e878aa2c513451f235c70aff7":[0,0,28,4], +"class_networking.html#a91507b52fbc31dd34d143c8a5634027e":[0,0,28,9], +"class_networking.html#a94815dd34af734e9fc3839cbe6279355":[0,0,28,8], +"class_networking.html#ae4b12924970227730df3377144301a7c":[0,0,28,1], +"class_numeric_sensor.html":[0,0,31], +"class_numeric_sensor.html#a456c5509bf2af2007bd9ee1703e8315f":[0,0,31,0], +"class_observable.html":[0,0,32], +"class_observable.html#a099bf851e05bb8c1a25e83f2a1389e58":[0,0,32,1], +"class_observable.html#af72ed9c9cf7157a33caad4b930232e69":[0,0,32,0], +"class_observable_value.html":[0,0,33], +"class_observable_value.html#a51cf25d4951d3214021da0c25985838d":[0,0,33,3], +"class_observable_value.html#a900b99ef37a8d31e84c48a97b8eff10d":[0,0,33,2], +"class_observable_value.html#a92bc2f2646592dc209717bb546d86a2c":[0,0,33,0], +"class_observable_value.html#adaf97ca440787ba883915603056f002b":[0,0,33,1], +"class_one_wire_temperature.html":[0,0,34], +"class_one_wire_temperature.html#a4331b2b91d6c7d000454e741cdce9d0a":[0,0,34,2], +"class_one_wire_temperature.html#a4a1058669383f507ed70bd46f9f0d2f0":[0,0,34,3], +"class_one_wire_temperature.html#a6ceb584282ee0949f76a35ca5ae40a51":[0,0,34,0], +"class_one_wire_temperature.html#a83bce20a52e396dbd97a43a6e72b2824":[0,0,34,4], +"class_one_wire_temperature.html#a86817f083dfb5e9373b48d8fd1f8d165":[0,0,34,1], +"class_p_s_t_i030_sentence_parser.html":[0,0,36], +"class_p_s_t_i030_sentence_parser.html#aa368abaa7d559a9a0893d3846a01fdb7":[0,0,36,0], +"class_p_s_t_i030_sentence_parser.html#adf5b386bffd76b1055d70aa59615d493":[0,0,36,2], +"class_p_s_t_i030_sentence_parser.html#aee500dadf0a5ff089d8281c642cdb9bc":[0,0,36,1], +"class_p_s_t_i032_sentence_parser.html":[0,0,37], +"class_p_s_t_i032_sentence_parser.html#ac25a7c9f31987ce7a01ce499f045a6a9":[0,0,37,1], +"class_p_s_t_i032_sentence_parser.html#acbe297f07ea6729d870ec8222535b1ce":[0,0,37,2], +"class_p_s_t_i032_sentence_parser.html#af44c303ec78c3a24a18eacb265cee013":[0,0,37,0], +"class_p_s_t_i_sentence_parser.html":[0,0,38], +"class_p_s_t_i_sentence_parser.html#a308af730f992717a0d1e84416396ae38":[0,0,38,1], +"class_p_s_t_i_sentence_parser.html#a4bb2246e947c443d5bca3706e2853cd0":[0,0,38,0], +"class_p_s_t_i_sentence_parser.html#a94f6b75ee9ad9965c4a5cf27e44a12e5":[0,0,38,2], +"class_p_s_t_i_sentence_parser.html#add6764d7c0579101840b82a86f6bd2ef":[0,0,38,3], +"class_s_k_delta.html":[0,0,42], +"class_s_k_delta.html#a3d4825fc72903feaebe635dc643d2b16":[0,0,42,0], +"class_s_k_delta.html#a74ab20a661a4f80a336b50fccc4bd9bc":[0,0,42,2], +"class_s_k_delta.html#ab1592b494b343964703102a4797d3bbc":[0,0,42,3], +"class_s_k_delta.html#acd3c98ae0fe75f92d5d9c1e6a216a8dd":[0,0,42,4], +"class_s_k_delta.html#afacfa3952be6179d0e96960575f393a8":[0,0,42,1], +"class_s_k_emitter.html":[0,0,43], +"class_s_k_emitter.html#a06dbe70e930074437b12b86ac4e2464c":[0,0,43,4], +"class_s_k_emitter.html#a670348fb1ef1bf3d5e1ba49660fc15d9":[0,0,43,3], +"class_s_k_emitter.html#aa08f537c7d7b1782fea4d381a65cf521":[0,0,43,1], +"class_s_k_emitter.html#ab619d4a66c7683bf06350809e8c2153f":[0,0,43,2], +"class_s_k_emitter.html#aeba0ccd27a8b6bad1e2ddbf2603a5d8d":[0,0,43,0], +"class_s_k_output.html":[0,0,44], +"class_s_k_output.html#a07b3524ca9ffa1dff03f4bf522d9e3d2":[0,0,44,4], +"class_s_k_output.html#a0f29018517bcb51943dae1dd7bbace0a":[0,0,44,5], +"class_s_k_output.html#a1020f0eb3e0eb6bc10f57034c7fbc0c6":[0,0,44,6], +"class_s_k_output.html#a406e7e56220dd41bd567c56c0e6b9a4d":[0,0,44,7], +"class_s_k_output.html#a43d76eef72e8dad90ee13a001c265be8":[0,0,44,8], +"class_s_k_output.html#a811a99c30626b6840000b0c152aa1f37":[0,0,44,1], +"class_s_k_output.html#a88f9638dd4779818b41a62738ba44876":[0,0,44,0], +"class_s_k_output.html#afb74fff00aed31212a5150035ddacd4e":[0,0,44,2], +"class_s_k_output.html#afb74fff00aed31212a5150035ddacd4e":[0,0,44,3], +"class_s_k_output_time.html":[0,0,45], +"class_s_k_output_time.html#a03982e7159ac7e6d44b8f7c6976617c4":[0,0,45,3], +"class_s_k_output_time.html#a09b9f813788470bd06891f34ba58d84b":[0,0,45,1], +"class_s_k_output_time.html#a41ad61c700a444916873e908612eca63":[0,0,45,4], +"class_s_k_output_time.html#aa283f508ef59103626c835cd37b9bfb3":[0,0,45,2], +"class_s_k_output_time.html#ab77e9bdfeb69fd37c6fc87ac247146e4":[0,0,45,0], +"class_sens_e_s_p_app.html":[0,0,39], +"class_sens_e_s_p_app.html#a092f600dda1a51189bc2c9fd5de360e8":[0,0,39,0], +"class_sens_e_s_p_app.html#a0f7605a2c63a3ed250e1c742608956b2":[0,0,39,7], +"class_sens_e_s_p_app.html#a15f6e0569533b417e9724540d758c884":[0,0,39,6], +"class_sens_e_s_p_app.html#a3d70c22bfd1bf842f6daa83ab2f50f79":[0,0,39,3], +"class_sens_e_s_p_app.html#aa6e3bc4bb1c696cc0bef02835ce0f7bf":[0,0,39,2], +"class_sens_e_s_p_app.html#ac068882b9e9f6092da0818c5e42b48b8":[0,0,39,4] }; diff --git a/docs/navtreeindex1.js b/docs/navtreeindex1.js index 5ba1c8ed6..4716c38ba 100644 --- a/docs/navtreeindex1.js +++ b/docs/navtreeindex1.js @@ -1,47 +1,67 @@ var NAVTREEINDEX1 = { -"class_time_string.html#adc18ed47c4b6d88acceec81741aab5c3":[0,0,47,0], -"class_transform.html":[0,0,48], -"class_transform.html#a764037842596e71f15621e3732dac75a":[0,0,48,0], -"class_transform.html#a7721846cbfe5b3d95c6f1f40cb387c5d":[0,0,48,1], -"class_transform_base.html":[0,0,49], -"class_transform_base.html#a4f28a4ec27046ac3ef1546eda4b5b43b":[0,0,49,0], -"class_uptime.html":[0,0,50], -"class_uptime.html#a3723d5d7c5b11879065dc3defb6e171f":[0,0,50,0], -"class_uptime.html#a43cdcac661b684e1c746fcdf7224e68f":[0,0,50,2], -"class_uptime.html#a677ab855187348527ccdb0725552e02a":[0,0,50,1], -"class_value_consumer.html":[0,0,51], -"class_value_consumer.html#a6adf62d8d87ffa3ce70bb85379a68715":[0,0,51,0], -"class_value_consumer.html#a7bf920e5ad5f171ec6e2aeda056ff01f":[0,0,51,1], -"class_value_producer.html":[0,0,52], -"class_value_producer.html#a0ef05992883120f7202c14fd8e577103":[0,0,52,0], -"class_value_producer.html#a1669282467997608ce6164fe4d729bb2":[0,0,52,1], -"class_value_producer.html#a9d3882f6de7ef8b05e78947cf9df2697":[0,0,52,4], -"class_value_producer.html#adaf30ea1027efa0c83c75dfe3afc0c1a":[0,0,52,3], -"class_value_producer.html#adfb3d9679b80c9fae0951ca13911344f":[0,0,52,2], -"class_voltage_divider_r2.html":[0,0,53], -"class_voltage_divider_r2.html#a35275626b89244eb30f0c1be504dbdb6":[0,0,53,2], -"class_voltage_divider_r2.html#a43fa7bb9dc49c50de247aac272d7f697":[0,0,53,4], -"class_voltage_divider_r2.html#a482239a7e4031b16091886109efd2296":[0,0,53,6], -"class_voltage_divider_r2.html#a609ab5e2db4122ddc875a94ba8f9d325":[0,0,53,0], -"class_voltage_divider_r2.html#a805b64252dccfd3720ce5fc0f84964b3":[0,0,53,3], -"class_voltage_divider_r2.html#a927b6c4d26bc24dfd326f63a0a127f66":[0,0,53,5], -"class_voltage_divider_r2.html#ae37065fd9bd093497ff74a9faf5b6cea":[0,0,53,1], -"class_w_s_client.html":[0,0,54], -"class_w_s_client.html#a1313d063fd61739f7e3ca9b2c126b048":[0,0,54,2], -"class_w_s_client.html#a1612670a5dccbc8a39518ae972fbae90":[0,0,54,1], -"class_w_s_client.html#a262d41693fab15daa3acac9de78fbf35":[0,0,54,7], -"class_w_s_client.html#a2a41e313d8d3be52cd7bb53e6bbf3117":[0,0,54,4], -"class_w_s_client.html#a2b235f3e62668b6e7923cbbcba00e5c1":[0,0,54,10], -"class_w_s_client.html#a46394a4855cdb0d9587fde318574b6e4":[0,0,54,0], -"class_w_s_client.html#a478877d14e5a303c24ea60a4cc4f8752":[0,0,54,11], -"class_w_s_client.html#a6ae43b80f511194b43b0dff2763d68b1":[0,0,54,5], -"class_w_s_client.html#a78fbe2ccf0f84423abbf9d1047aff0bc":[0,0,54,3], -"class_w_s_client.html#ab6bcc3fb4cfe71aff3929480fab9bd5a":[0,0,54,12], -"class_w_s_client.html#ad099870379ee102fa4f5b3b584b50658":[0,0,54,13], -"class_w_s_client.html#ae110b10f209f55a82e2d700c8c9149a7":[0,0,54,8], -"class_w_s_client.html#ae23657a7da08a9413a09e9054495904e":[0,0,54,6], -"class_w_s_client.html#af921852d17f75f46999c2cc1442c4723":[0,0,54,9], +"class_sens_e_s_p_app.html#ac53d90429563f50e4aca5224a1e85afd":[0,0,39,1], +"class_sens_e_s_p_app.html#adee3f53bc75ae6d5d73a8707dd75600e":[0,0,39,5], +"class_sensor.html":[0,0,40], +"class_sensor.html#a921d5f94f7f77fa42b5950a807a8e79c":[0,0,40,0], +"class_sentence_parser.html":[0,0,41], +"class_sentence_parser.html#a20be85c734aab87cf783aaa6a999a29a":[0,0,41,0], +"class_sentence_parser.html#a74ed90a9386887e9ff2c13dbb12a556e":[0,0,41,2], +"class_sentence_parser.html#a77a87f5f20ac471591d2110856e8232b":[0,0,41,4], +"class_sentence_parser.html#aa079d8ee1b96e2f03a9c7a1f2ddf7519":[0,0,41,3], +"class_sentence_parser.html#ad92490af20d92f942b2e52abfc26007f":[0,0,41,1], +"class_string_sensor.html":[0,0,46], +"class_string_sensor.html#a8ed16d934bf90314e4f00dba25b1d202":[0,0,46,0], +"class_symmetric_transform.html":[0,0,47], +"class_symmetric_transform.html#a77383aeb8a2dc0e27a2fbc24b451bc90":[0,0,47,0], +"class_system_hz.html":[0,0,48], +"class_system_hz.html#a2f2337dcbe45cce879392f28579e233d":[0,0,48,1], +"class_system_hz.html#a72aa9d59ca93c864b3c4bba55fdd4ec6":[0,0,48,0], +"class_system_hz.html#aafe9250142a6c4b234f3d8e64771ce95":[0,0,48,2], +"class_time_string.html":[0,0,49], +"class_time_string.html#a631583475f42183fdc5cd02914a26320":[0,0,49,1], +"class_time_string.html#adc18ed47c4b6d88acceec81741aab5c3":[0,0,49,0], +"class_transform.html":[0,0,50], +"class_transform.html#a764037842596e71f15621e3732dac75a":[0,0,50,0], +"class_transform.html#a7721846cbfe5b3d95c6f1f40cb387c5d":[0,0,50,1], +"class_transform_base.html":[0,0,51], +"class_transform_base.html#a4f28a4ec27046ac3ef1546eda4b5b43b":[0,0,51,0], +"class_uptime.html":[0,0,52], +"class_uptime.html#a3723d5d7c5b11879065dc3defb6e171f":[0,0,52,0], +"class_uptime.html#a43cdcac661b684e1c746fcdf7224e68f":[0,0,52,2], +"class_uptime.html#a677ab855187348527ccdb0725552e02a":[0,0,52,1], +"class_value_consumer.html":[0,0,53], +"class_value_consumer.html#a6adf62d8d87ffa3ce70bb85379a68715":[0,0,53,0], +"class_value_consumer.html#a7bf920e5ad5f171ec6e2aeda056ff01f":[0,0,53,1], +"class_value_producer.html":[0,0,54], +"class_value_producer.html#a0ef05992883120f7202c14fd8e577103":[0,0,54,0], +"class_value_producer.html#a1669282467997608ce6164fe4d729bb2":[0,0,54,1], +"class_value_producer.html#a9d3882f6de7ef8b05e78947cf9df2697":[0,0,54,4], +"class_value_producer.html#adaf30ea1027efa0c83c75dfe3afc0c1a":[0,0,54,3], +"class_value_producer.html#adfb3d9679b80c9fae0951ca13911344f":[0,0,54,2], +"class_voltage_divider_r2.html":[0,0,55], +"class_voltage_divider_r2.html#a35275626b89244eb30f0c1be504dbdb6":[0,0,55,2], +"class_voltage_divider_r2.html#a43fa7bb9dc49c50de247aac272d7f697":[0,0,55,4], +"class_voltage_divider_r2.html#a482239a7e4031b16091886109efd2296":[0,0,55,6], +"class_voltage_divider_r2.html#a609ab5e2db4122ddc875a94ba8f9d325":[0,0,55,0], +"class_voltage_divider_r2.html#a805b64252dccfd3720ce5fc0f84964b3":[0,0,55,3], +"class_voltage_divider_r2.html#a927b6c4d26bc24dfd326f63a0a127f66":[0,0,55,5], +"class_voltage_divider_r2.html#ae37065fd9bd093497ff74a9faf5b6cea":[0,0,55,1], +"class_w_s_client.html":[0,0,56], +"class_w_s_client.html#a1313d063fd61739f7e3ca9b2c126b048":[0,0,56,2], +"class_w_s_client.html#a1612670a5dccbc8a39518ae972fbae90":[0,0,56,1], +"class_w_s_client.html#a262d41693fab15daa3acac9de78fbf35":[0,0,56,7], +"class_w_s_client.html#a2a41e313d8d3be52cd7bb53e6bbf3117":[0,0,56,4], +"class_w_s_client.html#a2b235f3e62668b6e7923cbbcba00e5c1":[0,0,56,10], +"class_w_s_client.html#a46394a4855cdb0d9587fde318574b6e4":[0,0,56,0], +"class_w_s_client.html#a478877d14e5a303c24ea60a4cc4f8752":[0,0,56,11], +"class_w_s_client.html#a6ae43b80f511194b43b0dff2763d68b1":[0,0,56,5], +"class_w_s_client.html#a78fbe2ccf0f84423abbf9d1047aff0bc":[0,0,56,3], +"class_w_s_client.html#ab6bcc3fb4cfe71aff3929480fab9bd5a":[0,0,56,12], +"class_w_s_client.html#ad099870379ee102fa4f5b3b584b50658":[0,0,56,13], +"class_w_s_client.html#ae110b10f209f55a82e2d700c8c9149a7":[0,0,56,8], +"class_w_s_client.html#ae23657a7da08a9413a09e9054495904e":[0,0,56,6], +"class_w_s_client.html#af921852d17f75f46999c2cc1442c4723":[0,0,56,9], "classes.html":[0,1], "configurable_8cpp.html":[1,0,0,3,0], "configurable_8cpp.html#a19ac563e52fea3af6b643155f9d258b6":[1,0,0,3,0,0], @@ -49,18 +69,18 @@ var NAVTREEINDEX1 = "configurable_8h.html":[1,0,0,3,1], "configurable_8h.html#a19ac563e52fea3af6b643155f9d258b6":[1,0,0,3,1,1], "configurable_8h_source.html":[1,0,0,3,1], -"curveinterpolator_8cpp.html":[1,0,0,4,3], -"curveinterpolator_8cpp_source.html":[1,0,0,4,3], -"curveinterpolator_8h.html":[1,0,0,4,4], -"curveinterpolator_8h_source.html":[1,0,0,4,4], -"debounce_8cpp.html":[1,0,0,4,5], -"debounce_8cpp_source.html":[1,0,0,4,5], -"debounce_8h.html":[1,0,0,4,6], -"debounce_8h_source.html":[1,0,0,4,6], -"difference_8cpp.html":[1,0,0,4,7], -"difference_8cpp_source.html":[1,0,0,4,7], -"difference_8h.html":[1,0,0,4,8], -"difference_8h_source.html":[1,0,0,4,8], +"curveinterpolator_8cpp.html":[1,0,0,4,5], +"curveinterpolator_8cpp_source.html":[1,0,0,4,5], +"curveinterpolator_8h.html":[1,0,0,4,6], +"curveinterpolator_8h_source.html":[1,0,0,4,6], +"debounce_8cpp.html":[1,0,0,4,7], +"debounce_8cpp_source.html":[1,0,0,4,7], +"debounce_8h.html":[1,0,0,4,8], +"debounce_8h_source.html":[1,0,0,4,8], +"difference_8cpp.html":[1,0,0,4,9], +"difference_8cpp_source.html":[1,0,0,4,9], +"difference_8h.html":[1,0,0,4,10], +"difference_8h_source.html":[1,0,0,4,10], "digital__input_8cpp.html":[1,0,0,1,2], "digital__input_8cpp_source.html":[1,0,0,1,2], "digital__input_8h.html":[1,0,0,1,3], @@ -83,10 +103,10 @@ var NAVTREEINDEX1 = "enable_8h.html":[1,0,0,3,3], "enable_8h_source.html":[1,0,0,3,3], "files.html":[1,0], -"frequency_8cpp.html":[1,0,0,4,9], -"frequency_8cpp_source.html":[1,0,0,4,9], -"frequency_8h.html":[1,0,0,4,10], -"frequency_8h_source.html":[1,0,0,4,10], +"frequency_8cpp.html":[1,0,0,4,11], +"frequency_8cpp_source.html":[1,0,0,4,11], +"frequency_8h.html":[1,0,0,4,12], +"frequency_8h_source.html":[1,0,0,4,12], "functions.html":[0,3,0], "functions.html":[0,3,0,0], "functions_b.html":[0,3,0,1], @@ -142,7 +162,6 @@ var NAVTREEINDEX1 = "gps_8cpp.html":[1,0,0,1,4], "gps_8cpp_source.html":[1,0,0,1,4], "gps_8h.html":[1,0,0,1,5], -"gps_8h.html#ac650038f97fda9a0aaf3a30b3a0860bd":[1,0,0,1,5,1], "gps_8h_source.html":[1,0,0,1,5], "hierarchy.html":[0,2], "http_8cpp.html":[1,0,0,0,3], @@ -153,10 +172,10 @@ var NAVTREEINDEX1 = "index_8h.html":[1,0,0,0,0,0], "index_8h.html#a9e09bea0eddc6841460f6654d2ba1a5f":[1,0,0,0,0,0,0], "index_8h_source.html":[1,0,0,0,0,0], -"integrator_8cpp.html":[1,0,0,4,11], -"integrator_8cpp_source.html":[1,0,0,4,11], -"integrator_8h.html":[1,0,0,4,12], -"integrator_8h_source.html":[1,0,0,4,12], +"integrator_8cpp.html":[1,0,0,4,13], +"integrator_8cpp_source.html":[1,0,0,4,13], +"integrator_8h.html":[1,0,0,4,14], +"integrator_8h_source.html":[1,0,0,4,14], "js__jsoneditor_8h.html":[1,0,0,0,0,1], "js__jsoneditor_8h.html#a53fb277b2065a969013a1bc4b071abd1":[1,0,0,0,0,1,0], "js__jsoneditor_8h_source.html":[1,0,0,0,0,1], @@ -168,14 +187,18 @@ var NAVTREEINDEX1 = "led__blinker_8cpp_source.html":[1,0,0,3,4], "led__blinker_8h.html":[1,0,0,3,5], "led__blinker_8h_source.html":[1,0,0,3,5], -"linear_8cpp.html":[1,0,0,4,13], -"linear_8cpp_source.html":[1,0,0,4,13], -"linear_8h.html":[1,0,0,4,14], -"linear_8h_source.html":[1,0,0,4,14], -"moving__average_8cpp.html":[1,0,0,4,15], -"moving__average_8cpp_source.html":[1,0,0,4,15], -"moving__average_8h.html":[1,0,0,4,16], -"moving__average_8h_source.html":[1,0,0,4,16], +"linear_8cpp.html":[1,0,0,4,15], +"linear_8cpp_source.html":[1,0,0,4,15], +"linear_8h.html":[1,0,0,4,16], +"linear_8h_source.html":[1,0,0,4,16], +"median_8cpp.html":[1,0,0,4,17], +"median_8cpp_source.html":[1,0,0,4,17], +"median_8h.html":[1,0,0,4,18], +"median_8h_source.html":[1,0,0,4,18], +"moving__average_8cpp.html":[1,0,0,4,19], +"moving__average_8cpp_source.html":[1,0,0,4,19], +"moving__average_8h.html":[1,0,0,4,20], +"moving__average_8h_source.html":[1,0,0,4,20], "networking_8cpp.html":[1,0,0,0,5], "networking_8cpp.html#a6beb3d9ab4141921e87c56b399230fce":[1,0,0,0,5,0], "networking_8cpp.html#a7930cb24915efc348611f4c48d1d5e4c":[1,0,0,0,5,1], @@ -194,7 +217,7 @@ var NAVTREEINDEX1 = "nmea__parser_8cpp.html#a4021e9ad227b156bfdedaa8fd938590b":[1,0,0,3,6,8], "nmea__parser_8cpp.html#a4de8e35130646cbb488072ff8e457126":[1,0,0,3,6,6], "nmea__parser_8cpp.html#a69a390886762ecd9593ebeada6f3e52d":[1,0,0,3,6,12], -"nmea__parser_8cpp.html#a78e0374f91eaf4035ec29121f7e40064":[1,0,0,3,6,13], +"nmea__parser_8cpp.html#a78e0374f91eaf4035ec29121f7e40064":[1,0,0,3,6,14], "nmea__parser_8cpp.html#ac534d920f6775ddb34453e554699e1b4":[1,0,0,3,6,5], "nmea__parser_8cpp.html#ae6214acf1027a76f58e3b83767cc4520":[1,0,0,3,6,0], "nmea__parser_8cpp.html#ae6214acf1027a76f58e3b83767cc4520a05e849a8cef5c44456bd54132f622ef2":[1,0,0,3,6,0,4], @@ -208,6 +231,7 @@ var NAVTREEINDEX1 = "nmea__parser_8cpp.html#ae6214acf1027a76f58e3b83767cc4520adea098971e394461267006ddf5d2d4b0":[1,0,0,3,6,0,1], "nmea__parser_8cpp.html#ae6214acf1027a76f58e3b83767cc4520afa0a09a3165e3cc313372a0b424b149c":[1,0,0,3,6,0,3], "nmea__parser_8cpp.html#af394f12d9ff6fb97e4c158dac1eb6dc0":[1,0,0,3,6,1], +"nmea__parser_8cpp.html#af7a3600deec155122015fcfedfc126a7":[1,0,0,3,6,13], "nmea__parser_8cpp_source.html":[1,0,0,3,6], "nmea__parser_8h.html":[1,0,0,3,7], "nmea__parser_8h.html#a6088978b66925a9ff44bbdf302f00726":[1,0,0,3,7,11], @@ -225,29 +249,5 @@ var NAVTREEINDEX1 = "onewire__temperature_8cpp.html#af247f8ddcd26451c72c7706fc884a6dc":[1,0,0,1,6,2], "onewire__temperature_8cpp_source.html":[1,0,0,1,6], "onewire__temperature_8h.html":[1,0,0,1,7], -"onewire__temperature_8h.html#aaada9c625aab143feda6189e26144775":[1,0,0,1,7,2], -"onewire__temperature_8h_source.html":[1,0,0,1,7], -"ota_8cpp.html":[1,0,0,0,7], -"ota_8cpp.html#a29c2aa13f2bbaccceeb33ed39a6ece11":[1,0,0,0,7,1], -"ota_8cpp.html#a6696a10cb1e3746f263fb053fd5df092":[1,0,0,0,7,0], -"ota_8cpp_source.html":[1,0,0,0,7], -"ota_8h.html":[1,0,0,0,8], -"ota_8h.html#a29c2aa13f2bbaccceeb33ed39a6ece11":[1,0,0,0,8,0], -"ota_8h_source.html":[1,0,0,0,8], -"pages.html":[], -"sensesp_8h.html":[1,0,0,5], -"sensesp_8h.html#a5ae2f374710d648c2027c78237f5df01":[1,0,0,5,2], -"sensesp_8h.html#aaa2ffd80e6f851dc6bb43c95a2c7d26f":[1,0,0,5,1], -"sensesp_8h.html#abb3668fa85a914138ab7c0c4329681ec":[1,0,0,5,0], -"sensesp_8h_source.html":[1,0,0,5], -"sensesp__app_8cpp.html":[1,0,0,6], -"sensesp__app_8cpp.html#a5ae2f374710d648c2027c78237f5df01":[1,0,0,6,0], -"sensesp__app_8cpp.html#a9b53af60ecde971876d66994134fbfff":[1,0,0,6,1], -"sensesp__app_8cpp_source.html":[1,0,0,6], -"sensesp__app_8h.html":[1,0,0,7], -"sensesp__app_8h.html#a8abe44af131f55591035d3587ca9484d":[1,0,0,7,1], -"sensesp__app_8h.html#a9b53af60ecde971876d66994134fbfff":[1,0,0,7,2], -"sensesp__app_8h_source.html":[1,0,0,7], -"sensor_8cpp.html":[1,0,0,1,8], -"sensor_8cpp_source.html":[1,0,0,1,8] +"onewire__temperature_8h.html#aaada9c625aab143feda6189e26144775":[1,0,0,1,7,2] }; diff --git a/docs/navtreeindex2.js b/docs/navtreeindex2.js index 5ba276d86..3074f342f 100644 --- a/docs/navtreeindex2.js +++ b/docs/navtreeindex2.js @@ -1,5 +1,29 @@ var NAVTREEINDEX2 = { +"onewire__temperature_8h_source.html":[1,0,0,1,7], +"ota_8cpp.html":[1,0,0,0,7], +"ota_8cpp.html#a29c2aa13f2bbaccceeb33ed39a6ece11":[1,0,0,0,7,1], +"ota_8cpp.html#a6696a10cb1e3746f263fb053fd5df092":[1,0,0,0,7,0], +"ota_8cpp_source.html":[1,0,0,0,7], +"ota_8h.html":[1,0,0,0,8], +"ota_8h.html#a29c2aa13f2bbaccceeb33ed39a6ece11":[1,0,0,0,8,0], +"ota_8h_source.html":[1,0,0,0,8], +"pages.html":[], +"sensesp_8h.html":[1,0,0,5], +"sensesp_8h.html#a5ae2f374710d648c2027c78237f5df01":[1,0,0,5,2], +"sensesp_8h.html#aaa2ffd80e6f851dc6bb43c95a2c7d26f":[1,0,0,5,1], +"sensesp_8h.html#abb3668fa85a914138ab7c0c4329681ec":[1,0,0,5,0], +"sensesp_8h_source.html":[1,0,0,5], +"sensesp__app_8cpp.html":[1,0,0,6], +"sensesp__app_8cpp.html#a5ae2f374710d648c2027c78237f5df01":[1,0,0,6,0], +"sensesp__app_8cpp.html#a9b53af60ecde971876d66994134fbfff":[1,0,0,6,1], +"sensesp__app_8cpp_source.html":[1,0,0,6], +"sensesp__app_8h.html":[1,0,0,7], +"sensesp__app_8h.html#a8abe44af131f55591035d3587ca9484d":[1,0,0,7,1], +"sensesp__app_8h.html#a9b53af60ecde971876d66994134fbfff":[1,0,0,7,2], +"sensesp__app_8h_source.html":[1,0,0,7], +"sensor_8cpp.html":[1,0,0,1,8], +"sensor_8cpp_source.html":[1,0,0,1,8], "sensor_8h.html":[1,0,0,1,9], "sensor_8h_source.html":[1,0,0,1,9], "setup_8h.html":[1,0,0,0,0,3], @@ -40,48 +64,48 @@ var NAVTREEINDEX2 = "spiffs__storage_8h.html#aeb6c893649f188e378de0c76055b1f01":[1,0,0,3,12,0], "spiffs__storage_8h.html#afc3e0da568f2f14c9954eeab665ab9cd":[1,0,0,3,12,3], "spiffs__storage_8h_source.html":[1,0,0,3,12], -"struct_e_n_u_vector.html":[0,0,12], -"struct_e_n_u_vector.html#a4cf8b3abdd2edd2f9a463fc6394dbb50":[0,0,12,1], -"struct_e_n_u_vector.html#ac4254f925ae071868c7961a006cdf768":[0,0,12,2], -"struct_e_n_u_vector.html#affaf84db367ff8259448116fe4c75370":[0,0,12,0], -"struct_n_m_e_a_data.html":[0,0,27], -"struct_n_m_e_a_data.html#a1b62fa2b8b0b62d9cef48f7576e0da30":[0,0,27,6], -"struct_n_m_e_a_data.html#a249d831d604857b04284d4c33719005e":[0,0,27,11], -"struct_n_m_e_a_data.html#a3acdff78f354082419d01ebfe8846f7f":[0,0,27,7], -"struct_n_m_e_a_data.html#a3ae9e3d23c088e1c435acf4c232d6a5c":[0,0,27,2], -"struct_n_m_e_a_data.html#a5271f014cd9d9b7ebcfa64d772006044":[0,0,27,12], -"struct_n_m_e_a_data.html#a590b94e1133efeaa9a05456da0dab2dd":[0,0,27,13], -"struct_n_m_e_a_data.html#a8048e071ffb9f37ff425305525f2223a":[0,0,27,8], -"struct_n_m_e_a_data.html#a91263e0aa16f47a7535d8d4a09b2ffca":[0,0,27,15], -"struct_n_m_e_a_data.html#a96cce54518c05c611d50c159ea5122d6":[0,0,27,1], -"struct_n_m_e_a_data.html#a99328058cfe4cf26b5025511d64ce576":[0,0,27,5], -"struct_n_m_e_a_data.html#aa6d1ee7ee222393032e1f57cde891b31":[0,0,27,9], -"struct_n_m_e_a_data.html#aae3cb7b0e14cc41ad1c271b9afaae27d":[0,0,27,3], -"struct_n_m_e_a_data.html#ab5b508669ea5109f812b28cdba65c402":[0,0,27,16], -"struct_n_m_e_a_data.html#ac5e91779da683f23c11da42c1db41b60":[0,0,27,10], -"struct_n_m_e_a_data.html#ad752076d48c74317d72a26643fef7fef":[0,0,27,0], -"struct_n_m_e_a_data.html#af61e9824ffaf9b43c1a95d8d7a93bc10":[0,0,27,4], -"struct_n_m_e_a_data.html#afe6efa0ec62ce332673ab98b282990c8":[0,0,27,14], -"struct_position.html":[0,0,33], -"struct_position.html#a76a87a4287c53ae7e53eba716e740c12":[0,0,33,2], -"struct_position.html#ac6606384ff43b39b8614dd3b590d6b36":[0,0,33,1], -"struct_position.html#add1df8470102854f3950fc9dd2fee06d":[0,0,33,0], +"struct_e_n_u_vector.html":[0,0,13], +"struct_e_n_u_vector.html#a4cf8b3abdd2edd2f9a463fc6394dbb50":[0,0,13,1], +"struct_e_n_u_vector.html#ac4254f925ae071868c7961a006cdf768":[0,0,13,2], +"struct_e_n_u_vector.html#affaf84db367ff8259448116fe4c75370":[0,0,13,0], +"struct_n_m_e_a_data.html":[0,0,29], +"struct_n_m_e_a_data.html#a1b62fa2b8b0b62d9cef48f7576e0da30":[0,0,29,6], +"struct_n_m_e_a_data.html#a249d831d604857b04284d4c33719005e":[0,0,29,11], +"struct_n_m_e_a_data.html#a3acdff78f354082419d01ebfe8846f7f":[0,0,29,7], +"struct_n_m_e_a_data.html#a3ae9e3d23c088e1c435acf4c232d6a5c":[0,0,29,2], +"struct_n_m_e_a_data.html#a5271f014cd9d9b7ebcfa64d772006044":[0,0,29,12], +"struct_n_m_e_a_data.html#a590b94e1133efeaa9a05456da0dab2dd":[0,0,29,13], +"struct_n_m_e_a_data.html#a8048e071ffb9f37ff425305525f2223a":[0,0,29,8], +"struct_n_m_e_a_data.html#a91263e0aa16f47a7535d8d4a09b2ffca":[0,0,29,15], +"struct_n_m_e_a_data.html#a96cce54518c05c611d50c159ea5122d6":[0,0,29,1], +"struct_n_m_e_a_data.html#a99328058cfe4cf26b5025511d64ce576":[0,0,29,5], +"struct_n_m_e_a_data.html#aa6d1ee7ee222393032e1f57cde891b31":[0,0,29,9], +"struct_n_m_e_a_data.html#aae3cb7b0e14cc41ad1c271b9afaae27d":[0,0,29,3], +"struct_n_m_e_a_data.html#ab5b508669ea5109f812b28cdba65c402":[0,0,29,16], +"struct_n_m_e_a_data.html#ac5e91779da683f23c11da42c1db41b60":[0,0,29,10], +"struct_n_m_e_a_data.html#ad752076d48c74317d72a26643fef7fef":[0,0,29,0], +"struct_n_m_e_a_data.html#af61e9824ffaf9b43c1a95d8d7a93bc10":[0,0,29,4], +"struct_n_m_e_a_data.html#afe6efa0ec62ce332673ab98b282990c8":[0,0,29,14], +"struct_position.html":[0,0,35], +"struct_position.html#a76a87a4287c53ae7e53eba716e740c12":[0,0,35,2], +"struct_position.html#ac6606384ff43b39b8614dd3b590d6b36":[0,0,35,1], +"struct_position.html#add1df8470102854f3950fc9dd2fee06d":[0,0,35,0], "system__info_8cpp.html":[1,0,0,1,10], "system__info_8cpp_source.html":[1,0,0,1,10], "system__info_8h.html":[1,0,0,1,11], "system__info_8h_source.html":[1,0,0,1,11], -"timestring_8cpp.html":[1,0,0,4,17], -"timestring_8cpp_source.html":[1,0,0,4,17], -"timestring_8h.html":[1,0,0,4,18], -"timestring_8h_source.html":[1,0,0,4,18], -"transform_8cpp.html":[1,0,0,4,19], -"transform_8cpp_source.html":[1,0,0,4,19], -"transform_8h.html":[1,0,0,4,20], -"transform_8h.html#a463af5c6e30307ac67004d67dd014030":[1,0,0,4,20,6], -"transform_8h.html#ac1617ff234bef4e8a50341c1d6943246":[1,0,0,4,20,3], -"transform_8h.html#ac62af394caec478e4d32c254c96af25b":[1,0,0,4,20,5], -"transform_8h.html#ae9c0b5d70ecdf35d4bd3a0a4bd4e0d17":[1,0,0,4,20,4], -"transform_8h_source.html":[1,0,0,4,20], +"timestring_8cpp.html":[1,0,0,4,21], +"timestring_8cpp_source.html":[1,0,0,4,21], +"timestring_8h.html":[1,0,0,4,22], +"timestring_8h_source.html":[1,0,0,4,22], +"transform_8cpp.html":[1,0,0,4,23], +"transform_8cpp_source.html":[1,0,0,4,23], +"transform_8h.html":[1,0,0,4,24], +"transform_8h.html#a463af5c6e30307ac67004d67dd014030":[1,0,0,4,24,6], +"transform_8h.html#ac1617ff234bef4e8a50341c1d6943246":[1,0,0,4,24,3], +"transform_8h.html#ac62af394caec478e4d32c254c96af25b":[1,0,0,4,24,5], +"transform_8h.html#ae9c0b5d70ecdf35d4bd3a0a4bd4e0d17":[1,0,0,4,24,4], +"transform_8h_source.html":[1,0,0,4,24], "valueconsumer_8h.html":[1,0,0,3,13], "valueconsumer_8h.html#a1220e1ddede7c4512fde395262841b74":[1,0,0,3,13,4], "valueconsumer_8h.html#a1d91b84157f6818bb8b8b04caede8a02":[1,0,0,3,13,5], @@ -94,21 +118,21 @@ var NAVTREEINDEX2 = "valueproducer_8h.html#ab74ca4be7de22a21f73128ea38a4cbbb":[1,0,0,3,14,3], "valueproducer_8h.html#ab845e985974e3ae4c050b8f221337b0d":[1,0,0,3,14,5], "valueproducer_8h_source.html":[1,0,0,3,14], -"voltagedivider_r2_8cpp.html":[1,0,0,4,21], -"voltagedivider_r2_8cpp_source.html":[1,0,0,4,21], -"voltagedivider_r2_8h.html":[1,0,0,4,22], -"voltagedivider_r2_8h_source.html":[1,0,0,4,22], +"voltagedivider_r2_8cpp.html":[1,0,0,4,25], +"voltagedivider_r2_8cpp_source.html":[1,0,0,4,25], +"voltagedivider_r2_8h.html":[1,0,0,4,26], +"voltagedivider_r2_8h_source.html":[1,0,0,4,26], "wiring__helpers_8cpp.html":[1,0,0,8], "wiring__helpers_8cpp.html#a17220137bcd65b6f922f5a14165a8fcf":[1,0,0,8,3], "wiring__helpers_8cpp.html#a3a4bbd0371b8285dbb7b8666d50a53a3":[1,0,0,8,0], -"wiring__helpers_8cpp.html#a76f3efb0a3eb60ba7ca13ba78e9e8052":[1,0,0,8,2], +"wiring__helpers_8cpp.html#a8f7d5e59747355ce523001faddc7ada9":[1,0,0,8,2], "wiring__helpers_8cpp.html#aa6279a7bab0b61c448263a90303bb7e0":[1,0,0,8,4], "wiring__helpers_8cpp.html#ae36e0604b36693bd720bffcf4145baf9":[1,0,0,8,1], "wiring__helpers_8cpp_source.html":[1,0,0,8], "wiring__helpers_8h.html":[1,0,0,9], "wiring__helpers_8h.html#a37c83d7d3ac2abb00e8f9e86c1da52d3":[1,0,0,9,3], "wiring__helpers_8h.html#a70ac1c40d730c9e0f9b93b1f4dd5f0f9":[1,0,0,9,0], -"wiring__helpers_8h.html#a8edfa609fe0f66ca940c2c8311e687b9":[1,0,0,9,2], +"wiring__helpers_8h.html#a8f7d5e59747355ce523001faddc7ada9":[1,0,0,9,2], "wiring__helpers_8h.html#a99ed20d80aca90bb060c88019c5f739f":[1,0,0,9,4], "wiring__helpers_8h.html#ae36e0604b36693bd720bffcf4145baf9":[1,0,0,9,1], "wiring__helpers_8h_source.html":[1,0,0,9], diff --git a/docs/networking_8cpp.html b/docs/networking_8cpp.html index 607eb6eca..71898f150 100644 --- a/docs/networking_8cpp.html +++ b/docs/networking_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/networking_8cpp_source.html b/docs/networking_8cpp_source.html index 230f00991..a746ca01d 100644 --- a/docs/networking_8cpp_source.html +++ b/docs/networking_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,7 +91,7 @@
networking.cpp
-Go to the documentation of this file.
1 #include "networking.h"
2 
3 #include "sensesp.h"
4 #include "system/led_blinker.h"
5 
6 // Wifi config portal timeout (seconds). The smaller the value, the faster
7 // the device will attempt to reconnect. If set too small, it might
8 // become impossible to actually configure the Wifi settings in the captive
9 // portal.
10 #ifndef WIFI_CONFIG_PORTAL_TIMEOUT
11 #define WIFI_CONFIG_PORTAL_TIMEOUT 180
12 #endif
13 
14 bool should_save_config = false;
15 
17  should_save_config = true;
18 }
19 
20 Networking::Networking(String config_path)
22  hostname = new ObservableValue<String>(String("unknown"));
23  load_configuration();
24  server = new AsyncWebServer(80);
25  dns = new DNSServer();
26  wifi_manager = new AsyncWiFiManager(server, dns);
27 }
28 
30  if (WiFi.status() != WL_CONNECTED) {
31  // if connection is lost, simply restart
32  debugD("Wifi disconnected: restarting...");
33  ESP.restart();
34  }
35 }
36 
37 void Networking::setup(std::function<void(bool)> connection_cb) {
38  if (ap_ssid != "" && ap_password != "") {
39  setup_saved_ssid(connection_cb);
40  }
41  if (WiFi.status() != WL_CONNECTED) {
42  setup_wifi_manager(connection_cb);
43  }
44  app.onRepeat(1000, std::bind(&Networking::check_connection, this));
45 }
46 
47 void Networking::setup_saved_ssid(std::function<void(bool)> connection_cb) {
48  WiFi.begin(ap_ssid, ap_password);
49 
50  uint32_t timer_start = millis();
51 
52  rdebugI("Connecting");
53  while (WiFi.status() != WL_CONNECTED &&
54  (millis() - timer_start) < 3 * 60 * 1000) {
55  delay(500);
56  rdebugI(".");
57  }
58  debugI("\n");
59 
60  if (WiFi.status() == WL_CONNECTED) {
61  debugI("Connected to wifi, SSID: %s", WiFi.SSID().c_str());
62  connection_cb(true);
63  }
64 }
65 
66 void Networking::setup_wifi_manager(std::function<void(bool)> connection_cb) {
67  should_save_config = false;
68 
69  //set config save notify callback
70  wifi_manager->setSaveConfigCallback(save_config_callback);
71 
72  wifi_manager->setConfigPortalTimeout(WIFI_CONFIG_PORTAL_TIMEOUT);
73 
74  #ifdef SERIAL_DEBUG_DISABLED
75  wifi_manager->setDebugOutput(false);
76  #endif
77  AsyncWiFiManagerParameter custom_hostname(
78  "hostname", "Set ESP device hostname", this->hostname->get().c_str(), 20);
79  wifi_manager->addParameter(&custom_hostname);
80 
81  if (!wifi_manager->autoConnect("Unconfigured SensESP Device")) {
82  debugE("Failed to connect to wifi and config timed out. Restarting...");
83  ESP.restart();
84  }
85 
86  debugI("Connected to wifi, SSID: %s", WiFi.SSID().c_str());
87  connection_cb(true);
88 
89  if (should_save_config) {
90  String new_hostname = custom_hostname.getValue();
91  debugI("Got new hostname: %s", new_hostname.c_str());
92  this->hostname->set(new_hostname);
93  this->ap_ssid = WiFi.SSID();
94  debugI("Got new SSID: %s", ap_ssid.c_str());
95  this->ap_password = WiFi.psk();
97  debugW("Restarting in 500ms");
98  app.onDelay(500, [](){ ESP.restart(); });
99  }
100 }
101 
103  return this->hostname;
104 }
105 
106 void Networking::set_hostname(String hostname) {
107  debugD("Setting hostname");
108  this->hostname->set(hostname);
109 }
110 
111 static const char SCHEMA[] PROGMEM = R"({
112  "type": "object",
113  "properties": {
114  "hostname": { "title": "ESP device hostname", "type": "string" },
115  "ap_ssid": { "title": "Wifi Access Point SSID", "type": "string" },
116  "ap_password": { "title": "Wifi Access Point Password", "type": "string" }
117  }
118  })";
119 
121  return FPSTR(SCHEMA);
122 }
123 
124 JsonObject& Networking::get_configuration(JsonBuffer& buf) {
125  JsonObject& root = buf.createObject();
126  root["hostname"] = this->hostname->get();
127  root["ap_ssid"] = this->ap_ssid;
128  root["ap_password"] = this->ap_password;
129 
130  return root;
131 }
132 
133 bool Networking::set_configuration(const JsonObject& config) {
134  if (!config.containsKey("hostname")) {
135  return false;
136  }
137  this->hostname->set(config["hostname"].as<String>());
138  this->ap_ssid = config["ap_ssid"].as<String>();
139  this->ap_password = config["ap_password"].as<String>();
140  return true;
141 }
142 
144  hostname->set("");
145  ap_ssid = "";
146  ap_password = "";
148  wifi_manager->resetSettings();
149 }
void reset_settings()
Definition: networking.cpp:143
+Go to the documentation of this file.
1 #include "networking.h"
2 
3 #include "sensesp.h"
4 #include "system/led_blinker.h"
5 
6 // Wifi config portal timeout (seconds). The smaller the value, the faster
7 // the device will attempt to reconnect. If set too small, it might
8 // become impossible to actually configure the Wifi settings in the captive
9 // portal.
10 #ifndef WIFI_CONFIG_PORTAL_TIMEOUT
11 #define WIFI_CONFIG_PORTAL_TIMEOUT 180
12 #endif
13 
14 bool should_save_config = false;
15 
17  should_save_config = true;
18 }
19 
20 Networking::Networking(String config_path)
22  hostname = new ObservableValue<String>(String("sensesp"));
23  load_configuration();
24  server = new AsyncWebServer(80);
25  dns = new DNSServer();
26  wifi_manager = new AsyncWiFiManager(server, dns);
27 }
28 
30  if (WiFi.status() != WL_CONNECTED) {
31  // if connection is lost, simply restart
32  debugD("Wifi disconnected: restarting...");
33  ESP.restart();
34  }
35 }
36 
37 void Networking::setup(std::function<void(bool)> connection_cb) {
38  if (ap_ssid != "" && ap_password != "") {
39  setup_saved_ssid(connection_cb);
40  }
41  if (WiFi.status() != WL_CONNECTED) {
42  setup_wifi_manager(connection_cb);
43  }
44  app.onRepeat(1000, std::bind(&Networking::check_connection, this));
45 }
46 
47 void Networking::setup_saved_ssid(std::function<void(bool)> connection_cb) {
48  WiFi.begin(ap_ssid, ap_password);
49 
50  uint32_t timer_start = millis();
51 
52  rdebugI("Connecting");
53  while (WiFi.status() != WL_CONNECTED &&
54  (millis() - timer_start) < 3 * 60 * 1000) {
55  delay(500);
56  rdebugI(".");
57  }
58  debugI("\n");
59 
60  if (WiFi.status() == WL_CONNECTED) {
61  debugI("Connected to wifi, SSID: %s", WiFi.SSID().c_str());
62  connection_cb(true);
63  }
64 }
65 
66 void Networking::setup_wifi_manager(std::function<void(bool)> connection_cb) {
67  should_save_config = false;
68 
69  //set config save notify callback
70  wifi_manager->setSaveConfigCallback(save_config_callback);
71 
72  wifi_manager->setConfigPortalTimeout(WIFI_CONFIG_PORTAL_TIMEOUT);
73 
74  #ifdef SERIAL_DEBUG_DISABLED
75  wifi_manager->setDebugOutput(false);
76  #endif
77  AsyncWiFiManagerParameter custom_hostname(
78  "hostname", "Set ESP device hostname", this->hostname->get().c_str(), 20);
79  wifi_manager->addParameter(&custom_hostname);
80 
81  if (!wifi_manager->autoConnect("Unconfigured SensESP Device")) {
82  debugE("Failed to connect to wifi and config timed out. Restarting...");
83  ESP.restart();
84  }
85 
86  debugI("Connected to wifi, SSID: %s", WiFi.SSID().c_str());
87  connection_cb(true);
88 
89  if (should_save_config) {
90  String new_hostname = custom_hostname.getValue();
91  debugI("Got new hostname: %s", new_hostname.c_str());
92  this->hostname->set(new_hostname);
93  this->ap_ssid = WiFi.SSID();
94  debugI("Got new SSID: %s", ap_ssid.c_str());
95  this->ap_password = WiFi.psk();
97  debugW("Restarting in 500ms");
98  app.onDelay(500, [](){ ESP.restart(); });
99  }
100 }
101 
103  return this->hostname;
104 }
105 
106 void Networking::set_hostname(String hostname) {
107  debugD("Setting hostname");
108  this->hostname->set(hostname);
109 }
110 
111 static const char SCHEMA[] PROGMEM = R"({
112  "type": "object",
113  "properties": {
114  "hostname": { "title": "ESP device hostname", "type": "string" },
115  "ap_ssid": { "title": "Wifi Access Point SSID", "type": "string" },
116  "ap_password": { "title": "Wifi Access Point Password", "type": "string" }
117  }
118  })";
119 
121  return FPSTR(SCHEMA);
122 }
123 
124 JsonObject& Networking::get_configuration(JsonBuffer& buf) {
125  JsonObject& root = buf.createObject();
126  root["hostname"] = this->hostname->get();
127  root["ap_ssid"] = this->ap_ssid;
128  root["ap_password"] = this->ap_password;
129 
130  return root;
131 }
132 
133 bool Networking::set_configuration(const JsonObject& config) {
134  if (!config.containsKey("hostname")) {
135  return false;
136  }
137  this->hostname->set(config["hostname"].as<String>());
138  this->ap_ssid = config["ap_ssid"].as<String>();
139  this->ap_password = config["ap_password"].as<String>();
140  return true;
141 }
142 
144  hostname->set("");
145  ap_ssid = "";
146  ap_password = "";
148  wifi_manager->resetSettings();
149 }
void reset_settings()
Definition: networking.cpp:143
virtual JsonObject & get_configuration(JsonBuffer &buf) override final
Definition: networking.cpp:124
ObservableValue< String > * get_hostname()
Definition: networking.cpp:102
diff --git a/docs/networking_8h.html b/docs/networking_8h.html index 6587f14f0..668094c0e 100644 --- a/docs/networking_8h.html +++ b/docs/networking_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/networking_8h_source.html b/docs/networking_8h_source.html index 5466061f2..c74d1788b 100644 --- a/docs/networking_8h_source.html +++ b/docs/networking_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/nmea__parser_8cpp.html b/docs/nmea__parser_8cpp.html index 4b226255f..2823465ca 100644 --- a/docs/nmea__parser_8cpp.html +++ b/docs/nmea__parser_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -173,6 +173,8 @@   bool parse_date (int *year, int *month, int *day, char *s)   +void report_success (bool ok, const char *sentence) +  @@ -235,7 +237,7 @@

-

Definition at line 122 of file nmea_parser.cpp.

+

Definition at line 121 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -288,7 +290,7 @@

-

Definition at line 173 of file nmea_parser.cpp.

+

Definition at line 172 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -329,7 +331,7 @@

-

Definition at line 74 of file nmea_parser.cpp.

+

Definition at line 73 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -368,7 +370,7 @@

-

Definition at line 105 of file nmea_parser.cpp.

+

Definition at line 104 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -410,7 +412,7 @@

-

Definition at line 69 of file nmea_parser.cpp.

+

Definition at line 68 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -452,7 +454,7 @@

-

Definition at line 64 of file nmea_parser.cpp.

+

Definition at line 63 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -492,7 +494,7 @@

-

Definition at line 79 of file nmea_parser.cpp.

+

Definition at line 78 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -524,7 +526,7 @@

-

Definition at line 118 of file nmea_parser.cpp.

+

Definition at line 117 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -563,7 +565,7 @@

-

Definition at line 92 of file nmea_parser.cpp.

+

Definition at line 91 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -605,7 +607,7 @@

-

Definition at line 136 of file nmea_parser.cpp.

+

Definition at line 135 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -657,7 +659,7 @@

-

Definition at line 168 of file nmea_parser.cpp.

+

Definition at line 167 of file nmea_parser.cpp.

Here is the caller graph for this function:
@@ -722,6 +724,50 @@

+

◆ report_success()

+ +
+
+

Variables

+ + + + + + + + + + + + + + + + + +
void report_success (bool ok,
const char * sentence 
)
+
+ +

Definition at line 180 of file nmea_parser.cpp.

+
+Here is the caller graph for this function:
+
+
+ + + + + + + + + +
+

Variable Documentation

diff --git a/docs/nmea__parser_8cpp.js b/docs/nmea__parser_8cpp.js index 1b8f0e36c..2c408e02a 100644 --- a/docs/nmea__parser_8cpp.js +++ b/docs/nmea__parser_8cpp.js @@ -24,5 +24,6 @@ var nmea__parser_8cpp = [ "parse_PSTI030_mode", "nmea__parser_8cpp.html#a37bce694f34f625b2c3e29a1a74c1570", null ], [ "parse_time", "nmea__parser_8cpp.html#a202c8d748e820b33d2fb1a324710698b", null ], [ "reconstruct_nmea_sentence", "nmea__parser_8cpp.html#a69a390886762ecd9593ebeada6f3e52d", null ], + [ "report_success", "nmea__parser_8cpp.html#af7a3600deec155122015fcfedfc126a7", null ], [ "gnssQualityStrings", "nmea__parser_8cpp.html#a78e0374f91eaf4035ec29121f7e40064", null ] ]; \ No newline at end of file diff --git a/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.map b/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.map new file mode 100644 index 000000000..2005d22b5 --- /dev/null +++ b/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.md5 b/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.md5 new file mode 100644 index 000000000..e0a1d5e42 --- /dev/null +++ b/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.md5 @@ -0,0 +1 @@ +11d598907b1f0c0648a832c5a9086202 \ No newline at end of file diff --git a/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.png b/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.png new file mode 100644 index 000000000..6a72848bd Binary files /dev/null and b/docs/nmea__parser_8cpp_af7a3600deec155122015fcfedfc126a7_icgraph.png differ diff --git a/docs/nmea__parser_8cpp_source.html b/docs/nmea__parser_8cpp_source.html index 15c72133b..e718f8ff2 100644 --- a/docs/nmea__parser_8cpp_source.html +++ b/docs/nmea__parser_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,15 +91,15 @@
nmea_parser.cpp
-Go to the documentation of this file.
1 
2 #include "nmea_parser.h"
3 
4 #include <ctime>
5 #include <stdlib.h>
6 
7 #include <RemoteDebug.h>
8 
9 #include "sensesp.h"
10 
22 };
23 
24 String gnssQualityStrings[] = {
25  "no GPS",
26  "GNSS Fix",
27  "DGNSS fix",
28  "Precise GNSS",
29  "RTK fixed integer",
30  "RTK float",
31  "Estimated (DR) mode",
32  "Manual input",
33  "Simulator mode",
34  "Error"
35 };
36 
37 // reconstruct the original NMEA sentence for debugging purposes
39  char* sentence,
40  const char* buffer,
41  int term_offsets[],
42  int num_terms) {
43  int cur_pos = 0;
44 
45  // get the total length of the sentence
46  int last_term_loc = term_offsets[num_terms-1];
47  int last_term_len = strlen(buffer+term_offsets[num_terms-1]);
48  // include the final \0
49  int sentence_len = last_term_loc + last_term_len + 1;
50 
51  // beginning $
52  sentence[0] = '$';
53  // copy the buffer contents
54  memcpy(sentence+1, buffer, sentence_len);
55 
56  // fill in the gaps with commas
57  for (int i=1; i< num_terms-1; i++) {
58  sentence[term_offsets[i]] = ',';
59  }
60  // the final gap has an asterisk
61  sentence[term_offsets[num_terms-1]] = '*';
62 }
63 
64 bool parse_int(int* value, char* s) {
65  int retval = sscanf(s, "%d", value);
66  return retval==1;
67 }
68 
69 bool parse_float(float* value, char* s) {
70  int retval = sscanf(s, "%f", value);
71  return retval==1;
72 }
73 
74 bool parse_double(double* value, char* s) {
75  int retval = sscanf(s, "%lf", value);
76  return retval==1;
77 }
78 
79 bool parse_latlon(double* value, char* s) {
80  double degmin;
81  int retval = sscanf(s, "%lf", &degmin);
82  if (retval==1) {
83  int degrees = degmin / 100;
84  double minutes = degmin - 100*degrees;
85  *value = degrees + minutes / 60;
86  return true;
87  } else {
88  return false;
89  }
90 }
91 
92 bool parse_NS(double* value, char* s) {
93  switch (*s) {
94  case 'N':
95  break;
96  case 'S':
97  *value *= 1;
98  break;
99  default:
100  return false;
101  }
102  return true;
103 }
104 
105 bool parse_EW(double* value, char* s) {
106  switch (*s) {
107  case 'E':
108  break;
109  case 'W':
110  *value *= 1;
111  break;
112  default:
113  return false;
114  }
115  return true;
116 }
117 
118 bool parse_M(char* s) {
119  return (*s == 'M');
120 }
121 
122 bool parse_AV(bool* is_valid, char* s) {
123  switch (*s) {
124  case 'A':
125  *is_valid = true;
126  break;
127  case 'V':
128  *is_valid = false;
129  break;
130  default:
131  return false;
132  }
133  return true;
134 }
135 
136 bool parse_PSTI030_mode(GNSSQuality* quality, char* s) {
137  switch (*s) {
138  case 'N':
139  *quality = GNSSQuality::no_gps;
140  break;
141  case 'A':
142  *quality = GNSSQuality::gnss_fix;
143  break;
144  case 'D':
145  *quality = GNSSQuality::dgnss_fix;
146  break;
147  case 'E':
148  *quality = GNSSQuality::estimated_mode;
149  break;
150  case 'M':
151  *quality = GNSSQuality::manual_input;
152  break;
153  case 'S':
154  *quality = GNSSQuality::simulator_mode;
155  break;
156  case 'F':
157  *quality = GNSSQuality::rtk_float;
158  break;
159  case 'R':
161  break;
162  default:
163  return false;
164  }
165  return true;
166 }
167 
168 bool parse_time(int* hour, int* minute, float* second, char* s) {
169  int retval = sscanf(s, "%2d%2d%f", hour, minute, second);
170  return retval==3;
171 }
172 
173 bool parse_date(int* year, int* month, int* day, char* s) {
174  int retval = sscanf(s, "%2d%2d%2d", day, month, year);
175  // date expressed as C struct tm
176  *year += 100;
177  *month -= 1;
178  return retval==3;
179 }
180 
181 void GPGGASentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
182  bool ok = true;
183 
184  int hour;
185  int minute;
186  float second;
187  Position position;
188  int quality;
189  int num_satellites;
190  float horizontal_dilution;
191  float geoidal_separation;
192  float dgps_age;
193  bool dgps_age_defined = false;
194  int dgps_id;
195  bool dgps_id_defined = false;
196 
197  // eg3. $GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh
198  // 1 = UTC of Position
199  ok &= parse_time(&hour, &minute, &second, buffer+term_offsets[1]);
200  // 2 = Latitude
201  ok &= parse_latlon(&position.latitude, buffer+term_offsets[2]);
202  // 3 = N or S
203  ok &= parse_NS(&position.latitude, buffer+term_offsets[3]);
204  // 4 = Longitude
205  ok &= parse_latlon(&position.longitude, buffer+term_offsets[4]);
206  // 5 = E or W
207  ok &= parse_EW(&position.longitude, buffer+term_offsets[5]);
208  // 6 = GPS quality indicator (0=invalid; 1=GPS fix; 2=Diff. GPS fix)
209  ok &= parse_int(&quality, buffer+term_offsets[6]);
210  // 7 = Number of satellites in use [not those in view]
211  ok &= parse_int(&num_satellites, buffer+term_offsets[7]);
212  // 8 = Horizontal dilution of position
213  ok &= parse_float(&horizontal_dilution, buffer+term_offsets[8]);
214  // 9 = Antenna altitude above/below mean sea level (geoid)
215  ok &= parse_float(&position.altitude, buffer+term_offsets[9]);
216  // 10 = Meters (Antenna height unit)
217  ok &= parse_M(buffer+term_offsets[10]);
218  // 11 = Geoidal separation (Diff. between WGS-84 earth ellipsoid and
219  // mean sea level. -=geoid is below WGS-84 ellipsoid)
220  ok &= parse_float(&geoidal_separation, buffer+term_offsets[11]);
221  // 12 = Meters (Units of geoidal separation)
222  ok &= parse_M(buffer+term_offsets[12]);
223  // 13 = Age in seconds since last update from diff. reference station
224  if (*(buffer+term_offsets[13])!=0) {
225  ok &= parse_float(&dgps_age, buffer+term_offsets[13]);
226  dgps_age_defined = true;
227  }
228  // 14 = Diff. reference station ID#
229  if (*(buffer+term_offsets[14])!=0) {
230  ok &= parse_int(&dgps_id, buffer+term_offsets[14]);
231  dgps_id_defined = true;
232  }
233  // 15 = Checksum
234  // (validated already earlier)
235 
236  if (!ok) {
237  debugI("Failed to parse %s", sentence());
238  return;
239  }
240 
241  // notify relevant observers
242 
243  nmea_data->position.set(position);
245  nmea_data->num_satellites.set(num_satellites);
246  nmea_data->horizontal_dilution.set(horizontal_dilution);
247  nmea_data->geoidal_separation.set(geoidal_separation);
248  if (dgps_age_defined) {
249  nmea_data->dgps_age.set(dgps_age);
250  }
251  if (dgps_id_defined) {
252  nmea_data->dgps_id.set(dgps_id);
253  }
254 }
255 
256 void GPGLLSentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
257  bool ok = true;
258 
259  Position position;
260 
261  // eg3. $GPGLL,5133.81,N,00042.25,W*75
262  // 1 5133.81 Current latitude
263  ok &= parse_latlon(&position.latitude, buffer+term_offsets[1]);
264  // 2 N North/South
265  ok &= parse_NS(&position.latitude, buffer+term_offsets[2]);
266  // 3 00042.25 Current longitude
267  ok &= parse_latlon(&position.longitude, buffer+term_offsets[3]);
268  // 4 W East/West
269  ok &= parse_EW(&position.longitude, buffer+term_offsets[4]);
270 
271  if (!ok) {
272  debugI("Failed to parse %s", sentence());
273  return;
274  }
275 
276  position.altitude = -99999;
277 
278  // notify relevant observers
279 
280  nmea_data->position.set(position);
281 }
282 
283 void GPRMCSentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
284  bool ok = true;
285 
286  struct tm time;
287  float second;
288  bool is_valid;
289  Position position;
290  float speed;
291  float true_course;
292  double variation;
293  bool variation_defined = false;
294 
295  // eg3. $GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70
296  // 1 220516 Time Stamp
297  ok &= parse_time(&time.tm_hour, &time.tm_min, &second, buffer+term_offsets[1]);
298  // 2 A validity - A-ok, V-invalid
299  ok &= parse_AV(&is_valid, buffer+term_offsets[2]);
300  // 3 5133.82 current Latitude
301  ok &= parse_latlon(&position.latitude, buffer+term_offsets[3]);
302  // 4 N North/South
303  ok &= parse_NS(&position.latitude, buffer+term_offsets[4]);
304  // 5 00042.24 current Longitude
305  ok &= parse_latlon(&position.longitude, buffer+term_offsets[5]);
306  // 6 W East/West
307  ok &= parse_EW(&position.longitude, buffer+term_offsets[6]);
308  // 7 173.8 Speed in knots
309  ok &= parse_float(&speed, buffer+term_offsets[7]);
310  // 8 231.8 True course
311  ok &= parse_float(&true_course, buffer+term_offsets[8]);
312  // 9 130694 Date Stamp
313  ok &= parse_date(&time.tm_year, &time.tm_mon, &time.tm_mday, buffer+term_offsets[9]);
314  // 10 004.2 Variation
315  if (*(buffer+term_offsets[10])!=0) {
316  ok &= parse_double(&variation, buffer+term_offsets[10]);
317  }
318  // 11 W East/West
319  if (*(buffer+term_offsets[11])!=0) {
320  ok &= parse_EW(&variation, buffer+term_offsets[11]);
321  variation_defined = true;
322  }
323 
324  if (!ok) {
325  debugI("Failed to parse %s", sentence());
326  return;
327  }
328 
329  position.altitude = -99999;
330  time.tm_sec = (int)second;
331  time.tm_isdst = 0;
332 
333  // notify relevant observers
334 
335  if (is_valid) {
336  nmea_data->position.set(position);
337  nmea_data->datetime.set(mktime(&time));
338  nmea_data->speed.set(1852.*speed/3600.);
339  nmea_data->true_course.set(2*PI*true_course/360.);
340  if (variation_defined) {
341  nmea_data->variation.set(2*PI*variation/360.);
342  }
343  }
344 }
345 
347  char* buffer, int term_offsets[], int num_terms,
348  std::map<String, SentenceParser*>& sentence_parsers
349  ) {
350  bool ok = true;
351  int subsentence;
352 
353  ok &= parse_int(&subsentence, buffer+term_offsets[1]);
354 
355  if (!ok) {
356  debugI("Failed to parse %s", sentence());
357  return;
358  }
359 
360  switch (subsentence) {
361  case 30:
362  sentence_parsers["PSTI,030"]->parse(buffer, term_offsets, num_terms);
363  break;
364  case 32:
365  sentence_parsers["PSTI,032"]->parse(buffer, term_offsets, num_terms);
366  break;
367  }
368 }
369 
370 void PSTI030SentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
371  bool ok = true;
372 
373  struct tm time;
374  float second;
375  bool is_valid;
376  Position position;
377  ENUVector velocity;
378  GNSSQuality quality;
379  float rtk_age;
380  float rtk_ratio;
381 
382  // Example:
383  // $PSTI,030,044606.000,A,2447.0924110,N,12100.5227860,E,103.323,0.00,0.00,0.00,180915,R,1.2,4.2*02
384 
385  // note: term offsets are one larger than in the reference because
386  // the subsentence number is at offset 1
387 
388  // Field Name Example Description
389  // 1 UTC time 044606.000 UTC time in hhmmss.sss format (000000.00 ~ 235959.999)
390  ok &= parse_time(&time.tm_hour, &time.tm_min, &second, buffer+term_offsets[2]);
391  // 2 Status A Status
392  // ‘V’ = Navigation receiver warning
393  // ‘A’ = Data Valid
394  ok &= parse_AV(&is_valid, buffer+term_offsets[3]);
395  // 3 Latitude 2447.0924110 Latitude in dddmm.mmmmmmm format
396  // Leading zeros transmitted
397  ok &= parse_latlon(&position.latitude, buffer+term_offsets[4]);
398  // 4 N/S indicator N Latitude hemisphere indicator
399  // ‘N’ = North
400  // ‘S’ = South
401  ok &= parse_NS(&position.latitude, buffer+term_offsets[5]);
402  // 5 Longitude 12100.5227860 Longitude in dddmm.mmmmmmm format
403  // Leading zeros transmitted
404  ok &= parse_latlon(&position.longitude, buffer+term_offsets[6]);
405  // 6 E/W Indicator E Longitude hemisphere indicator
406  // 'E' = East
407  // 'W' = West
408  ok &= parse_EW(&position.longitude, buffer+term_offsets[7]);
409  // 7 Altitude 103.323 mean sea level (geoid), (‐9999.999 ~ 17999.999)
410  ok &= parse_float(&position.altitude, buffer+term_offsets[8]);
411  // 8 East Velocity 0.00 ‘East’ component of ENU velocity (m/s)
412  ok &= parse_float(&velocity.east, buffer+term_offsets[9]);
413  // 9 North Velocity 0.00 ‘North’ component of ENU velocity (m/s)
414  ok &= parse_float(&velocity.north, buffer+term_offsets[10]);
415  // 10 Up Velocity 0.00 ‘Up’ component of ENU velocity (m/s)
416  ok &= parse_float(&velocity.up, buffer+term_offsets[11]);
417  // 11 UTC Date 180915 UTC date of position fix, ddmmyy format
418  ok &= parse_date(&time.tm_year, &time.tm_mon, &time.tm_mday, buffer+term_offsets[12]);
419  // 12 Mode indicator R Mode indicator
420  // ‘N’ = Data not valid
421  // ‘A’ = Autonomous mode
422  // ‘D’ = Differential mode
423  // ‘E’ = Estimated (dead reckoning) mode
424  // ‘M’ = Manual input mode
425  // ‘S’ = Simulator mode
426  // ‘F’ = Float RTK. Satellite system used in RTK mode, floating
427  // integers
428  // ‘R’ = Real Time Kinematic. System used in RTK mode with fixed
429  // integers
430  ok &= parse_PSTI030_mode(&quality, buffer+term_offsets[13]);
431  // 13 RTK Age 1.2 Age of differential
432  ok &= parse_float(&rtk_age, buffer+term_offsets[14]);
433  // 14 RTK Ratio 4.2 AR ratio factor for validation
434  ok &= parse_float(&rtk_ratio, buffer+term_offsets[15]);
435 
436  if (!ok) {
437  debugI("Failed to parse %s", sentence());
438  return;
439  }
440 
441  time.tm_sec = (int)second;
442  time.tm_isdst = 0;
443 
444  // notify relevant observers
445 
447  nmea_data->rtk_age.set(rtk_age);
448  nmea_data->rtk_ratio.set(rtk_ratio);
449 
450  if (is_valid) {
451  nmea_data->position.set(position);
452  nmea_data->datetime.set(mktime(&time));
453  nmea_data->enu_velocity.set(velocity);
454  }
455 }
456 
457 void PSTI032SentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
458  bool ok = true;
459 
460  struct tm time;
461  float second;
462  bool is_valid = false;
463  ENUVector projection;
464  GNSSQuality quality;
465  float baseline_length;
466  float baseline_course;
467 
468  char reconstruction[INPUT_BUFFER_LENGTH];
469  reconstruct_nmea_sentence(reconstruction, buffer, term_offsets, num_terms);
470  debugD("%s", reconstruction);
471 
472  // Example:
473  // $PSTI,032,041457.000,170316,A,R,0.603,‐0.837,‐0.089,1.036,144.22,,,,,*30
474 
475  // note: term offsets are one larger than in the reference because
476  // the subsentence number is at offset 1
477 
478  // Field Name Example Description
479  // 1 UTC time 041457.000 UTC time in hhmmss.sss format (000000.000~235959.999)
480  ok &= parse_time(&time.tm_hour, &time.tm_min, &second, buffer+term_offsets[2]);
481  // 2 UTC Date 170316 UTC date of position fix, ddmmyy format
482  ok &= parse_date(&time.tm_year, &time.tm_mon, &time.tm_mday, buffer+term_offsets[3]);
483  // 3 Status A
484  // Status
485  // ‘V’ = Void
486  // ‘A’ = Active
487  ok &= parse_AV(&is_valid, buffer+term_offsets[4]);
488  if (is_valid) {
489  // 4 Mode indicator R
490  // Mode indicator
491  // ‘F’ = Float RTK. System used in RTK mode with float ambiguity
492  // ‘R’ = Real Time Kinematic. System used in RTK mode with fixed
493  // ambiguity
494  ok &= parse_PSTI030_mode(&quality, buffer+term_offsets[5]);
495  // 5 East‐projection of
496  // baseline 0.603 East‐projection of baseline, meters
497  ok &= parse_float(&projection.east, buffer+term_offsets[6]);
498  // 6 North‐projection of
499  // baseline ‐0.837 North‐projection of baseline, meters
500  ok &= parse_float(&projection.north, buffer+term_offsets[7]);
501  // 7 Up‐projection of
502  // baseline ‐0.089 Up‐projection of baseline, meters
503  ok &= parse_float(&projection.up, buffer+term_offsets[8]);
504  // 8 Baseline length 1.036 Baseline length, meters
505  ok &= parse_float(&baseline_length, buffer+term_offsets[9]);
506  // 9 Baseline course 144.22
507  // Baseline course (angle between baseline vector and north
508  // direction), degrees
509  ok &= parse_float(&baseline_course, buffer+term_offsets[10]);
510  // 10 Reserve Reserve
511  // 11 Reserve Reserve
512  // 12 Reserve Reserve
513  // 13 Reserve Reserve
514  // 14 Reserve Reserve
515  }
516 
517  if (!ok) {
518  debugI("Failed to parse %s", sentence());
519  return;
520  }
521 
522  if (is_valid) {
523  nmea_data->datetime.set(mktime(&time));
524  nmea_data->baseline_projection.set(projection);
525  nmea_data->baseline_length.set(baseline_length);
526  nmea_data->baseline_course.set(2*PI*baseline_course/360.);
528  }
529 }
530 
532 
534  term_offsets[0] = 0;
535  current_state = &NMEAParser::state_start;
536 }
537 
539  const char* sentence = parser->sentence();
540  sentence_parsers[sentence] = parser;
541 }
542 
543 void NMEAParser::read(char c) {
544  (this->*(current_state))(c);
545 }
546 
547 void NMEAParser::state_start(char c) {
548  switch (c) {
549  case '$':
550  cur_offset = 0;
551  cur_term = 0;
552  current_state = &NMEAParser::state_in_term;
553  parity = 0;
554  break;
555  default:
556  //anything else can be ignored
557  break;
558  }
559 }
560 
561 void NMEAParser::state_in_term(char c) {
562  switch (c) {
563  case ',':
564  case '*':
565  if (cur_offset<INPUT_BUFFER_LENGTH) {
566  // split terms with 0 to help further processing
567  buffer[cur_offset++] = 0;
568  } else {
569  current_state = &NMEAParser::state_start;
570  break;
571  }
572  if (cur_term<MAX_TERMS) {
573  // advance term offset
574  term_offsets[++cur_term] = cur_offset;
575  } else {
576  current_state = &NMEAParser::state_start;
577  break;
578  }
579  if (c=='*') {
580  current_state = &NMEAParser::state_in_checksum;
581  } else {
582  parity ^= c;
583  }
584  break;
585  case '\r':
586  case '\n':
587  // end of sentence before checksum has been read
588  buffer[cur_offset++] = 0;
589  current_state = &NMEAParser::state_start;
590  break;
591  default:
592  // read term characters
593  buffer[cur_offset++] = c;
594  parity ^= c;
595  break;
596  }
597 }
598 
599 void NMEAParser::state_in_checksum(char c) {
600  switch (c) {
601  case ',':
602  case '*':
603  // there shouldn't be new terms after the checksum
604  current_state = &NMEAParser::state_start;
605  case '\r':
606  case '\n':
607  // end of sentence
608  buffer[cur_offset++] = 0;
609  if (!validate_checksum()) {
610  current_state = &NMEAParser::state_start;
611  return;
612  }
613  // call the relevant sentence parser
614  if (sentence_parsers.find(buffer) == sentence_parsers.end()) {
615  debugD("Parser not found for sentence %s", buffer);
616  } else {
617  sentence_parsers[buffer]->parse(buffer, term_offsets, cur_term+1,
618  sentence_parsers);
619  }
620  current_state = &NMEAParser::state_start;
621  break;
622  default:
623  // read term characters
624  buffer[cur_offset++] = c;
625  break;
626  }
627 }
628 
629 bool NMEAParser::validate_checksum() {
630  char* checksum_str = buffer + term_offsets[cur_term];
631  int checksum;
632  sscanf(checksum_str, "%2x", &checksum);
633  return this->parity==checksum;
634 }
+Go to the documentation of this file.
1 
2 #include "nmea_parser.h"
3 
4 #include <ctime>
5 #include <stdlib.h>
6 
7 #include <RemoteDebug.h>
8 
9 #include "sensesp.h"
10 
22 };
23 
24 String gnssQualityStrings[] = {
25  "no GPS",
26  "GNSS Fix",
27  "DGNSS fix",
28  "Precise GNSS",
29  "RTK fixed integer",
30  "RTK float",
31  "Estimated (DR) mode",
32  "Manual input",
33  "Simulator mode",
34  "Error"
35 };
36 
37 // reconstruct the original NMEA sentence for debugging purposes
39  char* sentence,
40  const char* buffer,
41  int term_offsets[],
42  int num_terms) {
43 
44  // get the total length of the sentence
45  int last_term_loc = term_offsets[num_terms-1];
46  int last_term_len = strlen(buffer+term_offsets[num_terms-1]);
47  // include the final \0
48  int sentence_len = last_term_loc + last_term_len + 1;
49 
50  // beginning $
51  sentence[0] = '$';
52  // copy the buffer contents
53  memcpy(sentence+1, buffer, sentence_len);
54 
55  // fill in the gaps with commas
56  for (int i=1; i< num_terms-1; i++) {
57  sentence[term_offsets[i]] = ',';
58  }
59  // the final gap has an asterisk
60  sentence[term_offsets[num_terms-1]] = '*';
61 }
62 
63 bool parse_int(int* value, char* s) {
64  int retval = sscanf(s, "%d", value);
65  return retval==1;
66 }
67 
68 bool parse_float(float* value, char* s) {
69  int retval = sscanf(s, "%f", value);
70  return retval==1;
71 }
72 
73 bool parse_double(double* value, char* s) {
74  int retval = sscanf(s, "%lf", value);
75  return retval==1;
76 }
77 
78 bool parse_latlon(double* value, char* s) {
79  double degmin;
80  int retval = sscanf(s, "%lf", &degmin);
81  if (retval==1) {
82  int degrees = degmin / 100;
83  double minutes = degmin - 100*degrees;
84  *value = degrees + minutes / 60;
85  return true;
86  } else {
87  return false;
88  }
89 }
90 
91 bool parse_NS(double* value, char* s) {
92  switch (*s) {
93  case 'N':
94  break;
95  case 'S':
96  *value *= 1;
97  break;
98  default:
99  return false;
100  }
101  return true;
102 }
103 
104 bool parse_EW(double* value, char* s) {
105  switch (*s) {
106  case 'E':
107  break;
108  case 'W':
109  *value *= 1;
110  break;
111  default:
112  return false;
113  }
114  return true;
115 }
116 
117 bool parse_M(char* s) {
118  return (*s == 'M');
119 }
120 
121 bool parse_AV(bool* is_valid, char* s) {
122  switch (*s) {
123  case 'A':
124  *is_valid = true;
125  break;
126  case 'V':
127  *is_valid = false;
128  break;
129  default:
130  return false;
131  }
132  return true;
133 }
134 
135 bool parse_PSTI030_mode(GNSSQuality* quality, char* s) {
136  switch (*s) {
137  case 'N':
138  *quality = GNSSQuality::no_gps;
139  break;
140  case 'A':
141  *quality = GNSSQuality::gnss_fix;
142  break;
143  case 'D':
144  *quality = GNSSQuality::dgnss_fix;
145  break;
146  case 'E':
147  *quality = GNSSQuality::estimated_mode;
148  break;
149  case 'M':
150  *quality = GNSSQuality::manual_input;
151  break;
152  case 'S':
153  *quality = GNSSQuality::simulator_mode;
154  break;
155  case 'F':
156  *quality = GNSSQuality::rtk_float;
157  break;
158  case 'R':
160  break;
161  default:
162  return false;
163  }
164  return true;
165 }
166 
167 bool parse_time(int* hour, int* minute, float* second, char* s) {
168  int retval = sscanf(s, "%2d%2d%f", hour, minute, second);
169  return retval==3;
170 }
171 
172 bool parse_date(int* year, int* month, int* day, char* s) {
173  int retval = sscanf(s, "%2d%2d%2d", day, month, year);
174  // date expressed as C struct tm
175  *year += 100;
176  *month -= 1;
177  return retval==3;
178 }
179 
180 void report_success(bool ok, const char* sentence) {
181  if (!ok) {
182  debugI("Failed to parse %s", sentence);
183  return;
184  } else {
185  debugD("Parsed sentence %s", sentence);
186  }
187 }
188 
189 void GPGGASentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
190  bool ok = true;
191 
192  int hour;
193  int minute;
194  float second;
195  Position position;
196  int quality;
197  int num_satellites;
198  float horizontal_dilution;
199  float geoidal_separation;
200  float dgps_age;
201  bool dgps_age_defined = false;
202  int dgps_id;
203  bool dgps_id_defined = false;
204 
205  // eg3. $GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh
206  // 1 = UTC of Position
207  ok &= parse_time(&hour, &minute, &second, buffer+term_offsets[1]);
208  // 2 = Latitude
209  ok &= parse_latlon(&position.latitude, buffer+term_offsets[2]);
210  // 3 = N or S
211  ok &= parse_NS(&position.latitude, buffer+term_offsets[3]);
212  // 4 = Longitude
213  ok &= parse_latlon(&position.longitude, buffer+term_offsets[4]);
214  // 5 = E or W
215  ok &= parse_EW(&position.longitude, buffer+term_offsets[5]);
216  // 6 = GPS quality indicator (0=invalid; 1=GPS fix; 2=Diff. GPS fix)
217  ok &= parse_int(&quality, buffer+term_offsets[6]);
218  // 7 = Number of satellites in use [not those in view]
219  ok &= parse_int(&num_satellites, buffer+term_offsets[7]);
220  // 8 = Horizontal dilution of position
221  ok &= parse_float(&horizontal_dilution, buffer+term_offsets[8]);
222  // 9 = Antenna altitude above/below mean sea level (geoid)
223  ok &= parse_float(&position.altitude, buffer+term_offsets[9]);
224  // 10 = Meters (Antenna height unit)
225  ok &= parse_M(buffer+term_offsets[10]);
226  // 11 = Geoidal separation (Diff. between WGS-84 earth ellipsoid and
227  // mean sea level. -=geoid is below WGS-84 ellipsoid)
228  ok &= parse_float(&geoidal_separation, buffer+term_offsets[11]);
229  // 12 = Meters (Units of geoidal separation)
230  ok &= parse_M(buffer+term_offsets[12]);
231  // 13 = Age in seconds since last update from diff. reference station
232  if (*(buffer+term_offsets[13])!=0) {
233  ok &= parse_float(&dgps_age, buffer+term_offsets[13]);
234  dgps_age_defined = true;
235  }
236  // 14 = Diff. reference station ID#
237  if (*(buffer+term_offsets[14])!=0) {
238  ok &= parse_int(&dgps_id, buffer+term_offsets[14]);
239  dgps_id_defined = true;
240  }
241  // 15 = Checksum
242  // (validated already earlier)
243 
244  report_success(ok, sentence());
245  if (!ok) {
246  return;
247  }
248 
249  // notify relevant observers
250 
251  nmea_data->position.set(position);
253  nmea_data->num_satellites.set(num_satellites);
254  nmea_data->horizontal_dilution.set(horizontal_dilution);
255  nmea_data->geoidal_separation.set(geoidal_separation);
256  if (dgps_age_defined) {
257  nmea_data->dgps_age.set(dgps_age);
258  }
259  if (dgps_id_defined) {
260  nmea_data->dgps_id.set(dgps_id);
261  }
262 }
263 
264 void GPGLLSentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
265  bool ok = true;
266 
267  Position position;
268 
269  // eg3. $GPGLL,5133.81,N,00042.25,W*75
270  // 1 5133.81 Current latitude
271  ok &= parse_latlon(&position.latitude, buffer+term_offsets[1]);
272  // 2 N North/South
273  ok &= parse_NS(&position.latitude, buffer+term_offsets[2]);
274  // 3 00042.25 Current longitude
275  ok &= parse_latlon(&position.longitude, buffer+term_offsets[3]);
276  // 4 W East/West
277  ok &= parse_EW(&position.longitude, buffer+term_offsets[4]);
278 
279  report_success(ok, sentence());
280  if (!ok) {
281  return;
282  }
283 
284  position.altitude = -99999;
285 
286  // notify relevant observers
287 
288  nmea_data->position.set(position);
289 }
290 
291 void GPRMCSentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
292  bool ok = true;
293 
294  struct tm time;
295  float second;
296  bool is_valid;
297  Position position;
298  float speed;
299  float true_course;
300  double variation;
301  bool variation_defined = false;
302 
303  // eg3. $GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W*70
304  // 1 220516 Time Stamp
305  ok &= parse_time(&time.tm_hour, &time.tm_min, &second, buffer+term_offsets[1]);
306  // 2 A validity - A-ok, V-invalid
307  ok &= parse_AV(&is_valid, buffer+term_offsets[2]);
308  // 3 5133.82 current Latitude
309  ok &= parse_latlon(&position.latitude, buffer+term_offsets[3]);
310  // 4 N North/South
311  ok &= parse_NS(&position.latitude, buffer+term_offsets[4]);
312  // 5 00042.24 current Longitude
313  ok &= parse_latlon(&position.longitude, buffer+term_offsets[5]);
314  // 6 W East/West
315  ok &= parse_EW(&position.longitude, buffer+term_offsets[6]);
316  // 7 173.8 Speed in knots
317  ok &= parse_float(&speed, buffer+term_offsets[7]);
318  // 8 231.8 True course
319  ok &= parse_float(&true_course, buffer+term_offsets[8]);
320  // 9 130694 Date Stamp
321  ok &= parse_date(&time.tm_year, &time.tm_mon, &time.tm_mday, buffer+term_offsets[9]);
322  // 10 004.2 Variation
323  if (*(buffer+term_offsets[10])!=0) {
324  ok &= parse_double(&variation, buffer+term_offsets[10]);
325  }
326  // 11 W East/West
327  if (*(buffer+term_offsets[11])!=0) {
328  ok &= parse_EW(&variation, buffer+term_offsets[11]);
329  variation_defined = true;
330  }
331 
332  report_success(ok, sentence());
333  if (!ok) {
334  return;
335  }
336 
337  position.altitude = -99999;
338  time.tm_sec = (int)second;
339  time.tm_isdst = 0;
340 
341  // notify relevant observers
342 
343  if (is_valid) {
344  nmea_data->position.set(position);
345  nmea_data->datetime.set(mktime(&time));
346  nmea_data->speed.set(1852.*speed/3600.);
347  nmea_data->true_course.set(2*PI*true_course/360.);
348  if (variation_defined) {
349  nmea_data->variation.set(2*PI*variation/360.);
350  }
351  }
352 }
353 
355  char* buffer, int term_offsets[], int num_terms,
356  std::map<String, SentenceParser*>& sentence_parsers
357  ) {
358  bool ok = true;
359  int subsentence;
360 
361  ok &= parse_int(&subsentence, buffer+term_offsets[1]);
362 
363  report_success(ok, sentence());
364  if (!ok) {
365  return;
366  }
367 
368  switch (subsentence) {
369  case 30:
370  sentence_parsers["PSTI,030"]->parse(buffer, term_offsets, num_terms);
371  break;
372  case 32:
373  sentence_parsers["PSTI,032"]->parse(buffer, term_offsets, num_terms);
374  break;
375  }
376 }
377 
378 void PSTI030SentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
379  bool ok = true;
380 
381  struct tm time;
382  float second;
383  bool is_valid;
384  Position position;
385  ENUVector velocity;
386  GNSSQuality quality;
387  float rtk_age;
388  float rtk_ratio;
389 
390  // Example:
391  // $PSTI,030,044606.000,A,2447.0924110,N,12100.5227860,E,103.323,0.00,0.00,0.00,180915,R,1.2,4.2*02
392 
393  // note: term offsets are one larger than in the reference because
394  // the subsentence number is at offset 1
395 
396  // Field Name Example Description
397  // 1 UTC time 044606.000 UTC time in hhmmss.sss format (000000.00 ~ 235959.999)
398  ok &= parse_time(&time.tm_hour, &time.tm_min, &second, buffer+term_offsets[2]);
399  // 2 Status A Status
400  // ‘V’ = Navigation receiver warning
401  // ‘A’ = Data Valid
402  ok &= parse_AV(&is_valid, buffer+term_offsets[3]);
403  // 3 Latitude 2447.0924110 Latitude in dddmm.mmmmmmm format
404  // Leading zeros transmitted
405  ok &= parse_latlon(&position.latitude, buffer+term_offsets[4]);
406  // 4 N/S indicator N Latitude hemisphere indicator
407  // ‘N’ = North
408  // ‘S’ = South
409  ok &= parse_NS(&position.latitude, buffer+term_offsets[5]);
410  // 5 Longitude 12100.5227860 Longitude in dddmm.mmmmmmm format
411  // Leading zeros transmitted
412  ok &= parse_latlon(&position.longitude, buffer+term_offsets[6]);
413  // 6 E/W Indicator E Longitude hemisphere indicator
414  // 'E' = East
415  // 'W' = West
416  ok &= parse_EW(&position.longitude, buffer+term_offsets[7]);
417  // 7 Altitude 103.323 mean sea level (geoid), (‐9999.999 ~ 17999.999)
418  ok &= parse_float(&position.altitude, buffer+term_offsets[8]);
419  // 8 East Velocity 0.00 ‘East’ component of ENU velocity (m/s)
420  ok &= parse_float(&velocity.east, buffer+term_offsets[9]);
421  // 9 North Velocity 0.00 ‘North’ component of ENU velocity (m/s)
422  ok &= parse_float(&velocity.north, buffer+term_offsets[10]);
423  // 10 Up Velocity 0.00 ‘Up’ component of ENU velocity (m/s)
424  ok &= parse_float(&velocity.up, buffer+term_offsets[11]);
425  // 11 UTC Date 180915 UTC date of position fix, ddmmyy format
426  ok &= parse_date(&time.tm_year, &time.tm_mon, &time.tm_mday, buffer+term_offsets[12]);
427  // 12 Mode indicator R Mode indicator
428  // ‘N’ = Data not valid
429  // ‘A’ = Autonomous mode
430  // ‘D’ = Differential mode
431  // ‘E’ = Estimated (dead reckoning) mode
432  // ‘M’ = Manual input mode
433  // ‘S’ = Simulator mode
434  // ‘F’ = Float RTK. Satellite system used in RTK mode, floating
435  // integers
436  // ‘R’ = Real Time Kinematic. System used in RTK mode with fixed
437  // integers
438  ok &= parse_PSTI030_mode(&quality, buffer+term_offsets[13]);
439  // 13 RTK Age 1.2 Age of differential
440  ok &= parse_float(&rtk_age, buffer+term_offsets[14]);
441  // 14 RTK Ratio 4.2 AR ratio factor for validation
442  ok &= parse_float(&rtk_ratio, buffer+term_offsets[15]);
443 
444  report_success(ok, sentence());
445  if (!ok) {
446  return;
447  }
448 
449  time.tm_sec = (int)second;
450  time.tm_isdst = 0;
451 
452  // notify relevant observers
453 
455  nmea_data->rtk_age.set(rtk_age);
456  nmea_data->rtk_ratio.set(rtk_ratio);
457 
458  if (is_valid) {
459  nmea_data->position.set(position);
460  nmea_data->datetime.set(mktime(&time));
461  nmea_data->enu_velocity.set(velocity);
462  }
463 }
464 
465 void PSTI032SentenceParser::parse(char* buffer, int term_offsets[], int num_terms) {
466  bool ok = true;
467 
468  struct tm time;
469  float second;
470  bool is_valid = false;
471  ENUVector projection;
472  GNSSQuality quality;
473  float baseline_length;
474  float baseline_course;
475 
476  char reconstruction[INPUT_BUFFER_LENGTH];
477  reconstruct_nmea_sentence(reconstruction, buffer, term_offsets, num_terms);
478  debugD("%s", reconstruction);
479 
480  // Example:
481  // $PSTI,032,041457.000,170316,A,R,0.603,‐0.837,‐0.089,1.036,144.22,,,,,*30
482 
483  // note: term offsets are one larger than in the reference because
484  // the subsentence number is at offset 1
485 
486  // Field Name Example Description
487  // 1 UTC time 041457.000 UTC time in hhmmss.sss format (000000.000~235959.999)
488  ok &= parse_time(&time.tm_hour, &time.tm_min, &second, buffer+term_offsets[2]);
489  // 2 UTC Date 170316 UTC date of position fix, ddmmyy format
490  ok &= parse_date(&time.tm_year, &time.tm_mon, &time.tm_mday, buffer+term_offsets[3]);
491  // 3 Status A
492  // Status
493  // ‘V’ = Void
494  // ‘A’ = Active
495  ok &= parse_AV(&is_valid, buffer+term_offsets[4]);
496  if (is_valid) {
497  // 4 Mode indicator R
498  // Mode indicator
499  // ‘F’ = Float RTK. System used in RTK mode with float ambiguity
500  // ‘R’ = Real Time Kinematic. System used in RTK mode with fixed
501  // ambiguity
502  ok &= parse_PSTI030_mode(&quality, buffer+term_offsets[5]);
503  // 5 East‐projection of
504  // baseline 0.603 East‐projection of baseline, meters
505  ok &= parse_float(&projection.east, buffer+term_offsets[6]);
506  // 6 North‐projection of
507  // baseline ‐0.837 North‐projection of baseline, meters
508  ok &= parse_float(&projection.north, buffer+term_offsets[7]);
509  // 7 Up‐projection of
510  // baseline ‐0.089 Up‐projection of baseline, meters
511  ok &= parse_float(&projection.up, buffer+term_offsets[8]);
512  // 8 Baseline length 1.036 Baseline length, meters
513  ok &= parse_float(&baseline_length, buffer+term_offsets[9]);
514  // 9 Baseline course 144.22
515  // Baseline course (angle between baseline vector and north
516  // direction), degrees
517  ok &= parse_float(&baseline_course, buffer+term_offsets[10]);
518  // 10 Reserve Reserve
519  // 11 Reserve Reserve
520  // 12 Reserve Reserve
521  // 13 Reserve Reserve
522  // 14 Reserve Reserve
523  }
524 
525  report_success(ok, sentence());
526  if (!ok) {
527  return;
528  }
529 
530  time.tm_sec = (int)second;
531  time.tm_isdst = 0;
532 
533  if (is_valid) {
534  nmea_data->datetime.set(mktime(&time));
535  nmea_data->baseline_projection.set(projection);
536  nmea_data->baseline_length.set(baseline_length);
537  nmea_data->baseline_course.set(2*PI*baseline_course/360.);
539  }
540 }
541 
543 
545  term_offsets[0] = 0;
546  current_state = &NMEAParser::state_start;
547 }
548 
550  const char* sentence = parser->sentence();
551  sentence_parsers[sentence] = parser;
552 }
553 
554 void NMEAParser::handle(char c) {
555  (this->*(current_state))(c);
556 }
557 
558 void NMEAParser::state_start(char c) {
559  switch (c) {
560  case '$':
561  cur_offset = 0;
562  cur_term = 0;
563  current_state = &NMEAParser::state_in_term;
564  parity = 0;
565  break;
566  default:
567  //anything else can be ignored
568  break;
569  }
570 }
571 
572 void NMEAParser::state_in_term(char c) {
573  switch (c) {
574  case ',':
575  case '*':
576  if (cur_offset<INPUT_BUFFER_LENGTH) {
577  // split terms with 0 to help further processing
578  buffer[cur_offset++] = 0;
579  } else {
580  current_state = &NMEAParser::state_start;
581  break;
582  }
583  if (cur_term<MAX_TERMS) {
584  // advance term offset
585  term_offsets[++cur_term] = cur_offset;
586  } else {
587  current_state = &NMEAParser::state_start;
588  break;
589  }
590  if (c=='*') {
591  current_state = &NMEAParser::state_in_checksum;
592  } else {
593  parity ^= c;
594  }
595  break;
596  case '\r':
597  case '\n':
598  // end of sentence before checksum has been read
599  buffer[cur_offset++] = 0;
600  current_state = &NMEAParser::state_start;
601  break;
602  default:
603  // read term characters
604  buffer[cur_offset++] = c;
605  parity ^= c;
606  break;
607  }
608 }
609 
610 void NMEAParser::state_in_checksum(char c) {
611  switch (c) {
612  case ',':
613  case '*':
614  // there shouldn't be new terms after the checksum
615  current_state = &NMEAParser::state_start;
616  case '\r':
617  case '\n':
618  // end of sentence
619  buffer[cur_offset++] = 0;
620  if (!validate_checksum()) {
621  current_state = &NMEAParser::state_start;
622  return;
623  }
624  // call the relevant sentence parser
625  if (sentence_parsers.find(buffer) == sentence_parsers.end()) {
626  debugD("Parser not found for sentence %s", buffer);
627  } else {
628  sentence_parsers[buffer]->parse(buffer, term_offsets, cur_term+1,
629  sentence_parsers);
630  }
631  current_state = &NMEAParser::state_start;
632  break;
633  default:
634  // read term characters
635  buffer[cur_offset++] = c;
636  break;
637  }
638 }
639 
640 bool NMEAParser::validate_checksum() {
641  char* checksum_str = buffer + term_offsets[cur_term];
642  int checksum;
643  sscanf(checksum_str, "%2x", &checksum);
644  return this->parity==checksum;
645 }
ObservableValue< ENUVector > enu_velocity
Definition: nmea_parser.h:37
const char * sentence()
Definition: nmea_parser.h:109
-
bool parse_float(float *value, char *s)
Definition: nmea_parser.cpp:69
+
bool parse_float(float *value, char *s)
Definition: nmea_parser.cpp:68
void parse(char *buffer, int term_offsets[], int num_terms) override final
Definition: nmea_parser.h:96
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
-
bool parse_EW(double *value, char *s)
+
bool parse_EW(double *value, char *s)
const char * sentence()
Definition: nmea_parser.h:65
void reconstruct_nmea_sentence(char *sentence, const char *buffer, int term_offsets[], int num_terms)
Definition: nmea_parser.cpp:38
GNSSQuality
Definition: nmea_parser.cpp:11
@@ -110,7 +110,7 @@
float up
Definition: nmea_parser.h:22
virtual const char * sentence()=0
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
float east
Definition: nmea_parser.h:20
constexpr int INPUT_BUFFER_LENGTH
Definition: nmea_parser.h:10
const char * sentence()
Definition: nmea_parser.h:81
@@ -120,24 +120,24 @@
constexpr int MAX_TERMS
Definition: nmea_parser.h:11
-
bool parse_double(double *value, char *s)
Definition: nmea_parser.cpp:74
+
bool parse_double(double *value, char *s)
Definition: nmea_parser.cpp:73
ObservableValue< int > num_satellites
Definition: nmea_parser.h:28
ObservableValue< Position > position
Definition: nmea_parser.h:26
float altitude
Definition: nmea_parser.h:16
ObservableValue< float > dgps_id
Definition: nmea_parser.h:32
-
bool parse_latlon(double *value, char *s)
Definition: nmea_parser.cpp:79
+
bool parse_latlon(double *value, char *s)
Definition: nmea_parser.cpp:78
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
ObservableValue< float > baseline_course
Definition: nmea_parser.h:42
-
bool parse_AV(bool *is_valid, char *s)
-
void add_sentence_parser(SentenceParser *parser)
-
bool parse_NS(double *value, char *s)
Definition: nmea_parser.cpp:92
+
bool parse_AV(bool *is_valid, char *s)
+
void add_sentence_parser(SentenceParser *parser)
+
bool parse_NS(double *value, char *s)
Definition: nmea_parser.cpp:91
-
bool parse_time(int *hour, int *minute, float *second, char *s)
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
bool parse_time(int *hour, int *minute, float *second, char *s)
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
ObservableValue< float > variation
Definition: nmea_parser.h:36
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
double longitude
Definition: nmea_parser.h:15
double latitude
Definition: nmea_parser.h:14
NMEAData * nmea_data
Definition: nmea_parser.h:57
@@ -146,20 +146,21 @@
ObservableValue< float > geoidal_separation
Definition: nmea_parser.h:30
-
bool parse_date(int *year, int *month, int *day, char *s)
-
SentenceParser(NMEAData *nmea_data)
+
bool parse_date(int *year, int *month, int *day, char *s)
+
SentenceParser(NMEAData *nmea_data)
const char * sentence()
Definition: nmea_parser.h:117
-
bool parse_PSTI030_mode(GNSSQuality *quality, char *s)
-
void read(char c)
+
bool parse_PSTI030_mode(GNSSQuality *quality, char *s)
+
void handle(char c)
ObservableValue< float > baseline_length
Definition: nmea_parser.h:41
+
void report_success(bool ok, const char *sentence)
const char * sentence()
Definition: nmea_parser.h:73
void set(const T &value)
ObservableValue< float > true_course
Definition: nmea_parser.h:35
-
bool parse_M(char *s)
+
bool parse_M(char *s)
ObservableValue< float > speed
Definition: nmea_parser.h:34
-
bool parse_int(int *value, char *s)
Definition: nmea_parser.cpp:64
+
bool parse_int(int *value, char *s)
Definition: nmea_parser.cpp:63
String gnssQualityStrings[]
Definition: nmea_parser.cpp:24
float north
Definition: nmea_parser.h:21
diff --git a/docs/nmea__parser_8h.html b/docs/nmea__parser_8h.html index bac6c147d..af7d4bdca 100644 --- a/docs/nmea__parser_8h.html +++ b/docs/nmea__parser_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -121,13 +121,14 @@
- - - + + + - - + + +
diff --git a/docs/nmea__parser_8h__dep__incl.map b/docs/nmea__parser_8h__dep__incl.map index 58b1d7296..05cbf9dc3 100644 --- a/docs/nmea__parser_8h__dep__incl.map +++ b/docs/nmea__parser_8h__dep__incl.map @@ -1,9 +1,10 @@ - - - + + + - - + + + diff --git a/docs/nmea__parser_8h__dep__incl.md5 b/docs/nmea__parser_8h__dep__incl.md5 index ccdbe23d2..c493317e5 100644 --- a/docs/nmea__parser_8h__dep__incl.md5 +++ b/docs/nmea__parser_8h__dep__incl.md5 @@ -1 +1 @@ -56ede2588767917571e1b0a614e70bfe \ No newline at end of file +a4a4393e080a74a590f849e357de2eb9 \ No newline at end of file diff --git a/docs/nmea__parser_8h__dep__incl.png b/docs/nmea__parser_8h__dep__incl.png index c901f6c50..b63e138b2 100644 Binary files a/docs/nmea__parser_8h__dep__incl.png and b/docs/nmea__parser_8h__dep__incl.png differ diff --git a/docs/nmea__parser_8h_source.html b/docs/nmea__parser_8h_source.html index b79026401..5585b6004 100644 --- a/docs/nmea__parser_8h_source.html +++ b/docs/nmea__parser_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,12 +91,12 @@
nmea_parser.h
-Go to the documentation of this file.
1 #ifndef _nmea_parser_H_
2 #define _nmea_parser_H_
3 
4 #include "Arduino.h"
5 
6 #include <map>
7 
8 #include "observablevalue.h"
9 
10 constexpr int INPUT_BUFFER_LENGTH = 250;
11 constexpr int MAX_TERMS = 25;
12 
13 struct Position {
14  double latitude;
15  double longitude;
16  float altitude;
17 };
18 
19 struct ENUVector {
20  float east;
21  float north;
22  float up;
23 };
24 
25 struct NMEAData {
43 };
44 
46  public:
48  virtual void parse(char* buffer, int term_offsets[], int num_terms) = 0;
49  virtual void parse(
50  char* buffer, int term_offsets[], int num_terms,
51  std::map<String, SentenceParser*>& sentence_parsers
52  ) {
53  parse(buffer, term_offsets, num_terms);
54  }
55  virtual const char* sentence() = 0;
56  protected:
58  private:
59 };
60 
62  public:
64  void parse(char* buffer, int term_offsets[], int num_terms) override final;
65  const char* sentence() { return "GPGGA"; }
66  private:
67 };
68 
70  public:
72  void parse(char* buffer, int term_offsets[], int num_terms) override final;
73  const char* sentence() { return "GPGLL"; }
74  private:
75 };
76 
78  public:
80  void parse(char* buffer, int term_offsets[], int num_terms) override final;
81  const char* sentence() { return "GPRMC"; }
82  private:
83 };
84 
85 //class GPVTGSentenceParser : public SentenceParser {
86 // public:
87 // GPVTGSentenceParser(NMEAData* nmea_data) : SentenceParser{nmea_data} {}
88 // void parse(char* buffer, int term_offsets[], int num_terms) override final;
89 // const char* sentence() { return "GPVTG"; }
90 // private:
91 //};
92 
94  public:
96  void parse(char* buffer, int term_offsets[], int num_terms) override final {}
97  void parse(
98  char* buffer, int term_offsets[], int num_terms,
99  std::map<String, SentenceParser*>& sentence_parsers
100  );
101  const char* sentence() { return "PSTI"; }
102  private:
103 };
104 
106  public:
108  void parse(char* buffer, int term_offsets[], int num_terms) override final;
109  const char* sentence() { return "PSTI,030"; }
110  private:
111 };
112 
114  public:
116  void parse(char* buffer, int term_offsets[], int num_terms) override final;
117  const char* sentence() { return "PSTI,032"; }
118  private:
119 };
120 
121 class NMEAParser {
122 public:
123  NMEAParser();
124  void read(char c);
125  void add_sentence_parser(SentenceParser* parser);
126 private:
127  void (NMEAParser::* current_state) (char);
128  void state_start(char c);
129  void state_in_term(char c);
130  void state_in_checksum(char c);
131  // current sentence
132  char buffer[INPUT_BUFFER_LENGTH];
133  // offset for each sentence term in the buffer
134  int term_offsets[MAX_TERMS];
135  // pointer for the next character in buffer
136  int cur_offset;
137  // pointer for the current term in buffer
138  int cur_term;
139  int parity;
140  bool validate_checksum();
141  std::map<String, SentenceParser*> sentence_parsers;
142 };
143 
144 
145 #endif
+Go to the documentation of this file.
1 #ifndef _nmea_parser_H_
2 #define _nmea_parser_H_
3 
4 #include "Arduino.h"
5 
6 #include <map>
7 
8 #include "observablevalue.h"
9 
10 constexpr int INPUT_BUFFER_LENGTH = 250;
11 constexpr int MAX_TERMS = 25;
12 
13 struct Position {
14  double latitude;
15  double longitude;
16  float altitude;
17 };
18 
19 struct ENUVector {
20  float east;
21  float north;
22  float up;
23 };
24 
25 struct NMEAData {
43 };
44 
46  public:
48  virtual void parse(char* buffer, int term_offsets[], int num_terms) = 0;
49  virtual void parse(
50  char* buffer, int term_offsets[], int num_terms,
51  std::map<String, SentenceParser*>& sentence_parsers
52  ) {
53  parse(buffer, term_offsets, num_terms);
54  }
55  virtual const char* sentence() = 0;
56  protected:
58  private:
59 };
60 
62  public:
64  void parse(char* buffer, int term_offsets[], int num_terms) override final;
65  const char* sentence() { return "GPGGA"; }
66  private:
67 };
68 
70  public:
72  void parse(char* buffer, int term_offsets[], int num_terms) override final;
73  const char* sentence() { return "GPGLL"; }
74  private:
75 };
76 
78  public:
80  void parse(char* buffer, int term_offsets[], int num_terms) override final;
81  const char* sentence() { return "GPRMC"; }
82  private:
83 };
84 
85 //class GPVTGSentenceParser : public SentenceParser {
86 // public:
87 // GPVTGSentenceParser(NMEAData* nmea_data) : SentenceParser{nmea_data} {}
88 // void parse(char* buffer, int term_offsets[], int num_terms) override final;
89 // const char* sentence() { return "GPVTG"; }
90 // private:
91 //};
92 
94  public:
96  void parse(char* buffer, int term_offsets[], int num_terms) override final {}
97  void parse(
98  char* buffer, int term_offsets[], int num_terms,
99  std::map<String, SentenceParser*>& sentence_parsers
100  );
101  const char* sentence() { return "PSTI"; }
102  private:
103 };
104 
106  public:
108  void parse(char* buffer, int term_offsets[], int num_terms) override final;
109  const char* sentence() { return "PSTI,030"; }
110  private:
111 };
112 
114  public:
116  void parse(char* buffer, int term_offsets[], int num_terms) override final;
117  const char* sentence() { return "PSTI,032"; }
118  private:
119 };
120 
121 class NMEAParser {
122 public:
123  NMEAParser();
124  void handle(char c);
125  void add_sentence_parser(SentenceParser* parser);
126 private:
127  void (NMEAParser::* current_state) (char);
128  void state_start(char c);
129  void state_in_term(char c);
130  void state_in_checksum(char c);
131  // current sentence
132  char buffer[INPUT_BUFFER_LENGTH];
133  // offset for each sentence term in the buffer
134  int term_offsets[MAX_TERMS];
135  // pointer for the next character in buffer
136  int cur_offset;
137  // pointer for the current term in buffer
138  int cur_term;
139  int parity;
140  bool validate_checksum();
141  std::map<String, SentenceParser*> sentence_parsers;
142 };
143 
144 
145 #endif
ObservableValue< ENUVector > enu_velocity
Definition: nmea_parser.h:37
const char * sentence()
Definition: nmea_parser.h:109
void parse(char *buffer, int term_offsets[], int num_terms) override final
Definition: nmea_parser.h:96
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
GPGLLSentenceParser(NMEAData *nmea_data)
Definition: nmea_parser.h:71
virtual void parse(char *buffer, int term_offsets[], int num_terms)=0
@@ -108,7 +108,7 @@
float up
Definition: nmea_parser.h:22
virtual const char * sentence()=0
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
float east
Definition: nmea_parser.h:20
constexpr int INPUT_BUFFER_LENGTH
Definition: nmea_parser.h:10
const char * sentence()
Definition: nmea_parser.h:81
@@ -122,15 +122,15 @@
float altitude
Definition: nmea_parser.h:16
ObservableValue< float > dgps_id
Definition: nmea_parser.h:32
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
ObservableValue< float > baseline_course
Definition: nmea_parser.h:42
-
void add_sentence_parser(SentenceParser *parser)
+
void add_sentence_parser(SentenceParser *parser)
GPRMCSentenceParser(NMEAData *nmea_data)
Definition: nmea_parser.h:79
GPGGASentenceParser(NMEAData *nmea_data)
Definition: nmea_parser.h:63
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
ObservableValue< float > variation
Definition: nmea_parser.h:36
-
void parse(char *buffer, int term_offsets[], int num_terms) override final
+
void parse(char *buffer, int term_offsets[], int num_terms) override final
double longitude
Definition: nmea_parser.h:15
PSTI032SentenceParser(NMEAData *nmea_data)
Definition: nmea_parser.h:115
PSTI030SentenceParser(NMEAData *nmea_data)
Definition: nmea_parser.h:107
@@ -143,10 +143,10 @@
ObservableValue< float > geoidal_separation
Definition: nmea_parser.h:30
-
SentenceParser(NMEAData *nmea_data)
+
SentenceParser(NMEAData *nmea_data)
const char * sentence()
Definition: nmea_parser.h:117
+
void handle(char c)
virtual void parse(char *buffer, int term_offsets[], int num_terms, std::map< String, SentenceParser * > &sentence_parsers)
Definition: nmea_parser.h:49
-
void read(char c)
ObservableValue< float > baseline_length
Definition: nmea_parser.h:41
const char * sentence()
Definition: nmea_parser.h:73
diff --git a/docs/observable_8cpp.html b/docs/observable_8cpp.html index 9f455d5aa..09c52f745 100644 --- a/docs/observable_8cpp.html +++ b/docs/observable_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/observable_8cpp_source.html b/docs/observable_8cpp_source.html index 7b59fb518..ab15048ff 100644 --- a/docs/observable_8cpp_source.html +++ b/docs/observable_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/observable_8h.html b/docs/observable_8h.html index 0a3a22a41..dd0a8ff0d 100644 --- a/docs/observable_8h.html +++ b/docs/observable_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -112,56 +112,56 @@
- - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/observable_8h__dep__incl.map b/docs/observable_8h__dep__incl.map index ff18b7cb8..b2105f359 100644 --- a/docs/observable_8h__dep__incl.map +++ b/docs/observable_8h__dep__incl.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/observable_8h__dep__incl.md5 b/docs/observable_8h__dep__incl.md5 index e1474674f..7a58a7d9d 100644 --- a/docs/observable_8h__dep__incl.md5 +++ b/docs/observable_8h__dep__incl.md5 @@ -1 +1 @@ -a54948298806ce4f79d15ae2ccf4455d \ No newline at end of file +e3ad774f8f4f8a6994bf4cc4f764ba45 \ No newline at end of file diff --git a/docs/observable_8h__dep__incl.png b/docs/observable_8h__dep__incl.png index f2615808b..64da48d17 100644 Binary files a/docs/observable_8h__dep__incl.png and b/docs/observable_8h__dep__incl.png differ diff --git a/docs/observable_8h_source.html b/docs/observable_8h_source.html index 92e56896c..9103ac12c 100644 --- a/docs/observable_8h_source.html +++ b/docs/observable_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/observablevalue_8h.html b/docs/observablevalue_8h.html index 4be9241f7..6dda98e6a 100644 --- a/docs/observablevalue_8h.html +++ b/docs/observablevalue_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -119,20 +119,20 @@ - + - - - - - - - + + + + + + +
diff --git a/docs/observablevalue_8h__dep__incl.map b/docs/observablevalue_8h__dep__incl.map index 217dfc426..e59290615 100644 --- a/docs/observablevalue_8h__dep__incl.map +++ b/docs/observablevalue_8h__dep__incl.map @@ -2,18 +2,18 @@ - + - - - - - - - + + + + + + + diff --git a/docs/observablevalue_8h__dep__incl.md5 b/docs/observablevalue_8h__dep__incl.md5 index 016306b7b..fcfbfc465 100644 --- a/docs/observablevalue_8h__dep__incl.md5 +++ b/docs/observablevalue_8h__dep__incl.md5 @@ -1 +1 @@ -97ab60e83cf5ba76f32c6cbfdf808f45 \ No newline at end of file +96a7ad53f78395e0ec7bf17250cb613f \ No newline at end of file diff --git a/docs/observablevalue_8h__dep__incl.png b/docs/observablevalue_8h__dep__incl.png index 374361e7c..b7e984e02 100644 Binary files a/docs/observablevalue_8h__dep__incl.png and b/docs/observablevalue_8h__dep__incl.png differ diff --git a/docs/observablevalue_8h_source.html b/docs/observablevalue_8h_source.html index edb22fb47..857770b8a 100644 --- a/docs/observablevalue_8h_source.html +++ b/docs/observablevalue_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/onewire__temperature_8cpp.html b/docs/onewire__temperature_8cpp.html index 8948bd7ce..9acf616eb 100644 --- a/docs/onewire__temperature_8cpp.html +++ b/docs/onewire__temperature_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/onewire__temperature_8cpp_source.html b/docs/onewire__temperature_8cpp_source.html index 9f5869aeb..a17484d75 100644 --- a/docs/onewire__temperature_8cpp_source.html +++ b/docs/onewire__temperature_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/onewire__temperature_8h.html b/docs/onewire__temperature_8h.html index 1b02726c9..5dbf8d5b7 100644 --- a/docs/onewire__temperature_8h.html +++ b/docs/onewire__temperature_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/onewire__temperature_8h_source.html b/docs/onewire__temperature_8h_source.html index bad74c64f..ce883a030 100644 --- a/docs/onewire__temperature_8h_source.html +++ b/docs/onewire__temperature_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/ota_8cpp.html b/docs/ota_8cpp.html index b1d522128..28896201d 100644 --- a/docs/ota_8cpp.html +++ b/docs/ota_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/ota_8cpp_source.html b/docs/ota_8cpp_source.html index cd48a6064..b998636cc 100644 --- a/docs/ota_8cpp_source.html +++ b/docs/ota_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,7 +91,7 @@
ota.cpp
-Go to the documentation of this file.
1 #include "ota.h"
2 
3 #include <Arduino.h>
4 #include <ArduinoOTA.h>
5 
6 #include "sensesp.h"
7 
8 // Password for Over-the-air (OTA) updates
9 #ifndef OTA_PASSWORD
10 //#define OTA_PASSWORD "bonvoyage"
11 #endif
12 
13 void handle_OTA() {
14  ArduinoOTA.handle();
15 }
16 
17 void setup_OTA() {
18 #ifdef OTA_PASSWORD
19  ArduinoOTA.setPassword((const char *)OTA_PASSWORD);
20 #endif
21  ArduinoOTA.onStart([]() {
22  debugW("Starting OTA");
23  });
24  ArduinoOTA.onEnd([]() {
25  debugW("OTA End");
26  });
27  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
28  debugI("OTA Progress: %u%%\r", (progress / (total / 100)));
29  });
30  ArduinoOTA.onError([](ota_error_t error) {
31  debugE("OTA Error[%u]: ", error);
32  if (error == OTA_AUTH_ERROR) debugE("OTA Auth Failed");
33  else if (error == OTA_BEGIN_ERROR) debugE("OTA Begin Failed");
34  else if (error == OTA_CONNECT_ERROR) debugE("OTA Connect Failed");
35  else if (error == OTA_RECEIVE_ERROR) debugE("OTA Receive Failed");
36  else if (error == OTA_END_ERROR) debugE("OTA End Failed");
37  });
38  ArduinoOTA.begin();
39  //app.onTick(&handle_OTA);
40  app.onRepeat(20, handle_OTA);
41 }
+Go to the documentation of this file.
1 #include "ota.h"
2 
3 #include <Arduino.h>
4 #include <ArduinoOTA.h>
5 
6 #include "sensesp.h"
7 
8 // Password for Over-the-air (OTA) updates
9 #ifndef OTA_PASSWORD
10 //#define OTA_PASSWORD "bonvoyage"
11 #endif
12 
13 void handle_OTA() {
14  ArduinoOTA.handle();
15 }
16 
17 void setup_OTA() {
18 #ifdef OTA_PASSWORD
19  ArduinoOTA.setPassword((const char *)OTA_PASSWORD);
20 #endif
21  ArduinoOTA.onStart([]() {
22  debugW("Starting OTA");
23  });
24  ArduinoOTA.onEnd([]() {
25  debugW("OTA End");
26  });
27  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
28  debugI("OTA Progress: %u%%\r", (progress / (total / 100)));
29  });
30  ArduinoOTA.onError([](ota_error_t error) {
31  debugE("OTA Error[%u]: ", error);
32  if (error == OTA_AUTH_ERROR) { debugE("OTA Auth Failed"); }
33  else if (error == OTA_BEGIN_ERROR) { debugE("OTA Begin Failed"); }
34  else if (error == OTA_CONNECT_ERROR) { debugE("OTA Connect Failed"); }
35  else if (error == OTA_RECEIVE_ERROR) { debugE("OTA Receive Failed"); }
36  else if (error == OTA_END_ERROR) { debugE("OTA End Failed"); }
37  });
38  ArduinoOTA.begin();
39  //app.onTick(&handle_OTA);
40  app.onRepeat(20, handle_OTA);
41 }
void setup_OTA()
Definition: ota.cpp:17
void handle_OTA()
Definition: ota.cpp:13
diff --git a/docs/ota_8h.html b/docs/ota_8h.html index 9a3b08fbd..31ca74197 100644 --- a/docs/ota_8h.html +++ b/docs/ota_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/ota_8h_source.html b/docs/ota_8h_source.html index 06023b0e2..607a0c852 100644 --- a/docs/ota_8h_source.html +++ b/docs/ota_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/search/all_10.js b/docs/search/all_10.js index a5e5edab9..ec20b95c4 100644 --- a/docs/search/all_10.js +++ b/docs/search/all_10.js @@ -16,9 +16,9 @@ var searchData= ['sentence',['sentence',['../class_sentence_parser.html#aa079d8ee1b96e2f03a9c7a1f2ddf7519',1,'SentenceParser::sentence()'],['../class_g_p_g_g_a_sentence_parser.html#ac70d60b587cd0e48479c397bb30983a3',1,'GPGGASentenceParser::sentence()'],['../class_g_p_g_l_l_sentence_parser.html#acbee347184ae22343a9af2515ae57c98',1,'GPGLLSentenceParser::sentence()'],['../class_g_p_r_m_c_sentence_parser.html#a75afdae2ce4e8a27676d86ef2f5cbf9f',1,'GPRMCSentenceParser::sentence()'],['../class_p_s_t_i_sentence_parser.html#add6764d7c0579101840b82a86f6bd2ef',1,'PSTISentenceParser::sentence()'],['../class_p_s_t_i030_sentence_parser.html#adf5b386bffd76b1055d70aa59615d493',1,'PSTI030SentenceParser::sentence()'],['../class_p_s_t_i032_sentence_parser.html#acbe297f07ea6729d870ec8222535b1ce',1,'PSTI032SentenceParser::sentence()']]], ['sentenceparser',['SentenceParser',['../class_sentence_parser.html',1,'SentenceParser'],['../class_sentence_parser.html#a20be85c734aab87cf783aaa6a999a29a',1,'SentenceParser::SentenceParser()']]], ['set',['set',['../class_observable_value.html#a51cf25d4951d3214021da0c25985838d',1,'ObservableValue']]], - ['set_5fconfiguration',['set_configuration',['../class_networking.html#a59d475a2f12b88ef8334274a9a0b1cee',1,'Networking::set_configuration()'],['../class_w_s_client.html#ad099870379ee102fa4f5b3b584b50658',1,'WSClient::set_configuration()'],['../class_one_wire_temperature.html#a83bce20a52e396dbd97a43a6e72b2824',1,'OneWireTemperature::set_configuration()'],['../class_s_k_output.html#a406e7e56220dd41bd567c56c0e6b9a4d',1,'SKOutput::set_configuration()'],['../class_s_k_output_time.html#a41ad61c700a444916873e908612eca63',1,'SKOutputTime::set_configuration()'],['../class_configurable.html#a6e0281fe25cfbdf024bdb05147ffb52b',1,'Configurable::set_configuration()'],['../class_angle_correction.html#a53b1594b6161feff6f218a2aa7a05ad3',1,'AngleCorrection::set_configuration()'],['../class_curve_interpolator.html#acfda195c475a261d2e2a3af365fd6c19',1,'CurveInterpolator::set_configuration()'],['../class_difference.html#a57e134a00cd6688d147f93c662520040',1,'Difference::set_configuration()'],['../class_frequency.html#a87d16c67ce064b9b0f671747808c3963',1,'Frequency::set_configuration()'],['../class_integrator.html#aa53205d3211635dad0a035adf5d511a6',1,'Integrator::set_configuration()'],['../class_linear.html#ab12c626261e763892d4253f48478771a',1,'Linear::set_configuration()'],['../class_moving_average.html#a9f02a3c253c6456e4d5c063ea5f6d364',1,'MovingAverage::set_configuration()'],['../class_voltage_divider_r2.html#a805b64252dccfd3720ce5fc0f84964b3',1,'VoltageDividerR2::set_configuration()']]], + ['set_5fconfiguration',['set_configuration',['../class_networking.html#a59d475a2f12b88ef8334274a9a0b1cee',1,'Networking::set_configuration()'],['../class_w_s_client.html#ad099870379ee102fa4f5b3b584b50658',1,'WSClient::set_configuration()'],['../class_one_wire_temperature.html#a83bce20a52e396dbd97a43a6e72b2824',1,'OneWireTemperature::set_configuration()'],['../class_s_k_output.html#a406e7e56220dd41bd567c56c0e6b9a4d',1,'SKOutput::set_configuration()'],['../class_s_k_output_time.html#a41ad61c700a444916873e908612eca63',1,'SKOutputTime::set_configuration()'],['../class_configurable.html#a6e0281fe25cfbdf024bdb05147ffb52b',1,'Configurable::set_configuration()'],['../class_angle_correction.html#a53b1594b6161feff6f218a2aa7a05ad3',1,'AngleCorrection::set_configuration()'],['../class_change_filter.html#a0bbe692080d7ee9a41fcd77a3f581ca9',1,'ChangeFilter::set_configuration()'],['../class_curve_interpolator.html#acfda195c475a261d2e2a3af365fd6c19',1,'CurveInterpolator::set_configuration()'],['../class_difference.html#a57e134a00cd6688d147f93c662520040',1,'Difference::set_configuration()'],['../class_frequency.html#a87d16c67ce064b9b0f671747808c3963',1,'Frequency::set_configuration()'],['../class_integrator.html#aa53205d3211635dad0a035adf5d511a6',1,'Integrator::set_configuration()'],['../class_linear.html#ab12c626261e763892d4253f48478771a',1,'Linear::set_configuration()'],['../class_median.html#ac06073c22b922aceee9f01ddaccfb54a',1,'Median::set_configuration()'],['../class_moving_average.html#a9f02a3c253c6456e4d5c063ea5f6d364',1,'MovingAverage::set_configuration()'],['../class_voltage_divider_r2.html#a805b64252dccfd3720ce5fc0f84964b3',1,'VoltageDividerR2::set_configuration()']]], ['set_5fhostname',['set_hostname',['../class_networking.html#a500aa01c7d7da3d823a43c40212353f5',1,'Networking::set_hostname()'],['../class_s_k_delta.html#acd3c98ae0fe75f92d5d9c1e6a216a8dd',1,'SKDelta::set_hostname()']]], - ['set_5finput',['set_input',['../class_s_k_output.html#a43d76eef72e8dad90ee13a001c265be8',1,'SKOutput::set_input()'],['../class_value_consumer.html#a7bf920e5ad5f171ec6e2aeda056ff01f',1,'ValueConsumer::set_input()'],['../class_angle_correction.html#afd9a559ce1218e9b78137ff1a9c6d77d',1,'AngleCorrection::set_input()'],['../class_curve_interpolator.html#a6e4fcb3bb046ecacbe1855d74cdc47bb',1,'CurveInterpolator::set_input()'],['../class_debounce.html#a41ba3a24ea3490fc0717fa4d5f7fae0b',1,'Debounce::set_input()'],['../class_difference.html#a432ef87751c6bee8e5dadc610dfcb4ff',1,'Difference::set_input()'],['../class_frequency.html#a99df388f446a8aa46f465fe464023f55',1,'Frequency::set_input()'],['../class_integrator.html#a7fb38d2d19aa3e918dbee34b9096f7a6',1,'Integrator::set_input()'],['../class_linear.html#a057c8519f6eb7dd28392073010a2cfc3',1,'Linear::set_input()'],['../class_moving_average.html#a22a08de98351ed805b49beecb234ab0b',1,'MovingAverage::set_input()'],['../class_time_string.html#a631583475f42183fdc5cd02914a26320',1,'TimeString::set_input()'],['../class_voltage_divider_r2.html#a43fa7bb9dc49c50de247aac272d7f697',1,'VoltageDividerR2::set_input()']]], + ['set_5finput',['set_input',['../class_s_k_output.html#a43d76eef72e8dad90ee13a001c265be8',1,'SKOutput::set_input()'],['../class_value_consumer.html#a7bf920e5ad5f171ec6e2aeda056ff01f',1,'ValueConsumer::set_input()'],['../class_angle_correction.html#afd9a559ce1218e9b78137ff1a9c6d77d',1,'AngleCorrection::set_input()'],['../class_change_filter.html#a592657a8a1c12a9c16dc334aa804865c',1,'ChangeFilter::set_input()'],['../class_curve_interpolator.html#a6e4fcb3bb046ecacbe1855d74cdc47bb',1,'CurveInterpolator::set_input()'],['../class_debounce.html#a41ba3a24ea3490fc0717fa4d5f7fae0b',1,'Debounce::set_input()'],['../class_difference.html#a432ef87751c6bee8e5dadc610dfcb4ff',1,'Difference::set_input()'],['../class_frequency.html#a99df388f446a8aa46f465fe464023f55',1,'Frequency::set_input()'],['../class_integrator.html#a7fb38d2d19aa3e918dbee34b9096f7a6',1,'Integrator::set_input()'],['../class_linear.html#a057c8519f6eb7dd28392073010a2cfc3',1,'Linear::set_input()'],['../class_median.html#a012bc8d16c361b38ab01f56898ead20b',1,'Median::set_input()'],['../class_moving_average.html#a22a08de98351ed805b49beecb234ab0b',1,'MovingAverage::set_input()'],['../class_time_string.html#a631583475f42183fdc5cd02914a26320',1,'TimeString::set_input()'],['../class_voltage_divider_r2.html#a43fa7bb9dc49c50de247aac272d7f697',1,'VoltageDividerR2::set_input()']]], ['set_5fserver_5fconnected',['set_server_connected',['../class_led_blinker.html#a0cdd9d7e8cc453edd234ce2785ce28ea',1,'LedBlinker']]], ['set_5fserver_5fdisconnected',['set_server_disconnected',['../class_led_blinker.html#ab0f765b76f30406a7b53d4360c897d64',1,'LedBlinker']]], ['set_5fsk_5fpath',['set_sk_path',['../class_s_k_emitter.html#a670348fb1ef1bf3d5e1ba49660fc15d9',1,'SKEmitter']]], @@ -32,7 +32,7 @@ var searchData= ['setup_5fanalog_5finput',['setup_analog_input',['../wiring__helpers_8cpp.html#a3a4bbd0371b8285dbb7b8666d50a53a3',1,'setup_analog_input(String sk_path, float k, float c, String config_path): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a70ac1c40d730c9e0f9b93b1f4dd5f0f9',1,'setup_analog_input(String sk_path, float k=1, float c=0, String config_path=""): wiring_helpers.cpp']]], ['setup_5fdiscovery',['setup_discovery',['../discovery_8cpp.html#aeea49ee803402167d8d79ca58268363e',1,'setup_discovery(const char *hostname): discovery.cpp'],['../discovery_8h.html#aeea49ee803402167d8d79ca58268363e',1,'setup_discovery(const char *hostname): discovery.cpp']]], ['setup_5ffuel_5fflow_5fmeter',['setup_fuel_flow_meter',['../wiring__helpers_8cpp.html#ae36e0604b36693bd720bffcf4145baf9',1,'setup_fuel_flow_meter(int inflow_pin, int return_flow_pin): wiring_helpers.cpp'],['../wiring__helpers_8h.html#ae36e0604b36693bd720bffcf4145baf9',1,'setup_fuel_flow_meter(int inflow_pin, int return_flow_pin): wiring_helpers.cpp']]], - ['setup_5fgps',['setup_gps',['../wiring__helpers_8cpp.html#a76f3efb0a3eb60ba7ca13ba78e9e8052',1,'setup_gps(int reset_pin): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a8edfa609fe0f66ca940c2c8311e687b9',1,'setup_gps(int reset_pin=0): wiring_helpers.cpp']]], + ['setup_5fgps',['setup_gps',['../wiring__helpers_8cpp.html#a8f7d5e59747355ce523001faddc7ada9',1,'setup_gps(Stream *rx_stream): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a8f7d5e59747355ce523001faddc7ada9',1,'setup_gps(Stream *rx_stream): wiring_helpers.cpp']]], ['setup_5fonewire_5ftemperature',['setup_onewire_temperature',['../wiring__helpers_8cpp.html#a17220137bcd65b6f922f5a14165a8fcf',1,'setup_onewire_temperature(SensESPApp *seapp, DallasTemperatureSensors *dts, String sk_path, String config_path, String schema): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a37c83d7d3ac2abb00e8f9e86c1da52d3',1,'setup_onewire_temperature(DallasTemperatureSensors *dts, String sk_path, String config_path): wiring_helpers.h']]], ['setup_5fota',['setup_OTA',['../ota_8cpp.html#a29c2aa13f2bbaccceeb33ed39a6ece11',1,'setup_OTA(): ota.cpp'],['../ota_8h.html#a29c2aa13f2bbaccceeb33ed39a6ece11',1,'setup_OTA(): ota.cpp']]], ['setup_5frpm_5fmeter',['setup_rpm_meter',['../wiring__helpers_8cpp.html#aa6279a7bab0b61c448263a90303bb7e0',1,'setup_rpm_meter(SensESPApp *seapp, int input_pin): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a99ed20d80aca90bb060c88019c5f739f',1,'setup_rpm_meter(int input_pin): wiring_helpers.h']]], @@ -53,6 +53,7 @@ var searchData= ['sk_5fpath',['sk_path',['../class_s_k_emitter.html#a06dbe70e930074437b12b86ac4e2464c',1,'SKEmitter']]], ['skdelta',['SKDelta',['../class_s_k_delta.html',1,'SKDelta'],['../class_s_k_delta.html#a3d4825fc72903feaebe635dc643d2b16',1,'SKDelta::SKDelta()']]], ['skemitter',['SKEmitter',['../class_s_k_emitter.html',1,'SKEmitter'],['../class_s_k_emitter.html#aeba0ccd27a8b6bad1e2ddbf2603a5d8d',1,'SKEmitter::SKEmitter()']]], + ['skips',['skips',['../class_change_filter.html#ae51076f79fdfc36e34b8383a0e13e700',1,'ChangeFilter']]], ['skoutput',['SKOutput',['../class_s_k_output.html',1,'SKOutput< T >'],['../class_s_k_output.html#a88f9638dd4779818b41a62738ba44876',1,'SKOutput::SKOutput()'],['../class_s_k_output.html#a811a99c30626b6840000b0c152aa1f37',1,'SKOutput::SKOutput(String sk_path, String config_path="")']]], ['skoutputbool',['SKOutputBool',['../signalk__output_8h.html#a1a26c344db2dff33a77cf620aafa6c0c',1,'signalk_output.h']]], ['skoutputint',['SKOutputInt',['../signalk__output_8h.html#a2a0e216e5ada5e31f7a6d995d2c52642',1,'signalk_output.h']]], diff --git a/docs/search/all_2.js b/docs/search/all_2.js index 52275df23..04bab0dfb 100644 --- a/docs/search/all_2.js +++ b/docs/search/all_2.js @@ -1,5 +1,8 @@ var searchData= [ + ['change_5ffilter_2ecpp',['change_filter.cpp',['../change__filter_8cpp.html',1,'']]], + ['change_5ffilter_2eh',['change_filter.h',['../change__filter_8h.html',1,'']]], + ['changefilter',['ChangeFilter',['../class_change_filter.html',1,'ChangeFilter'],['../class_change_filter.html#a6ca0d72e2d4f5afc36ec6c38513cb9c3',1,'ChangeFilter::ChangeFilter()']]], ['check_5fconnection',['check_connection',['../class_networking.html#ae4b12924970227730df3377144301a7c',1,'Networking']]], ['classname',['className',['../class_enable.html#a88a9d200883d86ac64d5b1cd03c07d29',1,'Enable']]], ['clearsamples',['clearSamples',['../class_curve_interpolator.html#afb1dbb8e85015e2909dff8495875f8f5',1,'CurveInterpolator']]], diff --git a/docs/search/all_6.js b/docs/search/all_6.js index 5b35f35eb..d43339728 100644 --- a/docs/search/all_6.js +++ b/docs/search/all_6.js @@ -2,8 +2,8 @@ var searchData= [ ['geoidal_5fseparation',['geoidal_separation',['../struct_n_m_e_a_data.html#a3acdff78f354082419d01ebfe8846f7f',1,'NMEAData']]], ['get',['get',['../class_value_producer.html#adaf30ea1027efa0c83c75dfe3afc0c1a',1,'ValueProducer']]], - ['get_5fconfig_5fschema',['get_config_schema',['../class_networking.html#a253025ed2a3c36eb998e7b900155359e',1,'Networking::get_config_schema()'],['../class_w_s_client.html#a78fbe2ccf0f84423abbf9d1047aff0bc',1,'WSClient::get_config_schema()'],['../class_one_wire_temperature.html#a4331b2b91d6c7d000454e741cdce9d0a',1,'OneWireTemperature::get_config_schema()'],['../class_s_k_output.html#a0f29018517bcb51943dae1dd7bbace0a',1,'SKOutput::get_config_schema()'],['../class_s_k_output_time.html#aa283f508ef59103626c835cd37b9bfb3',1,'SKOutputTime::get_config_schema()'],['../class_configurable.html#a73131c4e7dd8134f23a93de861e1c0e4',1,'Configurable::get_config_schema()'],['../class_angle_correction.html#ad31bbb6a8fd400879eceba5f0b2880fe',1,'AngleCorrection::get_config_schema()'],['../class_curve_interpolator.html#a6f9c593782d05c95ba92810b8f70f287',1,'CurveInterpolator::get_config_schema()'],['../class_difference.html#ac5b6559e3820f2f58bed5d120a440a55',1,'Difference::get_config_schema()'],['../class_frequency.html#a93e3f28917f7faa7411b95745171f6af',1,'Frequency::get_config_schema()'],['../class_integrator.html#a513afaf30460fee68abd295780527d05',1,'Integrator::get_config_schema()'],['../class_linear.html#afc896eaed1df40409ea3ce17d81929cc',1,'Linear::get_config_schema()'],['../class_moving_average.html#ad6f06b147a017e528e3d8b991cec2763',1,'MovingAverage::get_config_schema()'],['../class_voltage_divider_r2.html#ae37065fd9bd093497ff74a9faf5b6cea',1,'VoltageDividerR2::get_config_schema()']]], - ['get_5fconfiguration',['get_configuration',['../class_networking.html#a2b8f2f52b332dc0af375113a64881a8a',1,'Networking::get_configuration()'],['../class_w_s_client.html#a2a41e313d8d3be52cd7bb53e6bbf3117',1,'WSClient::get_configuration()'],['../class_one_wire_temperature.html#a4a1058669383f507ed70bd46f9f0d2f0',1,'OneWireTemperature::get_configuration()'],['../class_s_k_output.html#a1020f0eb3e0eb6bc10f57034c7fbc0c6',1,'SKOutput::get_configuration()'],['../class_s_k_output_time.html#a03982e7159ac7e6d44b8f7c6976617c4',1,'SKOutputTime::get_configuration()'],['../class_configurable.html#a787559a1a907f909d6088d2ec6825b44',1,'Configurable::get_configuration()'],['../class_angle_correction.html#a454172cb376cbeb9f3b7467392bf582e',1,'AngleCorrection::get_configuration()'],['../class_curve_interpolator.html#a274cd3426b3e379db1538c71bebad9c8',1,'CurveInterpolator::get_configuration()'],['../class_difference.html#a70f6832fd0b14c5eb5c2c05188757b72',1,'Difference::get_configuration()'],['../class_frequency.html#ae121e43d37643d390bc607def68e0e02',1,'Frequency::get_configuration()'],['../class_integrator.html#a1b4cfd7f598d8456a582865a88d768e7',1,'Integrator::get_configuration()'],['../class_linear.html#a98f7cf12073c2aa89bbb7f89b13f6299',1,'Linear::get_configuration()'],['../class_moving_average.html#a1cac9948f8ca32b8d4446e419b09cccb',1,'MovingAverage::get_configuration()'],['../class_voltage_divider_r2.html#a35275626b89244eb30f0c1be504dbdb6',1,'VoltageDividerR2::get_configuration()']]], + ['get_5fconfig_5fschema',['get_config_schema',['../class_networking.html#a253025ed2a3c36eb998e7b900155359e',1,'Networking::get_config_schema()'],['../class_w_s_client.html#a78fbe2ccf0f84423abbf9d1047aff0bc',1,'WSClient::get_config_schema()'],['../class_one_wire_temperature.html#a4331b2b91d6c7d000454e741cdce9d0a',1,'OneWireTemperature::get_config_schema()'],['../class_s_k_output.html#a0f29018517bcb51943dae1dd7bbace0a',1,'SKOutput::get_config_schema()'],['../class_s_k_output_time.html#aa283f508ef59103626c835cd37b9bfb3',1,'SKOutputTime::get_config_schema()'],['../class_configurable.html#a73131c4e7dd8134f23a93de861e1c0e4',1,'Configurable::get_config_schema()'],['../class_angle_correction.html#ad31bbb6a8fd400879eceba5f0b2880fe',1,'AngleCorrection::get_config_schema()'],['../class_change_filter.html#a769403176db0e4a619811bbba603d597',1,'ChangeFilter::get_config_schema()'],['../class_curve_interpolator.html#a6f9c593782d05c95ba92810b8f70f287',1,'CurveInterpolator::get_config_schema()'],['../class_difference.html#ac5b6559e3820f2f58bed5d120a440a55',1,'Difference::get_config_schema()'],['../class_frequency.html#a93e3f28917f7faa7411b95745171f6af',1,'Frequency::get_config_schema()'],['../class_integrator.html#a513afaf30460fee68abd295780527d05',1,'Integrator::get_config_schema()'],['../class_linear.html#afc896eaed1df40409ea3ce17d81929cc',1,'Linear::get_config_schema()'],['../class_median.html#aa8515edf3b34ee8439bd77dcfc69a93f',1,'Median::get_config_schema()'],['../class_moving_average.html#ad6f06b147a017e528e3d8b991cec2763',1,'MovingAverage::get_config_schema()'],['../class_voltage_divider_r2.html#ae37065fd9bd093497ff74a9faf5b6cea',1,'VoltageDividerR2::get_config_schema()']]], + ['get_5fconfiguration',['get_configuration',['../class_networking.html#a2b8f2f52b332dc0af375113a64881a8a',1,'Networking::get_configuration()'],['../class_w_s_client.html#a2a41e313d8d3be52cd7bb53e6bbf3117',1,'WSClient::get_configuration()'],['../class_one_wire_temperature.html#a4a1058669383f507ed70bd46f9f0d2f0',1,'OneWireTemperature::get_configuration()'],['../class_s_k_output.html#a1020f0eb3e0eb6bc10f57034c7fbc0c6',1,'SKOutput::get_configuration()'],['../class_s_k_output_time.html#a03982e7159ac7e6d44b8f7c6976617c4',1,'SKOutputTime::get_configuration()'],['../class_configurable.html#a787559a1a907f909d6088d2ec6825b44',1,'Configurable::get_configuration()'],['../class_angle_correction.html#a454172cb376cbeb9f3b7467392bf582e',1,'AngleCorrection::get_configuration()'],['../class_change_filter.html#a6cd0d60d57663d94c1972bf939b40d76',1,'ChangeFilter::get_configuration()'],['../class_curve_interpolator.html#a274cd3426b3e379db1538c71bebad9c8',1,'CurveInterpolator::get_configuration()'],['../class_difference.html#a70f6832fd0b14c5eb5c2c05188757b72',1,'Difference::get_configuration()'],['../class_frequency.html#ae121e43d37643d390bc607def68e0e02',1,'Frequency::get_configuration()'],['../class_integrator.html#a1b4cfd7f598d8456a582865a88d768e7',1,'Integrator::get_configuration()'],['../class_linear.html#a98f7cf12073c2aa89bbb7f89b13f6299',1,'Linear::get_configuration()'],['../class_median.html#a2ce826a6b0cc7e467345671b843d7af2',1,'Median::get_configuration()'],['../class_moving_average.html#a1cac9948f8ca32b8d4446e419b09cccb',1,'MovingAverage::get_configuration()'],['../class_voltage_divider_r2.html#a35275626b89244eb30f0c1be504dbdb6',1,'VoltageDividerR2::get_configuration()']]], ['get_5fdelta',['get_delta',['../class_s_k_delta.html#ab1592b494b343964703102a4797d3bbc',1,'SKDelta']]], ['get_5fhostname',['get_hostname',['../class_networking.html#a7a3cac2e878aa2c513451f235c70aff7',1,'Networking::get_hostname()'],['../class_sens_e_s_p_app.html#ac068882b9e9f6092da0818c5e42b48b8',1,'SensESPApp::get_hostname()']]], ['get_5fnext_5faddress',['get_next_address',['../class_dallas_temperature_sensors.html#a1e1b9cd3dd2bde0d51ef657a490881eb',1,'DallasTemperatureSensors']]], @@ -13,7 +13,7 @@ var searchData= ['get_5ftransforms',['get_transforms',['../class_transform_base.html#a17bfeb1e7a836b7bc597aa7d7c4ac116',1,'TransformBase']]], ['get_5fvalue_5fname',['get_value_name',['../class_system_hz.html#aafe9250142a6c4b234f3d8e64771ce95',1,'SystemHz::get_value_name()'],['../class_free_mem.html#a114359cfbb1cffce40e545bf00889757',1,'FreeMem::get_value_name()'],['../class_uptime.html#a43cdcac661b684e1c746fcdf7224e68f',1,'Uptime::get_value_name()'],['../class_i_p_addr_dev.html#aad770ae7db264bfc4bc33d3d1dca71fb',1,'IPAddrDev::get_value_name()']]], ['getclassname',['getClassName',['../class_enable.html#af924d33e6ccb0a065af78f264997299f',1,'Enable']]], - ['getenablepriority',['getEnablePriority',['../class_enable.html#a12a65d666c56d9909c2a1958b7cfda40',1,'Enable']]], + ['getenablepriority',['getEnablePriority',['../class_enable.html#a38bebd90f45effcd9fa2781cc43f0d34',1,'Enable']]], ['gnss_5ffix',['gnss_fix',['../nmea__parser_8cpp.html#ae6214acf1027a76f58e3b83767cc4520adea098971e394461267006ddf5d2d4b0',1,'nmea_parser.cpp']]], ['gnss_5fquality',['gnss_quality',['../struct_n_m_e_a_data.html#a8048e071ffb9f37ff425305525f2223a',1,'NMEAData']]], ['gnssquality',['GNSSQuality',['../nmea__parser_8cpp.html#ae6214acf1027a76f58e3b83767cc4520',1,'nmea_parser.cpp']]], @@ -23,6 +23,5 @@ var searchData= ['gprmcsentenceparser',['GPRMCSentenceParser',['../class_g_p_r_m_c_sentence_parser.html',1,'GPRMCSentenceParser'],['../class_g_p_r_m_c_sentence_parser.html#a8ea0212728334cc4b6fa4aa650fa2e58',1,'GPRMCSentenceParser::GPRMCSentenceParser()']]], ['gps_2ecpp',['gps.cpp',['../gps_8cpp.html',1,'']]], ['gps_2eh',['gps.h',['../gps_8h.html',1,'']]], - ['gps_5fserial_5fbitrate',['GPS_SERIAL_BITRATE',['../gps_8h.html#ac650038f97fda9a0aaf3a30b3a0860bd',1,'gps.h']]], - ['gpsinput',['GPSInput',['../class_g_p_s_input.html',1,'GPSInput'],['../class_g_p_s_input.html#ab763769a97cf52221aeb9e63d3004737',1,'GPSInput::GPSInput()']]] + ['gpsinput',['GPSInput',['../class_g_p_s_input.html',1,'GPSInput'],['../class_g_p_s_input.html#ac434000c2641c7ef06badb2d51f79520',1,'GPSInput::GPSInput()']]] ]; diff --git a/docs/search/all_7.js b/docs/search/all_7.js index 9d9690d49..ef3721318 100644 --- a/docs/search/all_7.js +++ b/docs/search/all_7.js @@ -1,5 +1,6 @@ var searchData= [ + ['handle',['handle',['../class_n_m_e_a_parser.html#a8687b75207c6df0c049721fe5a586913',1,'NMEAParser']]], ['handle_5fconfig',['handle_config',['../class_h_t_t_p_server.html#a3b7406f8ac0cb9b90e86513acee23542',1,'HTTPServer']]], ['handle_5fdevice_5freset',['handle_device_reset',['../class_h_t_t_p_server.html#ab088a2530794acb9db8a8e1910729c35',1,'HTTPServer']]], ['handle_5fdevice_5frestart',['handle_device_restart',['../class_h_t_t_p_server.html#a8b03465f1ad5631d0e20cc67e5419562',1,'HTTPServer']]], diff --git a/docs/search/all_b.js b/docs/search/all_b.js index 225480fe7..fcb5bb415 100644 --- a/docs/search/all_b.js +++ b/docs/search/all_b.js @@ -2,6 +2,12 @@ var searchData= [ ['manual_5finput',['manual_input',['../nmea__parser_8cpp.html#ae6214acf1027a76f58e3b83767cc4520a4692e23f3770a255f880456f7fbec485',1,'nmea_parser.cpp']]], ['max_5fterms',['MAX_TERMS',['../nmea__parser_8h.html#a6487a496a45b3acfe263589909cfc101',1,'nmea_parser.h']]], + ['maxdelta',['maxDelta',['../class_change_filter.html#aa92a8149f304a8627cc8c990dc929c35',1,'ChangeFilter']]], + ['maxskips',['maxSkips',['../class_change_filter.html#a48314db9ee86e057f0c771573b302331',1,'ChangeFilter']]], + ['median',['Median',['../class_median.html',1,'Median'],['../class_median.html#a986e318f167a85623757c0e247f892fd',1,'Median::Median()']]], + ['median_2ecpp',['median.cpp',['../median_8cpp.html',1,'']]], + ['median_2eh',['median.h',['../median_8h.html',1,'']]], + ['mindelta',['minDelta',['../class_change_filter.html#accc1a8a8df0fd7051708b183b8570b5a',1,'ChangeFilter']]], ['moving_5faverage_2ecpp',['moving_average.cpp',['../moving__average_8cpp.html',1,'']]], ['moving_5faverage_2eh',['moving_average.h',['../moving__average_8h.html',1,'']]], ['movingaverage',['MovingAverage',['../class_moving_average.html',1,'MovingAverage'],['../class_moving_average.html#adda127d69bc5441a3f4ca98d51c87f4b',1,'MovingAverage::MovingAverage()']]], diff --git a/docs/search/all_f.js b/docs/search/all_f.js index bd5f2b5c6..73fc43e1d 100644 --- a/docs/search/all_f.js +++ b/docs/search/all_f.js @@ -1,11 +1,11 @@ var searchData= [ ['r1',['R1',['../class_voltage_divider_r2.html#a927b6c4d26bc24dfd326f63a0a127f66',1,'VoltageDividerR2']]], - ['read',['read',['../class_n_m_e_a_parser.html#a0f7e6a8f7ee6d7f2ab69a0b05341861b',1,'NMEAParser']]], ['read_5fjson',['read_json',['../spiffs__storage_8h.html#aeb6c893649f188e378de0c76055b1f01',1,'spiffs_storage.h']]], ['read_5fstring',['read_string',['../spiffs__storage_8cpp.html#a7429780969e66149e25ea6088bf65b7a',1,'read_string(const String filename): spiffs_storage.cpp'],['../spiffs__storage_8h.html#a7429780969e66149e25ea6088bf65b7a',1,'read_string(const String filename): spiffs_storage.cpp']]], ['reconstruct_5fnmea_5fsentence',['reconstruct_nmea_sentence',['../nmea__parser_8cpp.html#a69a390886762ecd9593ebeada6f3e52d',1,'nmea_parser.cpp']]], ['register_5faddress',['register_address',['../class_dallas_temperature_sensors.html#a020ae149bf4372f926d4414ac5c67f5a',1,'DallasTemperatureSensors']]], + ['report_5fsuccess',['report_success',['../nmea__parser_8cpp.html#af7a3600deec155122015fcfedfc126a7',1,'nmea_parser.cpp']]], ['reset',['reset',['../class_sens_e_s_p_app.html#a0f7605a2c63a3ed250e1c742608956b2',1,'SensESPApp']]], ['reset_5fsettings',['reset_settings',['../class_networking.html#a207f306c10b8f65ca0904cc26a9ef15c',1,'Networking']]], ['restart',['restart',['../class_w_s_client.html#a478877d14e5a303c24ea60a4cc4f8752',1,'WSClient']]], diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js index d968cf05c..c047f30da 100644 --- a/docs/search/classes_1.js +++ b/docs/search/classes_1.js @@ -1,5 +1,6 @@ var searchData= [ + ['changefilter',['ChangeFilter',['../class_change_filter.html',1,'']]], ['configurable',['Configurable',['../class_configurable.html',1,'']]], ['curveinterpolator',['CurveInterpolator',['../class_curve_interpolator.html',1,'']]] ]; diff --git a/docs/search/classes_9.js b/docs/search/classes_9.js index 88c6743bb..e3395069f 100644 --- a/docs/search/classes_9.js +++ b/docs/search/classes_9.js @@ -1,4 +1,5 @@ var searchData= [ + ['median',['Median',['../class_median.html',1,'']]], ['movingaverage',['MovingAverage',['../class_moving_average.html',1,'']]] ]; diff --git a/docs/search/files_1.js b/docs/search/files_1.js index e7d980e90..708d27639 100644 --- a/docs/search/files_1.js +++ b/docs/search/files_1.js @@ -1,5 +1,7 @@ var searchData= [ + ['change_5ffilter_2ecpp',['change_filter.cpp',['../change__filter_8cpp.html',1,'']]], + ['change_5ffilter_2eh',['change_filter.h',['../change__filter_8h.html',1,'']]], ['configurable_2ecpp',['configurable.cpp',['../configurable_8cpp.html',1,'']]], ['configurable_2eh',['configurable.h',['../configurable_8h.html',1,'']]], ['curveinterpolator_2ecpp',['curveinterpolator.cpp',['../curveinterpolator_8cpp.html',1,'']]], diff --git a/docs/search/files_a.js b/docs/search/files_a.js index 54484d3d7..004d1af66 100644 --- a/docs/search/files_a.js +++ b/docs/search/files_a.js @@ -1,5 +1,7 @@ var searchData= [ + ['median_2ecpp',['median.cpp',['../median_8cpp.html',1,'']]], + ['median_2eh',['median.h',['../median_8h.html',1,'']]], ['moving_5faverage_2ecpp',['moving_average.cpp',['../moving__average_8cpp.html',1,'']]], ['moving_5faverage_2eh',['moving_average.h',['../moving__average_8h.html',1,'']]] ]; diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js index ff628ac18..9c5f9654e 100644 --- a/docs/search/functions_1.js +++ b/docs/search/functions_1.js @@ -1,5 +1,6 @@ var searchData= [ + ['changefilter',['ChangeFilter',['../class_change_filter.html#a6ca0d72e2d4f5afc36ec6c38513cb9c3',1,'ChangeFilter']]], ['check_5fconnection',['check_connection',['../class_networking.html#ae4b12924970227730df3377144301a7c',1,'Networking']]], ['clearsamples',['clearSamples',['../class_curve_interpolator.html#afb1dbb8e85015e2909dff8495875f8f5',1,'CurveInterpolator']]], ['configurable',['Configurable',['../class_configurable.html#a8972a439fb9b734ff68d27c699640f78',1,'Configurable']]], diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js index f27cdd8e6..b99fc9c71 100644 --- a/docs/search/functions_5.js +++ b/docs/search/functions_5.js @@ -1,8 +1,8 @@ var searchData= [ ['get',['get',['../class_value_producer.html#adaf30ea1027efa0c83c75dfe3afc0c1a',1,'ValueProducer']]], - ['get_5fconfig_5fschema',['get_config_schema',['../class_networking.html#a253025ed2a3c36eb998e7b900155359e',1,'Networking::get_config_schema()'],['../class_w_s_client.html#a78fbe2ccf0f84423abbf9d1047aff0bc',1,'WSClient::get_config_schema()'],['../class_one_wire_temperature.html#a4331b2b91d6c7d000454e741cdce9d0a',1,'OneWireTemperature::get_config_schema()'],['../class_s_k_output.html#a0f29018517bcb51943dae1dd7bbace0a',1,'SKOutput::get_config_schema()'],['../class_s_k_output_time.html#aa283f508ef59103626c835cd37b9bfb3',1,'SKOutputTime::get_config_schema()'],['../class_configurable.html#a73131c4e7dd8134f23a93de861e1c0e4',1,'Configurable::get_config_schema()'],['../class_angle_correction.html#ad31bbb6a8fd400879eceba5f0b2880fe',1,'AngleCorrection::get_config_schema()'],['../class_curve_interpolator.html#a6f9c593782d05c95ba92810b8f70f287',1,'CurveInterpolator::get_config_schema()'],['../class_difference.html#ac5b6559e3820f2f58bed5d120a440a55',1,'Difference::get_config_schema()'],['../class_frequency.html#a93e3f28917f7faa7411b95745171f6af',1,'Frequency::get_config_schema()'],['../class_integrator.html#a513afaf30460fee68abd295780527d05',1,'Integrator::get_config_schema()'],['../class_linear.html#afc896eaed1df40409ea3ce17d81929cc',1,'Linear::get_config_schema()'],['../class_moving_average.html#ad6f06b147a017e528e3d8b991cec2763',1,'MovingAverage::get_config_schema()'],['../class_voltage_divider_r2.html#ae37065fd9bd093497ff74a9faf5b6cea',1,'VoltageDividerR2::get_config_schema()']]], - ['get_5fconfiguration',['get_configuration',['../class_networking.html#a2b8f2f52b332dc0af375113a64881a8a',1,'Networking::get_configuration()'],['../class_w_s_client.html#a2a41e313d8d3be52cd7bb53e6bbf3117',1,'WSClient::get_configuration()'],['../class_one_wire_temperature.html#a4a1058669383f507ed70bd46f9f0d2f0',1,'OneWireTemperature::get_configuration()'],['../class_s_k_output.html#a1020f0eb3e0eb6bc10f57034c7fbc0c6',1,'SKOutput::get_configuration()'],['../class_s_k_output_time.html#a03982e7159ac7e6d44b8f7c6976617c4',1,'SKOutputTime::get_configuration()'],['../class_configurable.html#a787559a1a907f909d6088d2ec6825b44',1,'Configurable::get_configuration()'],['../class_angle_correction.html#a454172cb376cbeb9f3b7467392bf582e',1,'AngleCorrection::get_configuration()'],['../class_curve_interpolator.html#a274cd3426b3e379db1538c71bebad9c8',1,'CurveInterpolator::get_configuration()'],['../class_difference.html#a70f6832fd0b14c5eb5c2c05188757b72',1,'Difference::get_configuration()'],['../class_frequency.html#ae121e43d37643d390bc607def68e0e02',1,'Frequency::get_configuration()'],['../class_integrator.html#a1b4cfd7f598d8456a582865a88d768e7',1,'Integrator::get_configuration()'],['../class_linear.html#a98f7cf12073c2aa89bbb7f89b13f6299',1,'Linear::get_configuration()'],['../class_moving_average.html#a1cac9948f8ca32b8d4446e419b09cccb',1,'MovingAverage::get_configuration()'],['../class_voltage_divider_r2.html#a35275626b89244eb30f0c1be504dbdb6',1,'VoltageDividerR2::get_configuration()']]], + ['get_5fconfig_5fschema',['get_config_schema',['../class_networking.html#a253025ed2a3c36eb998e7b900155359e',1,'Networking::get_config_schema()'],['../class_w_s_client.html#a78fbe2ccf0f84423abbf9d1047aff0bc',1,'WSClient::get_config_schema()'],['../class_one_wire_temperature.html#a4331b2b91d6c7d000454e741cdce9d0a',1,'OneWireTemperature::get_config_schema()'],['../class_s_k_output.html#a0f29018517bcb51943dae1dd7bbace0a',1,'SKOutput::get_config_schema()'],['../class_s_k_output_time.html#aa283f508ef59103626c835cd37b9bfb3',1,'SKOutputTime::get_config_schema()'],['../class_configurable.html#a73131c4e7dd8134f23a93de861e1c0e4',1,'Configurable::get_config_schema()'],['../class_angle_correction.html#ad31bbb6a8fd400879eceba5f0b2880fe',1,'AngleCorrection::get_config_schema()'],['../class_change_filter.html#a769403176db0e4a619811bbba603d597',1,'ChangeFilter::get_config_schema()'],['../class_curve_interpolator.html#a6f9c593782d05c95ba92810b8f70f287',1,'CurveInterpolator::get_config_schema()'],['../class_difference.html#ac5b6559e3820f2f58bed5d120a440a55',1,'Difference::get_config_schema()'],['../class_frequency.html#a93e3f28917f7faa7411b95745171f6af',1,'Frequency::get_config_schema()'],['../class_integrator.html#a513afaf30460fee68abd295780527d05',1,'Integrator::get_config_schema()'],['../class_linear.html#afc896eaed1df40409ea3ce17d81929cc',1,'Linear::get_config_schema()'],['../class_median.html#aa8515edf3b34ee8439bd77dcfc69a93f',1,'Median::get_config_schema()'],['../class_moving_average.html#ad6f06b147a017e528e3d8b991cec2763',1,'MovingAverage::get_config_schema()'],['../class_voltage_divider_r2.html#ae37065fd9bd093497ff74a9faf5b6cea',1,'VoltageDividerR2::get_config_schema()']]], + ['get_5fconfiguration',['get_configuration',['../class_networking.html#a2b8f2f52b332dc0af375113a64881a8a',1,'Networking::get_configuration()'],['../class_w_s_client.html#a2a41e313d8d3be52cd7bb53e6bbf3117',1,'WSClient::get_configuration()'],['../class_one_wire_temperature.html#a4a1058669383f507ed70bd46f9f0d2f0',1,'OneWireTemperature::get_configuration()'],['../class_s_k_output.html#a1020f0eb3e0eb6bc10f57034c7fbc0c6',1,'SKOutput::get_configuration()'],['../class_s_k_output_time.html#a03982e7159ac7e6d44b8f7c6976617c4',1,'SKOutputTime::get_configuration()'],['../class_configurable.html#a787559a1a907f909d6088d2ec6825b44',1,'Configurable::get_configuration()'],['../class_angle_correction.html#a454172cb376cbeb9f3b7467392bf582e',1,'AngleCorrection::get_configuration()'],['../class_change_filter.html#a6cd0d60d57663d94c1972bf939b40d76',1,'ChangeFilter::get_configuration()'],['../class_curve_interpolator.html#a274cd3426b3e379db1538c71bebad9c8',1,'CurveInterpolator::get_configuration()'],['../class_difference.html#a70f6832fd0b14c5eb5c2c05188757b72',1,'Difference::get_configuration()'],['../class_frequency.html#ae121e43d37643d390bc607def68e0e02',1,'Frequency::get_configuration()'],['../class_integrator.html#a1b4cfd7f598d8456a582865a88d768e7',1,'Integrator::get_configuration()'],['../class_linear.html#a98f7cf12073c2aa89bbb7f89b13f6299',1,'Linear::get_configuration()'],['../class_median.html#a2ce826a6b0cc7e467345671b843d7af2',1,'Median::get_configuration()'],['../class_moving_average.html#a1cac9948f8ca32b8d4446e419b09cccb',1,'MovingAverage::get_configuration()'],['../class_voltage_divider_r2.html#a35275626b89244eb30f0c1be504dbdb6',1,'VoltageDividerR2::get_configuration()']]], ['get_5fdelta',['get_delta',['../class_s_k_delta.html#ab1592b494b343964703102a4797d3bbc',1,'SKDelta']]], ['get_5fhostname',['get_hostname',['../class_networking.html#a7a3cac2e878aa2c513451f235c70aff7',1,'Networking::get_hostname()'],['../class_sens_e_s_p_app.html#ac068882b9e9f6092da0818c5e42b48b8',1,'SensESPApp::get_hostname()']]], ['get_5fnext_5faddress',['get_next_address',['../class_dallas_temperature_sensors.html#a1e1b9cd3dd2bde0d51ef657a490881eb',1,'DallasTemperatureSensors']]], @@ -12,9 +12,9 @@ var searchData= ['get_5ftransforms',['get_transforms',['../class_transform_base.html#a17bfeb1e7a836b7bc597aa7d7c4ac116',1,'TransformBase']]], ['get_5fvalue_5fname',['get_value_name',['../class_system_hz.html#aafe9250142a6c4b234f3d8e64771ce95',1,'SystemHz::get_value_name()'],['../class_free_mem.html#a114359cfbb1cffce40e545bf00889757',1,'FreeMem::get_value_name()'],['../class_uptime.html#a43cdcac661b684e1c746fcdf7224e68f',1,'Uptime::get_value_name()'],['../class_i_p_addr_dev.html#aad770ae7db264bfc4bc33d3d1dca71fb',1,'IPAddrDev::get_value_name()']]], ['getclassname',['getClassName',['../class_enable.html#af924d33e6ccb0a065af78f264997299f',1,'Enable']]], - ['getenablepriority',['getEnablePriority',['../class_enable.html#a12a65d666c56d9909c2a1958b7cfda40',1,'Enable']]], + ['getenablepriority',['getEnablePriority',['../class_enable.html#a38bebd90f45effcd9fa2781cc43f0d34',1,'Enable']]], ['gpggasentenceparser',['GPGGASentenceParser',['../class_g_p_g_g_a_sentence_parser.html#a1a3a77042194bd6ef59b7960c0f35fd1',1,'GPGGASentenceParser']]], ['gpgllsentenceparser',['GPGLLSentenceParser',['../class_g_p_g_l_l_sentence_parser.html#af4335548b0e919cb23ec9149bc2e8012',1,'GPGLLSentenceParser']]], ['gprmcsentenceparser',['GPRMCSentenceParser',['../class_g_p_r_m_c_sentence_parser.html#a8ea0212728334cc4b6fa4aa650fa2e58',1,'GPRMCSentenceParser']]], - ['gpsinput',['GPSInput',['../class_g_p_s_input.html#ab763769a97cf52221aeb9e63d3004737',1,'GPSInput']]] + ['gpsinput',['GPSInput',['../class_g_p_s_input.html#ac434000c2641c7ef06badb2d51f79520',1,'GPSInput']]] ]; diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js index f5d592a53..14d991a67 100644 --- a/docs/search/functions_6.js +++ b/docs/search/functions_6.js @@ -1,5 +1,6 @@ var searchData= [ + ['handle',['handle',['../class_n_m_e_a_parser.html#a8687b75207c6df0c049721fe5a586913',1,'NMEAParser']]], ['handle_5fconfig',['handle_config',['../class_h_t_t_p_server.html#a3b7406f8ac0cb9b90e86513acee23542',1,'HTTPServer']]], ['handle_5fdevice_5freset',['handle_device_reset',['../class_h_t_t_p_server.html#ab088a2530794acb9db8a8e1910729c35',1,'HTTPServer']]], ['handle_5fdevice_5frestart',['handle_device_restart',['../class_h_t_t_p_server.html#a8b03465f1ad5631d0e20cc67e5419562',1,'HTTPServer']]], diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js index 660321996..de83c8d10 100644 --- a/docs/search/functions_9.js +++ b/docs/search/functions_9.js @@ -1,4 +1,5 @@ var searchData= [ + ['median',['Median',['../class_median.html#a986e318f167a85623757c0e247f892fd',1,'Median']]], ['movingaverage',['MovingAverage',['../class_moving_average.html#adda127d69bc5441a3f4ca98d51c87f4b',1,'MovingAverage']]] ]; diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js index 7cc57793c..a0ab2b18c 100644 --- a/docs/search/functions_d.js +++ b/docs/search/functions_d.js @@ -1,10 +1,10 @@ var searchData= [ - ['read',['read',['../class_n_m_e_a_parser.html#a0f7e6a8f7ee6d7f2ab69a0b05341861b',1,'NMEAParser']]], ['read_5fjson',['read_json',['../spiffs__storage_8h.html#aeb6c893649f188e378de0c76055b1f01',1,'spiffs_storage.h']]], ['read_5fstring',['read_string',['../spiffs__storage_8cpp.html#a7429780969e66149e25ea6088bf65b7a',1,'read_string(const String filename): spiffs_storage.cpp'],['../spiffs__storage_8h.html#a7429780969e66149e25ea6088bf65b7a',1,'read_string(const String filename): spiffs_storage.cpp']]], ['reconstruct_5fnmea_5fsentence',['reconstruct_nmea_sentence',['../nmea__parser_8cpp.html#a69a390886762ecd9593ebeada6f3e52d',1,'nmea_parser.cpp']]], ['register_5faddress',['register_address',['../class_dallas_temperature_sensors.html#a020ae149bf4372f926d4414ac5c67f5a',1,'DallasTemperatureSensors']]], + ['report_5fsuccess',['report_success',['../nmea__parser_8cpp.html#af7a3600deec155122015fcfedfc126a7',1,'nmea_parser.cpp']]], ['reset',['reset',['../class_sens_e_s_p_app.html#a0f7605a2c63a3ed250e1c742608956b2',1,'SensESPApp']]], ['reset_5fsettings',['reset_settings',['../class_networking.html#a207f306c10b8f65ca0904cc26a9ef15c',1,'Networking']]], ['restart',['restart',['../class_w_s_client.html#a478877d14e5a303c24ea60a4cc4f8752',1,'WSClient']]] diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js index e95a4f6db..ef41635e5 100644 --- a/docs/search/functions_e.js +++ b/docs/search/functions_e.js @@ -9,9 +9,9 @@ var searchData= ['sentence',['sentence',['../class_sentence_parser.html#aa079d8ee1b96e2f03a9c7a1f2ddf7519',1,'SentenceParser::sentence()'],['../class_g_p_g_g_a_sentence_parser.html#ac70d60b587cd0e48479c397bb30983a3',1,'GPGGASentenceParser::sentence()'],['../class_g_p_g_l_l_sentence_parser.html#acbee347184ae22343a9af2515ae57c98',1,'GPGLLSentenceParser::sentence()'],['../class_g_p_r_m_c_sentence_parser.html#a75afdae2ce4e8a27676d86ef2f5cbf9f',1,'GPRMCSentenceParser::sentence()'],['../class_p_s_t_i_sentence_parser.html#add6764d7c0579101840b82a86f6bd2ef',1,'PSTISentenceParser::sentence()'],['../class_p_s_t_i030_sentence_parser.html#adf5b386bffd76b1055d70aa59615d493',1,'PSTI030SentenceParser::sentence()'],['../class_p_s_t_i032_sentence_parser.html#acbe297f07ea6729d870ec8222535b1ce',1,'PSTI032SentenceParser::sentence()']]], ['sentenceparser',['SentenceParser',['../class_sentence_parser.html#a20be85c734aab87cf783aaa6a999a29a',1,'SentenceParser']]], ['set',['set',['../class_observable_value.html#a51cf25d4951d3214021da0c25985838d',1,'ObservableValue']]], - ['set_5fconfiguration',['set_configuration',['../class_networking.html#a59d475a2f12b88ef8334274a9a0b1cee',1,'Networking::set_configuration()'],['../class_w_s_client.html#ad099870379ee102fa4f5b3b584b50658',1,'WSClient::set_configuration()'],['../class_one_wire_temperature.html#a83bce20a52e396dbd97a43a6e72b2824',1,'OneWireTemperature::set_configuration()'],['../class_s_k_output.html#a406e7e56220dd41bd567c56c0e6b9a4d',1,'SKOutput::set_configuration()'],['../class_s_k_output_time.html#a41ad61c700a444916873e908612eca63',1,'SKOutputTime::set_configuration()'],['../class_configurable.html#a6e0281fe25cfbdf024bdb05147ffb52b',1,'Configurable::set_configuration()'],['../class_angle_correction.html#a53b1594b6161feff6f218a2aa7a05ad3',1,'AngleCorrection::set_configuration()'],['../class_curve_interpolator.html#acfda195c475a261d2e2a3af365fd6c19',1,'CurveInterpolator::set_configuration()'],['../class_difference.html#a57e134a00cd6688d147f93c662520040',1,'Difference::set_configuration()'],['../class_frequency.html#a87d16c67ce064b9b0f671747808c3963',1,'Frequency::set_configuration()'],['../class_integrator.html#aa53205d3211635dad0a035adf5d511a6',1,'Integrator::set_configuration()'],['../class_linear.html#ab12c626261e763892d4253f48478771a',1,'Linear::set_configuration()'],['../class_moving_average.html#a9f02a3c253c6456e4d5c063ea5f6d364',1,'MovingAverage::set_configuration()'],['../class_voltage_divider_r2.html#a805b64252dccfd3720ce5fc0f84964b3',1,'VoltageDividerR2::set_configuration()']]], + ['set_5fconfiguration',['set_configuration',['../class_networking.html#a59d475a2f12b88ef8334274a9a0b1cee',1,'Networking::set_configuration()'],['../class_w_s_client.html#ad099870379ee102fa4f5b3b584b50658',1,'WSClient::set_configuration()'],['../class_one_wire_temperature.html#a83bce20a52e396dbd97a43a6e72b2824',1,'OneWireTemperature::set_configuration()'],['../class_s_k_output.html#a406e7e56220dd41bd567c56c0e6b9a4d',1,'SKOutput::set_configuration()'],['../class_s_k_output_time.html#a41ad61c700a444916873e908612eca63',1,'SKOutputTime::set_configuration()'],['../class_configurable.html#a6e0281fe25cfbdf024bdb05147ffb52b',1,'Configurable::set_configuration()'],['../class_angle_correction.html#a53b1594b6161feff6f218a2aa7a05ad3',1,'AngleCorrection::set_configuration()'],['../class_change_filter.html#a0bbe692080d7ee9a41fcd77a3f581ca9',1,'ChangeFilter::set_configuration()'],['../class_curve_interpolator.html#acfda195c475a261d2e2a3af365fd6c19',1,'CurveInterpolator::set_configuration()'],['../class_difference.html#a57e134a00cd6688d147f93c662520040',1,'Difference::set_configuration()'],['../class_frequency.html#a87d16c67ce064b9b0f671747808c3963',1,'Frequency::set_configuration()'],['../class_integrator.html#aa53205d3211635dad0a035adf5d511a6',1,'Integrator::set_configuration()'],['../class_linear.html#ab12c626261e763892d4253f48478771a',1,'Linear::set_configuration()'],['../class_median.html#ac06073c22b922aceee9f01ddaccfb54a',1,'Median::set_configuration()'],['../class_moving_average.html#a9f02a3c253c6456e4d5c063ea5f6d364',1,'MovingAverage::set_configuration()'],['../class_voltage_divider_r2.html#a805b64252dccfd3720ce5fc0f84964b3',1,'VoltageDividerR2::set_configuration()']]], ['set_5fhostname',['set_hostname',['../class_networking.html#a500aa01c7d7da3d823a43c40212353f5',1,'Networking::set_hostname()'],['../class_s_k_delta.html#acd3c98ae0fe75f92d5d9c1e6a216a8dd',1,'SKDelta::set_hostname()']]], - ['set_5finput',['set_input',['../class_s_k_output.html#a43d76eef72e8dad90ee13a001c265be8',1,'SKOutput::set_input()'],['../class_value_consumer.html#a7bf920e5ad5f171ec6e2aeda056ff01f',1,'ValueConsumer::set_input()'],['../class_angle_correction.html#afd9a559ce1218e9b78137ff1a9c6d77d',1,'AngleCorrection::set_input()'],['../class_curve_interpolator.html#a6e4fcb3bb046ecacbe1855d74cdc47bb',1,'CurveInterpolator::set_input()'],['../class_debounce.html#a41ba3a24ea3490fc0717fa4d5f7fae0b',1,'Debounce::set_input()'],['../class_difference.html#a432ef87751c6bee8e5dadc610dfcb4ff',1,'Difference::set_input()'],['../class_frequency.html#a99df388f446a8aa46f465fe464023f55',1,'Frequency::set_input()'],['../class_integrator.html#a7fb38d2d19aa3e918dbee34b9096f7a6',1,'Integrator::set_input()'],['../class_linear.html#a057c8519f6eb7dd28392073010a2cfc3',1,'Linear::set_input()'],['../class_moving_average.html#a22a08de98351ed805b49beecb234ab0b',1,'MovingAverage::set_input()'],['../class_time_string.html#a631583475f42183fdc5cd02914a26320',1,'TimeString::set_input()'],['../class_voltage_divider_r2.html#a43fa7bb9dc49c50de247aac272d7f697',1,'VoltageDividerR2::set_input()']]], + ['set_5finput',['set_input',['../class_s_k_output.html#a43d76eef72e8dad90ee13a001c265be8',1,'SKOutput::set_input()'],['../class_value_consumer.html#a7bf920e5ad5f171ec6e2aeda056ff01f',1,'ValueConsumer::set_input()'],['../class_angle_correction.html#afd9a559ce1218e9b78137ff1a9c6d77d',1,'AngleCorrection::set_input()'],['../class_change_filter.html#a592657a8a1c12a9c16dc334aa804865c',1,'ChangeFilter::set_input()'],['../class_curve_interpolator.html#a6e4fcb3bb046ecacbe1855d74cdc47bb',1,'CurveInterpolator::set_input()'],['../class_debounce.html#a41ba3a24ea3490fc0717fa4d5f7fae0b',1,'Debounce::set_input()'],['../class_difference.html#a432ef87751c6bee8e5dadc610dfcb4ff',1,'Difference::set_input()'],['../class_frequency.html#a99df388f446a8aa46f465fe464023f55',1,'Frequency::set_input()'],['../class_integrator.html#a7fb38d2d19aa3e918dbee34b9096f7a6',1,'Integrator::set_input()'],['../class_linear.html#a057c8519f6eb7dd28392073010a2cfc3',1,'Linear::set_input()'],['../class_median.html#a012bc8d16c361b38ab01f56898ead20b',1,'Median::set_input()'],['../class_moving_average.html#a22a08de98351ed805b49beecb234ab0b',1,'MovingAverage::set_input()'],['../class_time_string.html#a631583475f42183fdc5cd02914a26320',1,'TimeString::set_input()'],['../class_voltage_divider_r2.html#a43fa7bb9dc49c50de247aac272d7f697',1,'VoltageDividerR2::set_input()']]], ['set_5fserver_5fconnected',['set_server_connected',['../class_led_blinker.html#a0cdd9d7e8cc453edd234ce2785ce28ea',1,'LedBlinker']]], ['set_5fserver_5fdisconnected',['set_server_disconnected',['../class_led_blinker.html#ab0f765b76f30406a7b53d4360c897d64',1,'LedBlinker']]], ['set_5fsk_5fpath',['set_sk_path',['../class_s_k_emitter.html#a670348fb1ef1bf3d5e1ba49660fc15d9',1,'SKEmitter']]], @@ -24,7 +24,7 @@ var searchData= ['setup_5fanalog_5finput',['setup_analog_input',['../wiring__helpers_8cpp.html#a3a4bbd0371b8285dbb7b8666d50a53a3',1,'setup_analog_input(String sk_path, float k, float c, String config_path): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a70ac1c40d730c9e0f9b93b1f4dd5f0f9',1,'setup_analog_input(String sk_path, float k=1, float c=0, String config_path=""): wiring_helpers.cpp']]], ['setup_5fdiscovery',['setup_discovery',['../discovery_8cpp.html#aeea49ee803402167d8d79ca58268363e',1,'setup_discovery(const char *hostname): discovery.cpp'],['../discovery_8h.html#aeea49ee803402167d8d79ca58268363e',1,'setup_discovery(const char *hostname): discovery.cpp']]], ['setup_5ffuel_5fflow_5fmeter',['setup_fuel_flow_meter',['../wiring__helpers_8cpp.html#ae36e0604b36693bd720bffcf4145baf9',1,'setup_fuel_flow_meter(int inflow_pin, int return_flow_pin): wiring_helpers.cpp'],['../wiring__helpers_8h.html#ae36e0604b36693bd720bffcf4145baf9',1,'setup_fuel_flow_meter(int inflow_pin, int return_flow_pin): wiring_helpers.cpp']]], - ['setup_5fgps',['setup_gps',['../wiring__helpers_8cpp.html#a76f3efb0a3eb60ba7ca13ba78e9e8052',1,'setup_gps(int reset_pin): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a8edfa609fe0f66ca940c2c8311e687b9',1,'setup_gps(int reset_pin=0): wiring_helpers.cpp']]], + ['setup_5fgps',['setup_gps',['../wiring__helpers_8cpp.html#a8f7d5e59747355ce523001faddc7ada9',1,'setup_gps(Stream *rx_stream): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a8f7d5e59747355ce523001faddc7ada9',1,'setup_gps(Stream *rx_stream): wiring_helpers.cpp']]], ['setup_5fonewire_5ftemperature',['setup_onewire_temperature',['../wiring__helpers_8cpp.html#a17220137bcd65b6f922f5a14165a8fcf',1,'setup_onewire_temperature(SensESPApp *seapp, DallasTemperatureSensors *dts, String sk_path, String config_path, String schema): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a37c83d7d3ac2abb00e8f9e86c1da52d3',1,'setup_onewire_temperature(DallasTemperatureSensors *dts, String sk_path, String config_path): wiring_helpers.h']]], ['setup_5fota',['setup_OTA',['../ota_8cpp.html#a29c2aa13f2bbaccceeb33ed39a6ece11',1,'setup_OTA(): ota.cpp'],['../ota_8h.html#a29c2aa13f2bbaccceeb33ed39a6ece11',1,'setup_OTA(): ota.cpp']]], ['setup_5frpm_5fmeter',['setup_rpm_meter',['../wiring__helpers_8cpp.html#aa6279a7bab0b61c448263a90303bb7e0',1,'setup_rpm_meter(SensESPApp *seapp, int input_pin): wiring_helpers.cpp'],['../wiring__helpers_8h.html#a99ed20d80aca90bb060c88019c5f739f',1,'setup_rpm_meter(int input_pin): wiring_helpers.h']]], diff --git a/docs/search/variables_5.js b/docs/search/variables_5.js index 68f63d9f5..daa85a35d 100644 --- a/docs/search/variables_5.js +++ b/docs/search/variables_5.js @@ -2,6 +2,5 @@ var searchData= [ ['geoidal_5fseparation',['geoidal_separation',['../struct_n_m_e_a_data.html#a3acdff78f354082419d01ebfe8846f7f',1,'NMEAData']]], ['gnss_5fquality',['gnss_quality',['../struct_n_m_e_a_data.html#a8048e071ffb9f37ff425305525f2223a',1,'NMEAData']]], - ['gnssqualitystrings',['gnssQualityStrings',['../nmea__parser_8cpp.html#a78e0374f91eaf4035ec29121f7e40064',1,'nmea_parser.cpp']]], - ['gps_5fserial_5fbitrate',['GPS_SERIAL_BITRATE',['../gps_8h.html#ac650038f97fda9a0aaf3a30b3a0860bd',1,'gps.h']]] + ['gnssqualitystrings',['gnssQualityStrings',['../nmea__parser_8cpp.html#a78e0374f91eaf4035ec29121f7e40064',1,'nmea_parser.cpp']]] ]; diff --git a/docs/search/variables_9.js b/docs/search/variables_9.js index 51d1c7f04..46480a52b 100644 --- a/docs/search/variables_9.js +++ b/docs/search/variables_9.js @@ -1,5 +1,8 @@ var searchData= [ ['max_5fterms',['MAX_TERMS',['../nmea__parser_8h.html#a6487a496a45b3acfe263589909cfc101',1,'nmea_parser.h']]], + ['maxdelta',['maxDelta',['../class_change_filter.html#aa92a8149f304a8627cc8c990dc929c35',1,'ChangeFilter']]], + ['maxskips',['maxSkips',['../class_change_filter.html#a48314db9ee86e057f0c771573b302331',1,'ChangeFilter']]], + ['mindelta',['minDelta',['../class_change_filter.html#accc1a8a8df0fd7051708b183b8570b5a',1,'ChangeFilter']]], ['msmindelay',['msMinDelay',['../class_debounce.html#a3e1dca3d133fdef71d95b58a922c478a',1,'Debounce']]] ]; diff --git a/docs/search/variables_e.js b/docs/search/variables_e.js index 2ea69a061..ba427bdcc 100644 --- a/docs/search/variables_e.js +++ b/docs/search/variables_e.js @@ -4,5 +4,6 @@ var searchData= ['sensors',['sensors',['../class_dallas_temperature_sensors.html#abd79995496fd66d416e6d9cd1ff56342',1,'DallasTemperatureSensors']]], ['should_5fsave_5fconfig',['should_save_config',['../networking_8cpp.html#ade4bb65788e7b6ea2d2e3e026baf7310',1,'networking.cpp']]], ['sk_5fpath',['sk_path',['../class_s_k_emitter.html#a06dbe70e930074437b12b86ac4e2464c',1,'SKEmitter']]], + ['skips',['skips',['../class_change_filter.html#ae51076f79fdfc36e34b8383a0e13e700',1,'ChangeFilter']]], ['speed',['speed',['../struct_n_m_e_a_data.html#afe6efa0ec62ce332673ab98b282990c8',1,'NMEAData']]] ]; diff --git a/docs/sensesp_8h.html b/docs/sensesp_8h.html index 749ac959d..246b9ee33 100644 --- a/docs/sensesp_8h.html +++ b/docs/sensesp_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -111,56 +111,56 @@
- - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/sensesp_8h__dep__incl.map b/docs/sensesp_8h__dep__incl.map index f83d4c3db..b7b73ba6b 100644 --- a/docs/sensesp_8h__dep__incl.map +++ b/docs/sensesp_8h__dep__incl.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/sensesp_8h__dep__incl.md5 b/docs/sensesp_8h__dep__incl.md5 index 4f7ca1506..bbc7d26ff 100644 --- a/docs/sensesp_8h__dep__incl.md5 +++ b/docs/sensesp_8h__dep__incl.md5 @@ -1 +1 @@ -deb8132b5f0a9cf55833f5d64c22264d \ No newline at end of file +e5de768fd951db6df0670a83060f77cb \ No newline at end of file diff --git a/docs/sensesp_8h__dep__incl.png b/docs/sensesp_8h__dep__incl.png index ce0011013..61e84f94a 100644 Binary files a/docs/sensesp_8h__dep__incl.png and b/docs/sensesp_8h__dep__incl.png differ diff --git a/docs/sensesp_8h_source.html b/docs/sensesp_8h_source.html index bd80f4f9b..e02d21c1e 100644 --- a/docs/sensesp_8h_source.html +++ b/docs/sensesp_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/sensesp__app_8cpp.html b/docs/sensesp__app_8cpp.html index c8313a8d8..37b3bd28e 100644 --- a/docs/sensesp__app_8cpp.html +++ b/docs/sensesp__app_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -196,7 +196,7 @@

-

Definition at line 172 of file sensesp_app.cpp.

+

Definition at line 173 of file sensesp_app.cpp.

diff --git a/docs/sensesp__app_8cpp_source.html b/docs/sensesp__app_8cpp_source.html index b56a30fc4..e8a929412 100644 --- a/docs/sensesp__app_8cpp_source.html +++ b/docs/sensesp__app_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,30 +91,30 @@
sensesp_app.cpp
-Go to the documentation of this file.
1 #include "sensesp_app.h"
2 
3 #include "FS.h"
4 
5 #include "sensors/analog_input.h"
7 #include "sensors/system_info.h"
8 #include "net/discovery.h"
9 #include "net/ota.h"
10 #include "net/networking.h"
11 #include "system/spiffs_storage.h"
12 #include "transforms/transform.h"
13 #include "transforms/difference.h"
14 #include "transforms/frequency.h"
15 #include "transforms/linear.h"
16 #include "signalk/signalk_output.h"
17 
18 #ifndef DEBUG_DISABLED
19 RemoteDebug Debug;
20 #endif
21 
22 // FIXME: Setting up the system is too verbose and repetitive
23 
25  // initialize filesystem
26 
27  if (!SPIFFS.begin()) {
28  debugE("FATAL: Filesystem initialization failed.");
29  ESP.restart();
30  }
31 
32  // create the networking object
33  networking = new Networking("/system/networking");
34  ObservableValue<String>* hostname = networking->get_hostname();
35 
36  // setup standard sensors and their transforms
37 
38  setup_standard_sensors(hostname);
39 
40  // create the SK delta object
41 
42  sk_delta = new SKDelta(hostname->get());
43 
44  // listen for hostname updates
45 
46  hostname->attach([hostname, this](){
47  this->sk_delta->set_hostname(hostname->get());
48  });
49 
50  // create the HTTP server
51 
52  this->http_server = new HTTPServer(std::bind(&SensESPApp::reset, this));
53 
54  // create the websocket client
55 
56  auto ws_connected_cb = [this](bool connected){
57  if (connected) {
58  this->led_blinker.set_server_connected();
59  } else {
60  this->led_blinker.set_server_disconnected();
61  }
62  };
63  auto ws_delta_cb = [this](){
64  this->led_blinker.flip();
65  };
66  this->ws_client = new WSClient(
67  "/system/sk",
68  sk_delta, ws_connected_cb, ws_delta_cb);
69 }
70 
71 void SensESPApp::setup_standard_sensors(ObservableValue<String>* hostname) {
72 
73  // connect systemhz
74 
75  connect_1to1_h<SystemHz, SKOutput<float>>(
76  new SystemHz(),
77  new SKOutput<float>(),
78  hostname
79  );
80 
81  String hostname_str = hostname->get();
82 
83  // connect freemem
84 
85  connect_1to1_h<FreeMem, SKOutput<float>>(
86  new FreeMem(),
87  new SKOutput<float>(),
88  hostname
89  );
90 
91  // connect uptime
92 
93  connect_1to1_h<Uptime, SKOutput<float>>(
94  new Uptime(),
95  new SKOutput<float>(),
96  hostname
97  );
98 
99  // connect ip address
100 
101  connect_1to1_h<IPAddrDev, SKOutput<String>>(
102  new IPAddrDev(),
103  new SKOutput<String>(),
104  hostname
105  );
106 }
107 
109  this->led_blinker.set_wifi_disconnected();
110 
111  // connect all transforms to the Signal K delta output
112 
113  ObservableValue<String>* hostname = networking->get_hostname();
114 
115  for (auto const& sigkSource : SKEmitter::get_sources()) {
116  if (sigkSource->get_sk_path() != "") {
117  debugI("Connecting SignalK source %s", sigkSource->get_sk_path().c_str());
118  sigkSource->attach([sigkSource, this](){
119  this->sk_delta->append(sigkSource->as_signalK());
120  });
121  }
122  }
123 
124  debugI("Enabling subsystems");
125 
126  debugI("Subsystem: networking->setup()");
127  networking->setup([this](bool connected) {
128  if (connected) {
129  this->led_blinker.set_wifi_connected();
130  } else {
131  this->led_blinker.set_wifi_disconnected();
132  debugD("Not connected to wifi");
133  }
134  });
135 
136  debugI("Subsystem: setup_OTA()");
137  setup_OTA();
138  debugI("Subsystem: setup_discovery()");
139  setup_discovery(networking->get_hostname()->get().c_str());
140 
141  debugI("Subsystem: http_server()");
142  this->http_server->enable();
143  debugI("Subsystem: ws_client()");
144  this->ws_client->enable();
145 
146  debugI("WS client enabled");
147 
148  // initialize remote debugging
149 
150  #ifndef DEBUG_DISABLED
151  Debug.begin(networking->get_hostname()->get());
152  Debug.setResetCmdEnabled(true);
153  app.onRepeat(1, [](){ Debug.handle(); });
154  #endif
155 
157  debugI("All sensors and transforms enabled");
158 
159 }
160 
162  debugW("Resetting the device configuration.");
163  networking->reset_settings();
164  SPIFFS.format();
165  app.onDelay(1000, [](){ ESP.reset(); });
166 }
167 
169  return networking->get_hostname()->get();
170 }
171 
void reset_settings()
Definition: networking.cpp:143
+Go to the documentation of this file.
1 #include "sensesp_app.h"
2 
3 #include "FS.h"
4 
5 #include "sensors/analog_input.h"
7 #include "sensors/system_info.h"
8 #include "net/discovery.h"
9 #include "net/ota.h"
10 #include "net/networking.h"
11 #include "system/spiffs_storage.h"
12 #include "transforms/transform.h"
13 #include "transforms/difference.h"
14 #include "transforms/frequency.h"
15 #include "transforms/linear.h"
16 #include "signalk/signalk_output.h"
17 
18 #ifndef DEBUG_DISABLED
19 RemoteDebug Debug;
20 #endif
21 
22 // FIXME: Setting up the system is too verbose and repetitive
23 
25  // initialize filesystem
26 
27  if (!SPIFFS.begin()) {
28  debugE("FATAL: Filesystem initialization failed.");
29  ESP.restart();
30  }
31 
32  // create the networking object
33  networking = new Networking("/system/networking");
34  ObservableValue<String>* hostname = networking->get_hostname();
35 
36  // setup standard sensors and their transforms
37 
38  setup_standard_sensors(hostname);
39 
40  // create the SK delta object
41 
42  sk_delta = new SKDelta(hostname->get());
43 
44  // listen for hostname updates
45 
46  hostname->attach([hostname, this](){
47  this->sk_delta->set_hostname(hostname->get());
48  });
49 
50  // create the HTTP server
51 
52  this->http_server = new HTTPServer(std::bind(&SensESPApp::reset, this));
53 
54  // create the websocket client
55 
56  auto ws_connected_cb = [this](bool connected){
57  if (connected) {
58  this->led_blinker.set_server_connected();
59  } else {
60  this->led_blinker.set_server_disconnected();
61  }
62  };
63  auto ws_delta_cb = [this](){
64  this->led_blinker.flip();
65  };
66  this->ws_client = new WSClient(
67  "/system/sk",
68  sk_delta, ws_connected_cb, ws_delta_cb);
69 }
70 
71 void SensESPApp::setup_standard_sensors(ObservableValue<String>* hostname) {
72 
73  // connect systemhz
74 
75  connect_1to1_h<SystemHz, SKOutput<float>>(
76  new SystemHz(),
77  new SKOutput<float>(),
78  hostname
79  );
80 
81  String hostname_str = hostname->get();
82 
83  // connect freemem
84 
85  connect_1to1_h<FreeMem, SKOutput<float>>(
86  new FreeMem(),
87  new SKOutput<float>(),
88  hostname
89  );
90 
91  // connect uptime
92 
93  connect_1to1_h<Uptime, SKOutput<float>>(
94  new Uptime(),
95  new SKOutput<float>(),
96  hostname
97  );
98 
99  // connect ip address
100 
101  connect_1to1_h<IPAddrDev, SKOutput<String>>(
102  new IPAddrDev(),
103  new SKOutput<String>(),
104  hostname
105  );
106 }
107 
109  this->led_blinker.set_wifi_disconnected();
110 
111  // connect all transforms to the Signal K delta output
112 
113  // ObservableValue<String>* hostname = networking->get_hostname();
114 
115  for (auto const& sigkSource : SKEmitter::get_sources()) {
116  if (sigkSource->get_sk_path() != "") {
117  debugI("Connecting SignalK source %s", sigkSource->get_sk_path().c_str());
118  sigkSource->attach([sigkSource, this](){
119  this->sk_delta->append(sigkSource->as_signalK());
120  });
121  }
122  }
123 
124  debugI("Enabling subsystems");
125 
126  debugI("Subsystem: setup_discovery()");
127  setup_discovery(networking->get_hostname()->get().c_str());
128 
129  debugI("Subsystem: networking->setup()");
130  networking->setup([this](bool connected) {
131  if (connected) {
132  this->led_blinker.set_wifi_connected();
133  } else {
134  this->led_blinker.set_wifi_disconnected();
135  debugD("Not connected to wifi");
136  }
137  });
138 
139  debugI("Subsystem: setup_OTA()");
140  setup_OTA();
141 
142  debugI("Subsystem: http_server()");
143  this->http_server->enable();
144  debugI("Subsystem: ws_client()");
145  this->ws_client->enable();
146 
147  debugI("WS client enabled");
148 
149  // initialize remote debugging
150 
151  #ifndef DEBUG_DISABLED
152  Debug.begin(networking->get_hostname()->get());
153  Debug.setResetCmdEnabled(true);
154  app.onRepeat(1, [](){ Debug.handle(); });
155  #endif
156 
158  debugI("All sensors and transforms enabled");
159 
160 }
161 
163  debugW("Resetting the device configuration.");
164  networking->reset_settings();
165  SPIFFS.format();
166  app.onDelay(1000, [](){ ESP.reset(); });
167 }
168 
170  return networking->get_hostname()->get();
171 }
172 
void reset_settings()
Definition: networking.cpp:143
-
SensESPApp * sensesp_app
+
SensESPApp * sensesp_app
static void enableAll()
Definition: enable.cpp:12
ObservableValue< String > * get_hostname()
Definition: networking.cpp:102
-
void enable()
Definition: ws_client.cpp:51
+
void enable()
Definition: ws_client.cpp:54
RemoteDebug Debug
Definition: sensesp_app.cpp:19
-
void reset()
+
void reset()
virtual const T & get()
Definition: valueproducer.h:29
void enable()
-
void append(const String val)
+
void append(const String val)
-
String get_hostname()
+
String get_hostname()
void set_server_disconnected()
Definition: led_blinker.h:17
void setup_OTA()
Definition: ota.cpp:17
diff --git a/docs/sensesp__app_8h.html b/docs/sensesp__app_8h.html index c6b187cc9..82eaa3d0b 100644 --- a/docs/sensesp__app_8h.html +++ b/docs/sensesp__app_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -204,7 +204,7 @@

-

Definition at line 172 of file sensesp_app.cpp.

+

Definition at line 173 of file sensesp_app.cpp.

diff --git a/docs/sensesp__app_8h_source.html b/docs/sensesp__app_8h_source.html index 4695e6bd8..19cd5846a 100644 --- a/docs/sensesp__app_8h_source.html +++ b/docs/sensesp__app_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -93,9 +93,9 @@
Go to the documentation of this file.
1 #ifndef _app_H_
2 #define _app_H_
3 
4 // Required for RemoteDebug
5 #define USE_LIB_WEBSOCKET true
6 
7 #include "sensors/sensor.h"
8 #include "net/http.h"
9 #include "net/networking.h"
10 #include "net/ws_client.h"
11 #include "sensesp.h"
12 #include "system/led_blinker.h"
13 #include "signalk/signalk_delta.h"
14 #include "system/valueproducer.h"
15 #include "system/valueconsumer.h"
16 #include "system/observablevalue.h"
17 
18 class SensESPApp {
19  public:
20  SensESPApp();
21  void enable();
22  void reset();
23  String get_hostname();
24 
25 
26  template<typename T>
27  void connect(ValueProducer<T>* pProducer, ValueConsumer<T>* pConsumer, uint8_t inputChannel = 0) {
28  pProducer->connectTo(pConsumer, inputChannel);
29  }
30 
31  template<typename T, typename U>
32  void connect_1to1_h(T* sensor, U* transform,
33  ObservableValue<String>* hostname) {
34  String hostname_str = hostname->get();
35  String value_name = sensor->get_value_name();
36  String sk_path = "sensors." + hostname_str + "." + value_name;
37  auto comp_set_sk_path = [hostname, transform, value_name](){
38  transform->set_sk_path(
39  "sensors." + hostname->get() + "." + value_name);
40  };
41  comp_set_sk_path();
42  sensor->attach([sensor, transform](){
43  transform->set_input(sensor->get());
44  });
45  hostname->attach(comp_set_sk_path);
46  }
47 
51  bool isWifiConnected() {
52  return WiFi.status() == WL_CONNECTED;
53  }
54 
55 
60  return ws_client->is_connected();
61  }
62 
63 
64  private:
65  void setup_standard_sensors(ObservableValue<String>* hostname);
66 
67  HTTPServer* http_server;
68  LedBlinker led_blinker;
69  Networking* networking;
70  SKDelta* sk_delta;
71  WSClient* ws_client;
72 
73 };
74 
75 extern SensESPApp* sensesp_app;
76 
77 #endif
-
SensESPApp * sensesp_app
+
SensESPApp * sensesp_app
void connect_1to1_h(T *sensor, U *transform, ObservableValue< String > *hostname)
Definition: sensesp_app.h:32
-
void reset()
+
void reset()
@@ -104,7 +104,7 @@
void enable()
-
String get_hostname()
+
String get_hostname()
@@ -119,7 +119,7 @@ -
bool is_connected()
Definition: ws_client.cpp:310
+
bool is_connected()
Definition: ws_client.cpp:321
void connectTo(ValueConsumer< T > *pConsumer, uint8_t inputChannel=0)
Definition: valueproducer.h:42
diff --git a/docs/sensor_8cpp.html b/docs/sensor_8cpp.html index a36754f13..711d81839 100644 --- a/docs/sensor_8cpp.html +++ b/docs/sensor_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/sensor_8cpp_source.html b/docs/sensor_8cpp_source.html index 3c597bac9..e6ec38ecb 100644 --- a/docs/sensor_8cpp_source.html +++ b/docs/sensor_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/sensor_8h.html b/docs/sensor_8h.html index 4456d975e..6331ed44a 100644 --- a/docs/sensor_8h.html +++ b/docs/sensor_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -125,28 +125,28 @@
- + - - - - - - - + + + + + + + - - + + - - - - - + + + + +
diff --git a/docs/sensor_8h__dep__incl.map b/docs/sensor_8h__dep__incl.map index 54e79b41f..c4f83b233 100644 --- a/docs/sensor_8h__dep__incl.map +++ b/docs/sensor_8h__dep__incl.map @@ -1,24 +1,24 @@ - + - - - - - - - + + + + + + + - - + + - - - - - + + + + + diff --git a/docs/sensor_8h__dep__incl.md5 b/docs/sensor_8h__dep__incl.md5 index f1defdba9..94ee333ad 100644 --- a/docs/sensor_8h__dep__incl.md5 +++ b/docs/sensor_8h__dep__incl.md5 @@ -1 +1 @@ -b13fc42df564156c79131e8441796987 \ No newline at end of file +5e6af2ecc15d4a9052748a0daa0812d1 \ No newline at end of file diff --git a/docs/sensor_8h__dep__incl.png b/docs/sensor_8h__dep__incl.png index 98118f4b9..2693bcd91 100644 Binary files a/docs/sensor_8h__dep__incl.png and b/docs/sensor_8h__dep__incl.png differ diff --git a/docs/sensor_8h_source.html b/docs/sensor_8h_source.html index e2eefffb1..d13d9fc5d 100644 --- a/docs/sensor_8h_source.html +++ b/docs/sensor_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/setup_8h.html b/docs/setup_8h.html index 394e503aa..4efd42cec 100644 --- a/docs/setup_8h.html +++ b/docs/setup_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/setup_8h_source.html b/docs/setup_8h_source.html index 77b89f4b3..13a298973 100644 --- a/docs/setup_8h_source.html +++ b/docs/setup_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__delta_8cpp.html b/docs/signalk__delta_8cpp.html index dc0b18b75..4c5122e99 100644 --- a/docs/signalk__delta_8cpp.html +++ b/docs/signalk__delta_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -94,16 +94,20 @@
#include "signalk_delta.h"
#include "Arduino.h"
#include "ArduinoJson.h"
+#include "sensesp.h"
Include dependency graph for signalk_delta.cpp:
- + + + +
diff --git a/docs/signalk__delta_8cpp__incl.map b/docs/signalk__delta_8cpp__incl.map index b47ca4b49..2b03e91c1 100644 --- a/docs/signalk__delta_8cpp__incl.map +++ b/docs/signalk__delta_8cpp__incl.map @@ -1,7 +1,10 @@ - + + + + diff --git a/docs/signalk__delta_8cpp__incl.md5 b/docs/signalk__delta_8cpp__incl.md5 index 19a17a436..52fd1e887 100644 --- a/docs/signalk__delta_8cpp__incl.md5 +++ b/docs/signalk__delta_8cpp__incl.md5 @@ -1 +1 @@ -b41ae35d880fbda781ec34dfc65b02b9 \ No newline at end of file +4d156008227e0f635b63cd4f23b001f0 \ No newline at end of file diff --git a/docs/signalk__delta_8cpp__incl.png b/docs/signalk__delta_8cpp__incl.png index e1c947ce9..9313f4386 100644 Binary files a/docs/signalk__delta_8cpp__incl.png and b/docs/signalk__delta_8cpp__incl.png differ diff --git a/docs/signalk__delta_8cpp_source.html b/docs/signalk__delta_8cpp_source.html index a7c9e68a4..1bfb1850e 100644 --- a/docs/signalk__delta_8cpp_source.html +++ b/docs/signalk__delta_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,11 +91,12 @@
signalk_delta.cpp
-Go to the documentation of this file.
1 #include "signalk_delta.h"
2 
3 #include "Arduino.h"
4 #include "ArduinoJson.h"
5 
6 SKDelta::SKDelta(const String& hostname, unsigned int max_buffer_size)
7 : hostname{hostname},
8  max_buffer_size{max_buffer_size} {}
9 
10 void SKDelta::append(const String val) {
11  if (buffer.size() >= max_buffer_size) {
12  buffer.pop_back();
13  }
14  buffer.push_front(val);
15 }
16 
18  return buffer.size() > 0;
19 }
20 
21 void SKDelta::get_delta(String& output) {
22  DynamicJsonBuffer jsonBuffer;
23 
24  JsonObject& delta = jsonBuffer.createObject();
25  JsonArray& updates = delta.createNestedArray("updates");
26 
27  JsonObject& current = updates.createNestedObject();
28  JsonObject& source = current.createNestedObject("source");
29  source["label"] = hostname;
30  JsonArray& values = current.createNestedArray("values");
31 
32  while (!buffer.empty()) {
33  values.add(RawJson(buffer.back()));
34  buffer.pop_back();
35  }
36 
37  delta.printTo(output);
38 }
39 
-
SKDelta(const String &hostname, unsigned int max_buffer_size=20)
-
void append(const String val)
-
bool data_available()
-
void get_delta(String &output)
+Go to the documentation of this file.
1 #include "signalk_delta.h"
2 
3 #include "Arduino.h"
4 #include "ArduinoJson.h"
5 #include "sensesp.h"
6 
7 SKDelta::SKDelta(const String& hostname, unsigned int max_buffer_size)
8 : hostname{hostname},
9  max_buffer_size{max_buffer_size} {}
10 
11 void SKDelta::append(const String val) {
12  if (buffer.size() >= max_buffer_size) {
13  buffer.pop_back();
14  }
15  buffer.push_front(val);
16 }
17 
19  return buffer.size() > 0;
20 }
21 
22 void SKDelta::get_delta(String& output) {
23  DynamicJsonBuffer jsonBuffer;
24 
25  JsonObject& delta = jsonBuffer.createObject();
26  JsonArray& updates = delta.createNestedArray("updates");
27 
28  JsonObject& current = updates.createNestedObject();
29  JsonObject& source = current.createNestedObject("source");
30  source["label"] = hostname;
31  JsonArray& values = current.createNestedArray("values");
32 
33  while (!buffer.empty()) {
34  values.add(RawJson(buffer.back()));
35  buffer.pop_back();
36  }
37 
38  delta.printTo(output);
39 
40  debugD("SKDelta::get_delta: %s", output.c_str());
41 }
42 
+
SKDelta(const String &hostname, unsigned int max_buffer_size=20)
+
void append(const String val)
+
bool data_available()
+
void get_delta(String &output)
+
diff --git a/docs/signalk__delta_8h.html b/docs/signalk__delta_8h.html index c5dcc878a..46d30d33c 100644 --- a/docs/signalk__delta_8h.html +++ b/docs/signalk__delta_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__delta_8h_source.html b/docs/signalk__delta_8h_source.html index 076d1643e..f7370eacb 100644 --- a/docs/signalk__delta_8h_source.html +++ b/docs/signalk__delta_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,12 +91,12 @@
signalk_delta.h
-Go to the documentation of this file.
1 #ifndef _signalk_delta_H_
2 #define _signalk_delta_H_
3 
4 #include <list>
5 
6 #include "ArduinoJson.h"
7 
9 // Signal K delta message representation
10 
11 class SKDelta {
12  public:
13  SKDelta(const String& hostname, unsigned int max_buffer_size=20);
14  void append(const String val);
15  bool data_available();
16  void get_delta(String& output);
17  void set_hostname(String hostname) { this->hostname = hostname; }
18  private:
19  String hostname;
20  unsigned int max_buffer_size;
21  std::list<String> buffer;
22 };
23 
24 #endif
SKDelta(const String &hostname, unsigned int max_buffer_size=20)
+Go to the documentation of this file.
1 #ifndef _signalk_delta_H_
2 #define _signalk_delta_H_
3 
4 #include <list>
5 
6 #include "ArduinoJson.h"
7 
9 // Signal K delta message representation
10 
11 class SKDelta {
12  public:
13  SKDelta(const String& hostname, unsigned int max_buffer_size=20);
14  void append(const String val);
15  bool data_available();
16  void get_delta(String& output);
17  void set_hostname(String hostname) { this->hostname = hostname; }
18  private:
19  String hostname;
20  unsigned int max_buffer_size;
21  std::list<String> buffer;
22 };
23 
24 #endif
SKDelta(const String &hostname, unsigned int max_buffer_size=20)
-
void append(const String val)
-
bool data_available()
+
void append(const String val)
+
bool data_available()
void set_hostname(String hostname)
Definition: signalk_delta.h:17
-
void get_delta(String &output)
+
void get_delta(String &output)
diff --git a/docs/signalk__emitter_8cpp.html b/docs/signalk__emitter_8cpp.html index 7d7c0f231..fccf60c21 100644 --- a/docs/signalk__emitter_8cpp.html +++ b/docs/signalk__emitter_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__emitter_8cpp_source.html b/docs/signalk__emitter_8cpp_source.html index 1eca2e402..310e28776 100644 --- a/docs/signalk__emitter_8cpp_source.html +++ b/docs/signalk__emitter_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__emitter_8h.html b/docs/signalk__emitter_8h.html index a85c8b793..616f9d95a 100644 --- a/docs/signalk__emitter_8h.html +++ b/docs/signalk__emitter_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__emitter_8h_source.html b/docs/signalk__emitter_8h_source.html index a11747522..a018b289d 100644 --- a/docs/signalk__emitter_8h_source.html +++ b/docs/signalk__emitter_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__output_8h.html b/docs/signalk__output_8h.html index a6f161d8c..bab3bc2c9 100644 --- a/docs/signalk__output_8h.html +++ b/docs/signalk__output_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__output_8h_source.html b/docs/signalk__output_8h_source.html index 0ca6fbe4d..24b43855e 100644 --- a/docs/signalk__output_8h_source.html +++ b/docs/signalk__output_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__position_8cpp.html b/docs/signalk__position_8cpp.html index a6e98233b..647ae6f63 100644 --- a/docs/signalk__position_8cpp.html +++ b/docs/signalk__position_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__position_8cpp_source.html b/docs/signalk__position_8cpp_source.html index 16e144872..a54a84e2b 100644 --- a/docs/signalk__position_8cpp_source.html +++ b/docs/signalk__position_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__position_8h.html b/docs/signalk__position_8h.html index ea40dc9fe..d29db78ef 100644 --- a/docs/signalk__position_8h.html +++ b/docs/signalk__position_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__position_8h_source.html b/docs/signalk__position_8h_source.html index 526a9a159..3b87aab75 100644 --- a/docs/signalk__position_8h_source.html +++ b/docs/signalk__position_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__time_8cpp.html b/docs/signalk__time_8cpp.html index 17c2a845d..601829423 100644 --- a/docs/signalk__time_8cpp.html +++ b/docs/signalk__time_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__time_8cpp_source.html b/docs/signalk__time_8cpp_source.html index 487ddef24..babd134a1 100644 --- a/docs/signalk__time_8cpp_source.html +++ b/docs/signalk__time_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__time_8h.html b/docs/signalk__time_8h.html index 102cc036e..0373d3fff 100644 --- a/docs/signalk__time_8h.html +++ b/docs/signalk__time_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/signalk__time_8h_source.html b/docs/signalk__time_8h_source.html index 7ab84e094..f55d62fe4 100644 --- a/docs/signalk__time_8h_source.html +++ b/docs/signalk__time_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/spiffs__storage_8cpp.html b/docs/spiffs__storage_8cpp.html index 38c3dfb15..f5476e9eb 100644 --- a/docs/spiffs__storage_8cpp.html +++ b/docs/spiffs__storage_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/spiffs__storage_8cpp_source.html b/docs/spiffs__storage_8cpp_source.html index 9c3f5dd32..6fedc5a78 100644 --- a/docs/spiffs__storage_8cpp_source.html +++ b/docs/spiffs__storage_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/spiffs__storage_8h.html b/docs/spiffs__storage_8h.html index c8a874df8..82dbf5c04 100644 --- a/docs/spiffs__storage_8h.html +++ b/docs/spiffs__storage_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/spiffs__storage_8h_source.html b/docs/spiffs__storage_8h_source.html index ef6abe724..53100a30c 100644 --- a/docs/spiffs__storage_8h_source.html +++ b/docs/spiffs__storage_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/struct_e_n_u_vector-members.html b/docs/struct_e_n_u_vector-members.html index 101a318a6..0a9552c4c 100644 --- a/docs/struct_e_n_u_vector-members.html +++ b/docs/struct_e_n_u_vector-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/struct_e_n_u_vector.html b/docs/struct_e_n_u_vector.html index 084fd1b8a..410e9bb0a 100644 --- a/docs/struct_e_n_u_vector.html +++ b/docs/struct_e_n_u_vector.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/struct_n_m_e_a_data-members.html b/docs/struct_n_m_e_a_data-members.html index ab3b2b954..13ce70068 100644 --- a/docs/struct_n_m_e_a_data-members.html +++ b/docs/struct_n_m_e_a_data-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/struct_n_m_e_a_data.html b/docs/struct_n_m_e_a_data.html index d9dc2561c..6c4e42a20 100644 --- a/docs/struct_n_m_e_a_data.html +++ b/docs/struct_n_m_e_a_data.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/struct_position-members.html b/docs/struct_position-members.html index fab70e0d1..31bb9d5a9 100644 --- a/docs/struct_position-members.html +++ b/docs/struct_position-members.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/struct_position.html b/docs/struct_position.html index 10cf123ac..5ea370992 100644 --- a/docs/struct_position.html +++ b/docs/struct_position.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/system__info_8cpp.html b/docs/system__info_8cpp.html index 58ecb6dbe..6b502d579 100644 --- a/docs/system__info_8cpp.html +++ b/docs/system__info_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/system__info_8cpp_source.html b/docs/system__info_8cpp_source.html index 239752518..0f488064b 100644 --- a/docs/system__info_8cpp_source.html +++ b/docs/system__info_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/system__info_8h.html b/docs/system__info_8h.html index aa271a65c..6cd363503 100644 --- a/docs/system__info_8h.html +++ b/docs/system__info_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/system__info_8h_source.html b/docs/system__info_8h_source.html index ad3947318..9d5cc5840 100644 --- a/docs/system__info_8h_source.html +++ b/docs/system__info_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/timestring_8cpp.html b/docs/timestring_8cpp.html index 1c29c7d39..fce225967 100644 --- a/docs/timestring_8cpp.html +++ b/docs/timestring_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/timestring_8cpp_source.html b/docs/timestring_8cpp_source.html index 711cb2152..bb616f0dc 100644 --- a/docs/timestring_8cpp_source.html +++ b/docs/timestring_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/timestring_8h.html b/docs/timestring_8h.html index 511e4ed88..ae67d5a41 100644 --- a/docs/timestring_8h.html +++ b/docs/timestring_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/timestring_8h_source.html b/docs/timestring_8h_source.html index 365ce517c..613cdb4f8 100644 --- a/docs/timestring_8h_source.html +++ b/docs/timestring_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/transform_8cpp.html b/docs/transform_8cpp.html index f415f53bd..6a7a3587c 100644 --- a/docs/transform_8cpp.html +++ b/docs/transform_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/transform_8cpp_source.html b/docs/transform_8cpp_source.html index 67bdac8a7..d59a44477 100644 --- a/docs/transform_8cpp_source.html +++ b/docs/transform_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/transform_8h.html b/docs/transform_8h.html index caf6f2aa5..97e547560 100644 --- a/docs/transform_8h.html +++ b/docs/transform_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -133,36 +133,40 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - +
diff --git a/docs/transform_8h__dep__incl.map b/docs/transform_8h__dep__incl.map index d362be7bc..793080e16 100644 --- a/docs/transform_8h__dep__incl.map +++ b/docs/transform_8h__dep__incl.map @@ -1,32 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/transform_8h__dep__incl.md5 b/docs/transform_8h__dep__incl.md5 index 6a2ff52cd..721ae82a9 100644 --- a/docs/transform_8h__dep__incl.md5 +++ b/docs/transform_8h__dep__incl.md5 @@ -1 +1 @@ -651d88889984f632247660aca78a2b90 \ No newline at end of file +53cf808c5357014f967bbccdbcf77126 \ No newline at end of file diff --git a/docs/transform_8h__dep__incl.png b/docs/transform_8h__dep__incl.png index 86aedc9ec..2a310f1d7 100644 Binary files a/docs/transform_8h__dep__incl.png and b/docs/transform_8h__dep__incl.png differ diff --git a/docs/transform_8h_source.html b/docs/transform_8h_source.html index caf325623..857b65892 100644 --- a/docs/transform_8h_source.html +++ b/docs/transform_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/valueconsumer_8h.html b/docs/valueconsumer_8h.html index f9565cf35..386bd346f 100644 --- a/docs/valueconsumer_8h.html +++ b/docs/valueconsumer_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -111,56 +111,56 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - +
diff --git a/docs/valueconsumer_8h__dep__incl.map b/docs/valueconsumer_8h__dep__incl.map index b6cc6d25d..0a430deb1 100644 --- a/docs/valueconsumer_8h__dep__incl.map +++ b/docs/valueconsumer_8h__dep__incl.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/valueconsumer_8h__dep__incl.md5 b/docs/valueconsumer_8h__dep__incl.md5 index a699ba895..881f913ab 100644 --- a/docs/valueconsumer_8h__dep__incl.md5 +++ b/docs/valueconsumer_8h__dep__incl.md5 @@ -1 +1 @@ -f8cbe000fe0a66a44a7243dffadf4f72 \ No newline at end of file +0fb14ea6800c28cfe4ac8c3031076b25 \ No newline at end of file diff --git a/docs/valueconsumer_8h__dep__incl.png b/docs/valueconsumer_8h__dep__incl.png index 778b32f5d..d65c6be34 100644 Binary files a/docs/valueconsumer_8h__dep__incl.png and b/docs/valueconsumer_8h__dep__incl.png differ diff --git a/docs/valueconsumer_8h_source.html b/docs/valueconsumer_8h_source.html index adc063c11..3bf5e001b 100644 --- a/docs/valueconsumer_8h_source.html +++ b/docs/valueconsumer_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/valueproducer_8h.html b/docs/valueproducer_8h.html index 88b18d82d..729b9f0a5 100644 --- a/docs/valueproducer_8h.html +++ b/docs/valueproducer_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -117,56 +117,56 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/docs/valueproducer_8h__dep__incl.map b/docs/valueproducer_8h__dep__incl.map index 19d1660d1..24f77e562 100644 --- a/docs/valueproducer_8h__dep__incl.map +++ b/docs/valueproducer_8h__dep__incl.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/valueproducer_8h__dep__incl.md5 b/docs/valueproducer_8h__dep__incl.md5 index 90f8b05d6..faa13cd47 100644 --- a/docs/valueproducer_8h__dep__incl.md5 +++ b/docs/valueproducer_8h__dep__incl.md5 @@ -1 +1 @@ -ee26a65a6bdaa49456aa0db01c6eddea \ No newline at end of file +219d8742668983e0efeac6857d2888a6 \ No newline at end of file diff --git a/docs/valueproducer_8h__dep__incl.png b/docs/valueproducer_8h__dep__incl.png index 9f7b66dac..ea0f70fd8 100644 Binary files a/docs/valueproducer_8h__dep__incl.png and b/docs/valueproducer_8h__dep__incl.png differ diff --git a/docs/valueproducer_8h_source.html b/docs/valueproducer_8h_source.html index 0d05cd730..e3b8bf9f9 100644 --- a/docs/valueproducer_8h_source.html +++ b/docs/valueproducer_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/voltagedivider_r2_8cpp.html b/docs/voltagedivider_r2_8cpp.html index fd91ed2d9..4d5060cbd 100644 --- a/docs/voltagedivider_r2_8cpp.html +++ b/docs/voltagedivider_r2_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/voltagedivider_r2_8cpp_source.html b/docs/voltagedivider_r2_8cpp_source.html index a80e91ff1..8e6fd3669 100644 --- a/docs/voltagedivider_r2_8cpp_source.html +++ b/docs/voltagedivider_r2_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/voltagedivider_r2_8h.html b/docs/voltagedivider_r2_8h.html index 6b92cea59..5ca7aca6b 100644 --- a/docs/voltagedivider_r2_8h.html +++ b/docs/voltagedivider_r2_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/voltagedivider_r2_8h_source.html b/docs/voltagedivider_r2_8h_source.html index ce1ffed8c..563564a1a 100644 --- a/docs/voltagedivider_r2_8h_source.html +++ b/docs/voltagedivider_r2_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/wiring__helpers_8cpp.html b/docs/wiring__helpers_8cpp.html index 6dcd56f12..0afcc17a2 100644 --- a/docs/wiring__helpers_8cpp.html +++ b/docs/wiring__helpers_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -113,56 +113,56 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -174,8 +174,8 @@   void setup_fuel_flow_meter (int inflow_pin, int return_flow_pin)   -void setup_gps (int reset_pin) -  +GPSInputsetup_gps (Stream *rx_stream) +  void setup_onewire_temperature (SensESPApp *seapp, DallasTemperatureSensors *dts, String sk_path, String config_path, String schema)   void setup_rpm_meter (SensESPApp *seapp, int input_pin) @@ -263,17 +263,17 @@

-

◆ setup_gps()

+ +

◆ setup_gps()

- + - - + +
void setup_gps GPSInput* setup_gps (int reset_pin)Stream * rx_stream)
@@ -283,8 +283,8 @@

Here is the call graph for this function:

@@ -366,7 +366,7 @@

-

Definition at line 126 of file wiring_helpers.cpp.

+

Definition at line 128 of file wiring_helpers.cpp.

diff --git a/docs/wiring__helpers_8cpp.js b/docs/wiring__helpers_8cpp.js index 5d4f0256f..365122da1 100644 --- a/docs/wiring__helpers_8cpp.js +++ b/docs/wiring__helpers_8cpp.js @@ -2,7 +2,7 @@ var wiring__helpers_8cpp = [ [ "setup_analog_input", "wiring__helpers_8cpp.html#a3a4bbd0371b8285dbb7b8666d50a53a3", null ], [ "setup_fuel_flow_meter", "wiring__helpers_8cpp.html#ae36e0604b36693bd720bffcf4145baf9", null ], - [ "setup_gps", "wiring__helpers_8cpp.html#a76f3efb0a3eb60ba7ca13ba78e9e8052", null ], + [ "setup_gps", "wiring__helpers_8cpp.html#a8f7d5e59747355ce523001faddc7ada9", null ], [ "setup_onewire_temperature", "wiring__helpers_8cpp.html#a17220137bcd65b6f922f5a14165a8fcf", null ], [ "setup_rpm_meter", "wiring__helpers_8cpp.html#aa6279a7bab0b61c448263a90303bb7e0", null ] ]; \ No newline at end of file diff --git a/docs/wiring__helpers_8cpp__incl.map b/docs/wiring__helpers_8cpp__incl.map index 1559b056a..fd5076972 100644 --- a/docs/wiring__helpers_8cpp__incl.map +++ b/docs/wiring__helpers_8cpp__incl.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/wiring__helpers_8cpp__incl.md5 b/docs/wiring__helpers_8cpp__incl.md5 index 8b0758c4e..d9f115e26 100644 --- a/docs/wiring__helpers_8cpp__incl.md5 +++ b/docs/wiring__helpers_8cpp__incl.md5 @@ -1 +1 @@ -b5a48a14c6321f07a85e5f1e941d95f2 \ No newline at end of file +0ed6b66f6281be5f5a50428cf15a154d \ No newline at end of file diff --git a/docs/wiring__helpers_8cpp__incl.png b/docs/wiring__helpers_8cpp__incl.png index 5004767ed..5f2e2633b 100644 Binary files a/docs/wiring__helpers_8cpp__incl.png and b/docs/wiring__helpers_8cpp__incl.png differ diff --git a/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.map b/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.map new file mode 100644 index 000000000..de00b94cf --- /dev/null +++ b/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.md5 b/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.md5 new file mode 100644 index 000000000..cbab26aef --- /dev/null +++ b/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.md5 @@ -0,0 +1 @@ +046c71b81657c4c6dd37f443c064b3a8 \ No newline at end of file diff --git a/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.png b/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.png new file mode 100644 index 000000000..283ff827e Binary files /dev/null and b/docs/wiring__helpers_8cpp_a8f7d5e59747355ce523001faddc7ada9_cgraph.png differ diff --git a/docs/wiring__helpers_8cpp_source.html b/docs/wiring__helpers_8cpp_source.html index 71b1daa78..12286059f 100644 --- a/docs/wiring__helpers_8cpp_source.html +++ b/docs/wiring__helpers_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,22 +91,23 @@
wiring_helpers.cpp
-Go to the documentation of this file.
1 #include "wiring_helpers.h"
2 
3 #include "sensesp_app.h"
4 #include "sensors/analog_input.h"
6 #include "sensors/gps.h"
10 #include "transforms/frequency.h"
11 #include "signalk/signalk_output.h"
13 #include "signalk/signalk_time.h"
14 #include "transforms/integrator.h"
15 #include "transforms/linear.h"
17 #include "transforms/transform.h"
18 
19 
21  String sk_path, float k, float c,
22  String config_path) {
23  (new AnalogInput())
24  -> connectTo(new Linear(k, c, config_path + "/calibrate"))
25  -> connectTo(new SKOutputNumber(sk_path, config_path + "/sk"));
26 }
27 
28 
30  int inflow_pin,
31  int return_flow_pin
32 ) {
34  // connect a fuel flow meter with return line
35 
36  auto* dic1 = new DigitalInputCounter(inflow_pin, INPUT_PULLUP, CHANGE, 1000);
37  auto* dic2 = new DigitalInputCounter(return_flow_pin, INPUT_PULLUP, CHANGE, 1000);
38 
39  Frequency* freq1;
40  Frequency* freq2;
41 
42  dic1->connectTo(freq1 = new Frequency())
43  -> connectTo(new SKOutputNumber("sensors.inflow.frequency"));
44 
45  dic2->connectTo(freq2 = new Frequency())
46  -> connectTo(new SKOutputNumber("sensors.outflow.frequency"));
47 
48 
49  // Here, each pulse of a flow sensor represents 0.46ml of flow
50  // for both inflow and outflow
51  auto* diff = new Difference(0.46/1e6, 0.46/1e6,
52  "/sensors/fuel/rate/calibrate");
53 
54  diff->connectFrom(freq1, freq2)
55  -> connectTo(new SKOutputNumber("propulsion.main.fuel.rate", "/sensors/fuel/rate/sk"))
56  -> connectTo(new MovingAverage(10, 1., "/sensors/fuel/average/calibrate")) // this is the same as above, but averaged over 10 s
57  -> connectTo(new SKOutputNumber("propulsion.main.fuel.averageRate", "/sensors/fuel/average/sk"));
58 
59 
60  // Integrate the net flow over time. The output is dependent
61  // on the the input counter update rate!
62  diff->connectTo(new Integrator(1., 0.))
63  -> connectTo(new SKOutputNumber("propulsion.main.fuel.used", "/sensors/fuel/used/sk"));
64 
65 
66  // Integrate the total outflow over time. The output is dependent
67  // on the the input counter update rate!
68  freq1-> connectTo(new Integrator(0.46/1e6, 0., "/sensors/fuel/in_used/calibrate"))
69  -> connectTo(new SKOutputNumber("propulsion.main.fuel.usedGross", "/sensors/fuel/in_used/sk"));
70 
71 
72  // Integrate the net fuel flow over time. The output is dependent
73  // on the the input counter update rate!
74  freq2->connectTo(new Integrator(0.46/1e6, 0., "/sensors/fuel/out_used/calibrate"))
75  -> connectTo(new SKOutputNumber("propulsion.main.fuel.usedReturn", "/sensors/fuel/out_used/sk"));
76 }
77 
78 
79 void setup_gps(int reset_pin) {
80  GPSInput* gps = new GPSInput(reset_pin);
81  gps->nmea_data.position
82  .connectTo(new SKOutputPosition("navigation.position", ""));
84  .connectTo(new SKOutputString("navigation.methodQuality", ""));
86  .connectTo(new SKOutputInt("navigation.satellites", ""));
88  .connectTo(new SKOutputNumber("navigation.horizontalDilution", ""));
90  .connectTo(new SKOutputNumber("navigation.geoidalSeparation", ""));
91  gps->nmea_data.dgps_age
92  .connectTo(new SKOutputNumber("navigation.differentialAge", ""));
93  gps->nmea_data.dgps_id
94  .connectTo(new SKOutputNumber("navigation.differentialReference", ""));
95  gps->nmea_data.datetime
96  .connectTo(new SKOutputTime("navigation.datetime", ""));
97  gps->nmea_data.speed
98  .connectTo(new SKOutputNumber("navigation.speedOverGround", ""));
100  .connectTo(new SKOutputNumber("navigation.courseOverGroundTrue", ""));
101  gps->nmea_data.variation
102  .connectTo(new SKOutputNumber("navigation.magneticVariation", ""));
103  gps->nmea_data.rtk_age
104  .connectTo(new SKOutputNumber("navigation.rtkAge", ""));
105  gps->nmea_data.rtk_ratio
106  .connectTo(new SKOutputNumber("navigation.rtkRatio", ""));
108  .connectTo(new SKOutputNumber("navigation.rtkBaselineLength", ""));
110  .connectTo(new SKOutputNumber("navigation.rtkBaselineCourse"))
111  ->connectTo(new AngleCorrection(0, 0, "/sensors/heading/correction"))
112  ->connectTo(new SKOutputNumber("navigation.headingTrue", ""));
113 }
114 
116  SensESPApp* seapp,
118  String sk_path,
119  String config_path,
120  String schema
121 ) {
122  (new OneWireTemperature(dts))->connectTo(
123  new SKOutputNumber(sk_path, config_path));
124 }
125 
126 void setup_rpm_meter(SensESPApp* seapp, int input_pin) {
128  // connect a RPM meter. A DigitalInputCounter counts pulses
129  // and reports the readings every read_delay ms
130  // (500 in the example). A Frequency
131  // transform takes a number of pulses and converts that into
132  // a frequency. The sample multiplier converts the 97 tooth
133  // tach output into Hz, SK native units.
134 
135  (new DigitalInputCounter(input_pin, INPUT_PULLUP, RISING, 500))
136  -> connectTo<float>(new Frequency(1./97., "/sensors/engine_rpm/calibrate"))
137  -> connectTo(new SKOutputNumber("propulsion.main.revolutions", "/sensors/engine_rpm/sk"));
138 
139 }
SKOutput< String > SKOutputString
+Go to the documentation of this file.
1 #include "wiring_helpers.h"
2 
3 #include "sensesp_app.h"
4 #include "sensors/analog_input.h"
6 #include "sensors/gps.h"
10 #include "transforms/frequency.h"
11 #include "signalk/signalk_output.h"
13 #include "signalk/signalk_time.h"
14 #include "transforms/integrator.h"
15 #include "transforms/linear.h"
17 #include "transforms/transform.h"
18 
19 
21  String sk_path, float k, float c,
22  String config_path) {
23  (new AnalogInput())
24  -> connectTo(new Linear(k, c, config_path + "/calibrate"))
25  -> connectTo(new SKOutputNumber(sk_path, config_path + "/sk"));
26 }
27 
28 
30  int inflow_pin,
31  int return_flow_pin
32 ) {
34  // connect a fuel flow meter with return line
35 
36  auto* dic1 = new DigitalInputCounter(inflow_pin, INPUT_PULLUP, CHANGE, 1000);
37  auto* dic2 = new DigitalInputCounter(return_flow_pin, INPUT_PULLUP, CHANGE, 1000);
38 
39  Frequency* freq1;
40  Frequency* freq2;
41 
42  dic1->connectTo(freq1 = new Frequency())
43  -> connectTo(new SKOutputNumber("sensors.inflow.frequency"));
44 
45  dic2->connectTo(freq2 = new Frequency())
46  -> connectTo(new SKOutputNumber("sensors.outflow.frequency"));
47 
48 
49  // Here, each pulse of a flow sensor represents 0.46ml of flow
50  // for both inflow and outflow
51  auto* diff = new Difference(0.46/1e6, 0.46/1e6,
52  "/sensors/fuel/rate/calibrate");
53 
54  diff->connectFrom(freq1, freq2)
55  -> connectTo(new SKOutputNumber("propulsion.main.fuel.rate", "/sensors/fuel/rate/sk"))
56  -> connectTo(new MovingAverage(10, 1., "/sensors/fuel/average/calibrate")) // this is the same as above, but averaged over 10 s
57  -> connectTo(new SKOutputNumber("propulsion.main.fuel.averageRate", "/sensors/fuel/average/sk"));
58 
59 
60  // Integrate the net flow over time. The output is dependent
61  // on the the input counter update rate!
62  diff->connectTo(new Integrator(1., 0.))
63  -> connectTo(new SKOutputNumber("propulsion.main.fuel.used", "/sensors/fuel/used/sk"));
64 
65 
66  // Integrate the total outflow over time. The output is dependent
67  // on the the input counter update rate!
68  freq1-> connectTo(new Integrator(0.46/1e6, 0., "/sensors/fuel/in_used/calibrate"))
69  -> connectTo(new SKOutputNumber("propulsion.main.fuel.usedGross", "/sensors/fuel/in_used/sk"));
70 
71 
72  // Integrate the net fuel flow over time. The output is dependent
73  // on the the input counter update rate!
74  freq2->connectTo(new Integrator(0.46/1e6, 0., "/sensors/fuel/out_used/calibrate"))
75  -> connectTo(new SKOutputNumber("propulsion.main.fuel.usedReturn", "/sensors/fuel/out_used/sk"));
76 }
77 
78 
79 GPSInput* setup_gps(Stream* rx_stream) {
80  GPSInput* gps = new GPSInput(rx_stream);
81  gps->nmea_data.position
82  .connectTo(new SKOutputPosition("navigation.position", ""));
84  .connectTo(new SKOutputString("navigation.methodQuality", ""));
86  .connectTo(new SKOutputInt("navigation.satellites", ""));
88  .connectTo(new SKOutputNumber("navigation.horizontalDilution", ""));
90  .connectTo(new SKOutputNumber("navigation.geoidalSeparation", ""));
91  gps->nmea_data.dgps_age
92  .connectTo(new SKOutputNumber("navigation.differentialAge", ""));
93  gps->nmea_data.dgps_id
94  .connectTo(new SKOutputNumber("navigation.differentialReference", ""));
95  gps->nmea_data.datetime
96  .connectTo(new SKOutputTime("navigation.datetime", ""));
97  gps->nmea_data.speed
98  .connectTo(new SKOutputNumber("navigation.speedOverGround", ""));
100  .connectTo(new SKOutputNumber("navigation.courseOverGroundTrue", ""));
101  gps->nmea_data.variation
102  .connectTo(new SKOutputNumber("navigation.magneticVariation", ""));
103  gps->nmea_data.rtk_age
104  .connectTo(new SKOutputNumber("navigation.rtkAge", ""));
105  gps->nmea_data.rtk_ratio
106  .connectTo(new SKOutputNumber("navigation.rtkRatio", ""));
108  .connectTo(new SKOutputNumber("navigation.rtkBaselineLength", ""));
110  .connectTo(new SKOutputNumber("navigation.rtkBaselineCourse"))
111  ->connectTo(new AngleCorrection(0, 0, "/sensors/heading/correction"))
112  ->connectTo(new SKOutputNumber("navigation.headingTrue", ""));
113 
114  return gps;
115 }
116 
118  SensESPApp* seapp,
120  String sk_path,
121  String config_path,
122  String schema
123 ) {
124  (new OneWireTemperature(dts))->connectTo(
125  new SKOutputNumber(sk_path, config_path));
126 }
127 
128 void setup_rpm_meter(SensESPApp* seapp, int input_pin) {
130  // connect a RPM meter. A DigitalInputCounter counts pulses
131  // and reports the readings every read_delay ms
132  // (500 in the example). A Frequency
133  // transform takes a number of pulses and converts that into
134  // a frequency. The sample multiplier converts the 97 tooth
135  // tach output into Hz, SK native units.
136 
137  (new DigitalInputCounter(input_pin, INPUT_PULLUP, RISING, 500))
138  -> connectTo<float>(new Frequency(1./97., "/sensors/engine_rpm/calibrate"))
139  -> connectTo(new SKOutputNumber("propulsion.main.revolutions", "/sensors/engine_rpm/sk"));
140 
141 }
SKOutput< String > SKOutputString
SKOutput< Position > SKOutputPosition
- +
ObservableValue< float > rtk_ratio
Definition: nmea_parser.h:39
void setup_fuel_flow_meter(int inflow_pin, int return_flow_pin)
+
GPSInput * setup_gps(Stream *rx_stream)
ObservableValue< float > dgps_age
Definition: nmea_parser.h:31
-
void setup_rpm_meter(SensESPApp *seapp, int input_pin)
+
void setup_rpm_meter(SensESPApp *seapp, int input_pin)
ObservableValue< float > horizontal_dilution
Definition: nmea_parser.h:29
ObservableValue< int > num_satellites
Definition: nmea_parser.h:28
@@ -124,7 +125,7 @@
void setup_analog_input(String sk_path, float k, float c, String config_path)
-
NMEAData nmea_data
Definition: gps.h:16
+
NMEAData nmea_data
Definition: gps.h:14
SKOutput< int > SKOutputInt
ObservableValue< String > gnss_quality
Definition: nmea_parser.h:27
@@ -133,13 +134,12 @@
ObservableValue< float > baseline_length
Definition: nmea_parser.h:41
-
Definition: gps.h:12
+
Definition: gps.h:10
ObservableValue< float > true_course
Definition: nmea_parser.h:35
-
void setup_onewire_temperature(SensESPApp *seapp, DallasTemperatureSensors *dts, String sk_path, String config_path, String schema)
+
void setup_onewire_temperature(SensESPApp *seapp, DallasTemperatureSensors *dts, String sk_path, String config_path, String schema)
ObservableValue< float > speed
Definition: nmea_parser.h:34
-
void setup_gps(int reset_pin)
void connectTo(ValueConsumer< T > *pConsumer, uint8_t inputChannel=0)
Definition: valueproducer.h:42
ObservableValue< time_t > datetime
Definition: nmea_parser.h:33
diff --git a/docs/wiring__helpers_8h.html b/docs/wiring__helpers_8h.html index ec79ba3c5..175c69b5f 100644 --- a/docs/wiring__helpers_8h.html +++ b/docs/wiring__helpers_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -94,43 +94,46 @@
#include "sensesp_app.h"
+#include "sensors/gps.h"
#include "sensors/onewire_temperature.h"
Include dependency graph for wiring_helpers.h:
- - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153,8 +156,8 @@   void setup_fuel_flow_meter (int inflow_pin, int return_flow_pin)   -void setup_gps (int reset_pin=0) -  +GPSInputsetup_gps (Stream *rx_stream) +  void setup_onewire_temperature (DallasTemperatureSensors *dts, String sk_path, String config_path)   void setup_rpm_meter (int input_pin) @@ -242,17 +245,17 @@

-

◆ setup_gps()

+ +

◆ setup_gps()

- + - - + +
void setup_gps GPSInput* setup_gps (int reset_pin = 0)Stream * rx_stream)
@@ -262,8 +265,8 @@

Here is the call graph for this function:

-
- +
+ diff --git a/docs/wiring__helpers_8h.js b/docs/wiring__helpers_8h.js index 3408d8050..14f732955 100644 --- a/docs/wiring__helpers_8h.js +++ b/docs/wiring__helpers_8h.js @@ -2,7 +2,7 @@ var wiring__helpers_8h = [ [ "setup_analog_input", "wiring__helpers_8h.html#a70ac1c40d730c9e0f9b93b1f4dd5f0f9", null ], [ "setup_fuel_flow_meter", "wiring__helpers_8h.html#ae36e0604b36693bd720bffcf4145baf9", null ], - [ "setup_gps", "wiring__helpers_8h.html#a8edfa609fe0f66ca940c2c8311e687b9", null ], + [ "setup_gps", "wiring__helpers_8h.html#a8f7d5e59747355ce523001faddc7ada9", null ], [ "setup_onewire_temperature", "wiring__helpers_8h.html#a37c83d7d3ac2abb00e8f9e86c1da52d3", null ], [ "setup_rpm_meter", "wiring__helpers_8h.html#a99ed20d80aca90bb060c88019c5f739f", null ] ]; \ No newline at end of file diff --git a/docs/wiring__helpers_8h__dep__incl.md5 b/docs/wiring__helpers_8h__dep__incl.md5 index 774dce156..6b2dd4b07 100644 --- a/docs/wiring__helpers_8h__dep__incl.md5 +++ b/docs/wiring__helpers_8h__dep__incl.md5 @@ -1 +1 @@ -8da2ed8ca2ec6e12bb36bba3aac5cac0 \ No newline at end of file +643bbaecceecf719467383f0492a2a5c \ No newline at end of file diff --git a/docs/wiring__helpers_8h__incl.map b/docs/wiring__helpers_8h__incl.map index 0961febec..19660b12b 100644 --- a/docs/wiring__helpers_8h__incl.map +++ b/docs/wiring__helpers_8h__incl.map @@ -1,35 +1,37 @@ - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/wiring__helpers_8h__incl.md5 b/docs/wiring__helpers_8h__incl.md5 index 94b699f69..0d5204fe8 100644 --- a/docs/wiring__helpers_8h__incl.md5 +++ b/docs/wiring__helpers_8h__incl.md5 @@ -1 +1 @@ -edb707fdffbfebec88b0152a475163b7 \ No newline at end of file +34ae24364a0b47f9991cc662cb717ecb \ No newline at end of file diff --git a/docs/wiring__helpers_8h__incl.png b/docs/wiring__helpers_8h__incl.png index 84febe60c..e383355df 100644 Binary files a/docs/wiring__helpers_8h__incl.png and b/docs/wiring__helpers_8h__incl.png differ diff --git a/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.map b/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.map new file mode 100644 index 000000000..de00b94cf --- /dev/null +++ b/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.md5 b/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.md5 new file mode 100644 index 000000000..cbab26aef --- /dev/null +++ b/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.md5 @@ -0,0 +1 @@ +046c71b81657c4c6dd37f443c064b3a8 \ No newline at end of file diff --git a/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.png b/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.png new file mode 100644 index 000000000..283ff827e Binary files /dev/null and b/docs/wiring__helpers_8h_a8f7d5e59747355ce523001faddc7ada9_cgraph.png differ diff --git a/docs/wiring__helpers_8h_source.html b/docs/wiring__helpers_8h_source.html index 51176298a..940fc2533 100644 --- a/docs/wiring__helpers_8h_source.html +++ b/docs/wiring__helpers_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,14 +91,16 @@
wiring_helpers.h
-Go to the documentation of this file.
1 #ifndef _wiring_helpers_H_
2 #define _wiring_helpers_H_
3 
4 #include "sensesp_app.h"
6 
8  String sk_path, float k=1, float c=0,
9  String config_path="");
10 
12  int inflow_pin,
13  int return_flow_pin
14 );
15 
16 void setup_gps(int reset_pin=0);
17 
20  String sk_path,
21  String config_path
22 );
23 
24 void setup_rpm_meter(int input_pin);
25 
26 
27 #endif
void setup_onewire_temperature(DallasTemperatureSensors *dts, String sk_path, String config_path)
+Go to the documentation of this file.
1 #ifndef _wiring_helpers_H_
2 #define _wiring_helpers_H_
3 
4 #include "sensesp_app.h"
5 #include "sensors/gps.h"
7 
9  String sk_path, float k=1, float c=0,
10  String config_path="");
11 
13  int inflow_pin,
14  int return_flow_pin
15 );
16 
17 GPSInput* setup_gps(Stream* rx_stream);
18 
21  String sk_path,
22  String config_path
23 );
24 
25 void setup_rpm_meter(int input_pin);
26 
27 
28 #endif
void setup_onewire_temperature(DallasTemperatureSensors *dts, String sk_path, String config_path)
void setup_rpm_meter(int input_pin)
void setup_analog_input(String sk_path, float k=1, float c=0, String config_path="")
void setup_fuel_flow_meter(int inflow_pin, int return_flow_pin)
+ -
void setup_gps(int reset_pin=0)
+
GPSInput * setup_gps(Stream *rx_stream)
+
Definition: gps.h:10
diff --git a/docs/ws__client_8cpp.html b/docs/ws__client_8cpp.html index 614e2affb..41b004415 100644 --- a/docs/ws__client_8cpp.html +++ b/docs/ws__client_8cpp.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/ws__client_8cpp_source.html b/docs/ws__client_8cpp_source.html index 70e4fda5c..7aefe7a2a 100644 --- a/docs/ws__client_8cpp_source.html +++ b/docs/ws__client_8cpp_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,38 +91,38 @@
ws_client.cpp

-Go to the documentation of this file.
1 #include "ws_client.h"
2 
3 #include "Arduino.h"
4 
5 #include <ArduinoJson.h>
6 #include <ESP8266HTTPClient.h>
7 #ifdef ESP8266
8  #include <ESP8266mDNS.h> // Include the mDNS library
9 #elif defined(ESP32)
10  #include <ESPmDNS.h>
11 #endif
12 
13 #include <ESP8266TrueRandom.h>
14 
15 #include <WiFiClient.h>
16 
17 #include "sensesp_app.h"
18 
20 
21 void webSocketClientEvent(WStype_t type, uint8_t * payload, size_t length) {
22  switch(type) {
23  case WStype_DISCONNECTED:
25  break;
26  case WStype_ERROR:
28  break;
29  case WStype_CONNECTED:
30  ws_client->on_connected(payload);
31  break;
32  case WStype_TEXT:
33  ws_client->on_receive_delta(payload);
34  break;
35  }
36 }
37 
38 WSClient::WSClient(String config_path, SKDelta* sk_delta,
39  std::function<void(bool)> connected_cb,
41  this->sk_delta = sk_delta;
42  this->connected_cb = connected_cb;
43  this->delta_cb = delta_cb;
44 
45  // set the singleton object pointer
46  ws_client = this;
47 
48  load_configuration();
49 }
50 
52  app.onDelay(0, [this](){ this->connect(); });
53  app.onRepeat(20, [this](){ this->loop(); });
54  app.onRepeat(100, [this](){ this->send_delta(); });
55  app.onRepeat(10000, [this](){ this->connect_loop(); });
56 }
57 
58 void WSClient::connect_loop() {
59  if (this->connection_state==disconnected) {
60  this->connect();
61  }
62 }
63 
65  if (this->connection_state == connecting && server_detected) {
66  // Going from connecting directly to disconnect when we
67  // know we have found and talked to the server usually means
68  // the authentication token is bad.
69  debugW("Bad access token detected. Setting token to null.");
70  auth_token = NULL_AUTH_TOKEN;
72  }
73  this->connection_state = disconnected;
74  server_detected = false;
75  this->connected_cb(false);
76 }
77 
79  this->connection_state = disconnected;
80  debugW("Websocket client error.");
81  this->connected_cb(false);
82 }
83 
84 void WSClient::on_connected(uint8_t * payload) {
85  this->connection_state = connected;
86  debugI("Websocket client connected to URL: %s\n", payload);
87  this->connected_cb(true);
88 }
89 
90 void WSClient::on_receive_delta(uint8_t * payload) {
91  debugD("Websocket payload received: %s", (char*)payload);
92 }
93 
94 bool WSClient::get_mdns_service(String& server_address, uint16_t& server_port) {
95  // get IP address using an mDNS query
96  int n = MDNS.queryService("signalk-ws", "tcp");
97  if (n==0) {
98  // no service found
99  return false;
100  } else {
101  server_address = MDNS.IP(0).toString();
102  server_port = MDNS.port(0);
103  debugI("Found server %s (port %d)", server_address.c_str(), server_port);
104  return true;
105  }
106 }
107 
109  if (connection_state!=disconnected) {
110  return;
111  }
112  debugD("Initiating connection");
113 
114  connection_state = connecting;
115 
116  String server_address = "";
117  uint16_t server_port = 80;
118 
119  if (this->server_address.length() == 0) {
120  get_mdns_service(server_address, server_port);
121  } else {
122  server_address = this->server_address;
123  server_port = this->server_port;
124  }
125 
126  if ((server_address.length() > 0) && (server_port > 0)) {
127  debugD("Websocket client starting");
128  } else {
129  // host and port not defined - wait for mDNS
130  connection_state = disconnected;
131  return;
132  }
133 
134  if (this->polling_href != "") {
135  // existing pending request
136  this->poll_access_request(server_address, server_port, this->polling_href);
137  return;
138  }
139 
140  if (this->auth_token == NULL_AUTH_TOKEN) {
141  // initiate HTTP authentication
142  debugD("No prior authorization token present.");
143  this->send_access_request(server_address, server_port);
144  return;
145  }
146  this->test_token(server_address, server_port);
147 }
148 
149 void WSClient::test_token(const String server_address, const uint16_t server_port) {
150 
151  // FIXME: implement async HTTP client!
152  WiFiClient client;
153  HTTPClient http;
154 
155  String url = String("http://") + server_address + ":" + server_port + "/signalk/v1/api/";
156  debugD("Testing token with url %s", url.c_str());
157  http.begin(client, url);
158  String full_token = String("JWT ") + auth_token;
159  http.addHeader("Authorization", full_token.c_str());
160  int httpCode = http.GET();
161  if (httpCode > 0) {
162  String payload = http.getString();
163  http.end();
164  debugD("Testing resulted in http status %d", httpCode);
165  debugD("%s", payload.c_str());
166  if (httpCode == 200) {
167  // our token is valid, go ahead and connect
168  server_detected = true;
169  this->connect_ws(server_address, server_port);
170  } else if (httpCode == 401) {
171  this->send_access_request(server_address, server_port);
172  } else {
173  connection_state = disconnected;
174  }
175  } else {
176  debugE("GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
177  connection_state = disconnected;
178  }
179 }
180 
181 void WSClient::send_access_request(const String server_address, const uint16_t server_port) {
182  debugD("Preparing a new access request");
183  if (client_id == "") {
184  // generate a client ID
185  byte uuidNumber[16];
186  ESP8266TrueRandom.uuid(uuidNumber);
187  client_id = ESP8266TrueRandom.uuidToString(uuidNumber);
189  }
190 
191  // create a new access request
192  DynamicJsonBuffer buf;
193  JsonObject& req = buf.createObject();
194  req["clientId"] = client_id;
195  req["description"] =
196  String("SensESP device: ") + sensesp_app->get_hostname();
197  String json_req = "";
198  req.printTo(json_req);
199 
200  WiFiClient client;
201  HTTPClient http;
202 
203  String url = String("http://") + server_address + ":" + server_port
204  + "/signalk/v1/access/requests";
205  http.begin(client, url);
206  http.addHeader("Content-Type", "application/json");
207  int httpCode = http.POST(json_req);
208  String payload = http.getString();
209  http.end();
210 
211  // if we get a response we can't handle, try to reconnect later
212  if (httpCode != 202) {
213  debugW("Can't handle response %d to access request.", httpCode);
214  debugD("%s", payload.c_str());
215  connection_state = disconnected;
216  return;
217  }
218 
219  // http status code 202
220 
221  JsonObject& resp = buf.parseObject(payload);
222  String state = resp["state"];
223 
224  if (state != "PENDING") {
225  debugW("Got unknown state: %s", state.c_str());
226  connection_state = disconnected;
227  return;
228  }
229 
230  String href = resp["href"];
231  polling_href = href;
233 
234  debugD("Polling %s in 5 seconds", polling_href.c_str());
235  app.onDelay(5000, [this, server_address, server_port](){
236  this->poll_access_request(server_address, server_port, this->polling_href);
237  });
238 }
239 
240 void WSClient::poll_access_request(const String server_address, const uint16_t server_port, const String href) {
241  debugD("Polling SK Server for authentication token");
242 
243  WiFiClient client;
244  HTTPClient http;
245 
246  String url = String("http://") + server_address + ":" + server_port + href;
247  http.begin(client, url);
248  int httpCode = http.GET();
249  if (httpCode == 200 or httpCode == 202) {
250  String payload = http.getString();
251  http.end();
252  DynamicJsonBuffer buf;
253  JsonObject& resp = buf.parseObject(payload);
254  String state = resp["state"];
255  debugD("%s", state.c_str());
256  if (state == "PENDING") {
257  app.onDelay(5000, [this, server_address, server_port, href](){ this->poll_access_request(server_address, server_port, href); });
258  return;
259  } else if (state == "COMPLETED") {
260  JsonObject& access_req = resp["accessRequest"];
261  String permission = access_req["permission"];
262  polling_href = "";
264 
265  if (permission == "DENIED") {
266  debugW("Permission denied");
267  connection_state = disconnected;
268  return;
269  } else if (permission == "APPROVED") {
270  debugI("Permission granted");
271  String token = access_req["token"];
272  auth_token = token;
274  app.onDelay(0, [this, server_address, server_port](){ this->connect_ws(server_address, server_port); });
275  return;
276  }
277  }
278  } else {
279  http.end();
280  if (httpCode==500) {
281  // this is probably the server barfing due to
282  // us polling a non-existing request. Just
283  // delete the polling href.
284  debugD("Got 500, probably a non-existing request.");
285  polling_href = "";
287  connection_state = disconnected;
288  return;
289  }
290  // any other HTTP status code
291  debugW("Can't handle response %d to pending access request.\n", httpCode);
292  connection_state = disconnected;
293  return;
294  }
295 }
296 
297 void WSClient::connect_ws(const String host, const uint16_t port) {
298  String path = "/signalk/v1/stream?subscribe=none";
299 
300  this->client.begin(host, port, path);
301  this->client.onEvent(webSocketClientEvent);
302  String full_token = String("JWT ") + auth_token;
303  this->client.setAuthorization(full_token.c_str());
304 }
305 
307  this->client.loop();
308 }
309 
311  return connection_state==connected;
312 }
313 
315  if (connection_state==connected) {
316  this->client.disconnect();
317  connection_state = disconnected;
318  }
319 }
320 
322  String output;
323  if (sk_delta->data_available()) {
324  sk_delta->get_delta(output);
325  if (connection_state==connected) {
326  this->client.sendTXT(output);
327  this->delta_cb();
328  }
329  }
330 }
331 
332 JsonObject& WSClient::get_configuration(JsonBuffer& buf) {
333  JsonObject& root = buf.createObject();
334  root["sk_address"] = this->server_address;
335  root["sk_port"] = this->server_port;
336  root["token"] = this->auth_token;
337  root["client_id"] = this->client_id;
338  root["polling_href"] = this->polling_href;
339  return root;
340 }
341 
342 static const char SCHEMA[] PROGMEM = R"({
343  "type": "object",
344  "properties": {
345  "sk_address": { "title": "SignalK server address", "type": "string" },
346  "sk_port": { "title": "SignalK server port", "type": "integer" },
347  "client_id": { "title": "Client ID", "type": "string", "readOnly": true },
348  "token": { "title": "Server authorization token", "type": "string" },
349  "polling_href": { "title": "Server authorization polling href", "type": "string", "readOnly": true }
350  }
351  })";
352 
354  return FPSTR(SCHEMA);
355 }
356 
357 
358 bool WSClient::set_configuration(const JsonObject& config) {
359  String expected[] = {"sk_address", "sk_port", "token", "client_id"};
360  for (auto str : expected) {
361  if (!config.containsKey(str)) {
362  return false;
363  }
364  }
365  this->server_address = config["sk_address"].as<String>();
366  this->server_port = config["sk_port"].as<int>();
367  // FIXME: setting the token should not be allowed via the REST API.
368  this->auth_token = config["token"].as<String>();
369  this->client_id = config["client_id"].as<String>();
370  this->polling_href = config["polling_href"].as<String>();
371  return true;
372 }
void webSocketClientEvent(WStype_t type, uint8_t *payload, size_t length)
Definition: ws_client.cpp:21
-
void connect()
Definition: ws_client.cpp:108
-
WSClient(String config_path, SKDelta *sk_delta, std::function< void(bool)> connected_cb, void_cb_func delta_cb)
Definition: ws_client.cpp:38
-
SensESPApp * sensesp_app
-
void restart()
Definition: ws_client.cpp:314
-
virtual bool set_configuration(const JsonObject &config) override final
Definition: ws_client.cpp:358
-
void on_disconnected()
Definition: ws_client.cpp:64
-
void enable()
Definition: ws_client.cpp:51
+Go to the documentation of this file.
1 #include "ws_client.h"
2 
3 #include "Arduino.h"
4 
5 #include <ArduinoJson.h>
6 #include <ESP8266HTTPClient.h>
7 #ifdef ESP8266
8  #include <ESP8266mDNS.h> // Include the mDNS library
9 #elif defined(ESP32)
10  #include <ESPmDNS.h>
11 #endif
12 
13 #include <ESP8266TrueRandom.h>
14 
15 #include <WiFiClient.h>
16 
17 #include "sensesp_app.h"
18 
20 
21 void webSocketClientEvent(WStype_t type, uint8_t * payload, size_t length) {
22  switch(type) {
23  case WStype_DISCONNECTED:
25  break;
26  case WStype_ERROR:
28  break;
29  case WStype_CONNECTED:
30  ws_client->on_connected(payload);
31  break;
32  case WStype_TEXT:
33  ws_client->on_receive_delta(payload);
34  break;
35  default:
36  // Do nothing for other types
37  break;
38  }
39 }
40 
41 WSClient::WSClient(String config_path, SKDelta* sk_delta,
42  std::function<void(bool)> connected_cb,
44  this->sk_delta = sk_delta;
45  this->connected_cb = connected_cb;
46  this->delta_cb = delta_cb;
47 
48  // set the singleton object pointer
49  ws_client = this;
50 
51  load_configuration();
52 }
53 
55  app.onDelay(0, [this](){ this->connect(); });
56  app.onRepeat(20, [this](){ this->loop(); });
57  app.onRepeat(100, [this](){ this->send_delta(); });
58  app.onRepeat(10000, [this](){ this->connect_loop(); });
59 }
60 
61 void WSClient::connect_loop() {
62  if (this->connection_state==disconnected) {
63  this->connect();
64  }
65 }
66 
68  if (this->connection_state == connecting && server_detected) {
69  // Going from connecting directly to disconnect when we
70  // know we have found and talked to the server usually means
71  // the authentication token is bad.
72  debugW("Bad access token detected. Setting token to null.");
73  auth_token = NULL_AUTH_TOKEN;
75  }
76  this->connection_state = disconnected;
77  server_detected = false;
78  this->connected_cb(false);
79 }
80 
82  this->connection_state = disconnected;
83  debugW("Websocket client error.");
84  this->connected_cb(false);
85 }
86 
87 void WSClient::on_connected(uint8_t * payload) {
88  this->connection_state = connected;
89  debugI("Websocket client connected to URL: %s\n", payload);
90  this->connected_cb(true);
91 }
92 
93 void WSClient::on_receive_delta(uint8_t * payload) {
94  debugD("Websocket payload received: %s", (char*)payload);
95 }
96 
97 bool WSClient::get_mdns_service(String& server_address, uint16_t& server_port) {
98  // get IP address using an mDNS query
99  int n = MDNS.queryService("signalk-ws", "tcp");
100  if (n==0) {
101  // no service found
102  return false;
103  } else {
104  server_address = MDNS.IP(0).toString();
105  server_port = MDNS.port(0);
106  debugI("Found server %s (port %d)", server_address.c_str(), server_port);
107  return true;
108  }
109 }
110 
112  if (connection_state!=disconnected) {
113  return;
114  }
115  debugD("Initiating connection");
116 
117  connection_state = connecting;
118 
119  String server_address = "";
120  uint16_t server_port = 80;
121 
122  if (this->server_address.length() == 0) {
123  get_mdns_service(server_address, server_port);
124  } else {
125  server_address = this->server_address;
126  server_port = this->server_port;
127  }
128 
129  if ((server_address.length() > 0) && (server_port > 0)) {
130  debugD("Websocket client starting");
131  } else {
132  // host and port not defined - wait for mDNS
133  connection_state = disconnected;
134  return;
135  }
136 
137  if (this->polling_href != "") {
138  // existing pending request
139  this->poll_access_request(server_address, server_port, this->polling_href);
140  return;
141  }
142 
143  if (this->auth_token == NULL_AUTH_TOKEN) {
144  // initiate HTTP authentication
145  debugD("No prior authorization token present.");
146  this->send_access_request(server_address, server_port);
147  return;
148  }
149  this->test_token(server_address, server_port);
150 }
151 
152 void WSClient::test_token(const String server_address, const uint16_t server_port) {
153 
154  // FIXME: implement async HTTP client!
155  WiFiClient client;
156  HTTPClient http;
157 
158  String url = String("http://") + server_address + ":" + server_port + "/signalk/v1/api/";
159  debugD("Testing token with url %s", url.c_str());
160  http.begin(client, url);
161  String full_token = String("JWT ") + auth_token;
162  http.addHeader("Authorization", full_token.c_str());
163  int httpCode = http.GET();
164  if (httpCode > 0) {
165  String payload = http.getString();
166  http.end();
167  debugD("Testing resulted in http status %d", httpCode);
168  if (payload.length() > 0) {
169  debugD("Returned payload (length %d) is: ", payload.length());
170  debugD("%s", payload.c_str());
171  debugD("End of payload output");
172  }
173  else {
174  debugD("Returned payload is empty");
175  }
176  if (httpCode == 200) {
177  // our token is valid, go ahead and connect
178  debugD("Attempting to connect to SignalK Websocket...");
179  server_detected = true;
180  this->connect_ws(server_address, server_port);
181  } else if (httpCode == 401) {
182  this->send_access_request(server_address, server_port);
183  } else {
184  connection_state = disconnected;
185  }
186  } else {
187  debugE("GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
188  connection_state = disconnected;
189  }
190 }
191 
192 void WSClient::send_access_request(const String server_address, const uint16_t server_port) {
193  debugD("Preparing a new access request");
194  if (client_id == "") {
195  // generate a client ID
196  byte uuidNumber[16];
197  ESP8266TrueRandom.uuid(uuidNumber);
198  client_id = ESP8266TrueRandom.uuidToString(uuidNumber);
200  }
201 
202  // create a new access request
203  DynamicJsonBuffer buf;
204  JsonObject& req = buf.createObject();
205  req["clientId"] = client_id;
206  req["description"] =
207  String("SensESP device: ") + sensesp_app->get_hostname();
208  String json_req = "";
209  req.printTo(json_req);
210 
211  WiFiClient client;
212  HTTPClient http;
213 
214  String url = String("http://") + server_address + ":" + server_port
215  + "/signalk/v1/access/requests";
216  http.begin(client, url);
217  http.addHeader("Content-Type", "application/json");
218  int httpCode = http.POST(json_req);
219  String payload = http.getString();
220  http.end();
221 
222  // if we get a response we can't handle, try to reconnect later
223  if (httpCode != 202) {
224  debugW("Can't handle response %d to access request.", httpCode);
225  debugD("%s", payload.c_str());
226  connection_state = disconnected;
227  return;
228  }
229 
230  // http status code 202
231 
232  JsonObject& resp = buf.parseObject(payload);
233  String state = resp["state"];
234 
235  if (state != "PENDING") {
236  debugW("Got unknown state: %s", state.c_str());
237  connection_state = disconnected;
238  return;
239  }
240 
241  String href = resp["href"];
242  polling_href = href;
244 
245  debugD("Polling %s in 5 seconds", polling_href.c_str());
246  app.onDelay(5000, [this, server_address, server_port](){
247  this->poll_access_request(server_address, server_port, this->polling_href);
248  });
249 }
250 
251 void WSClient::poll_access_request(const String server_address, const uint16_t server_port, const String href) {
252  debugD("Polling SK Server for authentication token");
253 
254  WiFiClient client;
255  HTTPClient http;
256 
257  String url = String("http://") + server_address + ":" + server_port + href;
258  http.begin(client, url);
259  int httpCode = http.GET();
260  if (httpCode == 200 or httpCode == 202) {
261  String payload = http.getString();
262  http.end();
263  DynamicJsonBuffer buf;
264  JsonObject& resp = buf.parseObject(payload);
265  String state = resp["state"];
266  debugD("%s", state.c_str());
267  if (state == "PENDING") {
268  app.onDelay(5000, [this, server_address, server_port, href](){ this->poll_access_request(server_address, server_port, href); });
269  return;
270  } else if (state == "COMPLETED") {
271  JsonObject& access_req = resp["accessRequest"];
272  String permission = access_req["permission"];
273  polling_href = "";
275 
276  if (permission == "DENIED") {
277  debugW("Permission denied");
278  connection_state = disconnected;
279  return;
280  } else if (permission == "APPROVED") {
281  debugI("Permission granted");
282  String token = access_req["token"];
283  auth_token = token;
285  app.onDelay(0, [this, server_address, server_port](){ this->connect_ws(server_address, server_port); });
286  return;
287  }
288  }
289  } else {
290  http.end();
291  if (httpCode==500) {
292  // this is probably the server barfing due to
293  // us polling a non-existing request. Just
294  // delete the polling href.
295  debugD("Got 500, probably a non-existing request.");
296  polling_href = "";
298  connection_state = disconnected;
299  return;
300  }
301  // any other HTTP status code
302  debugW("Can't handle response %d to pending access request.\n", httpCode);
303  connection_state = disconnected;
304  return;
305  }
306 }
307 
308 void WSClient::connect_ws(const String host, const uint16_t port) {
309  String path = "/signalk/v1/stream?subscribe=none";
310 
311  this->client.begin(host, port, path);
312  this->client.onEvent(webSocketClientEvent);
313  String full_token = String("JWT ") + auth_token;
314  this->client.setAuthorization(full_token.c_str());
315 }
316 
318  this->client.loop();
319 }
320 
322  return connection_state==connected;
323 }
324 
326  if (connection_state==connected) {
327  this->client.disconnect();
328  connection_state = disconnected;
329  }
330 }
331 
333  String output;
334  if (sk_delta->data_available()) {
335  sk_delta->get_delta(output);
336  if (connection_state==connected) {
337  this->client.sendTXT(output);
338  this->delta_cb();
339  }
340  }
341 }
342 
343 JsonObject& WSClient::get_configuration(JsonBuffer& buf) {
344  JsonObject& root = buf.createObject();
345  root["sk_address"] = this->server_address;
346  root["sk_port"] = this->server_port;
347  root["token"] = this->auth_token;
348  root["client_id"] = this->client_id;
349  root["polling_href"] = this->polling_href;
350  return root;
351 }
352 
353 static const char SCHEMA[] PROGMEM = R"({
354  "type": "object",
355  "properties": {
356  "sk_address": { "title": "SignalK server address", "type": "string" },
357  "sk_port": { "title": "SignalK server port", "type": "integer" },
358  "client_id": { "title": "Client ID", "type": "string", "readOnly": true },
359  "token": { "title": "Server authorization token", "type": "string" },
360  "polling_href": { "title": "Server authorization polling href", "type": "string", "readOnly": true }
361  }
362  })";
363 
365  return FPSTR(SCHEMA);
366 }
367 
368 
369 bool WSClient::set_configuration(const JsonObject& config) {
370  String expected[] = {"sk_address", "sk_port", "token", "client_id"};
371  for (auto str : expected) {
372  if (!config.containsKey(str)) {
373  return false;
374  }
375  }
376  this->server_address = config["sk_address"].as<String>();
377  this->server_port = config["sk_port"].as<int>();
378  // FIXME: setting the token should not be allowed via the REST API.
379  this->auth_token = config["token"].as<String>();
380  this->client_id = config["client_id"].as<String>();
381  this->polling_href = config["polling_href"].as<String>();
382  return true;
383 }
void webSocketClientEvent(WStype_t type, uint8_t *payload, size_t length)
Definition: ws_client.cpp:21
+
void connect()
Definition: ws_client.cpp:111
+
WSClient(String config_path, SKDelta *sk_delta, std::function< void(bool)> connected_cb, void_cb_func delta_cb)
Definition: ws_client.cpp:41
+
SensESPApp * sensesp_app
+
void restart()
Definition: ws_client.cpp:325
+
virtual bool set_configuration(const JsonObject &config) override final
Definition: ws_client.cpp:369
+
void on_disconnected()
Definition: ws_client.cpp:67
+
void enable()
Definition: ws_client.cpp:54
-
virtual JsonObject & get_configuration(JsonBuffer &buf) override final
Definition: ws_client.cpp:332
+
virtual JsonObject & get_configuration(JsonBuffer &buf) override final
Definition: ws_client.cpp:343
-
bool data_available()
-
void on_connected(uint8_t *payload)
Definition: ws_client.cpp:84
+
bool data_available()
+
void on_connected(uint8_t *payload)
Definition: ws_client.cpp:87
-
String get_hostname()
+
String get_hostname()
virtual void save_configuration()
std::function< void()> void_cb_func
Definition: sensesp.h:7
-
void loop()
Definition: ws_client.cpp:306
+
void loop()
Definition: ws_client.cpp:317
WSClient * ws_client
Definition: ws_client.cpp:19
-
void on_receive_delta(uint8_t *payload)
Definition: ws_client.cpp:90
+
void on_receive_delta(uint8_t *payload)
Definition: ws_client.cpp:93
const String config_path
Definition: configurable.h:29
-
void send_delta()
Definition: ws_client.cpp:321
-
void on_error()
Definition: ws_client.cpp:78
+
void send_delta()
Definition: ws_client.cpp:332
+
void on_error()
Definition: ws_client.cpp:81
-
bool is_connected()
Definition: ws_client.cpp:310
-
void get_delta(String &output)
+
bool is_connected()
Definition: ws_client.cpp:321
+
void get_delta(String &output)
const char PAGE_index [] PROGMEM
Definition: index.h:2
ReactESP app
-
virtual String get_config_schema() override
Definition: ws_client.cpp:353
+
virtual String get_config_schema() override
Definition: ws_client.cpp:364
diff --git a/docs/ws__client_8h.html b/docs/ws__client_8h.html index b284c30b0..52be6e4ca 100644 --- a/docs/ws__client_8h.html +++ b/docs/ws__client_8h.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
diff --git a/docs/ws__client_8h_source.html b/docs/ws__client_8h_source.html index 865727459..47fbda4b3 100644 --- a/docs/ws__client_8h_source.html +++ b/docs/ws__client_8h_source.html @@ -30,7 +30,7 @@
SensESP -  0.4.2 +  0.4.3
Universal Signal K sensor framework for ESP8266 and ESP32
@@ -91,31 +91,31 @@
ws_client.h
-Go to the documentation of this file.
1 #ifndef _ws_client_H_
2 #define _ws_client_H_
3 
4 #include <functional>
5 
6 #include <WebSocketsClient.h>
7 
8 #include "sensesp.h"
9 #include "system/configurable.h"
10 #include "signalk/signalk_delta.h"
11 
12 static const char* NULL_AUTH_TOKEN = "";
13 
15 
16 class WSClient : public Configurable {
17  public:
18  WSClient(String config_path, SKDelta* sk_delta,
19  std::function<void(bool)> connected_cb,
20  void_cb_func delta_cb);
21  void enable();
22  void on_disconnected();
23  void on_error();
24  void on_connected(uint8_t * payload);
25  void on_receive_delta(uint8_t * payload);
26  void connect();
27  void loop();
28  bool is_connected();
29  void restart();
30  void send_delta();
31 
32  virtual JsonObject& get_configuration(JsonBuffer& buf) override final;
33  virtual bool set_configuration(const JsonObject& config) override final;
34  virtual String get_config_schema() override;
35 
36  private:
37  String server_address = "";
38  uint16_t server_port = 80;
39  String client_id = "";
40  String polling_href = "";
41  String auth_token = NULL_AUTH_TOKEN;
42  bool server_detected = false;
43 
44  // FIXME: replace with a single connection_state enum
45  ConnectionState connection_state = disconnected;
46  WebSocketsClient client;
47  SKDelta* sk_delta;
48  void connect_loop();
49  void test_token(const String host, const uint16_t port);
50  void send_access_request(const String host, const uint16_t port);
51  void poll_access_request(const String host, const uint16_t port, const String href);
52  void connect_ws(const String host, const uint16_t port);
53  std::function<void(bool)> connected_cb;
54  void_cb_func delta_cb;
55  bool get_mdns_service(String &server_address, uint16_t& server_port);
56 };
57 
58 #endif
void connect()
Definition: ws_client.cpp:108
+Go to the documentation of this file.
1 #ifndef _ws_client_H_
2 #define _ws_client_H_
3 
4 #include <functional>
5 
6 #include <WebSocketsClient.h>
7 
8 #include "sensesp.h"
9 #include "system/configurable.h"
10 #include "signalk/signalk_delta.h"
11 
12 static const char* NULL_AUTH_TOKEN = "";
13 
15 
16 class WSClient : public Configurable {
17  public:
18  WSClient(String config_path, SKDelta* sk_delta,
19  std::function<void(bool)> connected_cb,
20  void_cb_func delta_cb);
21  void enable();
22  void on_disconnected();
23  void on_error();
24  void on_connected(uint8_t * payload);
25  void on_receive_delta(uint8_t * payload);
26  void connect();
27  void loop();
28  bool is_connected();
29  void restart();
30  void send_delta();
31 
32  virtual JsonObject& get_configuration(JsonBuffer& buf) override final;
33  virtual bool set_configuration(const JsonObject& config) override final;
34  virtual String get_config_schema() override;
35 
36  private:
37  String server_address = "";
38  uint16_t server_port = 80;
39  String client_id = "";
40  String polling_href = "";
41  String auth_token = NULL_AUTH_TOKEN;
42  bool server_detected = false;
43 
44  // FIXME: replace with a single connection_state enum
45  ConnectionState connection_state = disconnected;
46  WebSocketsClient client;
47  SKDelta* sk_delta;
48  void connect_loop();
49  void test_token(const String host, const uint16_t port);
50  void send_access_request(const String host, const uint16_t port);
51  void poll_access_request(const String host, const uint16_t port, const String href);
52  void connect_ws(const String host, const uint16_t port);
53  std::function<void(bool)> connected_cb;
54  void_cb_func delta_cb;
55  bool get_mdns_service(String &server_address, uint16_t& server_port);
56 };
57 
58 #endif
void connect()
Definition: ws_client.cpp:111
-
WSClient(String config_path, SKDelta *sk_delta, std::function< void(bool)> connected_cb, void_cb_func delta_cb)
Definition: ws_client.cpp:38
-
void restart()
Definition: ws_client.cpp:314
-
virtual bool set_configuration(const JsonObject &config) override final
Definition: ws_client.cpp:358
-
void on_disconnected()
Definition: ws_client.cpp:64
-
void enable()
Definition: ws_client.cpp:51
+
WSClient(String config_path, SKDelta *sk_delta, std::function< void(bool)> connected_cb, void_cb_func delta_cb)
Definition: ws_client.cpp:41
+
void restart()
Definition: ws_client.cpp:325
+
virtual bool set_configuration(const JsonObject &config) override final
Definition: ws_client.cpp:369
+
void on_disconnected()
Definition: ws_client.cpp:67
+
void enable()
Definition: ws_client.cpp:54
-
virtual JsonObject & get_configuration(JsonBuffer &buf) override final
Definition: ws_client.cpp:332
+
virtual JsonObject & get_configuration(JsonBuffer &buf) override final
Definition: ws_client.cpp:343
-
void on_connected(uint8_t *payload)
Definition: ws_client.cpp:84
+
void on_connected(uint8_t *payload)
Definition: ws_client.cpp:87
ConnectionState
Definition: ws_client.h:14
std::function< void()> void_cb_func
Definition: sensesp.h:7
-
void loop()
Definition: ws_client.cpp:306
-
void on_receive_delta(uint8_t *payload)
Definition: ws_client.cpp:90
+
void loop()
Definition: ws_client.cpp:317
+
void on_receive_delta(uint8_t *payload)
Definition: ws_client.cpp:93
const String config_path
Definition: configurable.h:29
-
void send_delta()
Definition: ws_client.cpp:321
-
void on_error()
Definition: ws_client.cpp:78
+
void send_delta()
Definition: ws_client.cpp:332
+
void on_error()
Definition: ws_client.cpp:81
-
bool is_connected()
Definition: ws_client.cpp:310
+
bool is_connected()
Definition: ws_client.cpp:321
-
virtual String get_config_schema() override
Definition: ws_client.cpp:353
+
virtual String get_config_schema() override
Definition: ws_client.cpp:364
diff --git a/library.json b/library.json index fe878edb9..2a3c2b646 100644 --- a/library.json +++ b/library.json @@ -66,7 +66,7 @@ "name": "RemoteDebug", "version": "https://github.com/JoaoLopesF/RemoteDebug.git#0b5a9c1a49fd2ade0e3cadc3a3707781e819359a" } ], - "version": "0.4.2", + "version": "0.4.3", "frameworks": "arduino", "platforms": "*" } diff --git a/library.properties b/library.properties index b08d6ddfc..452fe4b2f 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=SensESP -version=0.4.2 +version=0.4.3 author=Matti Airas maintainer=Matti Airas sentence=Signal K sensor development library for ESP devices