* Fixes UART detach. Fixes #3878 * 0 is not a good holder value for pins! * 0 is not a good holder value for pins!
This commit is contained in:
		
							parent
							
								
									8b6d020352
								
							
						
					
					
						commit
						80418fadcf
					
				| @ -53,6 +53,8 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in | ||||
|     } | ||||
| 
 | ||||
|     _uart = uartBegin(_uart_nr, baud ? baud : 9600, config, rxPin, txPin, 256, invert); | ||||
|     _tx_pin = txPin; | ||||
|     _rx_pin = rxPin; | ||||
| 
 | ||||
|     if(!baud) { | ||||
|         uartStartDetectBaudrate(_uart); | ||||
| @ -70,6 +72,8 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in | ||||
|         } else { | ||||
|             log_e("Could not detect baudrate. Serial data at the port must be present within the timeout for detection to be possible"); | ||||
|             _uart = NULL; | ||||
|             _tx_pin = 255; | ||||
|             _rx_pin = 255; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -84,7 +88,8 @@ void HardwareSerial::end() | ||||
|     if(uartGetDebug() == _uart_nr) { | ||||
|         uartSetDebug(0); | ||||
|     } | ||||
|     uartEnd(_uart); | ||||
|     log_v("pins %d %d",_tx_pin, _rx_pin); | ||||
|     uartEnd(_uart, _tx_pin, _rx_pin); | ||||
|     _uart = 0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -104,6 +104,8 @@ public: | ||||
| protected: | ||||
|     int _uart_nr; | ||||
|     uart_t* _uart; | ||||
|     uint8_t _tx_pin; | ||||
|     uint8_t _rx_pin; | ||||
| }; | ||||
| 
 | ||||
| extern void serialEventRun(void) __attribute__((weak)); | ||||
|  | ||||
| @ -124,21 +124,21 @@ void uartDisableInterrupt(uart_t* uart) | ||||
|     UART_MUTEX_UNLOCK(); | ||||
| } | ||||
| 
 | ||||
| void uartDetachRx(uart_t* uart) | ||||
| void uartDetachRx(uart_t* uart, uint8_t rxPin) | ||||
| { | ||||
|     if(uart == NULL) { | ||||
|         return; | ||||
|     } | ||||
|     pinMatrixInDetach(UART_RXD_IDX(uart->num), false, false); | ||||
|     pinMatrixInDetach(rxPin, false, false); | ||||
|     uartDisableInterrupt(uart); | ||||
| } | ||||
| 
 | ||||
| void uartDetachTx(uart_t* uart) | ||||
| void uartDetachTx(uart_t* uart, uint8_t txPin) | ||||
| { | ||||
|     if(uart == NULL) { | ||||
|         return; | ||||
|     } | ||||
|     pinMatrixOutDetach(UART_TXD_IDX(uart->num), false, false); | ||||
|     pinMatrixOutDetach(txPin, false, false); | ||||
| } | ||||
| 
 | ||||
| void uartAttachRx(uart_t* uart, uint8_t rxPin, bool inverted) | ||||
| @ -226,7 +226,7 @@ uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rx | ||||
|     return uart; | ||||
| } | ||||
| 
 | ||||
| void uartEnd(uart_t* uart) | ||||
| void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin) | ||||
| { | ||||
|     if(uart == NULL) { | ||||
|         return; | ||||
| @ -243,8 +243,8 @@ void uartEnd(uart_t* uart) | ||||
| 
 | ||||
|     UART_MUTEX_UNLOCK(); | ||||
| 
 | ||||
|     uartDetachRx(uart); | ||||
|     uartDetachTx(uart); | ||||
|     uartDetachRx(uart, rxPin); | ||||
|     uartDetachTx(uart, txPin); | ||||
| } | ||||
| 
 | ||||
| size_t uartResizeRxBuffer(uart_t * uart, size_t new_size) { | ||||
|  | ||||
| @ -52,7 +52,7 @@ struct uart_struct_t; | ||||
| typedef struct uart_struct_t uart_t; | ||||
| 
 | ||||
| uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rxPin, int8_t txPin, uint16_t queueLen, bool inverted); | ||||
| void uartEnd(uart_t* uart); | ||||
| void uartEnd(uart_t* uart, uint8_t rxPin, uint8_t txPin); | ||||
| 
 | ||||
| uint32_t uartAvailable(uart_t* uart); | ||||
| uint32_t uartAvailableForWrite(uart_t* uart); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user