RTC::ReturnCode_t Relay::onInitialize() { // Registration: InPort/OutPort/Service // <rtc-template block="registration"> // Set InPort buffers // Set OutPort buffer // Set service provider to Ports // Set service consumers to Ports // Set CORBA Service Ports // </rtc-template> // <rtc-template block="bind_config"> // Bind variables and configuration variable bindParameter("dataType", m_dataType, "TimedDouble"); bindParameter("switchOnPoint", m_switchOnPoint, "1"); bindParameter("switchOffPoint", m_switchOffPoint, "-1"); bindParameter("outputWhenOn", m_outputWhenOn, "1"); bindParameter("outputWhenOff", m_outputWhenOff, "-1"); // </rtc-template> configUpdate(); this->addConfigurationSetListener(ON_SET_CONFIG_SET, new DynamicPortConfigUpdateParam(this)); return RTC::RTC_OK; }
RTC::ReturnCode_t CoulombAndViscousFriction::onInitialize() { // Registration: InPort/OutPort/Service // <rtc-template block="registration"> // Set InPort buffers // Set OutPort buffer // Set service provider to Ports // Set service consumers to Ports // Set CORBA Service Ports // </rtc-template> // <rtc-template block="bind_config"> // Bind variables and configuration variable bindParameter("dataType", m_dataType, "TimedDouble"); bindParameter("offset", m_offset, "0"); bindParameter("gain", m_gain, "1"); // </rtc-template> configUpdate(); this->addConfigurationSetListener(ON_SET_CONFIG_SET, new DynamicPortConfigUpdateParam(this)); return RTC::RTC_OK; }
PerfPlot::PerfPlot() : STScurve(NULL), LTScurve(NULL), SBcurve(NULL), DAYcurve(NULL) { xsd = new PPTimeScaleDraw(QDateTime()); xsd->setTickLength(QwtScaleDiv::MajorTick, 3); setAxisScaleDraw(QwtPlot::xBottom, xsd); insertLegend(new QwtLegend(), QwtPlot::BottomLegend); setAxisTitle(yLeft, tr("Exponentially Weighted Average Stress")); setAxisTitle(xBottom, tr("Time (days)")); setAxisTitle(yRight, tr("Daily Stress")); enableAxis(yRight, true); static_cast<QwtPlotCanvas*>(canvas())->setFrameStyle(QFrame::NoFrame); setAxisMaxMinor(xBottom, 0); setAxisMaxMinor(yLeft, 0); setAxisMaxMinor(yRight, 0); QwtScaleDraw *sd = new QwtScaleDraw; sd->setTickLength(QwtScaleDiv::MajorTick, 3); setAxisScaleDraw(QwtPlot::yLeft, sd); sd = new QwtScaleDraw; sd->setTickLength(QwtScaleDiv::MajorTick, 3); setAxisScaleDraw(QwtPlot::yRight, sd); grid = new QwtPlotGrid(); grid->attach(this); configUpdate(); }
static void run(void) { int ret; struct pollfd pollfd[1]; pollfd[0].fd = configEventGetFd(); pollfd[0].events = POLLIN; for( ; ; ) { if(!config_run) break; ret = poll(pollfd, 1, PF_DEF_POLL_TIMEOUT_MSEC); if(ret <= 0) { if(ret < 0) { if(errno != EINTR) { perror(SERVICE_NAME "::poll"); exit(EXIT_FAILURE); } } } if(pollfd[0].revents & POLLIN) { config_run = configEventHandler(); } configUpdate(0); } }
RTC::ReturnCode_t RateLimiter::onInitialize() { // Registration: InPort/OutPort/Service // <rtc-template block="registration"> // Set InPort buffers // Set OutPort buffer // Set service provider to Ports // Set service consumers to Ports // Set CORBA Service Ports // </rtc-template> // <rtc-template block="bind_config"> // Bind variables and configuration variable bindParameter("dataType", m_dataType, "TimedDouble"); bindParameter("samplingTime", m_samplingTime, "0.01"); bindParameter("realTime", m_realTime, "OFF"); bindParameter("risingSlewRate", m_risingSlewRate, "1"); bindParameter("fallingSlewRate", m_fallingSlewRate, "-1"); // </rtc-template> configUpdate(); this->addConfigurationSetListener(ON_SET_CONFIG_SET, new DynamicPortConfigUpdateParam(this)); return RTC::RTC_OK; }
RTC::ReturnCode_t PIDController::onInitialize() { // Registration: InPort/OutPort/Service // <rtc-template block="registration"> // Set InPort buffers // Set OutPort buffer // Set service provider to Ports // Set service consumers to Ports // Set CORBA Service Ports // </rtc-template> // <rtc-template block="bind_config"> // Bind variables and configuration variable bindParameter("dataType", m_dataType, "TimedDouble"); bindParameter("samplingTime", m_samplingTime, "0.01"); bindParameter("realTime", m_realTime, "OFF"); bindParameter("proportional", m_proportional, "1"); bindParameter("derivative", m_derivative, "0"); bindParameter("integral", m_integral, "0"); bindParameter("type", m_type, "P"); bindParameter("alpha", m_alpha, "1"); bindParameter("beta", m_beta, "0"); // </rtc-template> configUpdate(); this->addConfigurationSetListener(ON_SET_CONFIG_SET, new DynamicPortConfigUpdateParam(this)); return RTC::RTC_OK; }
PerfPlot::PerfPlot() : STScurve(NULL), LTScurve(NULL), SBcurve(NULL), DAYcurve(NULL) { insertLegend(new QwtLegend(), QwtPlot::BottomLegend); setTitle(tr("Performance Manager")); setAxisTitle(yLeft, "Exponentially Weighted Average Stress"); setAxisTitle(xBottom, "Time (days)"); setAxisTitle(yRight, "Daily Stress"); enableAxis(yRight, true); grid = new QwtPlotGrid(); grid->attach(this); configUpdate(); }
int main(int argc, char **argv) { PFWatchdogRegister (argc, argv, EPFWD_MODE_REBOOT, 30); notifyInit(); configEventInit(); configInit(PFCONFIG_NAME); run(); configEventExit(); notifyExit(); configUpdate(1); PFWatchdogUnregister (); return 0; }
RealtimeWindow::RealtimeWindow(MainWindow *parent, TrainTool *trainTool, const QDir &home) : QWidget(parent) { // set home this->home = home; this->trainTool = trainTool; main = parent; deviceController = NULL; streamController = NULL; ergFile = NULL; // metric or imperial? boost::shared_ptr<QSettings> settings = GetApplicationSettings(); QVariant unit = settings->value(GC_UNIT); useMetricUnits = (unit.toString() == "Metric"); // main layout for the window main_layout = new QVBoxLayout(this); timer_layout = new QGridLayout(); // BUTTONS AND LCDS button_layout = new QHBoxLayout(); option_layout = new QHBoxLayout(); controls_layout = new QVBoxLayout(); deviceSelector = new QComboBox(this); streamSelector = new QComboBox(this); // get configured devices DeviceConfigurations all; Devices = all.getList(); streamSelector->addItem("No streaming", -1); for (int i=0; i<Devices.count(); i++) { // add streamers if ( Devices.at(i).type == DEV_GSERVER || Devices.at(i).type == DEV_GCLIENT ) streamSelector->addItem(Devices.at(i).name, i); // add data sources deviceSelector->addItem(Devices.at(i).name, i); } deviceSelector->setCurrentIndex(0); streamSelector->setCurrentIndex(0); recordSelector = new QCheckBox(this); recordSelector->setText(tr("Save")); recordSelector->setChecked(Qt::Checked); startButton = new QPushButton(tr("Start"), this); startButton->setMaximumHeight(100); pauseButton = new QPushButton(tr("Pause"), this); pauseButton->setMaximumHeight(100); stopButton = new QPushButton(tr("Stop"), this); stopButton->setMaximumHeight(100); button_layout->addWidget(startButton); button_layout->addWidget(pauseButton); button_layout->addWidget(stopButton); option_layout->addWidget(deviceSelector); option_layout->addSpacing(10); option_layout->addWidget(recordSelector); option_layout->addSpacing(10); option_layout->addWidget(streamSelector); // XXX NETWORK STREAMING DISABLED IN THIS RELEASE SO HIDE THE COMBO streamSelector->hide(); option_layout->addSpacing(10); controls_layout->addItem(option_layout); controls_layout->addItem(button_layout); // handle config changes connect(main, SIGNAL(configChanged()), this, SLOT(configUpdate())); connect(deviceSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(SelectDevice(int))); connect(recordSelector, SIGNAL(clicked()), this, SLOT(SelectRecord())); connect(streamSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(SelectStream(int))); connect(trainTool, SIGNAL(workoutSelected()), this, SLOT(SelectWorkout())); if (Devices.count() > 0) { connect(startButton, SIGNAL(clicked()), this, SLOT(Start())); connect(pauseButton, SIGNAL(clicked()), this, SLOT(Pause())); connect(stopButton, SIGNAL(clicked()), this, SLOT(Stop())); } else { connect(startButton, SIGNAL(clicked()), this, SLOT(warnnoConfig())); connect(pauseButton, SIGNAL(clicked()), this, SLOT(warnnoConfig())); connect(stopButton, SIGNAL(clicked()), this, SLOT(warnnoConfig())); } powerLabel = new QLabel(tr("WATTS"), this); powerLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); heartrateLabel = new QLabel(tr("BPM"), this); heartrateLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); speedLabel = new QLabel(useMetricUnits ? tr("KPH") : tr("MPH"), this); speedLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); cadenceLabel = new QLabel(tr("RPM"), this); cadenceLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); lapLabel = new QLabel(tr("Lap/Interval"), this); lapLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); loadLabel = new QLabel(tr("Load WATTS"), this); loadLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); distanceLabel = new QLabel(useMetricUnits ? tr("Distance (KM)") : tr("Distance (Miles)"), this); distanceLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); avgpowerLabel = new QLabel(tr("Avg WATTS"), this); avgpowerLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); avgheartrateLabel = new QLabel(tr("Avg BPM"), this); avgheartrateLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); avgspeedLabel = new QLabel(useMetricUnits ? tr("Avg KPH") : tr("Avg MPH"), this); avgspeedLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); avgcadenceLabel = new QLabel(tr("Avg RPM"), this); avgcadenceLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); avgloadLabel = new QLabel(tr("Avg Load WATTS"), this); avgloadLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); laptimeLabel = new QLabel(tr("LAP TIME"), this); laptimeLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); timeLabel = new QLabel(tr("TIME"), this); timeLabel->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); powerLCD = new QLCDNumber(this); powerLCD->setSegmentStyle(QLCDNumber::Filled); heartrateLCD = new QLCDNumber(this); heartrateLCD->setSegmentStyle(QLCDNumber::Filled); speedLCD = new QLCDNumber(this); speedLCD->setSegmentStyle(QLCDNumber::Filled); cadenceLCD = new QLCDNumber(this); cadenceLCD->setSegmentStyle(QLCDNumber::Filled); lapLCD = new QLCDNumber(this); lapLCD->setSegmentStyle(QLCDNumber::Filled); loadLCD = new QLCDNumber(this); loadLCD->setSegmentStyle(QLCDNumber::Filled); distanceLCD = new QLCDNumber(this); distanceLCD->setSegmentStyle(QLCDNumber::Filled); avgpowerLCD = new QLCDNumber(this); avgpowerLCD->setSegmentStyle(QLCDNumber::Filled); avgheartrateLCD = new QLCDNumber(this); avgheartrateLCD->setSegmentStyle(QLCDNumber::Filled); avgspeedLCD = new QLCDNumber(this); avgspeedLCD->setSegmentStyle(QLCDNumber::Filled); avgcadenceLCD = new QLCDNumber(this); avgcadenceLCD->setSegmentStyle(QLCDNumber::Filled); avgloadLCD = new QLCDNumber(this); avgloadLCD->setSegmentStyle(QLCDNumber::Filled); laptimeLCD = new QLCDNumber(this); laptimeLCD->setSegmentStyle(QLCDNumber::Filled); laptimeLCD->setNumDigits(9); timeLCD = new QLCDNumber(this); timeLCD->setSegmentStyle(QLCDNumber::Filled); timeLCD->setNumDigits(9); gridLayout = new QGridLayout(); gridLayout->addWidget(powerLabel, 1, 0); gridLayout->addWidget(cadenceLabel, 1, 1); gridLayout->addWidget(heartrateLabel, 1, 2); gridLayout->addWidget(speedLabel, 1, 3); gridLayout->addWidget(distanceLabel, 1, 4); gridLayout->addWidget(lapLabel, 1, 5); gridLayout->addWidget(powerLCD, 2, 0); gridLayout->addWidget(cadenceLCD, 2, 1); gridLayout->addWidget(heartrateLCD, 2, 2); gridLayout->addWidget(speedLCD, 2, 3); gridLayout->addWidget(distanceLCD, 2, 4); gridLayout->addWidget(lapLCD, 2, 5); gridLayout->addWidget(avgpowerLabel, 3, 0); gridLayout->addWidget(avgcadenceLabel, 3, 1); gridLayout->addWidget(avgheartrateLabel, 3, 2); gridLayout->addWidget(avgspeedLabel, 3, 3); gridLayout->addWidget(avgloadLabel, 3, 4); gridLayout->addWidget(loadLabel, 3, 5); gridLayout->addWidget(loadLCD, 4, 5); gridLayout->addWidget(avgpowerLCD, 4, 0); gridLayout->addWidget(avgcadenceLCD, 4, 1); gridLayout->addWidget(avgheartrateLCD, 4, 2); gridLayout->addWidget(avgspeedLCD, 4, 3); gridLayout->addWidget(avgloadLCD, 4, 4); gridLayout->setRowStretch(2, 4); gridLayout->setRowStretch(4, 3); // timers etc timer_layout->addWidget(timeLabel, 0, 0); timer_layout->addWidget(laptimeLabel, 0, 3); timer_layout->addWidget(timeLCD, 1, 0); timer_layout->addItem(controls_layout, 1,1); timer_layout->addWidget(laptimeLCD, 1, 3); timer_layout->setRowStretch(0, 1); timer_layout->setRowStretch(1, 4); // REALTIME PLOT rtPlot = new RealtimePlot(); connect(main, SIGNAL(configChanged()), rtPlot, SLOT(configChanged())); // COURSE PLOT ergPlot = new ErgFilePlot(0); ergPlot->setVisible(false); // LAYOUT main_layout->addWidget(ergPlot); main_layout->addItem(timer_layout); main_layout->addItem(gridLayout); main_layout->addWidget(rtPlot); displaymode=2; main_layout->setStretch(0,1); main_layout->setStretch(1,1); main_layout->setStretch(2,2); main_layout->setStretch(3, displaymode); // now the GUI is setup lets sort our control variables gui_timer = new QTimer(this); disk_timer = new QTimer(this); stream_timer = new QTimer(this); load_timer = new QTimer(this); session_time = QTime(); session_elapsed_msec = 0; lap_time = QTime(); lap_elapsed_msec = 0; recordFile = NULL; status = 0; status |= RT_RECORDING; // recording is on by default! - add others here status |= RT_MODE_ERGO; // ergo mode by default displayWorkoutLap = displayLap = 0; pwrcount = 0; cadcount = 0; hrcount = 0; spdcount = 0; lodcount = 0; load_msecs = total_msecs = lap_msecs = 0; displayWorkoutDistance = displayDistance = displayPower = displayHeartRate = displaySpeed = displayCadence = displayGradient = displayLoad = 0; avgPower= avgHeartRate= avgSpeed= avgCadence= avgLoad= 0; connect(gui_timer, SIGNAL(timeout()), this, SLOT(guiUpdate())); connect(disk_timer, SIGNAL(timeout()), this, SLOT(diskUpdate())); connect(stream_timer, SIGNAL(timeout()), this, SLOT(streamUpdate())); connect(load_timer, SIGNAL(timeout()), this, SLOT(loadUpdate())); // setup the controller based upon currently selected device setDeviceController(); rtPlot->replot(); }
PerformanceManagerWindow::PerformanceManagerWindow(Context *context) : GcWindow(context), context(context), active(false), isfiltered(false) { setControls(NULL); days = count = 0; sc = NULL; QVBoxLayout *vlayout = new QVBoxLayout; QHBoxLayout *PMPickerLayout = new QHBoxLayout; QLabel *PMSTSLabel = new QLabel(appsettings->value(this, GC_STS_ACRONYM,"STS").toString() + ":", this); PMSTSValue = new QLineEdit("0"); PMSTSValue->setReadOnly(true); PMSTSValue->setValidator(new QDoubleValidator(0,500,1,PMSTSValue)); PMPickerLayout->addWidget(PMSTSLabel); PMPickerLayout->addWidget(PMSTSValue); QLabel *PMLTSLabel = new QLabel(appsettings->value(this, GC_LTS_ACRONYM,"LTS").toString() + ":", this); PMLTSValue = new QLineEdit("0"); PMLTSValue->setReadOnly(true); PMLTSValue->setValidator(new QDoubleValidator(0,500,1,PMLTSValue)); PMPickerLayout->addWidget(PMLTSLabel); PMPickerLayout->addWidget(PMLTSValue); QLabel *PMSBLabel = new QLabel(appsettings->value(this, GC_SB_ACRONYM,"SB").toString() + ":", this); PMSBValue = new QLineEdit("0"); PMSBValue->setReadOnly(true); PMSBValue->setValidator(new QDoubleValidator(-500,500,1,PMSBValue)); PMPickerLayout->addWidget(PMSBLabel); PMPickerLayout->addWidget(PMSBValue); QLabel *PMDayLabel = new QLabel(tr("Day:"), this); PMDayValue = new QLineEdit(tr("no data")); PMPickerLayout->addWidget(PMDayLabel); PMPickerLayout->addWidget(PMDayValue); metricCombo = new QComboBox(this); metricCombo->addItem(tr("Use TSS"), "coggan_tss"); metricCombo->addItem(tr("Use BikeScore"), "skiba_bike_score"); metricCombo->addItem(tr("Use DanielsPoints"), "daniels_points"); metricCombo->addItem(tr("Use TRIMP"), "trimp_points"); metricCombo->addItem(tr("Use TRIMP 100"), "trimp_100_points"); metricCombo->addItem(tr("Use Trimp Zonal"), "trimp_zonal_points"); metricCombo->addItem(tr("Use Work (Kj)"), "total_work"); metricCombo->addItem(tr("Use Distance (km/mi)"), "total_distance"); QString metricName = appsettings->value(this, GC_PERF_MAN_METRIC, "skiba_bike_score").toString(); for (int i = 0; i < metricCombo->count(); ++i) { if (metricCombo->itemData(i).toString() == metricName) metricCombo->setCurrentIndex(i); } metric = metricCombo->itemData(metricCombo->currentIndex()).toString(); PMPickerLayout->addWidget(metricCombo); // date range QHBoxLayout *dateRangeLayout = new QHBoxLayout; PMdateRangefrom = new QLineEdit("0"); dateRangeLayout->addWidget(PMdateRangefrom); PMleftSlider = new QSlider(Qt::Horizontal); PMleftSlider->setTickPosition(QSlider::TicksBelow); PMleftSlider->setTickInterval(1); PMleftSlider->setMinimum(0); dateRangeLayout->addWidget(PMleftSlider); QLabel *dateRangeLabel = new QLabel(tr("to"),this); dateRangeLayout->addWidget(dateRangeLabel); PMrightSlider = new QSlider(Qt::Horizontal); PMrightSlider->setTickPosition(QSlider::TicksBelow); PMrightSlider->setTickInterval(1); PMrightSlider->setMinimum(0); dateRangeLayout->addWidget(PMrightSlider); PMdateRangeto = new QLineEdit("0"); dateRangeLayout->addWidget(PMdateRangeto); perfplot = new PerfPlot(); vlayout->addWidget(perfplot); vlayout->addLayout(dateRangeLayout); vlayout->addLayout(PMPickerLayout); setLayout(vlayout); PMpicker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft, QwtPicker::VLineRubberBand, QwtPicker::AlwaysOff, perfplot->canvas()); PMpicker->setStateMachine(new QwtPickerDragPointMachine); PMpicker->setRubberBandPen(GColor(CPLOTSELECT)); connect(PMpicker, SIGNAL(moved(const QPoint &)), SLOT(PMpickerMoved(const QPoint &))); connect(metricCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(metricChanged())); connect(context, SIGNAL(configChanged()), this, SLOT(configChanged())); connect(context, SIGNAL(configChanged()), perfplot, SLOT(configUpdate())); connect(context, SIGNAL(rideAdded(RideItem*)), this, SLOT(replot())); connect(context, SIGNAL(rideDeleted(RideItem*)), this, SLOT(replot())); connect(this, SIGNAL(rideItemChanged(RideItem*)), this, SLOT(rideSelected())); #ifdef GC_HAVE_LUCENE connect(context, SIGNAL(filterChanged()), this, SLOT(filterChanged())); #endif }