Files
neutrino/src/driver/shutdown_count.cpp
2013-12-25 12:08:14 +01:00

123 lines
2.9 KiB
C++

/*
Shutdown Counter - DBoxII-Project
Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
License: GPL
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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <driver/shutdown_count.h>
#include <global.h>
#include <neutrino.h>
#include <system/settings.h>
#include <system/helpers.h>
#include <sys/timeb.h>
#include <time.h>
#include <unistd.h>
SHTDCNT::SHTDCNT()
{
}
SHTDCNT* SHTDCNT::getInstance()
{
static SHTDCNT* shtdcnt = NULL;
if(shtdcnt == NULL)
{
shtdcnt = new SHTDCNT();
}
return shtdcnt;
}
void* SHTDCNT::TimeThread(void *)
{
while(1)
{
sleep(1);
SHTDCNT::getInstance()->shutdown_counter();
}
return NULL;
}
void SHTDCNT::init()
{
shutdown_cnt = g_settings.shutdown_count * 60;
sleep_cnt = g_settings.shutdown_min * 60;
if (pthread_create (&thrTime, NULL, TimeThread, NULL) != 0 )
{
perror("[SHTDCNT]: pthread_create(TimeThread)");
return ;
}
}
void SHTDCNT::shutdown_counter()
{
static bool sleeptimer_active = true;
if (g_settings.shutdown_count > 0)
{
if ((CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_standby) && (!CNeutrinoApp::getInstance ()->recordingstatus))
{
if (shutdown_cnt > 0 )
{
shutdown_cnt = shutdown_cnt - 1;
//printf("[SHTDCNT] shutdown counter: %d sec to shutdown\n", shutdown_cnt);
}
else
{
// send shutdown message
printf("[SHTDCNT] shutdown counter send NeutrinoMessages::SHUTDOWN\n");
//CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::SHUTDOWN, 0);
g_RCInput->postMsg(NeutrinoMessages::SHUTDOWN, 0);
}
}
else
{
// reset counter
shutdown_cnt = g_settings.shutdown_count * 60;
}
}
if(g_settings.shutdown_min > 0) {
if(sleep_cnt > 0) {
sleeptimer_active = true;
sleep_cnt--;
} else if(sleeptimer_active && !CNeutrinoApp::getInstance ()->recordingstatus) {
sleeptimer_active = false;
puts("[SHTDCNT] executing " NEUTRINO_ENTER_INACTIVITY_SCRIPT ".");
if (my_system(NEUTRINO_ENTER_INACTIVITY_SCRIPT) != 0)
perror(NEUTRINO_ENTER_INACTIVITY_SCRIPT " failed");
printf("[SHTDCNT] sleep-timer send NeutrinoMessages::SLEEPTIMER\n");
g_RCInput->postMsg(NeutrinoMessages::SLEEPTIMER, 1);
}
}
}
void SHTDCNT::resetSleepTimer()
{
sleep_cnt = g_settings.shutdown_min * 60;
}