#include #include "init_td.h" #include #include #include #include #include #include #include #include #include "lirmp_input.h" #include "pwrmngr.h" #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) static bool initialized = false; void init_td_api() { if (!initialized) lt_debug_init(); lt_info("%s begin, initialized=%d, debug=0x%02x\n", __FUNCTION__, (int)initialized, debuglevel); if (!initialized) { cCpuFreqManager f; f.SetCpuFreq(0); /* CPUFREQ == 0 is the trigger for leaving standby */ /* hack: if lircd pidfile is present, don't start input thread */ if (access("/var/run/lirc/lircd.pid", R_OK)) start_input_thread(); else lt_info("%s: lircd pidfile present, not starting input thread\n", __func__); /* 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); } } initialized = true; lt_info("%s end\n", __FUNCTION__); } void shutdown_td_api() { lt_info("%s, initialized = %d\n", __FUNCTION__, (int)initialized); if (initialized) stop_input_thread(); initialized = false; }