int sock_get_floats(int purpose, double *vals, int num) { if (accept_if_needed(purpose) != -1) return get_floats(purpose_table[purpose], vals, num); return -1; }
void begin(void) { int i; FloatBuffer fb1, fb2, fb3, fb4; LPFData lpf_data; EqualizerData eq_data; fb1.rpos = fb1.rlen = 0; fb2.rpos = fb2.rlen = 0; fb3.rpos = fb3.rlen = 0; fb4.rpos = fb4.rlen = 0; init_lpf_data(&lpf_data, CUTOFF_FREQUENCY, NUM_TAPS, DECIMATION); init_equalizer(&eq_data); /* Startup: */ get_floats(&fb1); /* LPF needs at least NUM_TAPS+1 inputs; get_floats is fine. */ run_lpf(&fb1, &fb2, &lpf_data); /* run_demod needs 1 input, OK here. */ /* run_equalizer needs 51 inputs (same reason as for LPF). This means * running the pipeline up to demod 50 times in advance: */ for (i = 0; i < 64; i++) { if (fb1.rlen - fb1.rpos < NUM_TAPS + 1) get_floats(&fb1); run_lpf(&fb1, &fb2, &lpf_data); run_demod(&fb2, &fb3); } /* Main loop: */ while (numiters == -1 || numiters-- > 0) { /* The low-pass filter will need NUM_TAPS+1 items; read them if we * need to. */ if (fb1.rlen - fb1.rpos < NUM_TAPS + 1) get_floats(&fb1); run_lpf(&fb1, &fb2, &lpf_data); run_demod(&fb2, &fb3); run_equalizer(&fb3, &fb4, &eq_data); write_floats(&fb4); } }