fixed binding key in bind mode

This commit is contained in:
Pawel Spychalski (DzikuVx)
2018-05-28 20:46:52 +02:00
parent c5575c9af2
commit 71ad7498a5
7 changed files with 70 additions and 60 deletions

View File

@@ -1,6 +1,6 @@
{ {
"board": "bsfrance:avr:lora32u4", "board": "bsfrance:avr:lora32u4",
"sketch": "crossbow/crossbow.ino", "sketch": "crossbow/crossbow.ino",
"port": "COM5", "port": "COM7",
"output": "../build" "output": "../build"
} }

View File

@@ -15,7 +15,6 @@ Copyright (c) 20xx, MPL Contributor1 contrib1@example.net
#include "qsp.h" #include "qsp.h"
#include "sbus.h" #include "sbus.h"
#include "platform_node.h" #include "platform_node.h"
#include "platform_config.h"
#ifdef ARDUINO_AVR_FEATHER32U4 #ifdef ARDUINO_AVR_FEATHER32U4
#define LORA_SS_PIN 8 #define LORA_SS_PIN 8
@@ -37,7 +36,6 @@ Copyright (c) 20xx, MPL Contributor1 contrib1@example.net
RadioNode radioNode; RadioNode radioNode;
PlatformNode platformNode; PlatformNode platformNode;
PlatformConfig platformConfig;
/* /*
* Main defines for device working in TX mode * Main defines for device working in TX mode
@@ -192,11 +190,14 @@ void setup(void)
* Prepare Serial1 for S.Bus processing * Prepare Serial1 for S.Bus processing
*/ */
Serial1.begin(100000, SERIAL_8E2); Serial1.begin(100000, SERIAL_8E2);
platformNode.isBindMode = true;
platformNode.bindModeExitMillis = millis() + 1000;
#endif #endif
#ifdef DEVICE_MODE_TX #ifdef DEVICE_MODE_TX
platformConfig.seed(); platformNode.seed();
#ifdef FEATURE_TX_OLED #ifdef FEATURE_TX_OLED
oled.init(); oled.init();
@@ -228,7 +229,13 @@ void setup(void)
pinMode(LED_BUILTIN, OUTPUT); pinMode(LED_BUILTIN, OUTPUT);
platformConfig.loadBindKey(); platformNode.loadBindKey();
// platformNode.bindKey[0] = 44;
// platformNode.bindKey[1] = 72;
// platformNode.bindKey[2] = 30;
// platformNode.bindKey[3] = 239;
} }
uint8_t currentSequenceIndex = 0; uint8_t currentSequenceIndex = 0;
@@ -287,6 +294,15 @@ int8_t getFrameToTransmit(QspConfiguration_t *qsp) {
void loop(void) void loop(void)
{ {
// delay(1000);
// Serial.print(platformNode.bindKey[0]);
// Serial.print(" ");
// Serial.print(platformNode.bindKey[1]);
// Serial.print(" ");
// Serial.print(platformNode.bindKey[2]);
// Serial.print(" ");
// Serial.println(platformNode.bindKey[3]);
uint32_t currentMillis = millis(); uint32_t currentMillis = millis();
#ifdef DEVICE_MODE_RX #ifdef DEVICE_MODE_RX

View File

@@ -1,27 +0,0 @@
#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);
}

View File

@@ -1,27 +0,0 @@
#pragma once
#ifndef PLATFORM_CONFIG_H
#define PLATFORM_CONFIG_H
#include <EEPROM.h>
#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

View File

@@ -4,6 +4,29 @@ PlatformNode::PlatformNode(void) {
for (uint8_t i = 0; i < PLATFORM_TOTAL_CHANNEL_COUNT; i++) { for (uint8_t i = 0; i < PLATFORM_TOTAL_CHANNEL_COUNT; i++) {
_channels[i] = PLATFORM_DEFAULT_CHANNEL_VALUE; _channels[i] = PLATFORM_DEFAULT_CHANNEL_VALUE;
} }
randomSeed(analogRead(0));
}
void PlatformNode::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 PlatformNode::loadBindKey(void) {
bindKey[0] = EEPROM.read(EEPROM_ADDRESS_BIND_0);
bindKey[1] = EEPROM.read(EEPROM_ADDRESS_BIND_1);
bindKey[2] = EEPROM.read(EEPROM_ADDRESS_BIND_2);
bindKey[3] = EEPROM.read(EEPROM_ADDRESS_BIND_3);
} }
int PlatformNode::getRcChannel(uint8_t channel) { int PlatformNode::getRcChannel(uint8_t channel) {
@@ -23,6 +46,12 @@ void PlatformNode::setRcChannel(uint8_t channel, int value, int offset) {
void PlatformNode::enterBindMode(void) { void PlatformNode::enterBindMode(void) {
isBindMode = true; isBindMode = true;
// Set temporary bind mode
bindKey[0] = 0xf1;
bindKey[0] = 0x1e;
bindKey[0] = 0x07;
bindKey[0] = 0x42;
radioNode.set( radioNode.set(
0, // Minimum power 0, // Minimum power
125000, // 125kHz bandwidth 125000, // 125kHz bandwidth
@@ -34,5 +63,6 @@ void PlatformNode::enterBindMode(void) {
void PlatformNode::leaveBindMode(void) { void PlatformNode::leaveBindMode(void) {
isBindMode = false; isBindMode = false;
loadBindKey();
radioNode.reset(); radioNode.reset();
} }

View File

@@ -2,6 +2,7 @@
#include "Arduino.h" #include "Arduino.h"
#include "radio_node.h" #include "radio_node.h"
#include <EEPROM.h>
#ifndef PLATFORM_NODE_H #ifndef PLATFORM_NODE_H
#define PLATFORM_NODE_H #define PLATFORM_NODE_H
@@ -17,6 +18,15 @@ enum deviceStates {
DEVICE_STATE_FAILSAFE, DEVICE_STATE_FAILSAFE,
DEVICE_STATE_UNDETERMINED DEVICE_STATE_UNDETERMINED
}; };
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 PlatformNode { class PlatformNode {
@@ -26,10 +36,13 @@ class PlatformNode {
void setRcChannel(uint8_t channel, int value, int offset); void setRcChannel(uint8_t channel, int value, int offset);
void enterBindMode(void); void enterBindMode(void);
void leaveBindMode(void); void leaveBindMode(void);
void seed(void);
void loadBindKey();
uint8_t bindKey[4]; uint8_t bindKey[4];
uint32_t nextLedUpdate = 0; uint32_t nextLedUpdate = 0;
uint8_t platformState = DEVICE_STATE_UNDETERMINED; uint8_t platformState = DEVICE_STATE_UNDETERMINED;
bool isBindMode = false; bool isBindMode = false;
uint32_t bindModeExitMillis;
private: private:
volatile int _channels[PLATFORM_TOTAL_CHANNEL_COUNT]; volatile int _channels[PLATFORM_TOTAL_CHANNEL_COUNT];
}; };

View File

@@ -24,7 +24,12 @@ void TxOled::loop() {
case TX_PAGE_BIND: case TX_PAGE_BIND:
if (button1.getState() == TACTILE_STATE_LONG_PRESS) { if (button1.getState() == TACTILE_STATE_LONG_PRESS) {
platformNode.isBindMode = !platformNode.isBindMode;
if (!platformNode.isBindMode) {
platformNode.enterBindMode();
} else {
platformNode.leaveBindMode();
}
update = true; update = true;
} }
break; break;