Add dsp mode change fuction to A and B Netz, fixed NMT
This commit is contained in:
@@ -221,23 +221,21 @@ int cnetz_create(int kanal, enum cnetz_chan_type chan_type, const char *sounddev
|
||||
goto error;
|
||||
|
||||
/* go into idle state */
|
||||
cnetz->dsp_mode = DSP_MODE_OGK;
|
||||
cnetz->sched_dsp_mode = DSP_MODE_OGK;
|
||||
cnetz->sched_switch_mode = 0;
|
||||
cnetz_set_dsp_mode(cnetz, DSP_MODE_OGK);
|
||||
cnetz_set_sched_dsp_mode(cnetz, DSP_MODE_OGK, 0);
|
||||
cnetz_go_idle(cnetz);
|
||||
|
||||
#ifdef DEBUG_SPK
|
||||
transaction_t *trans = create_transaction(cnetz, TRANS_DS, 2, 2, 22002);
|
||||
trans->mo_call = 1;
|
||||
cnetz->sched_switch_mode = 2;
|
||||
cnetz->sched_dsp_mode = DSP_MODE_SPK_K;
|
||||
cnetz_set_sched_dsp_mode(cnetz, DSP_MODE_SPK_K, 2);
|
||||
#else
|
||||
/* create transaction for speech channel loopback */
|
||||
if (loopback && chan_type == CHAN_TYPE_SPK) {
|
||||
transaction_t *trans = create_transaction(cnetz, TRANS_VHQ, 2, 2, 22002);
|
||||
trans->mo_call = 1;
|
||||
cnetz->dsp_mode = DSP_MODE_SPK_K;
|
||||
cnetz->sched_dsp_mode = DSP_MODE_SPK_K;
|
||||
cnetz_set_dsp_mode(cnetz, DSP_MODE_SPK_K);
|
||||
cnetz_set_sched_dsp_mode(cnetz, DSP_MODE_SPK_K, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -282,11 +280,10 @@ static void cnetz_go_idle(cnetz_t *cnetz)
|
||||
cnetz_new_state(cnetz, CNETZ_IDLE);
|
||||
if (cnetz->dsp_mode == DSP_MODE_SPK_K || cnetz->dsp_mode == DSP_MODE_SPK_V) {
|
||||
/* go idle after next frame/slot */
|
||||
cnetz->sched_switch_mode = 1;
|
||||
cnetz->sched_dsp_mode = (cnetz->sender.kanal == CNETZ_OGK_KANAL) ? DSP_MODE_OGK : DSP_MODE_OFF;
|
||||
cnetz_set_sched_dsp_mode(cnetz, (cnetz->sender.kanal == CNETZ_OGK_KANAL) ? DSP_MODE_OGK : DSP_MODE_OFF, 1);
|
||||
} else {
|
||||
cnetz->sched_switch_mode = 0;
|
||||
cnetz->dsp_mode = (cnetz->sender.kanal == CNETZ_OGK_KANAL) ? DSP_MODE_OGK : DSP_MODE_OFF;
|
||||
cnetz_set_sched_dsp_mode(cnetz, (cnetz->sender.kanal == CNETZ_OGK_KANAL) ? DSP_MODE_OGK : DSP_MODE_OFF, 0);
|
||||
cnetz_set_dsp_mode(cnetz, (cnetz->sender.kanal == CNETZ_OGK_KANAL) ? DSP_MODE_OGK : DSP_MODE_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1014,8 +1011,7 @@ wbn:
|
||||
telegramm.frequenz_nr = spk->sender.kanal;
|
||||
cnetz_new_state(spk, CNETZ_BUSY);
|
||||
/* schedule switching two slots ahead */
|
||||
spk->sched_switch_mode = 2;
|
||||
spk->sched_dsp_mode = DSP_MODE_SPK_K;
|
||||
cnetz_set_sched_dsp_mode(cnetz, DSP_MODE_SPK_K, 2);
|
||||
unlink_transaction(trans);
|
||||
link_transaction(trans, spk);
|
||||
/* flush all other transactions, if any (in case of OgK/SpK) */
|
||||
@@ -1251,8 +1247,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz)
|
||||
/* next sub frame */
|
||||
trans_new_state(trans, TRANS_VHQ);
|
||||
trans->count = 0;
|
||||
cnetz->sched_switch_mode = 1;
|
||||
cnetz->sched_dsp_mode = DSP_MODE_SPK_V;
|
||||
cnetz_set_sched_dsp_mode(cnetz, DSP_MODE_SPK_V, 1);
|
||||
#ifndef DEBUG_SPK
|
||||
timer_start(&trans->timer, 0.075 + 0.6 * F_VHQ); /* one slot + F_VHQ frames */
|
||||
#endif
|
||||
@@ -1269,8 +1264,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz)
|
||||
/* next sub frame */
|
||||
trans_new_state(trans, TRANS_VHQ);
|
||||
trans->count = 0;
|
||||
cnetz->sched_switch_mode = 1;
|
||||
cnetz->sched_dsp_mode = DSP_MODE_SPK_V;
|
||||
cnetz_set_sched_dsp_mode(cnetz, DSP_MODE_SPK_V, 1);
|
||||
timer_start(&trans->timer, 0.075 + 0.6 * F_VHQ); /* one slot + F_VHQ frames */
|
||||
}
|
||||
break;
|
||||
|
@@ -639,7 +639,7 @@ again:
|
||||
if (--cnetz->sched_switch_mode == 0) {
|
||||
/* OgK / SpK(K) / SpK(V) */
|
||||
PDEBUG(DDSP, DEBUG_INFO, "Switching channel (mode)\n");
|
||||
cnetz->dsp_mode = cnetz->sched_dsp_mode;
|
||||
cnetz_set_dsp_mode(cnetz, cnetz->sched_dsp_mode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -827,3 +827,16 @@ void unshrink_speech(cnetz_t *cnetz, int16_t *speech_buffer, int count)
|
||||
cnetz->sender.rxbuf_pos = pos;
|
||||
}
|
||||
|
||||
void cnetz_set_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode)
|
||||
{
|
||||
PDEBUG(DDSP, DEBUG_DEBUG, "DSP mode %d -> %d\n", cnetz->dsp_mode, mode);
|
||||
cnetz->dsp_mode = mode;
|
||||
}
|
||||
|
||||
void cnetz_set_sched_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode, int frames_ahead)
|
||||
{
|
||||
PDEBUG(DDSP, DEBUG_DEBUG, "Schedule DSP mode %d -> %d in %d frames\n", cnetz->dsp_mode, mode, frames_ahead);
|
||||
cnetz->sched_dsp_mode = mode;
|
||||
cnetz->sched_switch_mode = frames_ahead;
|
||||
}
|
||||
|
||||
|
@@ -4,4 +4,6 @@ int dsp_init_sender(cnetz_t *cnetz, int measure_speed, double clock_speed[2], do
|
||||
void dsp_cleanup_sender(cnetz_t *cnetz);
|
||||
void calc_clock_speed(cnetz_t *cnetz, uint64_t samples, int tx, int result);
|
||||
void unshrink_speech(cnetz_t *cnetz, int16_t *speech_buffer, int count);
|
||||
void cnetz_set_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode);
|
||||
void cnetz_set_sched_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode, int frames_ahead);
|
||||
|
||||
|
Reference in New Issue
Block a user