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); }