Skip to content

Commit eec19c1

Browse files
committed
feat(aoa): replace custom CRSF AOA frame with MSP over CRSF telemetry
1 parent 9849d26 commit eec19c1

2 files changed

Lines changed: 27 additions & 12 deletions

File tree

src/main/rx/crsf.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ enum {
4949
CRSF_FRAME_LINK_STATISTICS_PAYLOAD_SIZE = 10,
5050
CRSF_FRAME_RC_CHANNELS_PAYLOAD_SIZE = 22, // 11 bits per channel * 16 channels = 22 bytes.
5151
CRSF_FRAME_ATTITUDE_PAYLOAD_SIZE = 6,
52-
CRSF_FRAME_AOA_PAYLOAD_SIZE = 4,
5352
CRSF_FRAME_LENGTH_ADDRESS = 1, // length of ADDRESS field
5453
CRSF_FRAME_LENGTH_FRAMELENGTH = 1, // length of FRAMELENGTH field
5554
CRSF_FRAME_LENGTH_TYPE = 1, // length of TYPE field
@@ -105,7 +104,6 @@ typedef enum {
105104
CRSF_FRAMETYPE_MSP_RESP = 0x7B, // reply with 58 byte chunked binary
106105
CRSF_FRAMETYPE_MSP_WRITE = 0x7C, // write with 8 byte chunked binary (OpenTX outbound telemetry buffer limit)
107106
CRSF_FRAMETYPE_DISPLAYPORT_CMD = 0x7D, // displayport control command
108-
CRSF_FRAMETYPE_AOA = 0x80,
109107
} crsfFrameType_e;
110108

111109
enum {

src/main/telemetry/crsf.c

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -436,16 +436,33 @@ uint8_t 255 (Max MSP Parameter)
436436
uint8_t 0x01 (Parameter version 1)
437437
*/
438438
#ifdef USE_AOA
439-
static void crsfFrameAoa(sbuf_t *dst)
439+
#define CRSF_AOA_MSP_SEQ_INCREMENT 1
440+
441+
static void crsfFrameAoaMsp(sbuf_t *dst)
440442
{
441443
int16_t aoa = 0;
442-
int16_t sideslip = 0;
443-
aoaGetLatestData(&aoa, &sideslip);
444+
int16_t unused = 0;
445+
aoaGetLatestData(&aoa, &unused);
446+
447+
static uint8_t aoaMspSeq = 0;
448+
449+
uint8_t mspPayload[8];
450+
mspPayload[0] = 0x50 | (aoaMspSeq & 0x0F);
451+
mspPayload[1] = 0x00;
452+
mspPayload[2] = 0x08;
453+
mspPayload[3] = 0x1F;
454+
mspPayload[4] = 0x02;
455+
mspPayload[5] = 0x00;
456+
mspPayload[6] = (uint8_t)(aoa & 0xFF);
457+
mspPayload[7] = (uint8_t)((aoa >> 8) & 0xFF);
458+
459+
aoaMspSeq += CRSF_AOA_MSP_SEQ_INCREMENT;
444460

445-
sbufWriteU8(dst, CRSF_FRAME_AOA_PAYLOAD_SIZE + CRSF_FRAME_LENGTH_TYPE_CRC);
446-
crsfSerialize8(dst, CRSF_FRAMETYPE_AOA);
447-
crsfSerialize16(dst, (uint16_t)aoa);
448-
crsfSerialize16(dst, (uint16_t)sideslip);
461+
sbufWriteU8(dst, sizeof(mspPayload) + CRSF_FRAME_LENGTH_EXT_TYPE_CRC);
462+
crsfSerialize8(dst, CRSF_FRAMETYPE_MSP_RESP);
463+
crsfSerialize8(dst, CRSF_ADDRESS_RADIO_TRANSMITTER);
464+
crsfSerialize8(dst, CRSF_ADDRESS_FLIGHT_CONTROLLER);
465+
crsfSerializeData(dst, mspPayload, sizeof(mspPayload));
449466
}
450467
#endif
451468

@@ -566,7 +583,7 @@ static void processCrsf(void)
566583
#ifdef USE_AOA
567584
if (currentSchedule & BV(CRSF_FRAME_AOA_INDEX)) {
568585
crsfInitializeFrame(dst);
569-
crsfFrameAoa(dst);
586+
crsfFrameAoaMsp(dst);
570587
crsfFinalize(dst);
571588
}
572589
#endif
@@ -690,8 +707,8 @@ int getCrsfFrame(uint8_t *frame, crsfFrameType_e frameType)
690707
crsfFrameVarioSensor(sbuf);
691708
break;
692709
#ifdef USE_AOA
693-
case CRSF_FRAMETYPE_AOA:
694-
crsfFrameAoa(sbuf);
710+
case CRSF_FRAMETYPE_MSP_RESP:
711+
crsfFrameAoaMsp(sbuf);
695712
break;
696713
#endif
697714
}

0 commit comments

Comments
 (0)