From e240fbc412b26609b269d20d5361d48198af2594 Mon Sep 17 00:00:00 2001 From: Pawel Spychalski Date: Wed, 23 May 2018 10:12:54 +0200 Subject: [PATCH] Bind key initialized and loaded from EEPROM --- crossbow/crossbow.ino | 13 +++++-------- crossbow/platform_config.cpp | 27 +++++++++++++++++++++++++++ crossbow/platform_config.h | 27 +++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 crossbow/platform_config.cpp create mode 100644 crossbow/platform_config.h diff --git a/crossbow/crossbow.ino b/crossbow/crossbow.ino index 9e29ad0..a8b49f9 100644 --- a/crossbow/crossbow.ino +++ b/crossbow/crossbow.ino @@ -15,6 +15,7 @@ Copyright (c) 20xx, MPL Contributor1 contrib1@example.net #include "qsp.h" #include "sbus.h" #include "platform_node.h" +#include "platform_config.h" #ifdef ARDUINO_AVR_FEATHER32U4 #define LORA_SS_PIN 8 @@ -36,6 +37,7 @@ Copyright (c) 20xx, MPL Contributor1 contrib1@example.net RadioNode radioNode; PlatformNode platformNode; +PlatformConfig platformConfig; /* * Main defines for device working in TX mode @@ -176,6 +178,8 @@ void setup(void) #ifdef DEVICE_MODE_TX + platformConfig.seed(); + #ifdef FEATURE_TX_OLED oled.init(); oled.page(TX_PAGE_INIT); @@ -206,14 +210,7 @@ void setup(void) pinMode(LED_BUILTIN, OUTPUT); - /* - * Setup salt bind key - */ - platformNode.bindKey[0] = 0x12; - platformNode.bindKey[1] = 0x0a; - platformNode.bindKey[2] = 0x36; - platformNode.bindKey[3] = 0xa7; - + platformConfig.loadBindKey(); } uint8_t currentSequenceIndex = 0; diff --git a/crossbow/platform_config.cpp b/crossbow/platform_config.cpp new file mode 100644 index 0000000..3f1243a --- /dev/null +++ b/crossbow/platform_config.cpp @@ -0,0 +1,27 @@ +#include "platform_config.h" +#include "Arduino.h" + +PlatformConfig::PlatformConfig(void) { + randomSeed(analogRead(0)); +}; + +void PlatformConfig::seed(void) { + uint8_t val; + + val = EEPROM.read(EEPROM_ADDRESS_BIND_KEY_SEEDED); + + if (val != 0xf1) { + EEPROM.write(EEPROM_ADDRESS_BIND_0, random(1, 255)); //Yes, from 1 to 254 + EEPROM.write(EEPROM_ADDRESS_BIND_1, random(1, 255)); //Yes, from 1 to 254 + EEPROM.write(EEPROM_ADDRESS_BIND_2, random(1, 255)); //Yes, from 1 to 254 + EEPROM.write(EEPROM_ADDRESS_BIND_3, random(1, 255)); //Yes, from 1 to 254 + EEPROM.write(EEPROM_ADDRESS_BIND_KEY_SEEDED, 0xf1); + } +} + +void PlatformConfig::loadBindKey(void) { + platformNode.bindKey[0] = EEPROM.read(EEPROM_ADDRESS_BIND_0); + platformNode.bindKey[1] = EEPROM.read(EEPROM_ADDRESS_BIND_1); + platformNode.bindKey[2] = EEPROM.read(EEPROM_ADDRESS_BIND_2); + platformNode.bindKey[3] = EEPROM.read(EEPROM_ADDRESS_BIND_3); +} \ No newline at end of file diff --git a/crossbow/platform_config.h b/crossbow/platform_config.h new file mode 100644 index 0000000..1e177e8 --- /dev/null +++ b/crossbow/platform_config.h @@ -0,0 +1,27 @@ +#pragma once + +#ifndef PLATFORM_CONFIG_H +#define PLATFORM_CONFIG_H + +#include +#include "platform_node.h" + +extern PlatformNode platformNode; + +enum platformConfigMemoryLayout { + EEPROM_ADDRESS_BIND_KEY_SEEDED = 0x00, + EEPROM_ADDRESS_BIND_0, + EEPROM_ADDRESS_BIND_1, + EEPROM_ADDRESS_BIND_2, + EEPROM_ADDRESS_BIND_3, + PLATFORM_CONFIG_LAST_BYTE +}; + +class PlatformConfig { + public: + PlatformConfig(void); + void seed(void); + void loadBindKey(); +}; + +#endif \ No newline at end of file