diff --git a/radio/src/pulses/ppm.cpp b/radio/src/pulses/ppm.cpp index 8792e934622..ed534fa648e 100644 --- a/radio/src/pulses/ppm.cpp +++ b/radio/src/pulses/ppm.cpp @@ -98,6 +98,21 @@ static uint32_t setupPulsesPPMModule(uint8_t module, pulse_duration_t*& data) return data - start; } +static const etx_serial_init ppmSportSerialParams = { + .baudrate = FRSKY_SPORT_BAUDRATE, + .encoding = ETX_Encoding_8N1, + .direction = ETX_Dir_RX, + .polarity = ETX_Pol_Normal, +}; + +static void ppmProcessData(void* ctx, uint8_t data, uint8_t* buffer, uint8_t* len) +{ + auto mod_st = (etx_module_state_t*)ctx; + auto module = modulePortGetModule(mod_st); + + processFrskySportTelemetryData(module, data, buffer, *len); +} + static void* ppmInit(uint8_t module) { #if defined(HARDWARE_INTERNAL_MODULE) @@ -115,6 +130,7 @@ static void* ppmInit(uint8_t module) auto mod_st = modulePortInitTimer(module, ETX_MOD_PORT_TIMER, &cfg); if (!mod_st) return nullptr; + modulePortInitSerial(module, ETX_MOD_PORT_SPORT, &ppmSportSerialParams); mixerSchedulerSetPeriod(module, PPM_PERIOD(module)); return (void*)mod_st; } @@ -158,7 +174,7 @@ const etx_proto_driver_t PpmDriver = { .init = ppmInit, .deinit = ppmDeInit, .sendPulses = ppmSendPulses, - .processData = nullptr, + .processData = ppmProcessData, }; // diff --git a/radio/src/pulses/sbus.cpp b/radio/src/pulses/sbus.cpp index d83d72e687c..880aa535305 100644 --- a/radio/src/pulses/sbus.cpp +++ b/radio/src/pulses/sbus.cpp @@ -92,13 +92,28 @@ static void setupPulsesSbus(uint8_t module, uint8_t*& p_buf) #define SBUS_BAUDRATE 100000 -const etx_serial_init sbusUartParams = { +static const etx_serial_init sbusUartParams = { .baudrate = SBUS_BAUDRATE, .encoding = ETX_Encoding_8E2, .direction = ETX_Dir_TX, .polarity = ETX_Pol_Normal, }; +static const etx_serial_init sbusSportSerialParams = { + .baudrate = FRSKY_SPORT_BAUDRATE, + .encoding = ETX_Encoding_8N1, + .direction = ETX_Dir_RX, + .polarity = ETX_Pol_Normal, +}; + +static void sbusProcessData(void* ctx, uint8_t data, uint8_t* buffer, uint8_t* len) +{ + auto mod_st = (etx_module_state_t*)ctx; + auto module = modulePortGetModule(mod_st); + + processFrskySportTelemetryData(module, data, buffer, *len); +} + static void* sbusInit(uint8_t module) { #if defined(HARDWARE_INTERNAL_MODULE) @@ -114,7 +129,9 @@ static void* sbusInit(uint8_t module) if (!mod_st) return nullptr; // } + modulePortInitSerial(module, ETX_MOD_PORT_SPORT, &sbusSportSerialParams); mixerSchedulerSetPeriod(module, SBUS_PERIOD(module)); + return (void*)mod_st; } @@ -154,5 +171,5 @@ const etx_proto_driver_t SBusDriver = { .init = sbusInit, .deinit = sbusDeInit, .sendPulses = sbusSendPulses, - .processData = nullptr, + .processData = sbusProcessData, };