diff options
| author | Aditya Naik | 2020-02-12 19:52:53 -0500 |
|---|---|---|
| committer | Aditya Naik | 2020-02-12 19:52:53 -0500 |
| commit | d1ccc3f46e4b13e2382753aa22f6cf9fd538b741 (patch) | |
| tree | 2872e09a57d943f0a8970bb05b9e32685184f379 | |
| parent | 70c917e4caee129687d18b2788282ff7cd1509e8 (diff) | |
Static definitions for more funcs
| -rw-r--r-- | src/modbus.c | 58 | ||||
| -rw-r--r-- | src/modbus.h | 15 |
2 files changed, 41 insertions, 32 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; +} diff --git a/src/modbus.h b/src/modbus.h index a3835fa..48f7bb5 100644 --- a/src/modbus.h +++ b/src/modbus.h @@ -18,11 +18,11 @@ #define MAX_BUFSIZE 64 typedef struct { - uint8_t slave_id; - uint16_t response_buffer[MAX_BUFSIZE]; - uint8_t rbuf_len; - uint8_t modbus_timeout; - void* modbus_uart; + uint8_t slave_id; + uint16_t response_buffer[MAX_BUFSIZE]; + uint8_t rbuf_len; + uint8_t modbus_timeout; + void* modbus_uart; } modbus_slave_device; typedef enum { @@ -35,13 +35,10 @@ typedef enum { MB_CRC_ERR = 0x6 } MB_StatusTypeDef; +/* Platform-agnostic UART function pointers */ extern MB_StatusTypeDef (*MB_UART_Tx)(void*, uint16_t*, uint8_t*, uint8_t*); extern MB_StatusTypeDef (*MB_UART_Rx)(void*, uint16_t*, uint8_t*, uint8_t*); -MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device, - uint16_t rw_addr, int read_num, - uint16_t write_value); - MB_StatusTypeDef ReadHoldingRegisters(modbus_slave_device *device, uint16_t reg_addr, int read_num); |
