Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,20 +92,20 @@ But also schemas of custom messages for V2X:
_Note: none of the provided implementation is able to use different versions of a schema,
they are using the following versions:

| Schema | Rust | Python | Java | Swift |
|:-----------------:|:-----------------------------------------------------------------------------------:|:---------------------------------------------------------:|:-----------------------------------------------------------------------------------:|:-------------------------------------------:|
| **Bootstrap** | | | | |
| **CAM** | [2.2.0](schema/cam/cam_schema_2-2-0.json) [1.1.3](schema/cam/cam_schema_1-1-3.json) | [1.1.3](schema/cam/cam_schema_1-1-3.json) | [2.3.0](schema/cam/cam_schema_2-3-0.json) [1.1.3](schema/cam/cam_schema_1-1-3.json) | [1.1.3](schema/cam/cam_schema_1-1-3.json) |
| **CPM** | [2.1.0](schema/cpm/cpm_schema_2-1-0.json) | [2.1.1](schema/cpm/cpm_schema_2-1-1.json) | [2.1.1](schema/cpm/cpm_schema_2-1-1.json) [1.2.1](schema/cpm/cpm_schema_1-2-1.json) | |
| **DENM** | [2.2.0](schema/denm/denm_schema_2-2-0.json) | [1.1.3](schema/denm/denm_schema_1-1-3.json) | [1.1.3](schema/denm/denm_schema_1-1-3.json) | [1.1.3](schema/denm/denm_schema_1-1-3.json) |
| **Information** | [2.1.0](schema/information/information_schema_2-1-0.json) | [1.2.0](schema/information/information_schema_1-2-0.json) | | |
| **MAPEM** | | | | |
| **Neighbourhood** | | | | |
| **Region** | | | | |
| **SPATEM** | | | | |
| **SREM** | | | | |
| **SSEM** | | | | |
| **Status** | | [1.2.0](schema/status/status_schema_1-2-0.json) | | |
| Schema | Rust | Python | Java | Swift |
|:-----------------:|:-----------------------------------------------------------------------------------:|:---------------------------------------------------------:|:---------------------------------------------------------------------------------------:|:-------------------------------------------:|
| **Bootstrap** | | | | |
| **CAM** | [2.2.0](schema/cam/cam_schema_2-2-0.json) [1.1.3](schema/cam/cam_schema_1-1-3.json) | [1.1.3](schema/cam/cam_schema_1-1-3.json) | [2.3.0](schema/cam/cam_schema_2-3-0.json) [1.1.3](schema/cam/cam_schema_1-1-3.json) | [1.1.3](schema/cam/cam_schema_1-1-3.json) |
| **CPM** | [2.1.0](schema/cpm/cpm_schema_2-1-0.json) | [2.1.1](schema/cpm/cpm_schema_2-1-1.json) | [2.1.1](schema/cpm/cpm_schema_2-1-1.json) [1.2.1](schema/cpm/cpm_schema_1-2-1.json) | |
| **DENM** | [2.2.0](schema/denm/denm_schema_2-2-0.json) | [1.1.3](schema/denm/denm_schema_1-1-3.json) | [2.2.0](schema/denm/denm_schema_2-2-0.json) [1.1.3](schema/denm/denm_schema_1-1-3.json) | [1.1.3](schema/denm/denm_schema_1-1-3.json) |
| **Information** | [2.1.0](schema/information/information_schema_2-1-0.json) | [1.2.0](schema/information/information_schema_1-2-0.json) | | |
| **MAPEM** | | | | |
| **Neighbourhood** | | | | |
| **Region** | | | | |
| **SPATEM** | | | | |
| **SREM** | | | | |
| **SSEM** | | | | |
| **Status** | | [1.2.0](schema/status/status_schema_1-2-0.json) | | |

Languages
---------
Expand Down
63 changes: 63 additions & 0 deletions java/iot3/examples/src/main/java/com/orange/DenmV113Factory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.orange;

import com.orange.iot3mobility.TrueTime;
import com.orange.iot3mobility.messages.EtsiConverter;
import com.orange.iot3mobility.messages.StationType;
import com.orange.iot3mobility.messages.denm.DenmHelper;
import com.orange.iot3mobility.messages.denm.v113.model.DenmEnvelope113;
import com.orange.iot3mobility.messages.denm.v113.model.DenmMessage113;
import com.orange.iot3mobility.messages.denm.v113.model.Origin;
import com.orange.iot3mobility.messages.denm.v113.model.managementcontainer.ActionId;
import com.orange.iot3mobility.messages.denm.v113.model.managementcontainer.ManagementContainer;
import com.orange.iot3mobility.messages.denm.v113.model.managementcontainer.ReferencePosition;
import com.orange.iot3mobility.messages.denm.v113.model.situationcontainer.EventType;
import com.orange.iot3mobility.messages.denm.v113.model.situationcontainer.SituationContainer;
import com.orange.iot3mobility.quadkey.LatLng;
import com.orange.iot3mobility.roadobjects.HazardType;

public class DenmV113Factory {
private static final int PROTOCOL_VERSION = 2;
private static final long STATION_ID = 123456L;
private static final int LIFETIME = 10;
private static final int INFO_QUALITY = 7;

private DenmV113Factory() {
// Factory class
}

static DenmEnvelope113 createTestDenmEnvelope(
String sourceUuid,
HazardType hazardType,
LatLng position,
StationType stationType) {
return DenmEnvelope113.builder()
.origin(Origin.self.name())
.sourceUuid(sourceUuid)
.timestamp(TrueTime.getAccurateTime())
.message(DenmMessage113.builder()
.protocolVersion(PROTOCOL_VERSION)
.stationId(STATION_ID)
.managementContainer(ManagementContainer.builder()
.actionId(new ActionId(
STATION_ID,
DenmHelper.getNextSequenceNumber()))
.detectionTime(TrueTime.getAccurateETSITime())
.referenceTime(TrueTime.getAccurateETSITime())
.eventPosition(new ReferencePosition(
EtsiConverter.latitudeEtsi(position.getLatitude()),
EtsiConverter.longitudeEtsi(position.getLongitude()),
0
))
.validityDuration(LIFETIME)
.stationType(stationType.value)
.build())
.situationContainer(SituationContainer.builder()
.informationQuality(INFO_QUALITY)
.eventType(new EventType(
hazardType.getCause(),
hazardType.getSubcause()))
.build())
.build())
.build();
}
}
66 changes: 66 additions & 0 deletions java/iot3/examples/src/main/java/com/orange/DenmV220Factory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.orange;

import com.orange.iot3mobility.TrueTime;
import com.orange.iot3mobility.messages.EtsiConverter;
import com.orange.iot3mobility.messages.StationType;
import com.orange.iot3mobility.messages.denm.DenmHelper;
import com.orange.iot3mobility.messages.denm.v220.model.DenmEnvelope220;
import com.orange.iot3mobility.messages.denm.v220.model.DenmMessage220;
import com.orange.iot3mobility.messages.denm.v220.model.defs.Altitude;
import com.orange.iot3mobility.messages.denm.v220.model.defs.PositionConfidenceEllipse;
import com.orange.iot3mobility.messages.denm.v220.model.managementcontainer.ActionId;
import com.orange.iot3mobility.messages.denm.v220.model.managementcontainer.ManagementContainer;
import com.orange.iot3mobility.messages.denm.v220.model.managementcontainer.ReferencePosition;
import com.orange.iot3mobility.messages.denm.v220.model.situationcontainer.CauseCode;
import com.orange.iot3mobility.messages.denm.v220.model.situationcontainer.SituationContainer;
import com.orange.iot3mobility.quadkey.LatLng;
import com.orange.iot3mobility.roadobjects.HazardType;

public class DenmV220Factory {
private static final int PROTOCOL_VERSION = 2;
private static final long STATION_ID = 123456L;
private static final int LIFETIME = 10;
private static final int INFO_QUALITY = 7;

private DenmV220Factory() {
// Factory class
}

static DenmEnvelope220 createTestDenmEnvelope(
String sourceUuid,
HazardType hazardType,
LatLng position,
StationType stationType) {
return DenmEnvelope220.builder()
.sourceUuid(sourceUuid)
.timestamp(TrueTime.getAccurateTime())
.message(DenmMessage220.builder()
.protocolVersion(PROTOCOL_VERSION)
.stationId(STATION_ID)
.managementContainer(ManagementContainer.builder()
.actionId(new ActionId(
STATION_ID,
DenmHelper.getNextSequenceNumber()))
.detectionTime(TrueTime.getAccurateETSITime())
.referenceTime(TrueTime.getAccurateETSITime())
.eventPosition(ReferencePosition.builder()
.latitude(EtsiConverter.latitudeEtsi(position.getLatitude()))
.longitude(EtsiConverter.longitudeEtsi(position.getLongitude()))
.positionConfidenceEllipse(new PositionConfidenceEllipse(
4095, 4095, 3601))
.altitude(new Altitude(
0, 15))
.build())
.validityDuration(LIFETIME)
.stationType(stationType.value)
.build())
.situationContainer(SituationContainer.builder()
.informationQuality(INFO_QUALITY)
.eventType(new CauseCode(
hazardType.getCause(),
hazardType.getSubcause()))
.build())
.build())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.orange.iot3mobility.IoT3Mobility;
import com.orange.iot3mobility.IoT3MobilityCallback;
import com.orange.iot3mobility.Utils;
import com.orange.iot3mobility.messages.StationType;
import com.orange.iot3mobility.messages.cam.core.CamCodec;
import com.orange.iot3mobility.messages.cam.core.CamVersion;
import com.orange.iot3mobility.messages.cam.v113.model.CamEnvelope113;
Expand All @@ -14,9 +15,11 @@
import com.orange.iot3mobility.messages.cpm.core.CpmVersion;
import com.orange.iot3mobility.messages.cpm.v121.model.CpmEnvelope121;
import com.orange.iot3mobility.messages.cpm.v211.model.CpmEnvelope211;
import com.orange.iot3mobility.messages.denm.core.DenmCodec;
import com.orange.iot3mobility.messages.denm.core.DenmVersion;
import com.orange.iot3mobility.messages.denm.v113.model.DenmEnvelope113;
import com.orange.iot3mobility.messages.denm.v220.model.DenmEnvelope220;
import com.orange.iot3mobility.roadobjects.HazardType;
import com.orange.iot3mobility.its.StationType;
import com.orange.iot3mobility.its.json.denm.DENM;
import com.orange.iot3mobility.managers.IoT3RoadHazardCallback;
import com.orange.iot3mobility.managers.IoT3RoadSensorCallback;
import com.orange.iot3mobility.managers.IoT3RoadUserCallback;
Expand All @@ -26,7 +29,6 @@
import com.orange.iot3mobility.roadobjects.RoadUser;
import com.orange.iot3mobility.roadobjects.SensorObject;

import java.io.IOException;
import java.net.URI;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
Expand Down Expand Up @@ -112,8 +114,14 @@ public void roadHazardExpired(RoadHazard roadHazard) {
}

@Override
public void denmArrived(DENM denm) {
System.out.println("DENM received: " + denm.getJsonDENM());
public void denmArrived(DenmCodec.DenmFrame<?> denmFrame) {
if(denmFrame.version().equals(DenmVersion.V1_1_3)) {
DenmEnvelope113 denmEnvelope113 = (DenmEnvelope113) denmFrame.envelope();
System.out.println("Raw DENM v1.1.3: " + denmEnvelope113);
} else if(denmFrame.version().equals(DenmVersion.V2_2_0)) {
DenmEnvelope220 denmEnvelope220 = (DenmEnvelope220) denmFrame.envelope();
System.out.println("Raw DENM v2.2.0: " + denmEnvelope220);
}
}
});

Expand Down Expand Up @@ -221,22 +229,42 @@ private static void setRegionOfInterest(LatLng roiPosition) {
private static synchronized void startSendingMessages() {
ScheduledExecutorService messageScheduler = Executors.newScheduledThreadPool(1);
messageScheduler.scheduleWithFixedDelay(() -> sendTestCam(CamVersion.V1_1_3), 1, 1, TimeUnit.SECONDS);
messageScheduler.scheduleWithFixedDelay(Iot3MobilityBootstrapExample::sendTestDenm, 1, 10, TimeUnit.SECONDS);
messageScheduler.scheduleWithFixedDelay(() -> sendTestDenm(DenmVersion.V1_1_3), 1, 5, TimeUnit.SECONDS);
messageScheduler.scheduleWithFixedDelay(() -> sendTestCpm(CpmVersion.V1_2_1), 1, 1, TimeUnit.SECONDS);
}

private static void sendTestCam(CamVersion camVersion) {
LatLng position = new LatLng(48.625218, 2.243448); // center point of UTAC TEQMO
try {
ioT3Mobility.sendPosition(StationType.PASSENGER_CAR, position, 0, 0, 0, 0, 0, camVersion);
} catch (IOException e) {
} catch (Exception e) {
System.out.println("CAM ERROR: " + e);
}
}

private static void sendTestDenm() {
private static void sendTestDenm(DenmVersion denmVersion) {
LatLng position = new LatLng(48.626059, 2.247904); // planar area of UTAC TEQMO
ioT3Mobility.sendHazard(HazardType.ACCIDENT_NO_SUBCAUSE, position, 10, 7, StationType.PASSENGER_CAR);
HazardType hazardType = HazardType.ACCIDENT_NO_SUBCAUSE;
StationType stationType = StationType.PASSENGER_CAR;
try {
if(denmVersion == DenmVersion.V1_1_3) {
DenmEnvelope113 denmEnvelope113 = DenmV113Factory.createTestDenmEnvelope(
EXAMPLE_UUID,
hazardType,
position,
stationType);
ioT3Mobility.sendDenm(denmEnvelope113);
} else if(denmVersion == DenmVersion.V2_2_0) {
DenmEnvelope220 denmEnvelope220 = DenmV220Factory.createTestDenmEnvelope(
EXAMPLE_UUID,
hazardType,
position,
stationType);
ioT3Mobility.sendDenm(denmEnvelope220);
}
} catch (Exception e) {
System.out.println("DENM ERROR: " + e);
}
}

private static void sendTestCpm(CpmVersion cpmVersion) {
Expand Down
Loading
Loading