Exemple #1
0
void bpacketsync_execute_rxpayload(bpacketsync _q,
                                   unsigned char _bit)
{
    // push bit into accumulated byte
    _q->byte_rx <<= 1;
    _q->byte_rx |= (_bit & 1);
    _q->num_bits_received++;
    
    if (_q->num_bits_received == 8) {
        // append byte to encoded payload array
        _q->payload_enc[_q->num_bytes_received] = _q->byte_rx ^ _q->byte_mask;

        _q->num_bits_received=0;
        _q->num_bytes_received++;

        if (_q->num_bytes_received == _q->enc_msg_len) {
            
            _q->num_bits_received  = 0;
            _q->num_bytes_received = 0;

            // decode payload data
            bpacketsync_decode_payload(_q);

            // invoke callback
            if (_q->callback != NULL) {
                // set frame stats
                framesyncstats_init_default(&_q->framestats);
                _q->framestats.check = _q->crc;
                _q->framestats.fec0  = _q->fec0;
                _q->framestats.fec1  = _q->fec1;

                _q->callback(_q->payload_dec,
                             _q->payload_valid,
                             _q->dec_msg_len,
                             _q->framestats,
                             _q->userdata);
            }

            // reset synchronizer
            bpacketsync_reset(_q);
        }
    }
}
void ofdmflexframesync_reset(ofdmflexframesync _q)
{
    // reset internal state
    _q->state = OFDMFLEXFRAMESYNC_STATE_HEADER;

    // reset internal counters
    _q->symbol_counter=0;
    _q->header_symbol_index=0;
    _q->payload_symbol_index=0;
    _q->payload_buffer_index=0;

    // reset error vector magnitude estimate
    _q->evm_hat = 1e-12f;   // slight offset to ensure no log(0)

    // reset framestats object
    framesyncstats_init_default(&_q->framestats);

    // reset internal OFDM frame synchronizer object
    ofdmframesync_reset(_q->fs);
}