void QedGroupControl::step(QmcTime::Packet *packet) { double stepPosition = QedApp::timevalToSeconds(packet->position); console->post(QedApp::DebugProtocol, "GroupControl::step: stepping to time %.2f, delta=%.2f, state=%s", stepPosition, my.realDelta, timeState()); if ((packet->source == QmcTime::ArchiveSource && ((packet->state == QmcTime::ForwardState && my.timeState != ForwardState) || (packet->state == QmcTime::BackwardState && my.timeState != BackwardState))) || sideStep(stepPosition, my.realPosition, my.realDelta)) return adjustWorldView(packet, false); my.pmtimeState = packet->state; my.position = packet->position; my.realPosition = stepPosition; adjustStep(packet); fetch(); if (isActive(packet)) newButtonState(packet->state, packet->mode, isRecording(packet)); }
// // Received a Set or a VCRMode requiring us to adjust our state // and possibly rethink everything. This can result from a time // control position change, delta change, direction change, etc. // void QedGroupControl::adjustWorldView(QmcTime::Packet *packet, bool vcrMode) { my.delta = packet->delta; my.position = packet->position; my.realDelta = QedApp::timevalToSeconds(packet->delta); my.realPosition = QedApp::timevalToSeconds(packet->position); console->post("QedGroupControl::adjustWorldView: " "delta=%.2f position=%.2f (%s) state=%s", my.realDelta, my.realPosition, QedApp::timeString(my.realPosition), timeState()); QmcTime::State state = packet->state; if (isArchiveSource()) { if (packet->state == QmcTime::ForwardState) adjustArchiveWorldViewForward(packet, vcrMode); else if (packet->state == QmcTime::BackwardState) adjustArchiveWorldViewBackward(packet, vcrMode); else adjustArchiveWorldViewStopped(packet, vcrMode); } else if (state != QmcTime::StoppedState) adjustLiveWorldViewForward(packet); else adjustLiveWorldViewStopped(packet); }
void GroupControl::adjustArchiveWorldViewBackward(QmcTime::Packet *packet, bool setup) { console->post("GroupControl::adjustArchiveWorldViewBackward"); my.timeState = BackwardState; int setmode = PM_MODE_INTERP; int delta = packet->delta.tv_sec; if (packet->delta.tv_usec == 0) { setmode |= PM_XTB_SET(PM_TIME_SEC); } else { delta = delta * 1000 + packet->delta.tv_usec / 1000; setmode |= PM_XTB_SET(PM_TIME_MSEC); } // // X-Axis _min_ becomes packet->position. // Rest of (following) time window filled in using packet->delta. // int last = my.samples - 1; double tolerance = my.realDelta / 20.0; // 5% of the sample interval double position = my.realPosition; double left = position - (my.realDelta * last); double right = position; double interval = pmchart->timeAxis()->scaleValue((double)delta, my.visible); for (int i = 0; i <= last; i++, position -= my.realDelta) { if (setup == false && fuzzyTimeMatch(my.timeData[i], position, tolerance) == true) { continue; } my.timeData[i] = position; struct timeval timeval; __pmtimevalFromReal(position, &timeval); setArchiveMode(setmode, &timeval, -delta); console->post("Fetching data[%d] at %s", i, timeString(position)); fetch(); if (i == last) // refreshGadgets() finishes up last one break; console->post("GroupControl::adjustArchiveWorldViewBackward: " "setting time position[%d]=%.2f[%s] state=%s count=%d", i, position, timeString(position), timeState(), gadgetCount()); for (int j = 0; j < gadgetCount(); j++) my.gadgetsList.at(j)->updateValues(false, false, my.samples, my.visible, left, right, interval); } bool active = isActive(packet); if (setup) packet->state = QmcTime::StoppedState; if (active) newButtonState(packet->state, packet->mode, pmchart->isTabRecording()); pmtime->setArchivePosition(&packet->position); pmtime->setArchiveInterval(&packet->delta); refreshGadgets(active); }
// // Received a Set or a VCRMode requiring us to adjust our state // and possibly rethink everything. This can result from a time // control position change, delta change, direction change, etc. // void GroupControl::adjustWorldView(QmcTime::Packet *packet, bool vcrMode) { my.delta = packet->delta; my.position = packet->position; my.realDelta = __pmtimevalToReal(&packet->delta); my.realPosition = __pmtimevalToReal(&packet->position); console->post("GroupControl::adjustWorldView: " "sh=%d vh=%d delta=%.2f position=%.2f (%s) state=%s", my.samples, my.visible, my.realDelta, my.realPosition, timeString(my.realPosition), timeState()); QmcTime::State state = packet->state; if (isArchiveSource()) { if (packet->state == QmcTime::ForwardState) adjustArchiveWorldViewForward(packet, vcrMode); else if (packet->state == QmcTime::BackwardState) adjustArchiveWorldViewBackward(packet, vcrMode); else adjustArchiveWorldViewStopped(packet, vcrMode); } else if (state != QmcTime::StoppedState) adjustLiveWorldViewForward(packet); else adjustLiveWorldViewStopped(packet); }
/*! \internal */ int NeoBattery::getTimeToFull() { if (!isSmartBattery) return 0; qLog(PowerManagement) << __PRETTY_FUNCTION__; QString timeToFullFile; if (QFileInfo("/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_full_now").exists()) { //freerunner timeToFullFile = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_full_now"; } int time = 0; QFile timeState( timeToFullFile); timeState.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream in(&timeToFullFile); in >> time; timeState.close(); qLog(PowerManagement) << time/60; return time/60; }
// // Fetch all metric values across all gadgets, and also update the // unified time axis. // void GroupControl::step(QmcTime::Packet *packet) { double stepPosition = __pmtimevalToReal(&packet->position); console->post(PmChart::DebugProtocol, "GroupControl::step: stepping to time %.2f, delta=%.2f, state=%s", stepPosition, my.realDelta, timeState()); if ((packet->source == QmcTime::ArchiveSource && ((packet->state == QmcTime::ForwardState && my.timeState != ForwardState) || (packet->state == QmcTime::BackwardState && my.timeState != BackwardState))) || sideStep(stepPosition, my.realPosition, my.realDelta)) return adjustWorldView(packet, false); my.pmtimeState = packet->state; my.position = packet->position; my.realPosition = stepPosition; int last = my.samples - 1; if (packet->state == QmcTime::ForwardState) { // left-to-right (all but 1st) if (my.samples > 1) memmove(&my.timeData[1], &my.timeData[0], sizeof(double) * last); my.timeData[0] = my.realPosition; } else if (packet->state == QmcTime::BackwardState) { // right-to-left if (my.samples > 1) memmove(&my.timeData[0], &my.timeData[1], sizeof(double) * last); my.timeData[last] = my.realPosition - torange(my.delta, last); } fetch(); bool active = isActive(packet); if (isActive(packet)) newButtonState(packet->state, packet->mode, pmchart->isTabRecording()); refreshGadgets(active); }
// // Drive all updates into each gadget (refresh the display) // void GroupControl::refreshGadgets(bool active) { #if DESPERATE for (int s = 0; s < my.samples; s++) console->post(PmChart::DebugProtocol, "GroupControl::refreshGadgets: timeData[%2d] is %.2f (%s)", s, my.timeData[s], timeString(my.timeData[s])); console->post(PmChart::DebugProtocol, "GroupControl::refreshGadgets: state=%s", timeState()); #endif for (int i = 0; i < gadgetCount(); i++) { my.gadgetsList.at(i)->updateValues(my.timeState != BackwardState, active, my.samples, my.visible, my.timeData[my.visible - 1], my.timeData[0], my.realDelta); } if (active) { updateTimeButton(); updateTimeAxis(); } }