Creating Television Example
This commit is contained in:
parent
26c15c9ca2
commit
d4603df58d
|
|
@ -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();
|
||||||
|
}
|
||||||
10
src/Span.h
10
src/Span.h
|
|
@ -331,8 +331,8 @@ namespace Service {
|
||||||
|
|
||||||
struct Television : SpanService { Television() : SpanService{"D8","Television"}{
|
struct Television : SpanService { Television() : SpanService{"D8","Television"}{
|
||||||
REQ(Active);
|
REQ(Active);
|
||||||
REQ(ActiveIdentifier);
|
|
||||||
OPT(ConfiguredName);
|
OPT(ConfiguredName);
|
||||||
|
OPT(ActiveIdentifier);
|
||||||
OPT(RemoteKey);
|
OPT(RemoteKey);
|
||||||
OPT(SleepDiscoveryMode);
|
OPT(SleepDiscoveryMode);
|
||||||
OPT(Brightness);
|
OPT(Brightness);
|
||||||
|
|
@ -344,14 +344,6 @@ namespace Service {
|
||||||
OPT(PowerModeSelection);
|
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"}{
|
struct TemperatureSensor : SpanService { TemperatureSensor() : SpanService{"8A","TemperatureSensor"}{
|
||||||
REQ(CurrentTemperature);
|
REQ(CurrentTemperature);
|
||||||
OPT(Name);
|
OPT(Name);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue