sdm2mqtt/sdm.h

57 lines
1.1 KiB
C

#ifndef sdm_h
#define sdm_h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdbool.h>
#include <modbus/modbus.h>
#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