forked from arduino/Arduino
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into development
Conflicts: libraries/MySensors/utility/RFM69.h
- Loading branch information
Showing
23 changed files
with
832 additions
and
157 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,184 @@ | ||
/** | ||
* The MySensors Arduino library handles the wireless radio link and protocol | ||
* between your home built sensors/actuators and HA controller of choice. | ||
* The sensors forms a self healing radio network with optional repeaters. Each | ||
* repeater and gateway builds a routing tables in EEPROM which keeps track of the | ||
* network topology allowing messages to be routed to nodes. | ||
* | ||
* Created by Henrik Ekblad <[email protected]> | ||
* Copyright (C) 2013-2015 Sensnology AB | ||
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors | ||
* | ||
* Documentation: http://www.mysensors.org | ||
* Support Forum: http://forum.mysensors.org | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* version 2 as published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifdef ARDUINO_ARCH_ESP8266 | ||
|
||
#include "MyHw.h" | ||
#include "MyHwESP8266.h" | ||
#include <EEPROM.h> | ||
|
||
/* | ||
int8_t pinIntTrigger = 0; | ||
void wakeUp() //place to send the interrupts | ||
{ | ||
pinIntTrigger = 1; | ||
} | ||
void wakeUp2() //place to send the second interrupts | ||
{ | ||
pinIntTrigger = 2; | ||
} | ||
// Watchdog Timer interrupt service routine. This routine is required | ||
// to allow automatic WDIF and WDIE bit clearance in hardware. | ||
ISR (WDT_vect) | ||
{ | ||
// WDIE & WDIF is cleared in hardware upon entering this ISR | ||
wdt_disable(); | ||
} | ||
*/ | ||
|
||
static void hw_initConfigBlock( size_t length = 1024 /*ATMega328 has 1024 bytes*/ ) | ||
{ | ||
static bool initDone = false; | ||
if (!initDone) | ||
{ | ||
EEPROM.begin(length); | ||
initDone = true; | ||
} | ||
} | ||
|
||
void hw_readConfigBlock(void* buf, void* adr, size_t length) | ||
{ | ||
hw_initConfigBlock(); | ||
uint8_t* dst = static_cast<uint8_t*>(buf); | ||
int offs = reinterpret_cast<int>(adr); | ||
while (length-- > 0) | ||
{ | ||
*dst++ = EEPROM.read(offs++); | ||
} | ||
} | ||
|
||
void hw_writeConfigBlock(void* buf, void* adr, size_t length) | ||
{ | ||
hw_initConfigBlock(); | ||
uint8_t* src = static_cast<uint8_t*>(buf); | ||
int offs = reinterpret_cast<int>(adr); | ||
while (length-- > 0) | ||
{ | ||
EEPROM.write(offs++, *src++); | ||
} | ||
EEPROM.commit(); | ||
} | ||
|
||
uint8_t hw_readConfig(int adr) | ||
{ | ||
uint8_t value; | ||
hw_readConfigBlock(&value, reinterpret_cast<void*>(adr), 1); | ||
return value; | ||
} | ||
|
||
void hw_writeConfig(int adr, uint8_t value) | ||
{ | ||
uint8_t curr = hw_readConfig(adr); | ||
if (curr != value) | ||
{ | ||
hw_writeConfigBlock(&value, reinterpret_cast<void*>(adr), 1); | ||
} | ||
} | ||
|
||
|
||
|
||
MyHwESP8266::MyHwESP8266() : MyHw() | ||
{ | ||
} | ||
|
||
|
||
/* | ||
// The following was redifined as macros to save space | ||
inline uint8_t MyHwATMega328::readConfig(uint8_t pos) { | ||
return eeprom_read_byte((uint8_t*)pos); | ||
} | ||
inline void MyHwATMega328::writeConfig(uint8_t pos, uint8_t value) { | ||
eeprom_update_byte((uint8_t*)pos, value); | ||
} | ||
inline void MyHwATMega328::readConfigBlock(void* buf, void * pos, size_t length) { | ||
eeprom_read_block(buf, (void*)pos, length); | ||
} | ||
inline void MyHwATMega328::writeConfigBlock(void* pos, void* buf, size_t length) { | ||
eeprom_write_block((void*)pos, (void*)buf, length); | ||
} | ||
inline void MyHwATMega328::init() { | ||
Serial.begin(BAUD_RATE); | ||
} | ||
inline void MyHwATMega328::watchdogReset() { | ||
wdt_reset(); | ||
} | ||
inline void MyHwATMega328::reboot() { | ||
wdt_enable(WDTO_15MS); for (;;); | ||
} | ||
inline unsigned long MyHwATMega328::millis() { | ||
return ::millis(); | ||
} | ||
*/ | ||
|
||
|
||
void MyHwESP8266::sleep(unsigned long ms) { | ||
// TODO: Not supported! | ||
} | ||
|
||
bool MyHwESP8266::sleep(uint8_t interrupt, uint8_t mode, unsigned long ms) { | ||
// TODO: Not supported! | ||
return false; | ||
} | ||
|
||
inline uint8_t MyHwESP8266::sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms) { | ||
// TODO: Not supported! | ||
return 0; | ||
} | ||
|
||
|
||
|
||
#ifdef DEBUG | ||
void MyHwESP8266::debugPrint(bool isGW, const char *fmt, ... ) { | ||
char fmtBuffer[300]; | ||
if (isGW) { | ||
// prepend debug message to be handled correctly by controller (C_INTERNAL, I_LOG_MESSAGE) | ||
snprintf_P(fmtBuffer, 299, PSTR("0;0;%d;0;%d;"), C_INTERNAL, I_LOG_MESSAGE); | ||
Serial.print(fmtBuffer); | ||
} | ||
va_list args; | ||
va_start (args, fmt ); | ||
va_end (args); | ||
if (isGW) { | ||
// Truncate message if this is gateway node | ||
vsnprintf_P(fmtBuffer, 60, fmt, args); | ||
fmtBuffer[59] = '\n'; | ||
fmtBuffer[60] = '\0'; | ||
} else { | ||
vsnprintf_P(fmtBuffer, 299, fmt, args); | ||
} | ||
va_end (args); | ||
Serial.print(fmtBuffer); | ||
Serial.flush(); | ||
|
||
//Serial.write(freeRam()); | ||
} | ||
#endif | ||
|
||
#endif // #ifdef ARDUINO_ARCH_ESP8266 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/** | ||
* The MySensors Arduino library handles the wireless radio link and protocol | ||
* between your home built sensors/actuators and HA controller of choice. | ||
* The sensors forms a self healing radio network with optional repeaters. Each | ||
* repeater and gateway builds a routing tables in EEPROM which keeps track of the | ||
* network topology allowing messages to be routed to nodes. | ||
* | ||
* Created by Henrik Ekblad <[email protected]> | ||
* Copyright (C) 2013-2015 Sensnology AB | ||
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors | ||
* | ||
* Documentation: http://www.mysensors.org | ||
* Support Forum: http://forum.mysensors.org | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* version 2 as published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifdef ARDUINO_ARCH_ESP8266 | ||
|
||
#ifndef MyHwESP8266_h | ||
#define MyHwESP8266_h | ||
|
||
#include "MyHw.h" | ||
#include "MyConfig.h" | ||
#include "MyMessage.h" | ||
|
||
|
||
#ifdef __cplusplus | ||
#include <Arduino.h> | ||
#include <SPI.h> | ||
#endif | ||
|
||
// Define these as macros to save valuable space | ||
|
||
#define hw_digitalWrite(__pin, __value) (digitalWrite(__pin, __value)) | ||
#define hw_init() Serial.begin(BAUD_RATE) | ||
#define hw_watchdogReset() wdt_reset() | ||
#define hw_reboot() wdt_enable(WDTO_15MS); while (1) | ||
#define hw_millis() millis() | ||
|
||
void hw_readConfigBlock(void* buf, void* adr, size_t length); | ||
void hw_writeConfigBlock(void* buf, void* adr, size_t length); | ||
void hw_writeConfig(int adr, uint8_t value); | ||
uint8_t hw_readConfig(int adr); | ||
|
||
enum period_t | ||
{ | ||
SLEEP_15Ms, | ||
SLEEP_30MS, | ||
SLEEP_60MS, | ||
SLEEP_120MS, | ||
SLEEP_250MS, | ||
SLEEP_500MS, | ||
SLEEP_1S, | ||
SLEEP_2S, | ||
SLEEP_4S, | ||
SLEEP_8S, | ||
SLEEP_FOREVER | ||
}; | ||
|
||
class MyHwESP8266 : public MyHw | ||
{ | ||
public: | ||
MyHwESP8266(); | ||
|
||
/* void init(); | ||
void watchdogReset(); | ||
void reboot(); | ||
unsigned long millis(); | ||
uint8_t readConfig(uint8_t pos); | ||
void writeConfig(uint8_t pos, uint8_t value); | ||
void readConfigBlock(void* buf, void * pos, size_t length); | ||
void writeConfigBlock(void* pos, void* buf, size_t length); */ | ||
|
||
void sleep(unsigned long ms); | ||
bool sleep(uint8_t interrupt, uint8_t mode, unsigned long ms); | ||
uint8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms); | ||
#ifdef DEBUG | ||
void debugPrint(bool isGW, const char *fmt, ... ); | ||
#endif | ||
}; | ||
#endif | ||
|
||
#endif // #ifdef ARDUINO_ARCH_ESP8266 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.