This commit is contained in:
Pawel Spychalski (DzikuVx)
2017-10-26 13:51:34 +02:00
parent c409214de8
commit a800031b0a
6 changed files with 2 additions and 30 deletions

View File

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

View File

@@ -13,9 +13,8 @@ Development, not yet functional
| 1 | Preamble | "Q" 0x51 | | 1 | Preamble | "Q" 0x51 |
| 2 | Channel ID | channel used for comunication between TX and RX | | 2 | Channel ID | channel used for comunication between TX and RX |
| 3 | Frame type & Length | bits 7-5 defines frame, bits 4-0 payload length | | 3 | Frame type & Length | bits 7-5 defines frame, bits 4-0 payload length |
| 4 | Packet ID | |
| 5 - 36 | Payload | 32 bytes max | | 5 - 36 | Payload | 32 bytes max |
| payload length + 5 | CRC | XOR of all previous bytes | | payload length + 4 | CRC | XOR of all previous bytes |
## Frame types ## Frame types
@@ -48,7 +47,6 @@ Total length of `RC_DATA` payload is 9 bytes
| 3 | RX supply volatage, sent in 0,1V | | 3 | RX supply volatage, sent in 0,1V |
| 4 | RX analog input 1 sent in 0,1V | | 4 | RX analog input 1 sent in 0,1V |
| 5 | RX analog input 2 sent in 0,1V | | 5 | RX analog input 2 sent in 0,1V |
| 6 | Last received packet ID |
### `PING` and `PONG` frames ### `PING` and `PONG` frames

View File

@@ -11,7 +11,6 @@
// #define WAIT_FOR_SERIAL // #define WAIT_FOR_SERIAL
#include <LoRa.h> #include <LoRa.h>
// #include <PinChangeInterrupt.h>
#include "variables.h" #include "variables.h"
#include "sbus.h" #include "sbus.h"
#include "qsp.h" #include "qsp.h"

22
qsp.cpp
View File

@@ -60,7 +60,6 @@ void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceSta
qsp->payload[2] = rxDeviceState->rxVoltage; qsp->payload[2] = rxDeviceState->rxVoltage;
qsp->payload[3] = rxDeviceState->a1Voltage; qsp->payload[3] = rxDeviceState->a1Voltage;
qsp->payload[4] = rxDeviceState->a2Voltage; qsp->payload[4] = rxDeviceState->a2Voltage;
qsp->payload[5] = qsp->lastReceivedPacketId;
qsp->payloadLength = 6; qsp->payloadLength = 6;
} }
@@ -71,7 +70,6 @@ void decodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceSta
rxDeviceState->rxVoltage = qsp->payload[2]; rxDeviceState->rxVoltage = qsp->payload[2];
rxDeviceState->a1Voltage = qsp->payload[3]; rxDeviceState->a1Voltage = qsp->payload[3];
rxDeviceState->a2Voltage = qsp->payload[4]; rxDeviceState->a2Voltage = qsp->payload[4];
// rxDeviceState->rssi = qsp->payload[0]; //TODO we skipped decoding this byte, figure it out
} }
/** /**
@@ -127,13 +125,6 @@ void encodeRcDataPayload(QspConfiguration_t *qsp, PPMReader *ppmSource, uint8_t
qsp->payloadLength = 9; qsp->payloadLength = 9;
} }
uint8_t qspGetPacketId()
{
static uint8_t packetId = 0;
return packetId++;
}
void qspClearPayload(QspConfiguration_t *qsp) void qspClearPayload(QspConfiguration_t *qsp)
{ {
for (uint8_t i = 0; i < QSP_PAYLOAD_LENGTH; i++) for (uint8_t i = 0; i < QSP_PAYLOAD_LENGTH; i++)
@@ -148,7 +139,6 @@ void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int p
static uint8_t frameId; static uint8_t frameId;
static uint8_t payloadLength; static uint8_t payloadLength;
static uint8_t receivedPayload; static uint8_t receivedPayload;
static uint8_t packetId; //TODO move this to global scope maybe?
if (qsp->protocolState == QSP_STATE_IDLE && incomingByte == QSP_PREAMBLE) if (qsp->protocolState == QSP_STATE_IDLE && incomingByte == QSP_PREAMBLE)
{ {
@@ -169,7 +159,6 @@ void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int p
qspClearPayload(qsp); qspClearPayload(qsp);
receivedPayload = 0; receivedPayload = 0;
packetId = 0;
} }
else else
{ {
@@ -188,12 +177,6 @@ void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int p
} }
else if (qsp->protocolState == QSP_STATE_FRAME_TYPE_RECEIVED) else if (qsp->protocolState == QSP_STATE_FRAME_TYPE_RECEIVED)
{ {
qsp->crc ^= incomingByte;
packetId = incomingByte;
qsp->protocolState = QSP_STATE_PACKET_ID_RECEIVED;
}
else if (qsp->protocolState == QSP_STATE_PACKET_ID_RECEIVED)
{
//Now it's time for payload //Now it's time for payload
qsp->crc ^= incomingByte; qsp->crc ^= incomingByte;
@@ -221,8 +204,6 @@ void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int p
qsp->lastFrameReceivedAt[frameId] = millis(); qsp->lastFrameReceivedAt[frameId] = millis();
} }
qsp->lastReceivedPacketId = packetId;
if (qsp->debugConfig & DEBUG_FLAG_SERIAL) { if (qsp->debugConfig & DEBUG_FLAG_SERIAL) {
Serial.print("Frame "); Serial.print("Frame ");
Serial.print(frameId); Serial.print(frameId);
@@ -299,9 +280,6 @@ void qspEncodeFrame(QspConfiguration_t *qsp) {
data |= (qsp->frameToSend << 4) & 0xf0; data |= (qsp->frameToSend << 4) & 0xf0;
qsp->hardwareWriteFunction(data, qsp); qsp->hardwareWriteFunction(data, qsp);
//Write packet ID
qsp->hardwareWriteFunction(qspGetPacketId(), qsp);
//Write payload //Write payload
for (uint8_t i = 0; i < qsp->payloadLength; i++) for (uint8_t i = 0; i < qsp->payloadLength; i++)
{ {

1
qsp.h
View File

@@ -9,7 +9,6 @@ uint8_t get10bitLowShift(uint8_t channel);
void qspComputeCrc(QspConfiguration_t *qsp, uint8_t dataByte); void qspComputeCrc(QspConfiguration_t *qsp, uint8_t dataByte);
void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceState); void encodeRxHealthPayload(QspConfiguration_t *qsp, RxDeviceState_t *rxDeviceState);
void encodeRcDataPayload(QspConfiguration_t *qsp, PPMReader *ppmSource, uint8_t noOfChannels); void encodeRcDataPayload(QspConfiguration_t *qsp, PPMReader *ppmSource, uint8_t noOfChannels);
uint8_t qspGetPacketId(void);
void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int ppm[], RxDeviceState_t *rxDeviceState); void qspDecodeIncomingFrame(QspConfiguration_t *qsp, uint8_t incomingByte, int ppm[], RxDeviceState_t *rxDeviceState);
void qspClearPayload(QspConfiguration_t *qsp); void qspClearPayload(QspConfiguration_t *qsp);
void qspEncodeFrame(QspConfiguration_t *qsp); void qspEncodeFrame(QspConfiguration_t *qsp);

View File

@@ -41,7 +41,6 @@ enum dataStates {
QSP_STATE_PREAMBLE_RECEIVED, QSP_STATE_PREAMBLE_RECEIVED,
QSP_STATE_CHANNEL_RECEIVED, QSP_STATE_CHANNEL_RECEIVED,
QSP_STATE_FRAME_TYPE_RECEIVED, QSP_STATE_FRAME_TYPE_RECEIVED,
QSP_STATE_PACKET_ID_RECEIVED,
QSP_STATE_PAYLOAD_RECEIVED, QSP_STATE_PAYLOAD_RECEIVED,
QSP_STATE_CRC_RECEIVED QSP_STATE_CRC_RECEIVED
}; };
@@ -79,7 +78,6 @@ struct QspConfiguration_t {
uint32_t lastFrameTransmitedAt[QSP_FRAME_COUNT] = {0}; uint32_t lastFrameTransmitedAt[QSP_FRAME_COUNT] = {0};
uint8_t deviceState = DEVICE_STATE_OK; uint8_t deviceState = DEVICE_STATE_OK;
void (* hardwareWriteFunction)(uint8_t, QspConfiguration_t*); void (* hardwareWriteFunction)(uint8_t, QspConfiguration_t*);
uint8_t lastReceivedPacketId = 0;
bool canTransmit = false; bool canTransmit = false;
bool forcePongFrame = false; bool forcePongFrame = false;
uint8_t debugConfig = 0; uint8_t debugConfig = 0;