From e30a60c6b8a0b53d60067c1b1fd9c4c60e5116a8 Mon Sep 17 00:00:00 2001 From: emanuel Date: Sat, 31 Oct 2020 15:26:57 +0000 Subject: [PATCH] Packet repetition --- src/facilities.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/facilities.c b/src/facilities.c index 4b9e016..160036f 100644 --- a/src/facilities.c +++ b/src/facilities.c @@ -151,6 +151,10 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t case FacilitiesDataRequest_PR_singleMessage: ; bool fwd = true; + + uint32_t transmission_duration = 0; + uint32_t transmission_interval = 0; + switch (fdreq->choice.singleMessage.itssMessageType) { case ItssMessageType_cam: its_msg_def = &asn_DEF_CAM; @@ -194,8 +198,21 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t if (event_manage(facilities->den, its_msg)) { fwd = false; } + + if ( ((DENM_t*)its_msg)->denm.management.transmissionInterval ) { + transmission_interval = *( (uint32_t*) ((DENM_t*)its_msg)->denm.management.transmissionInterval ); + + if ( ((DENM_t*)its_msg)->denm.management.validityDuration ) { + transmission_duration = *( (uint32_t*) ((DENM_t*)its_msg)->denm.management.validityDuration ); + } else { + transmission_duration = 30000; + } + } } + transmission_interval = 1000; + transmission_duration = 60 * 1000; + // Respond to [itss] fdres->code = ResultCode_accepted; fdres_oer = malloc(16); @@ -210,13 +227,25 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t // Forward message to [transport] if (fwd) { bdr->btpType = BTPType_btpB; + bdr->data.buf = malloc(fdreq->choice.singleMessage.data.size); memcpy(bdr->data.buf, fdreq->choice.singleMessage.data.buf, fdreq->choice.singleMessage.data.size); bdr->data.size = fdreq->choice.singleMessage.data.size; + bdr->gnDestinationAddress.buf = malloc(6); for (int i = 0; i < 6; ++i) bdr->gnDestinationAddress.buf[i] = 0xff; bdr->gnDestinationAddress.size = 6; + if (transmission_interval) { + bdr->gnRepetitionInterval = malloc(sizeof(long)); + *bdr->gnRepetitionInterval = transmission_interval; + } + + if (transmission_duration) { + bdr->gnMaximumRepetitionTime = malloc(sizeof(long)); + *bdr->gnMaximumRepetitionTime = transmission_duration; + } + // Encode ITS message into OER uint8_t bdr_oer[384]; bdr_oer[0] = 4; // [facilities] service id