From 275be50225442878c70ab9d3cb4ee834827b54fb Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 10 Aug 2017 17:43:36 +0200 Subject: [PATCH] R2000: Fixes --- src/r2000/frame.c | 10 +++++----- src/r2000/r2000.c | 27 +++++++++++++++++---------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/r2000/frame.c b/src/r2000/frame.c index 37b0a91..41c194a 100644 --- a/src/r2000/frame.c +++ b/src/r2000/frame.c @@ -176,7 +176,7 @@ static struct r2000_element { { 'r', "SM Relais", NULL, NULL }, { 'f', "SM Flotte", NULL, NULL }, { 'm', "SM ID", NULL, NULL }, - { 'd', "Called ID", NULL, NULL }, + { 'd', "Called Flotte", NULL, NULL }, { 'c', "CRINS", param_crins, param_crins }, { 'a', "Assign Channel", NULL, NULL }, { 's', "Sequence Number", param_hex, param_hex }, @@ -347,13 +347,13 @@ static struct r2000_frame { const char *def; const char *name; } r2000_frame_def[] = { - /* V Channel-Relais---Msg--t--HomeRel--MobieID--------- Supervisory----- */ + /* V Channel-Relais---Msg--t--HomeRel--MobieID---------misc--------Supervisory----- */ /* messages REL->SM */ { REL_TO_SM, 0, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm-----ccc----DDDIII++---PT---", "INSCRIPTION ACK" }, /* inscription ack */ - { REL_TO_SM, 2, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm------------DDDIII++---PT---", "PLEASE WAIT" }, /* waiting on CC */ { REL_TO_SM, 1, "V-CCCCCCCCRRRRRRRRRMMMMM----------------------------------------DDDIII++---PT---", "IDLE" }, /* broadcast */ + { REL_TO_SM, 2, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm------------DDDIII++---PT---", "PLEASE WAIT" }, /* waiting on CC */ { REL_TO_SM, 3, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmmaaaaaaaa----DDDIII++---PT---", "ASSIGN INCOMING"}, /* assign incoming call */ - { REL_TO_SM, 4, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrfffffffffmmmmmmmaaaaaaaa----DDDIII++---PT---", "ASSIGN GROUP"}, /* assign groupp call */ + { REL_TO_SM, 4, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrfffffffffmmmmmmmaaaaaaaa----DDDIII++---PT---", "ASSIGN INCOMING (GROUP)"}, /* assign group call */ { REL_TO_SM, 5, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmmaaaaaaaa----DDDIII++---PT---", "ASSIGN OUTGOING"}, /* assign outgoing call */ { REL_TO_SM, 9, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm------------DDDIII++---PT---", "RELEASE ON CC" }, /* release call on CC */ { REL_TO_SM, 16, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm----------------------------", "IDENTITY REQ"}, /* request identity */ @@ -363,7 +363,7 @@ static struct r2000_frame { /* messages SM->REL */ { SM_TO_REL, 0, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm--------ssss", "INSCRIPTION REQ" }, /* inscription */ { SM_TO_REL, 1, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm--------ssss", "CALL REQ (PRIVATE)" }, /* request call */ - { SM_TO_REL, 1, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrfffffffffmmmmmmmddddddddssss", "CALL REQ (GROUP)" }, /* request call */ + { SM_TO_REL, 2, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrfffffffffmmmmmmmddddddddssss", "CALL REQ (GROUP)" }, /* request call */ { SM_TO_REL, 3, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm--------ssss", "CALL REQ (PUBLIC)" }, /* request call */ { SM_TO_REL, 6, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm------------", "RELEASE ON CC" }, /* release on CC */ { SM_TO_REL, 16, "V-CCCCCCCCRRRRRRRRRMMMMMtttrrrrrrrrrmmmmmmmmmmmmmmmm--------ssss", "IDENTITY ACK" }, /* identity response */ diff --git a/src/r2000/r2000.c b/src/r2000/r2000.c index d1f570c..682425e 100644 --- a/src/r2000/r2000.c +++ b/src/r2000/r2000.c @@ -372,6 +372,10 @@ static int match_relais(r2000_t *r2000, frame_t *frame) static int match_subscriber(r2000_t *r2000, frame_t *frame) { + /* ignore dialing messages, because subscriber info is not used in there */ + if (frame->message == 19 || frame->message == 20) + return 1; + if (r2000->subscriber.relais != frame->sm_relais || r2000->subscriber.mor != frame->sm_mor) { PDEBUG_CHAN(DR2000, DEBUG_NOTICE, "Frame for different subscriber '%s' received, ignoring.\n", print_subscriber_frame(frame)); @@ -686,9 +690,11 @@ static void rx_idle(r2000_t *r2000, frame_t *frame) r2000->subscriber.relais = frame->sm_relais; r2000->subscriber.mor = frame->sm_mor; - PDEBUG_CHAN(DR2000, DEBUG_INFO, "Received inscription from station mobile '%s'\n", print_subscriber_frame(frame)); - PDEBUG_CHAN(DR2000, DEBUG_INFO, " -> Home Relais: %d'\n", frame->sm_relais); - PDEBUG_CHAN(DR2000, DEBUG_INFO, " -> Mobile ID: %d'\n", frame->sm_mor); + PDEBUG_CHAN(DR2000, DEBUG_INFO, "Received inscription from station mobile '%s'\n", print_subscriber_subscr(&r2000->subscriber)); + PDEBUG_CHAN(DR2000, DEBUG_INFO, " -> Mobile Type: %d'\n", r2000->subscriber.type); + PDEBUG_CHAN(DR2000, DEBUG_INFO, " -> Home Relais: %d'\n", r2000->subscriber.relais); + PDEBUG_CHAN(DR2000, DEBUG_INFO, " -> Mobile ID: %d'\n", r2000->subscriber.mor); + PDEBUG_CHAN(DR2000, DEBUG_INFO, " (Use '%s' as dial string to call the station mobile.)'\n", subscriber2string(&r2000->subscriber)); r2000_new_state(r2000, STATE_INSCRIPTION); break; @@ -852,12 +858,15 @@ static void timeout_out_ident(r2000_t *r2000) { PDEBUG_CHAN(DR2000, DEBUG_INFO, "Timeout receiving identity (outgoing call)\n"); - r2000_release(r2000); + r2000_go_idle(r2000); } static void timeout_in_ident(r2000_t *r2000) { - PDEBUG_CHAN(DR2000, DEBUG_INFO, "Timeout receiving identity (incoming call)\n"); + if (r2000->state == STATE_IN_IDENT) + PDEBUG_CHAN(DR2000, DEBUG_INFO, "Timeout receiving identity (incoming call)\n"); + else + PDEBUG_CHAN(DR2000, DEBUG_INFO, "Timeout receiving identity (recalling outgoing call)\n"); /* move us back to cc */ r2000 = move_call_to_chan(r2000, CHAN_TYPE_CC); @@ -871,11 +880,9 @@ static void timeout_in_ident(r2000_t *r2000) } /* ... or release */ - if (r2000->callref) { - PDEBUG_CHAN(DR2000, DEBUG_NOTICE, "Phone does not response, releasing towards network\n"); - call_in_release(r2000->callref, CAUSE_OUTOFORDER); - r2000->callref = 0; - } + PDEBUG_CHAN(DR2000, DEBUG_NOTICE, "Phone does not response, releasing towards network\n"); + call_in_release(r2000->callref, CAUSE_OUTOFORDER); + r2000->callref = 0; r2000_release(r2000); }