void setupPrefs() { copy_prefs(&default_prefs, &prefs); prefs.ascrate50 = feet_to_mm(30) / 60; prefs.ascrate75 = prefs.ascrate50; prefs.ascratestops = prefs.ascrate50; prefs.ascratelast6m = feet_to_mm(10) / 60; prefs.last_stop = true; }
void setupPrefs() { prefs = default_prefs; prefs.ascrate50 = feet_to_mm(30) / 60; prefs.ascrate75 = prefs.ascrate50; prefs.ascratestops = prefs.ascrate50; prefs.ascratelast6m = feet_to_mm(10) / 60; prefs.last_stop = true; }
void add_sample_data(struct sample *sample, enum csv_format type, double val) { switch (type) { case CSV_DEPTH: sample->depth.mm = feet_to_mm(val); break; case CSV_TEMP: sample->temperature.mkelvin = F_to_mkelvin(val); break; case CSV_PRESSURE: sample->pressure[0].mbar = psi_to_mbar(val * 4); break; case POSEIDON_DEPTH: sample->depth.mm = lrint(val * 0.5 * 1000); break; case POSEIDON_TEMP: sample->temperature.mkelvin = C_to_mkelvin(val * 0.2); break; case POSEIDON_SETPOINT: sample->setpoint.mbar = lrint(val * 10); break; case POSEIDON_SENSOR1: sample->o2sensor[0].mbar = lrint(val * 10); break; case POSEIDON_SENSOR2: sample->o2sensor[1].mbar = lrint(val * 10); break; case POSEIDON_NDL: sample->ndl.seconds = lrint(val * 60); break; case POSEIDON_CEILING: sample->stopdepth.mm = lrint(val * 1000); break; } }
static void add_sample_data(struct sample *sample, enum csv_format type, double val) { switch (type) { case CSV_DEPTH: sample->depth.mm = feet_to_mm(val); break; case CSV_TEMP: sample->temperature.mkelvin = F_to_mkelvin(val); break; case CSV_PRESSURE: sample->cylinderpressure.mbar = psi_to_mbar(val*4); break; } }
void TestUnitConversion::testUnitConversions() { QCOMPARE(IS_FP_SAME(grams_to_lbs(1000), 2.204586), true); QCOMPARE(lbs_to_grams(1), 454); QCOMPARE(IS_FP_SAME(ml_to_cuft(1000), 0.0353147), true); QCOMPARE(IS_FP_SAME(cuft_to_l(1), 28.316847), true); QCOMPARE(IS_FP_SAME(mm_to_feet(1000), 3.280840), true); QCOMPARE(feet_to_mm(1), (long unsigned int) 305); QCOMPARE(to_feet((depth_t){ 1000 }), 3); QCOMPARE(IS_FP_SAME(mkelvin_to_C(647000), 373.85), true); QCOMPARE(IS_FP_SAME(mkelvin_to_F(647000), 704.93), true); QCOMPARE(F_to_mkelvin(704.93), (unsigned long)647000); QCOMPARE(C_to_mkelvin(373.85), (unsigned long)647000); QCOMPARE(IS_FP_SAME(psi_to_bar(14.6959488), 1.01325), true); QCOMPARE(psi_to_mbar(14.6959488), (long)1013); QCOMPARE(to_PSI((pressure_t){ 1013 }), (int)15); QCOMPARE(IS_FP_SAME(bar_to_atm(1.013), 1.0), true); QCOMPARE(IS_FP_SAME(mbar_to_atm(1013), 1.0), true); QCOMPARE(mbar_to_PSI(1013), (int)15); get_units(); }
//TODO: Move to C. depth_t string_to_depth(const char *str) { const char *end; double value = strtod_flags(str, &end, 0); QString rest = QString(end).trimmed(); QString local_ft = QObject::tr("ft"); QString local_m = QObject::tr("m"); depth_t depth; if (rest.startsWith("m") || rest.startsWith(local_m)) goto m; if (rest.startsWith("ft") || rest.startsWith(local_ft)) goto ft; if (prefs.units.length == prefs.units.FEET) goto ft; m: depth.mm = rint(value * 1000); return depth; ft: depth.mm = feet_to_mm(value); return depth; }
bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, int role) { bool addDiveMode = DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING; if (addDiveMode) DivePlannerPointsModel::instance()->rememberTanks(); cylinder_t *cyl = cylinderAt(index); switch(index.column()) { case TYPE: if (!value.isNull()) { QByteArray ba = value.toByteArray(); const char *text = ba.constData(); if (!cyl->type.description || strcmp(cyl->type.description, text)) { cyl->type.description = strdup(text); changed = true; } } break; case SIZE: if (CHANGED(toDouble, "cuft", "l")) { // if units are CUFT then this value is meaningless until we have working pressure if (value.toDouble() != 0.0) { TankInfoModel *tanks = TankInfoModel::instance(); QModelIndexList matches = tanks->match(tanks->index(0,0), Qt::DisplayRole, cyl->type.description); int mbar = cyl->type.workingpressure.mbar; int mliter; if (mbar && prefs.units.volume == prefs.units.CUFT) { double liters = cuft_to_l(value.toDouble()); liters /= bar_to_atm(mbar / 1000.0); mliter = rint(liters * 1000); } else { mliter = rint(value.toDouble() * 1000); } if (cyl->type.size.mliter != mliter) { mark_divelist_changed(TRUE); cyl->type.size.mliter = mliter; if (!matches.isEmpty()) tanks->setData(tanks->index(matches.first().row(), TankInfoModel::ML), cyl->type.size.mliter); } changed = true; } } break; case WORKINGPRESS: if (CHANGED(toDouble, "psi", "bar")) { QString vString = value.toString(); vString.remove("psi").remove("bar"); if (vString.toDouble() != 0.0) { TankInfoModel *tanks = TankInfoModel::instance(); QModelIndexList matches = tanks->match(tanks->index(0,0), Qt::DisplayRole, cyl->type.description); if (prefs.units.pressure == prefs.units.PSI) cyl->type.workingpressure.mbar = psi_to_mbar(vString.toDouble()); else cyl->type.workingpressure.mbar = vString.toDouble() * 1000; if (!matches.isEmpty()) tanks->setData(tanks->index(matches.first().row(), TankInfoModel::BAR), cyl->type.workingpressure.mbar / 1000.0); changed = true; } } break; case START: if (CHANGED(toDouble, "psi", "bar")) { if (value.toDouble() != 0.0) { if (prefs.units.pressure == prefs.units.PSI) cyl->start.mbar = psi_to_mbar(value.toDouble()); else cyl->start.mbar = value.toDouble() * 1000; changed = true; } } break; case END: if (CHANGED(toDouble, "psi", "bar")) { if (value.toDouble() != 0.0) { if (prefs.units.pressure == prefs.units.PSI) cyl->end.mbar = psi_to_mbar(value.toDouble()); else cyl->end.mbar = value.toDouble() * 1000; changed = true; } } break; case O2: if (CHANGED(toDouble, "%", "%")) { int o2 = value.toString().remove('%').toDouble() * 10 + 0.5; if (cyl->gasmix.he.permille + o2 <= 1000) { cyl->gasmix.o2.permille = o2; changed = true; } } break; case HE: if (CHANGED(toDouble, "%", "%")) { int he = value.toString().remove('%').toDouble() * 10 + 0.5; if (cyl->gasmix.o2.permille + he <= 1000) { cyl->gasmix.he.permille = he; changed = true; } } break; case DEPTH: if (CHANGED(toDouble, "ft", "m")) { if (value.toInt() != 0) { if (prefs.units.length == prefs.units.FEET) cyl->depth.mm = feet_to_mm(value.toString().remove("ft").remove("m").toInt()); else cyl->depth.mm = value.toString().remove("ft").remove("m").toInt() * 1000; } } } dataChanged(index, index); if (addDiveMode) DivePlannerPointsModel::instance()->tanksUpdated(); return true; }
unsigned int units_to_depth(double depth) { if (get_units()->length == METERS) return rint(depth * 1000); return feet_to_mm(depth); }