moisture-detection/api/moisture_detector.c
2026-09-02 09:13:01 -06:00

60 lines
1.4 KiB
C

#include "moisture_detector.h"
#include <inttypes.h>
#include <stdio.h>
typedef struct {
int32_t reading;
uint32_t valid;
uint32_t idle;
uint32_t collect;
uint32_t saturated;
uint32_t errors;
int has_reading;
} moisture_session_t;
static moisture_session_t session;
void moisture_session_start(void) {
session = (moisture_session_t){0};
}
int moisture_detector_has_next(void) {
// nosemgrep: fixed-width integer input; no character buffer is written.
session.has_reading = scanf("%" SCNd32, &session.reading) == 1;
return session.has_reading;
}
int32_t moisture_detector_reading(void) {
return session.reading;
}
void moisture_record_error(int32_t reading) {
printf("error: negative=%" PRId32 "\n", reading);
++session.errors;
}
void moisture_record_idle(void) {
printf("idle: 0\n");
++session.valid;
++session.idle;
}
void moisture_record_collect(int32_t reading) {
printf("collect: %" PRId32 "\n", reading);
++session.valid;
++session.collect;
}
void moisture_record_saturated(int32_t reading) {
printf("saturated: %" PRId32 "\n", reading);
++session.valid;
++session.saturated;
}
void moisture_print_summary(void) {
printf("summary: valid=%" PRIu32 " idle=%" PRIu32 " collect=%" PRIu32
" saturated=%" PRIu32 " errors=%" PRIu32 "\n",
session.valid, session.idle, session.collect, session.saturated,
session.errors);
}