50 lines
1.9 KiB
C
50 lines
1.9 KiB
C
|
|
#ifndef P25P1_LDU_H_a3c417fcb7804991b0e6d828066bd133
|
|
#define P25P1_LDU_H_a3c417fcb7804991b0e6d828066bd133
|
|
|
|
#include "dsd.h"
|
|
|
|
#include "p25p1_hdu.h"
|
|
#include "p25p1_const.h"
|
|
#include "p25p1_heuristics.h"
|
|
|
|
/**
|
|
* Separate imbe frames and deinterleave.
|
|
* This important methods read the IMBE data from the stream and passes it to the vocoder to produce audio.
|
|
* \param opts The DSD options.
|
|
* \param state The DSD state.
|
|
* \status_count An index that allows us to skip the status words interleaved every 36 dibit in the data
|
|
* stream.
|
|
*/
|
|
void process_IMBE (dsd_opts* opts, dsd_state* state, int* status_count);
|
|
|
|
/**
|
|
* Reads an hex word, its parity bits and attempts to error correct it using the Hamming FEC.
|
|
* \param opts The DSD options.
|
|
* \param state The DSD state.
|
|
* \param hex Pointer where to store the read hex word. Six bytes, one per bit.
|
|
* \param status_count An index that allows us to skip the status words interleaved every 36 dibit in the data
|
|
* stream.
|
|
* \param analog_singal_array Pointer to a sequence of AnalogSignal elements.
|
|
* \param analog_signal_index The current index in the analog_singal_array. This value is increased on each
|
|
* dibit read.
|
|
*/
|
|
void read_and_correct_hex_word (dsd_opts* opts, dsd_state* state, char* hex, int* status_count,
|
|
AnalogSignal* analog_signal_array, int* analog_signal_index);
|
|
|
|
/**
|
|
* Correct the information in analog_signal_array according with the content of data, which has been
|
|
* error corrected and should be valid.
|
|
* \param Dibits that have already been error corrected and we trust are correct.
|
|
* \count Number of dibits.
|
|
* \param analog_signal_array Pointer to a sequence of AnalogSignal elements, as many as the value of count.
|
|
*/
|
|
void correct_hamming_dibits(char* hex_data, int hex_count, AnalogSignal* analog_signal_array);
|
|
|
|
/**
|
|
* Logs some debug info.
|
|
*/
|
|
void debug_ldu_header(dsd_state* state);
|
|
|
|
#endif // P25P1_LDU_H_a3c417fcb7804991b0e6d828066bd133
|