#ifndef READ_CROSSBAR_H #define READ_CROSSBAR_H #include "spires_interface.h" #include typedef struct { double *time; /* Flat row-major values: voltages[sample * num_outputs + output]. */ double *voltages; } Crossbar_Output_Matrix; int run_ngspice(const char *crossbar_path); int read_crossbar(const char *data_path, size_t num_outputs, Crossbar_Output_Matrix *result); /* * Decode differential crossbar voltages into software readout values. * row_voltages is retained for API compatibility and is currently unused. */ int convert_output_to_software(size_t num_neurons, size_t num_outputs, size_t num_timesteps, const double *voltages, const double *resistances, double load_resistance, const conductance_mapping *mapping, const double *row_voltages, double spike_amplitude, double *decoded_outputs); /* Release storage allocated by read_crossbar(). */ void free_crossbar_output_matrix(Crossbar_Output_Matrix *result); #endif