#ifndef MODBUS_H__ #define MODBUS_H__ 1 /* * Loosely modelled after AVR-RS485 by Yoshinori Kohyama (http://algobit.jp/), * available at https://github.com/kohyama/AVR-RS485/ * * All bugs by Jan "Yenya" Kasprzak :-) */ /* * Call this at the beginning of the program. */ void modbus_init(uint8_t unit_id); /* * Call this frequently. Returns 0 when no data was received * and the processing went on quickly. Returns 1 after potentially lengthy * packet processing. */ uint8_t modbus_poll(); typedef enum { MB_OK = 0, MB_ILLEGAL_FUNC = 1, MB_ILLEGAL_ADDR = 2, MB_ILLEGAL_VAL = 3, } mb_exception; #define MB_HOLD_REGS_BASE 0 // first register #define MB_N_HOLD_REGS 80 // total # of registers #define MB_N_HOLD_REGS_EEPROM 20 // the first N registers eeprom-backed extern uint16_t hold_regs[MB_N_HOLD_REGS]; #define mb_unit_id (hold_regs[0]) // MODBUS id in the first register uint8_t hold_reg_is_valid(uint16_t reg, uint16_t val); #endif /* MODBUS_H__ */