Fixed current channel indication and next channel computation

This commit is contained in:
Pawel Spychalski (DzikuVx)
2018-04-19 12:49:40 +02:00
parent b6814509a2
commit 12e2bca441
6 changed files with 9 additions and 16 deletions

View File

@@ -11,12 +11,6 @@
"${workspaceRoot}" "${workspaceRoot}"
] ]
}, },
"defines": [
"SPI_HAS_NOTUSINGINTERRUPT",
"FEATURE_TX_INPUT_SBUS",
"DEVICE_MODE_TX",
"DEVICE_MODE_RX"
],
"intelliSenseMode": "msvc-x64", "intelliSenseMode": "msvc-x64",
"cStandard": "c11", "cStandard": "c11",
"cppStandard": "c++17", "cppStandard": "c++17",

View File

@@ -13,8 +13,8 @@
* DEVICE_MODE_TX * DEVICE_MODE_TX
* DEVICE_MODE_RX * DEVICE_MODE_RX
*/ */
#define DEVICE_MODE_TX // #define DEVICE_MODE_TX
// #define DEVICE_MODE_RX #define DEVICE_MODE_RX
// #define FEATURE_TX_OLED // #define FEATURE_TX_OLED
// #define FORCE_TX_WITHOUT_INPUT // #define FORCE_TX_WITHOUT_INPUT
@@ -27,7 +27,7 @@
*/ */
#define FEATURE_TX_INPUT_SBUS #define FEATURE_TX_INPUT_SBUS
// #define DEBUG_SERIAL #define DEBUG_SERIAL
// #define DEBUG_PING_PONG // #define DEBUG_PING_PONG
// #define DEBUG_LED // #define DEBUG_LED
// #define DEBUG_TX_INPUT_ON_OLED // #define DEBUG_TX_INPUT_ON_OLED

View File

@@ -103,7 +103,7 @@ uint8_t getPrevChannel(uint8_t channel) {
return (RADIO_CHANNEL_COUNT + channel - RADIO_HOP_OFFSET) % RADIO_CHANNEL_COUNT; return (RADIO_CHANNEL_COUNT + channel - RADIO_HOP_OFFSET) % RADIO_CHANNEL_COUNT;
} }
void hopFrequency(RadioState_t *radioState, bool forward, uint8_t fromChannel) { void hopFrequency(volatile RadioState_t *radioState, bool forward, uint8_t fromChannel) {
radioState->channelEntryMillis = millis(); radioState->channelEntryMillis = millis();
if (forward) { if (forward) {
@@ -495,7 +495,7 @@ void loop(void)
uint8_t size; uint8_t size;
LoRa.beginPacket(); LoRa.beginPacket();
//Prepare packet //Prepare packet
qspEncodeFrame(&qsp, tmpBuffer, &size); qspEncodeFrame(&qsp, &radioState, tmpBuffer, &size);
//Sent it to radio in one SPI transaction //Sent it to radio in one SPI transaction
LoRa.write(tmpBuffer, size); LoRa.write(tmpBuffer, size);
LoRa.endPacketAsync(); LoRa.endPacketAsync();

View File

@@ -189,7 +189,6 @@ void qspDecodeIncomingFrame(
qsp->frameId = (incomingByte >> 4) & 0x0f; qsp->frameId = (incomingByte >> 4) & 0x0f;
payloadLength = qspFrameLengths[qsp->frameId]; payloadLength = qspFrameLengths[qsp->frameId];
receivedChannel = incomingByte & 0x0f; receivedChannel = incomingByte & 0x0f;
qsp->protocolState = QSP_STATE_FRAME_TYPE_RECEIVED; qsp->protocolState = QSP_STATE_FRAME_TYPE_RECEIVED;
} }
else if (qsp->protocolState == QSP_STATE_FRAME_TYPE_RECEIVED) else if (qsp->protocolState == QSP_STATE_FRAME_TYPE_RECEIVED)
@@ -228,7 +227,7 @@ void qspDecodeIncomingFrame(
/** /**
* Encode frame is corrent format and write to hardware * Encode frame is corrent format and write to hardware
*/ */
void qspEncodeFrame(QspConfiguration_t *qsp, uint8_t buffer[], uint8_t *size) { void qspEncodeFrame(QspConfiguration_t *qsp, volatile RadioState_t *radioState, uint8_t buffer[], uint8_t *size) {
//Zero CRC //Zero CRC
qsp->crc = 0; qsp->crc = 0;
@@ -238,7 +237,7 @@ void qspEncodeFrame(QspConfiguration_t *qsp, uint8_t buffer[], uint8_t *size) {
//Write frame type and length //Write frame type and length
// We are no longer sending payload length, so 4 bits are now free for other usages // We are no longer sending payload length, so 4 bits are now free for other usages
// uint8_t data = qsp->payloadLength & 0x0f; // uint8_t data = qsp->payloadLength & 0x0f;
uint8_t data = 0; uint8_t data = radioState->channel;
data |= (qsp->frameToSend << 4) & 0xf0; data |= (qsp->frameToSend << 4) & 0xf0;
qspComputeCrc(qsp, data); qspComputeCrc(qsp, data);
buffer[1] = data; buffer[1] = data;

View File

@@ -16,6 +16,6 @@ void qspDecodeIncomingFrame(
volatile RadioState_t *radioState volatile RadioState_t *radioState
); );
void qspClearPayload(QspConfiguration_t *qsp); void qspClearPayload(QspConfiguration_t *qsp);
void qspEncodeFrame(QspConfiguration_t *qsp, uint8_t buffer[], uint8_t *size); void qspEncodeFrame(QspConfiguration_t *qsp, volatile RadioState_t *radioState, uint8_t buffer[], uint8_t *size);
void encodePingPayload(QspConfiguration_t *qsp, uint32_t currentMicros); void encodePingPayload(QspConfiguration_t *qsp, uint32_t currentMicros);

View File

@@ -90,7 +90,7 @@ enum debugConfigFlags {
#define RADIO_FREQUENCY_MAX 870000000 #define RADIO_FREQUENCY_MAX 870000000
#define RADIO_FREQUENCY_RANGE (RADIO_FREQUENCY_MAX-RADIO_FREQUENCY_MIN) #define RADIO_FREQUENCY_RANGE (RADIO_FREQUENCY_MAX-RADIO_FREQUENCY_MIN)
#define RADIO_CHANNEL_WIDTH 250000 #define RADIO_CHANNEL_WIDTH 250000
#define RADIO_CHANNEL_COUNT (RADIO_FREQUENCY_RANGE/RADIO_CHANNEL_WIDTH) + 1 // 9 channels in 2MHz range #define RADIO_CHANNEL_COUNT 9 // 9 channels in 2MHz range (RADIO_FREQUENCY_RANGE/RADIO_CHANNEL_WIDTH) + 1
#define RADIO_HOP_OFFSET 5 #define RADIO_HOP_OFFSET 5
struct RadioState_t { struct RadioState_t {