Skip to content

Commit

Permalink
Add 1600bps support for M17 to the M17 utils
Browse files Browse the repository at this point in the history
  • Loading branch information
nostar committed Jan 14, 2022
1 parent 9a6d973 commit 3bfe707
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 35 deletions.
39 changes: 30 additions & 9 deletions DMR2M17/ModeConv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -580,38 +580,59 @@ void CModeConv::putM17(unsigned char* data)
{
assert(data != NULL);

int16_t audio[160U];
int16_t audio_adjusted[160U];
int16_t audio[320U];
int16_t audio_adjusted[320U];
uint8_t ambe[72U];
uint8_t codec2[8U];
uint8_t vch[10U];
size_t s = 160;

::memset(audio, 0, sizeof(audio));
::memset(ambe, 0, sizeof(ambe));

::memcpy(codec2, &data[36], 8);

if((data[19] & 0x06U) == 0x04U){ //"3200 Voice";
m_c2->codec2_set_mode(true);
s = 160;
}
else{ //"1600 V/D";
m_c2->codec2_set_mode(false);
s = 320;
}

m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){

for(size_t i = 0; i < s; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}
//m_mbe->encode_2450(audio_adjusted, ambe);
m_mbe->encode_dmr(audio_adjusted, ambe);

encode(ambe, vch, 0U);
m_DMR.addData(&TAG_DATA, 1U);
m_DMR.addData(ambe, 9U);
m_dmrN += 1U;

::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
int16_t *p = audio_adjusted;

if(s == 160){
::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}
}
else{
p = &audio_adjusted[160U];
}
//m_mbe->encode_2450(audio_adjusted, ambe);
m_mbe->encode_dmr(audio_adjusted, ambe);
m_mbe->encode_dmr(p, ambe);

encode(ambe, vch, 0U);
m_DMR.addData(&TAG_DATA, 1U);
m_DMR.addData(ambe, 9U);
m_dmrN += 1U;
m_c2->codec2_set_mode(true);
}

unsigned int CModeConv::getDMR(unsigned char* data)
Expand Down
37 changes: 29 additions & 8 deletions M172DMR/ModeConv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -580,17 +580,30 @@ void CModeConv::putM17(unsigned char* data)
{
assert(data != NULL);

int16_t audio[160U];
int16_t audio_adjusted[160U];
int16_t audio[320U];
int16_t audio_adjusted[320U];
uint8_t ambe[72U];
uint8_t codec2[8U];
uint8_t vch[10U];
size_t s = 160;

::memset(audio, 0, sizeof(audio));
::memset(ambe, 0, sizeof(ambe));

::memcpy(codec2, &data[36], 8);

if((data[19] & 0x06U) == 0x04U){ //"3200 Voice";
m_c2->codec2_set_mode(true);
s = 160;
}
else{ //"1600 V/D";
m_c2->codec2_set_mode(false);
s = 320;
}

m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){

for(size_t i = 0; i < s; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}
//m_mbe->encode_2450(audio_adjusted, ambe);
Expand All @@ -600,18 +613,26 @@ void CModeConv::putM17(unsigned char* data)
m_DMR.addData(ambe, 9U);
m_dmrN += 1U;

::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
int16_t *p = audio_adjusted;

if(s == 160){
::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}
}
else{
p = &audio_adjusted[160U];
}
//m_mbe->encode_2450(audio_adjusted, ambe);
m_mbe->encode_dmr(audio_adjusted, ambe);
m_mbe->encode_dmr(p, ambe);

encode(ambe, vch, 0U);
m_DMR.addData(&TAG_DATA, 1U);
m_DMR.addData(ambe, 9U);
m_dmrN += 1U;
m_c2->codec2_set_mode(true);
}

unsigned int CModeConv::getDMR(unsigned char* data)
Expand Down
37 changes: 28 additions & 9 deletions M172YSF/ModeConv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,16 +195,27 @@ void CModeConv::putM17(unsigned char* data)
{
assert(data != NULL);

int16_t audio[160U];
int16_t audio_adjusted[160U];
int16_t audio[320U];
int16_t audio_adjusted[320U];
uint8_t codec2[8U];
uint8_t vch[13U];
size_t s = 160;

::memset(audio, 0, sizeof(audio));
::memcpy(codec2, &data[36], 8);

if((data[19] & 0x06U) == 0x04U){ //"3200 Voice";
m_c2->codec2_set_mode(true);
s = 160;
}
else{ //"1600 V/D";
m_c2->codec2_set_mode(false);
s = 320;
}

m_c2->codec2_decode(audio, codec2);

for(int i = 0; i < 160; ++i){
for(size_t i = 0; i < s; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}

Expand All @@ -213,18 +224,26 @@ void CModeConv::putM17(unsigned char* data)
m_YSF.addData(vch, 13U);
m_ysfN += 1U;

::memset(audio, 0, sizeof(audio));
::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);
int16_t *p = audio_adjusted;

for(int i = 0; i < 160; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
if(s == 160){
::memset(audio, 0, sizeof(audio));
::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);

for(int i = 0; i < 160; ++i){
m_m17Attenuate ? audio_adjusted[i] = audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}
}
else{
p = &audio_adjusted[160U];
}

encodeYSF(audio_adjusted, vch);
encodeYSF(p, vch);
m_YSF.addData(&TAG_DATA, 1U);
m_YSF.addData(vch, 13U);
m_ysfN += 1U;
m_c2->codec2_set_mode(true);
}

unsigned int CModeConv::getYSF(unsigned char* data)
Expand Down
37 changes: 28 additions & 9 deletions USRP2M17/ModeConv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,31 +129,50 @@ void CModeConv::putM17EOT()

void CModeConv::putM17(uint8_t* data)
{
int16_t audio[160U];
int16_t audio_adjusted[160U];
int16_t audio[320U];
int16_t audio_adjusted[320U];
uint8_t codec2[8U];
size_t s = 160;

::memset(audio, 0, sizeof(audio));
::memcpy(codec2, &data[36], 8);

if((data[19] & 0x06U) == 0x04U){ //"3200 Voice";
m_c2->codec2_set_mode(true);
s = 160;
}
else{ //"1600 V/D";
m_c2->codec2_set_mode(false);
s = 320;
}

m_c2->codec2_decode(audio, codec2);

for(int i = 0; i < 160; ++i){
for(size_t i = 0; i < s; ++i){
audio_adjusted[i] = m_m17Attenuate ? audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}

m_USRP.addData(&TAG_USRP_DATA, 1U);
m_USRP.addData(audio_adjusted, 160U);
m_USRP.addData(audio_adjusted, 160);
m_usrpN += 1U;

::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){
audio_adjusted[i] = m_m17Attenuate ? audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
int16_t *p = audio_adjusted;

if(s == 160){
::memcpy(codec2, &data[44], 8);
m_c2->codec2_decode(audio, codec2);
for(int i = 0; i < 160; ++i){
audio_adjusted[i] = m_m17Attenuate ? audio[i] / m_m17GainMultiplier : audio[i] * m_m17GainMultiplier;
}
}
else{
p = &audio_adjusted[160U];
}

m_USRP.addData(&TAG_USRP_DATA, 1U);
m_USRP.addData(audio_adjusted, 160U);
m_USRP.addData(p, 160U);
m_usrpN += 1U;
m_c2->codec2_set_mode(true);
}

uint32_t CModeConv::getUSRP(int16_t* data)
Expand Down

0 comments on commit 3bfe707

Please sign in to comment.