summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modbus.c58
-rw-r--r--src/modbus.h15
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);