14 #include <systemd/sd-daemon.h> 55 time_t timeout = time(NULL) + Seconds;
71 bool result = WaitForTimeout ? k ==
kNone : k ==
kOk;
72 isyslog(
"%sconfirmed", result ?
"" :
"not ");
78 DisplayMenu->
SetItem(
tr(
"Phase 1: Detecting RC code type"), 2,
false,
false);
79 DisplayMenu->
SetItem(
tr(
"Press any key on the RC unit"), 4,
false,
false);
82 DisplayMenu->
SetItem(
tr(
"RC code detected!"), 4,
false,
false);
83 DisplayMenu->
SetItem(
tr(
"Do not press any key..."), 5,
false,
false);
86 DisplayMenu->
SetItem(
"", 4,
false,
false);
87 DisplayMenu->
SetItem(
"", 5,
false,
false);
89 DisplayMenu->
SetItem(
tr(
"Phase 2: Learning specific key codes"), 2,
false,
false);
91 while (NewKey !=
kNone) {
95 for (
eKeys k = NewKey; k == NewKey; ) {
99 case kUp:
if (NewKey >
kUp) {
100 NewKey =
eKeys(NewKey - 1);
102 if (last && last->
Key() == NewKey)
106 case kDown: DisplayMenu->
SetItem(
tr(
"Press 'Up' to confirm"), 4,
false,
false);
107 DisplayMenu->
SetItem(
tr(
"Press 'Down' to continue"), 5,
false,
false);
108 DisplayMenu->
SetItem(
"", 6,
false,
false);
109 DisplayMenu->
SetItem(
"", 7,
false,
false);
110 DisplayMenu->
SetItem(
"", 8,
false,
false);
111 DisplayMenu->
Flush();
115 DisplayMenu->
Clear();
118 else if (Key ==
kDown) {
119 DisplayMenu->
SetItem(
"", 5,
false,
false);
127 case kNone:
if (NewCode) {
130 NewKey =
eKeys(NewKey + 1);
138 DisplayMenu->
SetItem(
tr(
"(press 'Up' to go back)"), 6,
false,
false);
140 DisplayMenu->
SetItem(
"", 6,
false,
false);
142 DisplayMenu->
SetItem(
tr(
"(press 'Down' to end key definition)"), 7,
false,
false);
144 DisplayMenu->
SetItem(
"", 7,
false,
false);
146 DisplayMenu->
SetItem(
tr(
"(press 'Menu' to skip this key)"), 8,
false,
false);
148 DisplayMenu->
SetItem(
"", 8,
false,
false);
158 if (!Remote->Ready()) {
159 esyslog(
"ERROR: remote control %s not ready!", Remote->Name());
163 dsyslog(
"remote control %s - %s", Remote->Name(), known ?
"keys known" :
"learning keys");
166 sd_notify(0,
"READY=1\nSTATUS=Learning keys...");
171 snprintf(Headline,
sizeof(Headline),
tr(
"Learning Remote Control Keys"));
174 DisplayMenu->
SetItem(Remote->Name(), 0,
false,
false);
176 bool rc =
QueryKeys(Remote, DisplayMenu);
178 DisplayMenu->
Clear();
183 DisplayMenu->
SetItem(Remote->Name(), 0,
false,
false);
184 DisplayMenu->
SetItem(
tr(
"Phase 3: Saving key codes"), 2,
false,
false);
185 DisplayMenu->
SetItem(
tr(
"Press 'Up' to save, 'Down' to cancel"), 4,
false,
false);
193 else if (key ==
kDown) {
static void SetLearning(cRemote *Learning)
bool KnowsRemote(const char *Remote)
bool Confirm(const char *s, int Seconds=10, bool WaitForTimeout=false)
void Add(cListObject *Object, cListObject *After=NULL)
static cString sprintf(const char *fmt,...) __attribute__((format(printf
static eKeys Get(int WaitMs=1000, char **UnknownCode=NULL)
bool Load(const char *FileName=NULL, bool AllowComments=false, bool MustExist=false)
bool QueryKeys(cRemote *Remote, cSkinDisplayMenu *DisplayMenu)
virtual cSkinDisplayMenu * DisplayMenu(void)=0
Creates and returns a new object for displaying a menu.
eKeys Wait(int Seconds=0, bool KeepChar=false)
T * Next(const T *object) const
virtual void Flush(void)
Actually draws the OSD display to the output device.
cInterface(int SVDRPport=0)
void Flush(void)
Flushes the currently active cSkinDisplay, if any.
static void SleepMs(int TimeoutMs)
Creates a cCondWait object and uses it to sleep for TimeoutMs milliseconds, immediately giving up the...
bool Put(uint64_t Code, bool Repeat=false, bool Release=false)
static bool HasKeys(void)
eKeys Message(eMessageType Type, const char *s, int Seconds=0)
Displays the given message, either through a currently visible display object that is capable of doin...
virtual bool Initialize(void)
void Del(cListObject *Object, bool DeleteObject=true)
eKeys GetKey(bool Wait=true)
cSkin * Current(void)
Returns a pointer to the current skin.
static const char * ToString(eKeys Key, bool Translate=false)