#ifndef CONFIG_H
#define CONFIG_H
- #define MCU_328P 0x90
+ #define MCU_328P 0x90
#define MCU_1284P 0x91
+ #define PRODUCT_RNODE 0x03
+ #define MODEL_A4 0xA4
+ #define MODEL_A9 0xA9
+
#if defined(__AVR_ATmega328P__)
#define MCU_VARIANT MCU_328P
#warning "Firmware is being compiled for atmega328p based boards"
--- /dev/null
+#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);
+ }
+}
\ No newline at end of file
#define CMD_BLINK 0x30
#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_ON 0x01
#include <LoRa.h>
-// registers
+// Registers
#define REG_FIFO 0x00
#define REG_OP_MODE 0x01
#define REG_FRF_MSB 0x06
#define REG_DIO_MAPPING_1 0x40
#define REG_VERSION 0x42
-// modes
+// Modes
#define MODE_LONG_RANGE_MODE 0x80
#define MODE_SLEEP 0x00
#define MODE_STDBY 0x01
writeRegister(REG_MODEM_CONFIG_3, 0x04);
// set output power to 17 dBm
- setTxPower(17);
+ setTxPower(2);
// put in standby mode
idle();
#include <LoRa.h>
#include "Config.h"
#include "Framing.h"
+#include "EEPROM.cpp"
#include "Utilities.cpp"
void setup() {
dcd_waiting = true;
}
}
+ } else {
+ led_indicate_standby();
}
if (Serial.available()) {
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) {
if (byte == FEND) { Serial.write(FESC); byte = TFEND; }
if (byte == FESC) { Serial.write(FESC); byte = TFESC; }