mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-11-03 14:33:37 +03:00 
			
		
		
		
	Add SerialEvent() callback to loop processing (#7505)
* Add SerialEvent() callback to loop processing Match the AVR SerialEvent implicit callback. Callback is executed in normal user mode, not IRQ, so standard processing can be uses. Fixes #752 after 5 years. :) * Fix style
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							9afb084159
						
					
				
				
					commit
					3e567e9489
				
			@@ -32,6 +32,14 @@
 | 
				
			|||||||
#include "HardwareSerial.h"
 | 
					#include "HardwareSerial.h"
 | 
				
			||||||
#include "Esp.h"
 | 
					#include "Esp.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SerialEvent functions are weak, so when the user doesn't define them,
 | 
				
			||||||
 | 
					// the linker just sets their address to 0 (which is checked below).
 | 
				
			||||||
 | 
					// The Serialx_available is just a wrapper around Serialx.available(),
 | 
				
			||||||
 | 
					// but we can refer to it weakly so we don't pull in the entire
 | 
				
			||||||
 | 
					// HardwareSerial instance if the user doesn't also refer to it.
 | 
				
			||||||
 | 
					void serialEvent() __attribute__((weak));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HardwareSerial::HardwareSerial(int uart_nr)
 | 
					HardwareSerial::HardwareSerial(int uart_nr)
 | 
				
			||||||
    : _uart_nr(uart_nr), _rx_size(256)
 | 
					    : _uart_nr(uart_nr), _rx_size(256)
 | 
				
			||||||
{}
 | 
					{}
 | 
				
			||||||
@@ -162,6 +170,14 @@ size_t HardwareSerial::readBytes(char* buffer, size_t size)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)
 | 
					#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)
 | 
				
			||||||
HardwareSerial Serial(UART0);
 | 
					HardwareSerial Serial(UART0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Executed at end of loop() processing when > 0 bytes available in the Serial port
 | 
				
			||||||
 | 
					void serialEventRun(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (serialEvent && Serial.available()) {
 | 
				
			||||||
 | 
					    serialEvent();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL1)
 | 
					#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL1)
 | 
				
			||||||
HardwareSerial Serial1(UART1);
 | 
					HardwareSerial Serial1(UART1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -207,4 +207,6 @@ protected:
 | 
				
			|||||||
extern HardwareSerial Serial;
 | 
					extern HardwareSerial Serial;
 | 
				
			||||||
extern HardwareSerial Serial1;
 | 
					extern HardwareSerial Serial1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern void serialEventRun(void) __attribute__((weak));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -195,6 +195,9 @@ static void loop_wrapper() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    loop();
 | 
					    loop();
 | 
				
			||||||
    loop_end();
 | 
					    loop_end();
 | 
				
			||||||
 | 
					    if (serialEventRun) {
 | 
				
			||||||
 | 
					        serialEventRun();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    esp_schedule();
 | 
					    esp_schedule();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user