123 lines
2.6 KiB
C++
123 lines
2.6 KiB
C++
|
|
|
|
#include <EEPROM.h>
|
|
|
|
byte value;
|
|
|
|
static void load_config(){
|
|
|
|
byte flag=0;
|
|
// Read nodeID
|
|
if (EEPROM.read(0) != 255){ // 255 = EEPROM default (blank) value
|
|
nodeID = EEPROM.read(0);
|
|
flag++;
|
|
}
|
|
if (EEPROM.read(1) != 255){
|
|
RF_freq = EEPROM.read(1);
|
|
flag++;
|
|
}
|
|
if (EEPROM.read(2) != 255){
|
|
networkGroup = EEPROM.read(2);
|
|
flag++;
|
|
}
|
|
|
|
if (flag > 0){
|
|
Serial.println("Loaded EEPROM RF config >");
|
|
}
|
|
else {
|
|
Serial.println("No EEPROM config");
|
|
}
|
|
|
|
}
|
|
|
|
static void config (char c) {
|
|
|
|
if ('0' <= c && c <= '9') {
|
|
value = 10 * value + c - '0';
|
|
return;
|
|
}
|
|
|
|
if (c > ' ') {
|
|
|
|
switch (c) {
|
|
|
|
case 'i': //set node ID
|
|
if (value){
|
|
nodeID = value;
|
|
break;
|
|
}
|
|
|
|
case 'b': // set band: 4 = 433, 8 = 868, 9 = 915
|
|
value = bandToFreq(value);
|
|
if (value){
|
|
RF_freq = value;
|
|
}
|
|
break;
|
|
|
|
case 'g': // set network group
|
|
if (value>=0){
|
|
networkGroup = value;
|
|
}
|
|
break;
|
|
|
|
case 's': // Save to EEPROM. Atemga328p has 1kb EEPROM
|
|
save_config();
|
|
break;
|
|
|
|
case 'v': // print firmware version
|
|
Serial.print(F("[emonTx FW: V")); Serial.print(version*0.1); Serial.print(F("]"));
|
|
break;
|
|
|
|
default:
|
|
showString(helpText1);
|
|
} //end case
|
|
|
|
//Print Current RF config
|
|
if (RF_STATUS==1) {
|
|
Serial.print(F(" "));
|
|
// Serial.print((char) ('@' + (nodeID & RF12_HDR_MASK)));
|
|
Serial.print(F(" i"));
|
|
Serial.print(nodeID & RF12_HDR_MASK);
|
|
Serial.print(F(" g"));
|
|
Serial.print(networkGroup);
|
|
Serial.print(F(" @ "));
|
|
Serial.print(RF_freq == RF12_433MHZ ? 433 :
|
|
RF_freq == RF12_868MHZ ? 868 :
|
|
RF_freq == RF12_915MHZ ? 915 : 0);
|
|
Serial.print(F(" MHz"));
|
|
}
|
|
|
|
Serial.println(F(" "));
|
|
|
|
} // end c > ' '
|
|
value = 0;
|
|
|
|
}
|
|
|
|
static void save_config(){
|
|
Serial.println("Saving...");
|
|
// Clear any old EEPROM settings
|
|
for (int i = 0 ; i < EEPROM.length() ; i++) {
|
|
EEPROM.write(i, 0);
|
|
}
|
|
//Save new settings
|
|
EEPROM.write(0, nodeID);
|
|
EEPROM.write(1, RF_freq);
|
|
EEPROM.write(2, networkGroup);
|
|
Serial.println("Done. New config saved to EEPROM");
|
|
}
|
|
|
|
static byte bandToFreq (byte band) {
|
|
return band == 4 ? RF12_433MHZ : band == 8 ? RF12_868MHZ : band == 9 ? RF12_915MHZ : 0;
|
|
}
|
|
|
|
static void showString (PGM_P s) {
|
|
for (;;) {
|
|
char c = pgm_read_byte(s++);
|
|
if (c == 0)
|
|
break;
|
|
if (c == '\n')
|
|
Serial.print('\r');
|
|
Serial.print(c);
|
|
}
|
|
} |