1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 00:35:39 +03:00

Multiple telemtry providers can now be active at the same time on any

serial port. 
MSP telemetry can now be at any baud rate.

A pattern is emerging in each telemetry provider, code is duplicated to
get things working, refactoring can come later.
This commit is contained in:
Dominic Clifton 2015-02-18 23:10:04 +00:00
parent 3e64ce883c
commit 7dcc7b2fb5
15 changed files with 212 additions and 90 deletions

View file

@ -41,9 +41,6 @@
#include "telemetry/msp.h"
#include "telemetry/smartport.h"
static bool telemetryEnabled = false;
static telemetryConfig_t *telemetryConfig;
void useTelemetryConfig(telemetryConfig_t *telemetryConfigToUse)
@ -51,77 +48,40 @@ void useTelemetryConfig(telemetryConfig_t *telemetryConfigToUse)
telemetryConfig = telemetryConfigToUse;
}
void telemetryInit()
void telemetryInit(void)
{
initFrSkyTelemetry(telemetryConfig);
initHoTTTelemetry(telemetryConfig);
initMSPTelemetry(telemetryConfig);
initSmartPortTelemetry(telemetryConfig);
checkTelemetryState();
}
bool determineNewTelemetryEnabledState(void)
bool determineNewTelemetryEnabledState(portSharing_e portSharing)
{
bool enabled = true;
bool enabled = portSharing == PORTSHARING_NOT_SHARED;
if (telemetryConfig->telemetry_switch)
enabled = IS_RC_MODE_ACTIVE(BOXTELEMETRY);
else
enabled = ARMING_FLAG(ARMED);
if (portSharing == PORTSHARING_SHARED) {
if (telemetryConfig->telemetry_switch)
enabled = IS_RC_MODE_ACTIVE(BOXTELEMETRY);
else
enabled = ARMING_FLAG(ARMED);
}
return enabled;
}
bool shouldChangeTelemetryStateNow(bool newState)
{
return newState != telemetryEnabled;
}
static void configureTelemetryPort(void)
{
configureFrSkyTelemetryPort();
configureHoTTTelemetryPort();
configureMSPTelemetryPort();
configureSmartPortTelemetryPort();
}
void freeTelemetryPort(void)
{
freeFrSkyTelemetryPort();
freeHoTTTelemetryPort();
freeMSPTelemetryPort();
freeSmartPortTelemetryPort();
}
void checkTelemetryState(void)
{
bool newEnabledState = determineNewTelemetryEnabledState();
if (!shouldChangeTelemetryStateNow(newEnabledState)) {
return;
}
if (newEnabledState)
configureTelemetryPort();
else
freeTelemetryPort();
telemetryEnabled = newEnabledState;
checkFrSkyTelemetryState();
checkHoTTTelemetryState();
checkMSPTelemetryState();
checkSmartPortTelemetryState();
}
void handleTelemetry(void)
{
if (!determineNewTelemetryEnabledState())
return;
if (!telemetryEnabled) {
return;
}
handleFrSkyTelemetry();
handleHoTTTelemetry();
handleMSPTelemetry();