kopia lustrzana https://github.com/meshtastic/firmware
				
				
				
			More GPS work (#2711)
Increase GPS buffer on esp32 Check for and flush GPS buffer when overfilled and corrupted. Co-authored-by: Ben Meadors <benmmeadors@gmail.com>pull/2715/head
							rodzic
							
								
									6e0b6684ee
								
							
						
					
					
						commit
						c44986127e
					
				|  | @ -30,6 +30,7 @@ build_flags = | ||||||
|   -DCONFIG_BT_NIMBLE_MAX_CCCDS=20 |   -DCONFIG_BT_NIMBLE_MAX_CCCDS=20 | ||||||
|   -DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=5120 |   -DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=5120 | ||||||
|   -DESP_OPENSSL_SUPPRESS_LEGACY_WARNING |   -DESP_OPENSSL_SUPPRESS_LEGACY_WARNING | ||||||
|  |   -DSERIAL_BUFFER_SIZE=4096 | ||||||
|   ;-DDEBUG_HEAP |   ;-DDEBUG_HEAP | ||||||
| 
 | 
 | ||||||
| lib_deps = | lib_deps = | ||||||
|  |  | ||||||
|  | @ -174,7 +174,7 @@ bool GPS::setupGPS() | ||||||
| 
 | 
 | ||||||
| #ifdef ARCH_ESP32 | #ifdef ARCH_ESP32 | ||||||
|         // In esp32 framework, setRxBufferSize needs to be initialized before Serial
 |         // In esp32 framework, setRxBufferSize needs to be initialized before Serial
 | ||||||
|         _serial_gps->setRxBufferSize(2048); // the default is 256
 |         _serial_gps->setRxBufferSize(SERIAL_BUFFER_SIZE); // the default is 256
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|         // if the overrides are not dialled in, set them from the board definitions, if they exist
 |         // if the overrides are not dialled in, set them from the board definitions, if they exist
 | ||||||
|  | @ -834,6 +834,14 @@ void GPS::forceWake(bool on) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // clear the GPS rx buffer as quickly as possible
 | ||||||
|  | void GPS::clearBuffer() | ||||||
|  | { | ||||||
|  |     int x = _serial_gps->available(); | ||||||
|  |     while (x--) | ||||||
|  |         _serial_gps->read(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /// Prepare the GPS for the cpu entering deep or light sleep, expect to be gone for at least 100s of msecs
 | /// Prepare the GPS for the cpu entering deep or light sleep, expect to be gone for at least 100s of msecs
 | ||||||
| int GPS::prepareSleep(void *unused) | int GPS::prepareSleep(void *unused) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -91,6 +91,9 @@ class GPS : private concurrency::OSThread | ||||||
|     // Some GPS modules (ublock) require factory reset
 |     // Some GPS modules (ublock) require factory reset
 | ||||||
|     virtual bool factoryReset() { return true; } |     virtual bool factoryReset() { return true; } | ||||||
| 
 | 
 | ||||||
|  |     // Empty the input buffer as quickly as possible
 | ||||||
|  |     void clearBuffer(); | ||||||
|  | 
 | ||||||
|   protected: |   protected: | ||||||
|     /// Do gps chipset specific init, return true for success
 |     /// Do gps chipset specific init, return true for success
 | ||||||
|     virtual bool setupGPS(); |     virtual bool setupGPS(); | ||||||
|  |  | ||||||
|  | @ -253,8 +253,14 @@ bool NMEAGPS::hasFlow() | ||||||
| bool NMEAGPS::whileIdle() | bool NMEAGPS::whileIdle() | ||||||
| { | { | ||||||
|     bool isValid = false; |     bool isValid = false; | ||||||
|  | #ifdef SERIAL_BUFFER_SIZE | ||||||
|  |     if (_serial_gps->available() >= SERIAL_BUFFER_SIZE - 1) { | ||||||
|  |         LOG_WARN("GPS Buffer full with %u bytes waiting. Flushing to avoid corruption.\n", _serial_gps->available()); | ||||||
|  |         clearBuffer(); | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|     // if (_serial_gps->available() > 0)
 |     // if (_serial_gps->available() > 0)
 | ||||||
|     // LOG_DEBUG("GPS Bytes Waiting: %u\n", _serial_gps->available());
 |     LOG_DEBUG("GPS Bytes Waiting: %u\n", _serial_gps->available()); | ||||||
|     // First consume any chars that have piled up at the receiver
 |     // First consume any chars that have piled up at the receiver
 | ||||||
|     while (_serial_gps->available() > 0) { |     while (_serial_gps->available() > 0) { | ||||||
|         int c = _serial_gps->read(); |         int c = _serial_gps->read(); | ||||||
|  | @ -263,4 +269,4 @@ bool NMEAGPS::whileIdle() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return isValid; |     return isValid; | ||||||
| } | } | ||||||
		Ładowanie…
	
		Reference in New Issue
	
	 Jonathan Bennett
						Jonathan Bennett