Skip to content

Commit

Permalink
Remove shared MSP buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
klutvott123 committed Dec 16, 2021
1 parent fcb3ed4 commit 5f4ed61
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 17 deletions.
4 changes: 2 additions & 2 deletions src/main/msp/msp_serial.c
Expand Up @@ -391,10 +391,10 @@ static int mspSerialEncode(mspPort_t *msp, mspPacket_t *packet, mspVersion_e msp
return mspSerialSendFrame(msp, hdrBuf, hdrLen, sbufPtr(&packet->buf), dataLen, crcBuf, crcLen);
}

uint8_t mspSerialOutBuf[MSP_PORT_OUTBUF_SIZE]; // this buffer also used in msp_shared.c

static mspPostProcessFnPtr mspSerialProcessReceivedCommand(mspPort_t *msp, mspProcessCommandFnPtr mspProcessCommandFn)
{
static uint8_t mspSerialOutBuf[MSP_PORT_OUTBUF_SIZE];

mspPacket_t reply = {
.buf = { .ptr = mspSerialOutBuf, .end = ARRAYEND(mspSerialOutBuf), },
.cmd = -1,
Expand Down
2 changes: 0 additions & 2 deletions src/main/msp/msp_serial.h
Expand Up @@ -124,5 +124,3 @@ void mspSerialReleasePortIfAllocated(struct serialPort_s *serialPort);
void mspSerialReleaseSharedTelemetryPorts(void);
int mspSerialPush(serialPortIdentifier_e port, uint8_t cmd, uint8_t *data, int datalen, mspDirection_e direction);
uint32_t mspSerialTxBytesFree(void);

extern uint8_t mspSerialOutBuf[MSP_PORT_OUTBUF_SIZE]; // this buffer also used in msp_shared.c
21 changes: 11 additions & 10 deletions src/main/telemetry/msp_shared.c
Expand Up @@ -121,7 +121,8 @@ enum { // byte position(index) in msp-over-telemetry request payload
MSP_INDEX_PAYLOAD_V2 = MSP_INDEX_SIZE_V2_HI + 1, // MSPv2 first byte of payload itself
};

STATIC_UNIT_TESTED uint8_t requestBuffer[MSP_PORT_INBUF_SIZE];
STATIC_UNIT_TESTED uint8_t requestBuffer[MSP_TLM_INBUF_SIZE];
STATIC_UNIT_TESTED uint8_t responseBuffer[MSP_TLM_OUTBUF_SIZE];
STATIC_UNIT_TESTED mspPacket_t requestPacket;
STATIC_UNIT_TESTED mspPacket_t responsePacket;
static uint8_t lastRequestVersion; // MSP version of last request. Temporary solution. It's better to keep it in requestPacket.
Expand All @@ -130,8 +131,8 @@ static mspDescriptor_t mspSharedDescriptor;

void initSharedMsp(void)
{
responsePacket.buf.ptr = mspSerialOutBuf;
responsePacket.buf.end = ARRAYEND(mspSerialOutBuf);
responsePacket.buf.ptr = responseBuffer;
responsePacket.buf.end = ARRAYEND(responseBuffer);

mspSharedDescriptor = mspDescriptorAlloc();
}
Expand All @@ -140,8 +141,8 @@ static void processMspPacket(void)
{
responsePacket.cmd = 0;
responsePacket.result = 0;
responsePacket.buf.ptr = mspSerialOutBuf;
responsePacket.buf.end = ARRAYEND(mspSerialOutBuf);
responsePacket.buf.ptr = responseBuffer;
responsePacket.buf.end = ARRAYEND(responseBuffer);

mspPostProcessFnPtr mspPostProcessFn = NULL;
if (mspFcProcessCommand(mspSharedDescriptor, &requestPacket, &responsePacket, &mspPostProcessFn) == MSP_RESULT_ERROR) {
Expand All @@ -151,18 +152,18 @@ static void processMspPacket(void)
mspPostProcessFn(NULL);
}

sbufSwitchToReader(&responsePacket.buf, mspSerialOutBuf);
sbufSwitchToReader(&responsePacket.buf, responseBuffer);
}

void sendMspErrorResponse(uint8_t error, int16_t cmd)
{
responsePacket.cmd = cmd;
responsePacket.result = 0;
responsePacket.buf.ptr = mspSerialOutBuf;
responsePacket.buf.ptr = responseBuffer;

sbufWriteU8(&responsePacket.buf, error);
responsePacket.result = TELEMETRY_MSP_RES_ERROR;
sbufSwitchToReader(&responsePacket.buf, mspSerialOutBuf);
sbufSwitchToReader(&responsePacket.buf, responseBuffer);
}

// despite its name, the function actually handles telemetry frame payload with MSP in it
Expand Down Expand Up @@ -272,7 +273,7 @@ bool sendMspReply(const uint8_t payloadSizeMax, mspResponseFnPtr responseFn)
sbuf_t *payloadBuf = sbufInit(&payloadBufStruct, payloadArray, payloadArray + payloadSizeMax);

// detect first reply packet
if (responsePacket.buf.ptr == mspSerialOutBuf) {
if (responsePacket.buf.ptr == responseBuffer) {
// this is the first frame of the response packet. Add proper header and size.
// header
uint8_t status = MSP_STATUS_START_MASK | (seq++ & MSP_STATUS_SEQUENCE_MASK) | (lastRequestVersion << MSP_STATUS_VERSION_SHIFT);
Expand Down Expand Up @@ -314,7 +315,7 @@ bool sendMspReply(const uint8_t payloadSizeMax, mspResponseFnPtr responseFn)
// last/only chunk
sbufWriteData(payloadBuf, responsePacket.buf.ptr, inputRemainder);
sbufAdvance(&responsePacket.buf, inputRemainder);
sbufSwitchToReader(&responsePacket.buf, mspSerialOutBuf);// for CRC calculation
sbufSwitchToReader(&responsePacket.buf, responseBuffer);// for CRC calculation

responseFn(payloadArray, payloadBuf->ptr - payloadArray);
return false;
Expand Down
3 changes: 3 additions & 0 deletions src/main/telemetry/msp_shared.h
Expand Up @@ -20,6 +20,9 @@

#pragma once

#define MSP_TLM_INBUF_SIZE 128
#define MSP_TLM_OUTBUF_SIZE 128

// type of function to send MSP response chunk over telemetry.
typedef void (*mspResponseFnPtr)(uint8_t *payload, const uint8_t payloadSize);

Expand Down
5 changes: 2 additions & 3 deletions src/test/unit/telemetry_crsf_msp_unittest.cc
Expand Up @@ -51,7 +51,6 @@ extern "C" {
#include "io/gps.h"

#include "msp/msp.h"
#include "msp/msp_serial.h"

#include "rx/rx.h"
#include "rx/crsf.h"
Expand Down Expand Up @@ -88,7 +87,7 @@ extern "C" {

extern bool crsfFrameDone;
extern crsfFrame_t crsfFrame;
extern uint8_t requestBuffer[MSP_PORT_INBUF_SIZE];
extern uint8_t requestBuffer[MSP_TLM_INBUF_SIZE];
extern struct mspPacket_s requestPacket;
extern struct mspPacket_s responsePacket;

Expand Down Expand Up @@ -254,7 +253,7 @@ extern "C" {

gpsSolutionData_t gpsSol;
attitudeEulerAngles_t attitude = { { 0, 0, 0 } };
uint8_t mspSerialOutBuf[MSP_PORT_OUTBUF_SIZE];
uint8_t responseBuffer[MSP_TLM_OUTBUF_SIZE];

uint32_t micros(void) {return dummyTimeUs;}
uint32_t microsISR(void) {return micros();}
Expand Down

0 comments on commit 5f4ed61

Please sign in to comment.