Skip to content

Commit a8b7cbe

Browse files
authored
Merge pull request #211 from xNuclearSquirrel/CRSF_TLM_UDP
Make CRSF telemetry accessible over WIFI as UDP broadcast
2 parents d7ed91b + 1bc1be1 commit a8b7cbe

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

lib/WIFI/devWIFI.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,58 @@ IPAddress gcsIP;
119119
bool gcsIPSet = false;
120120
#endif
121121

122+
#if defined(TARGET_TX_BACKPACK)
123+
bool SendTxBackpackTelemetryViaUDP(const uint8_t *data, uint16_t size)
124+
{
125+
if (!data || size == 0)
126+
{
127+
return false;
128+
}
129+
130+
#if !defined(MAVLINK_ENABLED)
131+
return false;
132+
#else
133+
if (!servicesStarted || !wifiStarted)
134+
{
135+
return false;
136+
}
137+
if (wifiService != WIFI_SERVICE_MAVLINK_TX)
138+
{
139+
return false;
140+
}
141+
142+
IPAddress remote;
143+
WiFiMode_t mode = WiFi.getMode();
144+
if (mode == WIFI_AP || mode == WIFI_AP_STA)
145+
{
146+
remote = apBroadcast;
147+
}
148+
else if (mode == WIFI_STA)
149+
{
150+
remote = WiFi.broadcastIP();
151+
}
152+
else
153+
{
154+
return false;
155+
}
156+
157+
if (!mavlinkUDP.beginPacket(remote, config.GetMavlinkSendPort()))
158+
{
159+
return false;
160+
}
161+
162+
size_t sent = mavlinkUDP.write(data, size);
163+
if (sent != size)
164+
{
165+
mavlinkUDP.endPacket();
166+
return false;
167+
}
168+
169+
return mavlinkUDP.endPacket() == 1;
170+
#endif
171+
}
172+
#endif
173+
122174
/** Is this an IP? */
123175
static boolean isIp(String str)
124176
{

lib/WIFI/devWIFI.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,8 @@ extern device_t WIFI_device;
77
#define HAS_WIFI
88

99
extern const char *VERSION;
10-
#endif
10+
11+
#if defined(TARGET_TX_BACKPACK)
12+
bool SendTxBackpackTelemetryViaUDP(const uint8_t *data, uint16_t size);
13+
#endif
14+
#endif

src/Tx_main.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ MAVLink mavlink;
6464
/////////// FUNCTION DEFS ///////////
6565

6666
void sendMSPViaEspnow(mspPacket_t *packet);
67+
void sendMSPViaWiFiUDP(mspPacket_t *packet);
6768

6869
/////////////////////////////////////
6970

@@ -224,6 +225,10 @@ void ProcessMSPPacketFromTX(mspPacket_t *packet)
224225

225226
case MSP_ELRS_BACKPACK_CRSF_TLM:
226227
DBGLN("Processing MSP_ELRS_BACKPACK_CRSF_TLM...");
228+
if (config.GetTelemMode() == BACKPACK_TELEM_MODE_WIFI)
229+
{
230+
sendMSPViaWiFiUDP(packet);
231+
}
227232
if (config.GetTelemMode() != BACKPACK_TELEM_MODE_OFF)
228233
{
229234
sendMSPViaEspnow(packet);
@@ -288,6 +293,20 @@ void sendMSPViaEspnow(mspPacket_t *packet)
288293
blinkLED();
289294
}
290295

296+
void sendMSPViaWiFiUDP(mspPacket_t *packet)
297+
{
298+
uint8_t packetSize = msp.getTotalPacketSize(packet);
299+
uint8_t dataOutput[packetSize];
300+
301+
uint8_t result = msp.convertToByteArray(packet, dataOutput);
302+
if (!result)
303+
{
304+
return;
305+
}
306+
307+
SendTxBackpackTelemetryViaUDP(dataOutput, packetSize);
308+
}
309+
291310
void SendCachedMSP()
292311
{
293312
if (!cacheFull)

0 commit comments

Comments
 (0)