use core::ffi::c_void;
#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MbusServerExceptionCode {
Ok = 0,
IllegalFunction = 1,
IllegalDataAddress = 2,
IllegalDataValue = 3,
ServerDeviceFailure = 4,
}
#[cfg(feature = "coils")]
#[repr(C)]
pub struct MbusServerReadCoilsReq {
pub unit_id: u8,
pub txn_id: u16,
pub address: u16,
pub quantity: u16,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_byte_count: u8,
}
#[cfg(feature = "coils")]
pub type MbusServerReadCoilsFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadCoilsReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "discrete-inputs")]
#[repr(C)]
pub struct MbusServerReadDiscreteInputsReq {
pub unit_id: u8,
pub txn_id: u16,
pub address: u16,
pub quantity: u16,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_byte_count: u8,
}
#[cfg(feature = "discrete-inputs")]
pub type MbusServerReadDiscreteInputsFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadDiscreteInputsReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusServerReadHoldingRegistersReq {
pub unit_id: u8,
pub txn_id: u16,
pub address: u16,
pub quantity: u16,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_byte_count: u8,
}
#[cfg(feature = "holding-registers")]
pub type MbusServerReadHoldingRegistersFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadHoldingRegistersReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "input-registers")]
#[repr(C)]
pub struct MbusServerReadInputRegistersReq {
pub unit_id: u8,
pub txn_id: u16,
pub address: u16,
pub quantity: u16,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_byte_count: u8,
}
#[cfg(feature = "input-registers")]
pub type MbusServerReadInputRegistersFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadInputRegistersReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "coils")]
#[repr(C)]
pub struct MbusServerWriteSingleCoilReq {
pub unit_id: u8,
pub txn_id: u16,
pub address: u16,
pub value: bool,
}
#[cfg(feature = "coils")]
pub type MbusServerWriteSingleCoilFn = Option<
unsafe extern "C" fn(
req: *const MbusServerWriteSingleCoilReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusServerWriteSingleRegisterReq {
pub unit_id: u8,
pub txn_id: u16,
pub address: u16,
pub value: u16,
}
#[cfg(feature = "holding-registers")]
pub type MbusServerWriteSingleRegisterFn = Option<
unsafe extern "C" fn(
req: *const MbusServerWriteSingleRegisterReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusServerReadExceptionStatusReq {
pub unit_id: u8,
pub txn_id: u16,
pub out_status: u8,
}
#[cfg(feature = "diagnostics")]
pub type MbusServerReadExceptionStatusFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadExceptionStatusReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusServerDiagnosticsReq {
pub unit_id: u8,
pub txn_id: u16,
pub sub_function: u16,
pub data: u16,
pub out_result: u16,
}
#[cfg(feature = "diagnostics")]
pub type MbusServerDiagnosticsFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerDiagnosticsReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusServerGetCommEventCounterReq {
pub unit_id: u8,
pub txn_id: u16,
pub out_status: u16,
pub out_event_count: u16,
}
#[cfg(feature = "diagnostics")]
pub type MbusServerGetCommEventCounterFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerGetCommEventCounterReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusServerGetCommEventLogReq {
pub unit_id: u8,
pub txn_id: u16,
pub out_events: *mut u8,
pub out_events_len: usize,
pub out_status: u16,
pub out_event_count: u16,
pub out_message_count: u16,
pub out_num_events: u8,
}
#[cfg(feature = "diagnostics")]
pub type MbusServerGetCommEventLogFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerGetCommEventLogReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "coils")]
#[repr(C)]
pub struct MbusServerWriteMultipleCoilsReq {
pub unit_id: u8,
pub txn_id: u16,
pub starting_address: u16,
pub quantity: u16,
pub values: *const u8,
pub values_len: usize,
}
#[cfg(feature = "coils")]
pub type MbusServerWriteMultipleCoilsFn = Option<
unsafe extern "C" fn(
req: *const MbusServerWriteMultipleCoilsReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusServerWriteMultipleRegistersReq {
pub unit_id: u8,
pub txn_id: u16,
pub starting_address: u16,
pub values: *const u16,
pub values_len: usize,
}
#[cfg(feature = "holding-registers")]
pub type MbusServerWriteMultipleRegistersFn = Option<
unsafe extern "C" fn(
req: *const MbusServerWriteMultipleRegistersReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusServerReportServerIdReq {
pub unit_id: u8,
pub txn_id: u16,
pub out_server_id: *mut u8,
pub out_server_id_len: usize,
pub out_byte_count: u8,
pub out_run_indicator_status: u8,
}
#[cfg(feature = "diagnostics")]
pub type MbusServerReportServerIdFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReportServerIdReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "file-record")]
#[repr(C)]
pub struct MbusServerReadFileRecordReq {
pub unit_id: u8,
pub txn_id: u16,
pub file_number: u16,
pub record_number: u16,
pub record_length: u16,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_byte_count: u8,
}
#[cfg(feature = "file-record")]
pub type MbusServerReadFileRecordFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadFileRecordReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "file-record")]
#[repr(C)]
pub struct MbusServerWriteFileRecordReq {
pub unit_id: u8,
pub txn_id: u16,
pub file_number: u16,
pub record_number: u16,
pub record_length: u16,
pub record_data: *const u16,
pub record_data_len: usize,
}
#[cfg(feature = "file-record")]
pub type MbusServerWriteFileRecordFn = Option<
unsafe extern "C" fn(
req: *const MbusServerWriteFileRecordReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusServerMaskWriteRegisterReq {
pub unit_id: u8,
pub txn_id: u16,
pub address: u16,
pub and_mask: u16,
pub or_mask: u16,
}
#[cfg(feature = "holding-registers")]
pub type MbusServerMaskWriteRegisterFn = Option<
unsafe extern "C" fn(
req: *const MbusServerMaskWriteRegisterReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "holding-registers")]
#[repr(C)]
pub struct MbusServerReadWriteMultipleRegistersReq {
pub unit_id: u8,
pub txn_id: u16,
pub read_address: u16,
pub read_quantity: u16,
pub write_address: u16,
pub write_values: *const u16,
pub write_values_len: usize,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_byte_count: u8,
}
#[cfg(feature = "holding-registers")]
pub type MbusServerReadWriteMultipleRegistersFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadWriteMultipleRegistersReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "fifo")]
#[repr(C)]
pub struct MbusServerReadFifoQueueReq {
pub unit_id: u8,
pub txn_id: u16,
pub pointer_address: u16,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_byte_count: u8,
}
#[cfg(feature = "fifo")]
pub type MbusServerReadFifoQueueFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadFifoQueueReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[cfg(feature = "diagnostics")]
#[repr(C)]
pub struct MbusServerReadDeviceIdentificationReq {
pub unit_id: u8,
pub txn_id: u16,
pub read_device_id_code: u8,
pub start_object_id: u8,
pub out_data: *mut u8,
pub out_data_len: usize,
pub out_conformity_level: u8,
pub out_more_follows_object_id: u8,
pub out_has_more: bool,
pub out_next_object_id: u8,
pub out_byte_count: u8,
}
#[cfg(feature = "diagnostics")]
pub type MbusServerReadDeviceIdentificationFn = Option<
unsafe extern "C" fn(
req: *mut MbusServerReadDeviceIdentificationReq,
userdata: *mut c_void,
) -> MbusServerExceptionCode,
>;
#[repr(C)]
pub struct MbusServerHandlers {
pub userdata: *mut c_void,
#[cfg(feature = "coils")]
pub on_read_coils: MbusServerReadCoilsFn,
#[cfg(feature = "coils")]
pub on_write_single_coil: MbusServerWriteSingleCoilFn,
#[cfg(feature = "coils")]
pub on_write_multiple_coils: MbusServerWriteMultipleCoilsFn,
#[cfg(feature = "discrete-inputs")]
pub on_read_discrete_inputs: MbusServerReadDiscreteInputsFn,
#[cfg(feature = "holding-registers")]
pub on_read_holding_registers: MbusServerReadHoldingRegistersFn,
#[cfg(feature = "holding-registers")]
pub on_write_single_register: MbusServerWriteSingleRegisterFn,
#[cfg(feature = "holding-registers")]
pub on_write_multiple_registers: MbusServerWriteMultipleRegistersFn,
#[cfg(feature = "holding-registers")]
pub on_mask_write_register: MbusServerMaskWriteRegisterFn,
#[cfg(feature = "holding-registers")]
pub on_read_write_multiple_registers: MbusServerReadWriteMultipleRegistersFn,
#[cfg(feature = "input-registers")]
pub on_read_input_registers: MbusServerReadInputRegistersFn,
#[cfg(feature = "fifo")]
pub on_read_fifo_queue: MbusServerReadFifoQueueFn,
#[cfg(feature = "file-record")]
pub on_read_file_record: MbusServerReadFileRecordFn,
#[cfg(feature = "file-record")]
pub on_write_file_record: MbusServerWriteFileRecordFn,
#[cfg(feature = "diagnostics")]
pub on_read_exception_status: MbusServerReadExceptionStatusFn,
#[cfg(feature = "diagnostics")]
pub on_diagnostics: MbusServerDiagnosticsFn,
#[cfg(feature = "diagnostics")]
pub on_get_comm_event_counter: MbusServerGetCommEventCounterFn,
#[cfg(feature = "diagnostics")]
pub on_get_comm_event_log: MbusServerGetCommEventLogFn,
#[cfg(feature = "diagnostics")]
pub on_report_server_id: MbusServerReportServerIdFn,
#[cfg(feature = "diagnostics")]
pub on_read_device_identification: MbusServerReadDeviceIdentificationFn,
}