Packet repetition
This commit is contained in:
parent
7caf37b3f3
commit
e30a60c6b8
|
|
@ -151,6 +151,10 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t
|
||||||
case FacilitiesDataRequest_PR_singleMessage:
|
case FacilitiesDataRequest_PR_singleMessage:
|
||||||
;
|
;
|
||||||
bool fwd = true;
|
bool fwd = true;
|
||||||
|
|
||||||
|
uint32_t transmission_duration = 0;
|
||||||
|
uint32_t transmission_interval = 0;
|
||||||
|
|
||||||
switch (fdreq->choice.singleMessage.itssMessageType) {
|
switch (fdreq->choice.singleMessage.itssMessageType) {
|
||||||
case ItssMessageType_cam:
|
case ItssMessageType_cam:
|
||||||
its_msg_def = &asn_DEF_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)) {
|
if (event_manage(facilities->den, its_msg)) {
|
||||||
fwd = false;
|
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]
|
// Respond to [itss]
|
||||||
fdres->code = ResultCode_accepted;
|
fdres->code = ResultCode_accepted;
|
||||||
fdres_oer = malloc(16);
|
fdres_oer = malloc(16);
|
||||||
|
|
@ -210,13 +227,25 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t
|
||||||
// Forward message to [transport]
|
// Forward message to [transport]
|
||||||
if (fwd) {
|
if (fwd) {
|
||||||
bdr->btpType = BTPType_btpB;
|
bdr->btpType = BTPType_btpB;
|
||||||
|
|
||||||
bdr->data.buf = malloc(fdreq->choice.singleMessage.data.size);
|
bdr->data.buf = malloc(fdreq->choice.singleMessage.data.size);
|
||||||
memcpy(bdr->data.buf, fdreq->choice.singleMessage.data.buf, 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->data.size = fdreq->choice.singleMessage.data.size;
|
||||||
|
|
||||||
bdr->gnDestinationAddress.buf = malloc(6);
|
bdr->gnDestinationAddress.buf = malloc(6);
|
||||||
for (int i = 0; i < 6; ++i) bdr->gnDestinationAddress.buf[i] = 0xff;
|
for (int i = 0; i < 6; ++i) bdr->gnDestinationAddress.buf[i] = 0xff;
|
||||||
bdr->gnDestinationAddress.size = 6;
|
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
|
// Encode ITS message into OER
|
||||||
uint8_t bdr_oer[384];
|
uint8_t bdr_oer[384];
|
||||||
bdr_oer[0] = 4; // [facilities] service id
|
bdr_oer[0] = 4; // [facilities] service id
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue