summaryrefslogtreecommitdiff
path: root/src/modbus.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/modbus.c')
-rw-r--r--src/modbus.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/modbus.c b/src/modbus.c
index 98f40bd..4bacdaf 100644
--- a/src/modbus.c
+++ b/src/modbus.c
@@ -50,9 +50,8 @@ MB_StatusTypeDef WriteSingleRegister(modbus_slave_device *device, uint16_t reg_a
MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device,
uint16_t rw_addr, int read_num, uint16_t write_value)
{
- uint8_t adu[256], adu_currsize=0;
+ uint16_t adu[256], adu_currsize=0;
MB_StatusTypeDef MB_status = MB_OK;
- HAL_StatusTypeDef UART_status = HAL_OK;
/* Add the values that are relevant to all (supported) functions to the buffer */
adu[adu_currsize++] = device->slave_id;
@@ -84,8 +83,8 @@ MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device,
adu[adu_currsize] = 0;
/* Send data using HAL UART */
- for (int i=0; i < adu_currsize; i++) {
- UART_status = HAL_UART_Transmit(&device->modbus_uart, &adu[i], 1, MODBUS_TIMEOUT);
+ for (uint8_t i=0; i < adu_currsize; i++) {
+ MB_status = MB_UART_Tx(&device->modbus_uart, &adu[i], (uint8_t*)1, &device->modbus_timeout);
}
@@ -93,10 +92,10 @@ MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device,
adu_currsize = 0;
int rx_curr_bytesize = 8;
- while (rx_curr_bytesize > 0 && MB_status == MB_OK && UART_status == HAL_OK) {
- UART_status = HAL_UART_Receive(&device->modbus_uart, &adu[adu_currsize++],
- 1, MODBUS_TIMEOUT);
- if (UART_status == HAL_OK) {
+ while (rx_curr_bytesize > 0 && MB_status == MB_OK) {
+ MB_status = MB_UART_Rx(&device->modbus_uart, &adu[adu_currsize++],
+ (uint8_t*)1, &device->modbus_timeout);
+ if (MB_status == MB_OK) {
rx_curr_bytesize--;
if (adu_currsize == 5) {
if (adu[0] != device->slave_id) {
@@ -122,12 +121,9 @@ MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device,
}
}
}
- else {
- MB_status = UART_status + 3;
- }
}
- if (adu_currsize > 5 && MB_status == MB_OK && UART_status == HAL_OK) {
+ if (adu_currsize > 5 && MB_status == MB_OK) {
crc = 0xffff;
for (int i=0; i < adu_currsize - 2; i++) {
crc = crc16_update(crc, adu[i]);
@@ -140,7 +136,7 @@ MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device,
}
/* For read operations: disassemble ADU into words */
- if (MB_status == MB_OK && UART_status == HAL_OK) {
+ if (MB_status == MB_OK) {
switch (adu[1]) {
case read_input_regs:
case read_holding_regs:
@@ -152,11 +148,7 @@ MB_StatusTypeDef modbus_transaction(uint8_t func, modbus_slave_device *device,
}
break;
}
- }
-
- if (!MB_status && UART_status) {
- MB_status = UART_status + 3;
- }
+ }
return MB_status;
}