chore: housekeeping
This commit is contained in:
56
include/modbus.h
Normal file
56
include/modbus.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#ifndef MODBUS_H
|
||||
#define MODBUS_H
|
||||
|
||||
#include <MQTT/MQTTClient.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
// Function codes
|
||||
#define MODBUS_FC_READ_HOLDING_REGISTERS 0x03
|
||||
#define MODBUS_FC_WRITE_SINGLE_REGISTER 0x06
|
||||
#define MODBUS_FC_WRITE_MULTIPLE_REGISTERS 0x10
|
||||
|
||||
// Modbus protocol exception codes
|
||||
#define MODBUS_ERROR_NONE 0x00
|
||||
#define MODBUS_ERROR_ILLEGAL_FUNCTION 0x01
|
||||
#define MODBUS_ERROR_ILLEGAL_ADDRESS 0x02
|
||||
#define MODBUS_ERROR_ILLEGAL_VALUE 0x03
|
||||
#define MODBUS_ERROR_DEVICE_FAILURE 0x04
|
||||
#define MODBUS_ERROR_ACKNOWLEDGE 0x05
|
||||
#define MODBUS_ERROR_DEVICE_BUSY 0x06
|
||||
#define MODBUS_ERROR_MEMORY_PARITY 0x08
|
||||
#define MODBUS_ERROR_TIMEOUT 0x0B // No response received
|
||||
#define MODBUS_ERROR_CRC 0x0C // CRC check failed
|
||||
|
||||
// Frame length
|
||||
#define MB_MIN_LEN 4
|
||||
#define MB_CRC_LEN 2
|
||||
#define MB_WREG_LEN 8
|
||||
#define MB_MAX_BUFFER 32
|
||||
|
||||
// States for the Modbus protocol state machine
|
||||
typedef enum {
|
||||
MODBUS_IDLE, // Ready to send new request
|
||||
MODBUS_WAITING_RESPONSE, // Request sent, waiting for slave response
|
||||
MODBUS_PROCESS_RESPONSE // Response received, processing data
|
||||
} modbus_state_t;
|
||||
|
||||
// Callback function type for handling received Modbus register values
|
||||
typedef void (*modbus_value_cb)(uint8_t device_idx, const char* property,
|
||||
uint16_t value);
|
||||
|
||||
// Initialize the Modbus protocol handler with callback for received values
|
||||
void modbus_handler_init(modbus_value_cb value_callback);
|
||||
void modbus_handler_process(void);
|
||||
// Send a Modbus read or write request to a slave device
|
||||
// Returns true if request was queued successfully
|
||||
bool modbus_handler_send_request(uint8_t device_idx, const char* property,
|
||||
bool is_write, uint16_t value);
|
||||
// Publish a Modbus register value to MQTT broker
|
||||
// Formats topic as device_name/property
|
||||
void modbus_publish_value(MQTTClient* client, const char* device_name,
|
||||
const char* property, uint16_t value);
|
||||
|
||||
#endif // MODBUS_H
|
||||
Reference in New Issue
Block a user