included jitter correction on client
This commit is contained in:
@@ -750,6 +750,7 @@ void StreamHub::OnWSCommand(const char *json, uint32 /*len*/, uint32 slotIdx) {
|
||||
else if (strcmp(type, "rearm") == 0) { HandleRearm(); }
|
||||
else if (strcmp(type, "trigStop") == 0) { HandleTrigStop(json); }
|
||||
else if (strcmp(type, "setTrigger") == 0) { HandleSetTrigger(json); }
|
||||
else if (strcmp(type, "forceTrigger") == 0) { HandleForceTrigger(); }
|
||||
else if (strcmp(type, "zoom") == 0) { HandleZoom(json, slotIdx); }
|
||||
else if (strcmp(type, "historyZoom") == 0) { HandleHistoryZoom(json, slotIdx); }
|
||||
else if (strcmp(type, "historyInfo") == 0) { HandleHistoryInfo(slotIdx); }
|
||||
@@ -1017,6 +1018,12 @@ void StreamHub::HandleRearm() {
|
||||
HandleArm();
|
||||
}
|
||||
|
||||
void StreamHub::HandleForceTrigger() {
|
||||
rearmPending_ = false;
|
||||
(void) trigger_.Force();
|
||||
BroadcastTriggerState();
|
||||
}
|
||||
|
||||
void StreamHub::HandleTrigStop(const char *json) {
|
||||
/* {"type":"trigStop","stopped":bool} — absent "stopped" toggles. */
|
||||
bool stopped = !trigger_.GetStopped();
|
||||
|
||||
@@ -140,6 +140,7 @@ private:
|
||||
void HandleRearm();
|
||||
void HandleTrigStop(const char *json);
|
||||
void HandleSetTrigger(const char *json);
|
||||
void HandleForceTrigger();
|
||||
void HandleZoom(const char *json, uint32 slotIdx);
|
||||
void HandleHistoryZoom(const char *json, uint32 slotIdx);
|
||||
void HandleHistoryInfo(uint32 slotIdx);
|
||||
|
||||
@@ -14,6 +14,8 @@ TriggerEngine::TriggerEngine()
|
||||
stopped_(false),
|
||||
prevValue_(0.0),
|
||||
prevValid_(false),
|
||||
lastTime_(0.0),
|
||||
lastTimeValid_(false),
|
||||
trigTime_(0.0),
|
||||
firedPreSec_(0.0),
|
||||
firedPostSec_(0.0),
|
||||
@@ -82,6 +84,11 @@ bool TriggerEngine::GetStopped() const {
|
||||
void TriggerEngine::CheckSample(float64 t, float64 v) {
|
||||
(void) mutex_.FastLock();
|
||||
|
||||
/* Track the newest watched timestamp in every state so Force() has a
|
||||
* reference time to latch the capture window around. */
|
||||
lastTime_ = t;
|
||||
lastTimeValid_ = true;
|
||||
|
||||
if (state_ != kTrigArmed) {
|
||||
mutex_.FastUnLock();
|
||||
return;
|
||||
@@ -122,6 +129,25 @@ void TriggerEngine::CheckSample(float64 t, float64 v) {
|
||||
mutex_.FastUnLock();
|
||||
}
|
||||
|
||||
bool TriggerEngine::Force() {
|
||||
(void) mutex_.FastLock();
|
||||
|
||||
bool ok = lastTimeValid_ && (state_ != kTrigCollecting);
|
||||
if (ok) {
|
||||
state_ = kTrigCollecting;
|
||||
trigTime_ = lastTime_;
|
||||
firedPreSec_ = config_.windowSec * config_.prePercent / 100.0;
|
||||
firedPostSec_ = config_.windowSec - firedPreSec_;
|
||||
firedValid_ = true;
|
||||
REPORT_ERROR_STATIC(MARTe::ErrorManagement::Information,
|
||||
"TriggerEngine: forced at t=%.6f (pre=%.4fs post=%.4fs)",
|
||||
trigTime_, firedPreSec_, firedPostSec_);
|
||||
}
|
||||
|
||||
mutex_.FastUnLock();
|
||||
return ok;
|
||||
}
|
||||
|
||||
TrigState TriggerEngine::GetState() const {
|
||||
(void) mutex_.FastLock();
|
||||
TrigState ret = state_;
|
||||
|
||||
@@ -106,6 +106,15 @@ public:
|
||||
*/
|
||||
void CheckSample(float64 t, float64 v);
|
||||
|
||||
/**
|
||||
* @brief Fire the trigger unconditionally at the most recent sample time of
|
||||
* the watched signal, latching the pre/post window exactly as CheckSample
|
||||
* does. Any state except COLLECTING → COLLECTING.
|
||||
* @return false when no sample has been seen yet, or a capture is already
|
||||
* being collected.
|
||||
*/
|
||||
bool Force();
|
||||
|
||||
/** @return Current FSM state. */
|
||||
TrigState GetState() const;
|
||||
|
||||
@@ -127,6 +136,8 @@ private:
|
||||
bool stopped_;
|
||||
float64 prevValue_; ///< Last sample (edge detection)
|
||||
bool prevValid_; ///< First-sample guard in ARMED state
|
||||
float64 lastTime_; ///< Timestamp of the newest watched sample
|
||||
bool lastTimeValid_;///< true once a watched sample has been seen
|
||||
float64 trigTime_; ///< Latched trigger time (Unix s)
|
||||
float64 firedPreSec_; ///< Window pre-part latched at fire time
|
||||
float64 firedPostSec_; ///< Window post-part latched at fire time
|
||||
|
||||
Reference in New Issue
Block a user