All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.divpundir.mavlink.definitions.common.EfiStatus.kt Maven / Gradle / Ivy

package com.divpundir.mavlink.definitions.common

import com.divpundir.mavlink.api.GeneratedMavField
import com.divpundir.mavlink.api.GeneratedMavMessage
import com.divpundir.mavlink.api.MavMessage
import com.divpundir.mavlink.serialization.MavDataDecoder
import com.divpundir.mavlink.serialization.MavDataEncoder
import com.divpundir.mavlink.serialization.encodeFloat
import com.divpundir.mavlink.serialization.encodeUInt8
import com.divpundir.mavlink.serialization.safeDecodeFloat
import com.divpundir.mavlink.serialization.safeDecodeUInt8
import com.divpundir.mavlink.serialization.truncateZeros
import kotlin.Byte
import kotlin.ByteArray
import kotlin.Float
import kotlin.Int
import kotlin.UByte
import kotlin.UInt
import kotlin.Unit

/**
 * EFI status output
 *
 * @param health EFI health status
 * @param ecuIndex ECU index
 * @param rpm RPM
 * @param fuelConsumed Fuel consumed
 * units = cm^3
 * @param fuelFlow Fuel flow rate
 * units = cm^3/min
 * @param engineLoad Engine load
 * units = %
 * @param throttlePosition Throttle position
 * units = %
 * @param sparkDwellTime Spark dwell time
 * units = ms
 * @param barometricPressure Barometric pressure
 * units = kPa
 * @param intakeManifoldPressure Intake manifold pressure(
 * units = kPa
 * @param intakeManifoldTemperature Intake manifold temperature
 * units = degC
 * @param cylinderHeadTemperature Cylinder head temperature
 * units = degC
 * @param ignitionTiming Ignition timing (Crank angle degrees)
 * units = deg
 * @param injectionTime Injection time
 * units = ms
 * @param exhaustGasTemperature Exhaust gas temperature
 * units = degC
 * @param throttleOut Output throttle
 * units = %
 * @param ptCompensation Pressure/temperature compensation
 * @param ignitionVoltage Supply voltage to EFI sparking system.  Zero in this value means
 * "unknown", so if the supply voltage really is zero volts use 0.0001 instead.
 * units = V
 * @param fuelPressure Fuel pressure. Zero in this value means "unknown", so if the fuel pressure
 * really is zero kPa use 0.0001 instead.
 * units = kPa
 */
@GeneratedMavMessage(
  id = 225u,
  crcExtra = -48,
)
public data class EfiStatus(
  /**
   * EFI health status
   */
  @GeneratedMavField(type = "uint8_t")
  public val health: UByte = 0u,
  /**
   * ECU index
   */
  @GeneratedMavField(type = "float")
  public val ecuIndex: Float = 0F,
  /**
   * RPM
   */
  @GeneratedMavField(type = "float")
  public val rpm: Float = 0F,
  /**
   * Fuel consumed
   * units = cm^3
   */
  @GeneratedMavField(type = "float")
  public val fuelConsumed: Float = 0F,
  /**
   * Fuel flow rate
   * units = cm^3/min
   */
  @GeneratedMavField(type = "float")
  public val fuelFlow: Float = 0F,
  /**
   * Engine load
   * units = %
   */
  @GeneratedMavField(type = "float")
  public val engineLoad: Float = 0F,
  /**
   * Throttle position
   * units = %
   */
  @GeneratedMavField(type = "float")
  public val throttlePosition: Float = 0F,
  /**
   * Spark dwell time
   * units = ms
   */
  @GeneratedMavField(type = "float")
  public val sparkDwellTime: Float = 0F,
  /**
   * Barometric pressure
   * units = kPa
   */
  @GeneratedMavField(type = "float")
  public val barometricPressure: Float = 0F,
  /**
   * Intake manifold pressure(
   * units = kPa
   */
  @GeneratedMavField(type = "float")
  public val intakeManifoldPressure: Float = 0F,
  /**
   * Intake manifold temperature
   * units = degC
   */
  @GeneratedMavField(type = "float")
  public val intakeManifoldTemperature: Float = 0F,
  /**
   * Cylinder head temperature
   * units = degC
   */
  @GeneratedMavField(type = "float")
  public val cylinderHeadTemperature: Float = 0F,
  /**
   * Ignition timing (Crank angle degrees)
   * units = deg
   */
  @GeneratedMavField(type = "float")
  public val ignitionTiming: Float = 0F,
  /**
   * Injection time
   * units = ms
   */
  @GeneratedMavField(type = "float")
  public val injectionTime: Float = 0F,
  /**
   * Exhaust gas temperature
   * units = degC
   */
  @GeneratedMavField(type = "float")
  public val exhaustGasTemperature: Float = 0F,
  /**
   * Output throttle
   * units = %
   */
  @GeneratedMavField(type = "float")
  public val throttleOut: Float = 0F,
  /**
   * Pressure/temperature compensation
   */
  @GeneratedMavField(type = "float")
  public val ptCompensation: Float = 0F,
  /**
   * Supply voltage to EFI sparking system.  Zero in this value means "unknown", so if the supply
   * voltage really is zero volts use 0.0001 instead.
   * units = V
   */
  @GeneratedMavField(
    type = "float",
    extension = true,
  )
  public val ignitionVoltage: Float = 0F,
  /**
   * Fuel pressure. Zero in this value means "unknown", so if the fuel pressure really is zero kPa
   * use 0.0001 instead.
   * units = kPa
   */
  @GeneratedMavField(
    type = "float",
    extension = true,
  )
  public val fuelPressure: Float = 0F,
) : MavMessage {
  override val instanceCompanion: MavMessage.MavCompanion = Companion

  override fun serializeV1(): ByteArray {
    val encoder = MavDataEncoder(SIZE_V1)
    encoder.encodeFloat(ecuIndex)
    encoder.encodeFloat(rpm)
    encoder.encodeFloat(fuelConsumed)
    encoder.encodeFloat(fuelFlow)
    encoder.encodeFloat(engineLoad)
    encoder.encodeFloat(throttlePosition)
    encoder.encodeFloat(sparkDwellTime)
    encoder.encodeFloat(barometricPressure)
    encoder.encodeFloat(intakeManifoldPressure)
    encoder.encodeFloat(intakeManifoldTemperature)
    encoder.encodeFloat(cylinderHeadTemperature)
    encoder.encodeFloat(ignitionTiming)
    encoder.encodeFloat(injectionTime)
    encoder.encodeFloat(exhaustGasTemperature)
    encoder.encodeFloat(throttleOut)
    encoder.encodeFloat(ptCompensation)
    encoder.encodeUInt8(health)
    return encoder.bytes
  }

  override fun serializeV2(): ByteArray {
    val encoder = MavDataEncoder(SIZE_V2)
    encoder.encodeFloat(ecuIndex)
    encoder.encodeFloat(rpm)
    encoder.encodeFloat(fuelConsumed)
    encoder.encodeFloat(fuelFlow)
    encoder.encodeFloat(engineLoad)
    encoder.encodeFloat(throttlePosition)
    encoder.encodeFloat(sparkDwellTime)
    encoder.encodeFloat(barometricPressure)
    encoder.encodeFloat(intakeManifoldPressure)
    encoder.encodeFloat(intakeManifoldTemperature)
    encoder.encodeFloat(cylinderHeadTemperature)
    encoder.encodeFloat(ignitionTiming)
    encoder.encodeFloat(injectionTime)
    encoder.encodeFloat(exhaustGasTemperature)
    encoder.encodeFloat(throttleOut)
    encoder.encodeFloat(ptCompensation)
    encoder.encodeUInt8(health)
    encoder.encodeFloat(ignitionVoltage)
    encoder.encodeFloat(fuelPressure)
    return encoder.bytes.truncateZeros()
  }

  public companion object : MavMessage.MavCompanion {
    private const val SIZE_V1: Int = 65

    private const val SIZE_V2: Int = 73

    override val id: UInt = 225u

    override val crcExtra: Byte = -48

    override fun deserialize(bytes: ByteArray): EfiStatus {
      val decoder = MavDataDecoder(bytes)

      val ecuIndex = decoder.safeDecodeFloat()
      val rpm = decoder.safeDecodeFloat()
      val fuelConsumed = decoder.safeDecodeFloat()
      val fuelFlow = decoder.safeDecodeFloat()
      val engineLoad = decoder.safeDecodeFloat()
      val throttlePosition = decoder.safeDecodeFloat()
      val sparkDwellTime = decoder.safeDecodeFloat()
      val barometricPressure = decoder.safeDecodeFloat()
      val intakeManifoldPressure = decoder.safeDecodeFloat()
      val intakeManifoldTemperature = decoder.safeDecodeFloat()
      val cylinderHeadTemperature = decoder.safeDecodeFloat()
      val ignitionTiming = decoder.safeDecodeFloat()
      val injectionTime = decoder.safeDecodeFloat()
      val exhaustGasTemperature = decoder.safeDecodeFloat()
      val throttleOut = decoder.safeDecodeFloat()
      val ptCompensation = decoder.safeDecodeFloat()
      val health = decoder.safeDecodeUInt8()
      val ignitionVoltage = decoder.safeDecodeFloat()
      val fuelPressure = decoder.safeDecodeFloat()

      return EfiStatus(
        health = health,
        ecuIndex = ecuIndex,
        rpm = rpm,
        fuelConsumed = fuelConsumed,
        fuelFlow = fuelFlow,
        engineLoad = engineLoad,
        throttlePosition = throttlePosition,
        sparkDwellTime = sparkDwellTime,
        barometricPressure = barometricPressure,
        intakeManifoldPressure = intakeManifoldPressure,
        intakeManifoldTemperature = intakeManifoldTemperature,
        cylinderHeadTemperature = cylinderHeadTemperature,
        ignitionTiming = ignitionTiming,
        injectionTime = injectionTime,
        exhaustGasTemperature = exhaustGasTemperature,
        throttleOut = throttleOut,
        ptCompensation = ptCompensation,
        ignitionVoltage = ignitionVoltage,
        fuelPressure = fuelPressure,
      )
    }

    public operator fun invoke(builderAction: Builder.() -> Unit): EfiStatus =
        Builder().apply(builderAction).build()
  }

  public class Builder {
    public var health: UByte = 0u

    public var ecuIndex: Float = 0F

    public var rpm: Float = 0F

    public var fuelConsumed: Float = 0F

    public var fuelFlow: Float = 0F

    public var engineLoad: Float = 0F

    public var throttlePosition: Float = 0F

    public var sparkDwellTime: Float = 0F

    public var barometricPressure: Float = 0F

    public var intakeManifoldPressure: Float = 0F

    public var intakeManifoldTemperature: Float = 0F

    public var cylinderHeadTemperature: Float = 0F

    public var ignitionTiming: Float = 0F

    public var injectionTime: Float = 0F

    public var exhaustGasTemperature: Float = 0F

    public var throttleOut: Float = 0F

    public var ptCompensation: Float = 0F

    public var ignitionVoltage: Float = 0F

    public var fuelPressure: Float = 0F

    public fun build(): EfiStatus = EfiStatus(
      health = health,
      ecuIndex = ecuIndex,
      rpm = rpm,
      fuelConsumed = fuelConsumed,
      fuelFlow = fuelFlow,
      engineLoad = engineLoad,
      throttlePosition = throttlePosition,
      sparkDwellTime = sparkDwellTime,
      barometricPressure = barometricPressure,
      intakeManifoldPressure = intakeManifoldPressure,
      intakeManifoldTemperature = intakeManifoldTemperature,
      cylinderHeadTemperature = cylinderHeadTemperature,
      ignitionTiming = ignitionTiming,
      injectionTime = injectionTime,
      exhaustGasTemperature = exhaustGasTemperature,
      throttleOut = throttleOut,
      ptCompensation = ptCompensation,
      ignitionVoltage = ignitionVoltage,
      fuelPressure = fuelPressure,
    )
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy