#ifndef PCA9956B_BANK_MONITOR_H
#define PCA9956B_BANK_MONITOR_H
#include "pca9956b_fault_monitor.h"
/* Monotonic millisecond clock, including time spent inside the read callback.
 * One poll performs one bounded read. Polling cadence MUST be qualified on MCU.
 * Clock checks detect a late return; they cannot interrupt a hanging callback. */
typedef uint32_t (*pca_bank_clock_fn)(void *ctx);
typedef struct {
    pca_fault_snapshot chip[3];
    uint32_t first_read_ms,completed_ms;
} pca_bank_snapshot;
typedef struct {
    pca_fault_monitor chip[3];
    void *ctx;pca_fault_read_fn read;pca_bank_clock_fn clock;
    uint32_t first_read,last_poll,read_started,completed;
    uint8_t reads;
    bool bound,failed,complete;
} pca_bank_monitor;
/* A47 schematic addresses 0x15,0x19,0x65, populated 24+24+13 channels.
 * Eligible masks come from independent qualified powered-load evidence.
 * All-zero flags never grant output or prove healthy LEDs. */
bool pca_bank_init(pca_bank_monitor *b,void *ctx,pca_fault_read_fn read,
                   pca_bank_clock_fn clock,const uint32_t eligible[3]);
void pca_bank_poll(pca_bank_monitor *b);
bool pca_bank_get(const pca_bank_monitor *b,pca_bank_snapshot *out);
#endif
