uint16_t RF24Mesh::renewAddress(uint32_t timeout) { if(radio.available()) { return 0; } uint8_t reqCounter = 0; uint8_t totalReqs = 0; radio.stopListening(); network.networkFlags |= 2; delay(10); network.begin(MESH_DEFAULT_ADDRESS); mesh_address = MESH_DEFAULT_ADDRESS; uint32_t start = millis(); while(!requestAddress(reqCounter)) { if(millis()-start > timeout) { return 0; } delay(50 + ( (totalReqs+1)*(reqCounter+1)) * 2); (++reqCounter) = reqCounter%4; (++totalReqs) = totalReqs%10; } network.networkFlags &= ~2; return mesh_address; }
uint16_t RF24Mesh::renewAddress(){ static const uint16_t requestDelay = 150; uint8_t reqCounter = 0; network.begin(MESH_DEFAULT_ADDRESS); mesh_address = MESH_DEFAULT_ADDRESS; while(!requestAddress(reqCounter)){ uint8_t small = millis() & ~7; delay(requestDelay+(small*8)); (++reqCounter) = reqCounter%4; } return mesh_address; }