Пример #1
0
/*
 * gets called from the GUI to get updated telemetry.
 * so whilst we are at it we check button status too and
 * act accordingly.
 *
 */
void
FortiusController::getRealtimeData(RealtimeData &rtData)
{
    // Added Distance and Steering here but yet to RealtimeData

    int Buttons, Status, Steering;
    double Power, HeartRate, Cadence, Speed, Distance;

    if(!myFortius->isRunning())
    {
        QMessageBox msgBox;
        msgBox.setText("Cannot Connect to Fortius");
        msgBox.setIcon(QMessageBox::Critical);
        msgBox.exec();
        parent->Stop(1);
        return;
    }
    // get latest telemetry
    myFortius->getTelemetry(Power, HeartRate, Cadence, Speed, Distance, Buttons, Steering, Status);

    //
    // PASS BACK TELEMETRY
    //
    rtData.setWatts(Power);
    rtData.setHr(HeartRate);
    rtData.setCadence(Cadence);
    rtData.setSpeed(Speed);


    // post processing, probably not used
    // since its used to compute power for
    // non-power devices, but we may add other
    // calculations later that might apply
    // means we could calculate power based
    // upon speed even for a Fortius!
    processRealtimeData(rtData);

    //
    // BUTTONS
    //

    // ignore other buttons if calibrating
    if (parent->calibrating) return;

    // ADJUST LOAD
    if ((Buttons&FT_PLUS)) parent->Higher();
    
    if ((Buttons&FT_MINUS)) parent->Lower();

    // LAP/INTERVAL
    if (Buttons&FT_ENTER) parent->newLap();

    // CANCEL
    if (Buttons&FT_CANCEL) parent->Stop(0);

    // Ensure we set the UI load to the actual setpoint from the fortius (as it will clamp)
    rtData.setLoad(myFortius->getLoad());
    rtData.setSlope(myFortius->getGradient());
}
/*
 * gets called from the GUI to get updated telemetry.
 * so whilst we are at it we check button status too and
 * act accordingly.
 *
 */
void
ComputrainerController::getRealtimeData(RealtimeData &rtData)
{
    int Buttons, Status;
    bool calibration;
    double Power, HeartRate, Cadence, Speed, RRC, Load, Gradient;
    uint8_t ss[24];

    if(!myComputrainer->isRunning())
    {
        QMessageBox msgBox;
        msgBox.setText(tr("Cannot Connect to Computrainer"));
        msgBox.setIcon(QMessageBox::Critical);
        msgBox.exec();
        parent->Stop(1);
        return;
    }

    // get latest telemetry
    myComputrainer->getTelemetry(Power, HeartRate, Cadence, Speed,
                        RRC, calibration, Buttons, ss, Status);

	// Check CT if F3 has been pressed for Calibration mode FIRST befoire we do anything else
    if (Buttons&CT_F3) {
        parent->Calibrate();
    }

    // ignore other buttons and anything else if calibrating
    if (parent->calibrating) return;

    //
    // PASS BACK TELEMETRY
    //
    rtData.setWatts(Power);
    rtData.setHr(HeartRate);
    rtData.setCadence(Cadence);
    rtData.setSpeed(Speed);

    memcpy(rtData.spinScan, ss, 24);

    // post processing, probably not used
    // since its used to compute power for
    // non-power devices, but we may add other
    // calculations later that might apply
    // means we could calculate power based
    // upon speed even for CT!
    processRealtimeData(rtData);

    //
    // BUTTONS
    //

    // ADJUST LOAD & GRADIENT
    Load = myComputrainer->getLoad();
    Gradient = myComputrainer->getGradient();
	// the calls to the parent will determine which mode we are on (ERG/SPIN) and adjust load/slop appropiately
    if ((Buttons&CT_PLUS) && !(Buttons&CT_F3)) {
            parent->Higher();
    }
    if ((Buttons&CT_MINUS) && !(Buttons&CT_F3)) {
            parent->Lower();
    }
    rtData.setLoad(Load);
	rtData.setSlope(Gradient);

#if 0 // F3 now toggles calibration
    // FFWD/REWIND
    if ((Buttons&CT_PLUS) && (Buttons&CT_F3)) {
           parent->FFwd();
    }
    if ((Buttons&CT_MINUS) && (Buttons&CT_F3)) {
           parent->Rewind();
    }
#endif

    // LAP/INTERVAL
    if (Buttons&CT_F1 && !(Buttons&CT_F3)) {
        parent->newLap();
    }
    if ((Buttons&CT_F1) && (Buttons&CT_F3)) {
           parent->FFwdLap();
    }

    // if Buttons == 0 we just pressed stop!
    if (Buttons&CT_RESET) {
        parent->Stop(0);
    }

    // displaymode
    if (Buttons&CT_F2) {
        parent->nextDisplayMode();
    }
}