view include/VirtualClock.h @ 151:e9c9404e3d1f ClockSync

Pff partially working. No PID. When setting the audio clock on the bbb to 44098 the master and slave clock keep diverging instead of converging ...
author Giulio Moro <giuliomoro@yahoo.it>
date Tue, 22 Sep 2015 04:10:07 +0100
parents ebbfb154351a
children
line wrap: on
line source
#ifndef VIRTUAL_CLOCK_H_INCLUDED
#define VIRTUAL_CLOCK_H_INCLUDED

#include "math.h"
#include "stats.hpp"
#include "Clock.h"
#include "IirFilter.h"
#include "Kalman.h"
#ifdef USE_JUCE
#else
#include <BeagleRT.h>
#include <I2c_Codec.h>
extern I2c_Codec* gAudioCodec;
#endif /* USE_JUCE */

class VirtualClock{
private:
	myClock_t startTime;
	myClock_t startTimeOffset;
	myClock_t lastSyncTime;
//	myClock_t lastSyncEstimatedTime;
	double lastSyncEstimatedTime;
	bool firstRun;
	double elapsedPeriods;
	double elapsedPeriodsOffset;
	double blockPeriod;
	double period;
	MovingAverage<double> movingAverage;
	IirFilter iir;
	KalmanOne kalman;
public:
	void init(float initialValueUs);
	VirtualClock();
/**
	Call this method at regular intervals to sync che virtual clock
*/
	void sync();
/**
	Call this method asynchronously, passing a number of equally spaced events that have elapsed since the last call.
*/
	void sync(double numPeriods);
/**
	Get the current time according to the VirtualClock.
	
	@return Time elapsed since the first call to sync(), in period units. 
*/
	double getNow();
/** 
	Get the length of the period.
	
	Get the length of the period (difference between calls to sync() after various filtering operations)
*/
	double getPeriod();
/**
 * Add an offset to the number of elapsed periods.
 *
 * Add an offset to the number of elapsed periods. It also compensates for the corresponding time offset.
 */
	void addOffset(double periodOffset);
};

#endif /* VIRTUAL_CLOCK_H_INCLUDED */