public DataGatewaySampleGateway(DataGatewaySampleSettings settings) : base(settings) { Random random; random = new Random(); _settings = settings; _numberGeneratorSet = this.DataPortSet.Where(dataPort => dataPort.DataDirection == DataDirection.Input).ToList().Select(dataPort => { Type type; type = typeof(DataGatewaySampleNumberGenerator <>).MakeGenericType(OneDasUtilities.GetTypeFromOneDasDataType(dataPort.DataType)); return((DataGatewaySampleNumberGeneratorBase)Activator.CreateInstance(type, dataPort, random)); }).ToList(); }
/* improvements: * - make reading big endian values easier * - FrameRateDivider should not be set as it is not used in this example */ static void Main(string[] args) { var services = new ServiceCollection(); ConfigureServices(services); var provider = services.BuildServiceProvider(); var extensionFactory = provider.GetRequiredService <IExtensionFactory>(); extensionFactory.Add(typeof(DataGatewaySampleGateway)); var settings = new DataGatewaySampleSettings(); settings.ModuleSet.Add(new OneDasModule(OneDasDataType.FLOAT32, DataDirection.Input, Endianness.LittleEndian, 10)); settings.Validate(); Console.CursorVisible = false; Task.Run(() => { using (var gateway = extensionFactory.BuildLogic <DataGatewaySampleGateway>(settings)) { gateway.Configure(new DataGatewayContext()); while (true) { gateway.UpdateIo(DateTime.Now); var values = MemoryMarshal.Cast <byte, float>(gateway.GetInputBuffer()); Console.Clear(); for (int i = 0; i < 10; i++) { Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0,6:F2}", values[i])); } Thread.Sleep(1000); } } }); Console.ReadKey(true); }