#include "ppmsum.h" #include #include namespace { icucnt_t last_width, last_period; PPMSum* ppmsum; int ppm_n = 0; static void icuwidthcb(ICUDriver *icup) { last_width = icuGetWidthI(icup); ppmsum->data[ppm_n] = last_width - 1050; } static void icuperiodcb(ICUDriver *icup) { last_period = icuGetPeriodI(icup); if(last_period > 5000) { ppm_n = 0; } else { ppm_n = (ppm_n + 1) % 4; } } static ICUConfig icucfg = { ICU_INPUT_ACTIVE_HIGH, 1000000, icuwidthcb, icuperiodcb }; }; void PPMSum::start() { ppmsum = this; icuStart(&ICUD4, &icucfg); icuEnable(&ICUD4); }