view future.c @ 268:ec4462c7f8b7

Extensive cleanup of beatnote specific variables Reorganize the beatnote specific variables in arrays indexed by the beatnote enum constants LO, HG, SR. Also reorganize DDS frequency related variables in arrays indexed by the DDS channel number.
author Daniele Nicolodi <daniele.nicolodi@obspm.fr>
date Thu, 09 Jul 2015 23:11:00 +0200
parents b955e35c07ae
children
line wrap: on
line source

/* welcome in the 2012 */

/* time functions */
#include <windows.h>
#include <ansi_c.h>

#include "future.h"

/* an implementation of the C99 `round` function based on `floor` and `ceil` */
double round(double x)
{
	if (x >= 0.0) {
		double y = floor(x);
		if (x - y >= 0.5)
			y += 1.0;
		return y;
	} else {
		double y = ceil(x);
		if (x - y >= 0.5)
			y -= 1.0;
		return y;
	}
}


/* implement high resolution time service */
int gettimeofday(struct timeval *tp, struct timezone *tzp)
{
	/* difference between 1970-01-01 and 1601-01-01
	   in 100-nanoseconds intervals */
	const unsigned __int64 shift = 116444736000000000ULL;
	union {
		FILETIME ft;
		unsigned __int64 integer; /* 100-nanoseconds since 1601-01-01 */
	} now;

	/* retrive system time in UTC. the resolution is limited to the resolution
	   of the system timer, which is typically in the range of 10 milliseconds
	   to 16 milliseconds */
	GetSystemTimeAsFileTime(&now.ft);
	
	/* shift to epoch and truncate to microseconds */
	now.integer = (now.integer - shift) / 10LL;
	
	tp->tv_usec = (long)(now.integer % 1000000LL);
	tp->tv_sec = (long)(now.integer / 1000000LL);
	
	/* FIXME CVI redefines the epoch as seconds since 1900-01-01 ! */
	tp->tv_sec += 2208988800;
	
	return 0;
}