diff options
Diffstat (limited to 'meta-facebook/meta-wedge/recipes-wedge/rackmon/rackmon/modbus.h')
-rw-r--r-- | meta-facebook/meta-wedge/recipes-wedge/rackmon/rackmon/modbus.h | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/meta-facebook/meta-wedge/recipes-wedge/rackmon/rackmon/modbus.h b/meta-facebook/meta-wedge/recipes-wedge/rackmon/rackmon/modbus.h index 435d518..1354feb 100644 --- a/meta-facebook/meta-wedge/recipes-wedge/rackmon/rackmon/modbus.h +++ b/meta-facebook/meta-wedge/recipes-wedge/rackmon/rackmon/modbus.h @@ -26,12 +26,27 @@ uint16_t modbus_crc16(char* buffer, size_t length); #define DEFAULT_TTY "/dev/ttyS3" #define DEFAULT_GPIO 45 -#define CHECK(x) { if((x) < 0) { \ - error = x; \ +extern int verbose; +#define dbg(...) if(verbose) { fprintf(stderr, __VA_ARGS__); } +#define log(...) { fprintf(stderr, __VA_ARGS__); } + +#define CHECK(expr) { int _check = expr; if((_check) < 0) { \ + error = _check; \ + goto cleanup; \ +} } +#define CHECKP(name, expr) { int _check = expr; if((_check) < 0) { \ + error = _check; \ + perror(#name); \ goto cleanup; \ } } +#define BAIL(...) { \ + fprintf(stderr, __VA_ARGS__); \ + fflush(stderr); \ + error = -1; \ + goto cleanup; \ +} -void waitfd(int fd); +int waitfd(int fd); void gpio_on(int fd); void gpio_off(int fd); void decode_hex_in_place(char* buf, size_t* len); @@ -41,6 +56,30 @@ void print_hex(FILE* f, char* buf, size_t len); // Read until maxlen bytes or no bytes in mdelay_us microseconds size_t read_wait(int fd, char* dst, size_t maxlen, int mdelay_us); -extern int verbose; + +typedef struct _modbus_req { + int tty_fd; + int gpio_fd; + const char *modbus_cmd; + size_t cmd_len; + int timeout; + size_t expected_len; + char *dest_buf; + size_t dest_limit; + size_t dest_len; + int scan; +} modbus_req; + +int modbuscmd(modbus_req *req); +// Modbus errors + +#define MODBUS_RESPONSE_TIMEOUT -4 +#define MODBUS_BAD_CRC -5 + +const char* modbus_strerror(int mb_err); + +// Modbus constants +#define MODBUS_READ_HOLDING_REGISTERS 3 + #endif |