fixed binding key in bind mode
This commit is contained in:
2
.vscode/arduino.json
vendored
2
.vscode/arduino.json
vendored
@@ -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"
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
@@ -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];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user