#include #include #include #include #include #include #include #include "LS7366R.h" #include "influx.h" #include "ringbuffer.h" #include "led.h" const int CTRL_OUT = 16; const int INTR_IN = 19; const int SPI_CHAN = 0; const int SPI_SPEED = 1000000; config_t cfg; void isr() { static uint32_t lastCounter = 0; uint32_t currentCounter = ls7366rReadOTR(); uint32_t diff = currentCounter - lastCounter; lastCounter = currentCounter; ringbufferPut(diff); led(E_GREEN, true); } void init() { wiringPiSetupGpio(); wiringPiSPISetup(SPI_CHAN, SPI_SPEED); pinMode(CTRL_OUT, OUTPUT); digitalWrite(CTRL_OUT, 0); pinMode(INTR_IN, INPUT); } void readConfig() { config_init(&cfg); if (! config_read_file(&cfg, "/opt/etc/counter.cfg")) { fprintf(stderr, "failed to read config file: %s:%d - %s\n", config_error_file(&cfg), config_error_line(&cfg), config_error_text(&cfg)); config_destroy(&cfg); exit(-1); } } void start() { wiringPiISR(INTR_IN, INT_EDGE_RISING, isr); } int main (void) { readConfig(); init(); ledInit(); ls7366rInit(SPI_CHAN); influxInit(&cfg); start(); uint8_t ledTick = 0; while (1) { uint32_t diff = ringbufferGet(); double f = 1.0 / (((double) diff) / 1000000.0); // printf("%f\n", f); influxAddFrequency(f); ledTick++; if (ledTick == 50) { ledTick = 0; led(E_GREEN, false); } } // will never be reached config_destroy(&cfg); }