Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
2ac690f
java/iot3mobility: prepare base for CPM v1.2.1 refactoring and new CP…
mathieu1fb Mar 10, 2026
60eec32
java/iot3mobility: add all CPM v2.1.1 classes
mathieu1fb Mar 11, 2026
3ac123d
java/iot3mobility: add all CPM v1.2.1 classes
mathieu1fb Mar 12, 2026
0da9ddd
java/iot3mobility: add cpm-related methods to EtsiConverter
mathieu1fb Mar 12, 2026
bbbf374
java/iot3mobility: adapt IoT3Mobility classes to new CPM v1.2.1 and v…
mathieu1fb Mar 13, 2026
783b2da
java/iot3examples: adapt example classes to CPM v1.2.1 and v2.1.1
mathieu1fb Mar 13, 2026
cd19d9b
java/iot3mobility: add some extra builders in CPM v1.2.1 classes
mathieu1fb Mar 16, 2026
d53064a
java/iot3mobility: delete legacy CPM implementation
mathieu1fb Mar 16, 2026
c173187
java/iot3examples: replace legacy CPM implementation by CPM v1.2.1 ex…
mathieu1fb Mar 16, 2026
532c5d2
java/iot3mobility: optimize CPM v1.2.1 PerceivedObject and PerceivedO…
mathieu1fb Mar 17, 2026
f4c4c59
java/iot3examples: adapt to optimized CPM v1.2.1 POs builders
mathieu1fb Mar 17, 2026
12d5656
java/iot3mobility: add more builders to CPM v1.2.1 and improve Javadoc
mathieu1fb Mar 17, 2026
f7eea46
java/iot3mobility: add missing copyright to CPM v1.2.1 model classes
mathieu1fb Mar 19, 2026
ee05342
java/iot3mobility: improve CPM v2.1.1 Javadoc
mathieu1fb Mar 20, 2026
2be1173
java/iot3mobility: add copyright to CPM v2.1.1 model classes
mathieu1fb Mar 20, 2026
08d6efe
java/iot3mobility: add CPM v2.1.1 compatibility to RoadSensor class
mathieu1fb Mar 20, 2026
fc88ca3
java: add Java SDK support for CPM v2.1.1 in the README
mathieu1fb Mar 20, 2026
3b167bf
java/iot3examples: add CPM v2.1.1 to examples
mathieu1fb Mar 23, 2026
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ they are using the following versions:
|:-----------------:|:-----------------------------------------------------------------------------------:|:---------------------------------------------------------:|:-----------------------------------------------------------------------------------:|:-------------------------------------------:|
| **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) | [1.2.1](schema/cpm/cpm_schema_1-2-1.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** | | | | |
Expand Down
131 changes: 131 additions & 0 deletions java/iot3/examples/src/main/java/com/orange/CpmV121Factory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package com.orange;

import com.orange.iot3mobility.TrueTime;
import com.orange.iot3mobility.messages.EtsiConverter;
import com.orange.iot3mobility.messages.cpm.v121.model.CpmEnvelope121;
import com.orange.iot3mobility.messages.cpm.v121.model.CpmMessage121;
import com.orange.iot3mobility.messages.cpm.v121.model.Origin;
import com.orange.iot3mobility.messages.cpm.v121.model.defs.AreaCircular;
import com.orange.iot3mobility.messages.cpm.v121.model.defs.Offset;
import com.orange.iot3mobility.messages.cpm.v121.model.managementcontainer.ManagementConfidence;
import com.orange.iot3mobility.messages.cpm.v121.model.managementcontainer.ManagementContainer;
import com.orange.iot3mobility.messages.cpm.v121.model.managementcontainer.ReferencePosition;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.ObjectClass;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.ObjectClassVru;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.ObjectClassification;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.PerceivedObject;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.PerceivedObjectConfidence;
import com.orange.iot3mobility.messages.cpm.v121.model.perceivedobjectcontainer.PerceivedObjectContainer;
import com.orange.iot3mobility.messages.cpm.v121.model.sensorinformationcontainer.DetectionArea;
import com.orange.iot3mobility.messages.cpm.v121.model.sensorinformationcontainer.SensorInformation;
import com.orange.iot3mobility.messages.cpm.v121.model.sensorinformationcontainer.SensorInformationContainer;
import com.orange.iot3mobility.messages.cpm.v121.model.stationdatacontainer.OriginatingRsuContainer;
import com.orange.iot3mobility.messages.cpm.v121.model.stationdatacontainer.StationDataContainer;
import com.orange.iot3mobility.quadkey.LatLng;

import java.util.List;

final class CpmV121Factory {
private static final int PROTOCOL_VERSION = 2;
private static final long STATION_ID = 123456L;
private static final int SENSOR_ID = 123;
private static final int MAP_REGION = 123;
private static final int MAP_INTERSECTION_ID = 123;
private static final int MAP_ROAD_SEGMENT_ID = 123;

private CpmV121Factory() {
// Factory class
}

static CpmEnvelope121 createTestCpmEnvelope(
LatLng position,
String sourceUuid,
int pedestrianX,
int pedestrianY,
int bicycleX,
int bicycleY) {
PerceivedObject pedestrianPo = PerceivedObject.builder()
.objectId(15)
.timeOfMeasurement(0)
.objectAge(1500)
.distance(pedestrianX, pedestrianY)
.speed(0, 0)
.planarObjectDimension(10, 10)
.verticalObjectDimension(20)
.classification(List.of(new ObjectClassification(
new ObjectClass(null,
new ObjectClassVru(1, null, null, null),
null,
null),
100)))
.sensorIdList(List.of(SENSOR_ID))
.confidence(
PerceivedObjectConfidence.builder()
.object(15)
.distance(4095, 4095)
.speed(0, 0)
.build())
.build();

PerceivedObject bicyclePo = PerceivedObject.builder()
.objectId(34)
.timeOfMeasurement(0)
.objectAge(1500)
.distance(bicycleX, bicycleY)
.speed(0, 0)
.planarObjectDimension(20, 20)
.verticalObjectDimension(15)
.classification(List.of(new ObjectClassification(
new ObjectClass(null,
new ObjectClassVru(null, 1, null, null),
null,
null),
100)))
.sensorIdList(List.of(SENSOR_ID))
.confidence(
PerceivedObjectConfidence.builder()
.object(15)
.distance(4095, 4095)
.speed(0, 0)
.build())
.build();

return CpmEnvelope121.builder()
.origin(Origin.SELF.value)
.sourceUuid(sourceUuid)
.timestamp(TrueTime.getAccurateTime())
.message(CpmMessage121.builder()
.protocolVersion(PROTOCOL_VERSION)
.stationId(STATION_ID)
.generationDeltaTime(EtsiConverter.generationDeltaTimeEtsi(TrueTime.getAccurateETSITime()))
.managementContainer(ManagementContainer.builder()
.stationType(com.orange.iot3mobility.messages.StationType.ROAD_SIDE_UNIT.value)
.referencePosition(new ReferencePosition(
EtsiConverter.latitudeEtsi(position.getLatitude()),
EtsiConverter.longitudeEtsi(position.getLongitude()),
0))
.confidence(new ManagementConfidence(
new com.orange.iot3mobility.messages.cpm.v121.model.managementcontainer
.PositionConfidenceEllipse(4095, 4095, 3601),
15))
.build())
.stationDataContainer(StationDataContainer.builder()
.originatingRsuContainer(new OriginatingRsuContainer(
MAP_REGION,
MAP_INTERSECTION_ID,
MAP_ROAD_SEGMENT_ID))
.build())
.sensorInformationContainer(new SensorInformationContainer(
List.of(new SensorInformation(
SENSOR_ID,
4,
DetectionArea.builder()
.stationarySensorCircular(new AreaCircular(
new Offset(0, 0, 0), 200))
.build()))))
.perceivedObjectContainer(new PerceivedObjectContainer(List.of(pedestrianPo, bicyclePo)))
.build())
.build();
}
}

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

import com.orange.iot3mobility.TrueTime;
import com.orange.iot3mobility.messages.EtsiConverter;
import com.orange.iot3mobility.messages.cpm.v211.model.CpmEnvelope211;
import com.orange.iot3mobility.messages.cpm.v211.model.CpmMessage211;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.Altitude;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.CartesianCoordinateWithConfidence;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.CartesianPosition3d;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.CartesianPosition3dWithConfidence;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.Circular;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.MapReference;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.PositionConfidenceEllipse;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.ReferencePosition;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.RoadSegment;
import com.orange.iot3mobility.messages.cpm.v211.model.defs.Shape;
import com.orange.iot3mobility.messages.cpm.v211.model.managementcontainer.ManagementContainer;
import com.orange.iot3mobility.messages.cpm.v211.model.originatingrsucontainer.OriginatingRsuContainer;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.ObjectClass;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.ObjectClassVru;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.ObjectClassification;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.PerceivedObject;
import com.orange.iot3mobility.messages.cpm.v211.model.perceivedobjectcontainer.PerceivedObjectContainer;
import com.orange.iot3mobility.messages.cpm.v211.model.sensorinformationcontainer.SensorInformation;
import com.orange.iot3mobility.messages.cpm.v211.model.sensorinformationcontainer.SensorInformationContainer;
import com.orange.iot3mobility.quadkey.LatLng;

import java.util.List;

final class CpmV211Factory {
private static final int PROTOCOL_VERSION = 2;
private static final long STATION_ID = 123456L;
private static final int SENSOR_ID = 123;
private static final int MAP_REGION = 123;
private static final int MAP_ROAD_SEGMENT_ID = 123;

private CpmV211Factory() {
// Factory class
}

static CpmEnvelope211 createTestCpmEnvelope(
LatLng position,
String sourceUuid,
int pedestrianX,
int pedestrianY,
int bicycleX,
int bicycleY) {
PerceivedObject pedestrianPo = PerceivedObject.builder()
.objectId(15)
.measurementDeltaTime(0)
.objectAge(1500)
.position(new CartesianPosition3dWithConfidence(
new CartesianCoordinateWithConfidence(pedestrianX, 100),
new CartesianCoordinateWithConfidence(pedestrianY, 100),
null))
.classification(List.of(new ObjectClassification(
ObjectClass.vru(ObjectClassVru.pedestrian(1)),
100)))
.sensorIdList(List.of(SENSOR_ID))
.build();

PerceivedObject bicyclePo = PerceivedObject.builder()
.objectId(34)
.measurementDeltaTime(0)
.objectAge(1500)
.position(new CartesianPosition3dWithConfidence(
new CartesianCoordinateWithConfidence(bicycleX, 100),
new CartesianCoordinateWithConfidence(bicycleY, 100),
null))
.classification(List.of(new ObjectClassification(
ObjectClass.vru(ObjectClassVru.bicyclistAndLightVruVehicle(1)),
100)))
.sensorIdList(List.of(SENSOR_ID))
.build();

return CpmEnvelope211.builder()
.sourceUuid(sourceUuid)
.timestamp(TrueTime.getAccurateTime())
.message(CpmMessage211.builder()
.protocolVersion(PROTOCOL_VERSION)
.stationId(STATION_ID)
.managementContainer(ManagementContainer.builder()
.referenceTime(TrueTime.getAccurateETSITime())
.referencePosition(new ReferencePosition(
EtsiConverter.latitudeEtsi(position.getLatitude()),
EtsiConverter.longitudeEtsi(position.getLongitude()),
new PositionConfidenceEllipse(4095, 4095, 3601),
new Altitude(0, 15)))
.build())
.originatingRsuContainer(new OriginatingRsuContainer(List.of(
MapReference.roadSegment(new RoadSegment(MAP_ROAD_SEGMENT_ID, MAP_REGION)))))
.sensorInformationContainer(new SensorInformationContainer(
List.of(new SensorInformation(
SENSOR_ID,
4,
Shape.circular(new Circular(
200,
new CartesianPosition3d(0, 0, null),
null)),
100,
true))))
.perceivedObjectContainer(new PerceivedObjectContainer(List.of(pedestrianPo, bicyclePo)))
.build())
.build();
}
}

Loading
Loading