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 + -
显示快捷键?