#ifndef sdm_h #define sdm_h #include #include #include #include #include #include #define SDM_OK 0 #define SDM_EMPTY -1 #define SDM_MB_ERR -2 #define SDM_ADDR_ERR -3 #define SDM_NAME_ERR -4 #define SDM_TYPE_ERR -5 #define SDM_COMM_ERR -6 #define SDM_NOT_IMPL -7 #define SDM_MEM_ERR -8 enum sdm_types { SDMNONE, SDM230M, SDM630M, SDM72DM }; typedef struct { const char *name; const char *unit; const unsigned int regno; } sdm_registers_t; typedef union { uint16_t v16[2]; float vf; } __attribute__ ((packed)) sdm_values_t; typedef struct { modbus_t *mb; int address; char *friendlyname; enum sdm_types type; sdm_values_t *values; bool valid; } sdm_t; sdm_t *sdm_new(modbus_t *mb, int address, char *friendlyname, enum sdm_types type, int *error); int sdm_free(sdm_t *sdm); int sdm_update(sdm_t *sdm); const char *sdm_gettypename(sdm_t *sdm); int sdm_print_csv(sdm_t *sdm, char **csv); int sdm_print_csv_header(sdm_t *sdm, char **header); int sdm_print_json(sdm_t *sdm, char **json); #endif