1 /*
2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited
3 */
4
5 #include <mbmaster.h>
6 #include "../pdu/pdu.h"
7 #include "main_process.h"
8
9 /* function code 0x01 */
mbmaster_read_coils(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t start_addr,uint16_t quantity,uint8_t * respond_buf,uint8_t * respond_count,uint32_t timeout)10 mb_status_t mbmaster_read_coils(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t start_addr,
11 uint16_t quantity, uint8_t *respond_buf, uint8_t *respond_count, uint32_t timeout)
12 {
13 mb_status_t status = MB_SUCCESS;
14 status = mbmaster_main_type1_process(req_handler, FUNC_CODE_READ_COILS, slave_addr, start_addr, quantity,
15 respond_buf, respond_count, timeout);
16 return status;
17 }
18
19 /* function code 0x02 */
mbmaster_read_discrete_inputs(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t start_addr,uint16_t quantity,uint8_t * respond_buf,uint8_t * respond_count,uint32_t timeout)20 mb_status_t mbmaster_read_discrete_inputs(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t start_addr,
21 uint16_t quantity, uint8_t *respond_buf, uint8_t *respond_count,
22 uint32_t timeout)
23 {
24 mb_status_t status = MB_SUCCESS;
25 status = mbmaster_main_type1_process(req_handler, FUNC_CODE_READ_DISCRETE_INPUTS, slave_addr, start_addr,
26 quantity, respond_buf, respond_count, timeout);
27 return status;
28 }
29
30 /* function code 0x03 */
mbmaster_read_holding_registers(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t start_addr,uint16_t quantity,uint8_t * respond_buf,uint8_t * respond_count,uint32_t timeout)31 mb_status_t mbmaster_read_holding_registers(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t start_addr,
32 uint16_t quantity, uint8_t *respond_buf, uint8_t *respond_count,
33 uint32_t timeout)
34 {
35 mb_status_t status = MB_SUCCESS;
36 status = mbmaster_main_type1_process(req_handler, FUNC_CODE_READ_HOLDING_REGISTERS, slave_addr, start_addr,
37 quantity, respond_buf, respond_count, timeout);
38 return status;
39 }
40
41 /* function code 0x04 */
mbmaster_read_input_registers(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t start_addr,uint16_t quantity,uint8_t * respond_buf,uint8_t * respond_count,uint32_t timeout)42 mb_status_t mbmaster_read_input_registers(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t start_addr,
43 uint16_t quantity, uint8_t *respond_buf, uint8_t *respond_count,
44 uint32_t timeout)
45 {
46 mb_status_t status = MB_SUCCESS;
47 status = mbmaster_main_type1_process(req_handler, FUNC_CODE_READ_INPUT_REGISTERS, slave_addr, start_addr,
48 quantity, respond_buf, respond_count, timeout);
49 return status;
50 }
51
52 /* function code 0x05 */
mbmaster_write_single_coil(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t coil_addr,uint16_t coil_value,uint16_t * resp_addr,uint16_t * resp_value,uint8_t * exception_code,uint32_t timeout)53 mb_status_t mbmaster_write_single_coil(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t coil_addr,
54 uint16_t coil_value, uint16_t *resp_addr, uint16_t *resp_value,
55 uint8_t *exception_code, uint32_t timeout)
56 {
57 mb_status_t status = MB_SUCCESS;
58 status = mbmaster_main_type2_process(req_handler, FUNC_CODE_WRITE_SINGLE_COIL, slave_addr, coil_addr,
59 coil_value, resp_addr, resp_value, exception_code, timeout);
60 return status;
61 }
62
63 /* function code 0x06 */
mbmaster_write_single_register(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t register_addr,uint16_t register_value,uint16_t * resp_addr,uint16_t * resp_value,uint8_t * exception_code,uint32_t timeout)64 mb_status_t mbmaster_write_single_register(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t register_addr,
65 uint16_t register_value, uint16_t *resp_addr, uint16_t *resp_value,
66 uint8_t *exception_code, uint32_t timeout)
67 {
68 mb_status_t status = MB_SUCCESS;
69 status = mbmaster_main_type2_process(req_handler, FUNC_CODE_WRITE_SINGLE_REGISTERS, slave_addr, register_addr,
70 register_value, resp_addr, resp_value, exception_code, timeout);
71 return status;
72 }
73
74 /* function code 0x0F */
mbmaster_write_multiple_coils(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t start_addr,uint16_t quantity,uint8_t * outputs_buf,uint16_t * resp_addr,uint16_t * resp_quantity,uint8_t * exception_code,uint32_t timeout)75 mb_status_t mbmaster_write_multiple_coils(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t start_addr,
76 uint16_t quantity, uint8_t *outputs_buf, uint16_t *resp_addr,
77 uint16_t *resp_quantity, uint8_t *exception_code, uint32_t timeout)
78 {
79 mb_status_t status = MB_SUCCESS;
80 status = mbmaster_main_type3_process(req_handler, FUNC_CODE_WRITE_MULTIPLE_COILS, slave_addr, start_addr,
81 quantity, outputs_buf, resp_addr, resp_quantity, exception_code, timeout);
82 return status;
83 }
84
85 /* function code 0x10 */
mbmaster_write_multiple_registers(mb_handler_t * req_handler,uint8_t slave_addr,uint16_t start_addr,uint16_t quantity,uint8_t * outputs_buf,uint16_t * resp_addr,uint16_t * resp_quantity,uint8_t * exception_code,uint32_t timeout)86 mb_status_t mbmaster_write_multiple_registers(mb_handler_t *req_handler, uint8_t slave_addr, uint16_t start_addr,
87 uint16_t quantity, uint8_t *outputs_buf, uint16_t *resp_addr,
88 uint16_t *resp_quantity, uint8_t *exception_code, uint32_t timeout)
89 {
90 mb_status_t status = MB_SUCCESS;
91 status = mbmaster_main_type3_process(req_handler, FUNC_CODE_WRITE_MULTIPLE_REGISTERS, slave_addr, start_addr,
92 quantity, outputs_buf, resp_addr, resp_quantity, exception_code, timeout);
93 return status;
94 }
95
96