/******************************************************************************!
* \file lirc.c
* \author Sebastien Beaugrand
* \sa http://beaugrand.chez.com/
* \copyright CeCILL 2.1 Free Software license
******************************************************************************/
#include <fcntl.h>
#include <lirc/lirc_client.h>
#include "mp3client.h"
#include "debug.h"
int gLircSocket = -1;
enum {
KEY_BACK,
KEY_DOWN,
KEY_LEFT,
KEY_MODE,
KEY_OK,
KEY_PLAYPAUSE,
KEY_RIGHT,
KEY_SETUP,
KEY_UP,
KEY_UNDEFINED
} gKey;
/******************************************************************************!
* \fn keypadInit
******************************************************************************/
void keypadInit()
{
gLircSocket = lirc_init("irexec", 1);
if (gLircSocket == -1) {
ERROR("lirc_init");
}
if (fcntl(gLircSocket, F_SETFL,
fcntl(gLircSocket, F_GETFL, 0) | O_NONBLOCK) == -1) {
ERROR("fcntl");
}
}
/******************************************************************************!
* \fn keypadRead
******************************************************************************/
void keypadRead()
{
char* code;
char* backup;
char* button;
gKey = KEY_UNDEFINED;
if (lirc_nextcode(&code) != 0 || code == NULL) {
return;
}
backup = strdup(code);
if (backup == NULL) {
ERROR("strdup");
free(code);
return;
}
strtok(backup, " ");
strtok(NULL, " ");
button = strtok(NULL, " ");
if (button == NULL) {
ERROR("strtok");
free(backup);
free(code);
return;
}
/* */ if (strcmp(button, "KEY_BACK") == 0) {
gKey = KEY_BACK;
} else if (strcmp(button, "KEY_DOWN") == 0) {
gKey = KEY_DOWN;
} else if (strcmp(button, "KEY_LEFT") == 0) {
gKey = KEY_LEFT;
} else if (strcmp(button, "KEY_MODE") == 0) {
gKey = KEY_MODE;
} else if (strcmp(button, "KEY_OK") == 0) {
gKey = KEY_OK;
} else if (strcmp(button, "KEY_PLAYPAUSE") == 0) {
gKey = KEY_PLAYPAUSE;
} else if (strcmp(button, "KEY_RIGHT") == 0) {
gKey = KEY_RIGHT;
} else if (strcmp(button, "KEY_SETUP") == 0) {
gKey = KEY_SETUP;
} else if (strcmp(button, "KEY_UP") == 0) {
gKey = KEY_UP;
} else {
ERROR("KEY_UNDEFINED %s", button);
gKey = KEY_UNDEFINED;
}
DEBUG("key = %d", gKey);
free(backup);
free(code);
}
/******************************************************************************!
* \fn keypadQuit
******************************************************************************/
void keypadQuit()
{
lirc_deinit();
}
/******************************************************************************!
* \fn undefinedButton
******************************************************************************/
int undefinedButton()
{
return gKey == KEY_UNDEFINED;
}
/******************************************************************************!
* \fn downButton
******************************************************************************/
int downButton()
{
return gKey == KEY_DOWN;
}
/******************************************************************************!
* \fn leftButton
******************************************************************************/
int leftButton()
{
return gKey == KEY_LEFT;
}
/******************************************************************************!
* \fn okButton
******************************************************************************/
int okButton()
{
return gKey == KEY_OK;
}
/******************************************************************************!
* \fn rightButton
******************************************************************************/
int rightButton()
{
return gKey == KEY_RIGHT;
}
/******************************************************************************!
* \fn randButton
******************************************************************************/
int randButton()
{
return gKey == KEY_SETUP;
}
/******************************************************************************!
* \fn upButton
******************************************************************************/
int upButton()
{
return gKey == KEY_UP;
}
/******************************************************************************!
* \fn haltButton
******************************************************************************/
int haltButton()
{
return gKey == KEY_MODE;
}
/******************************************************************************!
* \fn backButton
******************************************************************************/
int backButton()
{
return gKey == KEY_BACK;
}