60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
|
|
/*
|
|||
|
|
* SignalSync.cpp
|
|||
|
|
*
|
|||
|
|
* Created on: 12 апр. 2022 г.
|
|||
|
|
* Author: titov
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#include "SignalSync.hh"
|
|||
|
|
|
|||
|
|
processing::SignalSynchroSource::SignalSynchroSource( systemic::ISignal & raw ) : raw(raw) {}
|
|||
|
|
|
|||
|
|
const processing::SignalSynchroSource::Point & processing::SignalSynchroSource::point() const {
|
|||
|
|
|
|||
|
|
return current;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void processing::SignalSynchroSource::process() {
|
|||
|
|
|
|||
|
|
current.timestamp = (*peripheral::nanotimer::point)();
|
|||
|
|
current.value = raw;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
processing::SignalSynchroSync::SignalSynchroSync( const Point & z ) : point(z) {}
|
|||
|
|
|
|||
|
|
const float & processing::SignalSynchroSync::value() const {
|
|||
|
|
|
|||
|
|
return sync_value;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void processing::SignalSynchroSync::process() {
|
|||
|
|
|
|||
|
|
Point temp;
|
|||
|
|
|
|||
|
|
do temp = point;
|
|||
|
|
while( temp != point );
|
|||
|
|
|
|||
|
|
if( temp != prev_point ) {
|
|||
|
|
|
|||
|
|
dvalue = temp.value - prev_point.value;
|
|||
|
|
dtime = (*peripheral::nanotimer::delta)( prev_point.timestamp, temp.timestamp );
|
|||
|
|
|
|||
|
|
prev_point = temp;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
float correction = ( dvalue * dtime ) /
|
|||
|
|
(*peripheral::nanotimer::delta)( prev_point.timestamp, (*peripheral::nanotimer::point)() );
|
|||
|
|
|
|||
|
|
sync_value = prev_point.value + correction;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool processing::SignalSynchroSource::Point::operator!=( const Point & right ) const {
|
|||
|
|
|
|||
|
|
return value != right.value or timestamp != right.timestamp;
|
|||
|
|
|
|||
|
|
}
|