46 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
| 
 | |
| ////////////////////////////////////////////////////
 | |
| //   DEVICE-SPECIFIC PROGRAMMABLE SWITCH SERVICES //
 | |
| ////////////////////////////////////////////////////
 | |
| 
 | |
| struct DEV_ProgButton : Service::StatelessProgrammableSwitch {       // Stateless Programmable Switch
 | |
|  
 | |
|   SpanCharacteristic *switchEvent;                  // reference to the ProgrammableSwitchEvent Characteristic
 | |
|   
 | |
|   DEV_ProgButton(int buttonPin, int index) : Service::StatelessProgrammableSwitch(){
 | |
| 
 | |
|     switchEvent=new Characteristic::ProgrammableSwitchEvent();  // Programmable Switch Event Characteristic (will be set to SINGLE, DOUBLE or LONG press)
 | |
|     new Characteristic::ServiceLabelIndex(index);               // set service label index (only required if there is more than one Stateless Programmable Switch per Service)
 | |
|                 
 | |
|     new SpanButton(buttonPin);                                  // create new SpanButton
 | |
| 
 | |
|     Serial.print("Configuring Programmable Pushbutton: Pin=");  // initialization message
 | |
|     Serial.print(buttonPin);
 | |
|     Serial.print("  Index=");
 | |
|     Serial.print(index);
 | |
|     Serial.print("\n");
 | |
|     
 | |
|   } // end constructor
 | |
| 
 | |
|   // We do NOT need to implement an update() method or a loop() method - just the button() method:
 | |
| 
 | |
|   void button(int pin, int pressType) override {
 | |
| 
 | |
|     LOG1("Found button press on pin: ");            // always a good idea to log messages
 | |
|     LOG1(pin);
 | |
|     LOG1("  type: ");
 | |
|     LOG1(pressType==SpanButton::LONG?"LONG":(pressType==SpanButton::SINGLE)?"SINGLE":"DOUBLE");
 | |
|     LOG1("\n");
 | |
| 
 | |
|     // All the action occurs in this single line below.  We simply set the value of the Programmable Switch Event Characteristic
 | |
|     // to the value provided by pressType.  The values of pressType (0=SpanButton::SINGLE, 1=SpanButton::DOUBLE, and 2=SpanButton::LONG)
 | |
|     // were designed to match the required values of the Programmable Switch Event Characteristic.
 | |
| 
 | |
|     switchEvent->setVal(pressType);                // set the value of the switchEvent Characteristic
 | |
| 
 | |
|   }
 | |
| 
 | |
| };
 | |
|       
 | |
| //////////////////////////////////
 |