Skip to content

Commit 6224ae7

Browse files
Revert "Make MAVLink WiFi mode also emit ESPNOW CRSF GPS frames (which should be enough to make antenna trackers work)"
This reverts commit cb5c9c8.
1 parent cb5c9c8 commit 6224ae7

File tree

9 files changed

+66
-163
lines changed

9 files changed

+66
-163
lines changed

include/common.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,3 @@ typedef enum
1111

1212
extern connectionState_e connectionState;
1313
extern unsigned long bindingStart;
14-
static const uint8_t bindingAddress[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

lib/CRSF/CRSF.cpp

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/CRSF/CRSF.h

Lines changed: 0 additions & 8 deletions
This file was deleted.

lib/CrsfProtocol/crsf_protocol.h

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
#define CRSF_CRC_POLY 0xd5
44
#define CRSF_SYNC_BYTE 0xc8
5-
#define CRSF_FRAME_NOT_COUNTED_BYTES 2
5+
6+
#define CRSF_FRAMETYPE_GPS 0x02
7+
#define CRSF_FRAMETYPE_LINK_STATISTICS 0x14
8+
#define CRSF_FRAMETYPE_BATTERY_SENSOR 0x08
69

710
#define PACKED __attribute__((packed))
811

@@ -16,57 +19,6 @@ typedef struct crsf_header_s
1619
uint8_t type; // from crsf_frame_type_e
1720
} PACKED crsf_header_t;
1821

19-
typedef enum : uint8_t
20-
{
21-
CRSF_FRAMETYPE_GPS = 0x02,
22-
CRSF_FRAMETYPE_VARIO = 0x07,
23-
CRSF_FRAMETYPE_BATTERY_SENSOR = 0x08,
24-
CRSF_FRAMETYPE_BARO_ALTITUDE = 0x09,
25-
CRSF_FRAMETYPE_LINK_STATISTICS = 0x14,
26-
CRSF_FRAMETYPE_OPENTX_SYNC = 0x10,
27-
CRSF_FRAMETYPE_RADIO_ID = 0x3A,
28-
CRSF_FRAMETYPE_RC_CHANNELS_PACKED = 0x16,
29-
CRSF_FRAMETYPE_ATTITUDE = 0x1E,
30-
CRSF_FRAMETYPE_FLIGHT_MODE = 0x21,
31-
// Extended Header Frames, range: 0x28 to 0x96
32-
CRSF_FRAMETYPE_DEVICE_PING = 0x28,
33-
CRSF_FRAMETYPE_DEVICE_INFO = 0x29,
34-
CRSF_FRAMETYPE_PARAMETER_SETTINGS_ENTRY = 0x2B,
35-
CRSF_FRAMETYPE_PARAMETER_READ = 0x2C,
36-
CRSF_FRAMETYPE_PARAMETER_WRITE = 0x2D,
37-
38-
//CRSF_FRAMETYPE_ELRS_STATUS = 0x2E, ELRS good/bad packet count and status flags
39-
40-
CRSF_FRAMETYPE_COMMAND = 0x32,
41-
// KISS frames
42-
CRSF_FRAMETYPE_KISS_REQ = 0x78,
43-
CRSF_FRAMETYPE_KISS_RESP = 0x79,
44-
// MSP commands
45-
CRSF_FRAMETYPE_MSP_REQ = 0x7A, // response request using msp sequence as command
46-
CRSF_FRAMETYPE_MSP_RESP = 0x7B, // reply with 58 byte chunked binary
47-
CRSF_FRAMETYPE_MSP_WRITE = 0x7C, // write with 8 byte chunked binary (OpenTX outbound telemetry buffer limit)
48-
// Ardupilot frames
49-
CRSF_FRAMETYPE_ARDUPILOT_RESP = 0x80,
50-
} crsf_frame_type_e;
51-
52-
typedef enum : uint8_t
53-
{
54-
CRSF_ADDRESS_BROADCAST = 0x00,
55-
CRSF_ADDRESS_USB = 0x10,
56-
CRSF_ADDRESS_TBS_CORE_PNP_PRO = 0x80,
57-
CRSF_ADDRESS_RESERVED1 = 0x8A,
58-
CRSF_ADDRESS_CURRENT_SENSOR = 0xC0,
59-
CRSF_ADDRESS_GPS = 0xC2,
60-
CRSF_ADDRESS_TBS_BLACKBOX = 0xC4,
61-
CRSF_ADDRESS_FLIGHT_CONTROLLER = 0xC8,
62-
CRSF_ADDRESS_RESERVED2 = 0xCA,
63-
CRSF_ADDRESS_RACE_TAG = 0xCC,
64-
CRSF_ADDRESS_RADIO_TRANSMITTER = 0xEA,
65-
CRSF_ADDRESS_CRSF_RECEIVER = 0xEC,
66-
CRSF_ADDRESS_CRSF_TRANSMITTER = 0xEE,
67-
CRSF_ADDRESS_ELRS_LUA = 0xEF
68-
} crsf_addr_e;
69-
7022
#define CRSF_MK_FRAME_T(payload) struct payload##_frame_s { crsf_header_t h; payload p; uint8_t crc; } PACKED
7123

7224
typedef struct crsf_sensor_gps_s {

lib/ESPNOW/ESPNOW_Helpers.cpp

Lines changed: 0 additions & 35 deletions
This file was deleted.

lib/ESPNOW/ESPNOW_Helpers.h

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/MAVLink/MAVLink.cpp

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22
#include <Arduino.h>
33
#include "MAVLink.h"
44
#include <config.h>
5-
#include <crsf_protocol.h>
6-
#include <msp.h>
7-
#include <msptypes.h>
8-
#include <CRSF.h>
9-
#include <ESPNOW_Helpers.h>
105

116
void
127
MAVLink::ProcessMAVLinkFromTX(uint8_t c)
@@ -45,35 +40,6 @@ MAVLink::ProcessMAVLinkFromTX(uint8_t c)
4540
mavlink_to_gcs_buf[mavlink_to_gcs_buf_count] = msg;
4641
mavlink_to_gcs_buf_count++;
4742
mavlink_stats.packets_downlink++;
48-
49-
// Look for GPS packets - convert them to CRSF
50-
if (msg.msgid == MAVLINK_MSG_ID_GPS_RAW_INT)
51-
{
52-
mavlink_gps_raw_int_t gps_int;
53-
mavlink_msg_gps_raw_int_decode(&msg, &gps_int);
54-
CRSF_MK_FRAME_T(crsf_sensor_gps_t) crsfgps = {0};
55-
56-
crsfgps.p.speed = htobe16(gps_int.vel * 36 / 100);
57-
crsfgps.p.lat = htobe32(gps_int.lat);
58-
crsfgps.p.lon = htobe32(gps_int.lon);
59-
crsfgps.p.heading = htobe16(gps_int.cog);
60-
crsfgps.p.satcnt = gps_int.satellites_visible;
61-
crsfgps.p.altitude = htobe16(gps_int.alt / 1000 + 1000);
62-
63-
CRSF::SetHeaderAndCrc((uint8_t *)&crsfgps, CRSF_FRAMETYPE_GPS, sizeof(crsf_sensor_gps_t), CRSF_ADDRESS_CRSF_TRANSMITTER);
64-
65-
// Wrap in MSP
66-
mspPacket_t packet;
67-
packet.reset();
68-
packet.makeCommand();
69-
packet.function = MSP_ELRS_BACKPACK_CRSF_TLM;
70-
for (size_t i = 0; i < sizeof(crsfgps); i++)
71-
{
72-
packet.addByte(((uint8_t *)&crsfgps)[i]);
73-
}
74-
// Send it out ESPNOW
75-
ESPNOW::sendMSPViaEspnow(&packet);
76-
}
7743
}
7844
}
7945

src/Tx_main.cpp

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include "msp.h"
1313
#include "msptypes.h"
14-
#include "ESPNOW_Helpers.h"
1514
#include "logging.h"
1615
#include "config.h"
1716
#include "common.h"
@@ -29,6 +28,8 @@
2928

3029
/////////// GLOBALS ///////////
3130

31+
uint8_t bindingAddress[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
32+
3233
const uint8_t version[] = {LATEST_VERSION};
3334

3435
connectionState_e connectionState = starting;
@@ -60,6 +61,11 @@ mspPacket_t cachedHTPacket;
6061
MAVLink mavlink;
6162
#endif
6263

64+
/////////// FUNCTION DEFS ///////////
65+
66+
void sendMSPViaEspnow(mspPacket_t *packet);
67+
68+
/////////////////////////////////////
6369

6470
#if defined(PLATFORM_ESP32)
6571
// This seems to need to be global, as per this page,
@@ -194,7 +200,7 @@ void ProcessMSPPacketFromTX(mspPacket_t *packet)
194200
DBG(""); // Extra line for serial output readability
195201
config.Commit();
196202
// delay(500); // delay may not be required
197-
ESPNOW::sendMSPViaEspnow(packet);
203+
sendMSPViaEspnow(packet);
198204
// delay(500); // delay may not be required
199205
rebootTime = millis(); // restart to set SetSoftMACAddress
200206
}
@@ -206,11 +212,11 @@ void ProcessMSPPacketFromTX(mspPacket_t *packet)
206212
cachedVTXPacket = *packet;
207213
cacheFull = true;
208214
// transparently forward MSP packets via espnow to any subscribers
209-
ESPNOW::sendMSPViaEspnow(packet);
215+
sendMSPViaEspnow(packet);
210216
break;
211217
case MSP_ELRS_SET_VRX_BACKPACK_WIFI_MODE:
212218
DBGLN("Processing MSP_ELRS_SET_VRX_BACKPACK_WIFI_MODE...");
213-
ESPNOW::sendMSPViaEspnow(packet);
219+
sendMSPViaEspnow(packet);
214220
break;
215221
case MSP_ELRS_SET_TX_BACKPACK_WIFI_MODE:
216222
DBGLN("Processing MSP_ELRS_SET_TX_BACKPACK_WIFI_MODE...");
@@ -224,13 +230,13 @@ void ProcessMSPPacketFromTX(mspPacket_t *packet)
224230
DBGLN("Processing MSP_ELRS_BACKPACK_SET_HEAD_TRACKING...");
225231
cachedHTPacket = *packet;
226232
cacheFull = true;
227-
ESPNOW::sendMSPViaEspnow(packet);
233+
sendMSPViaEspnow(packet);
228234
break;
229235
case MSP_ELRS_BACKPACK_CRSF_TLM:
230236
DBGLN("Processing MSP_ELRS_BACKPACK_CRSF_TLM...");
231237
if (config.GetTelemMode() != BACKPACK_TELEM_MODE_OFF)
232238
{
233-
ESPNOW::sendMSPViaEspnow(packet);
239+
sendMSPViaEspnow(packet);
234240
}
235241
break;
236242
case MSP_ELRS_BACKPACK_CONFIG:
@@ -239,11 +245,36 @@ void ProcessMSPPacketFromTX(mspPacket_t *packet)
239245
break;
240246
default:
241247
// transparently forward MSP packets via espnow to any subscribers
242-
ESPNOW::sendMSPViaEspnow(packet);
248+
sendMSPViaEspnow(packet);
243249
break;
244250
}
245251
}
246252

253+
void sendMSPViaEspnow(mspPacket_t *packet)
254+
{
255+
uint8_t packetSize = msp.getTotalPacketSize(packet);
256+
uint8_t nowDataOutput[packetSize];
257+
258+
uint8_t result = msp.convertToByteArray(packet, nowDataOutput);
259+
260+
if (!result)
261+
{
262+
// packet could not be converted to array, bail out
263+
return;
264+
}
265+
266+
if (packet->function == MSP_ELRS_BIND)
267+
{
268+
esp_now_send(bindingAddress, (uint8_t *) &nowDataOutput, packetSize); // Send Bind packet with the broadcast address
269+
}
270+
else
271+
{
272+
esp_now_send(firmwareOptions.uid, (uint8_t *) &nowDataOutput, packetSize);
273+
}
274+
275+
blinkLED();
276+
}
277+
247278
void SendCachedMSP()
248279
{
249280
if (!cacheFull)
@@ -254,11 +285,11 @@ void SendCachedMSP()
254285

255286
if (cachedVTXPacket.type != MSP_PACKET_UNKNOWN)
256287
{
257-
ESPNOW::sendMSPViaEspnow(&cachedVTXPacket);
288+
sendMSPViaEspnow(&cachedVTXPacket);
258289
}
259290
if (cachedHTPacket.type != MSP_PACKET_UNKNOWN)
260291
{
261-
ESPNOW::sendMSPViaEspnow(&cachedHTPacket);
292+
sendMSPViaEspnow(&cachedHTPacket);
262293
}
263294
}
264295

src/Vrx_main.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
#include "msp.h"
1414
#include "msptypes.h"
15-
#include "ESPNOW_Helpers.h"
1615
#include "logging.h"
1716
#include "helpers.h"
1817
#include "common.h"
@@ -126,6 +125,7 @@ VrxBackpackConfig config;
126125
/////////// FUNCTION DEFS ///////////
127126

128127
void ProcessMSPPacket(mspPacket_t *packet);
128+
void sendMSPViaEspnow(mspPacket_t *packet);
129129
void resetBootCounter();
130130
void SetupEspNow();
131131

@@ -340,10 +340,30 @@ void RequestVTXPacket()
340340
packet.addByte(0); // empty byte
341341

342342
blinkLED();
343-
ESPNOW::sendMSPViaEspnow(&packet);
343+
sendMSPViaEspnow(&packet);
344344
#endif
345345
}
346346

347+
void sendMSPViaEspnow(mspPacket_t *packet)
348+
{
349+
// Do not send while in binding mode. The currently used firmwareOptions.uid may be garbage.
350+
if (connectionState == binding)
351+
return;
352+
353+
uint8_t packetSize = msp.getTotalPacketSize(packet);
354+
uint8_t nowDataOutput[packetSize];
355+
356+
uint8_t result = msp.convertToByteArray(packet, nowDataOutput);
357+
358+
if (!result)
359+
{
360+
// packet could not be converted to array, bail out
361+
return;
362+
}
363+
364+
esp_now_send(firmwareOptions.uid, (uint8_t *) &nowDataOutput, packetSize);
365+
}
366+
347367
void resetBootCounter()
348368
{
349369
config.SetBootCount(0);

0 commit comments

Comments
 (0)