60 lines
1.4 KiB
C
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);
|
|
}
|