185 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "HomeSpan.h"
 | |
| 
 | |
| struct HKTV : Service::Television {
 | |
| 
 | |
|   SpanCharacteristic *active;
 | |
|   SpanCharacteristic *activeIdentifier;
 | |
|   SpanCharacteristic *configuredName;
 | |
|   SpanCharacteristic *remoteKey;
 | |
|   SpanCharacteristic *sleepDiscoveryMode;
 | |
| 
 | |
|   SpanService *speaker;
 | |
|   SpanCharacteristic *mute;
 | |
|   SpanCharacteristic *speakerActive;
 | |
|   SpanCharacteristic *volume;
 | |
| 
 | |
|   SpanService         *hdmi1;
 | |
|   SpanCharacteristic  *hdmi1Identifier;
 | |
|   SpanCharacteristic  *hdmi1CurrentVisibility;
 | |
| 
 | |
|   SpanService         *hdmi2;
 | |
|   SpanCharacteristic  *hdmi2Identifier;
 | |
|   SpanCharacteristic  *hdmi2CurrentVisibility;
 | |
| 
 | |
|   SpanService         *netflix;
 | |
|   SpanCharacteristic  *netflixIdentifier;
 | |
|   SpanCharacteristic  *netflixCurrentVisibility;
 | |
| 
 | |
|   HKTV() : Service::Television(){
 | |
|     
 | |
|     Serial.printf("Init TV\n");           // initialization message
 | |
| 
 | |
|     active            = new Characteristic::Active();
 | |
|     activeIdentifier   = new Characteristic::ActiveIdentifier(0);
 | |
|     new Characteristic::ConfiguredName("My TV");
 | |
|     new Characteristic::PowerModeSelection();             // write-only Characteristic that enables "View TV Settings" on controls screen 
 | |
|     new Characteristic::PictureMode(1);
 | |
|     new Characteristic::ClosedCaptions();
 | |
|     new Characteristic::Brightness(50);
 | |
|     new Characteristic::CurrentMediaState(1);
 | |
|     new Characteristic::TargetMediaState(1);
 | |
|     new Characteristic::RemoteKey();
 | |
|     new Characteristic::SleepDiscoveryMode(1);
 | |
| 
 | |
|     hdmi1 = new Service::InputSource();
 | |
|       new Characteristic::ConfiguredName("HDMI 1");
 | |
|       new Characteristic::IsConfigured(1); // configured = 1, not configured = 0
 | |
|       netflixIdentifier = new Characteristic::Identifier(0);
 | |
|       hdmi1CurrentVisibility = new Characteristic::CurrentVisibilityState(0);  // 0 shown, 1 hidden
 | |
| 
 | |
|     hdmi2 = new Service::InputSource();
 | |
|       new Characteristic::ConfiguredName("HDMI 2");
 | |
|       new Characteristic::IsConfigured(1); // configured = 1, not configured = 0
 | |
|       hdmi2Identifier = new Characteristic::Identifier(10);
 | |
|       hdmi2CurrentVisibility = new Characteristic::CurrentVisibilityState(0);  // 0 shown, 1 hidden
 | |
| 
 | |
|     netflix = new Service::InputSource();
 | |
|       new Characteristic::ConfiguredName("NETFLIX");
 | |
| //      new Characteristic::IsConfigured(0); // configured = 1, not configured = 0
 | |
|       netflixIdentifier = new Characteristic::Identifier(4);
 | |
|       netflixCurrentVisibility = new Characteristic::CurrentVisibilityState(0);  // 0 shown, 1 hidden
 | |
| //      new Characteristic::TargetVisibilityState(0);  // 0 shown, 1 hidden
 | |
| 
 | |
|     addLink(hdmi1);
 | |
|     addLink(hdmi2);
 | |
|     addLink(netflix);
 | |
|     addLink(speaker);
 | |
|   }
 | |
| 
 | |
|   boolean update(){
 | |
|     if(active->updated()) {
 | |
|         if(active->getVal() != active->getNewVal()) {
 | |
|           Serial.printf("update(): active %d -> %d\n", active->getVal(), active->getNewVal());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if(activeIdentifier->updated()) {
 | |
|       Serial.printf("update(): activeIdentifier %d -> %d\n", activeIdentifier->getVal(), activeIdentifier->getNewVal());
 | |
|     }
 | |
| 
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
|   void loop() {
 | |
| 
 | |
|   }
 | |
| };
 | |
| 
 | |
| void setup() {
 | |
|   Serial.begin(115200);
 | |
|   homeSpan.begin(Category::Television,"HomeSpan Television");
 | |
| 
 | |
|   new SpanAccessory();
 | |
|     new Service::AccessoryInformation();
 | |
|       new Characteristic::Name("HomeSpan TV");
 | |
|       new Characteristic::Manufacturer("HomeSpan");
 | |
|       new Characteristic::SerialNumber("123-ABC");
 | |
|       new Characteristic::Model("HomeSpan");
 | |
|       new Characteristic::FirmwareRevision("0.1");
 | |
|       new Characteristic::Identify();
 | |
| 
 | |
|   new Service::HAPProtocolInformation();
 | |
|     new Characteristic::Version("1.1.0");  
 | |
|        
 | |
|   SpanService *hdmi1 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 1");
 | |
|     new Characteristic::Identifier(1);
 | |
| 
 | |
|   SpanService *hdmi2 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 2");
 | |
|     new Characteristic::Identifier(2);
 | |
|     new Characteristic::IsConfigured(0);
 | |
| 
 | |
|   SpanService *hdmi3 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 3");
 | |
|     new Characteristic::Identifier(3);
 | |
|     new Characteristic::IsConfigured(1);
 | |
| 
 | |
|   SpanService *hdmi4 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 4");
 | |
|     new Characteristic::Identifier(4);
 | |
|     new Characteristic::IsConfigured(1);
 | |
|     new Characteristic::TargetVisibilityState(0);
 | |
|     new Characteristic::CurrentVisibilityState(0);    
 | |
| 
 | |
|   SpanService *hdmi5 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 5");
 | |
|     new Characteristic::Identifier(5);
 | |
|     new Characteristic::IsConfigured(1);
 | |
|     new Characteristic::TargetVisibilityState(1);
 | |
|     new Characteristic::CurrentVisibilityState(1);    
 | |
| 
 | |
|   SpanService *hdmi6 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 6");
 | |
|     new Characteristic::Identifier(6);
 | |
|     new Characteristic::IsConfigured(0);
 | |
|     new Characteristic::TargetVisibilityState(0);
 | |
|     new Characteristic::CurrentVisibilityState(0);    
 | |
| 
 | |
|   SpanService *hdmi7 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 7");
 | |
|     new Characteristic::Identifier(0);
 | |
|     new Characteristic::IsConfigured(1);
 | |
|     new Characteristic::TargetVisibilityState(0);
 | |
|     new Characteristic::CurrentVisibilityState(0);    
 | |
| 
 | |
|   SpanService *hdmi8 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 8");
 | |
|     new Characteristic::Identifier(8);
 | |
|     new Characteristic::TargetVisibilityState(0);
 | |
|     new Characteristic::CurrentVisibilityState(0);    
 | |
| 
 | |
|   SpanService *hdmi9 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 9");
 | |
|     new Characteristic::Identifier(9);
 | |
|     new Characteristic::TargetVisibilityState(1);
 | |
|     new Characteristic::CurrentVisibilityState(1);
 | |
|     
 | |
|   SpanService *hdmi10 = new Service::InputSource();
 | |
|     new Characteristic::ConfiguredName("HDMI 10");
 | |
|     new Characteristic::IsConfigured(1);
 | |
|     new Characteristic::TargetVisibilityState(0);
 | |
|     new Characteristic::CurrentVisibilityState(0);
 | |
| 
 | |
|   (new Service::Television())
 | |
|     ->addLink(hdmi1)
 | |
|     ->addLink(hdmi2)
 | |
|     ->addLink(hdmi3)
 | |
|     ->addLink(hdmi4)
 | |
|     ->addLink(hdmi5)
 | |
|     ->addLink(hdmi6)
 | |
|     ->addLink(hdmi7)
 | |
|     ->addLink(hdmi8)
 | |
|     ->addLink(hdmi9)
 | |
|     ->addLink(hdmi10)
 | |
|     ;
 | |
|     new Characteristic::Active(1);
 | |
|     new Characteristic::ConfiguredName("AdvancedTV");
 | |
|     new Characteristic::ActiveIdentifier(3);    
 | |
|        
 | |
| }
 | |
| 
 | |
| void loop() {
 | |
|   homeSpan.poll();
 | |
| }
 |