diff --git a/src/main/io/serial.c b/src/main/io/serial.c index 15aae3e469..0f94c7bc15 100644 --- a/src/main/io/serial.c +++ b/src/main/io/serial.c @@ -364,7 +364,7 @@ void closeSerialPort(serialPort_t *serialPort) { serialPortUsage->serialPort = NULL; } -void serialInit(serialConfig_t *initialSerialConfig, bool softserialEnabled) +void serialInit(serialConfig_t *initialSerialConfig, bool softserialEnabled, serialPortIdentifier_e serialPortToDisable) { uint8_t index; @@ -376,6 +376,12 @@ void serialInit(serialConfig_t *initialSerialConfig, bool softserialEnabled) for (index = 0; index < SERIAL_PORT_COUNT; index++) { serialPortUsageList[index].identifier = serialPortIdentifiers[index]; + if (serialPortToDisable != SERIAL_PORT_NONE) { + if (serialPortUsageList[index].identifier == serialPortToDisable) { + serialPortUsageList[index].identifier = SERIAL_PORT_NONE; + serialPortCount--; + } + } if (!softserialEnabled) { if (0 #ifdef USE_SOFTSERIAL1 diff --git a/src/main/io/serial.h b/src/main/io/serial.h index ccee8d1501..077ad07293 100644 --- a/src/main/io/serial.h +++ b/src/main/io/serial.h @@ -100,6 +100,7 @@ typedef void serialConsumer(uint8_t); // // configuration // +void serialInit(serialConfig_t *initialSerialConfig, bool softserialEnabled, serialPortIdentifier_e serialPortToDisable); void serialRemovePort(serialPortIdentifier_e identifier); uint8_t serialGetAvailablePortCount(void); bool serialIsPortAvailable(serialPortIdentifier_e identifier); diff --git a/src/main/main.c b/src/main/main.c index 1b06c200cf..96bd510bf9 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -118,7 +118,6 @@ serialPort_t *loopbackPort; void printfSupportInit(void); void timerInit(void); void telemetryInit(void); -void serialInit(serialConfig_t *initialSerialConfig, bool softserialEnabled); void mspInit(serialConfig_t *serialConfig); void cliInit(serialConfig_t *serialConfig); void failsafeInit(rxConfig_t *intialRxConfig, uint16_t deadband3d_throttle); @@ -248,7 +247,12 @@ void init(void) dmaInit(); - serialInit(&masterConfig.serialConfig, feature(FEATURE_SOFTSERIAL)); +#ifdef AVOID_UART2_PWM_PPM + serialInit(&masterConfig.serialConfig, feature(FEATURE_SOFTSERIAL), + feature(FEATURE_RX_PPM) || feature(FEATURE_RX_PARALLEL_PWM) ? SERIAL_PORT_USART2 : SERIAL_PORT_NONE); +#else + serialInit(&masterConfig.serialConfig, feature(FEATURE_SOFTSERIAL), SERIAL_PORT_NONE); +#endif #ifdef USE_SERVOS mixerInit(masterConfig.mixerMode, masterConfig.customMotorMixer, masterConfig.customServoMixer); diff --git a/src/main/telemetry/smartport.c b/src/main/telemetry/smartport.c index 28daadc40b..03f257d05f 100644 --- a/src/main/telemetry/smartport.c +++ b/src/main/telemetry/smartport.c @@ -151,8 +151,6 @@ static telemetryConfig_t *telemetryConfig; static bool smartPortTelemetryEnabled = false; static portSharing_e smartPortPortSharing; -extern void serialInit(serialConfig_t *); // from main.c // FIXME remove this dependency - char smartPortState = SPSTATE_UNINITIALIZED; static uint8_t smartPortHasRequest = 0; static uint8_t smartPortIdCnt = 0;