#include "osc-fsk.h"

OscFSK::OscFSK(uint16_t _freq_low, uint16_t _freq_hi, uint16_t _osc_phase_max)
    : freq{_freq_low, _freq_hi}
    , osc_phase_max(_osc_phase_max) {
    osc_phase_current = 0;
}

bool OscFSK::next(bool bit, uint16_t* period) {
    bool advance = false;
    *period = freq[bit];
    osc_phase_current += *period;

    if(osc_phase_current > osc_phase_max) {
        advance = true;
        osc_phase_current -= osc_phase_max;
    }

    return advance;
}