Deallocate relay, button and IR pins prior to reallocation in JSON config parser (#3294)
This commit is contained in:
		| @@ -197,6 +197,9 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { | ||||
|   disablePullUp = !pull; | ||||
|   JsonArray hw_btn_ins = btn_obj[F("ins")]; | ||||
|   if (!hw_btn_ins.isNull()) { | ||||
|     for (uint8_t b = 0; b < WLED_MAX_BUTTONS; b++) { // deallocate existing button pins | ||||
|       pinManager.deallocatePin(btnPin[b], PinOwner::Button); // does nothing if trying to deallocate a pin with PinOwner != Button | ||||
|     } | ||||
|     uint8_t s = 0; | ||||
|     for (JsonObject btn : hw_btn_ins) { | ||||
|       CJSON(buttonType[s], btn["type"]); | ||||
| @@ -264,6 +267,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { | ||||
|  | ||||
|   int hw_ir_pin = hw["ir"]["pin"] | -2; // 4 | ||||
|   if (hw_ir_pin > -2) { | ||||
|     pinManager.deallocatePin(irPin, PinOwner::IR); | ||||
|     if (pinManager.allocatePin(hw_ir_pin, false, PinOwner::IR)) { | ||||
|       irPin = hw_ir_pin; | ||||
|     } else { | ||||
| @@ -276,6 +280,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { | ||||
|   JsonObject relay = hw[F("relay")]; | ||||
|   int hw_relay_pin = relay["pin"] | -2; | ||||
|   if (hw_relay_pin > -2) { | ||||
|     pinManager.deallocatePin(rlyPin, PinOwner::Relay); | ||||
|     if (pinManager.allocatePin(hw_relay_pin,true, PinOwner::Relay)) { | ||||
|       rlyPin = hw_relay_pin; | ||||
|       pinMode(rlyPin, OUTPUT); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 cschwinne
					cschwinne