14#include <systemd/sd-daemon.h>
44 Seconds =
Setup.OSDMessageTime;
47 time_t timeout = time(NULL) + Seconds;
63 bool result = WaitForTimeout ? k ==
kNone : k ==
kOk;
64 isyslog(
"%sconfirmed", result ?
"" :
"not ");
70 DisplayMenu->
SetItem(
tr(
"Phase 1: Detecting RC code type"), 2,
false,
false);
71 DisplayMenu->
SetItem(
tr(
"Press any key on the RC unit"), 4,
false,
false);
74 DisplayMenu->
SetItem(
tr(
"RC code detected!"), 4,
false,
false);
75 DisplayMenu->
SetItem(
tr(
"Do not press any key..."), 5,
false,
false);
78 DisplayMenu->
SetItem(
"", 4,
false,
false);
79 DisplayMenu->
SetItem(
"", 5,
false,
false);
81 DisplayMenu->
SetItem(
tr(
"Phase 2: Learning specific key codes"), 2,
false,
false);
83 while (NewKey !=
kNone) {
87 for (
eKeys k = NewKey; k == NewKey; ) {
91 case kUp:
if (NewKey >
kUp) {
92 NewKey =
eKeys(NewKey - 1);
94 if (last && last->
Key() == NewKey)
98 case kDown: DisplayMenu->
SetItem(
tr(
"Press 'Up' to confirm"), 4,
false,
false);
99 DisplayMenu->
SetItem(
tr(
"Press 'Down' to continue"), 5,
false,
false);
100 DisplayMenu->
SetItem(
"", 6,
false,
false);
101 DisplayMenu->
SetItem(
"", 7,
false,
false);
102 DisplayMenu->
SetItem(
"", 8,
false,
false);
103 DisplayMenu->
Flush();
107 DisplayMenu->
Clear();
110 else if (Key ==
kDown) {
111 DisplayMenu->
SetItem(
"", 5,
false,
false);
119 case kNone:
if (NewCode) {
122 NewKey =
eKeys(NewKey + 1);
130 DisplayMenu->
SetItem(
tr(
"(press 'Up' to go back)"), 6,
false,
false);
132 DisplayMenu->
SetItem(
"", 6,
false,
false);
134 DisplayMenu->
SetItem(
tr(
"(press 'Down' to end key definition)"), 7,
false,
false);
136 DisplayMenu->
SetItem(
"", 7,
false,
false);
138 DisplayMenu->
SetItem(
tr(
"(press 'Menu' to skip this key)"), 8,
false,
false);
140 DisplayMenu->
SetItem(
"", 8,
false,
false);
150 if (!Remote->Ready()) {
151 esyslog(
"ERROR: remote control %s not ready!", Remote->Name());
154 bool known =
Keys.KnowsRemote(Remote->Name());
155 dsyslog(
"remote control %s - %s", Remote->Name(), known ?
"keys known" :
"learning keys");
158 sd_notify(0,
"READY=1\nSTATUS=Learning keys...");
163 snprintf(Headline,
sizeof(Headline),
tr(
"Learning Remote Control Keys"));
166 DisplayMenu->
SetItem(Remote->Name(), 0,
false,
false);
168 bool rc =
QueryKeys(Remote, DisplayMenu);
170 DisplayMenu->
Clear();
175 DisplayMenu->
SetItem(Remote->Name(), 0,
false,
false);
176 DisplayMenu->
SetItem(
tr(
"Phase 3: Saving key codes"), 2,
false,
false);
177 DisplayMenu->
SetItem(
tr(
"Press 'Up' to save, 'Down' to cancel"), 4,
false,
false);
185 else if (key ==
kDown) {
static void SleepMs(int TimeoutMs)
Creates a cCondWait object and uses it to sleep for TimeoutMs milliseconds, immediately giving up the...
bool Confirm(const char *s, int Seconds=10, bool WaitForTimeout=false)
bool QueryKeys(cRemote *Remote, cSkinDisplayMenu *DisplayMenu)
eKeys GetKey(bool Wait=true)
eKeys Wait(int Seconds=0, bool KeepChar=false)
static const char * ToString(eKeys Key, bool Translate=false)
static void SetLearning(cRemote *Learning)
static eKeys Get(int WaitMs=1000, char **UnknownCode=NULL)
bool Put(uint64_t Code, bool Repeat=false, bool Release=false)
static bool HasKeys(void)
virtual bool Initialize(void)
virtual void Flush(void)
Actually draws the OSD display to the output device.
static cString sprintf(const char *fmt,...) __attribute__((format(printf