diff --git a/src/cam.c b/src/cam.c index 9d3861f..36deb9b 100644 --- a/src/cam.c +++ b/src/cam.c @@ -35,7 +35,7 @@ const cid_ssp_bm_t CID_SSP_BM_MAP[] = { {"dangerousGoods/dangerousGoodsContainer", CID_DANGEROUS_GOODS, 0x1000}, {"roadwork/roadWorksContainerBasic", CID_ROADWORK, 0x0800}, {"rescue/rescueContainer", CID_RESCUE, 0x0400}, - {"emergency/emergencyContaine", CID_EMERGENCY, 0x0200}, + {"emergency/emergencyContainer", CID_EMERGENCY, 0x0200}, {"safetyCar/safetyCarContainer", CID_SAFETY_CAR, 0x0100}, {"closedLanes/RoadworksContainerBasic", CID_CLOSED_LANES, 0x0080}, {"requestForRightOfWay/EmergencyContainer: EmergencyPriority", CID_REQUEST_FOR_RIGHT_OF_WAY, 0x0040}, @@ -62,12 +62,14 @@ static int permissions_check(int cid, uint8_t* permissions, uint8_t permissions_ return 0; } - uint32_t perms_int = (*((uint32_t*) permissions)) >> 16; + uint16_t perms_int = *(uint16_t*)(permissions+1); - uint32_t perm_val; + uint16_t perm_val; for (int i = 0; i < 16; ++i) { if (cid == CID_SSP_BM_MAP[i].cid) { perm_val = CID_SSP_BM_MAP[i].bitmap_val; + perm_val = (perm_val>>8) | (perm_val<<8); + break; } } @@ -396,7 +398,8 @@ int check_cam(void* fc, BTPDataIndication_t *bdi, CAM_t* cam, uint8_t* ssp, uint // Check permissions if (ssp) { - if (cam->cam.camParameters.highFrequencyContainer.choice.rsuContainerHighFrequency.protectedCommunicationZonesRSU) { + if (cam->cam.camParameters.highFrequencyContainer.present == HighFrequencyContainer_PR_rsuContainerHighFrequency && + cam->cam.camParameters.highFrequencyContainer.choice.rsuContainerHighFrequency.protectedCommunicationZonesRSU) { if (!permissions_check(CID_PROTECTED_ZONES, ssp, ssp_len)) {rv = 1; return rv;} } if (cam->cam.camParameters.specialVehicleContainer) {