view core/intervals.cpp @ 152:8f98b32d0e23 ClockSync

Last commit on this branch for a while. Overall not very succesful
author Giulio Moro <giuliomoro@yahoo.it>
date Mon, 05 Oct 2015 13:06:14 +0100
parents 24af9a14b203
children
line wrap: on
line source
/*
 * intervals.h
 *
 *  Created on: 18 May 2015
 *      Author: unmanaged
 */

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#include <native/timer.h>
#include <rtdk.h>

#include "../include/intervals.h"
void Interval::init(int aNumAverages, int aNumFrames, float aSamplingRate, const char *aName){
	enabled=false;
	numAverages=aNumAverages;
	intervals=(RTIME *)malloc(sizeof(RTIME)*numAverages);
	samplingRate=aSamplingRate;
	numFrames=aNumFrames;
	maxTimeus=0;
	intervalsPointer=0;
	sum=0;
	startTime=0;

	if(intervals!=0)
		enabled=true;
	int len=strlen(aName);
	name=(char *)malloc(sizeof(char)*(len+1));
	strcpy(name, aName);
	if(name == 0)
		enabled=false;
};
Interval::Interval(){
	init(100,1,44100,"");
}
Interval::Interval(int aNumAverages){
	init(aNumAverages,1,44100,"");
}
Interval::Interval(int aNumAverages, int aNumFrames, float aSamplingRate, const char *aName){
	init(aNumAverages,aNumFrames,aSamplingRate,aName);
}
Interval::~Interval(){
	free(intervals);
//			free(name);
}
void Interval::setNumFrames(int aNumFrames){
	numFrames=aNumFrames;
};

int Interval::start(){
//	printf("start: intervals: 0x%x, intervalsPointer: %d, numAverages: %d\n", intervals,intervalsPointer,numAverages);
	if(!enabled)
		return 0;
	startTime=rt_timer_read();
	return 1;
}
int Interval::resetMax(){
	maxTimeus=0;
	return 1;
}
int Interval::split(){ //updates
	if(!enabled)
		return 0;
	int currentInterval=rt_timer_read()-startTime;
	RTIME *currentPointer=&(intervals[intervalsPointer]);
	sum-=*currentPointer; //take out the oldest value from the sum
	*currentPointer=currentInterval;
	sum+=*currentPointer; //add the new value to the sum
	timeus=((float)sum)/numAverages/1000.0;
	maxTimeus=timeus>maxTimeus?timeus:maxTimeus;
	intervalsPointer++;
	if(intervalsPointer>=(numAverages-1)){
		intervalsPointer=0;
	}
	return 1;
}
void Interval::setEnabled(bool aActive){
	enabled=aActive;
}
float Interval::getTimeus(){
	return timeus;
}
float Interval::getMaxTimeus(){
	return maxTimeus;
}
void Interval::print(){
	rt_printf(//"sleepTimer time: 29.484us, (1.30 samples, numFrames: 2, 65.01%%). MaxTime: 30.439us, (1.34 samples, 67.12%%)\n");
"%s time: %.3fus, (%.2f samples, numFrames: %d, %.2f%%). MaxTime: %.3fus, (%.2f samples, %.2f%%)\n",
			name,
			timeus, timeus/1000000.0*samplingRate, numFrames, timeus/1000000.0*samplingRate/numFrames * 100,
			maxTimeus, maxTimeus/1000000.0*samplingRate, maxTimeus/1000000.0*samplingRate/numFrames * 100);
}