Add machine workshop, typed logic, mechanics and sensor-driven ECUs
This commit is contained in:
40
include/FluidSim/MachineSensors.hpp
Normal file
40
include/FluidSim/MachineSensors.hpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
#include "FluidSim/MachinePorts.hpp"
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
namespace fluidsim::port {
|
||||
enum class MachineSensorKind {Pressure,DifferentialPressure,GasTemperature,MassFlow,Crank,ThrottlePosition};
|
||||
inline constexpr int machine_sensor_kind_count=6;
|
||||
struct MachineSensorTap {
|
||||
std::uint32_t part{};
|
||||
float position{.5f}; // Normalized pipe arclength, independent of fluid cells.
|
||||
std::string label; // Retains the intended host when a binding is unresolved.
|
||||
bool operator==(const MachineSensorTap&)const=default;
|
||||
};
|
||||
struct MachineSensor {
|
||||
std::uint32_t id{};
|
||||
MachineSensorKind kind{MachineSensorKind::Pressure};
|
||||
std::string name;
|
||||
MachineSensorTap target,reference;
|
||||
float angle_offset{}; // Radians, added to the physical shaft angle.
|
||||
bool operator==(const MachineSensor&)const=default;
|
||||
};
|
||||
enum class MachineSensorStatus {Valid,MissingHost,IncompatibleHost,Fault};
|
||||
struct MachineSensorState {
|
||||
std::uint32_t id{};
|
||||
std::array<SignalValue,3> outputs;
|
||||
unsigned count{};
|
||||
MachineSensorStatus status{MachineSensorStatus::MissingHost};
|
||||
// An ideal crank pickup preserves provenance and unwrapped crossings. An
|
||||
// arbitrary numeric RPM signal must never acquire timing authority from it.
|
||||
std::uint32_t timing_shaft{};
|
||||
double unwrapped_angle{};
|
||||
};
|
||||
const char* machine_sensor_key(MachineSensorKind);
|
||||
const char* machine_sensor_name(MachineSensorKind);
|
||||
const char* machine_sensor_status_name(MachineSensorStatus);
|
||||
unsigned machine_sensor_output_count(MachineSensorKind);
|
||||
MachinePortDescriptor machine_sensor_output(const MachineSensor&,unsigned);
|
||||
}
|
||||
Reference in New Issue
Block a user