29 lines
		
	
	
		
			816 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			816 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef WLED_PIN_MANAGER_H
 | |
| #define WLED_PIN_MANAGER_H
 | |
| /*
 | |
|  * Registers pins so there is no attempt for two interfaces to use the same pin
 | |
|  */
 | |
| #include <Arduino.h>
 | |
| 
 | |
| class PinManagerClass {
 | |
|   private:
 | |
|   #ifdef ESP8266
 | |
|   uint8_t pinAlloc[3] = {0x00, 0x00, 0x00}; //24bit, 1 bit per pin, we use first 17bits
 | |
|   #else
 | |
|   uint8_t pinAlloc[5] = {0x00, 0x00, 0x00, 0x00, 0x00}; //40bit, 1 bit per pin, we use all bits
 | |
|   uint8_t ledcAlloc[2] = {0x00, 0x00}; //16 LEDC channels
 | |
|   #endif
 | |
| 
 | |
|   public:
 | |
|   void deallocatePin(byte gpio);
 | |
|   bool allocatePin(byte gpio, bool output = true);
 | |
|   bool isPinAllocated(byte gpio);
 | |
|   bool isPinOk(byte gpio, bool output = true);
 | |
|   #ifdef ARDUINO_ARCH_ESP32
 | |
|   byte allocateLedc(byte channels);
 | |
|   void deallocateLedc(byte pos, byte channels);
 | |
|   #endif
 | |
| };
 | |
| 
 | |
| extern PinManagerClass pinManager;
 | |
| #endif | 
