aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-03-01 14:26:11 -0500
committerSam Anthony <sam@samanthony.xyz>2025-03-01 14:26:11 -0500
commit47874c2ec00339314e43d282ab2bc906e9c9ac9b (patch)
tree97bef4da33b15adc6ef913efc22f400cc6dd0bf9
parent3f05b42ab04ca4990edf0f374f02dfea7b3be10a (diff)
downloadvolute-47874c2ec00339314e43d282ab2bc906e9c9ac9b.zip
add ambient pressure input
-rw-r--r--engine.h2
-rw-r--r--main.c16
-rw-r--r--ui.c32
-rw-r--r--ui.h5
4 files changed, 55 insertions, 0 deletions
diff --git a/engine.h b/engine.h
index eaa7dc6..43d5f4b 100644
--- a/engine.h
+++ b/engine.h
@@ -1,5 +1,7 @@
typedef struct {
Volume displacement;
+ Temperature ambient_temperature;
+ Pressure ambient_pressure;
AngularSpeed rpm;
Pressure map;
Fraction ve;
diff --git a/main.c b/main.c
index 8722224..ac0acb9 100644
--- a/main.c
+++ b/main.c
@@ -58,6 +58,7 @@ static void process_frame(mu_Context *ctx, UI *ui);
static void main_window(mu_Context *ctx, UI *ui);
static void displacement_row(mu_Context *ctx, UI *ui);
static void ambient_temperature_row(mu_Context *ctx, UI *ui);
+static void ambient_pressure_row(mu_Context *ctx, UI *ui);
static void rpm_row(mu_Context *ctx, UI *ui);
static void map_row(mu_Context *ctx, UI *ui);
static void ve_row(mu_Context *ctx, UI *ui);
@@ -130,6 +131,8 @@ main_window(mu_Context *ctx, UI *ui) {
}
displacement_row(ctx, ui);
+ ambient_temperature_row(ctx, ui);
+ ambient_pressure_row(ctx, ui);
vpad(ctx, 0);
@@ -172,6 +175,19 @@ ambient_temperature_row(mu_Context *ctx, UI *ui) {
}
static void
+ambient_pressure_row(mu_Context *ctx, UI *ui) {
+ mu_layout_row(ctx, 3, (int[]) {LABEL_WIDTH, FIELD_WIDTH, UNIT_WIDTH}, 0);
+ mu_label(ctx, "Ambient pressure:");
+ if (w_field(ctx, &ui->ambient_pressure) & MU_RES_CHANGE) {
+ set_ambient_pressure(ui);
+ set_all_volume_flow_rate(ui);
+ }
+ if (w_select(ctx, &ui->ambient_pressure_unit) & MU_RES_CHANGE) {
+ set_ambient_pressure_unit(ui);
+ }
+}
+
+static void
rpm_row(mu_Context *ctx, UI *ui) {
int i;
diff --git a/ui.c b/ui.c
index 418cb10..0ef1dfb 100644
--- a/ui.c
+++ b/ui.c
@@ -49,6 +49,9 @@ init_ui(UI *ui) {
w_init_field(&ui->ambient_temperature);
w_init_select(&ui->ambient_temperature_unit, nelem(temperature_units), temperature_units);
+ w_init_field(&ui->ambient_pressure);
+ w_init_select(&ui->ambient_pressure_unit, nelem(pressure_units), pressure_units);
+
ui->npoints = 1;
w_init_field(&ui->rpm[0]);
@@ -123,6 +126,35 @@ set_ambient_temperature_unit(UI *ui) {
}
void
+set_ambient_pressure(UI *ui) {
+ int idx, i;
+ PressureMaker convert;
+ Pressure p;
+
+ idx = ui->ambient_pressure_unit.idx;
+ assert(idx >= 0 && (long unsigned int) idx < nelem(pressure_units));
+
+ convert = pressure_makers[idx];
+ p = convert(ui->ambient_pressure.value);
+
+ for (i = 0; i < ui->npoints; i++) {
+ ui->points[i].ambient_pressure = p;
+ }
+}
+
+void
+set_ambient_pressure_unit(UI *ui) {
+ PressureMaker maker;
+ Pressure p;
+ PressureReader reader;
+
+ maker = pressure_makers[ui->ambient_pressure_unit.oldidx];
+ p = maker(ui->ambient_pressure.value);
+ reader = pressure_readers[ui->ambient_pressure_unit.idx];
+ w_set_field(&ui->ambient_pressure, reader(p));
+}
+
+void
set_map(UI *ui, int idx) {
int unit_idx;
PressureMaker convert;
diff --git a/ui.h b/ui.h
index e207327..e1cbfcf 100644
--- a/ui.h
+++ b/ui.h
@@ -7,6 +7,9 @@ typedef struct {
w_Field ambient_temperature;
w_Select ambient_temperature_unit;
+ w_Field ambient_pressure;
+ w_Select ambient_pressure_unit;
+
int npoints;
w_Field rpm[MAX_POINTS];
@@ -27,6 +30,8 @@ void set_displacement(UI *ui);
void set_displacement_unit(UI* ui);
void set_ambient_temperature(UI *ui);
void set_ambient_temperature_unit(UI *ui);
+void set_ambient_pressure(UI *ui);
+void set_ambient_pressure_unit(UI *ui);
void set_map(UI *ui, int idx);
void set_map_unit(UI *ui);
void set_ve(UI *ui, int idx);