-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCyberBridgeFactory.cs
65 lines (59 loc) · 3.55 KB
/
CyberBridgeFactory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/**
* Copyright (c) 2019-2021 LG Electronics, Inc.
*
* This software contains code licensed as described in LICENSE.
*
*/
using System;
using Simulator.Bridge.Data;
namespace Simulator.Bridge.Cyber
{
[BridgeName("CyberRT", "CyberRT")]
public class CyberBridgeFactory : IBridgeFactory
{
public IBridgeInstance CreateInstance() => new CyberBridgeInstance();
public void Register(IBridgePlugin plugin)
{
RegPublisher<ImageData, apollo.drivers.CompressedImage>(plugin, CyberConversions.ConvertFrom);
RegPublisher<LaserScanData, apollo.drivers.PointCloud>(plugin, CyberConversions.ConvertFrom);
RegPublisher<PointCloudData, apollo.drivers.PointCloud>(plugin, CyberConversions.ConvertFrom);
RegPublisher<Detected3DObjectData, apollo.perception.PerceptionObstacles>(plugin, CyberConversions.ConvertFrom);
RegPublisher<Detected2DObjectData, apollo.common.Detection2DArray>(plugin, CyberConversions.ConvertFrom);
RegPublisher<DetectedRadarObjectData, apollo.drivers.ContiRadar>(plugin, CyberConversions.ConvertFrom);
RegPublisher<CanBusData, apollo.canbus.Chassis>(plugin, CyberConversions.ConvertFrom);
RegPublisher<GpsData, apollo.drivers.gnss.GnssBestPose>(plugin, CyberConversions.ConvertFrom);
RegPublisher<GpsOdometryData, apollo.localization.Gps>(plugin, CyberConversions.ConvertFrom);
RegPublisher<GpsInsData, apollo.drivers.gnss.InsStat>(plugin, CyberConversions.ConvertFrom);
RegPublisher<ImuData, apollo.drivers.gnss.Imu>(plugin, CyberConversions.ConvertFrom);
RegPublisher<CorrectedImuData, apollo.localization.CorrectedImu>(plugin, CyberConversions.ConvertFrom);
RegPublisher<SignalDataArray, apollo.perception.TrafficLightDetection>(plugin, CyberConversions.ConvertFrom);
RegPublisher<ClockData, apollo.cyber.proto.Clock>(plugin, CyberConversions.ConvertFrom);
RegPublisher<LaneLinesData, apollo.perception.PerceptionLanes>(plugin, CyberConversions.ConvertFrom);
RegSubscriber<VehicleControlData, apollo.control.ControlCommand>(plugin, CyberConversions.ConvertTo);
RegSubscriber<Detected2DObjectArray, apollo.common.Detection2DArray>(plugin, CyberConversions.ConvertTo);
RegSubscriber<Detected3DObjectArray, apollo.perception.PerceptionObstacles>(plugin, CyberConversions.ConvertTo);
}
public void RegPublisher<DataType, BridgeType>(IBridgePlugin plugin, Func<DataType, BridgeType> converter)
{
plugin.AddType<DataType>(typeof(BridgeType).Name);
plugin.AddPublisherCreator(
(instance, topic) =>
{
var cyberInstance = instance as CyberBridgeInstance;
cyberInstance.AddPublisher<BridgeType>(topic);
var writer = new CyberWriter<BridgeType>(cyberInstance, topic);
return new Publisher<DataType>((data, completed) => writer.Write(converter(data), completed));
}
);
}
public void RegSubscriber<DataType, BridgeType>(IBridgePlugin plugin, Func<BridgeType, DataType> converter)
{
plugin.AddType<DataType>(typeof(BridgeType).Name);
plugin.AddSubscriberCreator<DataType>(
(instance, topic, callback) => (instance as CyberBridgeInstance).AddSubscriber<BridgeType>(topic,
rawData => callback(converter(CyberSerialization.Unserialize<BridgeType>(rawData)))
)
);
}
}
}