Fixed current channel indication and next channel computation
This commit is contained in:
6
.vscode/c_cpp_properties.json
vendored
6
.vscode/c_cpp_properties.json
vendored
@@ -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",
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user