dmr cleanup
This commit is contained in:
parent
02e0ad5814
commit
089a8f9284
|
@ -62,9 +62,8 @@ static const int MAX_OUT = 1;
|
|||
ambe_encoder_sb_impl::ambe_encoder_sb_impl(int verbose_flag)
|
||||
: gr::block("ambe_encoder_sb",
|
||||
gr::io_signature::make (MIN_IN, MAX_IN, sizeof(short)),
|
||||
gr::io_signature::make (MIN_OUT, MAX_OUT, sizeof(char)))
|
||||
gr::io_signature::make (MIN_OUT, MAX_OUT, 36))
|
||||
{
|
||||
set_output_multiple(36);
|
||||
set_history(160);
|
||||
}
|
||||
|
||||
|
@ -78,10 +77,10 @@ static const int MAX_OUT = 1;
|
|||
void
|
||||
ambe_encoder_sb_impl::forecast(int nof_output_items, gr_vector_int &nof_input_items_reqd)
|
||||
{
|
||||
/* produces 36 samples per 160 samples input
|
||||
/* produces 1 36-byte-block sample per 160 samples input
|
||||
*/
|
||||
const size_t nof_inputs = nof_input_items_reqd.size();
|
||||
const int nof_samples_reqd = 160.0 * (nof_output_items / 36.0);
|
||||
const int nof_samples_reqd = 160.0 * (nof_output_items);
|
||||
std::fill(&nof_input_items_reqd[0], &nof_input_items_reqd[nof_inputs], nof_samples_reqd);
|
||||
}
|
||||
|
||||
|
@ -92,7 +91,7 @@ ambe_encoder_sb_impl::general_work (int noutput_items,
|
|||
gr_vector_void_star &output_items)
|
||||
{
|
||||
int nframes = ninput_items[0] / 160;
|
||||
nframes = std::min(nframes, noutput_items / 36);
|
||||
nframes = std::min(nframes, noutput_items);
|
||||
if (nframes < 1) return 0;
|
||||
short *in = (short *) input_items[0];
|
||||
uint8_t *out = reinterpret_cast<uint8_t*>(output_items[0]);
|
||||
|
@ -107,7 +106,7 @@ ambe_encoder_sb_impl::general_work (int noutput_items,
|
|||
consume_each (nframes * 160);
|
||||
|
||||
// Tell runtime system how many output items we produced.
|
||||
return (nframes * 36);
|
||||
return (nframes);
|
||||
}
|
||||
|
||||
} /* namespace op25_repeater */
|
||||
|
|
|
@ -193,11 +193,6 @@ static void generate_cach(uint8_t at, uint8_t tc, uint8_t lcss, const uint8_t ca
|
|||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
int main(int argc, char * argv[]) {
|
||||
}
|
||||
#endif
|
||||
|
||||
namespace gr {
|
||||
namespace op25_repeater {
|
||||
|
||||
|
@ -239,7 +234,7 @@ static const int MAX_OUT = 1;
|
|||
*/
|
||||
dmr_bs_tx_bb_impl::dmr_bs_tx_bb_impl(int verbose_flag, const char * config_file)
|
||||
: gr::block("dmr_bs_tx_bb",
|
||||
gr::io_signature::make (MIN_IN, MAX_IN, sizeof(char)),
|
||||
gr::io_signature::make (MIN_IN, MAX_IN, 36),
|
||||
gr::io_signature::make (MIN_OUT, MAX_OUT, sizeof(char))),
|
||||
d_verbose_flag(verbose_flag),
|
||||
d_config_file(config_file),
|
||||
|
@ -257,7 +252,7 @@ static const int MAX_OUT = 1;
|
|||
d_sa[0] = 0;
|
||||
d_sa[1] = 0;
|
||||
set_output_multiple(144);
|
||||
set_history(36*3);
|
||||
set_history(3);
|
||||
config();
|
||||
}
|
||||
|
||||
|
@ -396,7 +391,7 @@ dmr_bs_tx_bb_impl::forecast(int nof_output_items, gr_vector_int &nof_input_items
|
|||
// the three codewords though are only read from one of the two inputs per burst
|
||||
const size_t nof_inputs = nof_input_items_reqd.size();
|
||||
const int nof_bursts = nof_output_items / 144.0;
|
||||
const int nof_samples_reqd = 108.0 * ((nof_bursts+1)>>1);
|
||||
const int nof_samples_reqd = 3 * ((nof_bursts+1)>>1);
|
||||
std::fill(&nof_input_items_reqd[0], &nof_input_items_reqd[nof_inputs], nof_samples_reqd);
|
||||
}
|
||||
|
||||
|
@ -408,11 +403,13 @@ dmr_bs_tx_bb_impl::general_work (int noutput_items,
|
|||
{
|
||||
|
||||
static const int burst_schedule[2][6] = {
|
||||
// -3: idle SYNC
|
||||
// -2: voice SYNC
|
||||
// -1: RC
|
||||
// 0|1|2|3: segment no. of embedded signalling
|
||||
{-2, 0, 1, -1, 2, 3},
|
||||
{-2, 0, 1, 2, 3, -1}
|
||||
/* {-2, 0, 1, 2, 3, -1} */
|
||||
{-3, -3, -3, -3, -3, -3}
|
||||
};
|
||||
|
||||
int nconsumed[2] = {0,0};
|
||||
|
@ -423,7 +420,8 @@ dmr_bs_tx_bb_impl::general_work (int noutput_items,
|
|||
int nframes=0;
|
||||
|
||||
for (int n=0;n < (noutput_items/144);n++) {
|
||||
if (((ninput_items[d_next_slot] - nconsumed[d_next_slot]) / 108) < 1) break;
|
||||
// need (at least) three voice codewords
|
||||
if ((ninput_items[d_next_slot] - nconsumed[d_next_slot]) < 3) break;
|
||||
|
||||
int cach_id = ((d_next_burst & 1) << 1) + d_next_slot;
|
||||
memcpy(&out[0], d_cach[cach_id], 12);
|
||||
|
@ -434,13 +432,15 @@ dmr_bs_tx_bb_impl::general_work (int noutput_items,
|
|||
memcpy(&out[66], dmr_bs_voice_sync, 24);
|
||||
else if (schedule == -1)
|
||||
memset(&out[66], 0, 24);
|
||||
else if (schedule == -3)
|
||||
memcpy(&out[66], dmr_bs_idle_sync, 24);
|
||||
else
|
||||
memcpy(&out[66], &d_embedded[d_next_slot][schedule*24], 24);
|
||||
memcpy(&out[90], &in[d_next_slot][36+18], 18);
|
||||
memcpy(&out[108], &in[d_next_slot][36+36], 36);
|
||||
in[d_next_slot] += 108;
|
||||
out += 144;
|
||||
nconsumed[d_next_slot] += 108;
|
||||
nconsumed[d_next_slot] += 3;
|
||||
|
||||
d_next_slot = (d_next_slot + 1) & 1;
|
||||
if (d_next_slot == 0) {
|
||||
|
|
|
@ -823,4 +823,8 @@ static const uint8_t dmr_bs_voice_sync[24] = {
|
|||
1,3,1,1,1,1,3,3,3,1,1,3,3,1,3,3,1,3,1,1,3,3,1,3
|
||||
};
|
||||
|
||||
static const uint8_t dmr_bs_idle_sync[24] = {
|
||||
3,1,3,3,3,3,1,1,1,3,3,1,1,3,1,1,3,1,3,3,1,1,3,1
|
||||
};
|
||||
|
||||
#endif /* INCLUDED_OP25_REPEATER_DMR_CONST_H */
|
||||
|
|
Loading…
Reference in New Issue