use core::ffi::c_void;
use crate::c::error::MbusStatusCode;
#[cfg(feature = "coils")]
use super::models::coils::MbusCoils;
#[cfg(feature = "discrete-inputs")]
use super::models::discrete_inputs::MbusDiscreteInputs;
#[cfg(feature = "fifo")]
use super::models::fifo::MbusFifoQueue;
#[cfg(feature = "holding-registers")]
use super::models::registers::MbusHoldingRegisters;
#[cfg(feature = "input-registers")]
use super::models::registers::MbusInputRegisters;
#[cfg(feature = "file-record")]
#[repr(C)]
pub struct MbusFileRecordResult {
pub record_number: u16,
pub data: *const u16,
pub data_len: u16,
}
#[cfg(feature = "coils")]
#[repr(C)]
pub struct MbusReadCoilsCtx {
pub txn_id: u16,
pub unit_id: u8,
pub coils: *const MbusCoils,
pub userdata: *mut c_void,
}
#[cfg(feature = "coils")]
#[repr(C)]
pub struct MbusWriteSingleCoilCtx {
pub txn_id: u16,
pub unit_id: u8,
pub address: u16,
pub value: u8,
pub userdata: *mut c_void,
}
#[cfg(feature = "coils")]
#[repr(C)]
pub struct MbusWriteMultipleCoilsCtx {
pub txn_id: u16,
pub unit_id: u8,
pub address: u16,
pub quantity: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusReadHoldingRegistersCtx {
pub txn_id: u16,
pub unit_id: u8,
pub registers: *const MbusHoldingRegisters,
pub userdata: *mut c_void,
}
#[cfg(feature = "input-registers")]
#[repr(C)]
pub struct MbusReadInputRegistersCtx {
pub txn_id: u16,
pub unit_id: u8,
pub registers: *const MbusInputRegisters,
pub userdata: *mut c_void,
}
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusReadWriteMultipleRegistersCtx {
pub txn_id: u16,
pub unit_id: u8,
pub registers: *const MbusHoldingRegisters,
pub userdata: *mut c_void,
}
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusWriteSingleRegisterCtx {
pub txn_id: u16,
pub unit_id: u8,
pub address: u16,
pub value: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusWriteMultipleRegistersCtx {
pub txn_id: u16,
pub unit_id: u8,
pub address: u16,
pub quantity: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusMaskWriteRegisterCtx {
pub txn_id: u16,
pub unit_id: u8,
pub userdata: *mut c_void,
}
#[cfg(feature = "discrete-inputs")]
#[repr(C)]
pub struct MbusReadDiscreteInputsCtx {
pub txn_id: u16,
pub unit_id: u8,
pub discrete_inputs: *const MbusDiscreteInputs,
pub userdata: *mut c_void,
}
#[cfg(feature = "fifo")]
#[repr(C)]
pub struct MbusReadFifoQueueCtx {
pub txn_id: u16,
pub unit_id: u8,
pub fifo_queue: *const MbusFifoQueue,
pub userdata: *mut c_void,
}
#[cfg(feature = "file-record")]
#[repr(C)]
pub struct MbusReadFileRecordCtx {
pub txn_id: u16,
pub unit_id: u8,
pub results: *const MbusFileRecordResult,
pub count: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "file-record")]
#[repr(C)]
pub struct MbusWriteFileRecordCtx {
pub txn_id: u16,
pub unit_id: u8,
pub userdata: *mut c_void,
}
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusReadExceptionStatusCtx {
pub txn_id: u16,
pub unit_id: u8,
pub status: u8,
pub userdata: *mut c_void,
}
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusDiagnosticsCtx {
pub txn_id: u16,
pub unit_id: u8,
pub sub_fn: u16,
pub data: *const u16,
pub data_len: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusCommEventCounterCtx {
pub txn_id: u16,
pub unit_id: u8,
pub status: u16,
pub event_count: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusCommEventLogCtx {
pub txn_id: u16,
pub unit_id: u8,
pub status: u16,
pub event_count: u16,
pub message_count: u16,
pub events: *const u8,
pub events_len: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusReportServerIdCtx {
pub txn_id: u16,
pub unit_id: u8,
pub server_id: u8,
pub run_indicator: u8,
pub device_identifier: *const u8,
pub identifier_len: u16,
pub userdata: *mut c_void,
}
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusReadDeviceIdCtx {
pub txn_id: u16,
pub unit_id: u8,
pub read_device_id_code: u8,
pub conformity_level: u8,
pub more_follows: u8,
pub objects: *const u8,
pub objects_len: u16,
pub userdata: *mut c_void,
}
#[repr(C)]
pub struct MbusRequestFailedCtx {
pub txn_id: u16,
pub unit_id: u8,
pub error: MbusStatusCode,
pub userdata: *mut c_void,
}
pub type MbusCurrentMillisCb = unsafe extern "C" fn(userdata: *mut c_void) -> u64;
#[repr(C)]
pub struct MbusCallbacks {
pub userdata: *mut c_void,
pub on_current_millis: Option<unsafe extern "C" fn(userdata: *mut c_void) -> u64>,
#[cfg(feature = "coils")]
pub on_read_coils: Option<unsafe extern "C" fn(ctx: *const MbusReadCoilsCtx)>,
#[cfg(feature = "coils")]
pub on_write_single_coil: Option<unsafe extern "C" fn(ctx: *const MbusWriteSingleCoilCtx)>,
#[cfg(feature = "coils")]
pub on_write_multiple_coils:
Option<unsafe extern "C" fn(ctx: *const MbusWriteMultipleCoilsCtx)>,
#[cfg(feature = "holding-registers")]
pub on_read_holding_registers:
Option<unsafe extern "C" fn(ctx: *const MbusReadHoldingRegistersCtx)>,
#[cfg(feature = "input-registers")]
pub on_read_input_registers:
Option<unsafe extern "C" fn(ctx: *const MbusReadInputRegistersCtx)>,
#[cfg(feature = "holding-registers")]
pub on_read_write_multiple_registers:
Option<unsafe extern "C" fn(ctx: *const MbusReadWriteMultipleRegistersCtx)>,
#[cfg(feature = "holding-registers")]
pub on_write_single_register:
Option<unsafe extern "C" fn(ctx: *const MbusWriteSingleRegisterCtx)>,
#[cfg(feature = "holding-registers")]
pub on_write_multiple_registers:
Option<unsafe extern "C" fn(ctx: *const MbusWriteMultipleRegistersCtx)>,
#[cfg(feature = "holding-registers")]
pub on_mask_write_register: Option<unsafe extern "C" fn(ctx: *const MbusMaskWriteRegisterCtx)>,
#[cfg(feature = "discrete-inputs")]
pub on_read_discrete_inputs:
Option<unsafe extern "C" fn(ctx: *const MbusReadDiscreteInputsCtx)>,
#[cfg(feature = "fifo")]
pub on_read_fifo_queue: Option<unsafe extern "C" fn(ctx: *const MbusReadFifoQueueCtx)>,
#[cfg(feature = "file-record")]
pub on_read_file_record: Option<unsafe extern "C" fn(ctx: *const MbusReadFileRecordCtx)>,
#[cfg(feature = "file-record")]
pub on_write_file_record: Option<unsafe extern "C" fn(ctx: *const MbusWriteFileRecordCtx)>,
#[cfg(feature = "diagnostics")]
pub on_read_exception_status:
Option<unsafe extern "C" fn(ctx: *const MbusReadExceptionStatusCtx)>,
#[cfg(feature = "diagnostics")]
pub on_diagnostics: Option<unsafe extern "C" fn(ctx: *const MbusDiagnosticsCtx)>,
#[cfg(feature = "diagnostics")]
pub on_comm_event_counter: Option<unsafe extern "C" fn(ctx: *const MbusCommEventCounterCtx)>,
#[cfg(feature = "diagnostics")]
pub on_comm_event_log: Option<unsafe extern "C" fn(ctx: *const MbusCommEventLogCtx)>,
#[cfg(feature = "diagnostics")]
pub on_report_server_id: Option<unsafe extern "C" fn(ctx: *const MbusReportServerIdCtx)>,
#[cfg(feature = "diagnostics")]
pub on_read_device_id: Option<unsafe extern "C" fn(ctx: *const MbusReadDeviceIdCtx)>,
pub on_request_failed: Option<unsafe extern "C" fn(ctx: *const MbusRequestFailedCtx)>,
}