+++ /dev/null
-/*
- Copyright 2004-2005 Chris Tallon 2009 Marten Richter
-
- This file is part of VOMP.
-
- VOMP is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- VOMP is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with VOMP; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-#include <sys/socket.h>
-
-#include "remotelirc.h"
-#include "i18n.h"
-
-#include "oldlog.h"
-
-#define LIRC_BUFFER_SIZE 128
-
-
-RemoteLirc::RemoteLirc()
-{
- if (instance) return;
- initted = 0;
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- device = -1;
-}
-
-RemoteLirc::~RemoteLirc()
-{
-}
-
-int RemoteLirc::init(char* devName)
-{
- if (initted) return 0;
- initted = 1;
-
- address.sun_family = AF_UNIX;
-
- strcpy(address.sun_path, devName);
- if (!sockConnect()) return 0;
-/*
- device = open(devName, O_RDONLY);
- if (device < 0)
- {
- initted = 0;
- return 0;
- }
-*/
- return 1;
-}
-
-int RemoteLirc::shutdown()
-{
- if (!initted) return 0;
- initted = 0;
- close(device);
- device = 0;
- return 1;
-}
-
-int RemoteLirc::sockConnect()
-{
- if ((device = socket(AF_UNIX, SOCK_STREAM, 0)) >= 0) {
- if (connect(device, (struct sockaddr *)&address, sizeof(address)) >= 0)
- return 1;
- Log::getInstance()->log("Remote", Log::INFO, "Connecting lircd failed %s", address.sun_path);
- close(device);
- device = -1;
- }
- else
- Log::getInstance()->log("Remote", Log::INFO, "Creating socket failed");
-
- Log::getInstance()->log("Remote", Log::DEBUG, "Creating socket successfull");
-
- return 0;
-}
-
-int RemoteLirc::getDevice()
-{
- if (!initted) return 0;
- return device;
-}
-
-UCHAR RemoteLirc::getButtonPress(int waitType)
-{
- /* how = 0 - block
- how = 1 - start new wait
- how = 2 - continue wait
- how = 3 - no wait
- */
-
- unsigned long input;
- struct timeval* passToSelect = NULL;
- char buffer[LIRC_BUFFER_SIZE];
- int retval;
- fd_set readfds;
-
- if (waitType == 0)
- {
- passToSelect = NULL;
- }
- else if (waitType == 1)
- {
- tv.tv_sec = 1;
- tv.tv_usec = 000000;
- passToSelect = &tv;
- }
- else if (waitType == 2)
- {
- if ((tv.tv_sec == 0) && (tv.tv_usec == 0)) // protection in case timer = 0
- {
- tv.tv_sec = 1;
- tv.tv_usec = 000000;
- }
- passToSelect = &tv;
- }
- else if (waitType == 3)
- {
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- passToSelect = &tv;
- }
- FD_ZERO(&readfds);
- FD_SET(device, &readfds);
-
- retval = select(device + 1, &readfds, NULL, NULL, &tv);
- // 0 = nothing happened
- // 1 = data arrived (actually num of descriptors that changed)
- // other value = signal or error
- if (retval == 0) return NA_NONE;
- if (retval == -1) return NA_SIGNAL;
-
- int count = read(device, &buffer, sizeof(LIRC_BUFFER_SIZE));
- if (count > 0)
- {
- int input=NA_UNKNOWN;
- if (sscanf(buffer, "%d", &input) != 1) {
- Log::getInstance()->log("Remote", Log::DEBUG, "ERROR: unparseable lirc command: %s", buffer);
- return NA_UNKNOWN;
- }
-
- Log::getInstance()->log("Remote", Log::DEBUG, "Button %x", input);
-
- return (UCHAR) TranslateHWC(input);
- }
- return NA_UNKNOWN;
-}
-
-void RemoteLirc::clearBuffer()
-{
-// while(getButtonPress(3) != NA_NONE);
-}
-
-UCHAR RemoteLirc::TranslateHWCFixed(ULLONG code)
-{
- switch (code)
- {
- case 0xa9:
- return DOWN;
- case 0xa8:
- return UP;
- case 0xaa:
- return LEFT;
- case 0xab:
- return RIGHT;
- case 0x09:
- return MENU;
- case 0x8d:
- return BACK;
- case 0x0d:
- return OK;
- case 0xd2:
- return POWER;
- default:
- return NA_UNKNOWN;
- };
-}
-
-
-void RemoteLirc::InitHWCListwithDefaults()
-{
- translist[0x9e] = VOLUMEUP;
- translist[0x9f] = VOLUMEDOWN;
- translist[0x94] = CHANNELUP;
- translist[0x90] = CHANNELDOWN;
-
- // Common buttons
- translist[0xf1] = ZERO;
- translist[0xf2] = ONE;
- translist[0xf3] = TWO;
- translist[0xf4] = THREE;
- translist[0xf5] = FOUR;
- translist[0xf6] = FIVE;
- translist[0xf7] = SIX;
- translist[0xf8] = SEVEN;
- translist[0xf9] = EIGHT;
- translist[0xfa] = NINE;
- translist[0xd2] = POWER;
- translist[0x91] = GO;
- translist[0xde] = RED;
- translist[0xdf] = GREEN;
- translist[0xe0] = YELLOW;
- translist[0xe2] = BLUE;
-
- translist[0xe1] = MUTE;
- translist[0xd5] = REVERSE;
- translist[0xd6] = FORWARD;
- translist[0x1b] = STOP;
- translist[0xea] = PAUSE;
- translist[0xe9] = PLAY;
- translist[0xdb] = SKIPBACK;
- translist[0xdc] = SKIPFORWARD;
-
- // Old remote only
- translist[0xda] = FULL;
-
-
-}
-
-
-char* RemoteLirc::HCWDesc(ULLONG hcw)
-{
-
- char *ret=NULL;
-
- ret=new char[20];
-
- switch(hcw)
- {
- case 0x01: strncpy(ret,tr("Suspend") ,20);break;
- case 0x09: strncpy(ret,tr("Menu") ,20);break;
- case 0x0d: strncpy(ret,tr("Enter") ,20);break;
- case 0x1b: strncpy(ret,tr("Stop") ,20);break;
- case 0x8A: strncpy(ret,tr("TV mode") ,20);break;
- case 0x8c: strncpy(ret,tr("Setup") ,20);break;
- case 0x8D: strncpy(ret,tr("Return") ,20);break;
- case 0x90: strncpy(ret,tr("Repeat") ,20);break;
- case 0x91: strncpy(ret,tr("Time Seek"),20);break;
- case 0x94: strncpy(ret,tr("Title") ,20);break;
- case 0x95: strncpy(ret,tr("Info") ,20);break;
- case 0x9e: strncpy(ret,tr("Volume up") ,20);break;
- case 0x9f: strncpy(ret,tr("Volume down") ,20);break;
- case 0xa8: strncpy(ret,tr("up") ,20);break;
- case 0xaa: strncpy(ret,tr("Left") ,20);break;
- case 0xab: strncpy(ret,tr("Right") ,20);break;
- case 0xa9: strncpy(ret,tr("Down") ,20);break;
- case 0xd0: strncpy(ret,tr("Home") ,20);break;
- case 0xd2: strncpy(ret,tr("Stand by") ,20);break;
- case 0xd5: strncpy(ret,tr("Backward") ,20);break;
- case 0xd6: strncpy(ret,tr("Forward") ,20);break;
- case 0xd8: strncpy(ret,tr("Audio") ,20);break;
- case 0xd9: strncpy(ret,tr("Slow") ,20);break;
- case 0xda: strncpy(ret,tr("Zoom") ,20);break;
- case 0xdb: strncpy(ret,tr("Previous") ,20);break;
- case 0xde: strncpy(ret,tr("Red") ,20);break;
- case 0xdc: strncpy(ret,tr("Next") ,20);break;
- case 0xdf: strncpy(ret,tr("Green") ,20);break;
- case 0xe0: strncpy(ret,tr("Yellow") ,20);break;
- case 0xe1: strncpy(ret,tr("Mute") ,20);break;
- case 0xe2: strncpy(ret,tr("Blue") ,20);break;
- case 0xe9: strncpy(ret,tr("Play") ,20);break;
- case 0xea: strncpy(ret,tr("Pause") ,20);break;
- case 0xeb: strncpy(ret,tr("Subtitle") ,20);break;
- case 0xec: strncpy(ret,tr("Angle") ,20);break;
- case 0xef: strncpy(ret,tr("Eject") ,20);break;
- case 0xf1: strncpy(ret,tr("0") ,20);break;
- case 0xf2: strncpy(ret,tr("1") ,20);break;
- case 0xf3: strncpy(ret,tr("2") ,20);break;
- case 0xf4: strncpy(ret,tr("3") ,20);break;
- case 0xf5: strncpy(ret,tr("4") ,20);break;
- case 0xf6: strncpy(ret,tr("5") ,20);break;
- case 0xf7: strncpy(ret,tr("6") ,20);break;
- case 0xf8: strncpy(ret,tr("7") ,20);break;
- case 0xf9: strncpy(ret,tr("8") ,20);break;
- case 0xfA: strncpy(ret,tr("9") ,20);break;
- case 0xFC: strncpy(ret,tr("Caps") ,20);break;
- case 0xFD: strncpy(ret,tr("File mode") ,20);break;
-
-
- default:{
- ULONG ri=(ULONG)hcw;
- sprintf(ret,"R: %X",ri);
- }break;
- };
- return ret;
-}