diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2017-01-02 10:13:43 +0100 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2017-01-02 10:13:43 +0100 |
commit | e724823c5b368971e21f6580f587ad1a7288ae7e (patch) | |
tree | 84db27f6f9e712f7a0d8462be09921def2608cb9 /src/anetz | |
parent | 2e7a05f8d9c4b9a8ee88d918045375ea02eb6871 (diff) |
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.
Diffstat (limited to 'src/anetz')
-rw-r--r-- | src/anetz/anetz.c | 13 | ||||
-rw-r--r-- | src/anetz/dsp.c | 5 | ||||
-rw-r--r-- | src/anetz/dsp.h | 2 |
3 files changed, 12 insertions, 8 deletions
diff --git a/src/anetz/anetz.c b/src/anetz/anetz.c index a920929..96fe5dc 100644 --- a/src/anetz/anetz.c +++ b/src/anetz/anetz.c @@ -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: diff --git a/src/anetz/dsp.c b/src/anetz/dsp.c index eae5554..b79b572 100644 --- a/src/anetz/dsp.c +++ b/src/anetz/dsp.c @@ -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; } diff --git a/src/anetz/dsp.h b/src/anetz/dsp.h index 1bc4fca..3f78028 100644 --- a/src/anetz/dsp.h +++ b/src/anetz/dsp.h @@ -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); |