csensordatafilter.cpp
来自「一个基于symbian s60 3rd 的3D汽车游戏演示程序,模拟器上编译通过」· C++ 代码 · 共 71 行
CPP
71 行
/*
============================================================================
* Name : CSonsorDataFilter.cpp
* Part of : Example3D
* Description : Definition of CSensorDataFilter
* Copyright (c) 2008 Nokia Corporation
============================================================================
*/
#include "CSensorDataFilter.h"
CSensorDataFilter* CSensorDataFilter::NewL( TInt aRingBufferSize )
{
CSensorDataFilter* self = new( ELeave )CSensorDataFilter( aRingBufferSize );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
return self;
}
void CSensorDataFilter::ConstructL()
{
// Allocate ring buffer for sensor data
iRingBuffer = new( ELeave )TInt[ iRingBufferSize ];
// Clear ring buffer
memset(iRingBuffer, '\0', iRingBufferSize * sizeof(TInt));
// Initialize moving ring buffer pointer
iRingBufferPointer = iRingBuffer;
}
CSensorDataFilter::CSensorDataFilter( TInt aRingBufferSize )
{
iRingBufferSize = aRingBufferSize;
}
CSensorDataFilter::~CSensorDataFilter()
{
delete iRingBuffer;
}
TInt CSensorDataFilter::FilterSensorData( TInt aNewValue )
{
TInt sum = 0;
// Replace the oldest value in the ring buffer with the new value according to the pointer
*iRingBufferPointer = aNewValue;
// Move the ring buffer pointer
if (iRingBufferPointer < (iRingBuffer + (iRingBufferSize - 1)))
{
iRingBufferPointer++;
}
else
{
iRingBufferPointer = iRingBuffer;
}
// MOVING AVERAGE FILTER ALGORITHM
// Calculate sum of ring buffer values
for (TInt i = 0; i < iRingBufferSize; i++)
{
sum += iRingBuffer[i];
}
// Calculate the average value
return (sum / iRingBufferSize);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?