Skip to content

Commit 7a276cb

Browse files
authored
Multiple fixes for board compatibility (#512)
1 parent 38d1d58 commit 7a276cb

File tree

14 files changed

+66
-65
lines changed

14 files changed

+66
-65
lines changed

MySensors_NodeManager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ NodeManager nodeManager;
8787
#include "nodemanager/Sensor.cpp"
8888
// Child class
8989
#include "nodemanager/Child.cpp"
90-
// Timer class
91-
#include "nodemanager/Timer.cpp"
90+
// InternalTimer class
91+
#include "nodemanager/InternalTimer.cpp"
9292

9393
#if NODEMANAGER_OTA_CONFIGURATION == ON
9494
// include SensorConfiguration if needed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ You can interact with each class provided by NodeManager through a set of API fu
275275
void registerSensor(Sensor* sensor);
276276
#if NODEMANAGER_SLEEP == ON
277277
// register a timer
278-
void registerTimer(Timer* timer);
278+
void registerTimer(InternalTimer* timer);
279279
#endif
280280
// return the next-available child id
281281
uint8_t getAvailableChildId(uint8_t child_id = 0);

examples/Template/Template.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ NodeManager. Just uncomment the settings you need and the sensors you want to ad
121121

122122
// ESP8266 gateway settings
123123
//#define MY_GATEWAY_ESP8266
124-
//#define MY_ESP8266_SSID ""
125-
//#define MY_ESP8266_PASSWORD ""
124+
//#define MY_WIFI_SSID ""
125+
//#define MY_WIFI_PASSWORD ""
126126

127127
// Gateway networking settings
128128
//#define MY_IP_ADDRESS 192,168,178,87

keywords.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Child KEYWORD1
2323
ConfigurationRequest KEYWORD1
2424
List KEYWORD1
2525
PowerManager KEYWORD1
26-
Timer KEYWORD1
26+
InternalTimer KEYWORD1
2727

2828
# NodeManager functions
2929

nodemanager/Child.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Child: data structure for representing a Child of a Sensor
2424
*/
2525

2626
class Sensor;
27-
#include "Timer.h"
27+
#include "InternalTimer.h"
2828

2929
// how many slots to leave for the user before starting using them for Child
3030
#define EEPROM_CHILD_OFFSET 10
@@ -125,7 +125,7 @@ class Child {
125125
#if NODEMANAGER_CONDITIONAL_REPORT == ON
126126
double _last_value = 0;
127127
const char* _last_value_string = "";
128-
Timer* _force_update_timer = new Timer();
128+
InternalTimer* _force_update_timer = new InternalTimer();
129129
float _min_threshold = -FLT_MAX;
130130
float _max_threshold = FLT_MAX;
131131
float _value_delta = 0;

nodemanager/Constants.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,23 +100,20 @@ Chip type
100100
#if defined (MYBOARDNRF5) || defined(NRF51) || defined(NRF52)
101101
#define CHIP_NRF5
102102
#endif
103-
#if !defined(CHIP_ESP8266) && !defined(CHIP_ESP32) && !defined(CHIP_STM32) && !defined(CHIP_NRF5)
103+
#if defined (SAMD_SERIES)
104+
#define CHIP_SAMD
105+
#endif
106+
#if !defined(CHIP_ESP8266) && !defined(CHIP_ESP32) && !defined(CHIP_STM32) && !defined(CHIP_NRF5) && !defined(CHIP_SAMD)
104107
#define CHIP_AVR
105108
#endif
106109

107110
// define interrupt pins
108-
109-
#if defined(CHIP_STM32)
110-
#define INTERRUPT_PIN_1 PB8
111-
#define INTERRUPT_PIN_2 2
112-
#else
113111
#ifndef INTERRUPT_PIN_1
114112
#define INTERRUPT_PIN_1 3
115113
#endif
116114
#ifndef INTERRUPT_PIN_2
117115
#define INTERRUPT_PIN_2 2
118116
#endif
119-
#endif
120117

121118
// define eeprom addresses
122119
#define EEPROM_SLEEP_SAVED 0

nodemanager/Timer.cpp renamed to nodemanager/InternalTimer.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,37 @@
1818
*/
1919

2020
/******************************************
21-
Timer: helper class to keep track of the elapsed time
21+
InternalTimer: helper class to keep track of the elapsed time
2222
*/
2323

24-
#include "Timer.h"
24+
#include "InternalTimer.h"
2525

26-
Timer::Timer() {
26+
InternalTimer::InternalTimer() {
2727
nodeManager.registerTimer(this);
2828
}
2929

3030
// set the timer mode
31-
void Timer::setMode(timer_mode mode) {
31+
void InternalTimer::setMode(timer_mode mode) {
3232
_mode = mode;
3333
}
3434

3535
// get the timer mode
36-
timer_mode Timer::getMode() {
36+
timer_mode InternalTimer::getMode() {
3737
return _mode;
3838
}
3939

4040
// set the timer value in seconds
41-
void Timer::setValue(unsigned long value) {
41+
void InternalTimer::setValue(unsigned long value) {
4242
_value = value;
4343
}
4444

4545
// get the timer value in seconds
46-
unsigned long Timer::getValue() {
46+
unsigned long InternalTimer::getValue() {
4747
return _value;
4848
}
4949

5050
// start/restart the timer
51-
void Timer::start() {
51+
void InternalTimer::start() {
5252
#if NODEMANAGER_TIME == ON
5353
// target will be the current unix timestamp plus the requested
5454
if (_mode == TIME_INTERVAL) _target = now() + _value;
@@ -64,20 +64,20 @@ void Timer::start() {
6464
}
6565

6666
// stop the timer
67-
void Timer::stop() {
67+
void InternalTimer::stop() {
6868
_is_running = false;
6969
}
7070

7171
// update the timer and keep track of the elapsed time
72-
void Timer::update() {
72+
void InternalTimer::update() {
7373
#if NODEMANAGER_TIME == OFF && NODEMANAGER_SLEEP == ON
7474
// if a sleeping node and time is not reliable take out from target the time slept in the previous cycle
7575
if (_mode == TIME_INTERVAL && nodeManager.isSleepingNode()) _target -= nodeManager.getSleepSeconds()*1000UL;
7676
#endif
7777
}
7878

7979
// return true if the time is over
80-
bool Timer::isOver() {
80+
bool InternalTimer::isOver() {
8181
// time is never over if not configured or instructed to never report
8282
if (_mode == DO_NOT_REPORT || _mode == NOT_CONFIGURED) return false;
8383
// timer is always over when reporting immediately

nodemanager/Timer.h renamed to nodemanager/InternalTimer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
#define Timer_h
2121

2222
/******************************************
23-
Timer: helper class to keep track of the elapsed time
23+
InternalTimer: helper class to keep track of the elapsed time
2424
*/
2525

2626
class NodeManager;
2727

28-
class Timer {
28+
class InternalTimer {
2929
public:
30-
Timer();
30+
InternalTimer();
3131
void setMode(timer_mode mode);
3232
timer_mode getMode();
3333
void setValue(unsigned long value);

nodemanager/Node.cpp

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,6 @@ NodeManager::NodeManager(uint8_t sensor_count) {
2929
_message = MyMessage();
3030
// allocate block for all the sensors if sensor_count is provided
3131
if (sensor_count > 0) sensors.allocateBlocks(sensor_count);
32-
// setup serial port baud rate
33-
#ifndef CHIP_NRF5
34-
MY_SERIALDEVICE.begin(MY_BAUD_RATE);
35-
#endif
36-
// print out the version
37-
debug(PSTR(LOG_INIT "VER=" VERSION "\n"));
38-
// print out sketch name
39-
debug(PSTR(LOG_INIT "INO=" SKETCH_NAME " v" SKETCH_VERSION "\n"));
40-
// print out MySensors' library capabilities
41-
debug(PSTR(LOG_INIT "LIB VER=" MYSENSORS_LIBRARY_VERSION " CP=" MY_CAPABILITIES " \n"));
4232
}
4333

4434
#if NODEMANAGER_INTERRUPTS == ON
@@ -152,15 +142,21 @@ void NodeManager::registerSensor(Sensor* sensor) {
152142
}
153143

154144
// register a timer
155-
void NodeManager::registerTimer(Timer* timer) {
145+
void NodeManager::registerTimer(InternalTimer* timer) {
156146
_timers.push(timer);
157147
}
158148

159149

160150
// setup NodeManager
161151
void NodeManager::before() {
152+
// print out the version
153+
debug(PSTR(LOG_INIT "VER=" VERSION "\n"));
154+
// print out sketch name
155+
debug(PSTR(LOG_INIT "INO=" SKETCH_NAME " v" SKETCH_VERSION "\n"));
156+
// print out MySensors' library capabilities
157+
debug(PSTR(LOG_INIT "LIB VER=" MYSENSORS_LIBRARY_VERSION " CP=" MY_CAPABILITIES " \n"));
162158
// setup the reboot pin if needed
163-
if (_reboot_pin > -1) {
159+
if (_reboot_pin > 0) {
164160
debug(PSTR(LOG_INIT "RBT p=%d\n"),_reboot_pin);
165161
pinMode(_reboot_pin, OUTPUT);
166162
digitalWrite(_reboot_pin, HIGH);
@@ -251,8 +247,8 @@ void NodeManager::loop() {
251247
powerOn();
252248
#endif
253249
// update all the registered timers
254-
for (List<Timer*>::iterator itr = _timers.begin(); itr != _timers.end(); ++itr) {
255-
Timer* timer = *itr;
250+
for (List<InternalTimer*>::iterator itr = _timers.begin(); itr != _timers.end(); ++itr) {
251+
InternalTimer* timer = *itr;
256252
timer->update();
257253
}
258254
// run loop for all the registered sensors
@@ -348,7 +344,7 @@ void NodeManager::loop() {
348344
// reboot the board
349345
void NodeManager::reboot() {
350346
debug(PSTR(LOG_POWER "RBT\n"));
351-
if (_reboot_pin > -1) {
347+
if (_reboot_pin > 0) {
352348
// reboot the board through the reboot pin which is connected to RST by setting it to low
353349
digitalWrite(_reboot_pin, LOW);
354350
}
@@ -481,7 +477,7 @@ void NodeManager::loop() {
481477
// setup the interrupt pins
482478
void NodeManager::_setupInterrupts() {
483479
// configure wakeup pin if needed
484-
if (_sleep_interrupt_pin > -1) {
480+
if (_sleep_interrupt_pin > 0) {
485481
// set the interrupt when the pin is connected to ground
486482
setInterrupt(_sleep_interrupt_pin,FALLING,HIGH);
487483
}
@@ -559,10 +555,10 @@ void NodeManager::loop() {
559555
_message.setType(type);
560556
// send the message, multiple times if requested
561557
for (int i = 0; i < _retries; i++) {
562-
if (mGetPayloadType(_message) == P_INT16) debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%d\n"),_message.sensor,_message.type,_message.getInt());
563-
if (mGetPayloadType(_message) == P_LONG32) debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%ld\n"),_message.sensor,_message.type,_message.getLong());
564-
if (mGetPayloadType(_message) == P_FLOAT32) debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%d.%02d\n"),_message.sensor,_message.type,(unsigned int)_message.getFloat(), (unsigned int)(_message.getFloat()*100)%100);
565-
if (mGetPayloadType(_message) == P_STRING) debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%s\n"),_message.sensor,_message.type,_message.getString());
558+
if (mGetPayloadType(_message) == P_INT16) { debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%d\n"),_message.sensor,_message.type,_message.getInt()); }
559+
if (mGetPayloadType(_message) == P_LONG32) { debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%ld\n"),_message.sensor,_message.type,_message.getLong()); }
560+
if (mGetPayloadType(_message) == P_FLOAT32) { debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%d.%02d\n"),_message.sensor,_message.type,(unsigned int)_message.getFloat(), (unsigned int)(_message.getFloat()*100)%100); }
561+
if (mGetPayloadType(_message) == P_STRING) { debug_verbose(PSTR(LOG_MSG "SEND(%d) t=%d p=%s\n"),_message.sensor,_message.type,_message.getString()); }
566562
send(_message, _ack);
567563
// if configured, sleep between each send
568564
sleepBetweenSend();
@@ -742,7 +738,7 @@ void NodeManager::setAnalogReference(uint8_t value, uint8_t pin) {
742738
// wait a bit
743739
wait(200);
744740
// perform some reading before actually reading the value
745-
if (pin > -1) {
741+
if (pin > 0) {
746742
for (int i = 0; i < 5; i++) {
747743
analogRead(pin);
748744
wait(50);

nodemanager/Node.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class NodeManager {
7272
// register a sensor
7373
void registerSensor(Sensor* sensor);
7474
// register a timer
75-
void registerTimer(Timer* timer);
75+
void registerTimer(InternalTimer* timer);
7676
// return the next-available child id
7777
uint8_t getAvailableChildId(uint8_t child_id = 0);
7878
// list containing all the registered sensors
@@ -84,7 +84,7 @@ class NodeManager {
8484
// sleep between send()
8585
void sleepBetweenSend();
8686
// set the analog reference to the given value and optionally perform some fake reading on the given pin
87-
void setAnalogReference(uint8_t value, uint8_t pin = -1);
87+
void setAnalogReference(uint8_t value, uint8_t pin = 0);
8888
#if NODEMANAGER_SLEEP == ON
8989
// [3] set the duration (in seconds) of a sleep cycle
9090
void setSleepSeconds(unsigned long value);
@@ -175,13 +175,17 @@ class NodeManager {
175175
void _sendMessage(uint8_t child_id, uint8_t type);
176176
unsigned long _sleep_time = 0;
177177
bool _sleep_or_wait = true;
178-
uint8_t _sleep_interrupt_pin = -1;
178+
uint8_t _sleep_interrupt_pin = 0;
179179
unsigned int _sleep_between_send = 0;
180180
unsigned long _report_interval_seconds = 10*60;
181-
uint8_t _reboot_pin = -1;
181+
uint8_t _reboot_pin = 0;
182182
void _present(uint8_t child_id, uint8_t type);
183-
List<Timer*> _timers;
183+
List<InternalTimer*> _timers;
184+
#if defined(ARDUINO_ARCH_STM32F1)
185+
uint8_t _analog_reference = -1;
186+
#else
184187
uint8_t _analog_reference = DEFAULT;
188+
#endif
185189
#if NODEMANAGER_INTERRUPTS == ON
186190
uint8_t _interrupt_1_mode = MODE_NOT_DEFINED;
187191
uint8_t _interrupt_2_mode = MODE_NOT_DEFINED;

0 commit comments

Comments
 (0)