/* * Show/Sets the mass of the vehicle */ static int cmd_dyno_mass(int argc, char **argv) { if (argc > 1) dyno_set_mass(htoi(argv[1])); else printf("mass: %d kg\n", dyno_get_mass()); return (0); }
/* * Show/Sets the mass of the vehicle */ static int cmd_dyno_mass(int argc, char **argv) { int mass=0; if (argc > 1) mass=htoi(argv[1]); if (mass > 0) dyno_set_mass(mass); else printf("mass: %d kg\n", dyno_get_mass()); return 0; }
static int cmd_dyno_run(UNUSED(int argc), UNUSED(char **argv)) { ecu_data *ep; int speed; /* measured speed */ int rpm; /* measured rpm */ int rpm_previous = 0; /* previous rpm */ unsigned long tv0, tv; /* measuring time */ int elapsed; /* elapsed time (ms) */ int i, length = 0; /* length of printed string */ int nb = 0; /* number of measures */ //make sure we're connected ! if (global_l3_conn == NULL) { fprintf(stderr, FLFMT "No active L3 connection !\n", FL); return CMD_FAILED; } /* Check mass */ if (dyno_get_mass() <= 0) { printf("The mass of the vehicle has not been set, please set the mass first\n"); return CMD_OK; } /* Check mass */ if (dyno_loss_done <= 0) { printf("The loss determination has not been done, please use command loss or setloss first\n"); return CMD_OK; } /* Show instructions */ printf("To proceed dyno, do a full-throttle acceleration run\n"); printf("in a single gear from a rolling start.\n"); printf("The run ends automatically when RPM begins to decrease.\n"); printf("\n"); wait_enter("Press ENTER when ready... "); printf("\n"); /* Reset data */ dyno_reset(); /* dyno data */ reset_results(); tv0=diag_os_getms(); /* initial time */ ep = ecu_info; /* ECU data */ /* Measures */ while (1) { /* measure RPM */ rpm = RUN_MEASURE_DATA(RPM_PID, ep); if (rpm < 0) { printf("invalid RPM !\n"); break; } if (rpm_previous == 0) { /* this is the first measure */ printf("Starting dyno (min rpm=%d)\n", rpm); printf("Number of measures : "); } /* if RPM starts decreasing, stop run */ if (rpm < rpm_previous) { printf(" (max rpm=%d)\n", rpm_previous); break; } /* get elapsed time */ tv=diag_os_getms(); elapsed = (int) (tv - tv0); /* Add measure */ dyno_add_measure(elapsed, rpm); /* Display number of measures */ nb++; for (i = 0; i < length; i++) { printf(""); } length = printf("%d (%d RPM) ", nb, rpm); fflush(stdout); /* force displaying now (may slow down dyno...) */ rpm_previous = rpm; } /* measure gear ratio */ rpm_previous = rpm; speed = RUN_MEASURE_DATA(SPEED_PID, ep); /* m/s * 1000 */ rpm = RUN_MEASURE_DATA(RPM_PID, ep); if ((speed < 0) || (rpm < 0)) { printf("invalid RUN_MEASURE_DATA result !\n"); return CMD_FAILED; } dyno_set_gear(speed, (rpm_previous + rpm) / 2); /* display dyno time */ tv=diag_os_getms(); elapsed = (int) (tv - tv0); printf("Dyno time : %ds.\n", (elapsed/1000)); printf("\n"); return CMD_OK; }
static int cmd_dyno_loss(UNUSED(int argc), UNUSED(char **argv)) { ecu_data *ep; int speed; /* measured speed */ int speed_previous = 0; /* previous speed */ unsigned long tv0, tv; int elapsed; /* elapsed time */ int i, length; /* length of printed string */ int nb = 0; /* number of measures */ //make sure we have an L3 connection first ! if (global_l3_conn == NULL) { fprintf(stderr, FLFMT "Error: there must be an active L3 connection!\n", FL); return CMD_FAILED; } /* Check mass */ if (dyno_get_mass() <= 0) { printf("The mass of the vehicle has not been set, please set the mass first\n"); return CMD_OK; } /* Show instructions */ printf("To proceed loss determination, reach the maximum speed you will reach during\n"); printf("dyno, then push in the clutch, leaving the car in gear. Allow the car to coast\n"); printf("down to the lowest possible speed. Press ENTER when finished.\n"); printf("\n"); wait_enter("Press ENTER when ready... "); printf("\n"); /* Reset data */ dyno_loss_reset(); /* dyno data */ reset_results(); tv0=diag_os_getms(); /* initial time */ ep = ecu_info; /* ECU data */ /* exclude 1st measure */ speed_previous = LOSS_MEASURE_DATA(SPEED_PID, ep); /* m/s * 1000 */ if (speed_previous < 0) { printf("invalid speed !\n"); return CMD_FAILED; } printf("Starting loss determination (max speed=%d km/h)\n", SPEED_ISO_TO_KMH(speed_previous)); printf("Number of measures : 0"); length = 1; /* loss measures */ while (1) { /* measure speed */ speed = LOSS_MEASURE_DATA(SPEED_PID, ep); /* m/s * 1000 */ if (speed < 0) { printf("invalid speed !\n"); break; } /* get elapsed time */ tv=diag_os_getms(); elapsed = (int) (tv - tv0); if (speed < speed_previous) { /* Add measure */ dyno_loss_add_measure(elapsed, speed); nb++; speed_previous = speed; } if (pressed_enter() != 0) { /* ENTER pressed : stops */ printf("Number of measures : %d (min speed=%d km/h)\n", nb, SPEED_ISO_TO_KMH(speed)); break; } if (speed_previous == speed) { /* measure added: update display */ /* erase previous measure */ for (i = 0; i < length; i++) { printf(""); } /* Display new measure */ length = printf("%d (speed=%d km/h, d=%5.5f, f=%4.2f)\t ", nb, SPEED_ISO_TO_KMH(speed), dyno_loss_get_d(), dyno_loss_get_f()); fflush(stdout); /* force displaying now (may slow down dyno...) */ } } /* display dyno time */ //elapsed = MILLIS(tv) - MILLIS(tv0); tv=diag_os_getms(); elapsed= (int) (tv - tv0); printf("d=%5.5f, f=%4.2f\n", dyno_loss_get_d(), dyno_loss_get_f()); printf("Loss determination time : %ds.\n", (elapsed/1000)); printf("\n"); /* now dyno loss has been done */ dyno_loss_done = 1; return CMD_OK; }