From 52c3968f15915e9ffdba81493bb9c2a77f0a7b01 Mon Sep 17 00:00:00 2001 From: dmtar Date: Fri, 28 Mar 2025 16:22:17 +0000 Subject: [PATCH] add special vehicle container inclusion (public transport and emergency) based on vehicle role from config --- src/cam.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/cam.c b/src/cam.c index fed3f5f..af9fe34 100644 --- a/src/cam.c +++ b/src/cam.c @@ -335,7 +335,38 @@ static int mk_cam(uint8_t *cam_oer, uint16_t *cam_len) { } lightship->t_last_cam_lfc = now; - } + } + + // Special vehicle container + if (facilities.vehicle.role == EI2_VehicleRole_publicTransport) { + cam->cam.camParameters.specialVehicleContainer = calloc(1, sizeof(EI2_SpecialVehicleContainer_t)); + cam->cam.camParameters.specialVehicleContainer->present = EI2_SpecialVehicleContainer_PR_publicTransportContainer; + EI2_PublicTransportContainer_t* cam_ptc = &cam->cam.camParameters.specialVehicleContainer->choice.publicTransportContainer; + cam_ptc->embarkationStatus = true; + } + else if (facilities.vehicle.role == EI2_VehicleRole_emergency) { + cam->cam.camParameters.specialVehicleContainer = calloc(1, sizeof(EI2_SpecialVehicleContainer_t)); + cam->cam.camParameters.specialVehicleContainer->present = EI2_SpecialVehicleContainer_PR_emergencyContainer; + EI2_EmergencyContainer_t* cam_ec = &cam->cam.camParameters.specialVehicleContainer->choice.emergencyContainer; + cam_ec->lightBarSirenInUse.buf = calloc(sizeof(uint8_t), 1); + uint8_t lightBarSirenInUseValue = 0x00; + memcpy(cam_ec->lightBarSirenInUse.buf, &lightBarSirenInUseValue, 1); + cam_ec->lightBarSirenInUse.size = 1; + cam_ec->lightBarSirenInUse.bits_unused = 6; + + cam_ec->incidentIndication = calloc(1, sizeof(struct EI2_CauseCodeV2)); + cam_ec->incidentIndication->ccAndScc.present = EI2_CauseCodeChoice_PR_publicTransportVehicleApproaching28; + cam_ec->incidentIndication->ccAndScc.choice.publicTransportVehicleApproaching28 = 0; + + cam_ec->emergencyPriority = calloc(1, sizeof(EI2_EmergencyPriority_t)); + cam_ec->emergencyPriority->buf = malloc(sizeof(uint8_t)); + uint8_t emergencyPriorityValue = 0x00; + emergencyPriorityValue = emergencyPriorityValue | 0x80; + memcpy(cam_ec->emergencyPriority->buf, &emergencyPriorityValue, 1); + cam_ec->emergencyPriority->size = 1; + cam_ec->emergencyPriority->bits_unused = 6; + } + lightship->last_pos = pn;