работает с перемычкой на 1МГц 2%
This commit is contained in:
@@ -92,12 +92,9 @@ void App::update() {
|
||||
}
|
||||
if (state_ == AppState::SOLO_MEASURE) {
|
||||
const MeasureState ms = measurement_.update();
|
||||
if (ms == MeasureState::FAIL) { printStageStats(measurement_.stats(), requestedHz_); finish(false, measurement_.reason()); }
|
||||
if (ms == MeasureState::FAIL) { printStageStats(measurement_.stats(), actual_.actualHz); finish(false, measurement_.reason()); }
|
||||
else if (ms == MeasureState::PASS) {
|
||||
printStageStats(measurement_.stats(), requestedHz_);
|
||||
if (measurement_.reason() == FailReason::DATA_LOST) {
|
||||
sweepHadDataLoss_ = true; if (!firstDataLossHz_) firstDataLossHz_ = requestedHz_;
|
||||
}
|
||||
printStageStats(measurement_.stats(), actual_.actualHz);
|
||||
stagePassed();
|
||||
}
|
||||
} else if (state_ == AppState::MASTER_DISCOVER || state_ == AppState::MASTER_WAIT_READY ||
|
||||
@@ -156,13 +153,18 @@ void App::showMenu() {
|
||||
|
||||
void App::startTest() {
|
||||
params_ = store_.params(settings_); stageCount_ = frequencyPointCount(params_.startHz, params_.endHz, params_.stepHz);
|
||||
stageIndex_ = 0; pendingReason_ = FailReason::NONE; sweepHadDataLoss_ = false; firstDataLossHz_ = 0;
|
||||
stageIndex_ = 0; pendingReason_ = FailReason::NONE;
|
||||
if (!stageCount_) { finish(false, FailReason::UNSUPPORTED); return; }
|
||||
Log::printf("TEST", "starting role=%s stages=%lu", roleName(static_cast<Role>(settings_.role)), stageCount_);
|
||||
if (SERIAL_MINIMAL_LOG)
|
||||
Log::printf("CONFIG", "mode=%s range=%lu..%luHz step=%luHz accuracy=%.2f%% time=%lums repeats=%u duty=%u%% stages=%lu",
|
||||
roleName(static_cast<Role>(settings_.role)), params_.startHz, params_.endHz, params_.stepHz,
|
||||
if (SERIAL_MINIMAL_LOG) {
|
||||
char startText[12], endText[12], stepText[12];
|
||||
Display::formatFrequency(params_.startHz, startText, sizeof(startText));
|
||||
Display::formatFrequency(params_.endHz, endText, sizeof(endText));
|
||||
Display::formatFrequency(params_.stepHz, stepText, sizeof(stepText));
|
||||
Log::printf("CONFIG", "mode=%s range=%s..%s step=%s accuracy=%.2f%% time=%lums repeats=%u duty=%u%% stages=%lu",
|
||||
roleName(static_cast<Role>(settings_.role)), startText, endText, stepText,
|
||||
params_.accuracyPct, params_.testTimeMs, params_.repeats, params_.dutyPct, stageCount_);
|
||||
}
|
||||
printConfiguration();
|
||||
const Role role = static_cast<Role>(settings_.role);
|
||||
if (role == Role::SOLO) {
|
||||
@@ -214,11 +216,7 @@ bool App::startLocalMeasurement(float hz, float duty) {
|
||||
void App::stagePassed() {
|
||||
Log::printf("TEST", "stage %lu/%lu PASS; PWM stopping", stageIndex_ + 1, stageCount_);
|
||||
pwm_.stop();
|
||||
if (++stageIndex_ >= stageCount_) {
|
||||
if (sweepHadDataLoss_) { requestedHz_ = firstDataLossHz_; finish(false, FailReason::DATA_LOST); }
|
||||
else finish(true, FailReason::NONE);
|
||||
return;
|
||||
}
|
||||
if (++stageIndex_ >= stageCount_) { finish(true, FailReason::NONE); return; }
|
||||
if (static_cast<Role>(settings_.role) == Role::SOLO) { if (prepareStage()) state_ = AppState::SOLO_MEASURE; }
|
||||
else if (static_cast<Role>(settings_.role) == Role::MASTER) {
|
||||
requestedHz_ = frequencyAt(params_.startHz, params_.endHz, params_.stepHz, stageIndex_);
|
||||
@@ -329,7 +327,7 @@ void App::updateSlave() {
|
||||
if (state_ == AppState::SLAVE_MEASURE) {
|
||||
const MeasureState ms = measurement_.update();
|
||||
if (ms != MeasureState::PASS && ms != MeasureState::FAIL) return;
|
||||
printStageStats(measurement_.stats(), requestedHz_);
|
||||
printStageStats(measurement_.stats(), actual_.actualHz);
|
||||
pendingPacket_ = makePacket(MessageType::RESULT);
|
||||
pendingPacket_.passed = ms == MeasureState::PASS && measurement_.reason() == FailReason::NONE;
|
||||
pendingPacket_.reason = static_cast<uint8_t>(measurement_.reason()); pendingPacket_.periods = measurement_.stats().periods;
|
||||
@@ -357,8 +355,11 @@ void App::finish(bool pass, FailReason reason) {
|
||||
if (state_ != AppState::IDLE && state_ != AppState::MENU) radio_.end();
|
||||
state_ = AppState::FINISHED; pendingReason_ = reason;
|
||||
char one[24];
|
||||
if (pass) { snprintf(one, sizeof(one), "PASS %luHz-%lu", params_.startHz, params_.endHz); display_.show(one, "START=REPEAT"); }
|
||||
else { snprintf(one, sizeof(one), "FAIL AT %lu", requestedHz_); display_.show(one, failName(reason)); }
|
||||
if (pass) display_.show("PASS", "REPEAT");
|
||||
else {
|
||||
char frequency[12]; Display::formatFrequency(requestedHz_, frequency, sizeof(frequency));
|
||||
snprintf(one, sizeof(one), "FAIL %s", frequency); display_.show(one, failName(reason));
|
||||
}
|
||||
}
|
||||
|
||||
void App::printConfiguration() {
|
||||
@@ -388,9 +389,11 @@ void App::printStageStats(const StageStats &s, uint32_t hz) {
|
||||
if (!s.periods) return;
|
||||
const float measuredHz = static_cast<float>(receiver_.tickHz()) * s.periods / s.periodSum;
|
||||
const float measuredDuty = 100.0f * s.activeSum / s.periodSum;
|
||||
const char *status = s.reason == FailReason::NONE ? "PASS" :
|
||||
(s.reason == FailReason::DATA_LOST ? "DATA_LOST" : "FAIL");
|
||||
Log::printf("RESULT", "%luHz %s periods=%lu measured=%.2fHz duty=%.2f%% lost=%lu%s%s",
|
||||
hz, status, s.periods, measuredHz, measuredDuty, s.lostItems,
|
||||
char requestedText[12], measuredText[12];
|
||||
Display::formatFrequency(hz, requestedText, sizeof(requestedText));
|
||||
Display::formatFrequency(measuredHz, measuredText, sizeof(measuredText));
|
||||
const char *status = s.reason == FailReason::NONE ? "PASS" : "FAIL";
|
||||
Log::printf("RESULT", "%s %s periods=%lu measured=%s duty=%.2f%% skipped=%lu%s%s",
|
||||
requestedText, status, s.periods, measuredText, measuredDuty, s.droppedItems,
|
||||
s.reason == FailReason::NONE ? "" : " reason=", s.reason == FailReason::NONE ? "" : failName(s.reason));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user