X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=firmware%2Fmodbus.h;h=3a3fcdf28e6fed2db6f6e929049b68b33d64a8ee;hb=ea6d804fc60dc33181c8c771de9093053ed9be33;hp=4218317c54f627dae421c996f57e04b4c73d2cc1;hpb=86f8e5bfd1c753034b9ca876dac7d18720ab8808;p=openparking.git diff --git a/firmware/modbus.h b/firmware/modbus.h old mode 100755 new mode 100644 index 4218317..3a3fcdf --- a/firmware/modbus.h +++ b/firmware/modbus.h @@ -8,7 +8,31 @@ * All bugs by Jan "Yenya" Kasprzak :-) */ -void modbus_init(); -void modbus_poll(); +/* + * 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__ */