/*
- Copyright 2004-2005 Chris Tallon; 2012 Marten Richter
+ Copyright 2004-2020 Chris Tallon; 2012 Marten Richter
This file is part of VOMP.
along with VOMP. If not, see <https://www.gnu.org/licenses/>.
*/
-#include "remotelinux.h"
-#include "i18n.h"
-#include "vdr.h"
-#include "woptionpane.h"
-
#include <linux/input.h>
#include <sys/types.h>
-
-
-#include <errno.h>
-
#include <sys/stat.h>
#include <fcntl.h>
+#include <errno.h>
#include <cstdio>
#include <iostream>
#include <bcm_host.h>
+#include <libcec/cec.h>
+#include <libcec/cecloader.h>
using namespace CEC;
-#include <libcec/cecloader.h>
+#include "i18n.h"
+#include "vdr.h"
+#include "woptionpane.h"
+#include "message.h"
+#include "messagequeue.h"
+#include "command.h" // FIXME - get rid after predefined message targets
+#include "remotelinux.h"
#define W_G_HCW(type,code) ((static_cast<ULLONG>(type) << 32) | code)
RemoteLinux::RemoteLinux()
{
- initted = 0;
- curcec=0;
- hascurcec=false;
- haspower=false;
- powerkey=0;
- signal=false;
- cec_adap=NULL;
- num_loop=0;
- cechandlesvolume=false;
-
}
RemoteLinux::~RemoteLinux()
{
- for (unsigned int i=0; i<devices.size();i++) {
- close(devices[i]);
- }
+ for (unsigned int i = 0; i < devices.size(); i++)
+ {
+ close(devices[i]);
+ }
}
#define test_bit(input,b) ((1 << ((b) % 8))&(input)[b / 8] )
-
-int RemoteLinux::init(const char* devName)
+int RemoteLinux::init(const char*)
{
if (initted) return 0;
initted = 1;
InitKeymap();
- for (int eventid=0;eventid<100;eventid++){
- char buffer[1024];
- sprintf(buffer,"/dev/input/event%d",eventid);
-
-
- struct stat test_buf;
- if (stat(buffer,&test_buf)==0) {
- Log::getInstance()->log("Remote", Log::NOTICE, "Probe /dev/input/event%d",eventid);
- // file exists
- unsigned long ev_type=0;
- int new_fd=open(buffer,O_RDONLY);
- if (new_fd<0) {
- Log::getInstance()->log("Remote", Log::NOTICE, "Can not open /dev/input/event%d",eventid);
- continue;
- }
- if (ioctl(new_fd, EVIOCGBIT(0, EV_MAX), &ev_type) < 0) {
- Log::getInstance()->log("Remote", Log::NOTICE, "Ioctl failed /dev/input/event%d %d",eventid,errno);
- close(new_fd);
- }
- //Now test if it generates keyboard presses
- if (test_bit((char*)&ev_type , EV_KEY)) {
- Log::getInstance()->log("Remote", Log::NOTICE, "Add /dev/input/event%d to List",eventid);
- devices.push_back(new_fd);
- } else {
- close(new_fd);
- }
-
-
-
-
- }
-
-
-
-
+ for (int eventid = 0; eventid < 100; eventid++)
+ {
+ char buffer[1024];
+ sprintf(buffer,"/dev/input/event%d", eventid);
+ struct stat test_buf;
+ if (stat(buffer, &test_buf) == 0)
+ {
+ Log::getInstance()->log("Remote", Log::NOTICE, "Probe /dev/input/event%d", eventid);
+ // file exists
+ unsigned long ev_type = 0;
+ int new_fd = open(buffer, O_RDONLY);
+ if (new_fd < 0)
+ {
+ Log::getInstance()->log("Remote", Log::NOTICE, "Can not open /dev/input/event%d", eventid);
+ continue;
+ }
+
+ if (ioctl(new_fd, EVIOCGBIT(0, EV_MAX), &ev_type) < 0)
+ {
+ Log::getInstance()->log("Remote", Log::NOTICE, "Ioctl failed /dev/input/event%d %d", eventid, errno);
+ close(new_fd);
+ }
+
+ //Now test if it generates keyboard presses
+ if (test_bit(reinterpret_cast<char*>(&ev_type), EV_KEY))
+ {
+ Log::getInstance()->log("Remote", Log::NOTICE, "Add /dev/input/event%d to List", eventid);
+ devices.push_back(new_fd);
+ }
+ else
+ {
+ close(new_fd);
+ }
+ }
}
return initCec();
}
}
}
-
+/*
UCHAR RemoteLinux::getButtonPress(int waitType) {
- /* how = 0 - block
+ / * how = 0 - block
how = 1 - start new wait
how = 2 - continue wait
how = 3 - no wait
- */
+ * /
//in units of 40 ms
+ Log::getInstance()->log("Remote", Log::NOTICE, "get button press");
int retval;
fd_set readfds;
FD_SET(cur_fd, &readfds);
}
+ FD_SET(pfds[0], &readfds);
+ maxfd = max(pfds[0], maxfd);
+
retval = select(maxfd + 1, &readfds, NULL, NULL, &tv);
tv.tv_sec = 0;
tv.tv_usec = 40000;
if (retval == -1) {
Log::getInstance()->log("Remote", Log::NOTICE, "na_signal");
return NA_SIGNAL;
-
}
+
+ if (FD_ISSET(pfds[0], &readfds))
+ {
+ // quit signal
+ Log::getInstance()->log("Remote", Log::NOTICE, "pfds quit");
+ return NA_SIGNAL; // use NA_SIGNAL for now
+ }
+
for (unsigned int i = 0; i < devices.size(); i++) {
int cur_fd = devices[i];
if (FD_ISSET(cur_fd, &readfds)) {
return NA_UNKNOWN;
}
-
-void RemoteLinux::clearBuffer()
-{
- UCHAR buttonpress=getButtonPress(3);
- while(buttonpress != NA_NONE && buttonpress!=NA_UNKNOWN){
- buttonpress=getButtonPress(3);
- };
-}
+*/
UCHAR RemoteLinux::TranslateHWCFixed(ULLONG code)
{
switch (code)
{
- case W_G_HCW(W_HCW_KC,KEY_DOWN):
+ case W_G_HCW(W_HCW_KC, KEY_DOWN):
return DOWN;
- case W_G_HCW(W_HCW_KC,KEY_UP):
+ case W_G_HCW(W_HCW_KC, KEY_UP):
return UP;
- case W_G_HCW(W_HCW_KC,KEY_LEFT):
+ case W_G_HCW(W_HCW_KC, KEY_LEFT):
return LEFT;
- case W_G_HCW(W_HCW_KC,KEY_RIGHT):
+ case W_G_HCW(W_HCW_KC, KEY_RIGHT):
return RIGHT;
- case W_G_HCW(W_HCW_KC,KEY_M):
- case W_G_HCW(W_HCW_KC,KEY_MEDIA):
+ case W_G_HCW(W_HCW_KC, KEY_M):
+ case W_G_HCW(W_HCW_KC, KEY_MEDIA):
return MENU;
- case W_G_HCW(W_HCW_KC,KEY_BACKSPACE):
- case W_G_HCW(W_HCW_KC,KEY_EXIT):
+ case W_G_HCW(W_HCW_KC, KEY_BACKSPACE):
+ case W_G_HCW(W_HCW_KC, KEY_EXIT):
return BACK;
- case W_G_HCW(W_HCW_KC,KEY_ENTER):
- case W_G_HCW(W_HCW_KC,KEY_SPACE):
- case W_G_HCW(W_HCW_KC,KEY_OK):
+ case W_G_HCW(W_HCW_KC, KEY_ENTER):
+ case W_G_HCW(W_HCW_KC, KEY_SPACE):
+ case W_G_HCW(W_HCW_KC, KEY_OK):
return OK;
+
//CEC
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_DOWN):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_DOWN):
return DOWN;
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_UP):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_UP):
return UP;
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_LEFT):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_LEFT):
return LEFT;
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_RIGHT):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_RIGHT):
return RIGHT;
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_ROOT_MENU):
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_CONTENTS_MENU):
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_SETUP_MENU):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_ROOT_MENU):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_CONTENTS_MENU):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_SETUP_MENU):
return MENU;
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_EXIT ):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_EXIT ):
return BACK;
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_ENTER):
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_SELECT):
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_AN_RETURN):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_ENTER):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_SELECT):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_AN_RETURN):
return OK;
- case W_G_HCW(W_HCW_KC,KEY_SLEEP):
- case W_G_HCW(W_HCW_KC,KEY_POWER):
- case W_G_HCW(W_HCW_KC,KEY_ESC):
- case W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_POWER):
+ case W_G_HCW(W_HCW_KC, KEY_SLEEP):
+ case W_G_HCW(W_HCW_KC, KEY_POWER):
+ case W_G_HCW(W_HCW_KC, KEY_ESC):
+ case W_G_HCW(W_HCW_CEC, CEC_USER_CONTROL_CODE_POWER):
case POWER:
return POWER;
default:
const char*RemoteLinux::HardcodedTranslateStr(UCHAR command)
{
- switch (command)
- {
+ switch (command)
+ {
case DOWN:
- return tr("Down");
+ return tr("Down");
case UP:
- return tr("Up");
+ return tr("Up");
case LEFT:
- return tr("Left");
+ return tr("Left");
case RIGHT:
- return tr("Right");
+ return tr("Right");
case MENU:
- return tr("M");
+ return tr("M");
case BACK:
- return tr("Backspace, Back");
+ return tr("Backspace, Back");
case OK:
- return tr("Return, Space");
+ return tr("Return, Space");
default:
- return NULL;
- };
-
+ return NULL;
+ }
}
void RemoteLinux::InitHWCListwithDefaults()
{
- //Processing VK_Messages
- translist[W_G_HCW(W_HCW_KC,KEY_9)] = NINE;
- translist[W_G_HCW(W_HCW_KC,KEY_8)] = EIGHT;
- translist[W_G_HCW(W_HCW_KC,KEY_7)] = SEVEN;
- translist[W_G_HCW(W_HCW_KC,KEY_6)] = SIX;
- translist[W_G_HCW(W_HCW_KC,KEY_5)] = FIVE;
- translist[W_G_HCW(W_HCW_KC,KEY_4)] = FOUR;
- translist[W_G_HCW(W_HCW_KC,KEY_3)] = THREE;
- translist[W_G_HCW(W_HCW_KC,KEY_2)] = TWO;
- translist[W_G_HCW(W_HCW_KC,KEY_1)] = ONE;
- translist[W_G_HCW(W_HCW_KC,KEY_0)] = ZERO;
- translist[W_G_HCW(W_HCW_KC,KEY_KPDOT)] = STAR;
- // translist[W_G_HCW(W_HCW_KC,KEY_#)] = HASH;
-
- translist[W_G_HCW(W_HCW_KC,KEY_KP9)] = NINE;
- translist[W_G_HCW(W_HCW_KC,KEY_KP8)] = EIGHT;
- translist[W_G_HCW(W_HCW_KC,KEY_KP7)] = SEVEN;
- translist[W_G_HCW(W_HCW_KC,KEY_KP6)] = SIX;
- translist[W_G_HCW(W_HCW_KC,KEY_KP5)] = FIVE;
- translist[W_G_HCW(W_HCW_KC,KEY_KP4)] = FOUR;
- translist[W_G_HCW(W_HCW_KC,KEY_KP3)] = THREE;
- translist[W_G_HCW(W_HCW_KC,KEY_KP2)] = TWO;
- translist[W_G_HCW(W_HCW_KC,KEY_KP1)] = ONE;
- translist[W_G_HCW(W_HCW_KC,KEY_KP0)] = ZERO;
-
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_9)] = NINE;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_8)] = EIGHT;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_7)] = SEVEN;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_6)] = SIX;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_5)] = FIVE;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_4)] = FOUR;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_3)] = THREE;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_2)] = TWO;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_1)] = ONE;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_0)] = ZERO;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_STAR)] = STAR;
- translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_POUND)] = HASH;
-
-
- translist[W_G_HCW(W_HCW_KC,KEY_J)] = GO; //j for JUMP TO instead of go to
- translist[W_G_HCW(W_HCW_KC,KEY_R)] = RED;
- translist[W_G_HCW(W_HCW_KC,KEY_G)] = GREEN;
- translist[W_G_HCW(W_HCW_KC,KEY_Y)] = YELLOW;
- translist[W_G_HCW(W_HCW_KC,KEY_B)] = BLUE;
- //Processing Remote Style Messages
- translist[W_G_HCW(W_HCW_KC,KEY_GREEN)] = GREEN;
- translist[W_G_HCW(W_HCW_KC,KEY_RED)] = RED;
- translist[W_G_HCW(W_HCW_KC,KEY_YELLOW)] = YELLOW;
- translist[W_G_HCW(W_HCW_KC,KEY_BLUE)] = BLUE;
- translist[W_G_HCW(W_HCW_KC,KEY_MENU)] = MENU;
-
- translist[W_G_HCW(W_HCW_KC,KEY_RECORD)] = RECORD;
- translist[W_G_HCW(W_HCW_KC,KEY_PLAY)] = PLAY; //Playback Televison
- translist[W_G_HCW(W_HCW_KC,KEY_PAUSE)] = PAUSE;
- translist[W_G_HCW(W_HCW_KC,KEY_STOP)] = STOP;
- translist[W_G_HCW(W_HCW_KC,KEY_PLAYPAUSE)] = PLAYPAUSE;
- translist[W_G_HCW(W_HCW_KC,KEY_P)] = PLAYPAUSE;
- translist[W_G_HCW(W_HCW_KC,KEY_NEXT)] = SKIPFORWARD;
- translist[W_G_HCW(W_HCW_KC,KEY_F2)] = SKIPFORWARD;
- translist[W_G_HCW(W_HCW_KC,KEY_PREVIOUS)] = SKIPBACK;
- translist[W_G_HCW(W_HCW_KC,KEY_F1)] = SKIPBACK;
- translist[W_G_HCW(W_HCW_KC,KEY_FORWARD)] = FORWARD;
- translist[W_G_HCW(W_HCW_KC,KEY_FASTFORWARD)] = FORWARD;
- translist[W_G_HCW(W_HCW_KC,KEY_F)] = FORWARD;
- translist[W_G_HCW(W_HCW_KC,KEY_BACK)] = REVERSE;
- translist[W_G_HCW(W_HCW_KC,KEY_REWIND)] = REVERSE;
- translist[W_G_HCW(W_HCW_KC,KEY_T)] = REVERSE;
- translist[W_G_HCW(W_HCW_KC,KEY_MUTE)] = MUTE;
- translist[W_G_HCW(W_HCW_KC,KEY_F8)] = MUTE;
- translist[W_G_HCW(W_HCW_KC,KEY_F10)] = VOLUMEUP;
- translist[W_G_HCW(W_HCW_KC,KEY_F9)] = VOLUMEDOWN;
- translist[W_G_HCW(W_HCW_KC,KEY_VOLUMEUP)] = VOLUMEUP;
- translist[W_G_HCW(W_HCW_KC,KEY_VOLUMEDOWN)] = VOLUMEDOWN;
- translist[W_G_HCW(W_HCW_KC,KEY_CHANNELUP)] = CHANNELUP;
- translist[W_G_HCW(W_HCW_KC,KEY_CHANNELDOWN)] = CHANNELDOWN;
- translist[W_G_HCW(W_HCW_KC,KEY_PAGEUP)] = CHANNELUP;
- translist[W_G_HCW(W_HCW_KC,KEY_PAGEDOWN)] = CHANNELDOWN;
-
-
- //Processing CEC_Messages
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER9)] = NINE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER8)] = EIGHT;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER7)] = SEVEN;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER6)] = SIX;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER5)] = FIVE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER4)] = FOUR;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER3)] = THREE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER2)] = TWO;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER1)] = ONE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER0)] = ZERO;
- //translist[W_G_HCW(W_HCW_CEC,KEY_KPDOT)] = STAR;
-
-
-
- //translist[W_G_HCW(W_HCW_CEC,KEY_J)] = GO; //j for JUMP TO instead of go to
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F2_RED)] = RED;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F3_GREEN)] = GREEN;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F4_YELLOW)] = YELLOW;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F1_BLUE)] = BLUE;
- //Processing Remote Style Messages
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_FAVORITE_MENU)] = MENU;
-
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_RECORD)] = RECORD;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_PLAY)] = PLAY; //Playback Televison
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_PAUSE)] = PAUSE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_STOP)] = STOP;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION)] = PLAYPAUSE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_FORWARD)] = SKIPFORWARD;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_BACKWARD)] = SKIPBACK;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_FAST_FORWARD )] = FORWARD;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_REWIND)] = REVERSE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_MUTE)] = MUTE;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_VOLUME_UP)] = VOLUMEUP;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_VOLUME_DOWN)] = VOLUMEDOWN;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_CHANNEL_UP )] = CHANNELUP;
- translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_CHANNEL_DOWN)] = CHANNELDOWN;
-
+ // Processing VK_Messages
+ translist[W_G_HCW(W_HCW_KC,KEY_9)] = NINE;
+ translist[W_G_HCW(W_HCW_KC,KEY_8)] = EIGHT;
+ translist[W_G_HCW(W_HCW_KC,KEY_7)] = SEVEN;
+ translist[W_G_HCW(W_HCW_KC,KEY_6)] = SIX;
+ translist[W_G_HCW(W_HCW_KC,KEY_5)] = FIVE;
+ translist[W_G_HCW(W_HCW_KC,KEY_4)] = FOUR;
+ translist[W_G_HCW(W_HCW_KC,KEY_3)] = THREE;
+ translist[W_G_HCW(W_HCW_KC,KEY_2)] = TWO;
+ translist[W_G_HCW(W_HCW_KC,KEY_1)] = ONE;
+ translist[W_G_HCW(W_HCW_KC,KEY_0)] = ZERO;
+ translist[W_G_HCW(W_HCW_KC,KEY_KPDOT)] = STAR;
+ // translist[W_G_HCW(W_HCW_KC,KEY_#)] = HASH;
+
+ translist[W_G_HCW(W_HCW_KC,KEY_KP9)] = NINE;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP8)] = EIGHT;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP7)] = SEVEN;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP6)] = SIX;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP5)] = FIVE;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP4)] = FOUR;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP3)] = THREE;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP2)] = TWO;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP1)] = ONE;
+ translist[W_G_HCW(W_HCW_KC,KEY_KP0)] = ZERO;
+
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_9)] = NINE;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_8)] = EIGHT;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_7)] = SEVEN;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_6)] = SIX;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_5)] = FIVE;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_4)] = FOUR;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_3)] = THREE;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_2)] = TWO;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_1)] = ONE;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_0)] = ZERO;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_STAR)] = STAR;
+ translist[W_G_HCW(W_HCW_KC,KEY_NUMERIC_POUND)] = HASH;
+
+
+ translist[W_G_HCW(W_HCW_KC,KEY_J)] = GO; //j for JUMP TO instead of go to
+ translist[W_G_HCW(W_HCW_KC,KEY_R)] = RED;
+ translist[W_G_HCW(W_HCW_KC,KEY_G)] = GREEN;
+ translist[W_G_HCW(W_HCW_KC,KEY_Y)] = YELLOW;
+ translist[W_G_HCW(W_HCW_KC,KEY_B)] = BLUE;
+ //Processing Remote Style Messages
+ translist[W_G_HCW(W_HCW_KC,KEY_GREEN)] = GREEN;
+ translist[W_G_HCW(W_HCW_KC,KEY_RED)] = RED;
+ translist[W_G_HCW(W_HCW_KC,KEY_YELLOW)] = YELLOW;
+ translist[W_G_HCW(W_HCW_KC,KEY_BLUE)] = BLUE;
+ translist[W_G_HCW(W_HCW_KC,KEY_MENU)] = MENU;
+
+ translist[W_G_HCW(W_HCW_KC,KEY_RECORD)] = RECORD;
+ translist[W_G_HCW(W_HCW_KC,KEY_PLAY)] = PLAY; //Playback Televison
+ translist[W_G_HCW(W_HCW_KC,KEY_PAUSE)] = PAUSE;
+ translist[W_G_HCW(W_HCW_KC,KEY_STOP)] = STOP;
+ translist[W_G_HCW(W_HCW_KC,KEY_PLAYPAUSE)] = PLAYPAUSE;
+ translist[W_G_HCW(W_HCW_KC,KEY_P)] = PLAYPAUSE;
+ translist[W_G_HCW(W_HCW_KC,KEY_NEXT)] = SKIPFORWARD;
+ translist[W_G_HCW(W_HCW_KC,KEY_F2)] = SKIPFORWARD;
+ translist[W_G_HCW(W_HCW_KC,KEY_PREVIOUS)] = SKIPBACK;
+ translist[W_G_HCW(W_HCW_KC,KEY_F1)] = SKIPBACK;
+ translist[W_G_HCW(W_HCW_KC,KEY_FORWARD)] = FORWARD;
+ translist[W_G_HCW(W_HCW_KC,KEY_FASTFORWARD)] = FORWARD;
+ translist[W_G_HCW(W_HCW_KC,KEY_F)] = FORWARD;
+ translist[W_G_HCW(W_HCW_KC,KEY_BACK)] = REVERSE;
+ translist[W_G_HCW(W_HCW_KC,KEY_REWIND)] = REVERSE;
+ translist[W_G_HCW(W_HCW_KC,KEY_T)] = REVERSE;
+ translist[W_G_HCW(W_HCW_KC,KEY_MUTE)] = MUTE;
+ translist[W_G_HCW(W_HCW_KC,KEY_F8)] = MUTE;
+ translist[W_G_HCW(W_HCW_KC,KEY_F10)] = VOLUMEUP;
+ translist[W_G_HCW(W_HCW_KC,KEY_F9)] = VOLUMEDOWN;
+ translist[W_G_HCW(W_HCW_KC,KEY_VOLUMEUP)] = VOLUMEUP;
+ translist[W_G_HCW(W_HCW_KC,KEY_VOLUMEDOWN)] = VOLUMEDOWN;
+ translist[W_G_HCW(W_HCW_KC,KEY_CHANNELUP)] = CHANNELUP;
+ translist[W_G_HCW(W_HCW_KC,KEY_CHANNELDOWN)] = CHANNELDOWN;
+ translist[W_G_HCW(W_HCW_KC,KEY_PAGEUP)] = CHANNELUP;
+ translist[W_G_HCW(W_HCW_KC,KEY_PAGEDOWN)] = CHANNELDOWN;
+
+
+ //Processing CEC_Messages
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER9)] = NINE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER8)] = EIGHT;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER7)] = SEVEN;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER6)] = SIX;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER5)] = FIVE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER4)] = FOUR;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER3)] = THREE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER2)] = TWO;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER1)] = ONE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_NUMBER0)] = ZERO;
+ //translist[W_G_HCW(W_HCW_CEC,KEY_KPDOT)] = STAR;
+
+
+
+ //translist[W_G_HCW(W_HCW_CEC,KEY_J)] = GO; //j for JUMP TO instead of go to
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F2_RED)] = RED;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F3_GREEN)] = GREEN;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F4_YELLOW)] = YELLOW;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_F1_BLUE)] = BLUE;
+ //Processing Remote Style Messages
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_FAVORITE_MENU)] = MENU;
+
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_RECORD)] = RECORD;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_PLAY)] = PLAY; //Playback Televison
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_PAUSE)] = PAUSE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_STOP)] = STOP;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION)] = PLAYPAUSE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_FORWARD)] = SKIPFORWARD;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_BACKWARD)] = SKIPBACK;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_FAST_FORWARD )] = FORWARD;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_REWIND)] = REVERSE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_MUTE)] = MUTE;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_VOLUME_UP)] = VOLUMEUP;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_VOLUME_DOWN)] = VOLUMEDOWN;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_CHANNEL_UP )] = CHANNELUP;
+ translist[W_G_HCW(W_HCW_CEC,CEC_USER_CONTROL_CODE_CHANNEL_DOWN)] = CHANNELDOWN;
}
#define NAMETRICK(pre, code) linux_keymap[pre ## code]= #code
void RemoteLinux::InitKeymap()
{
- for (int i=0;i<KEY_MAX+1;i++) {
- linux_keymap[i]=NULL;
- }
- NAMETRICK(KEY_,RESERVED);
- NAMETRICK(KEY_,ESC);
- NAMETRICK(KEY_,1);
- NAMETRICK(KEY_,2);
- NAMETRICK(KEY_,3);
- NAMETRICK(KEY_,4);
- NAMETRICK(KEY_,5);
- NAMETRICK(KEY_,6);
- NAMETRICK(KEY_,7);
- NAMETRICK(KEY_,8);
- NAMETRICK(KEY_,9);
- NAMETRICK(KEY_,0);
- NAMETRICK(KEY_,MINUS);
- NAMETRICK(KEY_,EQUAL);
- NAMETRICK(KEY_,BACKSPACE);
- NAMETRICK(KEY_,TAB);
- NAMETRICK(KEY_,Q);
- NAMETRICK(KEY_,W);
- NAMETRICK(KEY_,E);
- NAMETRICK(KEY_,R);
- NAMETRICK(KEY_,T);
- NAMETRICK(KEY_,Y);
- NAMETRICK(KEY_,U);
- NAMETRICK(KEY_,I);
- NAMETRICK(KEY_,O);
- NAMETRICK(KEY_,P);
- NAMETRICK(KEY_,LEFTBRACE);
- NAMETRICK(KEY_,RIGHTBRACE);
- NAMETRICK(KEY_,ENTER);
- NAMETRICK(KEY_,LEFTCTRL);
- NAMETRICK(KEY_,A);
- NAMETRICK(KEY_,S);
- NAMETRICK(KEY_,D);
- NAMETRICK(KEY_,F);
- NAMETRICK(KEY_,G);
- NAMETRICK(KEY_,H);
- NAMETRICK(KEY_,J);
- NAMETRICK(KEY_,K);
- NAMETRICK(KEY_,L);
- NAMETRICK(KEY_,SEMICOLON);
- NAMETRICK(KEY_,APOSTROPHE);
- NAMETRICK(KEY_,GRAVE);
- NAMETRICK(KEY_,LEFTSHIFT);
- NAMETRICK(KEY_,BACKSLASH);
- NAMETRICK(KEY_,Z);
- NAMETRICK(KEY_,X);
- NAMETRICK(KEY_,C);
- NAMETRICK(KEY_,V);
- NAMETRICK(KEY_,B);
- NAMETRICK(KEY_,N);
- NAMETRICK(KEY_,M);
- NAMETRICK(KEY_,COMMA);
- NAMETRICK(KEY_,DOT);
- NAMETRICK(KEY_,SLASH);
- NAMETRICK(KEY_,RIGHTSHIFT);
- NAMETRICK(KEY_,KPASTERISK);
- NAMETRICK(KEY_,LEFTALT);
- NAMETRICK(KEY_,SPACE);
- NAMETRICK(KEY_,CAPSLOCK);
- NAMETRICK(KEY_,F1);
- NAMETRICK(KEY_,F2);
- NAMETRICK(KEY_,F3);
- NAMETRICK(KEY_,F4);
- NAMETRICK(KEY_,F5);
- NAMETRICK(KEY_,F6);
- NAMETRICK(KEY_,F7);
- NAMETRICK(KEY_,F8);
- NAMETRICK(KEY_,F9);
- NAMETRICK(KEY_,F10);
- NAMETRICK(KEY_,NUMLOCK);
- NAMETRICK(KEY_,SCROLLLOCK);
- NAMETRICK(KEY_,KP7);
- NAMETRICK(KEY_,KP8);
- NAMETRICK(KEY_,KP9);
- NAMETRICK(KEY_,KPMINUS);
- NAMETRICK(KEY_,KP4);
- NAMETRICK(KEY_,KP5);
- NAMETRICK(KEY_,KP6);
- NAMETRICK(KEY_,KPPLUS);
- NAMETRICK(KEY_,KP1);
- NAMETRICK(KEY_,KP2);
- NAMETRICK(KEY_,KP3);
- NAMETRICK(KEY_,KP0);
- NAMETRICK(KEY_,KPDOT);
- NAMETRICK(KEY_,F11);
- NAMETRICK(KEY_,F12);
- NAMETRICK(KEY_,KPENTER);
- NAMETRICK(KEY_,RIGHTCTRL);
- NAMETRICK(KEY_,KPSLASH);
- NAMETRICK(KEY_,SYSRQ);
- NAMETRICK(KEY_,RIGHTALT);
- NAMETRICK(KEY_,LINEFEED);
- NAMETRICK(KEY_,HOME);
- NAMETRICK(KEY_,UP);
- NAMETRICK(KEY_,PAGEUP);
- NAMETRICK(KEY_,LEFT);
- NAMETRICK(KEY_,RIGHT);
- NAMETRICK(KEY_,END);
- NAMETRICK(KEY_,DOWN);
- NAMETRICK(KEY_,PAGEDOWN);
- NAMETRICK(KEY_,INSERT);
- NAMETRICK(KEY_,DELETE);
- NAMETRICK(KEY_,MACRO);
- NAMETRICK(KEY_,MUTE);
- NAMETRICK(KEY_,VOLUMEDOWN);
- NAMETRICK(KEY_,VOLUMEUP);
- NAMETRICK(KEY_,POWER);
- NAMETRICK(KEY_,KPEQUAL);
- NAMETRICK(KEY_,KPPLUSMINUS);
- NAMETRICK(KEY_,PLAY);
- NAMETRICK(KEY_,PAUSE);
- NAMETRICK(KEY_,SCALE);
- NAMETRICK(KEY_,KPCOMMA);
- NAMETRICK(KEY_,YEN);
- NAMETRICK(KEY_,LEFTMETA);
- NAMETRICK(KEY_,RIGHTMETA);
- NAMETRICK(KEY_,COMPOSE);
- NAMETRICK(KEY_,STOP);
- NAMETRICK(KEY_,AGAIN);
- NAMETRICK(KEY_,PROPS);
- NAMETRICK(KEY_,UNDO);
- NAMETRICK(KEY_,FRONT);
- NAMETRICK(KEY_,COPY);
- NAMETRICK(KEY_,OPEN);
- NAMETRICK(KEY_,PASTE);
- NAMETRICK(KEY_,FIND);
- NAMETRICK(KEY_,CUT);
- NAMETRICK(KEY_,HELP);
- NAMETRICK(KEY_,MENU);
- NAMETRICK(KEY_,CALC);
- NAMETRICK(KEY_,SETUP);
- NAMETRICK(KEY_,SLEEP);
- NAMETRICK(KEY_,WAKEUP);
- NAMETRICK(KEY_,FILE);
- NAMETRICK(KEY_,SENDFILE);
- NAMETRICK(KEY_,DELETEFILE);
- NAMETRICK(KEY_,XFER);
- NAMETRICK(KEY_,PROG1);
- NAMETRICK(KEY_,PROG2);
- NAMETRICK(KEY_,WWW);
- NAMETRICK(KEY_,MSDOS);
- NAMETRICK(KEY_,COFFEE);
- NAMETRICK(KEY_,DIRECTION);
- NAMETRICK(KEY_,CYCLEWINDOWS);
- NAMETRICK(KEY_,MAIL);
- NAMETRICK(KEY_,BOOKMARKS);
- NAMETRICK(KEY_,COMPUTER);
- NAMETRICK(KEY_,BACK);
- NAMETRICK(KEY_,FORWARD);
- NAMETRICK(KEY_,FASTFORWARD);
- NAMETRICK(KEY_,CLOSECD);
- NAMETRICK(KEY_,EJECTCD);
- NAMETRICK(KEY_,EJECTCLOSECD);
- NAMETRICK(KEY_,NEXTSONG);
- NAMETRICK(KEY_,PLAYPAUSE);
- NAMETRICK(KEY_,PREVIOUSSONG);
- NAMETRICK(KEY_,STOPCD);
- NAMETRICK(KEY_,RECORD);
- NAMETRICK(KEY_,REWIND);
- NAMETRICK(KEY_,PHONE);
- NAMETRICK(KEY_,ISO);
- NAMETRICK(KEY_,CONFIG);
- NAMETRICK(KEY_,HOMEPAGE);
- NAMETRICK(KEY_,REFRESH);
- NAMETRICK(KEY_,EXIT);
- NAMETRICK(KEY_,MOVE);
- NAMETRICK(KEY_,EDIT);
- NAMETRICK(KEY_,SCROLLUP);
- NAMETRICK(KEY_,SCROLLDOWN);
- NAMETRICK(KEY_,KPLEFTPAREN);
- NAMETRICK(KEY_,KPRIGHTPAREN);
- NAMETRICK(KEY_,NEW);
- NAMETRICK(KEY_,REDO);
- NAMETRICK(KEY_,OK);
- NAMETRICK(KEY_,SELECT);
- NAMETRICK(KEY_,GOTO);
- NAMETRICK(KEY_,CLEAR);
- NAMETRICK(KEY_,POWER2);
- NAMETRICK(KEY_,OPTION);
- NAMETRICK(KEY_,INFO);
- NAMETRICK(KEY_,TIME);
- NAMETRICK(KEY_,VENDOR);
- NAMETRICK(KEY_,ARCHIVE);
- NAMETRICK(KEY_,PROGRAM);
- NAMETRICK(KEY_,CHANNEL);
- NAMETRICK(KEY_,FAVORITES);
- NAMETRICK(KEY_,EPG);
- NAMETRICK(KEY_,PVR);
- NAMETRICK(KEY_,MHP);
- NAMETRICK(KEY_,LANGUAGE);
- NAMETRICK(KEY_,TITLE);
- NAMETRICK(KEY_,SUBTITLE);
- NAMETRICK(KEY_,ANGLE);
- NAMETRICK(KEY_,ZOOM);
- NAMETRICK(KEY_,MODE);
- NAMETRICK(KEY_,KEYBOARD);
- NAMETRICK(KEY_,SCREEN);
- NAMETRICK(KEY_,RED);
- NAMETRICK(KEY_,GREEN);
- NAMETRICK(KEY_,YELLOW);
- NAMETRICK(KEY_,BLUE);
- NAMETRICK(KEY_,CHANNELUP);
- NAMETRICK(KEY_,CHANNELDOWN);
- NAMETRICK(KEY_,FIRST);
- NAMETRICK(KEY_,LAST);
- NAMETRICK(KEY_,AB);
- NAMETRICK(KEY_,NEXT);
- NAMETRICK(KEY_,RESTART);
- NAMETRICK(KEY_,SLOW);
- NAMETRICK(KEY_,SHUFFLE);
- NAMETRICK(KEY_,BREAK);
- NAMETRICK(KEY_,PREVIOUS);
- NAMETRICK(KEY_,DIGITS);
- NAMETRICK(KEY_,TEEN);
- NAMETRICK(KEY_,TWEN);
- NAMETRICK(KEY_,VIDEOPHONE);
- NAMETRICK(KEY_,GAMES);
- NAMETRICK(KEY_,ZOOMIN);
- NAMETRICK(KEY_,ZOOMOUT);
- NAMETRICK(KEY_,ZOOMRESET);
- NAMETRICK(KEY_,DOLLAR);
- NAMETRICK(KEY_,EURO);
- NAMETRICK(KEY_,MEDIA);
- NAMETRICK(KEY_,FRAMEBACK);
- NAMETRICK(KEY_,FRAMEFORWARD);
- NAMETRICK(KEY_,CONTEXT_MENU);
- NAMETRICK(KEY_,MEDIA_REPEAT);
- NAMETRICK(KEY_,NUMERIC_0);
- NAMETRICK(KEY_,NUMERIC_1);
- NAMETRICK(KEY_,NUMERIC_2);
- NAMETRICK(KEY_,NUMERIC_3);
- NAMETRICK(KEY_,NUMERIC_4);
- NAMETRICK(KEY_,NUMERIC_5);
- NAMETRICK(KEY_,NUMERIC_6);
- NAMETRICK(KEY_,NUMERIC_7);
- NAMETRICK(KEY_,NUMERIC_8);
- NAMETRICK(KEY_,NUMERIC_9);
- NAMETRICK(KEY_,NUMERIC_STAR);
- NAMETRICK(KEY_,NUMERIC_POUND);
-
- for (int i=0;i<CEC_USER_CONTROL_CODE_MAX+1;i++) {
- cec_keymap[i]=NULL;
- }
- NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,UP);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,DOWN);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,LEFT);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,RIGHT);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,RIGHT_UP);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,RIGHT_DOWN);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,LEFT_UP);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,LEFT_DOWN);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,ROOT_MENU);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,SETUP_MENU);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,CONTENTS_MENU);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,FAVORITE_MENU);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,EXIT);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER0);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER1);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER2);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER3);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER4);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER5);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER6);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER7);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER8);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER9);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,DOT);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,ENTER);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,CLEAR);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,NEXT_FAVORITE);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,CHANNEL_UP);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,CHANNEL_DOWN);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PREVIOUS_CHANNEL);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,SOUND_SELECT);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,INPUT_SELECT);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,DISPLAY_INFORMATION);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,HELP);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PAGE_UP);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PAGE_DOWN);
- NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,VOLUME_UP );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,VOLUME_DOWN );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,MUTE );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PLAY );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,STOP );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,RECORD );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,REWIND );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,FAST_FORWARD );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,EJECT );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,FORWARD );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,BACKWARD );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,STOP_RECORD );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE_RECORD );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,ANGLE );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,SUB_PICTURE );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,VIDEO_ON_DEMAND );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,ELECTRONIC_PROGRAM_GUIDE );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,TIMER_PROGRAMMING );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,INITIAL_CONFIGURATION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PLAY_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE_PLAY_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,RECORD_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE_RECORD_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,STOP_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,MUTE_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,RESTORE_VOLUME_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,TUNE_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT_MEDIA_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT_AV_INPUT_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT_AUDIO_INPUT_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER_TOGGLE_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER_OFF_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER_ON_FUNCTION );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,F1_BLUE );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,F2_RED );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,F3_GREEN );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,F4_YELLOW );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,F5 );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,DATA );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,AN_RETURN );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,AN_CHANNELS_LIST );
- NAMETRICK2(CEC_USER_CONTROL_CODE_,MAX );
+ for (int i=0;i<KEY_MAX+1;i++)
+ {
+ linux_keymap[i] = NULL;
+ }
+
+ NAMETRICK(KEY_,RESERVED);
+ NAMETRICK(KEY_,ESC);
+ NAMETRICK(KEY_,1);
+ NAMETRICK(KEY_,2);
+ NAMETRICK(KEY_,3);
+ NAMETRICK(KEY_,4);
+ NAMETRICK(KEY_,5);
+ NAMETRICK(KEY_,6);
+ NAMETRICK(KEY_,7);
+ NAMETRICK(KEY_,8);
+ NAMETRICK(KEY_,9);
+ NAMETRICK(KEY_,0);
+ NAMETRICK(KEY_,MINUS);
+ NAMETRICK(KEY_,EQUAL);
+ NAMETRICK(KEY_,BACKSPACE);
+ NAMETRICK(KEY_,TAB);
+ NAMETRICK(KEY_,Q);
+ NAMETRICK(KEY_,W);
+ NAMETRICK(KEY_,E);
+ NAMETRICK(KEY_,R);
+ NAMETRICK(KEY_,T);
+ NAMETRICK(KEY_,Y);
+ NAMETRICK(KEY_,U);
+ NAMETRICK(KEY_,I);
+ NAMETRICK(KEY_,O);
+ NAMETRICK(KEY_,P);
+ NAMETRICK(KEY_,LEFTBRACE);
+ NAMETRICK(KEY_,RIGHTBRACE);
+ NAMETRICK(KEY_,ENTER);
+ NAMETRICK(KEY_,LEFTCTRL);
+ NAMETRICK(KEY_,A);
+ NAMETRICK(KEY_,S);
+ NAMETRICK(KEY_,D);
+ NAMETRICK(KEY_,F);
+ NAMETRICK(KEY_,G);
+ NAMETRICK(KEY_,H);
+ NAMETRICK(KEY_,J);
+ NAMETRICK(KEY_,K);
+ NAMETRICK(KEY_,L);
+ NAMETRICK(KEY_,SEMICOLON);
+ NAMETRICK(KEY_,APOSTROPHE);
+ NAMETRICK(KEY_,GRAVE);
+ NAMETRICK(KEY_,LEFTSHIFT);
+ NAMETRICK(KEY_,BACKSLASH);
+ NAMETRICK(KEY_,Z);
+ NAMETRICK(KEY_,X);
+ NAMETRICK(KEY_,C);
+ NAMETRICK(KEY_,V);
+ NAMETRICK(KEY_,B);
+ NAMETRICK(KEY_,N);
+ NAMETRICK(KEY_,M);
+ NAMETRICK(KEY_,COMMA);
+ NAMETRICK(KEY_,DOT);
+ NAMETRICK(KEY_,SLASH);
+ NAMETRICK(KEY_,RIGHTSHIFT);
+ NAMETRICK(KEY_,KPASTERISK);
+ NAMETRICK(KEY_,LEFTALT);
+ NAMETRICK(KEY_,SPACE);
+ NAMETRICK(KEY_,CAPSLOCK);
+ NAMETRICK(KEY_,F1);
+ NAMETRICK(KEY_,F2);
+ NAMETRICK(KEY_,F3);
+ NAMETRICK(KEY_,F4);
+ NAMETRICK(KEY_,F5);
+ NAMETRICK(KEY_,F6);
+ NAMETRICK(KEY_,F7);
+ NAMETRICK(KEY_,F8);
+ NAMETRICK(KEY_,F9);
+ NAMETRICK(KEY_,F10);
+ NAMETRICK(KEY_,NUMLOCK);
+ NAMETRICK(KEY_,SCROLLLOCK);
+ NAMETRICK(KEY_,KP7);
+ NAMETRICK(KEY_,KP8);
+ NAMETRICK(KEY_,KP9);
+ NAMETRICK(KEY_,KPMINUS);
+ NAMETRICK(KEY_,KP4);
+ NAMETRICK(KEY_,KP5);
+ NAMETRICK(KEY_,KP6);
+ NAMETRICK(KEY_,KPPLUS);
+ NAMETRICK(KEY_,KP1);
+ NAMETRICK(KEY_,KP2);
+ NAMETRICK(KEY_,KP3);
+ NAMETRICK(KEY_,KP0);
+ NAMETRICK(KEY_,KPDOT);
+ NAMETRICK(KEY_,F11);
+ NAMETRICK(KEY_,F12);
+ NAMETRICK(KEY_,KPENTER);
+ NAMETRICK(KEY_,RIGHTCTRL);
+ NAMETRICK(KEY_,KPSLASH);
+ NAMETRICK(KEY_,SYSRQ);
+ NAMETRICK(KEY_,RIGHTALT);
+ NAMETRICK(KEY_,LINEFEED);
+ NAMETRICK(KEY_,HOME);
+ NAMETRICK(KEY_,UP);
+ NAMETRICK(KEY_,PAGEUP);
+ NAMETRICK(KEY_,LEFT);
+ NAMETRICK(KEY_,RIGHT);
+ NAMETRICK(KEY_,END);
+ NAMETRICK(KEY_,DOWN);
+ NAMETRICK(KEY_,PAGEDOWN);
+ NAMETRICK(KEY_,INSERT);
+ NAMETRICK(KEY_,DELETE);
+ NAMETRICK(KEY_,MACRO);
+ NAMETRICK(KEY_,MUTE);
+ NAMETRICK(KEY_,VOLUMEDOWN);
+ NAMETRICK(KEY_,VOLUMEUP);
+ NAMETRICK(KEY_,POWER);
+ NAMETRICK(KEY_,KPEQUAL);
+ NAMETRICK(KEY_,KPPLUSMINUS);
+ NAMETRICK(KEY_,PLAY);
+ NAMETRICK(KEY_,PAUSE);
+ NAMETRICK(KEY_,SCALE);
+ NAMETRICK(KEY_,KPCOMMA);
+ NAMETRICK(KEY_,YEN);
+ NAMETRICK(KEY_,LEFTMETA);
+ NAMETRICK(KEY_,RIGHTMETA);
+ NAMETRICK(KEY_,COMPOSE);
+ NAMETRICK(KEY_,STOP);
+ NAMETRICK(KEY_,AGAIN);
+ NAMETRICK(KEY_,PROPS);
+ NAMETRICK(KEY_,UNDO);
+ NAMETRICK(KEY_,FRONT);
+ NAMETRICK(KEY_,COPY);
+ NAMETRICK(KEY_,OPEN);
+ NAMETRICK(KEY_,PASTE);
+ NAMETRICK(KEY_,FIND);
+ NAMETRICK(KEY_,CUT);
+ NAMETRICK(KEY_,HELP);
+ NAMETRICK(KEY_,MENU);
+ NAMETRICK(KEY_,CALC);
+ NAMETRICK(KEY_,SETUP);
+ NAMETRICK(KEY_,SLEEP);
+ NAMETRICK(KEY_,WAKEUP);
+ NAMETRICK(KEY_,FILE);
+ NAMETRICK(KEY_,SENDFILE);
+ NAMETRICK(KEY_,DELETEFILE);
+ NAMETRICK(KEY_,XFER);
+ NAMETRICK(KEY_,PROG1);
+ NAMETRICK(KEY_,PROG2);
+ NAMETRICK(KEY_,WWW);
+ NAMETRICK(KEY_,MSDOS);
+ NAMETRICK(KEY_,COFFEE);
+ NAMETRICK(KEY_,DIRECTION);
+ NAMETRICK(KEY_,CYCLEWINDOWS);
+ NAMETRICK(KEY_,MAIL);
+ NAMETRICK(KEY_,BOOKMARKS);
+ NAMETRICK(KEY_,COMPUTER);
+ NAMETRICK(KEY_,BACK);
+ NAMETRICK(KEY_,FORWARD);
+ NAMETRICK(KEY_,FASTFORWARD);
+ NAMETRICK(KEY_,CLOSECD);
+ NAMETRICK(KEY_,EJECTCD);
+ NAMETRICK(KEY_,EJECTCLOSECD);
+ NAMETRICK(KEY_,NEXTSONG);
+ NAMETRICK(KEY_,PLAYPAUSE);
+ NAMETRICK(KEY_,PREVIOUSSONG);
+ NAMETRICK(KEY_,STOPCD);
+ NAMETRICK(KEY_,RECORD);
+ NAMETRICK(KEY_,REWIND);
+ NAMETRICK(KEY_,PHONE);
+ NAMETRICK(KEY_,ISO);
+ NAMETRICK(KEY_,CONFIG);
+ NAMETRICK(KEY_,HOMEPAGE);
+ NAMETRICK(KEY_,REFRESH);
+ NAMETRICK(KEY_,EXIT);
+ NAMETRICK(KEY_,MOVE);
+ NAMETRICK(KEY_,EDIT);
+ NAMETRICK(KEY_,SCROLLUP);
+ NAMETRICK(KEY_,SCROLLDOWN);
+ NAMETRICK(KEY_,KPLEFTPAREN);
+ NAMETRICK(KEY_,KPRIGHTPAREN);
+ NAMETRICK(KEY_,NEW);
+ NAMETRICK(KEY_,REDO);
+ NAMETRICK(KEY_,OK);
+ NAMETRICK(KEY_,SELECT);
+ NAMETRICK(KEY_,GOTO);
+ NAMETRICK(KEY_,CLEAR);
+ NAMETRICK(KEY_,POWER2);
+ NAMETRICK(KEY_,OPTION);
+ NAMETRICK(KEY_,INFO);
+ NAMETRICK(KEY_,TIME);
+ NAMETRICK(KEY_,VENDOR);
+ NAMETRICK(KEY_,ARCHIVE);
+ NAMETRICK(KEY_,PROGRAM);
+ NAMETRICK(KEY_,CHANNEL);
+ NAMETRICK(KEY_,FAVORITES);
+ NAMETRICK(KEY_,EPG);
+ NAMETRICK(KEY_,PVR);
+ NAMETRICK(KEY_,MHP);
+ NAMETRICK(KEY_,LANGUAGE);
+ NAMETRICK(KEY_,TITLE);
+ NAMETRICK(KEY_,SUBTITLE);
+ NAMETRICK(KEY_,ANGLE);
+ NAMETRICK(KEY_,ZOOM);
+ NAMETRICK(KEY_,MODE);
+ NAMETRICK(KEY_,KEYBOARD);
+ NAMETRICK(KEY_,SCREEN);
+ NAMETRICK(KEY_,RED);
+ NAMETRICK(KEY_,GREEN);
+ NAMETRICK(KEY_,YELLOW);
+ NAMETRICK(KEY_,BLUE);
+ NAMETRICK(KEY_,CHANNELUP);
+ NAMETRICK(KEY_,CHANNELDOWN);
+ NAMETRICK(KEY_,FIRST);
+ NAMETRICK(KEY_,LAST);
+ NAMETRICK(KEY_,AB);
+ NAMETRICK(KEY_,NEXT);
+ NAMETRICK(KEY_,RESTART);
+ NAMETRICK(KEY_,SLOW);
+ NAMETRICK(KEY_,SHUFFLE);
+ NAMETRICK(KEY_,BREAK);
+ NAMETRICK(KEY_,PREVIOUS);
+ NAMETRICK(KEY_,DIGITS);
+ NAMETRICK(KEY_,TEEN);
+ NAMETRICK(KEY_,TWEN);
+ NAMETRICK(KEY_,VIDEOPHONE);
+ NAMETRICK(KEY_,GAMES);
+ NAMETRICK(KEY_,ZOOMIN);
+ NAMETRICK(KEY_,ZOOMOUT);
+ NAMETRICK(KEY_,ZOOMRESET);
+ NAMETRICK(KEY_,DOLLAR);
+ NAMETRICK(KEY_,EURO);
+ NAMETRICK(KEY_,MEDIA);
+ NAMETRICK(KEY_,FRAMEBACK);
+ NAMETRICK(KEY_,FRAMEFORWARD);
+ NAMETRICK(KEY_,CONTEXT_MENU);
+ NAMETRICK(KEY_,MEDIA_REPEAT);
+ NAMETRICK(KEY_,NUMERIC_0);
+ NAMETRICK(KEY_,NUMERIC_1);
+ NAMETRICK(KEY_,NUMERIC_2);
+ NAMETRICK(KEY_,NUMERIC_3);
+ NAMETRICK(KEY_,NUMERIC_4);
+ NAMETRICK(KEY_,NUMERIC_5);
+ NAMETRICK(KEY_,NUMERIC_6);
+ NAMETRICK(KEY_,NUMERIC_7);
+ NAMETRICK(KEY_,NUMERIC_8);
+ NAMETRICK(KEY_,NUMERIC_9);
+ NAMETRICK(KEY_,NUMERIC_STAR);
+ NAMETRICK(KEY_,NUMERIC_POUND);
+
+ for (int i=0; i < CEC_USER_CONTROL_CODE_MAX + 1; i++)
+ {
+ cec_keymap[i] = NULL;
+ }
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,UP);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,DOWN);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,LEFT);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,RIGHT);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,RIGHT_UP);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,RIGHT_DOWN);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,LEFT_UP);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,LEFT_DOWN);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,ROOT_MENU);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,SETUP_MENU);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,CONTENTS_MENU);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,FAVORITE_MENU);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,EXIT);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER0);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER1);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER2);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER3);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER4);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER5);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER6);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER7);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER8);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NUMBER9);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,DOT);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,ENTER);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,CLEAR);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,NEXT_FAVORITE);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,CHANNEL_UP);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,CHANNEL_DOWN);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PREVIOUS_CHANNEL);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,SOUND_SELECT);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,INPUT_SELECT);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,DISPLAY_INFORMATION);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,HELP);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PAGE_UP);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PAGE_DOWN);
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,VOLUME_UP );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,VOLUME_DOWN );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,MUTE );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PLAY );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,STOP );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,RECORD );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,REWIND );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,FAST_FORWARD );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,EJECT );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,FORWARD );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,BACKWARD );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,STOP_RECORD );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE_RECORD );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,ANGLE );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,SUB_PICTURE );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,VIDEO_ON_DEMAND );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,ELECTRONIC_PROGRAM_GUIDE );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,TIMER_PROGRAMMING );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,INITIAL_CONFIGURATION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PLAY_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE_PLAY_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,RECORD_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,PAUSE_RECORD_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,STOP_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,MUTE_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,RESTORE_VOLUME_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,TUNE_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT_MEDIA_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT_AV_INPUT_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,SELECT_AUDIO_INPUT_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER_TOGGLE_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER_OFF_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,POWER_ON_FUNCTION );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,F1_BLUE );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,F2_RED );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,F3_GREEN );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,F4_YELLOW );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,F5 );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,DATA );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,AN_RETURN );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,AN_CHANNELS_LIST );
+ NAMETRICK2(CEC_USER_CONTROL_CODE_,MAX );
}
char* RemoteLinux::HCWDesc(unsigned long long hcw)
{
//Determine type
- unsigned int type = hcw >> 32;
- char *rt=NULL;
+ unsigned int type = static_cast<unsigned int>(hcw >> 32);
+ unsigned int vk = static_cast<ULONG>(hcw);
+ char* rt = NULL;
+
switch(type)
{
- case W_HCW_KC:{
- unsigned int vk=(ULONG)hcw;
- rt=new char[10];
+ case W_HCW_KC:
+ {
+ rt = new char[10];
const char *desc=linux_keymap[vk];
- if (desc) {
- strncpy(rt,desc,9);
- } else {
- sprintf(rt,"0x%x",vk);
- }
- }break;
- case W_HCW_CEC:{
- unsigned int vk=(ULONG)hcw;
- rt=new char[10];
- const char *desc=cec_keymap[vk];
- if (desc) {
- strncpy(rt,desc,9);
- } else {
- sprintf(rt,"0x%x",vk);
- }
- }break;
+ if (desc)
+ strncpy(rt, desc, 9);
+ else
+ sprintf(rt, "0x%x", vk);
+ break;
+ }
+ case W_HCW_CEC:
+ {
+ rt = new char[10];
+ const char* desc = cec_keymap[vk];
+ if (desc)
+ strncpy(rt, desc, 9);
+ else
+ sprintf(rt, "0x%x", vk);
+ break;
+ }
/*
case W_HCW_LIRC:{
ULONG ri=(ULONG)hcw;
rt=new char[10];
sprintf(rt,"R: %X",ri);
}break;*/
+ }
- };
return rt;
}
-void RemoteLinux::changePowerState(bool poweron){
- if (cec_adap) {
- if (poweron) {
- //Log::getInstance()->log("Remote", Log::DEBUG, "CEC set active source" );
- cec_adap->SetActiveSource(cec_config.deviceTypes[0]);
- haspower=false;
- } else {
- //Log::getInstance()->log("Remote", Log::DEBUG, "CEC set inactive view" );
- cec_adap->SetInactiveView();
- haspower=false; //clear stuff
- }
- }
+void RemoteLinux::changePowerState(bool poweron)
+{
+ if (cec_adap)
+ {
+ if (poweron)
+ {
+ //Log::getInstance()->log("Remote", Log::DEBUG, "CEC set active source");
+ cec_adap->SetActiveSource(cec_config.deviceTypes[0]);
+ }
+ else
+ {
+ //Log::getInstance()->log("Remote", Log::DEBUG, "CEC set inactive view");
+ cec_adap->SetInactiveView();
+ }
+ }
}
#if CEC_LIB_VERSION_MAJOR >= 4
void RemoteLinux::cecLogMessage(void* /* param */, const cec_log_message* message)
{
- Log::getInstance()->log("Remote", Log::DEBUG, "CECLOG: %lld %d %s", message->time, message->level, message->message);
+ Log::getInstance()->log("Remote", Log::DEBUG, "CECLOG: %lld %d %s", message->time, message->level, message->message);
}
void RemoteLinux::cecKeyPress(void* /* param */, const cec_keypress* key)
{
- //Log::getInstance()->log("Remote", Log::DEBUG, "Incoming cec key %d %d", key->keycode,key->duration);
- if (key->duration==0) static_cast<RemoteLinux*>(Remote::getInstance())->incomingCECkey(key->keycode);
+ //Log::getInstance()->log("Remote", Log::DEBUG, "Incoming cec key %d %d", key->keycode,key->duration);
+ if (key->duration == 0) static_cast<RemoteLinux*>(Remote::getInstance())->incomingCECkey(key->keycode);
}
void RemoteLinux::cecCommand(void* /* param */, const cec_command* command)
int RemoteLinux::cecLogMessage(void *param, const cec_log_message message)
{
- Log::getInstance()->log("Remote", Log::DEBUG, "CECLOG: %lld %d %s",message.time , message.level, message.message );
- return 0;
+ Log::getInstance()->log("Remote", Log::DEBUG, "CECLOG: %lld %d %s", message.time, message.level, message.message);
+ return 0;
}
int RemoteLinux::cecKeyPress(void*param, const cec_keypress key)
{
- //Log::getInstance()->log("Remote", Log::DEBUG, "Incoming cec key %d %d", key.keycode,key.duration);
- if (key.duration==0) ((RemoteLinux*)Remote::getInstance())->incomingCECkey(key.keycode);
- return 1;
+ //Log::getInstance()->log("Remote", Log::DEBUG, "Incoming cec key %d %d", key.keycode,key.duration);
+ if (key.duration == 0) ((RemoteLinux*)Remote::getInstance())->incomingCECkey(key.keycode);
+ return 1;
}
+
int RemoteLinux::cecCommand(void *param, const cec_command command)
{
Log::getInstance()->log("Remote", Log::DEBUG, "CECCommand: %d",command.opcode);
void RemoteLinux::cecSourceActivated(void* /* param */, const cec_logical_address address, const uint8_t activated)
{
- Log::getInstance()->log("Remote", Log::DEBUG, "CECSourceActivated: %d %d", address, activated);
- if (activated==1) {
- static_cast<RemoteLinux*>(Remote::getInstance())->incomingPowerkey(POWERON);
- }
+ Log::getInstance()->log("Remote", Log::DEBUG, "CECSourceActivated: %d %d", address, activated);
+ if (activated == 1)
+ {
+ static_cast<RemoteLinux*>(Remote::getInstance())->incomingPowerkey(POWERON);
+ }
}
void RemoteLinux::incomingCECkey(int keys)
{
- curcec=keys;
- hascurcec=true;
+ // Send INPUT message
+ Message* m = new Message();
+ m->message = Message::INPUT_EVENT;
+ m->to = Command::getInstance();
+ m->from = this;
+ m->parameter = static_cast<UCHAR>(TranslateHWC(W_G_HCW(W_HCW_CEC, keys)));
+ MessageQueue::getInstance()->postMessage(m);
}
-void RemoteLinux::incomingPowerkey(UCHAR key){
- haspower=true;
- powerkey=key;
+void RemoteLinux::incomingPowerkey(UCHAR key)
+{
+ // Send INPUT message
+ Message* m = new Message();
+ m->message = Message::INPUT_EVENT;
+ m->to = Command::getInstance();
+ m->from = this;
+ m->parameter = key;
+ MessageQueue::getInstance()->postMessage(m);
}
bool RemoteLinux::loadOptionsfromServer(VDR* vdr)
{
-
// Set remote keys
- char * name;
+ char* name;
name = vdr->configLoad("RemoteLinux", "HandleVolume");
- if (name != NULL) {
- if (STRCASECMP(name, "Vomp") == 0) {
- cechandlesvolume=false;
- } else if (STRCASECMP(name, "Cec") == 0) {
- cechandlesvolume=true;
- }
- delete[] name;
- }
+ if (name != NULL)
+ {
+ if (STRCASECMP(name, "Vomp") == 0) cechandlesvolume = false;
+ else if (STRCASECMP(name, "Cec") == 0) cechandlesvolume = true;
+ delete[] name;
+ }
return Remote::loadOptionsfromServer(vdr);
}
bool RemoteLinux::saveOptionstoServer()
{
- if (cechandlesvolume) VDR::getInstance()->configSave("RemoteLinux", "HandleVolume","Cec");
- else VDR::getInstance()->configSave("RemoteLinux", "HandleVolume","Vomp");
+ if (cechandlesvolume) VDR::getInstance()->configSave("RemoteLinux", "HandleVolume","Cec");
+ else VDR::getInstance()->configSave("RemoteLinux", "HandleVolume","Vomp");
- return Remote::saveOptionstoServer();
+ return Remote::saveOptionstoServer();
}
bool RemoteLinux::addOptionsToPanes(int panenumber,Options *options,WOptionPane* pane)
{
- if (!Remote::addOptionsToPanes(panenumber,options,pane)) return false;
-
-
- Option* option;
- if (panenumber == 2)
- {
- static const char* volumeopts[]={"Vomp","Cec"};
- option = new Option(100,tr("Volume handled by"), "RemoteLinux","HandleVolume",Option::TYPE_TEXT,/*4,2*/2,0,0,volumeopts,NULL,false,this);
- options->push_back(option);
- pane->addOptionLine(option);
- }
+ if (!Remote::addOptionsToPanes(panenumber, options, pane)) return false;
+
+ Option* option;
+ if (panenumber == 2)
+ {
+ static const char* volumeopts[]={"Vomp","Cec"};
+ option = new Option(100,tr("Volume handled by"), "RemoteLinux","HandleVolume",Option::TYPE_TEXT,/*4,2*/2,0,0,volumeopts,NULL,false,this);
+ options->push_back(option);
+ pane->addOptionLine(option);
+ }
- return true;
+ return true;
}
bool RemoteLinux::handleOptionChanges(Option* option)
void RemoteLinux::volumeUp()
{
- cec_adap->VolumeUp();
+ cec_adap->VolumeUp();
}
void RemoteLinux::volumeDown()
{
- cec_adap->VolumeDown();
+ cec_adap->VolumeDown();
}
void RemoteLinux::volumeMute()
{
#if CEC_LIB_VERSION_MAJOR >= 4
- cec_adap->AudioToggleMute();
+ cec_adap->AudioToggleMute();
#else
- cec_adap->MuteAudio();
+ cec_adap->MuteAudio();
#endif
}
+void RemoteLinux::informStopEventLoop()
+{
+ listenLoopStop = true;
+ write(pfds[1], "1", 1); // break the select in getButtonPress
+}
+
+void RemoteLinux::eventLoop()
+{
+ fd_set readfds;
+ int maxfd;
+
+ if (pipe2(pfds, O_NONBLOCK) == -1)
+ {
+ Log::getInstance()->log("RemoteLinux", Log::ERR, "pipe2() fail");
+ return;
+ }
+
+ Log::getInstance()->log("RemoteLinux", Log::INFO, "Listen loop");
+
+ while(1)
+ {
+ if (listenLoopStop) break;
+
+ FD_ZERO(&readfds);
+
+ maxfd = 0;
+ for (unsigned int i = 0; i < devices.size(); i++)
+ {
+ int cur_fd = devices[i];
+ maxfd = max(cur_fd, maxfd);
+ FD_SET(cur_fd, &readfds);
+ }
+
+ FD_SET(pfds[0], &readfds);
+ maxfd = max(pfds[0], maxfd);
+
+ // 0 = nothing happened and timeout expired
+ // >0 = num of descriptors that changed
+ // -1 = error
+ if (select(maxfd + 1, &readfds, NULL, NULL, NULL) < 1)
+ {
+ Log::getInstance()->log("RemoteLinux", Log::ERR, "Select fail");
+ break;
+ }
+
+ if (FD_ISSET(pfds[0], &readfds))
+ {
+ // assume quit signal
+ Log::getInstance()->log("Remote", Log::NOTICE, "pfds quit");
+ break;
+
+ // FUTURE: read the byte and do different things? Read listenLoopStop and maybe other bools?
+ }
+
+ for (unsigned int i = 0; i < devices.size(); i++)
+ {
+ int cur_fd = devices[i];
+ if (FD_ISSET(cur_fd, &readfds))
+ {
+ struct input_event ev;
+ int count = read(cur_fd, &ev, sizeof(ev));
+ if (count == sizeof(ev))
+ {
+ if (ev.type == EV_KEY && ev.value == 1)
+ {
+ // Send INPUT message
+ Message* m = new Message();
+ m->message = Message::INPUT_EVENT;
+ m->to = Command::getInstance();
+ m->from = this;
+ m->parameter = static_cast<UCHAR>(TranslateHWC(W_G_HCW(W_HCW_KC,ev.code)));
+ MessageQueue::getInstance()->postMessage(m);
+ }
+ }
+ }
+ }
+ }
+
+ close(pfds[1]);
+ close(pfds[0]);
+}
+
+// FIXME surely NA_SIGNAL can go