// Overridden from ManifoldParser //public override void DoWriteManifold(IION ion, Manifold manifold, BinaryWriter writer){ public override void DoWriteManifold(IION ion, Sensor sensor, BinaryWriter writer) { // Write primary sensor //SensorParser.WriteSensor(ion, manifold.primarySensor, writer); SensorParser.WriteSensor(ion, sensor, writer); // Write secondary sensor //SensorParser.WriteSensor(ion, manifold.secondarySensor, writer); SensorParser.WriteSensor(ion, sensor.linkedSensor, writer); // Write fluid name //if (sensor.ptChart == null) { // writer.Write(false); // Doens't have a pt chart. //} else { // writer.Write(true); // Does have a pt chart // writer.Write(Enum.GetName(typeof(Fluid.EState), sensor.fluidState)); // if (ion.fluidManager.lastUsedFluid == null) { // writer.Write(""); // } else { // writer.Write(ion.fluidManager.lastUsedFluid.name); // } //} // The number of sensor properties that the manifold ha //writer.Write(manifold.sensorProperties.Count); writer.Write(sensor.sensorProperties.Count); // Write sensor properties //foreach (var sp in manifold.sensorProperties) { foreach (var sp in sensor.sensorProperties) { WriteSensorProperty(sp, writer); } }
public void StartCore() { try { while (true) { var rawItems = ReadCommands().ToArray(); if (rawItems.Length == 0) { continue; } var lines = rawItems.SelectMany(SpiltCommand).ToArray(); if (lines.Length > 2) { var carSignalInfo = SensorParser.Parse(lines); SignalHandler.Execute(carSignalInfo); if (Settings.AngleSource == AngleSource.Gyroscope) { carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; } OnCarSignalRecevied(carSignalInfo); LogCommands(rawItems); } } } catch (Exception exp) { Logger.Error("BluetoothStartCore", exp.Message); } }
private void OnCarSensorBthMessageReceived(CarSensorBthMessage message) { var lineslst = new List <string>(); var line = message.Sensor; if (!string.IsNullOrEmpty(line) && line.Length >= 10) { lineslst.Add(line); } var cmd = line.GetCommand(); if (cmd != null && cmd.Equals(SensorCommand, StringComparison.OrdinalIgnoreCase)) { return; } var lines = lineslst.ToArray().SelectMany(SpiltCommand).ToArray(); if (lines.Length > 2) { var carSignalInfo = SensorParser.Parse(lines); SignalHandler.Execute(carSignalInfo); if (Settings.AngleSource == AngleSource.Gyroscope) { carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; } OnCarSignalRecevied(carSignalInfo); } }
public void StartCore(object a) { try { var rawItems = ReadCommands().ToArray(); if (rawItems.Count() == 0) { return; } var lines = rawItems.SelectMany(SpiltCommand).ToArray(); if (lines.Length > 2) { var carSignalInfo = SensorParser.Parse(lines); SignalHandler.Execute(carSignalInfo); //TOOD:由于模拟Gps数据没有数据,所以给一个默认20的速度! carSignalInfo.Sensor.SpeedInKmh = 20; carSignalInfo.SpeedInKmh = 20; carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; OnCarSignalRecevied(carSignalInfo); } if (lines.Length <= 2) { } } catch (Exception exp) { string ex = exp.Message; } }
public async Task <IHttpActionResult> PostSensorByteData(byte[] sensorData) { try { var parser = new SensorParser(); return(StatusCode(await parser.ParseInput(sensorData))); } catch (Exception) { return(StatusCode(HttpStatusCode.InternalServerError)); } }
// Overridden from ManifoldParser //public override Manifold DoReadManifold(IION ion, BinaryReader reader){ public override Sensor DoReadManifold(IION ion, BinaryReader reader) { // Read the primary sensor Sensor primary = SensorParser.ReadSensor(ion, reader); // Assert that the primary sensor is not null; if (primary == null) { throw new IOException("Cannot load manifold: primary sensor not read"); } // Read the secondary sensor Sensor secondary = SensorParser.ReadSensor(ion, reader); // Create the inflated manifold //var ret = new Manifold(primary); var ret = primary; //ret.SetSecondarySensor(secondary); ret.SetLinkedSensor(secondary); if (reader.ReadBoolean()) { var state = (Fluid.EState)Enum.Parse(typeof(Fluid.EState), reader.ReadString()); // Read the fluid name for the manifold var fluidName = reader.ReadString(); Fluid fluid = null; if (fluidName != null && !fluidName.Equals("")) { fluid = ion.fluidManager.LoadFluidAsync(fluidName).Result; } } // Read sensor properties var propCount = reader.ReadInt32(); for (int i = 0; i < propCount; i++) { //ReadSensorProperty(ion, ret, reader); ReadSensorProperty(ion, ret, reader); } return(ret); }
public void OnCarSensorMessageReceive(BinaryCarSensorMessage carSensorMessage) { try { var Buffer = carSensorMessage.Sensor; var carSignalInfo = SensorParser.Parse(Buffer); SignalHandler.Execute(carSignalInfo); if (Settings.AngleSource == AngleSource.Gyroscope) { carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; } OnCarSignalRecevied(carSignalInfo); } catch (Exception exp) { Logger.Error("OnCarSensorMessageReceive:" + exp.Message); } }
protected virtual void StartCore() { try { //if (!IsInnerGyro.HasValue) //{ // IsInnerGyro = DetectGyroSource(); // //Logger.InfoFormat("信号中是否包含陀螺仪信息:{0}", IsInnerGyro); //} var rawItems = ReadCommands().ToArray(); var lines = rawItems.SelectMany(SpiltCommand).ToArray(); if (lines.Length > 2) { var carSignalInfo = SensorParser.Parse(lines); SignalHandler.Execute(carSignalInfo); //方向角 if (Settings.AngleSource == AngleSource.Gyroscope || Settings.AngleSource == AngleSource.ExternalGyroscope) { if (IsInnerGyro.Value) { carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; } else { ProcessCarDirection(carSignalInfo); } } OnCarSignalRecevied(carSignalInfo); } //if (lines.Length <= 2 || lines.Any(x => x.StartsWith("$D"))) if (lines.Length <= 2) { //Logger.WarnFormat("信号异常:{0}", string.Join(Environment.NewLine, rawItems)); } LogCommands(rawItems); } catch (Exception exp) { //Logger.ErrorFormat("读取数据发生异常,原因:{0}", exp, exp); } }
public void OnCarSensorMessageReceive(CarSensorMessage carSensorMessage) { try { var rawItems = carSensorMessage.Sensor; var lines = rawItems.SelectMany(SpiltCommand).ToArray(); if (lines.Length > 2) { var carSignalInfo = SensorParser.Parse(lines); SignalHandler.Execute(carSignalInfo); if (Settings.AngleSource == AngleSource.Gyroscope) { carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; } OnCarSignalRecevied(carSignalInfo); LogCommands(rawItems); } } catch (Exception exp) { Logger.Error("OnCarSensorMessageReceive:" + exp.Message); } }
public void StartCore() { while (true) { try { rawItems = ReadToCommand(); if (rawItems.Length == 0) { continue; } if (rawItems.Where(s => s.Contains("?")).Count() >= 1) { Logger.Error("rawItems contains ?", string.Join("|", rawItems)); continue; } var lines = rawItems.SelectMany(SpiltCommand).ToArray(); if (lines.Length > 2) { var carSignalInfo = SensorParser.Parse(lines); //直接对无效信号进行过滤处理! if (!carSignalInfo.IsSensorValid) { Logger.Error("carSignalInfo.IsSensorValid", string.Join("|", rawItems)); continue; } SignalHandler.Execute(carSignalInfo); if (Settings.AngleSource == AngleSource.Gyroscope) { carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; if (carSignalInfo.BearingAngle != 180) { Angle = carSignalInfo.BearingAngle; } else { carSignalInfo.BearingAngle = Angle; } } else { if (carSignalInfo.Gps != null) { carSignalInfo.BearingAngle = carSignalInfo.Gps.AngleDegrees; //TODO:其实在这点处理不合适 if (carSignalInfo.BearingAngle != 0) { Angle = carSignalInfo.BearingAngle; } else { carSignalInfo.BearingAngle = Angle; } } else { Logger.Info("carSignalInfo Gps is null"); } } //把原始信号记录器 carSignalInfo.commands = rawItems; OnCarSignalRecevied(carSignalInfo); LogCommands(rawItems); } } catch (Exception exp) { Logger.ErrorFormat("SerialStartCorte发生异常,原因:{0} 原始信号{1}", exp.Message, string.Join(",", rawItems)); //Logger.Error("USBSerialStartCorte",exp.Message); } } }
public void StartCore() { while (true) { try { var rawItems = ReadToCommand(); if (rawItems.Length == 0) { continue; } var lines = rawItems.SelectMany(SpiltCommand).ToArray(); if (lines.Length > 2) { var carSignalInfo = SensorParser.Parse(lines); SignalHandler.Execute(carSignalInfo); if (Settings.AngleSource == AngleSource.Gyroscope) { carSignalInfo.BearingAngle = carSignalInfo.AngleZ + 180; if (carSignalInfo.BearingAngle != 180) { Angle = carSignalInfo.BearingAngle; } else { carSignalInfo.BearingAngle = Angle; } } else { if (carSignalInfo.Gps != null) { carSignalInfo.BearingAngle = carSignalInfo.Gps.AngleDegrees; //需要处理一下如果角度是0,则使用上一个值 //就是Gps的输出频率和主机信号输出的频率不一致 if (carSignalInfo.BearingAngle != 0) { Angle = carSignalInfo.BearingAngle; } else { carSignalInfo.BearingAngle = Angle; } // Logger.Info("Gps Angle:" + Angle.ToString()); } else { Logger.Info("carSignalInfo Gps is null"); } } OnCarSignalRecevied(carSignalInfo); LogCommands(rawItems); } } catch (Exception exp) { Logger.Error("USBSerialStartCorte", exp.Message); } } }