aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2017-06-11 08:13:52 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2017-06-11 08:13:52 +0200
commit7a9762e28e1bc34811f4f20d583503bdb9fec138 (patch)
tree6d65db52065d5d76f72552a57443c5a1ed8d4275
parent3e86ef95c4d522ea45dbb49f266a47bf41c33452 (diff)
NMT: Disable Supervisory signal during DMS (SMS) transfer and use Timeout
There is no Supervisory signal during DMS transfer, so there must be no timeout for Supervisory signal. Instead, the SMS layer will timeout after some seconds without receiving data.
-rw-r--r--src/nmt/nmt.c4
-rw-r--r--src/nmt/sms.c7
2 files changed, 9 insertions, 2 deletions
diff --git a/src/nmt/nmt.c b/src/nmt/nmt.c
index 1bd637d..1ab0af0 100644
--- a/src/nmt/nmt.c
+++ b/src/nmt/nmt.c
@@ -924,7 +924,7 @@ static void tx_mo_complete(nmt_t *nmt, frame_t *frame)
nmt_new_state(nmt, STATE_ACTIVE);
nmt->active_state = ACTIVE_STATE_VOICE;
nmt_set_dsp_mode(nmt, DSP_MODE_AUDIO);
- if (nmt->supervisory) {
+ if (nmt->supervisory && !nmt->dms_call) {
super_reset(nmt);
timer_start(&nmt->timer, SUPERVISORY_TO1);
}
@@ -1179,7 +1179,7 @@ static void tx_mt_complete(nmt_t *nmt, frame_t *frame)
nmt_new_state(nmt, STATE_ACTIVE);
nmt->active_state = ACTIVE_STATE_VOICE;
nmt_set_dsp_mode(nmt, DSP_MODE_AUDIO);
- if (nmt->supervisory) {
+ if (nmt->supervisory && !nmt->dms_call) {
super_reset(nmt);
timer_start(&nmt->timer, SUPERVISORY_TO1);
}
diff --git a/src/nmt/sms.c b/src/nmt/sms.c
index 2c8d311..d1d2fc6 100644
--- a/src/nmt/sms.c
+++ b/src/nmt/sms.c
@@ -28,6 +28,7 @@
#include "../common/timer.h"
#include "nmt.h"
+#define SMS_RECEIVE_TO 5.0
#define SMS_RELEASE_TO 2.0
/* TP-Message-Type-Indicator (TP-MTI) */
@@ -331,6 +332,9 @@ int sms_deliver(nmt_t *nmt, uint8_t ref, const char *orig_address, uint8_t orig_
nmt->sms.mt = 1;
dms_send(nmt, data, length, 1);
+ /* start timer */
+ timer_start(&nmt->sms_timer, SMS_RECEIVE_TO);
+
return 0;
}
@@ -596,6 +600,9 @@ void dms_receive(nmt_t *nmt, const uint8_t *data, int length, int __attribute__(
sprintf(debug_text + i * 5, " 0x%02x", data[i]);
debug_text[length * 5] = '\0';
+ /* restart timer */
+ timer_start(&nmt->sms_timer, SMS_RECEIVE_TO);
+
PDEBUG(DSMS, DEBUG_DEBUG, "Received %d bytes from DMS layer:%s\n", length, debug_text);
if (sms->mt && !sms->data_sent) {