Remove EEPROM buffer for routing information
This commit is contained in:
@@ -37,6 +37,7 @@ static inline bool isValidDistance( const uint8_t distance ) {
|
|||||||
return distance != DISTANCE_INVALID;
|
return distance != DISTANCE_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MySensor::MySensor(MyTransport &_radio, MySigning &_signer, MyHw &_hw)
|
MySensor::MySensor(MyTransport &_radio, MySigning &_signer, MyHw &_hw)
|
||||||
:
|
:
|
||||||
radio(_radio),
|
radio(_radio),
|
||||||
@@ -55,10 +56,6 @@ void MySensor::begin(void (*_msgCallback)(const MyMessage &), uint8_t _nodeId, b
|
|||||||
// Only gateway should use node id 0
|
// Only gateway should use node id 0
|
||||||
isGateway = _nodeId == 0;
|
isGateway = _nodeId == 0;
|
||||||
|
|
||||||
if (repeaterMode) {
|
|
||||||
setupRepeaterMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup radio
|
// Setup radio
|
||||||
radio.init();
|
radio.init();
|
||||||
|
|
||||||
@@ -108,10 +105,6 @@ void MySensor::begin(void (*_msgCallback)(const MyMessage &), uint8_t _nodeId, b
|
|||||||
debug(PSTR("%s started, id=%d, parent=%d, distance=%d\n"), isGateway?"gateway":(repeaterMode?"repeater":"sensor"), nc.nodeId, nc.parentNodeId, nc.distance);
|
debug(PSTR("%s started, id=%d, parent=%d, distance=%d\n"), isGateway?"gateway":(repeaterMode?"repeater":"sensor"), nc.nodeId, nc.parentNodeId, nc.distance);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySensor::setupRepeaterMode(){
|
|
||||||
// childNodeTable = new uint8_t[256];
|
|
||||||
hw.readConfigBlock((void*)childNodeTable, (void *)EEPROM_ROUTES_ADDRESS, 256);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t MySensor::getNodeId() {
|
uint8_t MySensor::getNodeId() {
|
||||||
return nc.nodeId;
|
return nc.nodeId;
|
||||||
@@ -213,7 +206,7 @@ boolean MySensor::sendRoute(MyMessage &message) {
|
|||||||
ok = sendWrite(nc.parentNodeId, message);
|
ok = sendWrite(nc.parentNodeId, message);
|
||||||
} else {
|
} else {
|
||||||
// Relay the message
|
// Relay the message
|
||||||
uint8_t route = getChildRoute(dest);
|
uint8_t route = hw.readConfigByte(EEPROM_ROUTES_ADDRESS+dest);
|
||||||
if (route > GATEWAY_ADDRESS && route < BROADCAST_ADDRESS) {
|
if (route > GATEWAY_ADDRESS && route < BROADCAST_ADDRESS) {
|
||||||
// This message should be forwarded to a child node. If we send message
|
// This message should be forwarded to a child node. If we send message
|
||||||
// to this nodes pipe then all children will receive it because the are
|
// to this nodes pipe then all children will receive it because the are
|
||||||
@@ -251,7 +244,7 @@ boolean MySensor::sendRoute(MyMessage &message) {
|
|||||||
// This message should be routed back towards sensor net gateway
|
// This message should be routed back towards sensor net gateway
|
||||||
ok = sendWrite(nc.parentNodeId, message);
|
ok = sendWrite(nc.parentNodeId, message);
|
||||||
// Add this child to our "routing table" if it not already exist
|
// Add this child to our "routing table" if it not already exist
|
||||||
addChildRoute(sender, last);
|
hw.writeConfigByte(EEPROM_ROUTES_ADDRESS+sender, last);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,7 +357,7 @@ boolean MySensor::process() {
|
|||||||
|
|
||||||
if (repeaterMode && last != nc.parentNodeId) {
|
if (repeaterMode && last != nc.parentNodeId) {
|
||||||
// Message is from one of the child nodes. Add it to routing table.
|
// Message is from one of the child nodes. Add it to routing table.
|
||||||
addChildRoute(sender, last);
|
hw.writeConfigByte(EEPROM_ROUTES_ADDRESS+sender, last);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if sender requests an ack back.
|
// Check if sender requests an ack back.
|
||||||
@@ -458,7 +451,7 @@ boolean MySensor::process() {
|
|||||||
debug(PSTR("clear\n"));
|
debug(PSTR("clear\n"));
|
||||||
uint8_t i = 255;
|
uint8_t i = 255;
|
||||||
do {
|
do {
|
||||||
removeChildRoute(i);
|
hw.writeConfigByte(EEPROM_ROUTES_ADDRESS+i, 0xff);
|
||||||
} while (i--);
|
} while (i--);
|
||||||
// Clear parent node id & distance to gw
|
// Clear parent node id & distance to gw
|
||||||
hw.writeConfigByte(EEPROM_PARENT_NODE_ID_ADDRESS, 0xFF);
|
hw.writeConfigByte(EEPROM_PARENT_NODE_ID_ADDRESS, 0xFF);
|
||||||
@@ -509,22 +502,6 @@ uint8_t MySensor::loadState(uint8_t pos) {
|
|||||||
return hw.readConfigByte(EEPROM_LOCAL_CONFIG_ADDRESS+pos);
|
return hw.readConfigByte(EEPROM_LOCAL_CONFIG_ADDRESS+pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySensor::addChildRoute(uint8_t childId, uint8_t route) {
|
|
||||||
childNodeTable[childId] = route;
|
|
||||||
hw.writeConfigByte(EEPROM_ROUTES_ADDRESS+childId, route);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MySensor::removeChildRoute(uint8_t childId) {
|
|
||||||
childNodeTable[childId] = 0xff;
|
|
||||||
hw.writeConfigByte(EEPROM_ROUTES_ADDRESS+childId, 0xff);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t MySensor::getChildRoute(uint8_t childId) {
|
|
||||||
return childNodeTable[childId];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MySensor::wait(unsigned long ms) {
|
void MySensor::wait(unsigned long ms) {
|
||||||
unsigned long enter = hw.millisec();
|
unsigned long enter = hw.millisec();
|
||||||
while (hw.millisec() - enter < ms) {
|
while (hw.millisec() - enter < ms) {
|
||||||
|
|||||||
@@ -244,7 +244,6 @@ class MySensor
|
|||||||
MySigning& signer;
|
MySigning& signer;
|
||||||
MyHw& hw;
|
MyHw& hw;
|
||||||
|
|
||||||
void setupRepeaterMode();
|
|
||||||
boolean sendWrite(uint8_t dest, MyMessage &message);
|
boolean sendWrite(uint8_t dest, MyMessage &message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -252,7 +251,6 @@ class MySensor
|
|||||||
char convBuf[MAX_PAYLOAD*2+1];
|
char convBuf[MAX_PAYLOAD*2+1];
|
||||||
#endif
|
#endif
|
||||||
uint8_t failedTransmissions;
|
uint8_t failedTransmissions;
|
||||||
uint8_t childNodeTable[256]; // In memory buffer for routing information to other nodes. also stored in EEPROM
|
|
||||||
void (*timeCallback)(unsigned long); // Callback for requested time messages
|
void (*timeCallback)(unsigned long); // Callback for requested time messages
|
||||||
void (*msgCallback)(const MyMessage &); // Callback for incoming messages from other nodes and gateway.
|
void (*msgCallback)(const MyMessage &); // Callback for incoming messages from other nodes and gateway.
|
||||||
|
|
||||||
@@ -260,10 +258,6 @@ class MySensor
|
|||||||
void setupNode();
|
void setupNode();
|
||||||
void findParentNode();
|
void findParentNode();
|
||||||
uint8_t crc8Message(MyMessage &message);
|
uint8_t crc8Message(MyMessage &message);
|
||||||
uint8_t getChildRoute(uint8_t childId);
|
|
||||||
void addChildRoute(uint8_t childId, uint8_t route);
|
|
||||||
void removeChildRoute(uint8_t childId);
|
|
||||||
void internalSleep(unsigned long ms);
|
|
||||||
bool sign(MyMessage &message);
|
bool sign(MyMessage &message);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user