/*! \brief return pointer to global buffer containing a TRAU idle frame */ uint8_t *trau_idle_frame(void) { /* only initialize during the first call */ if (!dbits_initted) { /* set all D-bits to 1 */ memset(&fr_idle_frame.d_bits, 0x01, 260); memset(&fr_idle_frame.c_bits, 0x01, 25); /* spare are set to 1 */ /* set Downlink Idle Speech Frame pattern */ fr_idle_frame.c_bits[0] = 0; /* C1 */ fr_idle_frame.c_bits[1] = 1; /* C2 */ fr_idle_frame.c_bits[2] = 1; /* C3 */ fr_idle_frame.c_bits[3] = 1; /* C4 */ fr_idle_frame.c_bits[4] = 0; /* C5 */ /* set no Time Alignment pattern */ fr_idle_frame.c_bits[5] = 0; /* C6 */ fr_idle_frame.c_bits[6] = 0; /* C7 */ fr_idle_frame.c_bits[7] = 0; /* C8 */ fr_idle_frame.c_bits[8] = 0; /* C9 */ fr_idle_frame.c_bits[9] = 0; /* C10 */ fr_idle_frame.c_bits[10] = 0; /* C11 */ /* already set to 1, but maybe we need to modify it in the future */ fr_idle_frame.c_bits[11] = 1; /* C12 (UFE), good frame */ fr_idle_frame.c_bits[15] = 1; /* C16 (SP), no DTX */ encode_fr(encoded_idle_frame, &fr_idle_frame); dbits_initted = 1; /* set it to 1 to not call it again */ } return encoded_idle_frame; }
int encode_trau_frame(uint8_t *trau_bits, const struct decoded_trau_frame *fr) { uint8_t cbits5 = get_bits(fr->c_bits, 0, 5); /* 16 bits of sync header */ memset(trau_bits, 0, 16); switch (cbits5) { case TRAU_FT_FR_UP: case TRAU_FT_FR_DOWN: case TRAU_FT_IDLE_UP: case TRAU_FT_IDLE_DOWN: case TRAU_FT_EFR: encode_fr(trau_bits, fr); break; case TRAU_FT_AMR: case TRAU_FT_OM_UP: case TRAU_FT_OM_DOWN: case TRAU_FT_DATA_UP: case TRAU_FT_DATA_DOWN: case TRAU_FT_D145_SYNC: case TRAU_FT_EDATA: LOGP(DMUX, LOGL_NOTICE, "unimplemented TRAU Frame Type " "0x%02x\n", cbits5); return -1; break; default: LOGP(DMUX, LOGL_NOTICE, "unknown TRAU Frame Type " "0x%02x\n", cbits5); return -1; break; } return 0; }
uint8_t *trau_idle_frame(void) { /* only initialize during the first call */ if (!dbits_initted) { /* set all D-bits to 1 */ memset(&fr_idle_frame.d_bits, 0x01, 260); encode_fr(encoded_idle_frame, &fr_idle_frame); } return encoded_idle_frame; }