diff --git a/Other Examples/Television/Television.ino b/Other Examples/Television/Television.ino new file mode 100644 index 0000000..bbda858 --- /dev/null +++ b/Other Examples/Television/Television.ino @@ -0,0 +1,184 @@ +#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(); +} diff --git a/src/Span.h b/src/Span.h index c492413..8e323f1 100644 --- a/src/Span.h +++ b/src/Span.h @@ -331,8 +331,8 @@ namespace Service { struct Television : SpanService { Television() : SpanService{"D8","Television"}{ REQ(Active); - REQ(ActiveIdentifier); OPT(ConfiguredName); + OPT(ActiveIdentifier); OPT(RemoteKey); OPT(SleepDiscoveryMode); OPT(Brightness); @@ -344,14 +344,6 @@ namespace Service { OPT(PowerModeSelection); }}; - struct TelevisionSpeaker : SpanService { TelevisionSpeaker() : SpanService{"113","TelevisionSpeaker"}{ - REQ(Mute); - OPT(Active); - OPT(Volume); - OPT(VolumeControlType); - OPT(VolumeSelector); - }}; - struct TemperatureSensor : SpanService { TemperatureSensor() : SpanService{"8A","TemperatureSensor"}{ REQ(CurrentTemperature); OPT(Name);