mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 22:35:23 +03:00
Check tx on MSP and GPS only (#13100)
This commit is contained in:
parent
4f17fe0aac
commit
34e7a5ceeb
7 changed files with 15 additions and 5 deletions
|
@ -55,6 +55,9 @@ typedef enum {
|
|||
SERIAL_BIDIR_PP = 1 << 4,
|
||||
SERIAL_BIDIR_NOPULL = 1 << 5, // disable pulls in BIDIR RX mode
|
||||
SERIAL_BIDIR_PP_PD = 1 << 6, // PP mode, normall inverted, but with PullDowns, to fix SA after bidir issue fixed (#10220)
|
||||
|
||||
// If this option is set then switch the TX line to input when not in use to detect it being pulled low
|
||||
SERIAL_CHECK_TX = 1 << 7,
|
||||
} portOptions_e;
|
||||
|
||||
// Define known line control states which may be passed up by underlying serial driver callback
|
||||
|
|
|
@ -342,7 +342,7 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode,
|
|||
if ((mode & MODE_TX) && txIO) {
|
||||
IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device));
|
||||
|
||||
if (((options & SERIAL_INVERTED) == SERIAL_NOT_INVERTED) && !(options & SERIAL_BIDIR_PP_PD)) {
|
||||
if (options & SERIAL_CHECK_TX) {
|
||||
uart->txPinState = TX_PIN_ACTIVE;
|
||||
// Switch TX to an input with pullup so it's state can be monitored
|
||||
uartTxMonitor(s);
|
||||
|
|
|
@ -376,7 +376,7 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode,
|
|||
if ((mode & MODE_TX) && txIO) {
|
||||
IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device));
|
||||
|
||||
if (((options & SERIAL_INVERTED) == SERIAL_NOT_INVERTED) && !(options & SERIAL_BIDIR_PP_PD)) {
|
||||
if (options & SERIAL_CHECK_TX) {
|
||||
uartdev->txPinState = TX_PIN_MONITOR;
|
||||
// Switch TX to UART output whilst UART sends idle preamble
|
||||
checkUsartTxOutput(s);
|
||||
|
|
|
@ -309,7 +309,7 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode,
|
|||
if ((mode & MODE_TX) && txIO) {
|
||||
IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device));
|
||||
|
||||
if (((options & SERIAL_INVERTED) == SERIAL_NOT_INVERTED) && !(options & SERIAL_BIDIR_PP_PD)) {
|
||||
if (options & SERIAL_CHECK_TX) {
|
||||
uartdev->txPinState = TX_PIN_ACTIVE;
|
||||
// Switch TX to an input with pullup so it's state can be monitored
|
||||
uartTxMonitor(s);
|
||||
|
|
|
@ -486,7 +486,7 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode,
|
|||
if ((mode & MODE_TX) && txIO) {
|
||||
IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device));
|
||||
|
||||
if (((options & SERIAL_INVERTED) == SERIAL_NOT_INVERTED) && !(options & SERIAL_BIDIR_PP_PD)) {
|
||||
if (options & SERIAL_CHECK_TX) {
|
||||
uartdev->txPinState = TX_PIN_ACTIVE;
|
||||
// Switch TX to an input with pullup so it's state can be monitored
|
||||
uartTxMonitor(s);
|
||||
|
|
|
@ -435,6 +435,7 @@ void gpsInit(void)
|
|||
gpsData.tempBaudRateIndex = gpsData.userBaudRateIndex;
|
||||
|
||||
portMode_e mode = MODE_RXTX;
|
||||
portOptions_e options = SERIAL_NOT_INVERTED;
|
||||
|
||||
#if defined(GPS_NMEA_TX_ONLY)
|
||||
if (gpsConfig()->provider == GPS_NMEA) {
|
||||
|
@ -442,8 +443,12 @@ void gpsInit(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
if ((gpsPortConfig->identifier >= SERIAL_PORT_USART1) && (gpsPortConfig->identifier <= SERIAL_PORT_USART_MAX)){
|
||||
options |= SERIAL_CHECK_TX;
|
||||
}
|
||||
|
||||
// no callback - buffer will be consumed in gpsUpdate()
|
||||
gpsPort = openSerialPort(gpsPortConfig->identifier, FUNCTION_GPS, NULL, NULL, baudRates[gpsInitData[gpsData.userBaudRateIndex].baudrateIndex], mode, SERIAL_NOT_INVERTED);
|
||||
gpsPort = openSerialPort(gpsPortConfig->identifier, FUNCTION_GPS, NULL, NULL, baudRates[gpsInitData[gpsData.userBaudRateIndex].baudrateIndex], mode, options);
|
||||
if (!gpsPort) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -69,6 +69,8 @@ void mspSerialAllocatePorts(void)
|
|||
|
||||
if (mspConfig()->halfDuplex) {
|
||||
options |= SERIAL_BIDIR;
|
||||
} else if ((portConfig->identifier >= SERIAL_PORT_USART1) && (portConfig->identifier <= SERIAL_PORT_USART_MAX)){
|
||||
options |= SERIAL_CHECK_TX;
|
||||
}
|
||||
|
||||
serialPort_t *serialPort = openSerialPort(portConfig->identifier, FUNCTION_MSP, NULL, NULL, baudRates[portConfig->msp_baudrateIndex], MODE_RXTX, options);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue