Ejemplo n.º 1
0
static void jz_set_mode(enum clock_event_mode mode,
                        struct clock_event_device *clkevt)
{
    struct jz_timerevent *evt_dev = container_of(clkevt,struct jz_timerevent,clkevt);
    unsigned long flags;
    unsigned int latch = (evt_dev->rate + (HZ >> 1)) / HZ;
    spin_lock_irqsave(&evt_dev->lock,flags);
    switch (mode) {
    case CLOCK_EVT_MODE_PERIODIC:
        evt_dev->curmode = mode;
        resettimer(latch - 1);
        break;
    case CLOCK_EVT_MODE_ONESHOT:
        evt_dev->curmode = mode;
        break;
    case CLOCK_EVT_MODE_UNUSED:
    case CLOCK_EVT_MODE_SHUTDOWN:
        stoptimer();
        break;

    case CLOCK_EVT_MODE_RESUME:
        restarttimer();
        break;
    }
    spin_unlock_irqrestore(&evt_dev->lock,flags);
}
Ejemplo n.º 2
0
Archivo: timer.c Proyecto: dpl0/timer
int
main(int argc, char *argv[])
{
	char *home;
	int err;
	enum mode m;
	pid_t timerpid;
	struct stat st;

	if (argc == 2)
		switch (argv[1][0]) { 
		case 'p':
			m = PAUSE;
			break;
		case 'r':
			m = RESTART;
			break;
		case 's':
			m = STOP;
			break;
		default:
			usage(argv[0]);
			break;
		}
	else if (argc == 1)
		m = BEGIN;
	else
		usage(argv[0]);		

	//Check if we're starting the timer
	//and the file exists.
	err = access(PIDFILE, F_OK);
	if (m !=  BEGIN && err != 0) {
		printf("Timer is not running, please start it first.\n");
		exit(1);
	} else if (m == BEGIN && err == 0) {
		printf("Timer is already running, please stop it first.\n");
		exit(1);
	}

	//Create or read the file used to store the PID of the timer.
	if (m != BEGIN)
		pidfile = fopen(PIDFILE, "r+");
	else if (m == BEGIN)
		pidfile = fopen(PIDFILE, "w+");

	if (pidfile == NULL && m != BEGIN) {
		printf("Couldn't open %s for read it\n", PIDFILE);
		exit(1);
	} else if (pidfile == NULL && m == BEGIN) {
		printf("Couldn't create %s.\n", PIDFILE);
		exit(1);
	}

	if (m != BEGIN)
		timerpid = (pid_t)getw(pidfile);

	if ((home = getenv("HOME")) == NULL) {
		printf("Error: No $HOME, you hobbo!.\n");
		printf("Continuing anyways.\n");
	} else
		timerfilename = strncat(home, "/.timer", sizeof(timerfilename));

	switch (m) {
	case BEGIN:
		begin();
		break;
	case PAUSE:
		pausetimer(timerpid);
		break;
	case RESTART:
		restarttimer(timerpid);
		break;
	case STOP:
		stoptimer(timerpid);
		break;
	}	

	exit (0);
}