#pragma once #include #include "libscomp_amalg.h" #define DACS 4 #define V_MAX 0x3FFFF #define V0 0x1FFFF struct dagon_ch { bool used; uint32_t volt; uint32_t end, step; }; struct dagon { bool conn[DACS]; struct dagon_ch ch[DACS]; }; extern volatile struct dagon dg; bool serial_vprintf(const char *fmt, va_list va); bool serial_printf(const char *fmt, ...); bool print_start(struct libscomp_line *l, const char *fmt, ...); #define unused __attribute__((unused)) #define declhandler(nm) \ int dagon_##nm(struct libscomp_line *, void *p unused) declhandler(con); declhandler(idn); declhandler(rmp); declhandler(rst); declhandler(set); declhandler(vlt); uint32_t spi_write(uint32_t v, size_t dac); uint32_t spi_transfer(uint32_t v, size_t dac); void spi_init(); void spi_reset(); #define spi_register(v) ((v) << 20) #define spi_set(v,d) spi_write(((v) & 0x3FFFF) << 2 | spi_register(1), d) #define spi_get(d) spi_transfer(spi_register(0b1001) << 20, d)