Program Listing for File SimOneIOStruct.h

Return to documentation for file (api\Cpp_API_Reference\SimOneIOStruct.h)

#pragma once
#include <vector>
#include <map>
#ifndef WITHOUT_HDMAP
    #include "SSD/SimVector.h"
#endif
#include <time.h>
#pragma pack(push)
#pragma pack(1)

struct SimOne_Data
{
    long long timestamp = 0;
    int frame = 0;
    int version = 0;
};
struct SimOne_Data_Vec3f
{
    float x;
    float y;
    float z;
};
#define SOSM_CASE_START_EVENT_LABEL "SOSM_CASE_EVENT_START"
#define SOSM_CASE_STOP_EVENT_LABEL "SOSM_CASE_EVENT_STOP"

#define SOSM_MAP_LABEL "SOSM_MAP"
#define SOSM_MAP_OD_LENGT 128
#define SOSM_MAP_ODURL_LENGT 256
#define SOSM_MAP_ODMD5_LENGT 128

#define SOSM_CASENAME_LENGTH 256
#define SOSM_CASEID_LENGT 256
#define SOSM_TASKID_LENGT 256

#define MAX_PREDICTION_TRAJECTORY_SIZE 20
struct SimOne_Data_Map
{
    char openDrive[SOSM_MAP_OD_LENGT];
    char openDriveUrl[SOSM_MAP_ODURL_LENGT];
    char opendriveMd5[SOSM_MAP_ODMD5_LENGT];
};
#define SOSM_WAYPOINTS_LABEL "SOSM_WAYPOINTS"
#define SOSM_WAYPOINTS_SIZE_MAX 100
#define MAX_MAINVEHICLE_NAME_LEN 64
struct SimOne_Data_WayPoints_Entry
{
    int index;
    float posX;
    float posY;

    float heading_x;
    float heading_y;
    float heading_z;
    float heading_w;
};

struct SimOne_Data_WayPoints:public SimOne_Data
{
    char mainVehicleId[MAX_MAINVEHICLE_NAME_LEN];
    int wayPointsSize;
    SimOne_Data_WayPoints_Entry wayPoints[SOSM_WAYPOINTS_SIZE_MAX];
};
#define SOSM_POSE_CONTROL_PREFIX "SOSM_POSE_CONTROL_"
struct SimOne_Data_Pose_Control : public SimOne_Data
{
    float posX;
    float posY;
    float posZ;
    float oriX;
    float oriY;
    float oriZ;
    bool autoZ = false;
};

#define SOSM_CONTROL_PREFIX "SOSM_CONTROL_"

#define SOSM_DRIVER_CONTROL_PREFIX "SOSM_DRIVER_CONTROL_"

enum ESimOne_Gear_Mode
{
    ESimOne_Gear_Mode_Neutral = 0,
    ESimOne_Gear_Mode_Drive = 1,
    ESimOne_Gear_Mode_Reverse = 2,
    ESimOne_Gear_Mode_Parking = 3,

    ESimOne_Gear_Mode_1 = 4,
    ESimOne_Gear_Mode_2 = 5,
    ESimOne_Gear_Mode_3 = 6,
    ESimOne_Gear_Mode_4 = 7,
    ESimOne_Gear_Mode_5 = 8,
    ESimOne_Gear_Mode_6 = 9,
    ESimOne_Gear_Mode_7 = 10,
    ESimOne_Gear_Mode_8 = 11
};

enum ESimOne_Throttle_Mode
{
    ESimOne_Throttle_Mode_Percent = 0,
    ESimOne_Throttle_Mode_Torque = 1,
    ESimOne_Throttle_Mode_Speed = 2,
    ESimOne_Throttle_Mode_Accel = 3,
    ESimOne_Throttle_Mode_EngineAV = 4,
    ESimOne_Throttle_Mode_WheelTorque = 5
};

enum ESimOne_Brake_Mode
{
    ESimOne_Brake_Mode_Percent = 0,
    ESimOne_Brake_Mode_MasterCylinderPressure = 1,
    ESimOne_Brake_Mode_PedalForce = 2,
    ESimOne_Brake_Mode_WheelCylinderPressure = 3,
    ESimOne_Brake_Mode_WheelTorque = 4
};
enum ESimOne_Steering_Mode
{
    ESimOne_Steering_Mode_Percent = 0,
    ESimOne_Steering_Mode_SteeringWheelAngle = 1,
    ESimOne_Steering_Mode_Torque = 2,
    ESimOne_Steering_Mode_AngularSpeed = 3,
    ESimOne_Steering_Mode_WheelAngle = 4,
    ESimOne_Steering_Mode_WheelAnglarSpeed = 5,
};
enum ESimOne_LogLevel_Type
{
    ESimOne_LogLevel_Type_Debug = 0,
    ESimOne_LogLevel_Type_Information = 1,
    ESimOne_LogLevel_Type_Warning = 2,
    ESimOne_LogLevel_Type_Error = 3,
    ESimOne_LogLevel_Type_Fatal = 4
};

#define SO_MAX_WHEEL_NUM  20
struct SimOne_Data_Control : public SimOne_Data
{
    ESimOne_Throttle_Mode throttleMode = ESimOne_Throttle_Mode_Percent;
    float throttle;
    ESimOne_Brake_Mode brakeMode = ESimOne_Brake_Mode_Percent;
    float brake;
    ESimOne_Steering_Mode steeringMode = ESimOne_Steering_Mode_Percent;
    float steering;
    bool handbrake = false;
    bool isManualGear = false;
    ESimOne_Gear_Mode  gear;

    float clutch;

    float throttle_input_data[SO_MAX_WHEEL_NUM];
    float brake_input_data[SO_MAX_WHEEL_NUM];
    float steering_input_data[SO_MAX_WHEEL_NUM];
};

enum SimOne_Data_Drive_Mode
{
    ESimOne_Drive_Mode_API = 0,
    ESimOne_Drive_Mode_Driver = 1
};

struct SimOne_Trajectory_Point
{
    float posx;
    float posy;
    float speed;
    float accel;
    float theta;
    float kappa;
    float relative_time;
    float s;
};

#define SO_MAX_TRAJECTORY_POINT_NUM 500
struct SimOne_Data_Control_Trajectory : public SimOne_Data
{
    int point_num;
    SimOne_Trajectory_Point points[SO_MAX_TRAJECTORY_POINT_NUM];
    bool isReverse;
};

struct SimOne_Data_ESP_Control : public SimOne_Data
{
    int stopDistance;
    float velocityLimit;
    float steering;
    float steerTorque;
    float accel;
    float accelUpperLimit;
    float accelLowerLimit;
    float accelUpperComfLimit;
    float accelLowerComfLimit;
    bool standStill;
    bool driveOff;
    int brakeMode;
    int vlcShutdown;
    int gearMode;
};

#define SOSM_VEHICLE_EVENT_PREFIX "SOSM_VEHICLE_EVENT_"

enum ESimone_Vehicle_EventInfo_Type
{
    ESimOne_VehicleEventInfo_V2XWarningInfoType_FCW = 0,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_ICW = 1,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_LTA = 2,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_BSW_LCW = 3,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_DNPW = 4,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_EBW = 5,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_AVW = 6,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_CLW = 7,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_HLW = 8,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_SLW = 9,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_RLVW = 10,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_VRUCW = 11,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_GLOSA = 12,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_IVS = 13,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_TJW = 14,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_EVW = 15,
    ESimOne_VehicleEventInfo_V2XWarningInfoType_Unknown = 16
};

#define SO_MAX_TRAFFIC_EVENT_NUM 256
struct TrafficEvent_DetailInfo {
    int hostVehicle;
    double time;
    char actualValue[SO_MAX_TRAFFIC_EVENT_NUM];
    char expectOp[SO_MAX_TRAFFIC_EVENT_NUM];
    char expectValue1[SO_MAX_TRAFFIC_EVENT_NUM];
    char expectValue2[SO_MAX_TRAFFIC_EVENT_NUM];
    char judgeId[SO_MAX_TRAFFIC_EVENT_NUM];
    char judgeType[SO_MAX_TRAFFIC_EVENT_NUM];
    char requireProperty[SO_MAX_TRAFFIC_EVENT_NUM];
    char taskId[SO_MAX_TRAFFIC_EVENT_NUM];
    char valueType[SO_MAX_TRAFFIC_EVENT_NUM];
    char version[SO_MAX_TRAFFIC_EVENT_NUM];
};

#define SO_MAX_WARNING_EVENT_NUM 1024
struct SimOne_Data_Vehicle_EventInfo : public SimOne_Data
{
    ESimone_Vehicle_EventInfo_Type  type;
    char warningInfo[SO_MAX_WARNING_EVENT_NUM];
};

#define SOSM_TRAJECTORY_PREFIX "SOSM_TRAJECTORY_"
#define SOSM_TRAJECTORY_SIZE_MAX 100

struct SimOne_Data_Trajectory_Entry
{
    float posX;
    float posY;
    float vel;
};

struct SimOne_Data_Trajectory : public SimOne_Data
{
    int trajectorySize;
    SimOne_Data_Trajectory_Entry trajectory[SOSM_TRAJECTORY_SIZE_MAX];
};

#define SOSM_POSE_PREFIX "SOSM_POSE_"
#define SOSM_EXTRA_STATES_SIZE_MAX 256
struct SimOne_Data_Gps : public SimOne_Data
{
    float posX;
    float posY;
    float posZ;
    float oriX;
    float oriY;
    float oriZ;
    float velX;
    float velY;
    float velZ;
    float throttle;
    float brake;
    float steering;
    int gear;
    float accelX;
    float accelY;
    float accelZ;
    float angVelX;
    float angVelY;
    float angVelZ;
    float wheelSpeedFL;
    float wheelSpeedFR;
    float wheelSpeedRL;
    float wheelSpeedRR;
    float engineRpm;
    float odometer;
    int extraStateSize;
    float extraStates[SOSM_EXTRA_STATES_SIZE_MAX];
};

enum ESimOne_Data_Vehicle_State
{
    ESimOne_Data_Vehicle_State_SO_M_SW,
    ESimOne_Data_Vehicle_State_S0_Vx_SM,
    ESimOne_Data_Vehicle_State_S0_Vy_SM,
    ESimOne_Data_Vehicle_State_S0_Vz_SM,
    ESimOne_Data_Vehicle_State_SO_M_ENGOUT,
    ESimOne_Data_Vehicle_State_SO_My_DR_L1,
    ESimOne_Data_Vehicle_State_SO_My_DR_R1,
    ESimOne_Data_Vehicle_State_SO_My_DR_L2,
    ESimOne_Data_Vehicle_State_SO_My_DR_R2,
    ESimOne_Data_Vehicle_State_SO_My_DR_L3,
    ESimOne_Data_Vehicle_State_SO_My_DR_R3,

    ESimOne_Data_Vehicle_State_SO_F_Pedal,
    ESimOne_Data_Vehicle_State_SO_Pbk_Con,
    ESimOne_Data_Vehicle_State_SO_My_Bk_L3,
    ESimOne_Data_Vehicle_State_SO_My_Bk_R3,

    ESimOne_Data_Vehicle_State_SO_ClutchTr,

    ESimOne_Data_Vehicle_State_SO_X_L1,
    ESimOne_Data_Vehicle_State_SO_Y_L1,
    ESimOne_Data_Vehicle_State_SO_Z_L1,
    ESimOne_Data_Vehicle_State_SO_X_L2,
    ESimOne_Data_Vehicle_State_SO_Y_L2,
    ESimOne_Data_Vehicle_State_SO_Z_L2,
    ESimOne_Data_Vehicle_State_SO_X_R1,
    ESimOne_Data_Vehicle_State_SO_Y_R1,
    ESimOne_Data_Vehicle_State_SO_Z_R1,
    ESimOne_Data_Vehicle_State_SO_X_R2,
    ESimOne_Data_Vehicle_State_SO_Y_R2,
    ESimOne_Data_Vehicle_State_SO_Z_R2,
    ESimOne_Data_Vehicle_State_SO_X_L3,
    ESimOne_Data_Vehicle_State_SO_Y_L3,
    ESimOne_Data_Vehicle_State_SO_Z_L3,
    ESimOne_Data_Vehicle_State_SO_X_R3,
    ESimOne_Data_Vehicle_State_SO_Y_R3,
    ESimOne_Data_Vehicle_State_SO_Z_R3,

    ESimOne_Data_Vehicle_State_SO_Xctc_L1,
    ESimOne_Data_Vehicle_State_SO_Yctc_L1,
    ESimOne_Data_Vehicle_State_SO_Zctc_L1,
    ESimOne_Data_Vehicle_State_SO_Xctc_L2,
    ESimOne_Data_Vehicle_State_SO_Yctc_L2,
    ESimOne_Data_Vehicle_State_SO_Zctc_L2,
    ESimOne_Data_Vehicle_State_SO_Xctc_R1,
    ESimOne_Data_Vehicle_State_SO_Yctc_R1,
    ESimOne_Data_Vehicle_State_SO_Zctc_R1,
    ESimOne_Data_Vehicle_State_SO_Xctc_R2,
    ESimOne_Data_Vehicle_State_SO_Yctc_R2,
    ESimOne_Data_Vehicle_State_SO_Zctc_R2,

    ESimOne_Data_Vehicle_State_SO_AVy_L1,
    ESimOne_Data_Vehicle_State_SO_Kappa_L1,
    ESimOne_Data_Vehicle_State_SO_Alpha_L1,
    ESimOne_Data_Vehicle_State_SO_Fz_L1,
    ESimOne_Data_Vehicle_State_SO_My_WC_L1,
    ESimOne_Data_Vehicle_State_SO_Fx_L1,
    ESimOne_Data_Vehicle_State_SO_Fy_L1,
    ESimOne_Data_Vehicle_State_SO_Jnc_L1,
    ESimOne_Data_Vehicle_State_SO_JncR_L1,
    ESimOne_Data_Vehicle_State_SO_Mz_L1,

    ESimOne_Data_Vehicle_State_SO_AVy_L2,
    ESimOne_Data_Vehicle_State_SO_Kappa_L2,
    ESimOne_Data_Vehicle_State_SO_Alpha_L2,
    ESimOne_Data_Vehicle_State_SO_Fz_L2,
    ESimOne_Data_Vehicle_State_SO_My_WC_L2,
    ESimOne_Data_Vehicle_State_SO_Fx_L2,
    ESimOne_Data_Vehicle_State_SO_Fy_L2,
    ESimOne_Data_Vehicle_State_SO_Jnc_L2,
    ESimOne_Data_Vehicle_State_SO_JncR_L2,
    ESimOne_Data_Vehicle_State_SO_Mz_L2,

    ESimOne_Data_Vehicle_State_SO_AVy_R1,
    ESimOne_Data_Vehicle_State_SO_Kappa_R1,
    ESimOne_Data_Vehicle_State_SO_Alpha_R1,
    ESimOne_Data_Vehicle_State_SO_Fz_R1,
    ESimOne_Data_Vehicle_State_SO_My_WC_R1,
    ESimOne_Data_Vehicle_State_SO_Fx_R1,
    ESimOne_Data_Vehicle_State_SO_Fy_R1,
    ESimOne_Data_Vehicle_State_SO_Jnc_R1,
    ESimOne_Data_Vehicle_State_SO_JncR_R1,
    ESimOne_Data_Vehicle_State_SO_Mz_R1,

    ESimOne_Data_Vehicle_State_SO_AVy_R2,
    ESimOne_Data_Vehicle_State_SO_Kappa_R2,
    ESimOne_Data_Vehicle_State_SO_Alpha_R2,
    ESimOne_Data_Vehicle_State_SO_Fz_R2,
    ESimOne_Data_Vehicle_State_SO_My_WC_R2,
    ESimOne_Data_Vehicle_State_SO_Fx_R2,
    ESimOne_Data_Vehicle_State_SO_Fy_R2,
    ESimOne_Data_Vehicle_State_SO_Jnc_R2,
    ESimOne_Data_Vehicle_State_SO_JncR_R2,
    ESimOne_Data_Vehicle_State_SO_Mz_R2,

    ESimOne_Data_Vehicle_State_SO_AVy_L3,
    ESimOne_Data_Vehicle_State_SO_Kappa_L3,
    ESimOne_Data_Vehicle_State_SO_Alpha_L3,
    ESimOne_Data_Vehicle_State_SO_Fz_L3,
    ESimOne_Data_Vehicle_State_SO_My_WC_L3,
    ESimOne_Data_Vehicle_State_SO_Fx_L3,
    ESimOne_Data_Vehicle_State_SO_Fy_L3,
    ESimOne_Data_Vehicle_State_SO_Jnc_L3,
    ESimOne_Data_Vehicle_State_SO_JncR_L3,
    ESimOne_Data_Vehicle_State_SO_Mz_L3,

    ESimOne_Data_Vehicle_State_SO_AVy_R3,
    ESimOne_Data_Vehicle_State_SO_Kappa_R3,
    ESimOne_Data_Vehicle_State_SO_Alpha_R3,
    ESimOne_Data_Vehicle_State_SO_Fz_R3,
    ESimOne_Data_Vehicle_State_SO_My_WC_R3,
    ESimOne_Data_Vehicle_State_SO_Fx_R3,
    ESimOne_Data_Vehicle_State_SO_Fy_R3,
    ESimOne_Data_Vehicle_State_SO_Jnc_R3,
    ESimOne_Data_Vehicle_State_SO_JncR_R3,
    ESimOne_Data_Vehicle_State_SO_Mz_R3,

    ESimOne_Data_Vehicle_State_SO_Steer_L3,
    ESimOne_Data_Vehicle_State_SO_Steer_R3,

    ESimOne_Data_Vehicle_State_SO_Steer_SW,
    ESimOne_Data_Vehicle_State_SO_TimePassed
};

#define SOSM_VEHICLE_EXTRA_STATE_MAX_SIZE 600
struct SimOne_Data_Vehicle_Extra
{
    int dataSize;
    float extra_states[SOSM_VEHICLE_EXTRA_STATE_MAX_SIZE];
};

#define SOSM_OBSTACLE_PREFIX "SOSM_OBSTACLE_"
#define SOSM_OBSTACLE_SIZE_MAX 255

enum ESimOne_Obstacle_Type
{
    ESimOne_Obstacle_Type_Unknown = 0,
    ESimOne_Obstacle_Type_Pedestrian = 4,
    ESimOne_Obstacle_Type_Pole = 5,
    ESimOne_Obstacle_Type_Car = 6,
    ESimOne_Obstacle_Type_Static = 7,
    ESimOne_Obstacle_Type_Bicycle = 8,
    ESimOne_Obstacle_Type_Fence = 9,
    ESimOne_Obstacle_Type_RoadMark = 12,
    ESimOne_Obstacle_Type_TrafficSign = 13,
    ESimOne_Obstacle_Type_TrafficLight = 15,
    ESimOne_Obstacle_Type_Rider = 17,
    ESimOne_Obstacle_Type_Truck = 18,
    ESimOne_Obstacle_Type_Bus = 19,
    ESimOne_Obstacle_Type_SpecialVehicle = 20,
    ESimOne_Obstacle_Type_Motorcycle = 21,
    ESimOne_Obstacle_Type_Dynamic = 22,
    ESimOne_Obstacle_Type_GuardRail = 23,
    ESimOne_Obstacle_Type_SpeedLimitSign = 26,
    ESimOne_Obstacle_Type_BicycleStatic = 27,
    ESimOne_Obstacle_Type_RoadObstacle = 29
};

struct Rotation
{
    float yaw;
    float pitch;
    float roll;
};

struct Prediction
{
    uint32_t trajectorySize;
    float trajectoryInterval;
    SimOne_Data_Vec3f trajectory[MAX_PREDICTION_TRAJECTORY_SIZE];
    float speed[MAX_PREDICTION_TRAJECTORY_SIZE];
    Rotation rotation[MAX_PREDICTION_TRAJECTORY_SIZE];
};

struct SimOne_Data_Obstacle_Entry
{
    int id;
    int viewId;
    ESimOne_Obstacle_Type type;
    float theta;
    float posX;
    float posY;
    float posZ;
    float oriX;
    float oriY;
    float oriZ;
    float velX;
    float velY;
    float velZ;
    float length;
    float width;
    float height;
    float accelX;
    float accelY;
    float accelZ;
    Prediction prediction;
};

struct SimOne_Data_Obstacle : public SimOne_Data
{
    int obstacleSize;
    SimOne_Data_Obstacle_Entry obstacle[SOSM_OBSTACLE_SIZE_MAX];
};


struct SimOne_Data_CaseInfo
{
    char caseName[SOSM_CASENAME_LENGTH];
    char caseId[SOSM_CASEID_LENGT];
    char taskId[SOSM_TASKID_LENGT];
};
enum ESimOne_Case_Status
{
    ESimOne_Case_Status_Unknown = 0,
    ESimOne_Case_Status_Stop = 1,
    ESimOne_Case_Status_Running = 2,
    ESimOne_Case_Status_Pause = 3
};

#define SOSM_SIGNAL_LIGHTS_PREFIX "SOSM_SIGNAL_LIGHTS_"
enum ESimOne_Signal_Light
{
    ESimOne_Signal_Light_None = 0,
    ESimOne_Signal_Light_RightBlinker = 1,
    ESimOne_Signal_Light_LeftBlinker = (1 << 1),
    ESimOne_Signal_Light_DoubleFlash = (1 << 2),
    ESimOne_Signal_Light_BrakeLight = (1 << 3),
    ESimOne_Signal_Light_FrontLight = (1 << 4),
    ESimOne_Signal_Light_HighBeam = (1 << 5),
    ESimOne_Signal_Light_BackDrive = (1 << 6)
};
struct SimOne_Data_Signal_Lights : public SimOne_Data
{
    uint32_t signalLights = 0;
};

#define SOSM_ENVIRONMENT "SOSM_ENVIRONMENT"
struct SimOne_Data_Environment
{
    float timeOfDay = 1000;
    float heightAngle = 90;
    float directionalLight = 0.5f;
    float ambientLight = 0.5f;
    float artificialLight = 0.5f;
    float cloudDensity = 0.2f;
    float fogDensity = 0.0f;
    float rainDensity = 0.0f;
    float snowDensity = 0.0f;
    float groundHumidityLevel = 0.1f;
    float groundDirtyLevel = 0.1f;
};


enum ESimOne_Node_Type
{
    ESimOne_Node_Type_Vehicle = 0,
    ESimOne_Node_Type_Camera = 1,
    ESimOne_Node_Type_LiDAR = 2,
    ESimOne_Node_Type_MMWRadar = 3,
    ESimOne_Node_Type_UltrasonicRadar = 4,
    ESimOne_Node_Type_AllUltrasonicRadar = 5,
    ESimOne_Node_Type_GNSSINS = 6,
    ESimOne_Node_Type_PerfectPerception = 7,
    ESimOne_Node_Type_V2X = 8,
    ESimOne_Node_Type_SensorFusion = 9
};

enum ESimOne_Sensor_Data_Type
{
    ESimOne_Sensor_Data_Type_ImageWithGroundTruth = 0,
    ESimOne_Sensor_Data_Type_PointCloudWithGroundTruth = 1,
    ESimOne_Sensor_Data_Type_RadarDetections = 2,
    ESimOne_Sensor_Data_Type_UltrasonicRadar = 3,
    ESimOne_Sensor_Data_Type_ObstacleDetection = 4,
    ESimOne_Sensor_Data_Type_GroundTruth = 5,
    ESimOne_Sensor_Data_Type_V2X = 6,
    ESimOne_Sensor_Data_Type_V2XNFS = 7

};

enum ESimOne_V2X_MessageFrame_PR {
    ESimOne_V2X_MessageFrame_PR_NOTHING,    /* No components present */
    ESimOne_V2X_MessageFrame_PR_bsmFrame,
    ESimOne_V2X_MessageFrame_PR_mapFrame,
    ESimOne_V2X_MessageFrame_PR_rsmFrame,
    ESimOne_V2X_MessageFrame_PR_spatFrame,
    ESimOne_V2X_MessageFrame_PR_rsiFrame,
    ESimOne_V2X_MessageFrame_PR_ipprFrame,
    ESimOne_V2X_MessageFrame_PR_rsvFrame,
    ESimOne_V2X_MessageFrame_PR_bsiFrame
    /* Extensions may appear below */

};


#define SENSOR_IDTYPE_MAX 64
struct SimOne_Data_SensorConfiguration
{
    int id;
    char mainVehicleId[SENSOR_IDTYPE_MAX];
    char sensorId[SENSOR_IDTYPE_MAX];
    char sensorType[SENSOR_IDTYPE_MAX];
    float x;
    float y;
    float z;
    float roll;
    float pitch;
    float yaw;
    int hz;
};

#define SOSM_SENSOR_CONFIGURATION_LABEL "SOSM_SENSOR_CONFIGURATION"
#define SOSM_SENSOR_CONFIGURATION_SIZE_MAX 100
struct SimOne_Data_SensorConfigurations
{
    int dataSize;
    SimOne_Data_SensorConfiguration data[SOSM_SENSOR_CONFIGURATION_SIZE_MAX];
};

#define SOSM_SENSOR_DETECTIONS_PREFIX "SOSM_SENSOR_DETECTIONS_"
#define SOSM_SENSOR_DETECTIONS_OBJECT_SIZE_MAX 256
#define SOSM_SENSOR_LANE_OBJECT_SIZE_MAX 256
#define SOSM_SENSOR_Boundary_OBJECT_SIZE_MAX 250
struct SimOne_Data_SensorDetections_Entry
{
    int id;
    ESimOne_Obstacle_Type type;
    float posX;
    float posY;
    float posZ;
    float oriX;
    float oriY;
    float oriZ;
    float length;
    float width;
    float height;
    float range;
    float velX;
    float velY;
    float velZ;
    float accelX;
    float accelY;
    float accelZ;
    float probability;
    float relativePosX;
    float relativePosY;
    float relativePosZ;
    float relativeRotX;
    float relativeRotY;
    float relativeRotZ;
    float relativeVelX;
    float relativeVelY;
    float relativeVelZ;
    float bbox2dMinX = 0;
    float bbox2dMinY = 0;
    float bbox2dMaxX = 0;
    float bbox2dMaxY = 0;
};

struct SimOne_Data_SensorDetections : public SimOne_Data
{
    int objectSize;
    SimOne_Data_SensorDetections_Entry objects[SOSM_SENSOR_DETECTIONS_OBJECT_SIZE_MAX];
};

struct SimOne_Data_SensorFusionObstacles : public SimOne_Data
{
    int obstacleSize;
    SimOne_Data_SensorDetections_Entry obstacle[SOSM_SENSOR_DETECTIONS_OBJECT_SIZE_MAX];
};

enum ESimOne_Lane_Type {
    ESimOne_Lane_Type_none = 0,
    ESimOne_Lane_Type_driving = 1,
    ESimOne_Lane_Type_stop = 2,
    ESimOne_Lane_Type_shoulder = 3,
    ESimOne_Lane_Type_biking = 4,
    ESimOne_Lane_Type_sidewalk = 5,
    ESimOne_Lane_Type_border = 6,
    ESimOne_Lane_Type_restricted = 7,
    ESimOne_Lane_Type_parking = 8,
    ESimOne_Lane_Type_bidirectional = 9,
    ESimOne_Lane_Type_median = 10,
    ESimOne_Lane_Type_special1 = 11,
    ESimOne_Lane_Type_special2 = 12,
    ESimOne_Lane_Type_special3 = 13,
    ESimOne_Lane_Type_roadWorks = 14,
    ESimOne_Lane_Type_tram = 15,
    ESimOne_Lane_Type_rail = 16,
    ESimOne_Lane_Type_entry = 17,
    ESimOne_Lane_Type_exit = 18,
    ESimOne_Lane_Type_offRamp = 19,
    ESimOne_Lane_Type_onRamp = 20,
    ESimOne_Lane_Type_mwyEntry = 21,
    ESimOne_Lane_Type_mwyExit = 22
};

enum ESimOne_Boundary_Type {
    ESimOne_Boundary_Type_none = 0,
    ESimOne_Boundary_Type_solid = 1,
    ESimOne_Boundary_Type_broken = 2,
    ESimOne_Boundary_Type_solid_solid = 3,
    ESimOne_Boundary_Type_solid_broken = 4,
    ESimOne_Boundary_Type_broken_solid = 5,
    ESimOne_Boundary_Type_broken_broken = 6,
    ESimOne_Boundary_Type_botts_dots = 7,
    ESimOne_Boundary_Type_grass = 8,
    ESimOne_Boundary_Type_curb = 9
};

enum ESimOne_Boundary_Color {
    ESimOne_Boundary_Color_standard = 0,
    ESimOne_Boundary_Color_blue = 1,
    ESimOne_Boundary_Color_green = 2,
    ESimOne_Boundary_Color_red = 3,
    ESimOne_Boundary_Color_white = 4,
    ESimOne_Boundary_Color_yellow = 5
};

struct SimOne_LineCurve_Parameter{
    float C0;
    float C1;
    float C2;
    float C3;
    SimOne_Data_Vec3f firstPoints;
    SimOne_Data_Vec3f endPoints;
    float length = 7;
};

struct SimOne_Data_LaneLineInfo
{
    int lineID;
    ESimOne_Boundary_Type lineType;
    ESimOne_Boundary_Color lineColor;
    float linewidth;
    SimOne_Data_Vec3f linePoints[SOSM_SENSOR_Boundary_OBJECT_SIZE_MAX];
    SimOne_LineCurve_Parameter linecurveParameter;

};
struct SimOne_Data_LaneInfo :public SimOne_Data
{
    int id = 0;
    ESimOne_Lane_Type laneType;
    int laneLeftID = 0;
    int laneRightID = 0;
    int lanePredecessorID[SOSM_SENSOR_LANE_OBJECT_SIZE_MAX];
    int laneSuccessorID[SOSM_SENSOR_LANE_OBJECT_SIZE_MAX];
    SimOne_Data_LaneLineInfo l_Line;
    SimOne_Data_LaneLineInfo c_Line;
    SimOne_Data_LaneLineInfo r_Line;
    SimOne_Data_LaneLineInfo ll_Line;
    SimOne_Data_LaneLineInfo rr_Line;

};


enum ESimOne_Client_Type {
    ESimOne_Client_Type_None = 0,
    ESimOne_Client_Type_Web = 1,
    ESimOne_Client_Type_TrafficProvider = 2,
    ESimOne_Client_Type_VehicleDynamic = 3,
    ESimOne_Client_Type_BridgeIO = 4,
    ESimOne_Client_Type_SimOneDLL = 5,
    ESimOne_Client_Type_Observer = 6,
    ESimOne_Client_Type_Sensor = 7,
    ESimOne_Client_Type_Traffic = 8
};
#define SOSM_IMAGE_PREFIX "SOSM_IMAGE_"
#define SOSM_IMAGE_WIDTH_MAX 3840
#define SOSM_IMAGE_HEIGHT_MAX 2160
#define SOSM_IMAGE_DATA_SIZE_MAX SOSM_IMAGE_WIDTH_MAX*SOSM_IMAGE_HEIGHT_MAX*3
enum ESimOne_Image_Format
{
    ESimOne_Image_Format_RGB = 0
};

struct SimOne_Data_Image : public SimOne_Data
{
    int width;
    int height;
    ESimOne_Image_Format format;
    int imageDataSize;
    char imageData[SOSM_IMAGE_DATA_SIZE_MAX];
};


struct SimOne_Data_Point_XYZI
{
    float x;
    float y;
    float z;
    float intensity;
};

#define SOSM_POINT_CLOUD_PREFIX "SOSM_POINT_CLOUD_"
#define SOSM_POINT_DATA_SIZE_MAX 3686400
struct SimOne_Data_Point_Cloud : public SimOne_Data
{
    int width;
    int height;
    int pointStep;
    int pointCloudDataSize;
    char pointCloudData[SOSM_POINT_DATA_SIZE_MAX];
};

#define SOSM_RADAR_PREFIX "SOSM_RADAR_"
#define SOSM_RADAR_SIZE_MAX 256

struct SimOne_Data_RadarDetection_Entry {
    int id;
    int subId;
    ESimOne_Obstacle_Type type;
    float posX;
    float posY;
    float posZ;
    float velX;
    float velY;
    float velZ;
    float accelX;
    float accelY;
    float accelZ;
    float oriX;
    float oriY;
    float oriZ;
    float length;
    float width;
    float height;
    float range;
    float rangeRate;
    float azimuth;
    float vertical;
    float snrdb;
    float rcsdb;
    float probability;
};

struct SimOne_Data_RadarDetection : public SimOne_Data
{
    int detectNum;
    SimOne_Data_RadarDetection_Entry detections[SOSM_RADAR_SIZE_MAX];
};

#define SOSM_MUCHULTRASONICRADAR_PREFIX "SOSM_MUCHULTRASONICRADAR_"
#define SOSM_OSIULTRASONICRADAR_PREFIX "SOSM_OSIULTRASONICRADAR_"
#define SOSM_ULTRASONICRADAR_SIZE_MAX 100


struct SimOne_Data_UltrasonicRadarDetection_Entry{
    float obstacleRanges = 0;
    float x = 0;
    float y = 0;
    float z = 0;
};
struct SimOne_Data_UltrasonicRadar : public SimOne_Data {
    char sensorId[SENSOR_IDTYPE_MAX];
    int obstacleNum;
    SimOne_Data_UltrasonicRadarDetection_Entry obstacleDetections[SOSM_OBSTACLE_SIZE_MAX];
};

struct SimOne_Data_UltrasonicRadars : public SimOne_Data
{
    int ultrasonicRadarNum;
    SimOne_Data_UltrasonicRadar ultrasonicRadars[SOSM_ULTRASONICRADAR_SIZE_MAX];
};

#ifndef WITHOUT_HDMAP
#define SOSM_V2X_MSGFRAME_SIZE_MAX 20000

struct SimOne_Data_V2XNFS :public SimOne_Data
{
    int V2XMsgFrameSize;
    char MsgFrameData[SOSM_V2X_MSGFRAME_SIZE_MAX];
};
#endif


#define SOSM_PREDICTION_PREFIX "SOSM_PREDICTION_"
struct SimOne_Data_Traffic_Info
{
    int id;
    float x;
    float y;
    float speed;
    float orientation;
};

struct SimOne_Data_Position_Info : public SimOne_Data
{
    float mean_x;
    float mean_y;
    float var_x;
    float var_y;
    float covar_xy;
};

struct SimOne_Data_Prediction : public SimOne_Data
{
    std::map<int, SSD::SimVector<SimOne_Data_Position_Info>> ped_predictions;
    std::map<int, SSD::SimVector<SimOne_Data_Position_Info>> veh_predictions;
    float ped_delta_t;
    float veh_delta_t;
};
#define MAX_MAINVEHICLE_NUM 10
struct SimOne_Data_MainVehicle_Info
{
    int size;
    char id_list[MAX_MAINVEHICLE_NUM][MAX_MAINVEHICLE_NAME_LEN];
    char type_list[MAX_MAINVEHICLE_NUM][MAX_MAINVEHICLE_NAME_LEN];
};

struct SimOne_Data_MainVehicle_Status
{
    char mainVehicleId[MAX_MAINVEHICLE_NAME_LEN];
    int mainVehicleStatus;
};

#define SOSM_TRAFFICLIGHT_PREFIX "SOSM_TRAFFICLIGHT_"
#define SOSM_TRAFFICLIGHT_SIZE_MAX 100

enum ESimOne_TrafficLight_Status
{
    ESimOne_TrafficLight_Status_Invalid = 0,
    ESimOne_TrafficLight_Status_Red = 1,
    ESimOne_TrafficLight_Status_Green = 2,
    ESimOne_TrafficLight_Status_Yellow = 3,
    ESimOne_TrafficLight_Status_RedBlink = 4,
    ESimOne_TrafficLight_Status_GreenBlink = 5,
    ESimOne_TrafficLight_Status_YellowBlink = 6,
    ESimOne_TrafficLight_Status_Black = 7
};

struct SimOne_Data_TrafficLight
{
    bool isMainVehicleNextTrafficLight = false;
    int opendriveLightId = 0;
    int countDown = 0;
    ESimOne_TrafficLight_Status status = ESimOne_TrafficLight_Status_Invalid;
};

struct SimOne_Data_TrafficLights : public SimOne_Data
{
    int trafficlightNum;
    SimOne_Data_TrafficLight trafficlights[SOSM_TRAFFICLIGHT_SIZE_MAX];
};

#define SOSM_DRIVER_PREFIX "SOSM_DRIVER_"

enum ESimOne_Driver_Status
{
    ESimOne_Driver_Status_Unknown = 0,
    ESimOne_Driver_Status_Controlling = 1,
    ESimOne_Driver_Status_Disabled = 2
};

struct SimOne_Data_Driver_Status : public SimOne_Data
{
    ESimOne_Driver_Status driverStatus;
};

#define SOSM_CONTROLMODE_PREFIX "SOSM_CONTROLMODE_"

enum SimOne_Control_Mode
{
    ESimOne_Control_Mode_Unknown = 0,
    ESimOne_Control_Mode_Manual = 1,
    ESimOne_Control_Mode_API = 2,
    ESimOne_Control_Mode_Auto = 3
};

struct SimOne_Data_Control_Mode : public SimOne_Data
{
    SimOne_Control_Mode controlMode;
};

#define ENABLE_SCENARIO_EVENT
#define SCENARIO_EVENT_PREFIX "SCENARIO_EVENT_"

struct SimOne_Data_ScenarioEvent_ReaderStatus
{
    int readerState = 0;
};

struct SimOne_Data_ScenarioEvent_WriterStatus
{
    int writeState = 0;
};

struct SimOne_Data_ScenarioEvent : public SimOne_Data_ScenarioEvent_WriterStatus
{
    char event[64];
    char data[64];
};
#pragma pack(pop)