send keepalives during blocking waits (clean, pH, chlorine settling)

This commit is contained in:
jess 2026-04-03 02:26:35 -07:00
parent 292a1a2e87
commit c1721dfd1f
1 changed files with 34 additions and 4 deletions

View File

@ -327,7 +327,14 @@ int echem_clean(float v_mv, float duration_s)
AD5940_LPDAC0WriteS(code, VZERO_CODE);
printf("Clean: %.0f mV for %.0f s\n", v_mv, duration_s);
vTaskDelay(pdMS_TO_TICKS((uint32_t)(duration_s * 1000.0f)));
uint32_t remain_ms = (uint32_t)(duration_s * 1000.0f);
while (remain_ms > 0) {
uint32_t chunk = remain_ms > 3000 ? 3000 : remain_ms;
vTaskDelay(pdMS_TO_TICKS(chunk));
remain_ms -= chunk;
if (remain_ms > 0) send_keepalive();
}
echem_shutdown_lp();
AD5940_AFECtrlS(AFECTRL_ALL, bFALSE);
@ -497,7 +504,15 @@ static uint32_t sample_phase(float v_mv, float t_dep_ms, float t_meas_ms,
AD5940_LPDAC0WriteS(mv_to_vbias_code(v_mv), VZERO_CODE);
/* settling — no samples recorded */
vTaskDelay(pdMS_TO_TICKS((uint32_t)t_dep_ms));
{
uint32_t remain_ms = (uint32_t)t_dep_ms;
while (remain_ms > 0) {
uint32_t chunk = remain_ms > 3000 ? 3000 : remain_ms;
vTaskDelay(pdMS_TO_TICKS(chunk));
remain_ms -= chunk;
if (remain_ms > 0) send_keepalive();
}
}
/* measurement — sample at ~50ms intervals */
uint32_t n_samples = (uint32_t)(t_meas_ms / 50.0f + 0.5f);
@ -541,7 +556,15 @@ int echem_chlorine(const ClConfig *cfg, ClPoint *out, uint32_t max_points,
printf("Cl: conditioning at %.0f mV for %.0f ms\n", cfg->v_cond, cfg->t_cond_ms);
AD5940_LPDAC0WriteS(mv_to_vbias_code(cfg->v_cond), VZERO_CODE);
vTaskDelay(pdMS_TO_TICKS((uint32_t)cfg->t_cond_ms));
{
uint32_t remain_ms = (uint32_t)cfg->t_cond_ms;
while (remain_ms > 0) {
uint32_t chunk = remain_ms > 3000 ? 3000 : remain_ms;
vTaskDelay(pdMS_TO_TICKS(chunk));
remain_ms -= chunk;
if (remain_ms > 0) send_keepalive();
}
}
printf("Cl: free chlorine at %.0f mV\n", cfg->v_free);
idx = sample_phase(cfg->v_free, cfg->t_dep_ms, cfg->t_meas_ms,
@ -579,7 +602,14 @@ int echem_ph_ocp(const PhConfig *cfg, PhResult *result)
AD5940_ADCBaseCfgS(&adc);
printf("pH: stabilizing %0.f s\n", cfg->stabilize_s);
vTaskDelay(pdMS_TO_TICKS((uint32_t)(cfg->stabilize_s * 1000.0f)));
uint32_t remain_ms = (uint32_t)(cfg->stabilize_s * 1000.0f);
while (remain_ms > 0) {
uint32_t chunk = remain_ms > 3000 ? 3000 : remain_ms;
vTaskDelay(pdMS_TO_TICKS(chunk));
remain_ms -= chunk;
if (remain_ms > 0) send_keepalive();
}
/* average N readings of V(SE0) and V(RE0) */
#define PH_AVG_N 10