]> git.tnoah.ca Git - lora-radio.git/commitdiff
Prepared EEPROM functionality
authorMark Qvist <mark@adepta.io>
Mon, 18 Jun 2018 20:30:24 +0000 (22:30 +0200)
committerMark Qvist <mark@adepta.io>
Mon, 18 Jun 2018 20:30:24 +0000 (22:30 +0200)
Config.h
EEPROM.cpp [new file with mode: 0644]
Framing.h
LoRa.cpp
RNode_Firmware.ino
Utilities.cpp

index 1a7b208d672e2739326dd1bec48c6dacc73a68f3..a8aeca6cdcb3c49bc6587de3d7c15c2539dbcbe7 100644 (file)
--- a/Config.h
+++ b/Config.h
@@ -1,9 +1,13 @@
 #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"
diff --git a/EEPROM.cpp b/EEPROM.cpp
new file mode 100644 (file)
index 0000000..b1990c1
--- /dev/null
@@ -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);
+       }
+}
\ No newline at end of file
index 6b00cc42ee3894fd063b04c6df3b91f64cb78914..af810421cf4ecfd5de9e627658e0e1e8953d399e 100644 (file)
--- a/Framing.h
+++ b/Framing.h
        #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
 
index 2b92f85c09013b69cb813654d3cbddbd987bc16f..61166ddc8a39fe73126ba1fb07be9f5fa172b204 100644 (file)
--- a/LoRa.cpp
+++ b/LoRa.cpp
@@ -6,7 +6,7 @@
 
 #include <LoRa.h>
 
-// registers
+// Registers
 #define REG_FIFO                 0x00
 #define REG_OP_MODE              0x01
 #define REG_FRF_MSB              0x06
@@ -39,7 +39,7 @@
 #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
@@ -112,7 +112,7 @@ int LoRaClass::begin(long frequency)
   writeRegister(REG_MODEM_CONFIG_3, 0x04);
 
   // set output power to 17 dBm
-  setTxPower(17);
+  setTxPower(2);
 
   // put in standby mode
   idle();
index 0d5e4b93966c9c0b773de2cd320394f36c7483bf..5d1c851b08364bcb854784dd13314bbed1de4db1 100644 (file)
@@ -2,6 +2,7 @@
 #include <LoRa.h>
 #include "Config.h"
 #include "Framing.h"
+#include "EEPROM.cpp"
 #include "Utilities.cpp"
 
 void setup() {
@@ -360,6 +361,8 @@ void loop() {
         dcd_waiting = true;
       }
     }
+  } else {
+    led_indicate_standby();
   }
 
   if (Serial.available()) {
index 533445c8d1d035f39f1b1bfac100a6d78fa0e5d0..29d9639ace2e9cb061395e608e4efff5d97dd707 100644 (file)
@@ -51,6 +51,26 @@ void led_indicate_info(int cycles) {
     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; }