A-Netz: Reset tone detector when going idle
A pending tone must be detected as soon as the cell is idle. This happens if the phone picks up during release guard time.
This commit is contained in:
parent
2e7a05f8d9
commit
e724823c5b
|
@ -233,7 +233,8 @@ static void anetz_go_idle(anetz_t *anetz)
|
|||
|
||||
PDEBUG(DANETZ, DEBUG_INFO, "Entering IDLE state on channel %d, sending 2280 Hz tone.\n", anetz->sender.kanal);
|
||||
anetz_new_state(anetz, ANETZ_FREI);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_TONE);
|
||||
/* also reset detector, so if there is a new call it is answered */
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_TONE, 1);
|
||||
anetz->station_id[0] = '\0';
|
||||
}
|
||||
|
||||
|
@ -244,7 +245,7 @@ static void anetz_release(anetz_t *anetz)
|
|||
|
||||
PDEBUG_CHAN(DANETZ, DEBUG_INFO, "Sending 2280 Hz release tone.\n");
|
||||
anetz_new_state(anetz, ANETZ_AUSLOESEN);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_TONE);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_TONE, 0);
|
||||
anetz->station_id[0] = '\0';
|
||||
timer_start(&anetz->timer, RELEASE_TO);
|
||||
}
|
||||
|
@ -254,7 +255,7 @@ static void anetz_page(anetz_t *anetz, const char *dial_string, double *freq)
|
|||
{
|
||||
PDEBUG_CHAN(DANETZ, DEBUG_INFO, "Entering paging state, sending 'Selektivruf' to '%s'.\n", dial_string);
|
||||
anetz_new_state(anetz, ANETZ_ANRUF);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_PAGING);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_PAGING, 0);
|
||||
dsp_set_paging(anetz, freq);
|
||||
strcpy(anetz->station_id, dial_string);
|
||||
timer_start(&anetz->timer, PAGING_TO);
|
||||
|
@ -293,7 +294,7 @@ void anetz_receive_tone(anetz_t *anetz, int tone)
|
|||
if (tone == 1) {
|
||||
PDEBUG_CHAN(DANETZ, DEBUG_INFO, "Received 1750 Hz calling signal from mobile station, removing idle signal.\n");
|
||||
anetz_new_state(anetz, ANETZ_GESPRAECH);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_SILENCE);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_SILENCE, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -316,7 +317,7 @@ void anetz_receive_tone(anetz_t *anetz, int tone)
|
|||
PDEBUG_CHAN(DANETZ, DEBUG_INFO, "1750 Hz signal from mobile station is gone, answer call.\n");
|
||||
call_in_answer(anetz->callref, anetz->station_id);
|
||||
}
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_AUDIO);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_AUDIO, 0);
|
||||
}
|
||||
/* release call */
|
||||
if (tone == 1) {
|
||||
|
@ -333,7 +334,7 @@ void anetz_receive_tone(anetz_t *anetz, int tone)
|
|||
PDEBUG_CHAN(DANETZ, DEBUG_INFO, "Received 1750 Hz answer signal from mobile station, removing paging tones.\n");
|
||||
timer_stop(&anetz->timer);
|
||||
anetz_new_state(anetz, ANETZ_GESPRAECH);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_SILENCE);
|
||||
anetz_set_dsp_mode(anetz, DSP_MODE_SILENCE, 0);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -404,7 +404,7 @@ const char *anetz_dsp_mode_name(enum dsp_mode mode)
|
|||
return invalid;
|
||||
}
|
||||
|
||||
void anetz_set_dsp_mode(anetz_t *anetz, enum dsp_mode mode)
|
||||
void anetz_set_dsp_mode(anetz_t *anetz, enum dsp_mode mode, int detect_reset)
|
||||
{
|
||||
PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "DSP mode %s -> %s\n", anetz_dsp_mode_name(anetz->dsp_mode), anetz_dsp_mode_name(mode));
|
||||
anetz->dsp_mode = mode;
|
||||
|
@ -412,5 +412,8 @@ void anetz_set_dsp_mode(anetz_t *anetz, enum dsp_mode mode)
|
|||
anetz->paging_tone = 0;
|
||||
anetz->paging_count = 0;
|
||||
anetz->paging_transition = 0;
|
||||
/* reset tone detector */
|
||||
if (detect_reset)
|
||||
anetz->tone_detected = -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,5 +3,5 @@ void dsp_init(void);
|
|||
int dsp_init_sender(anetz_t *anetz, int page_seqeuence);
|
||||
void dsp_cleanup_sender(anetz_t *anetz);
|
||||
void dsp_set_paging(anetz_t *anetz, double *freq);
|
||||
void anetz_set_dsp_mode(anetz_t *anetz, enum dsp_mode mode);
|
||||
void anetz_set_dsp_mode(anetz_t *anetz, enum dsp_mode mode, int detect_reset);
|
||||
|
||||
|
|
Loading…
Reference in New Issue