mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-12 19:10:27 +03:00
Potential fix to MSP over CRSF
This commit is contained in:
parent
f00cd9ee37
commit
82ea67e9f1
3 changed files with 7 additions and 4 deletions
|
@ -175,7 +175,7 @@ STATIC_UNIT_TESTED void crsfDataReceive(uint16_t c, void *rxCallbackData)
|
|||
case CRSF_FRAMETYPE_MSP_WRITE: {
|
||||
uint8_t *frameStart = (uint8_t *)&crsfFrame.frame.payload + CRSF_FRAME_ORIGIN_DEST_SIZE;
|
||||
if (bufferCrsfMspFrame(frameStart, CRSF_FRAME_RX_MSP_FRAME_SIZE)) {
|
||||
crsfScheduleMspResponse();
|
||||
crsfScheduleMspResponse(crsfFrame.frame.payload[1]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -424,10 +424,13 @@ static uint8_t crsfSchedule[CRSF_SCHEDULE_COUNT_MAX];
|
|||
#if defined(USE_MSP_OVER_TELEMETRY)
|
||||
|
||||
static bool mspReplyPending;
|
||||
//Id of the last receiver MSP frame over CRSF. Needed to send response with correct frame ID
|
||||
static uint8_t mspRequestOriginID = 0;
|
||||
|
||||
void crsfScheduleMspResponse(void)
|
||||
void crsfScheduleMspResponse(uint8_t requestOriginID)
|
||||
{
|
||||
mspReplyPending = true;
|
||||
mspRequestOriginID = requestOriginID;
|
||||
}
|
||||
|
||||
void crsfSendMspResponse(uint8_t *payload)
|
||||
|
@ -438,7 +441,7 @@ void crsfSendMspResponse(uint8_t *payload)
|
|||
crsfInitializeFrame(dst);
|
||||
sbufWriteU8(dst, CRSF_FRAME_TX_MSP_FRAME_SIZE + CRSF_FRAME_LENGTH_EXT_TYPE_CRC);
|
||||
crsfSerialize8(dst, CRSF_FRAMETYPE_MSP_RESP);
|
||||
crsfSerialize8(dst, CRSF_ADDRESS_RADIO_TRANSMITTER);
|
||||
crsfSerialize8(dst, mspRequestOriginID);
|
||||
crsfSerialize8(dst, CRSF_ADDRESS_FLIGHT_CONTROLLER);
|
||||
crsfSerializeData(dst, (const uint8_t*)payload, CRSF_FRAME_TX_MSP_FRAME_SIZE);
|
||||
crsfFinalize(dst);
|
||||
|
|
|
@ -27,7 +27,7 @@ void initCrsfTelemetry(void);
|
|||
bool checkCrsfTelemetryState(void);
|
||||
void handleCrsfTelemetry(timeUs_t currentTimeUs);
|
||||
void crsfScheduleDeviceInfoResponse(void);
|
||||
void crsfScheduleMspResponse(void);
|
||||
void crsfScheduleMspResponse(uint8_t requestOriginID);
|
||||
int getCrsfFrame(uint8_t *frame, crsfFrameType_e frameType);
|
||||
#if defined(USE_MSP_OVER_TELEMETRY)
|
||||
void initCrsfMspBuffer(void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue