/*
* power-manager
* Copyright (c) 2012 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file main.c
* @version 0.1
* @brief Power Manager main file
*
* Process the user options, Daemonize the process, Start Main loop
*/
/**
* @addtogroup POWER_MANAGER
* @{
*
* @section execution How to execute
* # powermanager {options...}
*
* Options:
* -f --foreground
* Run as foreground process
* -d --direct
* Start without notification
*
* @}
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "pm_core.h"
/**
* Print the usage
*
* @internal
*/
void usage()
{
printf("Options: \n");
printf(" -f, --foreground Run as foreground process\n");
printf(" -d, --direct Start without notification\n");
printf
(" -x, --xdpms With LCD-onoff control by x-dpms \n");
printf("\n");
exit(0);
}
/**
* Pid file path
*/
#define DEFAULT_PID_PATH "/var/run/power-manager.pid"
int main(int argc, char *argv[])
{
int c;
int runflags = 0; /* run as daemon */
unsigned int flags = 0x0; /* 0 : start with noti */
while (1) {
int option_index = 0;
static struct option long_options[] = {
{"foreground", no_argument, NULL, 'f'},
{"direct", no_argument, NULL, 'd'},
{"xdpms", no_argument, NULL, 'x'},
{0, 0, 0, 0}
};
c = getopt_long(argc, argv, "fdx", long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 'f':
runflags = 1;
break;
case 'd':
flags = flags | WITHOUT_STARTNOTI; /* 0x1 : start without noti */
break;
case 'x':
flags = flags | FLAG_X_DPMS; /* 0x2 : X control LCD onoff */
break;
default:
usage();
break;
}
}
if (optind < argc)
usage();
if (access(DEFAULT_PID_PATH, F_OK) == 0) { /* pid file exist */
printf
("Check the PM is running. If it isn't, delete \"%s\" and retry.\n",
DEFAULT_PID_PATH);
return -1;
}
if (!runflags)
daemonize();
writepid(DEFAULT_PID_PATH);
/* this function is main loop, defined in pm_core.c */
start_main(flags);
unlink(DEFAULT_PID_PATH);
return 0;
}