From 7558d0c0d2a936b5227c2e37ed94972498fdae80 Mon Sep 17 00:00:00 2001 From: emanuel Date: Wed, 16 Mar 2022 12:52:00 +0000 Subject: [PATCH] PCM efforts --- src/pcm.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/pcm.c b/src/pcm.c index 165851a..a76821d 100644 --- a/src/pcm.c +++ b/src/pcm.c @@ -132,6 +132,7 @@ static int pcm_check_handle_request(facilities_t* facilities, PCM_t* pcm, mc_nei mvc->negotiation->choice.reply.acceptedTrajectoriesIds.list.array = malloc(1*sizeof(void*)); mvc->negotiation->choice.reply.acceptedTrajectoriesIds.list.array[0] = malloc(sizeof(long)); *mvc->negotiation->choice.reply.acceptedTrajectoriesIds.list.array[0] = pt->id; + mvc->negotiation->choice.reply.requesterId = pcm->header.stationID; asn_enc_rval_t enc = uper_encode_to_buffer(&asn_DEF_PCM, NULL, pcm_rep, buf, buf_len); if (enc.encoded == -1) { @@ -171,7 +172,7 @@ static int pcm_check_handle_request(facilities_t* facilities, PCM_t* pcm, mc_nei fi = calloc(1, sizeof(FacilitiesIndication_t)); fi->present = FacilitiesIndication_PR_message; fi->choice.message.id = bpr->id; - fi->choice.message.itsMessageType = 43; + fi->choice.message.itsMessageType = 2043; fi->choice.message.data.size = bpr->data.size; fi->choice.message.data.buf = malloc(bpr->data.size); memcpy(fi->choice.message.data.buf, bpr->data.buf, bpr->data.size); @@ -329,6 +330,7 @@ static int pcm_check_intersection_detected(facilities_t* facilities, PCM_t* pcm, mvc->negotiation->choice.request.desiredTrajectories.list.array = malloc(1*sizeof(void*)); mvc->negotiation->choice.request.desiredTrajectories.list.array[0] = calloc(1,sizeof(ProposedTrajectory_t)); ProposedTrajectory_t* pt = mvc->negotiation->choice.request.desiredTrajectories.list.array[0]; + mvc->negotiation->choice.request.requesterId = pcm->header.stationID; pt->trajectory.list.count = trajectoryA_len; pt->trajectory.list.size = sizeof(void*) * trajectoryA_len; @@ -382,7 +384,7 @@ static int pcm_check_intersection_detected(facilities_t* facilities, PCM_t* pcm, fi = calloc(1, sizeof(FacilitiesIndication_t)); fi->present = FacilitiesIndication_PR_message; fi->choice.message.id = bpr->id; - fi->choice.message.itsMessageType = 43; + fi->choice.message.itsMessageType = 2043; fi->choice.message.data.size = bpr->data.size; fi->choice.message.data.buf = malloc(bpr->data.size); memcpy(fi->choice.message.data.buf, bpr->data.buf, bpr->data.size); @@ -394,7 +396,6 @@ static int pcm_check_intersection_detected(facilities_t* facilities, PCM_t* pcm, goto cleanup; } - syslog_debug("QUEUE SEND to APP"); it2s_tender_queue_send(facilities->tx_queue, buf, enc.encoded+1, ITSS_APPLICATIONS, bpr->id, "FI.message"); if (facilities->logging.recorder) { @@ -631,25 +632,25 @@ void* pc_service(void* fc) { tr->present = TransportRequest_PR_packet; tr->choice.packet.present = TransportPacketRequest_PR_btp; BTPPacketRequest_t* bpr = &tr->choice.packet.choice.btp; - bpr->btpType = BTPType_btpB; - bpr->gn.destinationAddress.buf = malloc(6); for (int i = 0; i < 6; ++i) { bpr->gn.destinationAddress.buf[i] = 0xff; } bpr->gn.destinationAddress.size = 6; - bpr->gn.packetTransportType = PacketTransportType_shb; - bpr->destinationPort = 2043; - bpr->gn.trafficClass = 2; - bpr->data.buf = malloc(512); - uint8_t tr_oer[1024]; - tr_oer[0] = 4; + FacilitiesIndication_t* fi = calloc(1, sizeof(FacilitiesIndication_t)); + fi = calloc(1, sizeof(FacilitiesIndication_t)); + fi->present = FacilitiesIndication_PR_message; + fi->choice.message.itsMessageType = 2043; + fi->choice.message.data.buf = malloc(512); + + uint8_t buf[1024]; + buf[0] = 4; int rv; @@ -666,13 +667,22 @@ void* pc_service(void* fc) { bpr->id = rand() + 1; - asn_enc_rval_t enc = oer_encode_to_buffer(&asn_DEF_TransportRequest, NULL, tr, tr_oer+1, 1023); + asn_enc_rval_t enc = oer_encode_to_buffer(&asn_DEF_TransportRequest, NULL, tr, buf+1, 1023); if (enc.encoded == -1) { syslog_err("[facilities] encoding TR for PCM failed"); continue; } + it2s_tender_queue_send(facilities->tx_queue, buf, enc.encoded+1, ITSS_TRANSPORT, bpr->id, "TR.packet.btp"); - it2s_tender_queue_send(facilities->tx_queue, tr_oer, enc.encoded+1, ITSS_TRANSPORT, bpr->id, "TR.packet.btp"); + fi->choice.message.id = bpr->id; + fi->choice.message.data.size = bpr->data.size; + memcpy(fi->choice.message.data.buf, bpr->data.buf, bpr->data.size); + enc = asn_encode_to_buffer(NULL, ATS_CANONICAL_OER, &asn_DEF_FacilitiesIndication, fi, buf+1, 1023); + if (enc.encoded == -1) { + syslog_err("[facilities] encoding FI for PCM failed"); + continue; + } + it2s_tender_queue_send(facilities->tx_queue, buf, enc.encoded+1, ITSS_APPLICATIONS, bpr->id, "FI.message"); if (facilities->logging.recorder) { uint16_t buffer_len = 2048;