EEPROM config and TNC mode
This commit is contained in:
parent
31de28714f
commit
720f34d41f
6
Config.h
6
Config.h
@ -62,9 +62,9 @@
|
|||||||
const int lora_rx_turnaround_ms = 50;
|
const int lora_rx_turnaround_ms = 50;
|
||||||
|
|
||||||
// Default LoRa settings
|
// Default LoRa settings
|
||||||
int lora_sf = 0;
|
int lora_sf = 0;
|
||||||
int lora_cr = 5;
|
int lora_cr = 5;
|
||||||
int lora_txp = 0xFF;
|
int lora_txp = 0xFF;
|
||||||
uint32_t lora_bw = 0;
|
uint32_t lora_bw = 0;
|
||||||
uint32_t lora_freq = 0;
|
uint32_t lora_freq = 0;
|
||||||
|
|
||||||
|
23
Framing.h
23
Framing.h
@ -28,6 +28,7 @@
|
|||||||
#define CMD_ROM_READ 0x51
|
#define CMD_ROM_READ 0x51
|
||||||
#define CMD_ROM_WRITE 0x52
|
#define CMD_ROM_WRITE 0x52
|
||||||
#define CMD_CONF_SAVE 0x53
|
#define CMD_CONF_SAVE 0x53
|
||||||
|
#define CMD_CONF_DELETE 0x54
|
||||||
#define CMD_UNLOCK_ROM 0x59
|
#define CMD_UNLOCK_ROM 0x59
|
||||||
#define ROM_UNLOCK_BYTE 0xF8
|
#define ROM_UNLOCK_BYTE 0xF8
|
||||||
|
|
||||||
@ -54,25 +55,3 @@
|
|||||||
uint8_t command = CMD_UNKNOWN;
|
uint8_t command = CMD_UNKNOWN;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
Frequency 433.200 0xc00119d21b80c0
|
|
||||||
Bandwidth 20.800 0xc00200005140c0
|
|
||||||
TX Power 8dbm 0xc00308c0
|
|
||||||
SF 7 0xc00407c0
|
|
||||||
|
|
||||||
All: 0xc00119d21b80c00200005140c00308c00407c0
|
|
||||||
|
|
||||||
Radio on 0xc00501c0
|
|
||||||
|
|
||||||
Config+on 0xc00119d21b80c00200005140c00301c00407c00601c0
|
|
||||||
|
|
||||||
|
|
||||||
c1 = self.bandwidth >> 24
|
|
||||||
c2 = self.bandwidth >> 16 & 0xFF
|
|
||||||
c3 = self.bandwidth >> 8 & 0xFF
|
|
||||||
c4 = self.bandwidth & 0xFF
|
|
||||||
data = KISS.escape(chr(c1)+chr(c2)+chr(c3)+chr(c4))
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
12
LoRa.cpp
12
LoRa.cpp
@ -370,24 +370,24 @@ void LoRaClass::setTxPower(int level, int outputPin)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoRaClass::setFrequency(long frequency)
|
void LoRaClass::setFrequency(long frequency) {
|
||||||
{
|
|
||||||
_frequency = frequency;
|
_frequency = frequency;
|
||||||
|
|
||||||
uint64_t frf = ((uint64_t)frequency << 19) / 32000000;
|
uint32_t frf = ((uint64_t)frequency << 19) / 32000000;
|
||||||
|
|
||||||
writeRegister(REG_FRF_MSB, (uint8_t)(frf >> 16));
|
writeRegister(REG_FRF_MSB, (uint8_t)(frf >> 16));
|
||||||
writeRegister(REG_FRF_MID, (uint8_t)(frf >> 8));
|
writeRegister(REG_FRF_MID, (uint8_t)(frf >> 8));
|
||||||
writeRegister(REG_FRF_LSB, (uint8_t)(frf >> 0));
|
writeRegister(REG_FRF_LSB, (uint8_t)(frf >> 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
long LoRaClass::getFrequency() {
|
uint32_t LoRaClass::getFrequency() {
|
||||||
uint8_t msb = readRegister(REG_FRF_MSB);
|
uint8_t msb = readRegister(REG_FRF_MSB);
|
||||||
uint8_t mid = readRegister(REG_FRF_MID);
|
uint8_t mid = readRegister(REG_FRF_MID);
|
||||||
uint8_t lsb = readRegister(REG_FRF_LSB);
|
uint8_t lsb = readRegister(REG_FRF_LSB);
|
||||||
|
|
||||||
uint64_t frf = msb << 16 | mid << 8 | lsb;
|
uint32_t frf = ((uint32_t)msb << 16) | ((uint32_t)mid << 8) | (uint32_t)lsb;
|
||||||
long frequency = (uint64_t)(frf*32000000) >> 19;
|
uint64_t frm = (uint64_t)frf*32000000;
|
||||||
|
uint32_t frequency = (frm >> 19);
|
||||||
|
|
||||||
return frequency;
|
return frequency;
|
||||||
}
|
}
|
||||||
|
2
LoRa.h
2
LoRa.h
@ -46,7 +46,7 @@ public:
|
|||||||
void sleep();
|
void sleep();
|
||||||
|
|
||||||
void setTxPower(int level, int outputPin = PA_OUTPUT_PA_BOOST_PIN);
|
void setTxPower(int level, int outputPin = PA_OUTPUT_PA_BOOST_PIN);
|
||||||
long getFrequency();
|
uint32_t getFrequency();
|
||||||
void setFrequency(long frequency);
|
void setFrequency(long frequency);
|
||||||
void setSpreadingFactor(int sf);
|
void setSpreadingFactor(int sf);
|
||||||
long getSignalBandwidth();
|
long getSignalBandwidth();
|
||||||
|
@ -344,6 +344,10 @@ void serialCallback(uint8_t sbyte) {
|
|||||||
}
|
}
|
||||||
} else if (command == CMD_FW_VERSION) {
|
} else if (command == CMD_FW_VERSION) {
|
||||||
kiss_indicate_version();
|
kiss_indicate_version();
|
||||||
|
} else if (command == CMD_CONF_SAVE) {
|
||||||
|
eeprom_conf_save();
|
||||||
|
} else if (command == CMD_CONF_DELETE) {
|
||||||
|
eeprom_conf_delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,6 +394,11 @@ void validateStatus() {
|
|||||||
if (eeprom_product_valid() && eeprom_model_valid() && eeprom_hwrev_valid()) {
|
if (eeprom_product_valid() && eeprom_model_valid() && eeprom_hwrev_valid()) {
|
||||||
if (eeprom_checksum_valid()) {
|
if (eeprom_checksum_valid()) {
|
||||||
hw_ready = true;
|
hw_ready = true;
|
||||||
|
|
||||||
|
if (eeprom_have_conf()) {
|
||||||
|
eeprom_conf_load();
|
||||||
|
startRadio();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hw_ready = false;
|
hw_ready = false;
|
||||||
|
@ -228,7 +228,6 @@ void getPacketData(int len) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void setSpreadingFactor() {
|
void setSpreadingFactor() {
|
||||||
if (radio_online) LoRa.setSpreadingFactor(lora_sf);
|
if (radio_online) LoRa.setSpreadingFactor(lora_sf);
|
||||||
}
|
}
|
||||||
@ -387,6 +386,51 @@ bool eeprom_checksum_valid() {
|
|||||||
return checksum_valid;
|
return checksum_valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool eeprom_have_conf() {
|
||||||
|
if (EEPROM.read(eeprom_addr(ADDR_CONF_OK)) == CONF_OK_BYTE) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void eeprom_conf_load() {
|
||||||
|
if (eeprom_have_conf()) {
|
||||||
|
lora_sf = EEPROM.read(eeprom_addr(ADDR_CONF_SF));
|
||||||
|
lora_cr = EEPROM.read(eeprom_addr(ADDR_CONF_CR));
|
||||||
|
lora_txp = EEPROM.read(eeprom_addr(ADDR_CONF_TXP));
|
||||||
|
lora_freq = (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_FREQ)+0x00) << 24 | (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_FREQ)+0x01) << 16 | (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_FREQ)+0x02) << 8 | (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_FREQ)+0x03);
|
||||||
|
lora_bw = (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_BW)+0x00) << 24 | (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_BW)+0x01) << 16 | (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_BW)+0x02) << 8 | (uint32_t)EEPROM.read(eeprom_addr(ADDR_CONF_BW)+0x03);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void eeprom_conf_save() {
|
||||||
|
if (hw_ready && radio_online) {
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_SF), lora_sf);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_CR), lora_cr);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_TXP), lora_txp);
|
||||||
|
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_BW)+0x00, lora_bw>>24);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_BW)+0x01, lora_bw>>16);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_BW)+0x02, lora_bw>>8);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_BW)+0x03, lora_bw);
|
||||||
|
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_FREQ)+0x00, lora_freq>>24);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_FREQ)+0x01, lora_freq>>16);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_FREQ)+0x02, lora_freq>>8);
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_FREQ)+0x03, lora_freq);
|
||||||
|
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_OK), CONF_OK_BYTE);
|
||||||
|
led_indicate_info(10);
|
||||||
|
} else {
|
||||||
|
led_indicate_warning(10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void eeprom_conf_delete() {
|
||||||
|
EEPROM.update(eeprom_addr(ADDR_CONF_OK), 0x00);
|
||||||
|
}
|
||||||
|
|
||||||
void unlock_rom() {
|
void unlock_rom() {
|
||||||
led_indicate_error(50);
|
led_indicate_error(50);
|
||||||
eeprom_erase();
|
eeprom_erase();
|
||||||
|
Loading…
Reference in New Issue
Block a user