#include "option.h"
/*
-bool AbstractOption::loadOptionsfromServer(VDR* vdr)
+bool AbstractOption::loadOptionsFromServer(VDR* vdr)
{
return true;
}
{
public:
// inline definition allows plugins architecture for audio video
- virtual bool loadOptionsfromServer(VDR*) { return true; };
+ virtual bool loadOptionsFromServer(VDR*) { return true; };
virtual bool saveOptionstoServer() { return true; };
virtual bool addOptionPagesToWTB(WTabBar*) { return true; };
virtual bool addOptionsToPanes(int /* panenumber */, Options*, WOptionPane*) { return true; };
return 1;
}
-bool AudioOMX::loadOptionsfromServer(VDR* vdr)
+bool AudioOMX::loadOptionsFromServer(VDR* vdr)
{
Log::getInstance()->log("Audio", Log::DEBUG, "AudioOMX config load");
char *name=vdr->configLoad("AudioOMX","AC3DecodingMode");
UCHAR getLastAType() {return lastAType;}
- bool loadOptionsfromServer(VDR* vdr);
+ bool loadOptionsFromServer(VDR* vdr);
bool saveOptionstoServer();
bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);
bool handleOptionChanges(Option* option);
filtmap->Release();
}
-bool AudioWin::loadOptionsfromServer(VDR* vdr)
+bool AudioWin::loadOptionsFromServer(VDR* vdr)
{
char *name=vdr->configLoad("DirectShow","AudioFilter");
int unMute();
int write(char *buf, int len);
- bool loadOptionsfromServer(VDR* vdr);
+ bool loadOptionsFromServer(VDR* vdr);
bool saveOptionstoServer();
bool addOptionPagesToWTB(WTabBar *wtb);
Wol::getInstance()->setEnabled(true);
}
/* device dependend config */
- audio->loadOptionsfromServer(vdr);
- video->loadOptionsfromServer(vdr);
- inputMan->loadOptionsfromServer(vdr);
+ audio->loadOptionsFromServer(vdr);
+ video->loadOptionsFromServer(vdr);
+ inputMan->loadOptionsFromServer(vdr);
video->executePendingModeChanges();
// config done
#include "inputman.h"
#include "input.h"
-Input::Input()
+void Input::ResetToDefault()
{
- learnmode = NOLEARNMODE;
+ translist.clear();
+ InitHWCListwithDefaults();
}
-Input::~Input()
+UCHAR Input::TranslateHWC(int code)
{
-}
+ UCHAR ret = TranslateHWCFixed(code);
-void Input::EnterLearningMode(UCHAR command)
-{
- learnmode = command; //Armed
-}
+ if (ret != NA_UNKNOWN) // Found in fixed list
+ {
+ InputMan::getInstance()->cancelLearnMode(); // Just in case
+ return ret;
+ }
-void Input::ResetToDefault()
-{
- translist.clear();
- InitHWCListwithDefaults();
+ return TranslateHWCList(code);
}
UCHAR Input::TranslateHWCList(int code)
{
- if (learnmode != NOLEARNMODE)
+ if (learnMode != NOLEARNMODE)
{
- setHWCtoCommand(code, learnmode);
- learnmode = NOLEARNMODE;
+ setHWCtoCommand(code, learnMode);
+ InputMan::getInstance()->cancelLearnMode();
return NA_LEARN;
}
RemoteTranslationList::iterator it = translist.find(code);
}
}
-UCHAR Input::TranslateHWC(int code)
-{
- UCHAR ret = TranslateHWCFixed(code);
- if (ret == NA_UNKNOWN)
- {
- ret = TranslateHWCList(code);
- }
- else
- {
- learnmode = NOLEARNMODE;
- }
-
- if (ret == NA_UNKNOWN)
- {
- return NA_UNKNOWN;
- }
- return ret;
-}
-
void Input::setHWCtoCommand(ULLONG hcw, UCHAR command)
{
translist[hcw] = command;
}
-void Input::unsetHWC(ULLONG hcw)
+void Input::unsetHWC(ULLONG hcw) // FIXME never used
{
translist.erase(hcw);
}
{
ULONG number=0;
if (sscanf(cfg,"%ld",&number) != 1) return;
- Log::getInstance()->log("Input", Log::INFO, "Config General/Remote keys num keys %d",number);
+ Log::getInstance()->log("Input", Log::INFO, "Config Input/Remote keys num keys %d",number);
char keybuf[1024];
for (ULONG i = 0; i < number; i++) {
sprintf(keybuf, "RemoteKey%lu", i);
- const char *keytrans = vdr->configLoad("General", keybuf);
+ const char *keytrans = vdr->configLoad(modName(), keybuf);
if (keytrans) {
ULONG ul1, ul2;
ULONG uc;
}
}
+// FIXME - These two still use the bit shifting stuff. Leave it for now, might still
+// need it for Windows
+
void Input::SaveKeysConfig()
{
int number=0;
sprintf(buffer,"%08lXI%08lXK%02X",
(ULONG)it->first ,(ULONG) (it->first >> 32), it->second);
sprintf(keybuf,"RemoteKey%d",number);
- VDR::getInstance()->configSave("General",keybuf,buffer);
+ VDR::getInstance()->configSave(modName(), keybuf, buffer);
number++;
}
sprintf(buffer,"%d",number);
- VDR::getInstance()->configSave("General","RemoteKeyNum",buffer);
+ VDR::getInstance()->configSave(modName(), "RemoteKeyNum", buffer);
}
-
-// bool Input::addOptionPagesToWTB(WTabBar *wtb)
-// {
-// WRemoteConfig* wrc = new WRemoteConfig();
-// wtb->addTab(tr("Remote Control"), wrc);
-// return true;
-// }
-
-bool Input::loadOptionsfromServer(VDR* vdr)
+bool Input::loadOptionsFromServer(VDR* vdr)
{
// Set remote keys
char * config;
- config = vdr->configLoad("General", "RemoteKeyNum");
+ config = vdr->configLoad(modName(), "RemoteKeyNum");
if (config)
{
- Log::getInstance()->log("Input", Log::INFO, "Config General/Remote keys load");
+ Log::getInstance()->log("Input", Log::INFO, "Config Input/Remote keys load");
LoadKeysConfig(vdr,config);
delete[] config;
}
else
{
- Log::getInstance()->log("Input", Log::INFO, "Config General/Remote keys not found");
+ Log::getInstance()->log("Input", Log::INFO, "Config Input/Remote keys not found");
InitHWCListwithDefaults();
}
return true;
m->message = Message::INPUT_EVENT;
m->to = Command::getInstance();
m->from = this;
- m->parameter = TranslateHWC(key);
+ m->parameter = key;
MessageQueue::getInstance()->postMessage(m);
}
class Input: public AbstractOption
{
public:
- Input();
- virtual ~Input();
-
virtual bool start() { return false; }
virtual void stop() {}
// Abstract Option interface
- // virtual bool addOptionPagesToWTB(WTabBar *wtb);
- virtual bool loadOptionsfromServer(VDR* vdr);
+ virtual bool loadOptionsFromServer(VDR* vdr);
virtual bool saveOptionstoServer();
void setHWCtoCommand(ULLONG hcw, UCHAR command);
void unsetHWC(ULLONG hcw);
void LoadKeysConfig(VDR* vdr, const char* keynum);
void SaveKeysConfig();
- void EnterLearningMode(UCHAR command);
virtual bool init()=0;
virtual void shutdown()=0;
virtual void InitHWCListwithDefaults()=0;
std::string getAllHardwareKeyNamesAssignedToVompKey(UCHAR vompKey);
char* CommandTranslateStr(UCHAR command);
- void EnterLearnMode(UCHAR command);
+ void EnterLearnMode(UCHAR /* command */ ) {}; // Override and set lernMode to command
+ void cancelLearnMode() { learnMode = NOLEARNMODE; }
void ResetToDefault();
virtual std::string getHardwareKeyName(int hardwareKey)=0;
const static UCHAR POWEROFF = 203;
protected:
+ virtual const char* modName()=0;
+ RemoteTranslationList translist;
+ int learnMode{NOLEARNMODE};
+
virtual UCHAR TranslateHWCFixed(int code)=0;
UCHAR TranslateHWCList(int code);
UCHAR TranslateHWC(int code);
-
- ULONG learnmode;
- RemoteTranslationList translist;
void sendInputKey(int key);
};
cec_adap->AudioToggleMute();
}
-bool InputCEC::loadOptionsfromServer(VDR* vdr)
+bool InputCEC::loadOptionsFromServer(VDR* vdr)
{
// Set remote keys
char* name;
else if (STRCASECMP(name, "Cec") == 0) cechandlesvolume = true;
delete[] name;
}
- return Input::loadOptionsfromServer(vdr);
+ return Input::loadOptionsFromServer(vdr);
}
bool InputCEC::saveOptionstoServer()
void volumeMute();
void changePowerState(bool poweron);
- bool loadOptionsfromServer(VDR* vdr);
+ bool loadOptionsFromServer(VDR* vdr);
bool saveOptionstoServer();
bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);
bool handleOptionChanges(Option* option);
const char* getHardCodedHardwareKeyNamesForVompKey(UCHAR vompKey);
private:
+ constexpr static char* myModName = "InputCEC";
+ const char* modName() { return myModName; }
void InitKeymap();
void InitHWCListwithDefaults();
UCHAR TranslateHWCFixed(int code);
void InputLinux::InitHWCListwithDefaults()
{
+ Log::getInstance()->log("InputLinux", Log::INFO, "InitHWCListwithDefaults");
+
// Processing VK_Messages
translist[KEY_9] = NINE;
translist[KEY_8] = EIGHT;
return retval;
}
+void InputLinux::EnterLearningMode(UCHAR vompKey)
+{
+ learnMode = vompKey; // Armed
+}
+
bool InputLinux::start()
{
Log::getInstance()->log("Input", Log::INFO, "start called");
std::string getHardwareKeyName(int hardwareKey);
const char* getHardCodedHardwareKeyNamesForVompKey(UCHAR vompKey);
+ void EnterLearningMode(UCHAR vompKey);
bool start();
void stop();
private:
+ constexpr static char* myModName = "InputLinux";
+ const char* modName() { return myModName; }
+
int initted{};
void InitKeymap();
void InitHWCListwithDefaults();
UCHAR TranslateHWCFixed(int code);
-
std::vector<int> devices;
std::thread listenThread;
i1 = inputLinux->init();
if (!i1) { delete inputLinux; inputLinux = NULL; }
-// inputCEC = new InputCEC();
-// i2 = inputCEC->init();
-// if (!i2) { delete inputCEC; inputCEC = NULL; }
+ inputCEC = new InputCEC();
+ i2 = inputCEC->init();
+ if (!i2) { delete inputCEC; inputCEC = NULL; }
#endif
inputUDP = new InputUDP();
bool InputMan::addOptionPagesToWTB(WTabBar *wtb)
{
- //if (inputLinux) inputLinux->addOptionPagesToWTB(wtb);
- //if (inputCEC) inputCEC->addOptionPagesToWTB(wtb);
-
WRemoteConfig* wrc = new WRemoteConfig();
wtb->addTab(tr("Remote Control"), wrc);
return true; // FIXME
}
+bool InputMan::loadOptionsFromServer(VDR* vdr)
+{
+ if (inputLinux) inputLinux->loadOptionsFromServer(vdr);
+ if (inputCEC) inputCEC->loadOptionsFromServer(vdr);
+
+ return true; // FIXME
+}
+
bool InputMan::saveOptionstoServer()
{
if (inputLinux) inputLinux->saveOptionstoServer();
return keyNames;
}
+
+void InputMan::ResetToDefault()
+{
+ if (inputLinux) inputLinux->ResetToDefault();
+
+ if (inputCEC) inputCEC->ResetToDefault();
+
+ if (inputUDP) inputUDP->ResetToDefault();
+}
+
+void InputMan::EnterLearningMode(UCHAR vompKey)
+{
+ if (inputLinux) inputLinux->EnterLearningMode(vompKey);
+
+// if (inputCEC) inputCEC->EnterLearningMode(); FIXME - is there any such thing?
+}
+
+void InputMan::cancelLearnMode()
+{
+ if (inputLinux) inputLinux->cancelLearnMode();
+ if (inputCEC) inputCEC->cancelLearnMode();
+ if (inputUDP) inputUDP->cancelLearnMode();
+}
// Abstract Option interface
bool addOptionPagesToWTB(WTabBar* wtb);
bool addOptionsToPanes(int panenumber, Options* options, WOptionPane* pane);
+ bool loadOptionsFromServer(VDR*);
bool saveOptionstoServer();
static const char* getVompKeyName(UCHAR vompKey);
std::string getHardCodedHardwareKeyNamesForVompKey(UCHAR vompKey);
std::string getAllHardwareKeyNamesAssignedToVompKey(UCHAR vompKey);
+ void EnterLearningMode(UCHAR vompKey);
+ void cancelLearnMode();
+ void ResetToDefault();
+
private:
static InputMan* instance;
bool start();
void stop();
- // FIXME these 2..
+ // InputUDP doesn't do any translation stuff so just keep everything happy here
void InitHWCListwithDefaults() {};
UCHAR TranslateHWCFixed(int code) { return code; };
const char* getHardCodedHardwareKeyNamesForVompKey(UCHAR vompKey);
std::string getHardwareKeyName(int hardwareKey);
-
private:
+ constexpr static char* myModName = "InputUDP";
+ const char* modName() { return myModName; }
+
bool initted{};
DatagramSocket* ds{};
Log* log{};
}
-bool MediaOptions::loadOptionsfromServer(VDR* vdr)
+bool MediaOptions::loadOptionsFromServer(VDR* vdr)
{
return true;
}
public:
MediaOptions();
virtual ~MediaOptions();
- virtual bool loadOptionsfromServer(VDR* vdr);
+ virtual bool loadOptionsFromServer(VDR* vdr);
virtual bool saveOptionstoServer();
//this can be called without the pane being active
bool externSaveOptionstoServer();
-bool VideoOMX::loadOptionsfromServer(VDR* vdr)
+bool VideoOMX::loadOptionsFromServer(VDR* vdr)
{
Log::getInstance()->log("Video", Log::DEBUG, "VideoOMX config load");
char *name=vdr->configLoad("VideoOMX","SDDeinterlacing");
long long SetStartAudioOffset(long long curreftime, bool *rsync);
virtual void ResetTimeOffsets();
- bool loadOptionsfromServer(VDR* vdr);
+ bool loadOptionsFromServer(VDR* vdr);
bool saveOptionstoServer();
bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);
bool handleOptionChanges(Option* option);
filtmap->Release();
}
-bool VideoWin::loadOptionsfromServer(VDR* vdr)
+bool VideoWin::loadOptionsFromServer(VDR* vdr)
{
char *name=vdr->configLoad("DirectShow","VideoFilter");
// ULLONG frameNumberToTimecode(ULONG framenumber);
ULLONG getCurrentTimestamp();
- bool loadOptionsfromServer(VDR* vdr);
+ bool loadOptionsFromServer(VDR* vdr);
bool saveOptionstoServer();
bool addOptionPagesToWTB(WTabBar *wtb);
bool addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane);
case Input::OK:
{
learnmode = true;
- // remote->EnterLearningMode(sl.getCurrentOptionData()); FIXME
+ InputMan::getInstance()->EnterLearningMode(sl.getCurrentOptionData());
return 1;
}
case Input::BACK:
}
case Input::MENU:
{
- // remote->ResetToDefault(); FIXME
+ InputMan::getInstance()->ResetToDefault();
initSelectList(false);
return 1;
}