public void Add(ICanBusMessage message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } _messageTypesCount[message.MessageTypeId].IncrementCount(); }
private static bool?IsChargingActive(ICanBusMessage message) { if (message is IModel3BatteryInfoMessage batteryInfoMessage) { return(batteryInfoMessage.BmsState % 2 > 0); } return(null); }
private static DateTime?TryGetTimestamp(CanBusLogLine parsedLine, ICanBusMessage message) { if (parsedLine.UnixTimestamp > 0) { var seconds = (long)parsedLine.UnixTimestamp; var timestamp = DateTimeOffset.FromUnixTimeSeconds(seconds); timestamp = timestamp.AddSeconds((double)(parsedLine.UnixTimestamp - seconds)); return(timestamp.UtcDateTime); } if (message is TimestampMessage timestampMessage && timestampMessage.IsValid) { return(timestampMessage.Timestamp); } return(null); }
private static void ParseMessage(ICanBusMessage message, ChargingSessionRow row) { switch (message) { case BatteryInfoMessage m: row.BmsChargeStatus = m.BmsChargeStatus; row.BmsState = m.BmsState; row.CellTemperature = m.MinBatteryTemperature; row.MaxChargePower = m.BmsChargePowerAvailable; return; case BatteryPowerMessage m: row.BatteryCurrent = m.BatteryCurrentRaw; row.BatteryVoltage = m.BatteryVoltage; return; case StateOfChargeMessage m: row.StateOfCharge = m.StateOfChargeMin; return; } }
private static void ParseMessage(ICanBusMessage message, CsvRow row) { switch (message) { case BatteryCapacityMessage m: row.FullBatteryCapacity = m.FullBatteryCapacity; row.ExpectedRemainingCapacity = m.ExpectedRemainingCapacity; return; case BatteryInfoMessage m: row.BmsState = m.BmsState; row.BmsChargeStatus = m.BmsChargeStatus; return; case BatteryPowerMessage m: row.BatteryCurrent = m.BatteryCurrentRaw; row.BatteryVoltage = m.BatteryVoltage; return; case ChargeDischargeMessage m: row.TotalCharge = m.TotalCharge; row.TotalDischarge = m.TotalDischarge; return; case OdometerMessage m: row.Odometer = m.Odometer; return; case SpeedMessage m: row.Speed = m.SignedSpeed; return; case StateOfChargeMessage m: row.StateOfCharge = m.StateOfChargeMin; return; } }
private static void AssignMessageType(MessageInfo[] messageInfo, Type messageType, ICanBusMessage model) { var existing = messageInfo[model.MessageTypeId]; if (existing != null) { throw new InvalidOperationException($"Colliding message type IDs: {model.MessageTypeId:X}"); } messageInfo[model.MessageTypeId] = new MessageInfo { Constructor = GetPayloadConstructor(messageType), RequireBytes = model.RequireBytes }; }