#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#[cfg(not(feature = "std"))]
extern crate alloc;
pub mod constants;
pub mod error;
pub mod pdu;
pub mod protocol;
#[cfg(feature = "std")]
pub mod transport;
#[cfg(feature = "std")]
pub mod client;
#[cfg(feature = "std")]
pub mod utils;
#[cfg(feature = "std")]
pub mod logging;
#[cfg(feature = "std")]
pub mod value;
#[cfg(feature = "std")]
pub mod bytes;
#[cfg(feature = "std")]
pub mod codec;
#[cfg(feature = "std")]
pub mod batcher;
#[cfg(feature = "std")]
pub mod coalescer;
#[cfg(feature = "std")]
pub mod scheduler;
#[cfg(feature = "std")]
pub mod device_limits;
#[cfg(feature = "rtu")]
pub mod server;
#[cfg(feature = "embedded")]
pub mod embedded;
#[cfg(feature = "rtu")]
pub mod register_bank;
pub use constants::{
MAX_PDU_SIZE, MAX_READ_COILS, MAX_READ_REGISTERS, MAX_WRITE_COILS, MAX_WRITE_REGISTERS,
};
pub use error::{ModbusError, ModbusResult};
pub use pdu::{ModbusPdu, PduBuilder};
pub use protocol::{ModbusFunction, ModbusRequest, ModbusResponse, SlaveId};
#[cfg(feature = "std")]
pub use tokio;
#[cfg(feature = "std")]
pub use client::{GenericModbusClient, ModbusClient, ModbusTcpClient};
#[cfg(feature = "std")]
pub use bytes::ByteOrder;
#[cfg(feature = "std")]
pub use value::ModbusValue;
#[cfg(feature = "std")]
pub use batcher::{BatchCommand, CommandBatcher};
#[cfg(feature = "std")]
pub use coalescer::{CoalescedRead, ReadCoalescer, ReadRequest};
#[cfg(feature = "std")]
pub use scheduler::ScheduledRequest;
#[cfg(feature = "std")]
pub use codec::ModbusCodec;
#[cfg(feature = "std")]
pub use device_limits::DeviceLimits;
#[cfg(feature = "std")]
pub use client::ModbusRtuOverTcpClient;
#[cfg(feature = "std")]
pub use transport::{ModbusTransport, RtuOverTcpTransport, TcpTransport, TransportStats};
#[cfg(feature = "std")]
pub use transport::{PacketCallback, PacketDirection};
#[cfg(feature = "std")]
pub use utils::PerformanceMetrics;
#[cfg(feature = "std")]
pub use logging::{CallbackLogger, LogCallback, LogLevel, LoggingMode};
#[cfg(feature = "std")]
#[doc(hidden)]
pub use batcher::{DEFAULT_BATCH_WINDOW_MS, DEFAULT_MAX_BATCH_SIZE};
#[cfg(feature = "std")]
#[doc(hidden)]
pub use bytes::{
regs_to_bytes_4, regs_to_bytes_8, regs_to_f32, regs_to_f64, regs_to_i32, regs_to_u32,
};
#[cfg(feature = "std")]
#[doc(hidden)]
pub use codec::{
clamp_to_data_type, decode_register_value, encode_f64_as_type, encode_value,
parse_read_response, registers_for_type,
};
#[cfg(feature = "std")]
#[doc(hidden)]
pub use device_limits::{
DEFAULT_INTER_REQUEST_DELAY_MS, DEFAULT_MAX_READ_COILS, DEFAULT_MAX_READ_REGISTERS,
DEFAULT_MAX_WRITE_COILS, DEFAULT_MAX_WRITE_REGISTERS,
};
#[cfg(feature = "std")]
#[doc(hidden)]
pub use utils::OperationTimer;
#[cfg(feature = "rtu")]
pub use client::{ModbusAsciiClient, ModbusRtuClient};
#[cfg(feature = "rtu")]
pub use transport::{AsciiTransport, RtuTransport};
#[cfg(feature = "embedded")]
pub use embedded::EmbeddedRtuTransport;
pub const DEFAULT_TIMEOUT_MS: u64 = 5000;
pub const DEFAULT_TCP_PORT: u16 = 502;
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(feature = "std")]
pub fn info() -> String {
format!(
"Voltage Modbus v{} - High-performance industrial Modbus library by Evan Liu",
VERSION
)
}