Prepared EEPROM functionality

This commit is contained in:
Mark Qvist 2018-06-18 22:30:24 +02:00
parent 8a604f911b
commit 4d943999d5
6 changed files with 72 additions and 4 deletions

View File

@ -1,9 +1,13 @@
#ifndef CONFIG_H #ifndef CONFIG_H
#define CONFIG_H #define CONFIG_H
#define MCU_328P 0x90 #define MCU_328P 0x90
#define MCU_1284P 0x91 #define MCU_1284P 0x91
#define PRODUCT_RNODE 0x03
#define MODEL_A4 0xA4
#define MODEL_A9 0xA9
#if defined(__AVR_ATmega328P__) #if defined(__AVR_ATmega328P__)
#define MCU_VARIANT MCU_328P #define MCU_VARIANT MCU_328P
#warning "Firmware is being compiled for atmega328p based boards" #warning "Firmware is being compiled for atmega328p based boards"

36
EEPROM.cpp Normal file
View File

@ -0,0 +1,36 @@
#include <Arduino.h>
#include <EEPROM.h>
#include "Config.h"
#include "Framing.h"
#define ADDR_PRODUCT 0x00
#define ADDR_MODEL 0x01
#define ADDR_HW_REV 0x02
#define ADDR_SERIAL 0x03
#define ADDR_MADE 0x06
#define ADDR_CHKSUM 0x0A
#define ADDR_SIGNATURE 0x1A
#define ADDR_INFO_LOCK 0x9A
#define INFO_LOCK_BYTE 0x73
#define ADDR_CONF_SF 0x74
#define ADDR_CONF_CR 0x75
#define ADDR_CONF_TXP 0x76
#define ADDR_CONF_BW 0x77
#define ADDR_CONF_FREQ 0x7B
#define ADDR_CONF_OK 0x7F
#define CONF_OK_BYTE 0x73
void eeprom_dump_info() {
for (int addr = ADDR_PRODUCT; addr <= ADDR_INFO_LOCK; addr++) {
uint8_t rom_byte = EEPROM.read(addr);
Serial.write(rom_byte);
}
}
void eeprom_dump_config() {
for (int addr = ADDR_CONF_SF; addr <= ADDR_CONF_OK; addr++) {
uint8_t rom_byte = EEPROM.read(addr);
Serial.write(rom_byte);
}
}

View File

@ -22,6 +22,11 @@
#define CMD_BLINK 0x30 #define CMD_BLINK 0x30
#define CMD_RANDOM 0x40 #define CMD_RANDOM 0x40
#define CMD_INFO_READ 0x50
#define CMD_INFO_WRITE 0x51
#define CMD_CONF_READ 0x52
#define CMD_CONF_WRITE 0x53
#define RADIO_STATE_OFF 0x00 #define RADIO_STATE_OFF 0x00
#define RADIO_STATE_ON 0x01 #define RADIO_STATE_ON 0x01

View File

@ -6,7 +6,7 @@
#include <LoRa.h> #include <LoRa.h>
// registers // Registers
#define REG_FIFO 0x00 #define REG_FIFO 0x00
#define REG_OP_MODE 0x01 #define REG_OP_MODE 0x01
#define REG_FRF_MSB 0x06 #define REG_FRF_MSB 0x06
@ -39,7 +39,7 @@
#define REG_DIO_MAPPING_1 0x40 #define REG_DIO_MAPPING_1 0x40
#define REG_VERSION 0x42 #define REG_VERSION 0x42
// modes // Modes
#define MODE_LONG_RANGE_MODE 0x80 #define MODE_LONG_RANGE_MODE 0x80
#define MODE_SLEEP 0x00 #define MODE_SLEEP 0x00
#define MODE_STDBY 0x01 #define MODE_STDBY 0x01
@ -112,7 +112,7 @@ int LoRaClass::begin(long frequency)
writeRegister(REG_MODEM_CONFIG_3, 0x04); writeRegister(REG_MODEM_CONFIG_3, 0x04);
// set output power to 17 dBm // set output power to 17 dBm
setTxPower(17); setTxPower(2);
// put in standby mode // put in standby mode
idle(); idle();

View File

@ -2,6 +2,7 @@
#include <LoRa.h> #include <LoRa.h>
#include "Config.h" #include "Config.h"
#include "Framing.h" #include "Framing.h"
#include "EEPROM.cpp"
#include "Utilities.cpp" #include "Utilities.cpp"
void setup() { void setup() {
@ -360,6 +361,8 @@ void loop() {
dcd_waiting = true; dcd_waiting = true;
} }
} }
} else {
led_indicate_standby();
} }
if (Serial.available()) { if (Serial.available()) {

View File

@ -51,6 +51,26 @@ void led_indicate_info(int cycles) {
digitalWrite(pin_led_rx, LOW); digitalWrite(pin_led_rx, LOW);
} }
uint8_t led_standby_min = 1;
uint8_t led_standby_max = 22;
uint8_t led_standby_value = led_standby_min;
int8_t led_standby_direction = 0;
unsigned long led_standby_ticks = 0;
unsigned long led_standby_wait = 11000;
void led_indicate_standby() {
led_standby_ticks++;
if (led_standby_ticks > led_standby_wait) {
led_standby_ticks = 0;
if (led_standby_value <= led_standby_min) {
led_standby_direction = 1;
} else if (led_standby_value >= led_standby_max) {
led_standby_direction = -1;
}
led_standby_value += led_standby_direction;
analogWrite(pin_led_rx, led_standby_value);
}
}
void escapedSerialWrite(uint8_t byte) { void escapedSerialWrite(uint8_t byte) {
if (byte == FEND) { Serial.write(FESC); byte = TFEND; } if (byte == FEND) { Serial.write(FESC); byte = TFEND; }
if (byte == FESC) { Serial.write(FESC); byte = TFESC; } if (byte == FESC) { Serial.write(FESC); byte = TFESC; }