mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Merge branch 'integration' of https://github.com/esphome/esphome into integration
This commit is contained in:
		| @@ -29,7 +29,7 @@ void GPIOBinarySensorStore::setup(InternalGPIOPin *pin, gpio::InterruptType type | ||||
|  | ||||
| void GPIOBinarySensor::setup() { | ||||
|   if (this->use_interrupt_ && !this->pin_->is_internal()) { | ||||
|     ESP_LOGW(TAG, "Interrupts not supported for this pin type, falling back to polling"); | ||||
|     ESP_LOGD(TAG, "GPIO is not internal, falling back to polling mode"); | ||||
|     this->use_interrupt_ = false; | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -24,6 +24,13 @@ class GPIOBinarySensorStore { | ||||
|   bool has_changed() { | ||||
|     // No lock needed: single writer (ISR) / single reader (main loop) pattern | ||||
|     // Volatile bool operations are atomic on all ESPHome-supported platforms | ||||
|     // | ||||
|     // Note: There's a benign race where ISR could set changed_ = true between | ||||
|     // our read and clear. This is intentional and causes no issues because: | ||||
|     // 1. We'll process the state change on the next loop iteration | ||||
|     // 2. Multiple rapid changes between loop iterations would only result in | ||||
|     //    one update anyway (we only care about the final state) | ||||
|     // 3. This avoids the overhead of atomic operations in the ISR | ||||
|     if (!this->changed_) { | ||||
|       return false; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user