mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-libstb-hal.git
synced 2025-08-26 23:12:44 +02:00
libarmbox delete unnecessary code
Origin commit data
------------------
Branch: master
Commit: 2054081eeb
Author: max_10 <max_10@gmx.de>
Date: 2017-09-25 (Mon, 25 Sep 2017)
------------------
No further description and justification available within origin commit message!
------------------
This commit was generated by Migit
This commit is contained in:
@@ -1,72 +0,0 @@
|
|||||||
libtriple reimplements the interfaces of the libcoolstrem library for
|
|
||||||
the Tripledragon receiver.
|
|
||||||
|
|
||||||
There are a few debugging or configuration helpers which affect the
|
|
||||||
way libtriple does some things. They are all configured by exporting
|
|
||||||
environment variables, which are described here:
|
|
||||||
|
|
||||||
TRIPLE_NOSCART=1 - makes neutrino *not* do any voltage switching on
|
|
||||||
SCART pin 8, probably not useful for anyone but me
|
|
||||||
|
|
||||||
TRIPLE_DEBUG=... - controls various debugging levels in libtriple
|
|
||||||
valid values for the different component:
|
|
||||||
audio 0x01
|
|
||||||
video 0x02
|
|
||||||
demux 0x04
|
|
||||||
play 0x08
|
|
||||||
power 0x10
|
|
||||||
init 0x20
|
|
||||||
ca 0x40
|
|
||||||
record 0x80
|
|
||||||
all 0xff
|
|
||||||
multiple levels are added / ORed together, so if you want to
|
|
||||||
debug record and playback code, do "export TRIPLE_DEBUG=0x88"
|
|
||||||
for audio & video use TRIPLE_DEBUG=0x3
|
|
||||||
|
|
||||||
DSP_DEVICE
|
|
||||||
MIX_DEVICE - alternative audio devices for the audioplayer and internet
|
|
||||||
radio. Those are used to output music to e.g. USB audio devices.
|
|
||||||
Here is what you need to do:
|
|
||||||
* look in /dev/sound which devices are already there. Probably
|
|
||||||
/dev/sound/dsp and /dev/sound/mixer, created by the tdoss driver
|
|
||||||
* make sure that the USB HC driver is loaded:
|
|
||||||
modprobe ohci-hcd
|
|
||||||
* load the USB audio driver:
|
|
||||||
modprobe audio
|
|
||||||
* plug in your USB audio device, check with "dmesg" that it is
|
|
||||||
recognised by the kernel
|
|
||||||
* look in /dev/sound which new devices are there. Probably it's
|
|
||||||
/dev/sound/dsp1 and /dev/sound/mixer1. If there are more - well
|
|
||||||
it's time to experiment ;)
|
|
||||||
* export DSP_DEVICE=/dev/sound/dsp1 and MIX_DEVICE=/dev/sound/mixer1
|
|
||||||
(of course the devices you found in the last step)
|
|
||||||
* from the same shell you exported the variables, start neutrino
|
|
||||||
(make sure that an already running neutrino is stopped before you
|
|
||||||
do that)
|
|
||||||
* start the audioplayer, play a track. Look for log lines like
|
|
||||||
[LT:106b5788:audio ] PrepareClipPlay: dsp_dev /dev/sound/dsp1 mix_dev /dev/sound/mixer1
|
|
||||||
* if it works - fine :-)
|
|
||||||
* if it does not work, look for:
|
|
||||||
PrepareClipPlay: DSP_DEVICE is set (/dev/sound/dsp1) but cannot be opened, fall back to /dev/sound/dsp
|
|
||||||
PrepareClipPlay: dsp_dev /dev/sound/dsp mix_dev /dev/sound/mixer1
|
|
||||||
PrepareClipPlay: open mixer /dev/sound/mixer1 failed (No such file or directory)
|
|
||||||
* this basically means that the device is not there. Different errors
|
|
||||||
will get different messages - I cannot trigger those now, so you'll
|
|
||||||
need to find them out by yourself ;)
|
|
||||||
* another possible messag you may get is:
|
|
||||||
PrepareClipPlay: more than one mixer control: devmask 00000021 stereo 00000021
|
|
||||||
This means that your device has more than one mixer. The set bit
|
|
||||||
numbers in the devmask are the different mixers, in this case
|
|
||||||
it would be number 0 and 5. To select one of those, export
|
|
||||||
MIX_NUMBER=5 or MIX_NUMBER=0 (this code is untested, there may
|
|
||||||
be bugs)
|
|
||||||
|
|
||||||
So now I found out what devices to use, but how do I make that permanent?
|
|
||||||
That's easy:
|
|
||||||
* create or extend /etc/rcS.local with
|
|
||||||
modprobe ohci-hcd
|
|
||||||
modprobe audio
|
|
||||||
* create or extend /etc/profile.local with
|
|
||||||
export DSP_DEVICE=/dev/sound/dsp1
|
|
||||||
export MIX_DEVICE=/dev/sound/mixer1
|
|
||||||
* reboot. Enjoy.
|
|
@@ -90,7 +90,6 @@ extern cVideo *videoDecoder;
|
|||||||
|
|
||||||
cDemux *videoDemux = NULL;
|
cDemux *videoDemux = NULL;
|
||||||
cDemux *audioDemux = NULL;
|
cDemux *audioDemux = NULL;
|
||||||
//cDemux *pcrDemux = NULL;
|
|
||||||
|
|
||||||
static const char *DMX_T[] = {
|
static const char *DMX_T[] = {
|
||||||
"DMX_INVALID",
|
"DMX_INVALID",
|
||||||
@@ -483,10 +482,10 @@ bool cDemux::pesFilter(const unsigned short pid)
|
|||||||
_open();
|
_open();
|
||||||
|
|
||||||
memset(&p_flt, 0, sizeof(p_flt));
|
memset(&p_flt, 0, sizeof(p_flt));
|
||||||
p_flt.pid = pid;
|
p_flt.pid = pid;
|
||||||
p_flt.output = DMX_OUT_DECODER;
|
p_flt.output = DMX_OUT_DECODER;
|
||||||
p_flt.input = DMX_IN_FRONTEND;
|
p_flt.input = DMX_IN_FRONTEND;
|
||||||
p_flt.flags = DMX_IMMEDIATE_START;
|
p_flt.flags = 0;
|
||||||
|
|
||||||
switch (dmx_type) {
|
switch (dmx_type) {
|
||||||
case DMX_PCR_ONLY_CHANNEL:
|
case DMX_PCR_ONLY_CHANNEL:
|
||||||
|
@@ -1,6 +1,3 @@
|
|||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "init_lib.h"
|
#include "init_lib.h"
|
||||||
@@ -12,254 +9,12 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <linux/dvb/dmx.h>
|
|
||||||
|
|
||||||
#include "pwrmngr.h"
|
#include "pwrmngr.h"
|
||||||
|
|
||||||
#include "lt_debug.h"
|
#include "lt_debug.h"
|
||||||
#define lt_debug(args...) _lt_debug(TRIPLE_DEBUG_INIT, NULL, args)
|
#define lt_debug(args...) _lt_debug(TRIPLE_DEBUG_INIT, NULL, args)
|
||||||
#define lt_info(args...) _lt_info(TRIPLE_DEBUG_INIT, NULL, args)
|
#define lt_info(args...) _lt_info(TRIPLE_DEBUG_INIT, NULL, args)
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <linux/input.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <poll.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/prctl.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define VIRTUALINPUT "/sys/devices/virtual/input"
|
|
||||||
#define DEVINPUT "/dev/input"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char *name;
|
|
||||||
const char *desc;
|
|
||||||
int fd;
|
|
||||||
unsigned int major;
|
|
||||||
unsigned int minor;
|
|
||||||
time_t next_discovery;
|
|
||||||
} input_device_t;
|
|
||||||
|
|
||||||
static input_device_t input_device[] = {
|
|
||||||
{ "/dev/input/nevis_ir", "lircd", -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/tdt_rc", "TDT RC event driver", -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/fulan_fp", "fulan front panel buttons", -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event0", NULL, -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event1", NULL, -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event2", NULL, -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event3", NULL, -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event4", NULL, -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event5", NULL, -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event6", NULL, -1, 0, 0, 0 },
|
|
||||||
{ "/dev/input/event7", NULL, -1, 0, 0, 0 },
|
|
||||||
{ NULL, NULL, -1, 0, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
#define number_of_input_devices (sizeof(input_device)/sizeof(input_device_t) - 1)
|
|
||||||
|
|
||||||
static void do_mknod(int i, char *d_name) {
|
|
||||||
char name[255];
|
|
||||||
int dev = -1;
|
|
||||||
// I've no idea how the event device number is actually calculated. Just loop. --martii
|
|
||||||
|
|
||||||
for (int j = 0; j < 99 && dev < 0; j++) {
|
|
||||||
snprintf(name, sizeof(name), VIRTUALINPUT "/%s/event%d/dev", d_name, j);
|
|
||||||
dev = open (name, O_RDONLY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dev > -1) {
|
|
||||||
char buf[255];
|
|
||||||
int l = read(dev, buf, sizeof(buf) - 1);
|
|
||||||
close(dev);
|
|
||||||
if (l > -1) {
|
|
||||||
buf[l] = 0;
|
|
||||||
if (2 == sscanf(buf, "%d:%d", &input_device[i].major, &input_device[i].minor)) {
|
|
||||||
mknod(input_device[i].name, 0666 | S_IFCHR,
|
|
||||||
gnu_dev_makedev(input_device[i].major, input_device[i].minor));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void create_input_devices (void) {
|
|
||||||
DIR *d = opendir (VIRTUALINPUT);
|
|
||||||
if (d) {
|
|
||||||
struct dirent *e;
|
|
||||||
while ((e = readdir(d))) {
|
|
||||||
char name[255];
|
|
||||||
if (e->d_name[0] == '.')
|
|
||||||
continue;
|
|
||||||
snprintf(name, sizeof(name), VIRTUALINPUT "/%s/name", e->d_name);
|
|
||||||
int n = open(name, O_RDONLY);
|
|
||||||
if (n > -1) {
|
|
||||||
char buf[255];
|
|
||||||
int l = read(n, buf, sizeof(buf) - 1);
|
|
||||||
close(n);
|
|
||||||
if (l > 1) {
|
|
||||||
do
|
|
||||||
buf[l--] = 0;
|
|
||||||
while (l > 1 && buf[l] == '\n');
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < number_of_input_devices; i++)
|
|
||||||
if (input_device[i].desc && !strcmp(buf, input_device[i].desc)) {
|
|
||||||
do_mknod(i, e->d_name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
closedir(d);
|
|
||||||
}
|
|
||||||
// remove any event* files left that point to our "well-known" inputs
|
|
||||||
d = opendir (DEVINPUT);
|
|
||||||
if (d) {
|
|
||||||
struct dirent *e;
|
|
||||||
while ((e = readdir(d))) {
|
|
||||||
char name[255];
|
|
||||||
if (strncmp(e->d_name, "event", 5))
|
|
||||||
continue;
|
|
||||||
snprintf(name, sizeof(name), DEVINPUT "/%s", e->d_name);
|
|
||||||
struct stat st;
|
|
||||||
if (stat(name, &st))
|
|
||||||
continue;
|
|
||||||
for (unsigned int i = 0; i < number_of_input_devices; i++)
|
|
||||||
if (input_device[i].major &&
|
|
||||||
gnu_dev_major(st.st_rdev) == input_device[i].major &&
|
|
||||||
gnu_dev_minor(st.st_rdev) == input_device[i].minor)
|
|
||||||
unlink(name);
|
|
||||||
}
|
|
||||||
closedir(d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static pthread_t inmux_task = 0;
|
|
||||||
static int inmux_thread_running = 0;
|
|
||||||
|
|
||||||
static void open_input_devices(void) {
|
|
||||||
time_t now = time(NULL);
|
|
||||||
for (unsigned int i = 0; i < number_of_input_devices; i++)
|
|
||||||
if ((input_device[i].fd < 0) && (input_device[i].next_discovery <= now)) {
|
|
||||||
input_device[i].next_discovery = now + 60;
|
|
||||||
input_device[i].fd = open(input_device[i].name, O_RDWR | O_NONBLOCK);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void reopen_input_devices(void) {
|
|
||||||
create_input_devices();
|
|
||||||
time_t now = time(NULL);
|
|
||||||
for (unsigned int i = 0; i < number_of_input_devices; i++) {
|
|
||||||
input_device[i].next_discovery = now + 60;
|
|
||||||
int fd = open(input_device[i].name, O_RDWR | O_NONBLOCK);
|
|
||||||
if (fd > -1) {
|
|
||||||
if (input_device[i].fd > -1) {
|
|
||||||
dup2(fd, input_device[i].fd);
|
|
||||||
close (fd);
|
|
||||||
} else {
|
|
||||||
input_device[i].fd = fd;
|
|
||||||
}
|
|
||||||
} else if (input_device[i].fd > -1) {
|
|
||||||
close (input_device[i].fd);
|
|
||||||
input_device[i].fd = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void close_input_devices(void) {
|
|
||||||
for (unsigned int i = 0; i < number_of_input_devices; i++)
|
|
||||||
if (input_device[i].fd > -1) {
|
|
||||||
close(input_device[i].fd);
|
|
||||||
input_device[i].fd = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void poll_input_devices(void) {
|
|
||||||
struct pollfd fds[number_of_input_devices];
|
|
||||||
input_device_t *inputs[number_of_input_devices];
|
|
||||||
int nfds = 0;
|
|
||||||
for (unsigned int i = 1; i < number_of_input_devices; i++)
|
|
||||||
if (input_device[i].fd > -1) {
|
|
||||||
fds[nfds].fd = input_device[i].fd;
|
|
||||||
fds[nfds].events = POLLIN | POLLHUP | POLLERR;
|
|
||||||
fds[nfds].revents = 0;
|
|
||||||
inputs[nfds] = &input_device[i];
|
|
||||||
nfds++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nfds == 0) {
|
|
||||||
// Only a single input device, which happens to be our master. poll() to avoid looping too fast.
|
|
||||||
fds[0].fd = input_device[0].fd;
|
|
||||||
fds[0].events = POLLIN | POLLHUP | POLLERR;
|
|
||||||
fds[0].revents = 0;
|
|
||||||
poll(fds, 1, 60000 /* ms */);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int r = poll(fds, nfds, 60000 /* ms */);
|
|
||||||
if (r < 0) {
|
|
||||||
if (errno != EAGAIN) {
|
|
||||||
lt_info("%s: poll(): %m\n", __func__);
|
|
||||||
inmux_thread_running = 0;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < nfds && r > 0; i++) {
|
|
||||||
if (fds[i].revents & POLLIN) {
|
|
||||||
//fprintf(stderr, "### input from fd %d (%s)\n", fds[i].fd, inputs[i]->name);
|
|
||||||
struct input_event ev;
|
|
||||||
while (sizeof(ev) == read(fds[i].fd, &ev, sizeof(ev)))
|
|
||||||
write(input_device[0].fd, &ev, sizeof(ev));
|
|
||||||
r--;
|
|
||||||
} else if (fds[i].revents & (POLLHUP | POLLERR | POLLNVAL)) {
|
|
||||||
//fprintf(stderr, "### error on %d (%s)\n", fds[i].fd, inputs[i]->name);
|
|
||||||
close (fds[i].fd);
|
|
||||||
inputs[i]->fd = -1;
|
|
||||||
r--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *inmux_thread(void *)
|
|
||||||
{
|
|
||||||
char threadname[17];
|
|
||||||
strncpy(threadname, __func__, sizeof(threadname));
|
|
||||||
threadname[16] = 0;
|
|
||||||
prctl (PR_SET_NAME, (unsigned long)&threadname);
|
|
||||||
|
|
||||||
inmux_thread_running = 1;
|
|
||||||
while (inmux_thread_running) {
|
|
||||||
open_input_devices();
|
|
||||||
poll_input_devices();
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void start_inmux_thread(void)
|
|
||||||
{
|
|
||||||
input_device[0].fd = open(input_device[0].name, O_RDWR | O_NONBLOCK); // nevis_ir. This is mandatory.
|
|
||||||
if (input_device[0].fd < 0){
|
|
||||||
lt_info("%s: open(%s): %m\n", __func__, input_device[0].name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (pthread_create(&inmux_task, 0, inmux_thread, NULL) != 0)
|
|
||||||
{
|
|
||||||
lt_info("%s: inmux thread pthread_create: %m\n", __func__);
|
|
||||||
inmux_thread_running = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pthread_detach(inmux_task);
|
|
||||||
}
|
|
||||||
|
|
||||||
void stop_inmux_thread(void)
|
|
||||||
{
|
|
||||||
inmux_thread_running = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
|
|
||||||
void init_td_api()
|
void init_td_api()
|
||||||
@@ -271,31 +26,7 @@ void init_td_api()
|
|||||||
{
|
{
|
||||||
cCpuFreqManager f;
|
cCpuFreqManager f;
|
||||||
f.SetCpuFreq(0); /* CPUFREQ == 0 is the trigger for leaving standby */
|
f.SetCpuFreq(0); /* CPUFREQ == 0 is the trigger for leaving standby */
|
||||||
create_input_devices();
|
|
||||||
start_inmux_thread();
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* this is a strange hack: the drivers seem to only work correctly after
|
|
||||||
* demux0 has been used once. After that, we can use demux1,2,... */
|
|
||||||
struct dmx_pes_filter_params p;
|
|
||||||
int dmx = open("/dev/dvb/adapter0/demux0", O_RDWR|O_CLOEXEC);
|
|
||||||
if (dmx < 0)
|
|
||||||
lt_info("%s: ERROR open /dev/dvb/adapter0/demux0 (%m)\n", __func__);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(&p, 0, sizeof(p));
|
|
||||||
p.output = DMX_OUT_DECODER;
|
|
||||||
p.input = DMX_IN_FRONTEND;
|
|
||||||
p.flags = DMX_IMMEDIATE_START;
|
|
||||||
p.pes_type = DMX_PES_VIDEO;
|
|
||||||
ioctl(dmx, DMX_SET_PES_FILTER, &p);
|
|
||||||
ioctl(dmx, DMX_STOP);
|
|
||||||
close(dmx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
reopen_input_devices();
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
lt_info("%s end\n", __FUNCTION__);
|
lt_info("%s end\n", __FUNCTION__);
|
||||||
}
|
}
|
||||||
@@ -303,9 +34,5 @@ void init_td_api()
|
|||||||
void shutdown_td_api()
|
void shutdown_td_api()
|
||||||
{
|
{
|
||||||
lt_info("%s, initialized = %d\n", __FUNCTION__, (int)initialized);
|
lt_info("%s, initialized = %d\n", __FUNCTION__, (int)initialized);
|
||||||
if (initialized) {
|
|
||||||
stop_inmux_thread();
|
|
||||||
close_input_devices();
|
|
||||||
}
|
|
||||||
initialized = false;
|
initialized = false;
|
||||||
}
|
}
|
||||||
|
4284
libarmbox/irmp.c
4284
libarmbox/irmp.c
File diff suppressed because it is too large
Load Diff
528
libarmbox/irmp.h
528
libarmbox/irmp.h
@@ -1,528 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* irmp.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de
|
|
||||||
*
|
|
||||||
* $Id: irmp.h,v 1.70 2012/02/21 08:41:46 fm Exp $
|
|
||||||
*
|
|
||||||
* ATMEGA88 @ 8 MHz
|
|
||||||
*
|
|
||||||
* This program 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.
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _WC_IRMP_H_
|
|
||||||
#define _WC_IRMP_H_
|
|
||||||
|
|
||||||
#if defined(__18CXX) // Microchip C18 declaration of missing typedef
|
|
||||||
typedef unsigned char uint8_t;
|
|
||||||
typedef unsigned int uint16_t;
|
|
||||||
#endif //Microchip C18
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* timing constants:
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
// fm 22.09.2011: may not be more than 16000L, otherwise some JVC codes will not be accepted
|
|
||||||
#define IRMP_TIMEOUT_TIME 15500.0e-6 // timeout after 15.5 ms darkness
|
|
||||||
#define IRMP_TIMEOUT_TIME_MS 15500L // timeout after 15.5 ms darkness
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_NIKON_PROTOCOL == 1
|
|
||||||
#define IRMP_TIMEOUT_NIKON_TIME 29500.0e-6 // 2nd timeout after 29.5 ms darkness (only for NIKON!)
|
|
||||||
#define IRMP_TIMEOUT_NIKON_TIME_MS 29500L // 2nd timeout after 29.5 ms darkness
|
|
||||||
typedef uint16_t PAUSE_LEN;
|
|
||||||
#define IRMP_TIMEOUT_NIKON_LEN (PAUSE_LEN)(F_INTERRUPTS * IRMP_TIMEOUT_NIKON_TIME + 0.5)
|
|
||||||
#else
|
|
||||||
#if (F_INTERRUPTS * IRMP_TIMEOUT_TIME_MS) / 1000000 >= 254
|
|
||||||
typedef uint16_t PAUSE_LEN;
|
|
||||||
#else
|
|
||||||
typedef uint8_t PAUSE_LEN;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define IRMP_TIMEOUT_LEN (PAUSE_LEN)(F_INTERRUPTS * IRMP_TIMEOUT_TIME + 0.5)
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* IR protocols
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#define IRMP_SIRCS_PROTOCOL 1 // Sony
|
|
||||||
#define IRMP_NEC_PROTOCOL 2 // NEC, Pioneer, JVC, Toshiba, NoName etc.
|
|
||||||
#define IRMP_SAMSUNG_PROTOCOL 3 // Samsung
|
|
||||||
#define IRMP_MATSUSHITA_PROTOCOL 4 // Matsushita
|
|
||||||
#define IRMP_KASEIKYO_PROTOCOL 5 // Kaseikyo (Panasonic etc)
|
|
||||||
#define IRMP_RECS80_PROTOCOL 6 // Philips, Thomson, Nordmende, Telefunken, Saba
|
|
||||||
#define IRMP_RC5_PROTOCOL 7 // Philips etc
|
|
||||||
#define IRMP_DENON_PROTOCOL 8 // Denon, Sharp
|
|
||||||
#define IRMP_RC6_PROTOCOL 9 // Philips etc
|
|
||||||
#define IRMP_SAMSUNG32_PROTOCOL 10 // Samsung32: no sync pulse at bit 16, length 32 instead of 37
|
|
||||||
#define IRMP_APPLE_PROTOCOL 11 // Apple, very similar to NEC
|
|
||||||
#define IRMP_RECS80EXT_PROTOCOL 12 // Philips, Technisat, Thomson, Nordmende, Telefunken, Saba
|
|
||||||
#define IRMP_NUBERT_PROTOCOL 13 // Nubert
|
|
||||||
#define IRMP_BANG_OLUFSEN_PROTOCOL 14 // Bang & Olufsen
|
|
||||||
#define IRMP_GRUNDIG_PROTOCOL 15 // Grundig
|
|
||||||
#define IRMP_NOKIA_PROTOCOL 16 // Nokia
|
|
||||||
#define IRMP_SIEMENS_PROTOCOL 17 // Siemens, e.g. Gigaset
|
|
||||||
#define IRMP_FDC_PROTOCOL 18 // FDC keyboard
|
|
||||||
#define IRMP_RCCAR_PROTOCOL 19 // RC Car
|
|
||||||
#define IRMP_JVC_PROTOCOL 20 // JVC (NEC with 16 bits)
|
|
||||||
#define IRMP_RC6A_PROTOCOL 21 // RC6A, e.g. Kathrein, XBOX
|
|
||||||
#define IRMP_NIKON_PROTOCOL 22 // Nikon
|
|
||||||
#define IRMP_RUWIDO_PROTOCOL 23 // Ruwido, e.g. T-Home Mediareceiver
|
|
||||||
#define IRMP_IR60_PROTOCOL 24 // IR60 (SAB2008)
|
|
||||||
#define IRMP_KATHREIN_PROTOCOL 25 // Kathrein
|
|
||||||
#define IRMP_NETBOX_PROTOCOL 26 // Netbox keyboard (bitserial)
|
|
||||||
#define IRMP_NEC16_PROTOCOL 27 // NEC with 16 bits (incl. sync)
|
|
||||||
#define IRMP_NEC42_PROTOCOL 28 // NEC with 42 bits
|
|
||||||
#define IRMP_LEGO_PROTOCOL 29 // LEGO Power Functions RC
|
|
||||||
#define IRMP_THOMSON_PROTOCOL 30 // Thomson
|
|
||||||
#define IRMP_GRUNDIG2_PROTOCOL 31 // Grundig, e.g. TP400
|
|
||||||
|
|
||||||
#define IRMP_N_PROTOCOLS 31 // number of supported protocols
|
|
||||||
|
|
||||||
// some flags of struct IRMP_PARAMETER:
|
|
||||||
#define IRMP_PARAM_FLAG_IS_MANCHESTER 0x01
|
|
||||||
#define IRMP_PARAM_FLAG_1ST_PULSE_IS_1 0x02
|
|
||||||
#define IRMP_PARAM_FLAG_IS_SERIAL 0x04
|
|
||||||
|
|
||||||
#define SIRCS_START_BIT_PULSE_TIME 2400.0e-6 // 2400 usec pulse
|
|
||||||
#define SIRCS_START_BIT_PAUSE_TIME 600.0e-6 // 600 usec pause
|
|
||||||
#define SIRCS_1_PULSE_TIME 1200.0e-6 // 1200 usec pulse
|
|
||||||
#define SIRCS_0_PULSE_TIME 600.0e-6 // 600 usec pulse
|
|
||||||
#define SIRCS_PAUSE_TIME 600.0e-6 // 600 usec pause
|
|
||||||
#define SIRCS_FRAMES 3 // SIRCS sends each frame 3 times
|
|
||||||
#define SIRCS_AUTO_REPETITION_PAUSE_TIME 25.0e-3 // auto repetition after 25ms
|
|
||||||
#define SIRCS_FRAME_REPEAT_PAUSE_TIME 25.0e-3 // frame repeat after 25ms
|
|
||||||
#define SIRCS_ADDRESS_OFFSET 15 // skip 15 bits
|
|
||||||
#define SIRCS_ADDRESS_LEN 5 // read up to 5 address bits
|
|
||||||
#define SIRCS_COMMAND_OFFSET 0 // skip 0 bits
|
|
||||||
#define SIRCS_COMMAND_LEN 15 // read 12-15 command bits
|
|
||||||
#define SIRCS_MINIMUM_DATA_LEN 12 // minimum data length
|
|
||||||
#define SIRCS_COMPLETE_DATA_LEN 20 // complete length - may be up to 20
|
|
||||||
#define SIRCS_STOP_BIT 0 // has no stop bit
|
|
||||||
#define SIRCS_LSB 1 // LSB...MSB
|
|
||||||
#define SIRCS_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define NEC_START_BIT_PULSE_TIME 9000.0e-6 // 9000 usec pulse
|
|
||||||
#define NEC_START_BIT_PAUSE_TIME 4500.0e-6 // 4500 usec pause
|
|
||||||
#define NEC_REPEAT_START_BIT_PAUSE_TIME 2250.0e-6 // 2250 usec pause
|
|
||||||
#define NEC_PULSE_TIME 560.0e-6 // 560 usec pulse
|
|
||||||
#define NEC_1_PAUSE_TIME 1690.0e-6 // 1690 usec pause
|
|
||||||
#define NEC_0_PAUSE_TIME 560.0e-6 // 560 usec pause
|
|
||||||
#define NEC_FRAME_REPEAT_PAUSE_TIME 40.0e-3 // frame repeat after 40ms
|
|
||||||
#define NEC_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define NEC_ADDRESS_LEN 16 // read 16 address bits
|
|
||||||
#define NEC_COMMAND_OFFSET 16 // skip 16 bits (8 address + 8 /address)
|
|
||||||
#define NEC_COMMAND_LEN 16 // read 16 bits (8 command + 8 /command)
|
|
||||||
#define NEC_COMPLETE_DATA_LEN 32 // complete length
|
|
||||||
#define NEC_STOP_BIT 1 // has stop bit
|
|
||||||
#define NEC_LSB 1 // LSB...MSB
|
|
||||||
#define NEC_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define NEC42_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define NEC42_ADDRESS_LEN 13 // read 13 address bits
|
|
||||||
#define NEC42_COMMAND_OFFSET 26 // skip 26 bits (2 x 13 address bits)
|
|
||||||
#define NEC42_COMMAND_LEN 8 // read 8 command bits
|
|
||||||
#define NEC42_COMPLETE_DATA_LEN 42 // complete length (2 x 13 + 2 x 8)
|
|
||||||
|
|
||||||
#define NEC16_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define NEC16_ADDRESS_LEN 8 // read 8 address bits
|
|
||||||
#define NEC16_COMMAND_OFFSET 8 // skip 8 bits (8 address)
|
|
||||||
#define NEC16_COMMAND_LEN 8 // read 8 bits (8 command)
|
|
||||||
#define NEC16_COMPLETE_DATA_LEN 16 // complete length
|
|
||||||
|
|
||||||
#define SAMSUNG_START_BIT_PULSE_TIME 4500.0e-6 // 4500 usec pulse
|
|
||||||
#define SAMSUNG_START_BIT_PAUSE_TIME 4500.0e-6 // 4500 usec pause
|
|
||||||
#define SAMSUNG_PULSE_TIME 550.0e-6 // 550 usec pulse
|
|
||||||
#define SAMSUNG_1_PAUSE_TIME 1650.0e-6 // 1650 usec pause
|
|
||||||
#define SAMSUNG_0_PAUSE_TIME 550.0e-6 // 550 usec pause
|
|
||||||
|
|
||||||
#define SAMSUNG_FRAME_REPEAT_PAUSE_TIME 25.0e-3 // frame repeat after 25ms
|
|
||||||
#define SAMSUNG_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define SAMSUNG_ADDRESS_LEN 16 // read 16 address bits
|
|
||||||
#define SAMSUNG_ID_OFFSET 17 // skip 16 + 1 sync bit
|
|
||||||
#define SAMSUNG_ID_LEN 4 // read 4 id bits
|
|
||||||
#define SAMSUNG_COMMAND_OFFSET 21 // skip 16 + 1 sync + 4 data bits
|
|
||||||
#define SAMSUNG_COMMAND_LEN 16 // read 16 command bits
|
|
||||||
#define SAMSUNG_COMPLETE_DATA_LEN 37 // complete length
|
|
||||||
#define SAMSUNG_STOP_BIT 1 // has stop bit
|
|
||||||
#define SAMSUNG_LSB 1 // LSB...MSB?
|
|
||||||
#define SAMSUNG_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define SAMSUNG32_COMMAND_OFFSET 16 // skip 16 bits
|
|
||||||
#define SAMSUNG32_COMMAND_LEN 16 // read 16 command bits
|
|
||||||
#define SAMSUNG32_COMPLETE_DATA_LEN 32 // complete length
|
|
||||||
#define SAMSUNG32_FRAMES 1 // SAMSUNG32 sends each frame 1 times
|
|
||||||
#define SAMSUNG32_AUTO_REPETITION_PAUSE_TIME 47.0e-3 // repetition after 47 ms
|
|
||||||
#define SAMSUNG32_FRAME_REPEAT_PAUSE_TIME 47.0e-3 // frame repeat after 47ms
|
|
||||||
|
|
||||||
#define MATSUSHITA_START_BIT_PULSE_TIME 3488.0e-6 // 3488 usec pulse
|
|
||||||
#define MATSUSHITA_START_BIT_PAUSE_TIME 3488.0e-6 // 3488 usec pause
|
|
||||||
#define MATSUSHITA_PULSE_TIME 872.0e-6 // 872 usec pulse
|
|
||||||
#define MATSUSHITA_1_PAUSE_TIME 2616.0e-6 // 2616 usec pause
|
|
||||||
#define MATSUSHITA_0_PAUSE_TIME 872.0e-6 // 872 usec pause
|
|
||||||
#define MATSUSHITA_FRAME_REPEAT_PAUSE_TIME 45.0e-3 // frame repeat after 45ms
|
|
||||||
#define MATSUSHITA_ADDRESS_OFFSET 12 // skip 12 bits
|
|
||||||
#define MATSUSHITA_ADDRESS_LEN 12 // read 12 address bits
|
|
||||||
#define MATSUSHITA_COMMAND_OFFSET 0 // skip 0 bits
|
|
||||||
#define MATSUSHITA_COMMAND_LEN 12 // read 12 bits (6 custom + 6 command)
|
|
||||||
#define MATSUSHITA_COMPLETE_DATA_LEN 24 // complete length
|
|
||||||
#define MATSUSHITA_STOP_BIT 1 // has stop bit
|
|
||||||
#define MATSUSHITA_LSB 1 // LSB...MSB?
|
|
||||||
#define MATSUSHITA_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define KASEIKYO_START_BIT_PULSE_TIME 3380.0e-6 // 3380 usec pulse
|
|
||||||
#define KASEIKYO_START_BIT_PAUSE_TIME 1690.0e-6 // 1690 usec pause
|
|
||||||
#define KASEIKYO_PULSE_TIME 423.0e-6 // 525 usec pulse
|
|
||||||
#define KASEIKYO_1_PAUSE_TIME 1269.0e-6 // 525 usec pause
|
|
||||||
#define KASEIKYO_0_PAUSE_TIME 423.0e-6 // 1690 usec pause
|
|
||||||
#define KASEIKYO_AUTO_REPETITION_PAUSE_TIME 74.0e-3 // repetition after 74 ms
|
|
||||||
#define KASEIKYO_FRAME_REPEAT_PAUSE_TIME 74.0e-3 // frame repeat after 74 ms
|
|
||||||
#define KASEIKYO_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define KASEIKYO_ADDRESS_LEN 16 // read 16 address bits
|
|
||||||
#define KASEIKYO_COMMAND_OFFSET 28 // skip 28 bits (16 manufacturer & 4 parity & 8 genre)
|
|
||||||
#define KASEIKYO_COMMAND_LEN 12 // read 12 command bits (10 real command & 2 id)
|
|
||||||
#define KASEIKYO_COMPLETE_DATA_LEN 48 // complete length
|
|
||||||
#define KASEIKYO_STOP_BIT 1 // has stop bit
|
|
||||||
#define KASEIKYO_LSB 1 // LSB...MSB?
|
|
||||||
#define KASEIKYO_FRAMES 2 // KASEIKYO sends 1st frame 2 times
|
|
||||||
#define KASEIKYO_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define RECS80_START_BIT_PULSE_TIME 158.0e-6 // 158 usec pulse
|
|
||||||
#define RECS80_START_BIT_PAUSE_TIME 7432.0e-6 // 7432 usec pause
|
|
||||||
#define RECS80_PULSE_TIME 158.0e-6 // 158 usec pulse
|
|
||||||
#define RECS80_1_PAUSE_TIME 7432.0e-6 // 7432 usec pause
|
|
||||||
#define RECS80_0_PAUSE_TIME 4902.0e-6 // 4902 usec pause
|
|
||||||
#define RECS80_FRAME_REPEAT_PAUSE_TIME 45.0e-3 // frame repeat after 45ms
|
|
||||||
#define RECS80_ADDRESS_OFFSET 1 // skip 1 bit (toggle bit)
|
|
||||||
#define RECS80_ADDRESS_LEN 3 // read 3 address bits
|
|
||||||
#define RECS80_COMMAND_OFFSET 4 // skip 4 bits (1 toggle + 3 address)
|
|
||||||
#define RECS80_COMMAND_LEN 6 // read 6 command bits
|
|
||||||
#define RECS80_COMPLETE_DATA_LEN 10 // complete length
|
|
||||||
#define RECS80_STOP_BIT 1 // has stop bit
|
|
||||||
#define RECS80_LSB 0 // MSB...LSB
|
|
||||||
#define RECS80_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define RC5_BIT_TIME 889.0e-6 // 889 usec pulse/pause
|
|
||||||
#define RC5_FRAME_REPEAT_PAUSE_TIME 45.0e-3 // frame repeat after 45ms
|
|
||||||
|
|
||||||
#define RC5_ADDRESS_OFFSET 1 // skip 1 bit (2nd start)
|
|
||||||
#define RC5_ADDRESS_LEN 6 // read 1 toggle bit (for key repetition detection) + 5 address bits
|
|
||||||
#define RC5_COMMAND_OFFSET 7 // skip 5 bits (2nd start + 1 toggle + 5 address)
|
|
||||||
#define RC5_COMMAND_LEN 6 // read 6 command bits
|
|
||||||
#define RC5_COMPLETE_DATA_LEN 13 // complete length
|
|
||||||
#define RC5_STOP_BIT 0 // has no stop bit
|
|
||||||
#define RC5_LSB 0 // MSB...LSB
|
|
||||||
#define RC5_FLAGS IRMP_PARAM_FLAG_IS_MANCHESTER // flags
|
|
||||||
|
|
||||||
#define DENON_PULSE_TIME 310.0e-6 // 310 usec pulse in practice, 275 in theory
|
|
||||||
#define DENON_1_PAUSE_TIME 1780.0e-6 // 1780 usec pause in practice, 1900 in theory
|
|
||||||
#define DENON_0_PAUSE_TIME 745.0e-6 // 745 usec pause in practice, 775 in theory
|
|
||||||
#define DENON_FRAMES 2 // DENON sends each frame 2 times
|
|
||||||
#define DENON_AUTO_REPETITION_PAUSE_TIME 65.0e-3 // inverted repetition after 65ms
|
|
||||||
#define DENON_FRAME_REPEAT_PAUSE_TIME 65.0e-3 // frame repeat after 65ms
|
|
||||||
#define DENON_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define DENON_ADDRESS_LEN 5 // read 5 address bits
|
|
||||||
#define DENON_COMMAND_OFFSET 5 // skip 5
|
|
||||||
#define DENON_COMMAND_LEN 10 // read 10 command bits
|
|
||||||
#define DENON_COMPLETE_DATA_LEN 15 // complete length
|
|
||||||
#define DENON_STOP_BIT 1 // has stop bit
|
|
||||||
#define DENON_LSB 0 // MSB...LSB
|
|
||||||
#define DENON_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define RC6_START_BIT_PULSE_TIME 2666.0e-6 // 2.666 msec pulse
|
|
||||||
#define RC6_START_BIT_PAUSE_TIME 889.0e-6 // 889 usec pause
|
|
||||||
#define RC6_TOGGLE_BIT_TIME 889.0e-6 // 889 msec pulse/pause
|
|
||||||
#define RC6_BIT_TIME 444.0e-6 // 889 usec pulse/pause
|
|
||||||
#define RC6_FRAME_REPEAT_PAUSE_TIME 45.0e-3 // frame repeat after 45ms
|
|
||||||
#define RC6_ADDRESS_OFFSET 5 // skip "1" + 3 mode bits + 1 toggle bit
|
|
||||||
#define RC6_ADDRESS_LEN 8 // read 8 address bits
|
|
||||||
#define RC6_COMMAND_OFFSET 13 // skip 12 bits ("1" + 3 mode + 1 toggle + 8 address)
|
|
||||||
#define RC6_COMMAND_LEN 8 // read 8 command bits
|
|
||||||
#define RC6_COMPLETE_DATA_LEN_SHORT 21 // complete length
|
|
||||||
#define RC6_COMPLETE_DATA_LEN_LONG 36 // complete length
|
|
||||||
#define RC6_STOP_BIT 0 // has no stop bit
|
|
||||||
#define RC6_LSB 0 // MSB...LSB
|
|
||||||
#define RC6_FLAGS (IRMP_PARAM_FLAG_IS_MANCHESTER | IRMP_PARAM_FLAG_1ST_PULSE_IS_1) // flags
|
|
||||||
|
|
||||||
#define RECS80EXT_START_BIT_PULSE_TIME 158.0e-6 // 158 usec pulse
|
|
||||||
#define RECS80EXT_START_BIT_PAUSE_TIME 3637.0e-6 // 3637 usec pause
|
|
||||||
#define RECS80EXT_PULSE_TIME 158.0e-6 // 158 usec pulse
|
|
||||||
#define RECS80EXT_1_PAUSE_TIME 7432.0e-6 // 7432 usec pause
|
|
||||||
#define RECS80EXT_0_PAUSE_TIME 4902.0e-6 // 4902 usec pause
|
|
||||||
#define RECS80EXT_FRAME_REPEAT_PAUSE_TIME 45.0e-3 // frame repeat after 45ms
|
|
||||||
#define RECS80EXT_ADDRESS_OFFSET 2 // skip 2 bits (2nd start + 1 toggle)
|
|
||||||
#define RECS80EXT_ADDRESS_LEN 4 // read 4 address bits
|
|
||||||
#define RECS80EXT_COMMAND_OFFSET 6 // skip 6 bits (2nd start + 1 toggle + 4 address)
|
|
||||||
#define RECS80EXT_COMMAND_LEN 6 // read 6 command bits
|
|
||||||
#define RECS80EXT_COMPLETE_DATA_LEN 12 // complete length
|
|
||||||
#define RECS80EXT_STOP_BIT 1 // has stop bit
|
|
||||||
#define RECS80EXT_LSB 0 // MSB...LSB
|
|
||||||
#define RECS80EXT_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define NUBERT_START_BIT_PULSE_TIME 1340.0e-6 // 1340 usec pulse
|
|
||||||
#define NUBERT_START_BIT_PAUSE_TIME 340.0e-6 // 340 usec pause
|
|
||||||
#define NUBERT_1_PULSE_TIME 1340.0e-6 // 1340 usec pulse
|
|
||||||
#define NUBERT_1_PAUSE_TIME 340.0e-6 // 340 usec pause
|
|
||||||
#define NUBERT_0_PULSE_TIME 500.0e-6 // 500 usec pulse
|
|
||||||
#define NUBERT_0_PAUSE_TIME 1300.0e-6 // 1300 usec pause
|
|
||||||
#define NUBERT_FRAMES 2 // Nubert sends 2 frames
|
|
||||||
#define NUBERT_AUTO_REPETITION_PAUSE_TIME 35.0e-3 // auto repetition after 35ms
|
|
||||||
#define NUBERT_FRAME_REPEAT_PAUSE_TIME 35.0e-3 // frame repeat after 45ms
|
|
||||||
#define NUBERT_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define NUBERT_ADDRESS_LEN 0 // read 0 address bits
|
|
||||||
#define NUBERT_COMMAND_OFFSET 0 // skip 0 bits
|
|
||||||
#define NUBERT_COMMAND_LEN 10 // read 10 bits
|
|
||||||
#define NUBERT_COMPLETE_DATA_LEN 10 // complete length
|
|
||||||
#define NUBERT_STOP_BIT 1 // has stop bit
|
|
||||||
#define NUBERT_LSB 0 // MSB?
|
|
||||||
#define NUBERT_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define BANG_OLUFSEN_START_BIT1_PULSE_TIME 200.0e-6 // 200 usec pulse
|
|
||||||
#define BANG_OLUFSEN_START_BIT1_PAUSE_TIME 3125.0e-6 // 3125 usec pause
|
|
||||||
#define BANG_OLUFSEN_START_BIT2_PULSE_TIME 200.0e-6 // 200 usec pulse
|
|
||||||
#define BANG_OLUFSEN_START_BIT2_PAUSE_TIME 3125.0e-6 // 3125 usec pause
|
|
||||||
#define BANG_OLUFSEN_START_BIT3_PULSE_TIME 200.0e-6 // 200 usec pulse
|
|
||||||
#define BANG_OLUFSEN_START_BIT3_PAUSE_TIME 15625.0e-6 // 15625 usec pause
|
|
||||||
#define BANG_OLUFSEN_START_BIT4_PULSE_TIME 200.0e-6 // 200 usec pulse
|
|
||||||
#define BANG_OLUFSEN_START_BIT4_PAUSE_TIME 3125.0e-6 // 3125 usec pause
|
|
||||||
#define BANG_OLUFSEN_PULSE_TIME 200.0e-6 // 200 usec pulse
|
|
||||||
#define BANG_OLUFSEN_1_PAUSE_TIME 9375.0e-6 // 9375 usec pause
|
|
||||||
#define BANG_OLUFSEN_0_PAUSE_TIME 3125.0e-6 // 3125 usec pause
|
|
||||||
#define BANG_OLUFSEN_R_PAUSE_TIME 6250.0e-6 // 6250 usec pause (repeat last bit)
|
|
||||||
#define BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME 12500.0e-6 // 12500 usec pause (trailer bit)
|
|
||||||
#define BANG_OLUFSEN_FRAME_REPEAT_PAUSE_TIME 45.0e-3 // frame repeat after 45ms
|
|
||||||
#define BANG_OLUFSEN_ADDRESS_OFFSET 0 // no address bits
|
|
||||||
#define BANG_OLUFSEN_ADDRESS_LEN 0 // no address bits
|
|
||||||
#define BANG_OLUFSEN_COMMAND_OFFSET 3 // skip startbits 2, 3, 4
|
|
||||||
#define BANG_OLUFSEN_COMMAND_LEN 16 // read 16 command bits
|
|
||||||
#define BANG_OLUFSEN_COMPLETE_DATA_LEN 20 // complete length: startbits 2, 3, 4 + 16 data bits + trailer bit
|
|
||||||
#define BANG_OLUFSEN_STOP_BIT 1 // has stop bit
|
|
||||||
#define BANG_OLUFSEN_LSB 0 // MSB...LSB
|
|
||||||
#define BANG_OLUFSEN_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define GRUNDIG_NOKIA_IR60_BIT_TIME 528.0e-6 // 528 usec pulse/pause
|
|
||||||
#define GRUNDIG_NOKIA_IR60_PRE_PAUSE_TIME 2639.0e-6 // 2639 usec pause after pre bit
|
|
||||||
#define GRUNDIG_NOKIA_IR60_FRAME_REPEAT_PAUSE_TIME 117.76e-3 // info frame repeat after 117.76 ms
|
|
||||||
#define GRUNDIG_NOKIA_IR60_STOP_BIT 0 // has no stop bit
|
|
||||||
#define GRUNDIG_NOKIA_IR60_LSB 1 // MSB...LSB
|
|
||||||
#define GRUNDIG_NOKIA_IR60_FLAGS (IRMP_PARAM_FLAG_IS_MANCHESTER | IRMP_PARAM_FLAG_1ST_PULSE_IS_1) // flags
|
|
||||||
|
|
||||||
#define GRUNDIG_FRAMES 2 // GRUNDIG sends each frame 1+1 times
|
|
||||||
#define GRUNDIG_AUTO_REPETITION_PAUSE_TIME 20.0e-3 // repetition after 20ms
|
|
||||||
#define GRUNDIG_ADDRESS_OFFSET 0 // no address
|
|
||||||
#define GRUNDIG_ADDRESS_LEN 0 // no address
|
|
||||||
#define GRUNDIG_COMMAND_OFFSET 1 // skip 1 start bit
|
|
||||||
#define GRUNDIG_COMMAND_LEN 9 // read 9 command bits
|
|
||||||
#define GRUNDIG_COMPLETE_DATA_LEN 10 // complete length: 1 start bit + 9 data bits
|
|
||||||
|
|
||||||
#define NOKIA_FRAMES 3 // NOKIA sends each frame 1 + 1 + 1 times
|
|
||||||
#define NOKIA_AUTO_REPETITION_PAUSE_TIME 20.0e-3 // repetition after 20ms
|
|
||||||
#define NOKIA_ADDRESS_OFFSET 9 // skip 9 bits (1 start bit + 8 data bits)
|
|
||||||
#define NOKIA_ADDRESS_LEN 8 // 7 address bits
|
|
||||||
#define NOKIA_COMMAND_OFFSET 1 // skip 1 bit (1 start bit)
|
|
||||||
#define NOKIA_COMMAND_LEN 8 // read 8 command bits
|
|
||||||
#define NOKIA_COMPLETE_DATA_LEN 17 // complete length: 1 start bit + 8 address bits + 8 command bits
|
|
||||||
|
|
||||||
#define IR60_TIMEOUT_TIME 5000.0e-6 // timeout grundig frame, switch to IR60
|
|
||||||
#define IR60_ADDRESS_OFFSET 0 // skip 1 bits
|
|
||||||
#define IR60_ADDRESS_LEN 0 // read 0 address bits
|
|
||||||
#define IR60_COMMAND_OFFSET 0 // skip 1 bit (start bit after pre bit, always 1)
|
|
||||||
#define IR60_COMMAND_LEN 7 // read 6 command bits
|
|
||||||
#define IR60_COMPLETE_DATA_LEN 7 // complete length
|
|
||||||
|
|
||||||
#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME 275.0e-6 // 275 usec pulse
|
|
||||||
#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME 550.0e-6 // 550 usec pause
|
|
||||||
#define SIEMENS_OR_RUWIDO_BIT_PULSE_TIME 275.0e-6 // 275 usec short pulse
|
|
||||||
#define SIEMENS_OR_RUWIDO_BIT_PULSE_TIME_2 550.0e-6 // 550 usec long pulse
|
|
||||||
#define SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME 275.0e-6 // 275 usec short pause
|
|
||||||
#define SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME_2 550.0e-6 // 550 usec long pause
|
|
||||||
#define SIEMENS_OR_RUWIDO_FRAME_REPEAT_PAUSE_TIME 45.0e-3 // frame repeat after 45ms
|
|
||||||
#define SIEMENS_OR_RUWIDO_STOP_BIT 0 // has no stop bit
|
|
||||||
#define SIEMENS_OR_RUWIDO_LSB 0 // MSB...LSB
|
|
||||||
#define SIEMENS_OR_RUWIDO_FLAGS (IRMP_PARAM_FLAG_IS_MANCHESTER | IRMP_PARAM_FLAG_1ST_PULSE_IS_1) // flags
|
|
||||||
|
|
||||||
#define RUWIDO_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define RUWIDO_ADDRESS_LEN 9 // read 9 address bits
|
|
||||||
#define RUWIDO_COMMAND_OFFSET 9 // skip 9 bits
|
|
||||||
#define RUWIDO_COMMAND_LEN 8 // read 7 + 1 command bits, last bit is only check bit
|
|
||||||
#define RUWIDO_COMPLETE_DATA_LEN 17 // complete length
|
|
||||||
|
|
||||||
#define SIEMENS_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define SIEMENS_ADDRESS_LEN 11 // read 11 bits
|
|
||||||
#define SIEMENS_COMMAND_OFFSET 11 // skip 11 bits
|
|
||||||
#define SIEMENS_COMMAND_LEN 11 // read 10 + 1 command bits, last bit is only check bit
|
|
||||||
#define SIEMENS_COMPLETE_DATA_LEN 22 // complete length
|
|
||||||
|
|
||||||
#define FDC_START_BIT_PULSE_TIME 2085.0e-6 // 2085 usec pulse
|
|
||||||
#define FDC_START_BIT_PAUSE_TIME 966.0e-6 // 966 usec pause
|
|
||||||
#define FDC_PULSE_TIME 300.0e-6 // 300 usec pulse
|
|
||||||
#define FDC_1_PAUSE_TIME 715.0e-6 // 715 usec pause
|
|
||||||
#define FDC_0_PAUSE_TIME 220.0e-6 // 220 usec pause
|
|
||||||
#define FDC_FRAME_REPEAT_PAUSE_TIME 60.0e-3 // frame repeat after 60ms
|
|
||||||
#define FDC_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define FDC_ADDRESS_LEN 14 // read 14 address bits, but use only 6, shift 8 into command
|
|
||||||
#define FDC_COMMAND_OFFSET 20 // skip 20 bits
|
|
||||||
#define FDC_COMMAND_LEN 12 // read 12 bits
|
|
||||||
#define FDC_COMPLETE_DATA_LEN 40 // complete length
|
|
||||||
#define FDC_STOP_BIT 1 // has stop bit
|
|
||||||
#define FDC_LSB 1 // LSB...MSB
|
|
||||||
#define FDC_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define RCCAR_START_BIT_PULSE_TIME 2000.0e-6 // 2000 usec pulse
|
|
||||||
#define RCCAR_START_BIT_PAUSE_TIME 2000.0e-6 // 2000 usec pause
|
|
||||||
#define RCCAR_PULSE_TIME 600.0e-6 // 360 usec pulse
|
|
||||||
#define RCCAR_1_PAUSE_TIME 450.0e-6 // 650 usec pause
|
|
||||||
#define RCCAR_0_PAUSE_TIME 900.0e-6 // 180 usec pause
|
|
||||||
#define RCCAR_FRAME_REPEAT_PAUSE_TIME 40.0e-3 // frame repeat after 40ms
|
|
||||||
#define RCCAR_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define RCCAR_ADDRESS_LEN 0 // read 0 address bits
|
|
||||||
#define RCCAR_COMMAND_OFFSET 0 // skip 0 bits
|
|
||||||
#define RCCAR_COMMAND_LEN 13 // read 13 bits
|
|
||||||
#define RCCAR_COMPLETE_DATA_LEN 13 // complete length
|
|
||||||
#define RCCAR_STOP_BIT 1 // has stop bit
|
|
||||||
#define RCCAR_LSB 1 // LSB...MSB
|
|
||||||
#define RCCAR_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define JVC_START_BIT_PULSE_TIME 9000.0e-6 // 9000 usec pulse
|
|
||||||
#define JVC_START_BIT_PAUSE_TIME 4500.0e-6 // 4500 usec pause
|
|
||||||
#define JVC_PULSE_TIME 560.0e-6 // 560 usec pulse
|
|
||||||
#define JVC_1_PAUSE_TIME 1690.0e-6 // 1690 usec pause
|
|
||||||
#define JVC_0_PAUSE_TIME 560.0e-6 // 560 usec pause
|
|
||||||
#define JVC_FRAME_REPEAT_PAUSE_TIME 22.0e-3 // frame repeat after 22ms
|
|
||||||
#define JVC_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define JVC_ADDRESS_LEN 4 // read 4 address bits
|
|
||||||
#define JVC_COMMAND_OFFSET 4 // skip 4 bits
|
|
||||||
#define JVC_COMMAND_LEN 12 // read 12 bits
|
|
||||||
#define JVC_COMPLETE_DATA_LEN 16 // complete length
|
|
||||||
#define JVC_STOP_BIT 1 // has stop bit
|
|
||||||
#define JVC_LSB 1 // LSB...MSB
|
|
||||||
#define JVC_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define NIKON_START_BIT_PULSE_TIME 2200.0e-6 // 2200 usec pulse
|
|
||||||
#define NIKON_START_BIT_PAUSE_TIME 27100.0e-6 // 27100 usec pause
|
|
||||||
#define NIKON_PULSE_TIME 500.0e-6 // 500 usec pulse
|
|
||||||
#define NIKON_1_PAUSE_TIME 3500.0e-6 // 3500 usec pause
|
|
||||||
#define NIKON_0_PAUSE_TIME 1500.0e-6 // 1500 usec pause
|
|
||||||
#define NIKON_FRAME_REPEAT_PAUSE_TIME 60.0e-3 // frame repeat after 60ms
|
|
||||||
#define NIKON_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define NIKON_ADDRESS_LEN 0 // read 0 address bits
|
|
||||||
#define NIKON_COMMAND_OFFSET 0 // skip 0 bits
|
|
||||||
#define NIKON_COMMAND_LEN 2 // read 2 bits
|
|
||||||
#define NIKON_COMPLETE_DATA_LEN 2 // complete length
|
|
||||||
#define NIKON_STOP_BIT 1 // has stop bit
|
|
||||||
#define NIKON_LSB 0 // LSB...MSB
|
|
||||||
#define NIKON_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define KATHREIN_START_BIT_PULSE_TIME 210.0e-6 // 1340 usec pulse
|
|
||||||
#define KATHREIN_START_BIT_PAUSE_TIME 6218.0e-6 // 340 usec pause
|
|
||||||
#define KATHREIN_1_PULSE_TIME 210.0e-6 // 1340 usec pulse
|
|
||||||
#define KATHREIN_1_PAUSE_TIME 3000.0e-6 // 340 usec pause
|
|
||||||
#define KATHREIN_0_PULSE_TIME 210.0e-6 // 500 usec pulse
|
|
||||||
#define KATHREIN_0_PAUSE_TIME 1400.0e-6 // 1300 usec pause
|
|
||||||
#define KATHREIN_SYNC_BIT_PAUSE_LEN_TIME 4600.0e-6 // 4600 usec sync (on 6th and/or 8th bit)
|
|
||||||
#define KATHREIN_FRAMES 1 // Kathrein sends 1 frame
|
|
||||||
#define KATHREIN_AUTO_REPETITION_PAUSE_TIME 35.0e-3 // auto repetition after 35ms
|
|
||||||
#define KATHREIN_FRAME_REPEAT_PAUSE_TIME 35.0e-3 // frame repeat after 35ms
|
|
||||||
#define KATHREIN_ADDRESS_OFFSET 1 // skip 1 bits
|
|
||||||
#define KATHREIN_ADDRESS_LEN 4 // read 4 address bits
|
|
||||||
#define KATHREIN_COMMAND_OFFSET 5 // skip 5 bits
|
|
||||||
#define KATHREIN_COMMAND_LEN 7 // read 7 bits
|
|
||||||
#define KATHREIN_COMPLETE_DATA_LEN 13 // complete length
|
|
||||||
#define KATHREIN_STOP_BIT 1 // has stop bit
|
|
||||||
#define KATHREIN_LSB 0 // MSB
|
|
||||||
#define KATHREIN_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define NETBOX_START_BIT_PULSE_TIME 2400.0e-6 // 2400 usec pulse
|
|
||||||
#define NETBOX_START_BIT_PAUSE_TIME 800.0e-6 // 800 usec pause
|
|
||||||
#define NETBOX_PULSE_TIME 800.0e-6 // 800 usec pulse
|
|
||||||
#define NETBOX_PAUSE_TIME 800.0e-6 // 800 usec pause
|
|
||||||
#define NETBOX_FRAMES 1 // Netbox sends 1 frame
|
|
||||||
#define NETBOX_AUTO_REPETITION_PAUSE_TIME 35.0e-3 // auto repetition after 35ms
|
|
||||||
#define NETBOX_FRAME_REPEAT_PAUSE_TIME 35.0e-3 // frame repeat after 35ms
|
|
||||||
#define NETBOX_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define NETBOX_ADDRESS_LEN 3 // read 3 address bits
|
|
||||||
#define NETBOX_COMMAND_OFFSET 3 // skip 3 bits
|
|
||||||
#define NETBOX_COMMAND_LEN 13 // read 13 bits
|
|
||||||
#define NETBOX_COMPLETE_DATA_LEN 16 // complete length
|
|
||||||
#define NETBOX_STOP_BIT 0 // has no stop bit
|
|
||||||
#define NETBOX_LSB 1 // LSB
|
|
||||||
#define NETBOX_FLAGS IRMP_PARAM_FLAG_IS_SERIAL // flags
|
|
||||||
|
|
||||||
#define LEGO_START_BIT_PULSE_TIME 158.0e-6 // 158 usec pulse ( 6 x 1/38kHz)
|
|
||||||
#define LEGO_START_BIT_PAUSE_TIME 1026.0e-6 // 1026 usec pause (39 x 1/38kHz)
|
|
||||||
#define LEGO_PULSE_TIME 158.0e-6 // 158 usec pulse ( 6 x 1/38kHz)
|
|
||||||
#define LEGO_1_PAUSE_TIME 553.0e-6 // 553 usec pause (21 x 1/38kHz)
|
|
||||||
#define LEGO_0_PAUSE_TIME 263.0e-6 // 263 usec pause (10 x 1/38kHz)
|
|
||||||
#define LEGO_FRAME_REPEAT_PAUSE_TIME 40.0e-3 // frame repeat after 40ms
|
|
||||||
#define LEGO_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define LEGO_ADDRESS_LEN 0 // read 0 address bits
|
|
||||||
#define LEGO_COMMAND_OFFSET 0 // skip 0 bits
|
|
||||||
#define LEGO_COMMAND_LEN 16 // read 16 bits (12 command + 4 CRC)
|
|
||||||
#define LEGO_COMPLETE_DATA_LEN 16 // complete length
|
|
||||||
#define LEGO_STOP_BIT 1 // has stop bit
|
|
||||||
#define LEGO_LSB 0 // MSB...LSB
|
|
||||||
#define LEGO_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define THOMSON_PULSE_TIME 550.0e-6 // 550 usec pulse
|
|
||||||
#define THOMSON_1_PAUSE_TIME 4500.0e-6 // 4500 usec pause
|
|
||||||
#define THOMSON_0_PAUSE_TIME 2000.0e-6 // 2000 usec pause
|
|
||||||
#define THOMSON_FRAMES 1 // THOMSON sends 1 frame
|
|
||||||
#define THOMSON_AUTO_REPETITION_PAUSE_TIME 65.0e-3 // repetition after 65ms
|
|
||||||
#define THOMSON_FRAME_REPEAT_PAUSE_TIME 65.0e-3 // frame repeat after 65ms
|
|
||||||
#define THOMSON_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define THOMSON_ADDRESS_LEN 4 // read 4 address bits
|
|
||||||
#define THOMSON_COMMAND_OFFSET 5 // skip 4 address bits + 1 toggle bit
|
|
||||||
#define THOMSON_COMMAND_LEN 7 // read 7 command bits
|
|
||||||
#define THOMSON_COMPLETE_DATA_LEN 12 // complete length
|
|
||||||
#define THOMSON_STOP_BIT 1 // has stop bit
|
|
||||||
#define THOMSON_LSB 0 // MSB...LSB
|
|
||||||
#define THOMSON_FLAGS 0 // flags
|
|
||||||
|
|
||||||
#define GRUNDIG2_START_BIT_PULSE_TIME 550.0e-6 // 550 usec pulse
|
|
||||||
#define GRUNDIG2_START_BIT_PAUSE_TIME 2700.0e-6 // 2700 usec pause
|
|
||||||
#define GRUNDIG2_BIT_PULSE_TIME 550.0e-6 // 550 usec short pulse
|
|
||||||
#define GRUNDIG2_BIT_PAUSE_TIME 550.0e-6 // 550 usec short pause
|
|
||||||
#define GRUNDIG2_FRAME_REPEAT_PAUSE_TIME 100.0e-3 // frame repeat after 100ms
|
|
||||||
#define GRUNDIG2_STOP_BIT 0 // has no stop bit
|
|
||||||
#define GRUNDIG2_LSB 1 // MSB...LSB
|
|
||||||
#define GRUNDIG2_FLAGS (IRMP_PARAM_FLAG_IS_MANCHESTER | IRMP_PARAM_FLAG_1ST_PULSE_IS_1) // flags
|
|
||||||
#define GRUNDIG2_ADDRESS_OFFSET 0 // skip 0 bits
|
|
||||||
#define GRUNDIG2_ADDRESS_LEN 0 // read 0 bits
|
|
||||||
#define GRUNDIG2_COMMAND_OFFSET 0 // skip 0 bits
|
|
||||||
#define GRUNDIG2_COMMAND_LEN 7 // read 6 + 1 command bits, last bit is always 1
|
|
||||||
#define GRUNDIG2_COMPLETE_DATA_LEN 7 // complete length
|
|
||||||
|
|
||||||
#define AUTO_FRAME_REPETITION_TIME 80.0e-3 // SIRCS/SAMSUNG32/NUBERT: automatic repetition after 25-50ms
|
|
||||||
// KASEIKYO: automatic repetition after 75ms
|
|
||||||
|
|
||||||
#define TRUE 1
|
|
||||||
#define FALSE 0
|
|
||||||
|
|
||||||
#define IRMP_FLAG_REPETITION 0x01
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint8_t protocol; // protocol, i.e. NEC_PROTOCOL
|
|
||||||
uint16_t address; // address
|
|
||||||
uint16_t command; // command
|
|
||||||
uint8_t flags; // flags, e.g. repetition
|
|
||||||
} IRMP_DATA;
|
|
||||||
|
|
||||||
extern void irmp_init (void);
|
|
||||||
extern uint8_t irmp_get_data (IRMP_DATA *);
|
|
||||||
extern uint8_t irmp_is_busy (void);
|
|
||||||
extern uint8_t irmp_ISR (uint8_t);
|
|
||||||
|
|
||||||
#if IRMP_PROTOCOL_NAMES == 1
|
|
||||||
extern char * irmp_protocol_names[IRMP_N_PROTOCOLS + 1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_USE_CALLBACK == 1
|
|
||||||
extern void irmp_set_callback_ptr (void (*cb)(uint8_t));
|
|
||||||
#endif // IRSND_USE_CALLBACK == 1
|
|
||||||
|
|
||||||
#endif /* _WC_IRMP_H_ */
|
|
@@ -1,191 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* irmpconfig.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de
|
|
||||||
*
|
|
||||||
* $Id: irmpconfig.h,v 1.80 2012/02/21 08:41:46 fm Exp $
|
|
||||||
*
|
|
||||||
* ATMEGA88 @ 8 MHz
|
|
||||||
*
|
|
||||||
* This program 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.
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _IRMPCONFIG_H_
|
|
||||||
#define _IRMPCONFIG_H_
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* Change F_INTERRUPTS if you change the number of interrupts per second,
|
|
||||||
* Normally, F_INTERRUPTS should be in the range from 10000 to 15000, typical is 15000
|
|
||||||
* A value above 15000 costs additional program space, absolute maximum value is 20000.
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#ifndef F_INTERRUPTS
|
|
||||||
#define F_INTERRUPTS 15000 // interrupts per second, min: 10000, max: 20000, typ: 15000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* Change settings from 1 to 0 if you want to disable one or more decoders.
|
|
||||||
* This saves program space.
|
|
||||||
*
|
|
||||||
* 1 enable decoder
|
|
||||||
* 0 disable decoder
|
|
||||||
*
|
|
||||||
* The standard decoders are enabled per default.
|
|
||||||
* Less common protocols are disabled here, you need to enable them manually.
|
|
||||||
*
|
|
||||||
* If you want to use FDC or RCCAR simultaneous with RC5 protocol, additional program space is required.
|
|
||||||
* If you don't need RC5 when using FDC/RCCAR, you should disable RC5.
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
// typical protocols, disable here! Enable Remarks F_INTERRUPTS Program Space
|
|
||||||
#define IRMP_SUPPORT_SIRCS_PROTOCOL 1 // Sony SIRCS >= 10000 ~150 bytes
|
|
||||||
#define IRMP_SUPPORT_NEC_PROTOCOL 1 // NEC + APPLE >= 10000 ~300 bytes
|
|
||||||
#define IRMP_SUPPORT_SAMSUNG_PROTOCOL 1 // Samsung + Samsung32 >= 10000 ~300 bytes
|
|
||||||
#define IRMP_SUPPORT_MATSUSHITA_PROTOCOL 1 // Matsushita >= 10000 ~50 bytes
|
|
||||||
#define IRMP_SUPPORT_KASEIKYO_PROTOCOL 1 // Kaseikyo >= 10000 ~250 bytes
|
|
||||||
#define IRMP_SUPPORT_DENON_PROTOCOL 1 // DENON, Sharp >= 10000 ~250 bytes
|
|
||||||
|
|
||||||
// more protocols, enable here! Enable Remarks F_INTERRUPTS Program Space
|
|
||||||
#define IRMP_SUPPORT_RC5_PROTOCOL 0 // RC5 >= 10000 ~250 bytes
|
|
||||||
#define IRMP_SUPPORT_RC6_PROTOCOL 0 // RC6 & RC6A >= 10000 ~250 bytes
|
|
||||||
#define IRMP_SUPPORT_JVC_PROTOCOL 0 // JVC >= 10000 ~150 bytes
|
|
||||||
#define IRMP_SUPPORT_NEC16_PROTOCOL 0 // NEC16 >= 10000 ~100 bytes
|
|
||||||
#define IRMP_SUPPORT_NEC42_PROTOCOL 0 // NEC42 >= 10000 ~300 bytes
|
|
||||||
#define IRMP_SUPPORT_IR60_PROTOCOL 0 // IR60 (SAB2008) >= 10000 ~300 bytes
|
|
||||||
#define IRMP_SUPPORT_GRUNDIG_PROTOCOL 0 // Grundig >= 10000 ~300 bytes
|
|
||||||
#define IRMP_SUPPORT_SIEMENS_PROTOCOL 0 // Siemens Gigaset >= 15000 ~550 bytes
|
|
||||||
#define IRMP_SUPPORT_NOKIA_PROTOCOL 0 // Nokia >= 10000 ~300 bytes
|
|
||||||
|
|
||||||
// exotic protocols, enable here! Enable Remarks F_INTERRUPTS Program Space
|
|
||||||
#define IRMP_SUPPORT_GRUNDIG2_PROTOCOL 0 // Grundig TP400 >= 10000 ~300 bytes
|
|
||||||
#define IRMP_SUPPORT_KATHREIN_PROTOCOL 0 // Kathrein >= 10000 ~200 bytes
|
|
||||||
#define IRMP_SUPPORT_NUBERT_PROTOCOL 0 // NUBERT >= 10000 ~50 bytes
|
|
||||||
#define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL 0 // Bang & Olufsen >= 10000 ~200 bytes
|
|
||||||
#define IRMP_SUPPORT_RECS80_PROTOCOL 0 // RECS80 (SAA3004) >= 15000 ~50 bytes
|
|
||||||
#define IRMP_SUPPORT_RECS80EXT_PROTOCOL 0 // RECS80EXT (SAA3008) >= 15000 ~50 bytes
|
|
||||||
#define IRMP_SUPPORT_THOMSON_PROTOCOL 0 // Thomson >= 10000 ~250 bytes
|
|
||||||
#define IRMP_SUPPORT_NIKON_PROTOCOL 0 // NIKON camera >= 10000 ~250 bytes
|
|
||||||
#define IRMP_SUPPORT_NETBOX_PROTOCOL 0 // Netbox keyboard >= 10000 ~400 bytes (PROTOTYPE!)
|
|
||||||
#define IRMP_SUPPORT_FDC_PROTOCOL 0 // FDC3402 keyboard >= 10000 (better 15000) ~150 bytes (~400 in combination with RC5)
|
|
||||||
#define IRMP_SUPPORT_RCCAR_PROTOCOL 0 // RC Car >= 10000 (better 15000) ~150 bytes (~500 in combination with RC5)
|
|
||||||
#define IRMP_SUPPORT_RUWIDO_PROTOCOL 0 // RUWIDO, T-Home >= 15000 ~550 bytes
|
|
||||||
#define IRMP_SUPPORT_LEGO_PROTOCOL 0 // LEGO Power RC >= 20000 ~150 bytes
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* Change hardware pin here:
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#if defined (PIC_C18) // Microchip C18 Compiler
|
|
||||||
#include <p18cxxx.h> // main PIC18 h file
|
|
||||||
#define IRMP_PIN PORTBbits.RB4 // use RB4 as IR input on PIC
|
|
||||||
#define input(x) (x)
|
|
||||||
|
|
||||||
#elif defined (PIC_CCS_COMPILER) // PIC CCS Compiler:
|
|
||||||
#define IRMP_PIN PIN_B4 // use PB4 as IR input on PIC
|
|
||||||
|
|
||||||
#else // AVR:
|
|
||||||
|
|
||||||
#ifndef ARDUINO
|
|
||||||
#define IRMP_PORT PORTB
|
|
||||||
#define IRMP_DDR DDRB
|
|
||||||
#define IRMP_PIN PINB
|
|
||||||
#define IRMP_BIT 6 // use PB6 as IR input on AVR
|
|
||||||
#else // ARDUINO
|
|
||||||
#define IRMP_PIN PIND // use digital pin 2 as IR input
|
|
||||||
#define IRMP_BIT 2 // on arduino
|
|
||||||
#endif // ARDUINO
|
|
||||||
|
|
||||||
#define input(x) ((x) & (1 << IRMP_BIT))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* Set IRMP_LOGGING to 1 if want to log data to UART with 9600Bd
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#ifndef IRMP_LOGGING
|
|
||||||
#define IRMP_LOGGING 0 // 1: log IR signal (scan), 0: do not (default)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* Use external logging routines
|
|
||||||
* If you enable external logging, you have also to enable IRMP_LOGGING above
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#ifndef IRMP_EXT_LOGGING
|
|
||||||
#define IRMP_EXT_LOGGING 0 // 1:log, 0: do not log ;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* Set IRMP_PROTOCOL_NAMES to 1 if want to access protocol names (for logging etc), costs ~300 bytes RAM!
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#define IRMP_PROTOCOL_NAMES 0 // 1: access protocol names, 0: do not (default),
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* Use Callbacks to indicate input signal
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#define IRMP_USE_CALLBACK 0 // flag: 0 = don't use callbacks, 1 = use callbacks, default is 0
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
* DO NOT CHANGE THE FOLLOWING LINES !
|
|
||||||
*---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#if IRMP_SUPPORT_SIEMENS_PROTOCOL == 1 && F_INTERRUPTS < 15000
|
|
||||||
# warning F_INTERRUPTS too low, SIEMENS protocol disabled (should be at least 15000)
|
|
||||||
# undef IRMP_SUPPORT_SIEMENS_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_SIEMENS_PROTOCOL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_RUWIDO_PROTOCOL == 1 && F_INTERRUPTS < 15000
|
|
||||||
# warning F_INTERRUPTS too low, RUWIDO protocol disabled (should be at least 15000)
|
|
||||||
# undef IRMP_SUPPORT_RUWIDO_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_RUWIDO_PROTOCOL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_RECS80_PROTOCOL == 1 && F_INTERRUPTS < 15000
|
|
||||||
# warning F_INTERRUPTS too low, RECS80 protocol disabled (should be at least 15000)
|
|
||||||
# undef IRMP_SUPPORT_RECS80_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_RECS80_PROTOCOL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 && F_INTERRUPTS < 15000
|
|
||||||
# warning F_INTERRUPTS too low, RECS80EXT protocol disabled (should be at least 15000)
|
|
||||||
# undef IRMP_SUPPORT_RECS80EXT_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_RECS80EXT_PROTOCOL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_LEGO_PROTOCOL == 1 && F_INTERRUPTS < 20000
|
|
||||||
# warning F_INTERRUPTS too low, LEGO protocol disabled (should be at least 20000)
|
|
||||||
# undef IRMP_SUPPORT_LEGO_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_LEGO_PROTOCOL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_JVC_PROTOCOL == 1 && IRMP_SUPPORT_NEC_PROTOCOL == 0
|
|
||||||
# warning JVC protocol needs also NEC protocol, NEC protocol enabled
|
|
||||||
# undef IRMP_SUPPORT_NEC_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_NEC_PROTOCOL 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_NEC16_PROTOCOL == 1 && IRMP_SUPPORT_NEC_PROTOCOL == 0
|
|
||||||
# warning NEC16 protocol needs also NEC protocol, NEC protocol enabled
|
|
||||||
# undef IRMP_SUPPORT_NEC_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_NEC_PROTOCOL 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if IRMP_SUPPORT_NEC42_PROTOCOL == 1 && IRMP_SUPPORT_NEC_PROTOCOL == 0
|
|
||||||
# warning NEC42 protocol needs also NEC protocol, NEC protocol enabled
|
|
||||||
# undef IRMP_SUPPORT_NEC_PROTOCOL
|
|
||||||
# define IRMP_SUPPORT_NEC_PROTOCOL 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if F_INTERRUPTS > 20000
|
|
||||||
#error F_INTERRUPTS too high (should be not greater than 20000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _WC_IRMPCONFIG_H_ */
|
|
@@ -1,445 +0,0 @@
|
|||||||
/*
|
|
||||||
* Simulate a linux input device via uinput
|
|
||||||
* Get lirc remote events, decode with IRMP and inject them via uinput
|
|
||||||
*
|
|
||||||
* (C) 2012 Stefan Seyfried
|
|
||||||
*
|
|
||||||
* This program 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.
|
|
||||||
*
|
|
||||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* the C++ compiler did not like this code, so let's put it into a
|
|
||||||
* separate file and compile with gcc insead of g++...
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
#include <linux/ioctl.h>
|
|
||||||
#include <linux/input.h>
|
|
||||||
#include <linux/uinput.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#include <aotom_main.h>
|
|
||||||
|
|
||||||
#include "lirmp_input.h"
|
|
||||||
extern "C" {
|
|
||||||
#include "irmp.h"
|
|
||||||
}
|
|
||||||
static uint8_t IRMP_PIN;
|
|
||||||
|
|
||||||
#include <lt_debug.h>
|
|
||||||
#define lt_debug(args...) _lt_debug(TRIPLE_DEBUG_INIT, NULL, args)
|
|
||||||
#define lt_info(args...) _lt_info(TRIPLE_DEBUG_INIT, NULL, args)
|
|
||||||
|
|
||||||
/* same defines as in neutrino's rcinput.h */
|
|
||||||
#define KEY_TTTV KEY_FN_1
|
|
||||||
#define KEY_TTZOOM KEY_FN_2
|
|
||||||
#define KEY_REVEAL KEY_FN_D
|
|
||||||
/* only defined in newer kernels / headers... */
|
|
||||||
#ifndef KEY_ZOOMIN
|
|
||||||
#define KEY_ZOOMIN KEY_FN_E
|
|
||||||
#endif
|
|
||||||
#ifndef KEY_ZOOMOUT
|
|
||||||
#define KEY_ZOOMOUT KEY_FN_F
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint16_t ir; /* IR command */
|
|
||||||
int code; /* input key code */
|
|
||||||
} key_map_t;
|
|
||||||
|
|
||||||
static const key_map_t key_map[] = {
|
|
||||||
{ 0x13, KEY_0 },
|
|
||||||
{ 0x1a, KEY_1 },
|
|
||||||
{ 0x1f, KEY_2 },
|
|
||||||
{ 0x58, KEY_3 },
|
|
||||||
{ 0x16, KEY_4 },
|
|
||||||
{ 0x1b, KEY_5 },
|
|
||||||
{ 0x54, KEY_6 },
|
|
||||||
{ 0x12, KEY_7 },
|
|
||||||
{ 0x17, KEY_8 },
|
|
||||||
{ 0x50, KEY_9 },
|
|
||||||
{ 0x5f, KEY_OK },
|
|
||||||
{ 0x59, KEY_TIME },
|
|
||||||
{ 0x43, KEY_FAVORITES },
|
|
||||||
{ 0x4f, KEY_SAT },
|
|
||||||
{ 0x0f, KEY_NEXT }, /* V.Format */
|
|
||||||
{ 0x1e, KEY_POWER },
|
|
||||||
{ 0x5a, KEY_MUTE },
|
|
||||||
{ 0x1c, KEY_MENU },
|
|
||||||
{ 0x5d, KEY_EPG },
|
|
||||||
{ 0x07, KEY_INFO },
|
|
||||||
{ 0x60, KEY_EXIT },
|
|
||||||
{ 0x48, KEY_PAGEUP },
|
|
||||||
{ 0x44, KEY_PAGEDOWN },
|
|
||||||
{ 0x02, KEY_LEFT },
|
|
||||||
{ 0x40, KEY_RIGHT },
|
|
||||||
{ 0x03, KEY_UP },
|
|
||||||
{ 0x5e, KEY_DOWN },
|
|
||||||
{ 0x0a, KEY_VOLUMEUP },
|
|
||||||
{ 0x06, KEY_VOLUMEDOWN },
|
|
||||||
{ 0x49, KEY_RED },
|
|
||||||
{ 0x4e, KEY_GREEN },
|
|
||||||
{ 0x11, KEY_YELLOW },
|
|
||||||
{ 0x4a, KEY_BLUE },
|
|
||||||
{ 0x4c, KEY_TV }, /* TV/Radio */
|
|
||||||
{ 0x5c, KEY_VIDEO }, /* FIND */
|
|
||||||
{ 0x19, KEY_AUDIO }, /* FOLDER */
|
|
||||||
/* KEY_AUX,
|
|
||||||
KEY_TEXT,
|
|
||||||
KEY_TTTV,
|
|
||||||
KEY_TTZOOM,
|
|
||||||
KEY_REVEAL,
|
|
||||||
*/
|
|
||||||
{ 0x01, KEY_REWIND },
|
|
||||||
{ 0x53, KEY_FORWARD },
|
|
||||||
{ 0x22, KEY_STOP },
|
|
||||||
{ 0x4d, KEY_PAUSE },
|
|
||||||
{ 0x15, KEY_PLAY },
|
|
||||||
{ 0x20, KEY_PREVIOUS },
|
|
||||||
{ 0x23, KEY_NEXT },
|
|
||||||
// KEY_EJECTCD,
|
|
||||||
{ 0x10, KEY_RECORD }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const int key_list[] = {
|
|
||||||
KEY_0,
|
|
||||||
KEY_1,
|
|
||||||
KEY_2,
|
|
||||||
KEY_3,
|
|
||||||
KEY_4,
|
|
||||||
KEY_5,
|
|
||||||
KEY_6,
|
|
||||||
KEY_7,
|
|
||||||
KEY_8,
|
|
||||||
KEY_9,
|
|
||||||
KEY_OK,
|
|
||||||
KEY_TIME,
|
|
||||||
KEY_FAVORITES,
|
|
||||||
KEY_SAT,
|
|
||||||
KEY_ZOOMOUT,
|
|
||||||
KEY_ZOOMIN,
|
|
||||||
KEY_NEXT,
|
|
||||||
KEY_POWER,
|
|
||||||
KEY_MUTE,
|
|
||||||
KEY_MENU,
|
|
||||||
KEY_EPG,
|
|
||||||
KEY_INFO,
|
|
||||||
KEY_EXIT,
|
|
||||||
KEY_PAGEUP,
|
|
||||||
KEY_PAGEDOWN,
|
|
||||||
KEY_LEFT,
|
|
||||||
KEY_RIGHT,
|
|
||||||
KEY_UP,
|
|
||||||
KEY_DOWN,
|
|
||||||
KEY_VOLUMEUP,
|
|
||||||
KEY_VOLUMEDOWN,
|
|
||||||
KEY_RED,
|
|
||||||
KEY_GREEN,
|
|
||||||
KEY_YELLOW,
|
|
||||||
KEY_BLUE,
|
|
||||||
KEY_TV,
|
|
||||||
KEY_VIDEO,
|
|
||||||
KEY_AUDIO,
|
|
||||||
// KEY_AUX,
|
|
||||||
// KEY_TEXT,
|
|
||||||
// KEY_TTTV,
|
|
||||||
// KEY_TTZOOM,
|
|
||||||
// KEY_REVEAL,
|
|
||||||
KEY_REWIND,
|
|
||||||
KEY_STOP,
|
|
||||||
KEY_PAUSE,
|
|
||||||
KEY_PLAY,
|
|
||||||
KEY_FORWARD,
|
|
||||||
KEY_PREVIOUS,
|
|
||||||
KEY_NEXT,
|
|
||||||
// KEY_EJECTCD,
|
|
||||||
KEY_RECORD,
|
|
||||||
-1
|
|
||||||
};
|
|
||||||
|
|
||||||
static pthread_t thread;
|
|
||||||
static int thread_running;
|
|
||||||
|
|
||||||
static void *input_thread(void *)
|
|
||||||
{
|
|
||||||
int uinput;
|
|
||||||
struct input_event u;
|
|
||||||
struct uinput_user_dev ud;
|
|
||||||
FILE *f;
|
|
||||||
int lircfd;
|
|
||||||
int pulse;
|
|
||||||
int i = 0;
|
|
||||||
int last_pulse = 1;
|
|
||||||
int last_code = -1;
|
|
||||||
uint32_t lircdata; /* lirc_t to be correct... */
|
|
||||||
unsigned int count = 0; /* how many timeouts? */
|
|
||||||
unsigned int nodec = 0; /* how many timeouts since last decoded? */
|
|
||||||
int aotom_fd = -1;
|
|
||||||
IRMP_DATA d;
|
|
||||||
|
|
||||||
lt_info("LIRC/IRMP input converter thread starting...\n");
|
|
||||||
|
|
||||||
/* modprobe does not complain if the module is already loaded... */
|
|
||||||
system("/sbin/modprobe uinput");
|
|
||||||
do {
|
|
||||||
usleep(100000); /* mdev needs some time to create the device? */
|
|
||||||
uinput = open("/dev/uinput", O_WRONLY|O_NDELAY);
|
|
||||||
} while (uinput < 0 && ++count < 100);
|
|
||||||
|
|
||||||
if (uinput < 0)
|
|
||||||
{
|
|
||||||
lt_info("LIRC/IRMP input thread: unable to open /dev/uinput (%m)\n");
|
|
||||||
thread_running = 2;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
fcntl(uinput, F_SETFD, FD_CLOEXEC);
|
|
||||||
ioctl(uinput, UI_SET_EVBIT, EV_KEY);
|
|
||||||
/* do not use kernel repeat EV_REP since neutrino will be confused by the
|
|
||||||
* generated SYN_REPORT events...
|
|
||||||
ioctl(uinput, UI_SET_EVBIT, EV_REP);
|
|
||||||
*/
|
|
||||||
/* register keys */
|
|
||||||
for (i = 0; key_list[i] != -1; i++)
|
|
||||||
ioctl(uinput, UI_SET_KEYBIT, key_list[i]);
|
|
||||||
|
|
||||||
/* configure the device */
|
|
||||||
memset(&ud, 0, sizeof(ud));
|
|
||||||
strncpy(ud.name, "Neutrino LIRC/IRMP to Input Device converter", UINPUT_MAX_NAME_SIZE);
|
|
||||||
ud.id.version = 0x42;
|
|
||||||
ud.id.vendor = 0x1234;
|
|
||||||
ud.id.product = 0x5678;
|
|
||||||
ud.id.bustype = BUS_I2C; /* ?? */
|
|
||||||
write(uinput, &ud, sizeof(ud));
|
|
||||||
|
|
||||||
if (ioctl(uinput, UI_DEV_CREATE))
|
|
||||||
{
|
|
||||||
lt_info("LIRC/IRMP input thread UI_DEV_CREATE: %m\n");
|
|
||||||
close(uinput);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* this is ugly: parse the new input device from /proc/...devices
|
|
||||||
* and symlink it to /dev/input/nevis_ir... */
|
|
||||||
#define DEVLINE "I: Bus=0018 Vendor=1234 Product=5678 Version=0042"
|
|
||||||
f = fopen("/proc/bus/input/devices", "r");
|
|
||||||
if (f)
|
|
||||||
{
|
|
||||||
int found = 0;
|
|
||||||
int evdev = -1;
|
|
||||||
size_t n = 0;
|
|
||||||
char *line = NULL;
|
|
||||||
char *p;
|
|
||||||
char newdev[20];
|
|
||||||
while (getline(&line, &n, f) != -1)
|
|
||||||
{
|
|
||||||
switch(line[0])
|
|
||||||
{
|
|
||||||
case 'I':
|
|
||||||
if (strncmp(line, DEVLINE, strlen(DEVLINE)) == 0)
|
|
||||||
found = 1;
|
|
||||||
break;
|
|
||||||
case 'H':
|
|
||||||
if (! found)
|
|
||||||
break;
|
|
||||||
p = strstr(line, " event");
|
|
||||||
if (! p)
|
|
||||||
{
|
|
||||||
evdev = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
evdev = atoi(p + 6);
|
|
||||||
sprintf(newdev, "event%d", evdev);
|
|
||||||
lt_info("LIRC/IRMP input thread: symlink /dev/input/nevis_ir to %s\n", newdev);
|
|
||||||
unlink("/dev/input/nevis_ir");
|
|
||||||
symlink(newdev, "/dev/input/nevis_ir");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (evdev != -1)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
free(line);
|
|
||||||
}
|
|
||||||
|
|
||||||
u.type = EV_KEY;
|
|
||||||
u.value = 0; /* initialize: first event wil be a key press */
|
|
||||||
|
|
||||||
lircfd = open("/dev/lirc", O_RDONLY);
|
|
||||||
if (lircfd < 0)
|
|
||||||
{
|
|
||||||
lt_info("%s: open /dev/lirc: %m\n", __func__);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
IRMP_PIN = 0xFF;
|
|
||||||
|
|
||||||
/* 50 ms. This should be longer than the longest light pulse */
|
|
||||||
#define POLL_MS (100 * 1000)
|
|
||||||
#define LIRC_PULSE 0x01000000
|
|
||||||
#define LIRC_PULSE_MASK 0x00FFFFFF
|
|
||||||
lt_info("LIRC/IRMP input converter going into main loop...\n");
|
|
||||||
|
|
||||||
aotom_fd = open("/dev/vfd", O_RDONLY);
|
|
||||||
|
|
||||||
/* TODO: ioctl to find out if we have a compatible LIRC_MODE2 device */
|
|
||||||
thread_running = 1;
|
|
||||||
while (thread_running)
|
|
||||||
{
|
|
||||||
fd_set fds;
|
|
||||||
struct timeval tv;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
FD_ZERO(&fds);
|
|
||||||
FD_SET(lircfd, &fds);
|
|
||||||
tv.tv_sec = 0;
|
|
||||||
tv.tv_usec = POLL_MS;
|
|
||||||
/* any singal can interrupt select. we rely on the linux-only feature
|
|
||||||
* that the timeout is automatcally recalculated in this case! */
|
|
||||||
do {
|
|
||||||
ret = select(lircfd + 1, &fds, NULL, NULL, &tv);
|
|
||||||
} while (ret == -1 && errno == EINTR);
|
|
||||||
|
|
||||||
if (ret == -1) {
|
|
||||||
/* errno != EINTR... */
|
|
||||||
lt_info("%s: lirmp: lircfd select: %m\n", __func__);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret == 0)
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
nodec++;
|
|
||||||
lircdata = POLL_MS; /* timeout */
|
|
||||||
pulse = !last_pulse; /* lirc sends data on signal change */
|
|
||||||
if (last_code != -1 && nodec > 1)
|
|
||||||
{
|
|
||||||
// fprintf(stderr, "timeout!\n");
|
|
||||||
u.code = last_code;
|
|
||||||
u.value = 0; /* release */
|
|
||||||
write(uinput, &u, sizeof(u));
|
|
||||||
last_code = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (read(lircfd, &lircdata, sizeof(lircdata)) != sizeof(lircdata))
|
|
||||||
{
|
|
||||||
perror("read");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
pulse = (lircdata & LIRC_PULSE); /* we got light... */
|
|
||||||
last_pulse = pulse;
|
|
||||||
lircdata &= LIRC_PULSE_MASK; /* how long the pulse was in microseconds */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret && count)
|
|
||||||
{
|
|
||||||
if (count * POLL_MS > lircdata)
|
|
||||||
lircdata = 0;
|
|
||||||
else
|
|
||||||
lircdata -= count * POLL_MS;
|
|
||||||
count = 0;
|
|
||||||
}
|
|
||||||
//printf("lircdata: ret:%d c:%d %d\n", ret, ch - '0', lircdata);
|
|
||||||
lircdata /= (1000000 / F_INTERRUPTS);
|
|
||||||
|
|
||||||
if (pulse)
|
|
||||||
IRMP_PIN = 0x00;
|
|
||||||
else
|
|
||||||
IRMP_PIN = 0xff;
|
|
||||||
|
|
||||||
do {
|
|
||||||
(void) irmp_ISR (IRMP_PIN);
|
|
||||||
if (irmp_get_data (&d))
|
|
||||||
{
|
|
||||||
nodec = 0;
|
|
||||||
lt_debug("irmp_get_data proto: %2d addr: 0x%04x cmd: 0x%04x fl: %d\n",
|
|
||||||
d.protocol, d.address, d.command, d.flags);
|
|
||||||
|
|
||||||
/* todo: do we need to complete the loop if we already
|
|
||||||
* detected the singal in this pulse? */
|
|
||||||
if (d.protocol == IRMP_NEC_PROTOCOL && d.address == 0xba45)
|
|
||||||
{
|
|
||||||
for (i = 0; i < (int)(sizeof(key_map)/sizeof(key_map_t)); i++)
|
|
||||||
{
|
|
||||||
if (key_map[i].ir == d.command)
|
|
||||||
{
|
|
||||||
if (last_code != -1 && last_code != key_map[i].code)
|
|
||||||
{
|
|
||||||
u.code = last_code;
|
|
||||||
u.value = 0;
|
|
||||||
write(uinput, &u, sizeof(u));
|
|
||||||
}
|
|
||||||
u.code = key_map[i].code;
|
|
||||||
u.value = (d.flags & 0x1) + 1;
|
|
||||||
//lt_debug("uinput write: value: %d code: %d\n", u.value, u.code);
|
|
||||||
last_code = u.code;
|
|
||||||
write(uinput, &u, sizeof(u));
|
|
||||||
if (aotom_fd > -1) {
|
|
||||||
struct aotom_ioctl_data vfd_data;
|
|
||||||
vfd_data.u.led.led_nr = 1;
|
|
||||||
vfd_data.u.led.on = 10;
|
|
||||||
ioctl(aotom_fd, VFDSETLED, &vfd_data);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (lircdata-- > 0);
|
|
||||||
}
|
|
||||||
/* clean up */
|
|
||||||
close (lircfd);
|
|
||||||
|
|
||||||
if (aotom_fd > -1)
|
|
||||||
close(aotom_fd);
|
|
||||||
|
|
||||||
out:
|
|
||||||
ioctl(uinput, UI_DEV_DESTROY);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void start_input_thread(void)
|
|
||||||
{
|
|
||||||
if (pthread_create(&thread, 0, input_thread, NULL) != 0)
|
|
||||||
{
|
|
||||||
lt_info("%s: LIRC/IRMP input thread pthread_create: %m\n", __func__);
|
|
||||||
thread_running = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* wait until the device is created before continuing */
|
|
||||||
while (! thread_running)
|
|
||||||
usleep(1000);
|
|
||||||
if (thread_running == 2) /* failed... :-( */
|
|
||||||
thread_running = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void stop_input_thread(void)
|
|
||||||
{
|
|
||||||
if (! thread_running)
|
|
||||||
return;
|
|
||||||
thread_running = 0;
|
|
||||||
pthread_join(thread, NULL);
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
/* functions from lirmp_input.cpp */
|
|
||||||
|
|
||||||
#ifndef __LIRMP_INPUT_H_
|
|
||||||
#define __LIRMP_INPUT_H_
|
|
||||||
void start_input_thread(void);
|
|
||||||
void stop_input_thread(void);
|
|
||||||
#endif
|
|
@@ -403,7 +403,7 @@ int cVideo::SetVideoSystem(int video_system, bool remember)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int ret = proc_get("/proc/stb/video/videomode", current, 32);
|
int ret = proc_get("/proc/stb/video/videomode", current, 32);
|
||||||
if (strcmp(current, modes[video_system]) == 0)
|
if (strcmp(current, modes[video_system]) == 0)
|
||||||
{
|
{
|
||||||
lt_info("%s: video_system %d (%s) already set, skipping\n", __func__, video_system, current);
|
lt_info("%s: video_system %d (%s) already set, skipping\n", __func__, video_system, current);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -619,25 +619,6 @@ int cVideo::getBlank(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this function is regularly called, checks if video parameters
|
|
||||||
changed and triggers appropriate actions */
|
|
||||||
void cVideo::VideoParamWatchdog(void)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
static unsigned int _v_info = (unsigned int) -1;
|
|
||||||
unsigned int v_info;
|
|
||||||
if (fd == -1)
|
|
||||||
return;
|
|
||||||
ioctl(fd, MPEG_VID_GET_V_INFO_RAW, &v_info);
|
|
||||||
if (_v_info != v_info)
|
|
||||||
{
|
|
||||||
lt_debug("%s params changed. old: %08x new: %08x\n", __FUNCTION__, _v_info, v_info);
|
|
||||||
setAspectRatio(-1, -1);
|
|
||||||
}
|
|
||||||
_v_info = v_info;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void cVideo::Pig(int x, int y, int w, int h, int osd_w, int osd_h, int startx, int starty, int endx, int endy)
|
void cVideo::Pig(int x, int y, int w, int h, int osd_w, int osd_h, int startx, int starty, int endx, int endy)
|
||||||
{
|
{
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
@@ -857,226 +838,11 @@ void cVideo::SetColorFormat(COLOR_FORMAT color_format) {
|
|||||||
proc_put("/proc/stb/avs/0/colorformat", p, strlen(p));
|
proc_put("/proc/stb/avs/0/colorformat", p, strlen(p));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get an image of the video screen
|
|
||||||
* this code is inspired by dreambox AIO-grab,
|
|
||||||
* git://schwerkraft.elitedvb.net/aio-grab/aio-grab.git
|
|
||||||
* and the patches for STi support from
|
|
||||||
* https://github.com/Schischu/STLinux.BSP-Duckbox.git */
|
|
||||||
/* static lookup tables for faster yuv2rgb conversion */
|
|
||||||
static const uint32_t yuv2rgbtable_y[256] = {
|
|
||||||
0xFFED5EA0, 0xFFEE88B6, 0xFFEFB2CC, 0xFFF0DCE2, 0xFFF206F8, 0xFFF3310E, 0xFFF45B24, 0xFFF5853A,
|
|
||||||
0xFFF6AF50, 0xFFF7D966, 0xFFF9037C, 0xFFFA2D92, 0xFFFB57A8, 0xFFFC81BE, 0xFFFDABD4, 0xFFFED5EA,
|
|
||||||
0x00000000, 0x00012A16, 0x0002542C, 0x00037E42, 0x0004A858, 0x0005D26E, 0x0006FC84, 0x0008269A,
|
|
||||||
0x000950B0, 0x000A7AC6, 0x000BA4DC, 0x000CCEF2, 0x000DF908, 0x000F231E, 0x00104D34, 0x0011774A,
|
|
||||||
0x0012A160, 0x0013CB76, 0x0014F58C, 0x00161FA2, 0x001749B8, 0x001873CE, 0x00199DE4, 0x001AC7FA,
|
|
||||||
0x001BF210, 0x001D1C26, 0x001E463C, 0x001F7052, 0x00209A68, 0x0021C47E, 0x0022EE94, 0x002418AA,
|
|
||||||
0x002542C0, 0x00266CD6, 0x002796EC, 0x0028C102, 0x0029EB18, 0x002B152E, 0x002C3F44, 0x002D695A,
|
|
||||||
0x002E9370, 0x002FBD86, 0x0030E79C, 0x003211B2, 0x00333BC8, 0x003465DE, 0x00358FF4, 0x0036BA0A,
|
|
||||||
0x0037E420, 0x00390E36, 0x003A384C, 0x003B6262, 0x003C8C78, 0x003DB68E, 0x003EE0A4, 0x00400ABA,
|
|
||||||
0x004134D0, 0x00425EE6, 0x004388FC, 0x0044B312, 0x0045DD28, 0x0047073E, 0x00483154, 0x00495B6A,
|
|
||||||
0x004A8580, 0x004BAF96, 0x004CD9AC, 0x004E03C2, 0x004F2DD8, 0x005057EE, 0x00518204, 0x0052AC1A,
|
|
||||||
0x0053D630, 0x00550046, 0x00562A5C, 0x00575472, 0x00587E88, 0x0059A89E, 0x005AD2B4, 0x005BFCCA,
|
|
||||||
0x005D26E0, 0x005E50F6, 0x005F7B0C, 0x0060A522, 0x0061CF38, 0x0062F94E, 0x00642364, 0x00654D7A,
|
|
||||||
0x00667790, 0x0067A1A6, 0x0068CBBC, 0x0069F5D2, 0x006B1FE8, 0x006C49FE, 0x006D7414, 0x006E9E2A,
|
|
||||||
0x006FC840, 0x0070F256, 0x00721C6C, 0x00734682, 0x00747098, 0x00759AAE, 0x0076C4C4, 0x0077EEDA,
|
|
||||||
0x007918F0, 0x007A4306, 0x007B6D1C, 0x007C9732, 0x007DC148, 0x007EEB5E, 0x00801574, 0x00813F8A,
|
|
||||||
0x008269A0, 0x008393B6, 0x0084BDCC, 0x0085E7E2, 0x008711F8, 0x00883C0E, 0x00896624, 0x008A903A,
|
|
||||||
0x008BBA50, 0x008CE466, 0x008E0E7C, 0x008F3892, 0x009062A8, 0x00918CBE, 0x0092B6D4, 0x0093E0EA,
|
|
||||||
0x00950B00, 0x00963516, 0x00975F2C, 0x00988942, 0x0099B358, 0x009ADD6E, 0x009C0784, 0x009D319A,
|
|
||||||
0x009E5BB0, 0x009F85C6, 0x00A0AFDC, 0x00A1D9F2, 0x00A30408, 0x00A42E1E, 0x00A55834, 0x00A6824A,
|
|
||||||
0x00A7AC60, 0x00A8D676, 0x00AA008C, 0x00AB2AA2, 0x00AC54B8, 0x00AD7ECE, 0x00AEA8E4, 0x00AFD2FA,
|
|
||||||
0x00B0FD10, 0x00B22726, 0x00B3513C, 0x00B47B52, 0x00B5A568, 0x00B6CF7E, 0x00B7F994, 0x00B923AA,
|
|
||||||
0x00BA4DC0, 0x00BB77D6, 0x00BCA1EC, 0x00BDCC02, 0x00BEF618, 0x00C0202E, 0x00C14A44, 0x00C2745A,
|
|
||||||
0x00C39E70, 0x00C4C886, 0x00C5F29C, 0x00C71CB2, 0x00C846C8, 0x00C970DE, 0x00CA9AF4, 0x00CBC50A,
|
|
||||||
0x00CCEF20, 0x00CE1936, 0x00CF434C, 0x00D06D62, 0x00D19778, 0x00D2C18E, 0x00D3EBA4, 0x00D515BA,
|
|
||||||
0x00D63FD0, 0x00D769E6, 0x00D893FC, 0x00D9BE12, 0x00DAE828, 0x00DC123E, 0x00DD3C54, 0x00DE666A,
|
|
||||||
0x00DF9080, 0x00E0BA96, 0x00E1E4AC, 0x00E30EC2, 0x00E438D8, 0x00E562EE, 0x00E68D04, 0x00E7B71A,
|
|
||||||
0x00E8E130, 0x00EA0B46, 0x00EB355C, 0x00EC5F72, 0x00ED8988, 0x00EEB39E, 0x00EFDDB4, 0x00F107CA,
|
|
||||||
0x00F231E0, 0x00F35BF6, 0x00F4860C, 0x00F5B022, 0x00F6DA38, 0x00F8044E, 0x00F92E64, 0x00FA587A,
|
|
||||||
0x00FB8290, 0x00FCACA6, 0x00FDD6BC, 0x00FF00D2, 0x01002AE8, 0x010154FE, 0x01027F14, 0x0103A92A,
|
|
||||||
0x0104D340, 0x0105FD56, 0x0107276C, 0x01085182, 0x01097B98, 0x010AA5AE, 0x010BCFC4, 0x010CF9DA,
|
|
||||||
0x010E23F0, 0x010F4E06, 0x0110781C, 0x0111A232, 0x0112CC48, 0x0113F65E, 0x01152074, 0x01164A8A
|
|
||||||
};
|
|
||||||
static const uint32_t yuv2rgbtable_ru[256] = {
|
|
||||||
0xFEFDA500, 0xFEFFA9B6, 0xFF01AE6C, 0xFF03B322, 0xFF05B7D8, 0xFF07BC8E, 0xFF09C144, 0xFF0BC5FA,
|
|
||||||
0xFF0DCAB0, 0xFF0FCF66, 0xFF11D41C, 0xFF13D8D2, 0xFF15DD88, 0xFF17E23E, 0xFF19E6F4, 0xFF1BEBAA,
|
|
||||||
0xFF1DF060, 0xFF1FF516, 0xFF21F9CC, 0xFF23FE82, 0xFF260338, 0xFF2807EE, 0xFF2A0CA4, 0xFF2C115A,
|
|
||||||
0xFF2E1610, 0xFF301AC6, 0xFF321F7C, 0xFF342432, 0xFF3628E8, 0xFF382D9E, 0xFF3A3254, 0xFF3C370A,
|
|
||||||
0xFF3E3BC0, 0xFF404076, 0xFF42452C, 0xFF4449E2, 0xFF464E98, 0xFF48534E, 0xFF4A5804, 0xFF4C5CBA,
|
|
||||||
0xFF4E6170, 0xFF506626, 0xFF526ADC, 0xFF546F92, 0xFF567448, 0xFF5878FE, 0xFF5A7DB4, 0xFF5C826A,
|
|
||||||
0xFF5E8720, 0xFF608BD6, 0xFF62908C, 0xFF649542, 0xFF6699F8, 0xFF689EAE, 0xFF6AA364, 0xFF6CA81A,
|
|
||||||
0xFF6EACD0, 0xFF70B186, 0xFF72B63C, 0xFF74BAF2, 0xFF76BFA8, 0xFF78C45E, 0xFF7AC914, 0xFF7CCDCA,
|
|
||||||
0xFF7ED280, 0xFF80D736, 0xFF82DBEC, 0xFF84E0A2, 0xFF86E558, 0xFF88EA0E, 0xFF8AEEC4, 0xFF8CF37A,
|
|
||||||
0xFF8EF830, 0xFF90FCE6, 0xFF93019C, 0xFF950652, 0xFF970B08, 0xFF990FBE, 0xFF9B1474, 0xFF9D192A,
|
|
||||||
0xFF9F1DE0, 0xFFA12296, 0xFFA3274C, 0xFFA52C02, 0xFFA730B8, 0xFFA9356E, 0xFFAB3A24, 0xFFAD3EDA,
|
|
||||||
0xFFAF4390, 0xFFB14846, 0xFFB34CFC, 0xFFB551B2, 0xFFB75668, 0xFFB95B1E, 0xFFBB5FD4, 0xFFBD648A,
|
|
||||||
0xFFBF6940, 0xFFC16DF6, 0xFFC372AC, 0xFFC57762, 0xFFC77C18, 0xFFC980CE, 0xFFCB8584, 0xFFCD8A3A,
|
|
||||||
0xFFCF8EF0, 0xFFD193A6, 0xFFD3985C, 0xFFD59D12, 0xFFD7A1C8, 0xFFD9A67E, 0xFFDBAB34, 0xFFDDAFEA,
|
|
||||||
0xFFDFB4A0, 0xFFE1B956, 0xFFE3BE0C, 0xFFE5C2C2, 0xFFE7C778, 0xFFE9CC2E, 0xFFEBD0E4, 0xFFEDD59A,
|
|
||||||
0xFFEFDA50, 0xFFF1DF06, 0xFFF3E3BC, 0xFFF5E872, 0xFFF7ED28, 0xFFF9F1DE, 0xFFFBF694, 0xFFFDFB4A,
|
|
||||||
0x00000000, 0x000204B6, 0x0004096C, 0x00060E22, 0x000812D8, 0x000A178E, 0x000C1C44, 0x000E20FA,
|
|
||||||
0x001025B0, 0x00122A66, 0x00142F1C, 0x001633D2, 0x00183888, 0x001A3D3E, 0x001C41F4, 0x001E46AA,
|
|
||||||
0x00204B60, 0x00225016, 0x002454CC, 0x00265982, 0x00285E38, 0x002A62EE, 0x002C67A4, 0x002E6C5A,
|
|
||||||
0x00307110, 0x003275C6, 0x00347A7C, 0x00367F32, 0x003883E8, 0x003A889E, 0x003C8D54, 0x003E920A,
|
|
||||||
0x004096C0, 0x00429B76, 0x0044A02C, 0x0046A4E2, 0x0048A998, 0x004AAE4E, 0x004CB304, 0x004EB7BA,
|
|
||||||
0x0050BC70, 0x0052C126, 0x0054C5DC, 0x0056CA92, 0x0058CF48, 0x005AD3FE, 0x005CD8B4, 0x005EDD6A,
|
|
||||||
0x0060E220, 0x0062E6D6, 0x0064EB8C, 0x0066F042, 0x0068F4F8, 0x006AF9AE, 0x006CFE64, 0x006F031A,
|
|
||||||
0x007107D0, 0x00730C86, 0x0075113C, 0x007715F2, 0x00791AA8, 0x007B1F5E, 0x007D2414, 0x007F28CA,
|
|
||||||
0x00812D80, 0x00833236, 0x008536EC, 0x00873BA2, 0x00894058, 0x008B450E, 0x008D49C4, 0x008F4E7A,
|
|
||||||
0x00915330, 0x009357E6, 0x00955C9C, 0x00976152, 0x00996608, 0x009B6ABE, 0x009D6F74, 0x009F742A,
|
|
||||||
0x00A178E0, 0x00A37D96, 0x00A5824C, 0x00A78702, 0x00A98BB8, 0x00AB906E, 0x00AD9524, 0x00AF99DA,
|
|
||||||
0x00B19E90, 0x00B3A346, 0x00B5A7FC, 0x00B7ACB2, 0x00B9B168, 0x00BBB61E, 0x00BDBAD4, 0x00BFBF8A,
|
|
||||||
0x00C1C440, 0x00C3C8F6, 0x00C5CDAC, 0x00C7D262, 0x00C9D718, 0x00CBDBCE, 0x00CDE084, 0x00CFE53A,
|
|
||||||
0x00D1E9F0, 0x00D3EEA6, 0x00D5F35C, 0x00D7F812, 0x00D9FCC8, 0x00DC017E, 0x00DE0634, 0x00E00AEA,
|
|
||||||
0x00E20FA0, 0x00E41456, 0x00E6190C, 0x00E81DC2, 0x00EA2278, 0x00EC272E, 0x00EE2BE4, 0x00F0309A,
|
|
||||||
0x00F23550, 0x00F43A06, 0x00F63EBC, 0x00F84372, 0x00FA4828, 0x00FC4CDE, 0x00FE5194, 0x00100564A
|
|
||||||
};
|
|
||||||
static const uint32_t yuv2rgbtable_gu[256] = {
|
|
||||||
0xFFCDD300, 0xFFCE375A, 0xFFCE9BB4, 0xFFCF000E, 0xFFCF6468, 0xFFCFC8C2, 0xFFD02D1C, 0xFFD09176,
|
|
||||||
0xFFD0F5D0, 0xFFD15A2A, 0xFFD1BE84, 0xFFD222DE, 0xFFD28738, 0xFFD2EB92, 0xFFD34FEC, 0xFFD3B446,
|
|
||||||
0xFFD418A0, 0xFFD47CFA, 0xFFD4E154, 0xFFD545AE, 0xFFD5AA08, 0xFFD60E62, 0xFFD672BC, 0xFFD6D716,
|
|
||||||
0xFFD73B70, 0xFFD79FCA, 0xFFD80424, 0xFFD8687E, 0xFFD8CCD8, 0xFFD93132, 0xFFD9958C, 0xFFD9F9E6,
|
|
||||||
0xFFDA5E40, 0xFFDAC29A, 0xFFDB26F4, 0xFFDB8B4E, 0xFFDBEFA8, 0xFFDC5402, 0xFFDCB85C, 0xFFDD1CB6,
|
|
||||||
0xFFDD8110, 0xFFDDE56A, 0xFFDE49C4, 0xFFDEAE1E, 0xFFDF1278, 0xFFDF76D2, 0xFFDFDB2C, 0xFFE03F86,
|
|
||||||
0xFFE0A3E0, 0xFFE1083A, 0xFFE16C94, 0xFFE1D0EE, 0xFFE23548, 0xFFE299A2, 0xFFE2FDFC, 0xFFE36256,
|
|
||||||
0xFFE3C6B0, 0xFFE42B0A, 0xFFE48F64, 0xFFE4F3BE, 0xFFE55818, 0xFFE5BC72, 0xFFE620CC, 0xFFE68526,
|
|
||||||
0xFFE6E980, 0xFFE74DDA, 0xFFE7B234, 0xFFE8168E, 0xFFE87AE8, 0xFFE8DF42, 0xFFE9439C, 0xFFE9A7F6,
|
|
||||||
0xFFEA0C50, 0xFFEA70AA, 0xFFEAD504, 0xFFEB395E, 0xFFEB9DB8, 0xFFEC0212, 0xFFEC666C, 0xFFECCAC6,
|
|
||||||
0xFFED2F20, 0xFFED937A, 0xFFEDF7D4, 0xFFEE5C2E, 0xFFEEC088, 0xFFEF24E2, 0xFFEF893C, 0xFFEFED96,
|
|
||||||
0xFFF051F0, 0xFFF0B64A, 0xFFF11AA4, 0xFFF17EFE, 0xFFF1E358, 0xFFF247B2, 0xFFF2AC0C, 0xFFF31066,
|
|
||||||
0xFFF374C0, 0xFFF3D91A, 0xFFF43D74, 0xFFF4A1CE, 0xFFF50628, 0xFFF56A82, 0xFFF5CEDC, 0xFFF63336,
|
|
||||||
0xFFF69790, 0xFFF6FBEA, 0xFFF76044, 0xFFF7C49E, 0xFFF828F8, 0xFFF88D52, 0xFFF8F1AC, 0xFFF95606,
|
|
||||||
0xFFF9BA60, 0xFFFA1EBA, 0xFFFA8314, 0xFFFAE76E, 0xFFFB4BC8, 0xFFFBB022, 0xFFFC147C, 0xFFFC78D6,
|
|
||||||
0xFFFCDD30, 0xFFFD418A, 0xFFFDA5E4, 0xFFFE0A3E, 0xFFFE6E98, 0xFFFED2F2, 0xFFFF374C, 0xFFFF9BA6,
|
|
||||||
0x00000000, 0x0000645A, 0x0000C8B4, 0x00012D0E, 0x00019168, 0x0001F5C2, 0x00025A1C, 0x0002BE76,
|
|
||||||
0x000322D0, 0x0003872A, 0x0003EB84, 0x00044FDE, 0x0004B438, 0x00051892, 0x00057CEC, 0x0005E146,
|
|
||||||
0x000645A0, 0x0006A9FA, 0x00070E54, 0x000772AE, 0x0007D708, 0x00083B62, 0x00089FBC, 0x00090416,
|
|
||||||
0x00096870, 0x0009CCCA, 0x000A3124, 0x000A957E, 0x000AF9D8, 0x000B5E32, 0x000BC28C, 0x000C26E6,
|
|
||||||
0x000C8B40, 0x000CEF9A, 0x000D53F4, 0x000DB84E, 0x000E1CA8, 0x000E8102, 0x000EE55C, 0x000F49B6,
|
|
||||||
0x000FAE10, 0x0010126A, 0x001076C4, 0x0010DB1E, 0x00113F78, 0x0011A3D2, 0x0012082C, 0x00126C86,
|
|
||||||
0x0012D0E0, 0x0013353A, 0x00139994, 0x0013FDEE, 0x00146248, 0x0014C6A2, 0x00152AFC, 0x00158F56,
|
|
||||||
0x0015F3B0, 0x0016580A, 0x0016BC64, 0x001720BE, 0x00178518, 0x0017E972, 0x00184DCC, 0x0018B226,
|
|
||||||
0x00191680, 0x00197ADA, 0x0019DF34, 0x001A438E, 0x001AA7E8, 0x001B0C42, 0x001B709C, 0x001BD4F6,
|
|
||||||
0x001C3950, 0x001C9DAA, 0x001D0204, 0x001D665E, 0x001DCAB8, 0x001E2F12, 0x001E936C, 0x001EF7C6,
|
|
||||||
0x001F5C20, 0x001FC07A, 0x002024D4, 0x0020892E, 0x0020ED88, 0x002151E2, 0x0021B63C, 0x00221A96,
|
|
||||||
0x00227EF0, 0x0022E34A, 0x002347A4, 0x0023ABFE, 0x00241058, 0x002474B2, 0x0024D90C, 0x00253D66,
|
|
||||||
0x0025A1C0, 0x0026061A, 0x00266A74, 0x0026CECE, 0x00273328, 0x00279782, 0x0027FBDC, 0x00286036,
|
|
||||||
0x0028C490, 0x002928EA, 0x00298D44, 0x0029F19E, 0x002A55F8, 0x002ABA52, 0x002B1EAC, 0x002B8306,
|
|
||||||
0x002BE760, 0x002C4BBA, 0x002CB014, 0x002D146E, 0x002D78C8, 0x002DDD22, 0x002E417C, 0x002EA5D6,
|
|
||||||
0x002F0A30, 0x002F6E8A, 0x002FD2E4, 0x0030373E, 0x00309B98, 0x0030FFF2, 0x0031644C, 0x0031C8A6
|
|
||||||
};
|
|
||||||
static const uint32_t yuv2rgbtable_gv[256] = {
|
|
||||||
0xFF97E900, 0xFF98B92E, 0xFF99895C, 0xFF9A598A, 0xFF9B29B8, 0xFF9BF9E6, 0xFF9CCA14, 0xFF9D9A42,
|
|
||||||
0xFF9E6A70, 0xFF9F3A9E, 0xFFA00ACC, 0xFFA0DAFA, 0xFFA1AB28, 0xFFA27B56, 0xFFA34B84, 0xFFA41BB2,
|
|
||||||
0xFFA4EBE0, 0xFFA5BC0E, 0xFFA68C3C, 0xFFA75C6A, 0xFFA82C98, 0xFFA8FCC6, 0xFFA9CCF4, 0xFFAA9D22,
|
|
||||||
0xFFAB6D50, 0xFFAC3D7E, 0xFFAD0DAC, 0xFFADDDDA, 0xFFAEAE08, 0xFFAF7E36, 0xFFB04E64, 0xFFB11E92,
|
|
||||||
0xFFB1EEC0, 0xFFB2BEEE, 0xFFB38F1C, 0xFFB45F4A, 0xFFB52F78, 0xFFB5FFA6, 0xFFB6CFD4, 0xFFB7A002,
|
|
||||||
0xFFB87030, 0xFFB9405E, 0xFFBA108C, 0xFFBAE0BA, 0xFFBBB0E8, 0xFFBC8116, 0xFFBD5144, 0xFFBE2172,
|
|
||||||
0xFFBEF1A0, 0xFFBFC1CE, 0xFFC091FC, 0xFFC1622A, 0xFFC23258, 0xFFC30286, 0xFFC3D2B4, 0xFFC4A2E2,
|
|
||||||
0xFFC57310, 0xFFC6433E, 0xFFC7136C, 0xFFC7E39A, 0xFFC8B3C8, 0xFFC983F6, 0xFFCA5424, 0xFFCB2452,
|
|
||||||
0xFFCBF480, 0xFFCCC4AE, 0xFFCD94DC, 0xFFCE650A, 0xFFCF3538, 0xFFD00566, 0xFFD0D594, 0xFFD1A5C2,
|
|
||||||
0xFFD275F0, 0xFFD3461E, 0xFFD4164C, 0xFFD4E67A, 0xFFD5B6A8, 0xFFD686D6, 0xFFD75704, 0xFFD82732,
|
|
||||||
0xFFD8F760, 0xFFD9C78E, 0xFFDA97BC, 0xFFDB67EA, 0xFFDC3818, 0xFFDD0846, 0xFFDDD874, 0xFFDEA8A2,
|
|
||||||
0xFFDF78D0, 0xFFE048FE, 0xFFE1192C, 0xFFE1E95A, 0xFFE2B988, 0xFFE389B6, 0xFFE459E4, 0xFFE52A12,
|
|
||||||
0xFFE5FA40, 0xFFE6CA6E, 0xFFE79A9C, 0xFFE86ACA, 0xFFE93AF8, 0xFFEA0B26, 0xFFEADB54, 0xFFEBAB82,
|
|
||||||
0xFFEC7BB0, 0xFFED4BDE, 0xFFEE1C0C, 0xFFEEEC3A, 0xFFEFBC68, 0xFFF08C96, 0xFFF15CC4, 0xFFF22CF2,
|
|
||||||
0xFFF2FD20, 0xFFF3CD4E, 0xFFF49D7C, 0xFFF56DAA, 0xFFF63DD8, 0xFFF70E06, 0xFFF7DE34, 0xFFF8AE62,
|
|
||||||
0xFFF97E90, 0xFFFA4EBE, 0xFFFB1EEC, 0xFFFBEF1A, 0xFFFCBF48, 0xFFFD8F76, 0xFFFE5FA4, 0xFFFF2FD2,
|
|
||||||
0x00000000, 0x0000D02E, 0x0001A05C, 0x0002708A, 0x000340B8, 0x000410E6, 0x0004E114, 0x0005B142,
|
|
||||||
0x00068170, 0x0007519E, 0x000821CC, 0x0008F1FA, 0x0009C228, 0x000A9256, 0x000B6284, 0x000C32B2,
|
|
||||||
0x000D02E0, 0x000DD30E, 0x000EA33C, 0x000F736A, 0x00104398, 0x001113C6, 0x0011E3F4, 0x0012B422,
|
|
||||||
0x00138450, 0x0014547E, 0x001524AC, 0x0015F4DA, 0x0016C508, 0x00179536, 0x00186564, 0x00193592,
|
|
||||||
0x001A05C0, 0x001AD5EE, 0x001BA61C, 0x001C764A, 0x001D4678, 0x001E16A6, 0x001EE6D4, 0x001FB702,
|
|
||||||
0x00208730, 0x0021575E, 0x0022278C, 0x0022F7BA, 0x0023C7E8, 0x00249816, 0x00256844, 0x00263872,
|
|
||||||
0x002708A0, 0x0027D8CE, 0x0028A8FC, 0x0029792A, 0x002A4958, 0x002B1986, 0x002BE9B4, 0x002CB9E2,
|
|
||||||
0x002D8A10, 0x002E5A3E, 0x002F2A6C, 0x002FFA9A, 0x0030CAC8, 0x00319AF6, 0x00326B24, 0x00333B52,
|
|
||||||
0x00340B80, 0x0034DBAE, 0x0035ABDC, 0x00367C0A, 0x00374C38, 0x00381C66, 0x0038EC94, 0x0039BCC2,
|
|
||||||
0x003A8CF0, 0x003B5D1E, 0x003C2D4C, 0x003CFD7A, 0x003DCDA8, 0x003E9DD6, 0x003F6E04, 0x00403E32,
|
|
||||||
0x00410E60, 0x0041DE8E, 0x0042AEBC, 0x00437EEA, 0x00444F18, 0x00451F46, 0x0045EF74, 0x0046BFA2,
|
|
||||||
0x00478FD0, 0x00485FFE, 0x0049302C, 0x004A005A, 0x004AD088, 0x004BA0B6, 0x004C70E4, 0x004D4112,
|
|
||||||
0x004E1140, 0x004EE16E, 0x004FB19C, 0x005081CA, 0x005151F8, 0x00522226, 0x0052F254, 0x0053C282,
|
|
||||||
0x005492B0, 0x005562DE, 0x0056330C, 0x0057033A, 0x0057D368, 0x0058A396, 0x005973C4, 0x005A43F2,
|
|
||||||
0x005B1420, 0x005BE44E, 0x005CB47C, 0x005D84AA, 0x005E54D8, 0x005F2506, 0x005FF534, 0x0060C562,
|
|
||||||
0x00619590, 0x006265BE, 0x006335EC, 0x0064061A, 0x0064D648, 0x0065A676, 0x006676A4, 0x006746D2
|
|
||||||
};
|
|
||||||
static const uint32_t yuv2rgbtable_bv[256] = {
|
|
||||||
0xFF33A280, 0xFF353B3B, 0xFF36D3F6, 0xFF386CB1, 0xFF3A056C, 0xFF3B9E27, 0xFF3D36E2, 0xFF3ECF9D,
|
|
||||||
0xFF406858, 0xFF420113, 0xFF4399CE, 0xFF453289, 0xFF46CB44, 0xFF4863FF, 0xFF49FCBA, 0xFF4B9575,
|
|
||||||
0xFF4D2E30, 0xFF4EC6EB, 0xFF505FA6, 0xFF51F861, 0xFF53911C, 0xFF5529D7, 0xFF56C292, 0xFF585B4D,
|
|
||||||
0xFF59F408, 0xFF5B8CC3, 0xFF5D257E, 0xFF5EBE39, 0xFF6056F4, 0xFF61EFAF, 0xFF63886A, 0xFF652125,
|
|
||||||
0xFF66B9E0, 0xFF68529B, 0xFF69EB56, 0xFF6B8411, 0xFF6D1CCC, 0xFF6EB587, 0xFF704E42, 0xFF71E6FD,
|
|
||||||
0xFF737FB8, 0xFF751873, 0xFF76B12E, 0xFF7849E9, 0xFF79E2A4, 0xFF7B7B5F, 0xFF7D141A, 0xFF7EACD5,
|
|
||||||
0xFF804590, 0xFF81DE4B, 0xFF837706, 0xFF850FC1, 0xFF86A87C, 0xFF884137, 0xFF89D9F2, 0xFF8B72AD,
|
|
||||||
0xFF8D0B68, 0xFF8EA423, 0xFF903CDE, 0xFF91D599, 0xFF936E54, 0xFF95070F, 0xFF969FCA, 0xFF983885,
|
|
||||||
0xFF99D140, 0xFF9B69FB, 0xFF9D02B6, 0xFF9E9B71, 0xFFA0342C, 0xFFA1CCE7, 0xFFA365A2, 0xFFA4FE5D,
|
|
||||||
0xFFA69718, 0xFFA82FD3, 0xFFA9C88E, 0xFFAB6149, 0xFFACFA04, 0xFFAE92BF, 0xFFB02B7A, 0xFFB1C435,
|
|
||||||
0xFFB35CF0, 0xFFB4F5AB, 0xFFB68E66, 0xFFB82721, 0xFFB9BFDC, 0xFFBB5897, 0xFFBCF152, 0xFFBE8A0D,
|
|
||||||
0xFFC022C8, 0xFFC1BB83, 0xFFC3543E, 0xFFC4ECF9, 0xFFC685B4, 0xFFC81E6F, 0xFFC9B72A, 0xFFCB4FE5,
|
|
||||||
0xFFCCE8A0, 0xFFCE815B, 0xFFD01A16, 0xFFD1B2D1, 0xFFD34B8C, 0xFFD4E447, 0xFFD67D02, 0xFFD815BD,
|
|
||||||
0xFFD9AE78, 0xFFDB4733, 0xFFDCDFEE, 0xFFDE78A9, 0xFFE01164, 0xFFE1AA1F, 0xFFE342DA, 0xFFE4DB95,
|
|
||||||
0xFFE67450, 0xFFE80D0B, 0xFFE9A5C6, 0xFFEB3E81, 0xFFECD73C, 0xFFEE6FF7, 0xFFF008B2, 0xFFF1A16D,
|
|
||||||
0xFFF33A28, 0xFFF4D2E3, 0xFFF66B9E, 0xFFF80459, 0xFFF99D14, 0xFFFB35CF, 0xFFFCCE8A, 0xFFFE6745,
|
|
||||||
0x00000000, 0x000198BB, 0x00033176, 0x0004CA31, 0x000662EC, 0x0007FBA7, 0x00099462, 0x000B2D1D,
|
|
||||||
0x000CC5D8, 0x000E5E93, 0x000FF74E, 0x00119009, 0x001328C4, 0x0014C17F, 0x00165A3A, 0x0017F2F5,
|
|
||||||
0x00198BB0, 0x001B246B, 0x001CBD26, 0x001E55E1, 0x001FEE9C, 0x00218757, 0x00232012, 0x0024B8CD,
|
|
||||||
0x00265188, 0x0027EA43, 0x002982FE, 0x002B1BB9, 0x002CB474, 0x002E4D2F, 0x002FE5EA, 0x00317EA5,
|
|
||||||
0x00331760, 0x0034B01B, 0x003648D6, 0x0037E191, 0x00397A4C, 0x003B1307, 0x003CABC2, 0x003E447D,
|
|
||||||
0x003FDD38, 0x004175F3, 0x00430EAE, 0x0044A769, 0x00464024, 0x0047D8DF, 0x0049719A, 0x004B0A55,
|
|
||||||
0x004CA310, 0x004E3BCB, 0x004FD486, 0x00516D41, 0x005305FC, 0x00549EB7, 0x00563772, 0x0057D02D,
|
|
||||||
0x005968E8, 0x005B01A3, 0x005C9A5E, 0x005E3319, 0x005FCBD4, 0x0061648F, 0x0062FD4A, 0x00649605,
|
|
||||||
0x00662EC0, 0x0067C77B, 0x00696036, 0x006AF8F1, 0x006C91AC, 0x006E2A67, 0x006FC322, 0x00715BDD,
|
|
||||||
0x0072F498, 0x00748D53, 0x0076260E, 0x0077BEC9, 0x00795784, 0x007AF03F, 0x007C88FA, 0x007E21B5,
|
|
||||||
0x007FBA70, 0x0081532B, 0x0082EBE6, 0x008484A1, 0x00861D5C, 0x0087B617, 0x00894ED2, 0x008AE78D,
|
|
||||||
0x008C8048, 0x008E1903, 0x008FB1BE, 0x00914A79, 0x0092E334, 0x00947BEF, 0x009614AA, 0x0097AD65,
|
|
||||||
0x00994620, 0x009ADEDB, 0x009C7796, 0x009E1051, 0x009FA90C, 0x00A141C7, 0x00A2DA82, 0x00A4733D,
|
|
||||||
0x00A60BF8, 0x00A7A4B3, 0x00A93D6E, 0x00AAD629, 0x00AC6EE4, 0x00AE079F, 0x00AFA05A, 0x00B13915,
|
|
||||||
0x00B2D1D0, 0x00B46A8B, 0x00B60346, 0x00B79C01, 0x00B934BC, 0x00BACD77, 0x00BC6632, 0x00BDFEED,
|
|
||||||
0x00BF97A8, 0x00C13063, 0x00C2C91E, 0x00C461D9, 0x00C5FA94, 0x00C7934F, 0x00C92C0A, 0x00CAC4C5
|
|
||||||
};
|
|
||||||
|
|
||||||
#define OUT(x) \
|
|
||||||
out[OUTITER] = (uint8_t)*(decode_surface + x)&0xFF; \
|
|
||||||
OUTITER += OUTINC;
|
|
||||||
|
|
||||||
#define OUT4(x) \
|
|
||||||
OUT(x + 0x03); \
|
|
||||||
OUT(x + 0x02); \
|
|
||||||
OUT(x + 0x01); \
|
|
||||||
OUT(x + 0x00);
|
|
||||||
|
|
||||||
#define OUT8(x) \
|
|
||||||
OUT4(x + 0x04); \
|
|
||||||
OUT4(x + 0x00);
|
|
||||||
|
|
||||||
#define OUT_LU_16A(x) \
|
|
||||||
OUT8(x); \
|
|
||||||
OUT8(x + 0x40);
|
|
||||||
|
|
||||||
#define OUT_CH_8A(x) \
|
|
||||||
OUT4(x); \
|
|
||||||
OUT4(x + 0x20);
|
|
||||||
|
|
||||||
//pppppppppppppppp
|
|
||||||
//x: macroblock address
|
|
||||||
//l: line 0-15
|
|
||||||
#define OUT_LU_16(x,l) \
|
|
||||||
OUT_LU_16A(x + (l/4) * 0x10 + (l%2) * 0x80 + ((l/2)%2?0x00:0x08));
|
|
||||||
|
|
||||||
//pppppppp
|
|
||||||
//x: macroblock address
|
|
||||||
//l: line 0-7
|
|
||||||
//b: 0=cr 1=cb
|
|
||||||
#define OUT_CH_8(x,l,b) \
|
|
||||||
OUT_CH_8A(x + (l/4) * 0x10 + (l%2) * 0x40 + ((l/2)%2?0x00:0x08) + (b?0x04:0x00));
|
|
||||||
|
|
||||||
//----
|
|
||||||
#define CLAMP(x) ((x < 0) ? 0 : ((x > 255) ? 255 : x))
|
|
||||||
#define SWAP(x,y) { x ^= y; y ^= x; x ^= y; }
|
|
||||||
|
|
||||||
/* TODO: aspect ratio correction and PIP */
|
/* TODO: aspect ratio correction and PIP */
|
||||||
bool cVideo::GetScreenImage(unsigned char * &video, int &xres, int &yres, bool get_video, bool get_osd, bool scale_to_video)
|
bool cVideo::GetScreenImage(unsigned char * &video, int &xres, int &yres, bool get_video, bool get_osd, bool scale_to_video)
|
||||||
{
|
{
|
||||||
lt_info("%s: get_video: %d get_osd: %d scale_to_video: %d\n",
|
lt_info("%s: video 0x%p xres %d yres %d vid %d osd %d scale %d\n",
|
||||||
__func__, get_video, get_osd, scale_to_video);
|
__func__, video, xres, yres, get_video, get_osd, scale_to_video);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -200,7 +200,6 @@ class cVideo
|
|||||||
void Standby(unsigned int bOn);
|
void Standby(unsigned int bOn);
|
||||||
void Pig(int x, int y, int w, int h, int osd_w = 1064, int osd_h = 600, int startx = 0, int starty = 0, int endx = 1279, int endy = 719);
|
void Pig(int x, int y, int w, int h, int osd_w = 1064, int osd_h = 600, int startx = 0, int starty = 0, int endx = 1279, int endy = 719);
|
||||||
void SetControl(int, int);
|
void SetControl(int, int);
|
||||||
void VideoParamWatchdog(void);
|
|
||||||
void setContrast(int val);
|
void setContrast(int val);
|
||||||
void SetVideoMode(analog_mode_t mode);
|
void SetVideoMode(analog_mode_t mode);
|
||||||
void SetDBDR(int) { return; };
|
void SetDBDR(int) { return; };
|
||||||
|
Reference in New Issue
Block a user