diff options
Diffstat (limited to 'src/modbus.c')
| -rw-r--r-- | src/modbus.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/src/modbus.c b/src/modbus.c index 3fae070..d5bd27f 100644 --- a/src/modbus.c +++ b/src/modbus.c @@ -1,31 +1,16 @@ #include "modbus.h" -/** @ingroup util_crc16 - Processor-independent CRC-16 calculation. - Polynomial: x^16 + x^15 + x^2 + 1 (0xA001)<br> - Initial value: 0xFFFF +/* Static function prototypes */ +static MB_StatusTypeDef modbus_transaction(uint8_t func, + modbus_slave_device *device, + uint16_t rw_addr, int read_num, + uint16_t write_value); - This CRC is normally used in disk-drive controllers. +static uint16_t crc16_update(uint16_t crc, uint8_t a); - @param uint16_t crc (0x0000..0xFFFF) - @param uint8_t a (0x00..0xFF) - @return calculated CRC (0x0000..0xFFFF) -*/ -static uint16_t crc16_update(uint16_t crc, uint8_t a) -{ - int i; - crc ^= a; - for (i = 0; i < 8; ++i) { - if (crc & 1) - crc = (crc >> 1) ^ 0xA001; - else - crc = (crc >> 1); - } - return crc; -} void ClearResponseBuffer(modbus_slave_device *device) { @@ -47,8 +32,10 @@ MB_StatusTypeDef WriteSingleRegister(modbus_slave_device *device, uint16_t reg_a return modbus_transaction(write_single_reg, device, reg_addr, 1, write_val); } -MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device, - uint16_t rw_addr, int read_num, uint16_t write_value) +static MB_StatusTypeDef modbus_transaction(uint8_t func, + modbus_slave_device *device, + uint16_t rw_addr, int read_num, + uint16_t write_value) { uint16_t adu[256], adu_currsize=0; MB_StatusTypeDef MB_status = MB_OK; @@ -153,3 +140,28 @@ MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device, return MB_status; } +/** @ingroup util_crc16 + Processor-independent CRC-16 calculation. + + Polynomial: x^16 + x^15 + x^2 + 1 (0xA001)<br> + Initial value: 0xFFFF + + This CRC is normally used in disk-drive controllers. + + @param uint16_t crc (0x0000..0xFFFF) + @param uint8_t a (0x00..0xFF) + @return calculated CRC (0x0000..0xFFFF) +*/ +static uint16_t crc16_update(uint16_t crc, uint8_t a) +{ + int i; + crc ^= a; + for (i = 0; i < 8; ++i) { + if (crc & 1) + crc = (crc >> 1) ^ 0xA001; + else + crc = (crc >> 1); + } + + return crc; +} |
