#[allow(unused_imports)]
use crate::{
    byte_converter::*, converting_high_level_callback_receiver::ConvertingHighLevelCallbackReceiver,
    converting_receiver::BrickletRecvTimeoutError, device::*, error::TinkerforgeError, ip_connection::async_io::AsyncIpConnection,
    low_level_traits::LowLevelRead,
};
#[allow(unused_imports)]
use futures_core::Stream;
#[allow(unused_imports)]
use tokio_stream::StreamExt;
pub enum Rs485BrickletFunction {
    WriteLowLevel,
    ReadLowLevel,
    EnableReadCallback,
    DisableReadCallback,
    IsReadCallbackEnabled,
    SetRs485Configuration,
    GetRs485Configuration,
    SetModbusConfiguration,
    GetModbusConfiguration,
    SetMode,
    GetMode,
    SetCommunicationLedConfig,
    GetCommunicationLedConfig,
    SetErrorLedConfig,
    GetErrorLedConfig,
    SetBufferConfig,
    GetBufferConfig,
    GetBufferStatus,
    EnableErrorCountCallback,
    DisableErrorCountCallback,
    IsErrorCountCallbackEnabled,
    GetErrorCount,
    GetModbusCommonErrorCount,
    ModbusSlaveReportException,
    ModbusSlaveAnswerReadCoilsRequestLowLevel,
    ModbusMasterReadCoils,
    ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel,
    ModbusMasterReadHoldingRegisters,
    ModbusSlaveAnswerWriteSingleCoilRequest,
    ModbusMasterWriteSingleCoil,
    ModbusSlaveAnswerWriteSingleRegisterRequest,
    ModbusMasterWriteSingleRegister,
    ModbusSlaveAnswerWriteMultipleCoilsRequest,
    ModbusMasterWriteMultipleCoilsLowLevel,
    ModbusSlaveAnswerWriteMultipleRegistersRequest,
    ModbusMasterWriteMultipleRegistersLowLevel,
    ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel,
    ModbusMasterReadDiscreteInputs,
    ModbusSlaveAnswerReadInputRegistersRequestLowLevel,
    ModbusMasterReadInputRegisters,
    SetFrameReadableCallbackConfiguration,
    GetFrameReadableCallbackConfiguration,
    GetSpitfpErrorCount,
    SetBootloaderMode,
    GetBootloaderMode,
    SetWriteFirmwarePointer,
    WriteFirmware,
    SetStatusLedConfig,
    GetStatusLedConfig,
    GetChipTemperature,
    Reset,
    WriteUid,
    ReadUid,
    GetIdentity,
    CallbackReadLowLevel,
    CallbackErrorCount,
    CallbackModbusSlaveReadCoilsRequest,
    CallbackModbusMasterReadCoilsResponseLowLevel,
    CallbackModbusSlaveReadHoldingRegistersRequest,
    CallbackModbusMasterReadHoldingRegistersResponseLowLevel,
    CallbackModbusSlaveWriteSingleCoilRequest,
    CallbackModbusMasterWriteSingleCoilResponse,
    CallbackModbusSlaveWriteSingleRegisterRequest,
    CallbackModbusMasterWriteSingleRegisterResponse,
    CallbackModbusSlaveWriteMultipleCoilsRequestLowLevel,
    CallbackModbusMasterWriteMultipleCoilsResponse,
    CallbackModbusSlaveWriteMultipleRegistersRequestLowLevel,
    CallbackModbusMasterWriteMultipleRegistersResponse,
    CallbackModbusSlaveReadDiscreteInputsRequest,
    CallbackModbusMasterReadDiscreteInputsResponseLowLevel,
    CallbackModbusSlaveReadInputRegistersRequest,
    CallbackModbusMasterReadInputRegistersResponseLowLevel,
    CallbackFrameReadable,
}
impl From<Rs485BrickletFunction> for u8 {
    fn from(fun: Rs485BrickletFunction) -> Self {
        match fun {
            Rs485BrickletFunction::WriteLowLevel => 1,
            Rs485BrickletFunction::ReadLowLevel => 2,
            Rs485BrickletFunction::EnableReadCallback => 3,
            Rs485BrickletFunction::DisableReadCallback => 4,
            Rs485BrickletFunction::IsReadCallbackEnabled => 5,
            Rs485BrickletFunction::SetRs485Configuration => 6,
            Rs485BrickletFunction::GetRs485Configuration => 7,
            Rs485BrickletFunction::SetModbusConfiguration => 8,
            Rs485BrickletFunction::GetModbusConfiguration => 9,
            Rs485BrickletFunction::SetMode => 10,
            Rs485BrickletFunction::GetMode => 11,
            Rs485BrickletFunction::SetCommunicationLedConfig => 12,
            Rs485BrickletFunction::GetCommunicationLedConfig => 13,
            Rs485BrickletFunction::SetErrorLedConfig => 14,
            Rs485BrickletFunction::GetErrorLedConfig => 15,
            Rs485BrickletFunction::SetBufferConfig => 16,
            Rs485BrickletFunction::GetBufferConfig => 17,
            Rs485BrickletFunction::GetBufferStatus => 18,
            Rs485BrickletFunction::EnableErrorCountCallback => 19,
            Rs485BrickletFunction::DisableErrorCountCallback => 20,
            Rs485BrickletFunction::IsErrorCountCallbackEnabled => 21,
            Rs485BrickletFunction::GetErrorCount => 22,
            Rs485BrickletFunction::GetModbusCommonErrorCount => 23,
            Rs485BrickletFunction::ModbusSlaveReportException => 24,
            Rs485BrickletFunction::ModbusSlaveAnswerReadCoilsRequestLowLevel => 25,
            Rs485BrickletFunction::ModbusMasterReadCoils => 26,
            Rs485BrickletFunction::ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel => 27,
            Rs485BrickletFunction::ModbusMasterReadHoldingRegisters => 28,
            Rs485BrickletFunction::ModbusSlaveAnswerWriteSingleCoilRequest => 29,
            Rs485BrickletFunction::ModbusMasterWriteSingleCoil => 30,
            Rs485BrickletFunction::ModbusSlaveAnswerWriteSingleRegisterRequest => 31,
            Rs485BrickletFunction::ModbusMasterWriteSingleRegister => 32,
            Rs485BrickletFunction::ModbusSlaveAnswerWriteMultipleCoilsRequest => 33,
            Rs485BrickletFunction::ModbusMasterWriteMultipleCoilsLowLevel => 34,
            Rs485BrickletFunction::ModbusSlaveAnswerWriteMultipleRegistersRequest => 35,
            Rs485BrickletFunction::ModbusMasterWriteMultipleRegistersLowLevel => 36,
            Rs485BrickletFunction::ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel => 37,
            Rs485BrickletFunction::ModbusMasterReadDiscreteInputs => 38,
            Rs485BrickletFunction::ModbusSlaveAnswerReadInputRegistersRequestLowLevel => 39,
            Rs485BrickletFunction::ModbusMasterReadInputRegisters => 40,
            Rs485BrickletFunction::SetFrameReadableCallbackConfiguration => 59,
            Rs485BrickletFunction::GetFrameReadableCallbackConfiguration => 60,
            Rs485BrickletFunction::GetSpitfpErrorCount => 234,
            Rs485BrickletFunction::SetBootloaderMode => 235,
            Rs485BrickletFunction::GetBootloaderMode => 236,
            Rs485BrickletFunction::SetWriteFirmwarePointer => 237,
            Rs485BrickletFunction::WriteFirmware => 238,
            Rs485BrickletFunction::SetStatusLedConfig => 239,
            Rs485BrickletFunction::GetStatusLedConfig => 240,
            Rs485BrickletFunction::GetChipTemperature => 242,
            Rs485BrickletFunction::Reset => 243,
            Rs485BrickletFunction::WriteUid => 248,
            Rs485BrickletFunction::ReadUid => 249,
            Rs485BrickletFunction::GetIdentity => 255,
            Rs485BrickletFunction::CallbackReadLowLevel => 41,
            Rs485BrickletFunction::CallbackErrorCount => 42,
            Rs485BrickletFunction::CallbackModbusSlaveReadCoilsRequest => 43,
            Rs485BrickletFunction::CallbackModbusMasterReadCoilsResponseLowLevel => 44,
            Rs485BrickletFunction::CallbackModbusSlaveReadHoldingRegistersRequest => 45,
            Rs485BrickletFunction::CallbackModbusMasterReadHoldingRegistersResponseLowLevel => 46,
            Rs485BrickletFunction::CallbackModbusSlaveWriteSingleCoilRequest => 47,
            Rs485BrickletFunction::CallbackModbusMasterWriteSingleCoilResponse => 48,
            Rs485BrickletFunction::CallbackModbusSlaveWriteSingleRegisterRequest => 49,
            Rs485BrickletFunction::CallbackModbusMasterWriteSingleRegisterResponse => 50,
            Rs485BrickletFunction::CallbackModbusSlaveWriteMultipleCoilsRequestLowLevel => 51,
            Rs485BrickletFunction::CallbackModbusMasterWriteMultipleCoilsResponse => 52,
            Rs485BrickletFunction::CallbackModbusSlaveWriteMultipleRegistersRequestLowLevel => 53,
            Rs485BrickletFunction::CallbackModbusMasterWriteMultipleRegistersResponse => 54,
            Rs485BrickletFunction::CallbackModbusSlaveReadDiscreteInputsRequest => 55,
            Rs485BrickletFunction::CallbackModbusMasterReadDiscreteInputsResponseLowLevel => 56,
            Rs485BrickletFunction::CallbackModbusSlaveReadInputRegistersRequest => 57,
            Rs485BrickletFunction::CallbackModbusMasterReadInputRegistersResponseLowLevel => 58,
            Rs485BrickletFunction::CallbackFrameReadable => 61,
        }
    }
}
pub const RS485_BRICKLET_PARITY_NONE: u8 = 0;
pub const RS485_BRICKLET_PARITY_ODD: u8 = 1;
pub const RS485_BRICKLET_PARITY_EVEN: u8 = 2;
pub const RS485_BRICKLET_STOPBITS_1: u8 = 1;
pub const RS485_BRICKLET_STOPBITS_2: u8 = 2;
pub const RS485_BRICKLET_WORDLENGTH_5: u8 = 5;
pub const RS485_BRICKLET_WORDLENGTH_6: u8 = 6;
pub const RS485_BRICKLET_WORDLENGTH_7: u8 = 7;
pub const RS485_BRICKLET_WORDLENGTH_8: u8 = 8;
pub const RS485_BRICKLET_DUPLEX_HALF: u8 = 0;
pub const RS485_BRICKLET_DUPLEX_FULL: u8 = 1;
pub const RS485_BRICKLET_MODE_RS485: u8 = 0;
pub const RS485_BRICKLET_MODE_MODBUS_MASTER_RTU: u8 = 1;
pub const RS485_BRICKLET_MODE_MODBUS_SLAVE_RTU: u8 = 2;
pub const RS485_BRICKLET_COMMUNICATION_LED_CONFIG_OFF: u8 = 0;
pub const RS485_BRICKLET_COMMUNICATION_LED_CONFIG_ON: u8 = 1;
pub const RS485_BRICKLET_COMMUNICATION_LED_CONFIG_SHOW_HEARTBEAT: u8 = 2;
pub const RS485_BRICKLET_COMMUNICATION_LED_CONFIG_SHOW_COMMUNICATION: u8 = 3;
pub const RS485_BRICKLET_ERROR_LED_CONFIG_OFF: u8 = 0;
pub const RS485_BRICKLET_ERROR_LED_CONFIG_ON: u8 = 1;
pub const RS485_BRICKLET_ERROR_LED_CONFIG_SHOW_HEARTBEAT: u8 = 2;
pub const RS485_BRICKLET_ERROR_LED_CONFIG_SHOW_ERROR: u8 = 3;
pub const RS485_BRICKLET_EXCEPTION_CODE_TIMEOUT: i8 = -1;
pub const RS485_BRICKLET_EXCEPTION_CODE_SUCCESS: i8 = 0;
pub const RS485_BRICKLET_EXCEPTION_CODE_ILLEGAL_FUNCTION: i8 = 1;
pub const RS485_BRICKLET_EXCEPTION_CODE_ILLEGAL_DATA_ADDRESS: i8 = 2;
pub const RS485_BRICKLET_EXCEPTION_CODE_ILLEGAL_DATA_VALUE: i8 = 3;
pub const RS485_BRICKLET_EXCEPTION_CODE_SLAVE_DEVICE_FAILURE: i8 = 4;
pub const RS485_BRICKLET_EXCEPTION_CODE_ACKNOWLEDGE: i8 = 5;
pub const RS485_BRICKLET_EXCEPTION_CODE_SLAVE_DEVICE_BUSY: i8 = 6;
pub const RS485_BRICKLET_EXCEPTION_CODE_MEMORY_PARITY_ERROR: i8 = 8;
pub const RS485_BRICKLET_EXCEPTION_CODE_GATEWAY_PATH_UNAVAILABLE: i8 = 10;
pub const RS485_BRICKLET_EXCEPTION_CODE_GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND: i8 = 11;
pub const RS485_BRICKLET_BOOTLOADER_MODE_BOOTLOADER: u8 = 0;
pub const RS485_BRICKLET_BOOTLOADER_MODE_FIRMWARE: u8 = 1;
pub const RS485_BRICKLET_BOOTLOADER_MODE_BOOTLOADER_WAIT_FOR_REBOOT: u8 = 2;
pub const RS485_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_REBOOT: u8 = 3;
pub const RS485_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_ERASE_AND_REBOOT: u8 = 4;
pub const RS485_BRICKLET_BOOTLOADER_STATUS_OK: u8 = 0;
pub const RS485_BRICKLET_BOOTLOADER_STATUS_INVALID_MODE: u8 = 1;
pub const RS485_BRICKLET_BOOTLOADER_STATUS_NO_CHANGE: u8 = 2;
pub const RS485_BRICKLET_BOOTLOADER_STATUS_ENTRY_FUNCTION_NOT_PRESENT: u8 = 3;
pub const RS485_BRICKLET_BOOTLOADER_STATUS_DEVICE_IDENTIFIER_INCORRECT: u8 = 4;
pub const RS485_BRICKLET_BOOTLOADER_STATUS_CRC_MISMATCH: u8 = 5;
pub const RS485_BRICKLET_STATUS_LED_CONFIG_OFF: u8 = 0;
pub const RS485_BRICKLET_STATUS_LED_CONFIG_ON: u8 = 1;
pub const RS485_BRICKLET_STATUS_LED_CONFIG_SHOW_HEARTBEAT: u8 = 2;
pub const RS485_BRICKLET_STATUS_LED_CONFIG_SHOW_STATUS: u8 = 3;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct WriteLowLevel {
    pub message_chunk_written: u8,
}
impl FromByteSlice for WriteLowLevel {
    fn bytes_expected() -> usize {
        1
    }
    fn from_le_byte_slice(bytes: &[u8]) -> WriteLowLevel {
        WriteLowLevel { message_chunk_written: <u8>::from_le_byte_slice(&bytes[0..1]) }
    }
}
#[derive(Clone, Copy)]
pub struct ReadLowLevel {
    pub message_length: u16,
    pub message_chunk_offset: u16,
    pub message_chunk_data: [char; 60],
}
impl FromByteSlice for ReadLowLevel {
    fn bytes_expected() -> usize {
        64
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ReadLowLevel {
        ReadLowLevel {
            message_length: <u16>::from_le_byte_slice(&bytes[0..2]),
            message_chunk_offset: <u16>::from_le_byte_slice(&bytes[2..4]),
            message_chunk_data: <[char; 60]>::from_le_byte_slice(&bytes[4..64]),
        }
    }
}
impl LowLevelRead<char, ReadResult> for ReadLowLevel {
    fn ll_message_length(&self) -> usize {
        self.message_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.message_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[char] {
        &self.message_chunk_data
    }
    fn get_result(&self) -> ReadResult {
        ReadResult {}
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct Rs485Configuration {
    pub baudrate: u32,
    pub parity: u8,
    pub stopbits: u8,
    pub wordlength: u8,
    pub duplex: u8,
}
impl FromByteSlice for Rs485Configuration {
    fn bytes_expected() -> usize {
        8
    }
    fn from_le_byte_slice(bytes: &[u8]) -> Rs485Configuration {
        Rs485Configuration {
            baudrate: <u32>::from_le_byte_slice(&bytes[0..4]),
            parity: <u8>::from_le_byte_slice(&bytes[4..5]),
            stopbits: <u8>::from_le_byte_slice(&bytes[5..6]),
            wordlength: <u8>::from_le_byte_slice(&bytes[6..7]),
            duplex: <u8>::from_le_byte_slice(&bytes[7..8]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusConfiguration {
    pub slave_address: u8,
    pub master_request_timeout: u32,
}
impl FromByteSlice for ModbusConfiguration {
    fn bytes_expected() -> usize {
        5
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusConfiguration {
        ModbusConfiguration {
            slave_address: <u8>::from_le_byte_slice(&bytes[0..1]),
            master_request_timeout: <u32>::from_le_byte_slice(&bytes[1..5]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct BufferConfig {
    pub send_buffer_size: u16,
    pub receive_buffer_size: u16,
}
impl FromByteSlice for BufferConfig {
    fn bytes_expected() -> usize {
        4
    }
    fn from_le_byte_slice(bytes: &[u8]) -> BufferConfig {
        BufferConfig {
            send_buffer_size: <u16>::from_le_byte_slice(&bytes[0..2]),
            receive_buffer_size: <u16>::from_le_byte_slice(&bytes[2..4]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct BufferStatus {
    pub send_buffer_used: u16,
    pub receive_buffer_used: u16,
}
impl FromByteSlice for BufferStatus {
    fn bytes_expected() -> usize {
        4
    }
    fn from_le_byte_slice(bytes: &[u8]) -> BufferStatus {
        BufferStatus {
            send_buffer_used: <u16>::from_le_byte_slice(&bytes[0..2]),
            receive_buffer_used: <u16>::from_le_byte_slice(&bytes[2..4]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ErrorCount {
    pub overrun_error_count: u32,
    pub parity_error_count: u32,
}
impl FromByteSlice for ErrorCount {
    fn bytes_expected() -> usize {
        8
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ErrorCount {
        ErrorCount {
            overrun_error_count: <u32>::from_le_byte_slice(&bytes[0..4]),
            parity_error_count: <u32>::from_le_byte_slice(&bytes[4..8]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusCommonErrorCount {
    pub timeout_error_count: u32,
    pub checksum_error_count: u32,
    pub frame_too_big_error_count: u32,
    pub illegal_function_error_count: u32,
    pub illegal_data_address_error_count: u32,
    pub illegal_data_value_error_count: u32,
    pub slave_device_failure_error_count: u32,
}
impl FromByteSlice for ModbusCommonErrorCount {
    fn bytes_expected() -> usize {
        28
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusCommonErrorCount {
        ModbusCommonErrorCount {
            timeout_error_count: <u32>::from_le_byte_slice(&bytes[0..4]),
            checksum_error_count: <u32>::from_le_byte_slice(&bytes[4..8]),
            frame_too_big_error_count: <u32>::from_le_byte_slice(&bytes[8..12]),
            illegal_function_error_count: <u32>::from_le_byte_slice(&bytes[12..16]),
            illegal_data_address_error_count: <u32>::from_le_byte_slice(&bytes[16..20]),
            illegal_data_value_error_count: <u32>::from_le_byte_slice(&bytes[20..24]),
            slave_device_failure_error_count: <u32>::from_le_byte_slice(&bytes[24..28]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadCoilsRequestLowLevel {}
impl FromByteSlice for ModbusSlaveAnswerReadCoilsRequestLowLevel {
    fn bytes_expected() -> usize {
        0
    }
    fn from_le_byte_slice(_bytes: &[u8]) -> ModbusSlaveAnswerReadCoilsRequestLowLevel {
        ModbusSlaveAnswerReadCoilsRequestLowLevel {}
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel {}
impl FromByteSlice for ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel {
    fn bytes_expected() -> usize {
        0
    }
    fn from_le_byte_slice(_bytes: &[u8]) -> ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel {
        ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel {}
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteMultipleCoilsLowLevel {
    pub request_id: u8,
}
impl FromByteSlice for ModbusMasterWriteMultipleCoilsLowLevel {
    fn bytes_expected() -> usize {
        1
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterWriteMultipleCoilsLowLevel {
        ModbusMasterWriteMultipleCoilsLowLevel { request_id: <u8>::from_le_byte_slice(&bytes[0..1]) }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteMultipleRegistersLowLevel {
    pub request_id: u8,
}
impl FromByteSlice for ModbusMasterWriteMultipleRegistersLowLevel {
    fn bytes_expected() -> usize {
        1
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterWriteMultipleRegistersLowLevel {
        ModbusMasterWriteMultipleRegistersLowLevel { request_id: <u8>::from_le_byte_slice(&bytes[0..1]) }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel {}
impl FromByteSlice for ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel {
    fn bytes_expected() -> usize {
        0
    }
    fn from_le_byte_slice(_bytes: &[u8]) -> ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel {
        ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel {}
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadInputRegistersRequestLowLevel {}
impl FromByteSlice for ModbusSlaveAnswerReadInputRegistersRequestLowLevel {
    fn bytes_expected() -> usize {
        0
    }
    fn from_le_byte_slice(_bytes: &[u8]) -> ModbusSlaveAnswerReadInputRegistersRequestLowLevel {
        ModbusSlaveAnswerReadInputRegistersRequestLowLevel {}
    }
}
#[derive(Clone, Copy)]
pub struct ReadLowLevelEvent {
    pub message_length: u16,
    pub message_chunk_offset: u16,
    pub message_chunk_data: [char; 60],
}
impl FromByteSlice for ReadLowLevelEvent {
    fn bytes_expected() -> usize {
        64
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ReadLowLevelEvent {
        ReadLowLevelEvent {
            message_length: <u16>::from_le_byte_slice(&bytes[0..2]),
            message_chunk_offset: <u16>::from_le_byte_slice(&bytes[2..4]),
            message_chunk_data: <[char; 60]>::from_le_byte_slice(&bytes[4..64]),
        }
    }
}
impl LowLevelRead<char, ReadResult> for ReadLowLevelEvent {
    fn ll_message_length(&self) -> usize {
        self.message_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.message_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[char] {
        &self.message_chunk_data
    }
    fn get_result(&self) -> ReadResult {
        ReadResult {}
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ErrorCountEvent {
    pub overrun_error_count: u32,
    pub parity_error_count: u32,
}
impl FromByteSlice for ErrorCountEvent {
    fn bytes_expected() -> usize {
        8
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ErrorCountEvent {
        ErrorCountEvent {
            overrun_error_count: <u32>::from_le_byte_slice(&bytes[0..4]),
            parity_error_count: <u32>::from_le_byte_slice(&bytes[4..8]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveReadCoilsRequestEvent {
    pub request_id: u8,
    pub starting_address: u32,
    pub count: u16,
}
impl FromByteSlice for ModbusSlaveReadCoilsRequestEvent {
    fn bytes_expected() -> usize {
        7
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveReadCoilsRequestEvent {
        ModbusSlaveReadCoilsRequestEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            starting_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            count: <u16>::from_le_byte_slice(&bytes[5..7]),
        }
    }
}
#[derive(Clone, Copy)]
pub struct ModbusMasterReadCoilsResponseLowLevelEvent {
    pub request_id: u8,
    pub exception_code: i8,
    pub coils_length: u16,
    pub coils_chunk_offset: u16,
    pub coils_chunk_data: [bool; 464],
}
impl FromByteSlice for ModbusMasterReadCoilsResponseLowLevelEvent {
    fn bytes_expected() -> usize {
        64
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterReadCoilsResponseLowLevelEvent {
        ModbusMasterReadCoilsResponseLowLevelEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
            coils_length: <u16>::from_le_byte_slice(&bytes[2..4]),
            coils_chunk_offset: <u16>::from_le_byte_slice(&bytes[4..6]),
            coils_chunk_data: <[bool; 464]>::from_le_byte_slice(&bytes[6..64]),
        }
    }
}
impl LowLevelRead<bool, ModbusMasterReadCoilsResponseResult> for ModbusMasterReadCoilsResponseLowLevelEvent {
    fn ll_message_length(&self) -> usize {
        self.coils_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.coils_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[bool] {
        &self.coils_chunk_data
    }
    fn get_result(&self) -> ModbusMasterReadCoilsResponseResult {
        ModbusMasterReadCoilsResponseResult { request_id: self.request_id, exception_code: self.exception_code }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveReadHoldingRegistersRequestEvent {
    pub request_id: u8,
    pub starting_address: u32,
    pub count: u16,
}
impl FromByteSlice for ModbusSlaveReadHoldingRegistersRequestEvent {
    fn bytes_expected() -> usize {
        7
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveReadHoldingRegistersRequestEvent {
        ModbusSlaveReadHoldingRegistersRequestEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            starting_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            count: <u16>::from_le_byte_slice(&bytes[5..7]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterReadHoldingRegistersResponseLowLevelEvent {
    pub request_id: u8,
    pub exception_code: i8,
    pub holding_registers_length: u16,
    pub holding_registers_chunk_offset: u16,
    pub holding_registers_chunk_data: [u16; 29],
}
impl FromByteSlice for ModbusMasterReadHoldingRegistersResponseLowLevelEvent {
    fn bytes_expected() -> usize {
        64
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterReadHoldingRegistersResponseLowLevelEvent {
        ModbusMasterReadHoldingRegistersResponseLowLevelEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
            holding_registers_length: <u16>::from_le_byte_slice(&bytes[2..4]),
            holding_registers_chunk_offset: <u16>::from_le_byte_slice(&bytes[4..6]),
            holding_registers_chunk_data: <[u16; 29]>::from_le_byte_slice(&bytes[6..64]),
        }
    }
}
impl LowLevelRead<u16, ModbusMasterReadHoldingRegistersResponseResult> for ModbusMasterReadHoldingRegistersResponseLowLevelEvent {
    fn ll_message_length(&self) -> usize {
        self.holding_registers_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.holding_registers_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[u16] {
        &self.holding_registers_chunk_data
    }
    fn get_result(&self) -> ModbusMasterReadHoldingRegistersResponseResult {
        ModbusMasterReadHoldingRegistersResponseResult { request_id: self.request_id, exception_code: self.exception_code }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveWriteSingleCoilRequestEvent {
    pub request_id: u8,
    pub coil_address: u32,
    pub coil_value: bool,
}
impl FromByteSlice for ModbusSlaveWriteSingleCoilRequestEvent {
    fn bytes_expected() -> usize {
        6
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveWriteSingleCoilRequestEvent {
        ModbusSlaveWriteSingleCoilRequestEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            coil_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            coil_value: <bool>::from_le_byte_slice(&bytes[5..6]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteSingleCoilResponseEvent {
    pub request_id: u8,
    pub exception_code: i8,
}
impl FromByteSlice for ModbusMasterWriteSingleCoilResponseEvent {
    fn bytes_expected() -> usize {
        2
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterWriteSingleCoilResponseEvent {
        ModbusMasterWriteSingleCoilResponseEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveWriteSingleRegisterRequestEvent {
    pub request_id: u8,
    pub register_address: u32,
    pub register_value: u16,
}
impl FromByteSlice for ModbusSlaveWriteSingleRegisterRequestEvent {
    fn bytes_expected() -> usize {
        7
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveWriteSingleRegisterRequestEvent {
        ModbusSlaveWriteSingleRegisterRequestEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            register_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            register_value: <u16>::from_le_byte_slice(&bytes[5..7]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteSingleRegisterResponseEvent {
    pub request_id: u8,
    pub exception_code: i8,
}
impl FromByteSlice for ModbusMasterWriteSingleRegisterResponseEvent {
    fn bytes_expected() -> usize {
        2
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterWriteSingleRegisterResponseEvent {
        ModbusMasterWriteSingleRegisterResponseEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
        }
    }
}
#[derive(Clone, Copy)]
pub struct ModbusSlaveWriteMultipleCoilsRequestLowLevelEvent {
    pub request_id: u8,
    pub starting_address: u32,
    pub coils_length: u16,
    pub coils_chunk_offset: u16,
    pub coils_chunk_data: [bool; 440],
}
impl FromByteSlice for ModbusSlaveWriteMultipleCoilsRequestLowLevelEvent {
    fn bytes_expected() -> usize {
        64
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveWriteMultipleCoilsRequestLowLevelEvent {
        ModbusSlaveWriteMultipleCoilsRequestLowLevelEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            starting_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            coils_length: <u16>::from_le_byte_slice(&bytes[5..7]),
            coils_chunk_offset: <u16>::from_le_byte_slice(&bytes[7..9]),
            coils_chunk_data: <[bool; 440]>::from_le_byte_slice(&bytes[9..64]),
        }
    }
}
impl LowLevelRead<bool, ModbusSlaveWriteMultipleCoilsRequestResult> for ModbusSlaveWriteMultipleCoilsRequestLowLevelEvent {
    fn ll_message_length(&self) -> usize {
        self.coils_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.coils_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[bool] {
        &self.coils_chunk_data
    }
    fn get_result(&self) -> ModbusSlaveWriteMultipleCoilsRequestResult {
        ModbusSlaveWriteMultipleCoilsRequestResult { request_id: self.request_id, starting_address: self.starting_address }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteMultipleCoilsResponseEvent {
    pub request_id: u8,
    pub exception_code: i8,
}
impl FromByteSlice for ModbusMasterWriteMultipleCoilsResponseEvent {
    fn bytes_expected() -> usize {
        2
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterWriteMultipleCoilsResponseEvent {
        ModbusMasterWriteMultipleCoilsResponseEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveWriteMultipleRegistersRequestLowLevelEvent {
    pub request_id: u8,
    pub starting_address: u32,
    pub registers_length: u16,
    pub registers_chunk_offset: u16,
    pub registers_chunk_data: [u16; 27],
}
impl FromByteSlice for ModbusSlaveWriteMultipleRegistersRequestLowLevelEvent {
    fn bytes_expected() -> usize {
        63
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveWriteMultipleRegistersRequestLowLevelEvent {
        ModbusSlaveWriteMultipleRegistersRequestLowLevelEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            starting_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            registers_length: <u16>::from_le_byte_slice(&bytes[5..7]),
            registers_chunk_offset: <u16>::from_le_byte_slice(&bytes[7..9]),
            registers_chunk_data: <[u16; 27]>::from_le_byte_slice(&bytes[9..63]),
        }
    }
}
impl LowLevelRead<u16, ModbusSlaveWriteMultipleRegistersRequestResult> for ModbusSlaveWriteMultipleRegistersRequestLowLevelEvent {
    fn ll_message_length(&self) -> usize {
        self.registers_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.registers_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[u16] {
        &self.registers_chunk_data
    }
    fn get_result(&self) -> ModbusSlaveWriteMultipleRegistersRequestResult {
        ModbusSlaveWriteMultipleRegistersRequestResult { request_id: self.request_id, starting_address: self.starting_address }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteMultipleRegistersResponseEvent {
    pub request_id: u8,
    pub exception_code: i8,
}
impl FromByteSlice for ModbusMasterWriteMultipleRegistersResponseEvent {
    fn bytes_expected() -> usize {
        2
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterWriteMultipleRegistersResponseEvent {
        ModbusMasterWriteMultipleRegistersResponseEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveReadDiscreteInputsRequestEvent {
    pub request_id: u8,
    pub starting_address: u32,
    pub count: u16,
}
impl FromByteSlice for ModbusSlaveReadDiscreteInputsRequestEvent {
    fn bytes_expected() -> usize {
        7
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveReadDiscreteInputsRequestEvent {
        ModbusSlaveReadDiscreteInputsRequestEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            starting_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            count: <u16>::from_le_byte_slice(&bytes[5..7]),
        }
    }
}
#[derive(Clone, Copy)]
pub struct ModbusMasterReadDiscreteInputsResponseLowLevelEvent {
    pub request_id: u8,
    pub exception_code: i8,
    pub discrete_inputs_length: u16,
    pub discrete_inputs_chunk_offset: u16,
    pub discrete_inputs_chunk_data: [bool; 464],
}
impl FromByteSlice for ModbusMasterReadDiscreteInputsResponseLowLevelEvent {
    fn bytes_expected() -> usize {
        64
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterReadDiscreteInputsResponseLowLevelEvent {
        ModbusMasterReadDiscreteInputsResponseLowLevelEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
            discrete_inputs_length: <u16>::from_le_byte_slice(&bytes[2..4]),
            discrete_inputs_chunk_offset: <u16>::from_le_byte_slice(&bytes[4..6]),
            discrete_inputs_chunk_data: <[bool; 464]>::from_le_byte_slice(&bytes[6..64]),
        }
    }
}
impl LowLevelRead<bool, ModbusMasterReadDiscreteInputsResponseResult> for ModbusMasterReadDiscreteInputsResponseLowLevelEvent {
    fn ll_message_length(&self) -> usize {
        self.discrete_inputs_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.discrete_inputs_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[bool] {
        &self.discrete_inputs_chunk_data
    }
    fn get_result(&self) -> ModbusMasterReadDiscreteInputsResponseResult {
        ModbusMasterReadDiscreteInputsResponseResult { request_id: self.request_id, exception_code: self.exception_code }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveReadInputRegistersRequestEvent {
    pub request_id: u8,
    pub starting_address: u32,
    pub count: u16,
}
impl FromByteSlice for ModbusSlaveReadInputRegistersRequestEvent {
    fn bytes_expected() -> usize {
        7
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusSlaveReadInputRegistersRequestEvent {
        ModbusSlaveReadInputRegistersRequestEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            starting_address: <u32>::from_le_byte_slice(&bytes[1..5]),
            count: <u16>::from_le_byte_slice(&bytes[5..7]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterReadInputRegistersResponseLowLevelEvent {
    pub request_id: u8,
    pub exception_code: i8,
    pub input_registers_length: u16,
    pub input_registers_chunk_offset: u16,
    pub input_registers_chunk_data: [u16; 29],
}
impl FromByteSlice for ModbusMasterReadInputRegistersResponseLowLevelEvent {
    fn bytes_expected() -> usize {
        64
    }
    fn from_le_byte_slice(bytes: &[u8]) -> ModbusMasterReadInputRegistersResponseLowLevelEvent {
        ModbusMasterReadInputRegistersResponseLowLevelEvent {
            request_id: <u8>::from_le_byte_slice(&bytes[0..1]),
            exception_code: <i8>::from_le_byte_slice(&bytes[1..2]),
            input_registers_length: <u16>::from_le_byte_slice(&bytes[2..4]),
            input_registers_chunk_offset: <u16>::from_le_byte_slice(&bytes[4..6]),
            input_registers_chunk_data: <[u16; 29]>::from_le_byte_slice(&bytes[6..64]),
        }
    }
}
impl LowLevelRead<u16, ModbusMasterReadInputRegistersResponseResult> for ModbusMasterReadInputRegistersResponseLowLevelEvent {
    fn ll_message_length(&self) -> usize {
        self.input_registers_length as usize
    }
    fn ll_message_chunk_offset(&self) -> usize {
        self.input_registers_chunk_offset as usize
    }
    fn ll_message_chunk_data(&self) -> &[u16] {
        &self.input_registers_chunk_data
    }
    fn get_result(&self) -> ModbusMasterReadInputRegistersResponseResult {
        ModbusMasterReadInputRegistersResponseResult { request_id: self.request_id, exception_code: self.exception_code }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct SpitfpErrorCount {
    pub error_count_ack_checksum: u32,
    pub error_count_message_checksum: u32,
    pub error_count_frame: u32,
    pub error_count_overflow: u32,
}
impl FromByteSlice for SpitfpErrorCount {
    fn bytes_expected() -> usize {
        16
    }
    fn from_le_byte_slice(bytes: &[u8]) -> SpitfpErrorCount {
        SpitfpErrorCount {
            error_count_ack_checksum: <u32>::from_le_byte_slice(&bytes[0..4]),
            error_count_message_checksum: <u32>::from_le_byte_slice(&bytes[4..8]),
            error_count_frame: <u32>::from_le_byte_slice(&bytes[8..12]),
            error_count_overflow: <u32>::from_le_byte_slice(&bytes[12..16]),
        }
    }
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
pub struct Identity {
    pub uid: String,
    pub connected_uid: String,
    pub position: char,
    pub hardware_version: [u8; 3],
    pub firmware_version: [u8; 3],
    pub device_identifier: u16,
}
impl FromByteSlice for Identity {
    fn bytes_expected() -> usize {
        25
    }
    fn from_le_byte_slice(bytes: &[u8]) -> Identity {
        Identity {
            uid: <String>::from_le_byte_slice(&bytes[0..8]),
            connected_uid: <String>::from_le_byte_slice(&bytes[8..16]),
            position: <char>::from_le_byte_slice(&bytes[16..17]),
            hardware_version: <[u8; 3]>::from_le_byte_slice(&bytes[17..20]),
            firmware_version: <[u8; 3]>::from_le_byte_slice(&bytes[20..23]),
            device_identifier: <u16>::from_le_byte_slice(&bytes[23..25]),
        }
    }
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct WriteResult {}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ReadResult {}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadCoilsRequestResult {}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadHoldingRegistersRequestResult {}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteMultipleCoilsResult {
    pub request_id: u8,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterWriteMultipleRegistersResult {
    pub request_id: u8,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadDiscreteInputsRequestResult {}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveAnswerReadInputRegistersRequestResult {}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterReadCoilsResponseResult {
    pub request_id: u8,
    pub exception_code: i8,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterReadHoldingRegistersResponseResult {
    pub request_id: u8,
    pub exception_code: i8,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveWriteMultipleCoilsRequestResult {
    pub request_id: u8,
    pub starting_address: u32,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusSlaveWriteMultipleRegistersRequestResult {
    pub request_id: u8,
    pub starting_address: u32,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterReadDiscreteInputsResponseResult {
    pub request_id: u8,
    pub exception_code: i8,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct ModbusMasterReadInputRegistersResponseResult {
    pub request_id: u8,
    pub exception_code: i8,
}
#[derive(Clone)]
pub struct Rs485Bricklet {
    device: Device,
}
impl Rs485Bricklet {
    pub const DEVICE_IDENTIFIER: u16 = 277;
    pub const DEVICE_DISPLAY_NAME: &'static str = "RS485 Bricklet";
    pub fn new(uid: u32, connection: AsyncIpConnection) -> Rs485Bricklet {
        let mut result = Rs485Bricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
        result.device.response_expected[u8::from(Rs485BrickletFunction::WriteLowLevel) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ReadLowLevel) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::EnableReadCallback) as usize] = ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::DisableReadCallback) as usize] = ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::IsReadCallbackEnabled) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetRs485Configuration) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetRs485Configuration) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetModbusConfiguration) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetModbusConfiguration) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetMode) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetCommunicationLedConfig) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetCommunicationLedConfig) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetErrorLedConfig) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetErrorLedConfig) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetBufferConfig) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetBufferConfig) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetBufferStatus) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::EnableErrorCountCallback) as usize] = ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::DisableErrorCountCallback) as usize] = ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::IsErrorCountCallbackEnabled) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetErrorCount) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetModbusCommonErrorCount) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveReportException) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadCoilsRequestLowLevel) as usize] =
            ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterReadCoils) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel) as usize] =
            ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterReadHoldingRegisters) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteSingleCoilRequest) as usize] =
            ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterWriteSingleCoil) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteSingleRegisterRequest) as usize] =
            ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterWriteSingleRegister) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteMultipleCoilsRequest) as usize] =
            ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterWriteMultipleCoilsLowLevel) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteMultipleRegistersRequest) as usize] =
            ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterWriteMultipleRegistersLowLevel) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel) as usize] =
            ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterReadDiscreteInputs) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadInputRegistersRequestLowLevel) as usize] =
            ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ModbusMasterReadInputRegisters) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetFrameReadableCallbackConfiguration) as usize] =
            ResponseExpectedFlag::True;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetFrameReadableCallbackConfiguration) as usize] =
            ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetSpitfpErrorCount) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetBootloaderMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetBootloaderMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetWriteFirmwarePointer) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::WriteFirmware) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::SetStatusLedConfig) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetStatusLedConfig) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetChipTemperature) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::Reset) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::WriteUid) as usize] = ResponseExpectedFlag::False;
        result.device.response_expected[u8::from(Rs485BrickletFunction::ReadUid) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result.device.response_expected[u8::from(Rs485BrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
        result
    }
    pub fn get_response_expected(&mut self, fun: Rs485BrickletFunction) -> Result<bool, GetResponseExpectedError> {
        self.device.get_response_expected(u8::from(fun))
    }
    pub fn set_response_expected(&mut self, fun: Rs485BrickletFunction, response_expected: bool) -> Result<(), SetResponseExpectedError> {
        self.device.set_response_expected(u8::from(fun), response_expected)
    }
    pub fn set_response_expected_all(&mut self, response_expected: bool) {
        self.device.set_response_expected_all(response_expected)
    }
    pub fn get_api_version(&self) -> [u8; 3] {
        self.device.api_version
    }
    pub async fn get_read_low_level_callback_receiver(&mut self) -> impl Stream<Item = ReadLowLevelEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackReadLowLevel))
            .await
            .map(|p| ReadLowLevelEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_error_count_callback_receiver(&mut self) -> impl Stream<Item = ErrorCountEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackErrorCount))
            .await
            .map(|p| ErrorCountEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_read_coils_request_callback_receiver(&mut self) -> impl Stream<Item = ModbusSlaveReadCoilsRequestEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveReadCoilsRequest))
            .await
            .map(|p| ModbusSlaveReadCoilsRequestEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_read_coils_response_low_level_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterReadCoilsResponseLowLevelEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterReadCoilsResponseLowLevel))
            .await
            .map(|p| ModbusMasterReadCoilsResponseLowLevelEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_read_holding_registers_request_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusSlaveReadHoldingRegistersRequestEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveReadHoldingRegistersRequest))
            .await
            .map(|p| ModbusSlaveReadHoldingRegistersRequestEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_read_holding_registers_response_low_level_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterReadHoldingRegistersResponseLowLevelEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterReadHoldingRegistersResponseLowLevel))
            .await
            .map(|p| ModbusMasterReadHoldingRegistersResponseLowLevelEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_write_single_coil_request_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusSlaveWriteSingleCoilRequestEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveWriteSingleCoilRequest))
            .await
            .map(|p| ModbusSlaveWriteSingleCoilRequestEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_write_single_coil_response_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterWriteSingleCoilResponseEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterWriteSingleCoilResponse))
            .await
            .map(|p| ModbusMasterWriteSingleCoilResponseEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_write_single_register_request_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusSlaveWriteSingleRegisterRequestEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveWriteSingleRegisterRequest))
            .await
            .map(|p| ModbusSlaveWriteSingleRegisterRequestEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_write_single_register_response_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterWriteSingleRegisterResponseEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterWriteSingleRegisterResponse))
            .await
            .map(|p| ModbusMasterWriteSingleRegisterResponseEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_write_multiple_coils_request_low_level_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusSlaveWriteMultipleCoilsRequestLowLevelEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveWriteMultipleCoilsRequestLowLevel))
            .await
            .map(|p| ModbusSlaveWriteMultipleCoilsRequestLowLevelEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_write_multiple_coils_response_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterWriteMultipleCoilsResponseEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterWriteMultipleCoilsResponse))
            .await
            .map(|p| ModbusMasterWriteMultipleCoilsResponseEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_write_multiple_registers_request_low_level_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusSlaveWriteMultipleRegistersRequestLowLevelEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveWriteMultipleRegistersRequestLowLevel))
            .await
            .map(|p| ModbusSlaveWriteMultipleRegistersRequestLowLevelEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_write_multiple_registers_response_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterWriteMultipleRegistersResponseEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterWriteMultipleRegistersResponse))
            .await
            .map(|p| ModbusMasterWriteMultipleRegistersResponseEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_read_discrete_inputs_request_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusSlaveReadDiscreteInputsRequestEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveReadDiscreteInputsRequest))
            .await
            .map(|p| ModbusSlaveReadDiscreteInputsRequestEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_read_discrete_inputs_response_low_level_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterReadDiscreteInputsResponseLowLevelEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterReadDiscreteInputsResponseLowLevel))
            .await
            .map(|p| ModbusMasterReadDiscreteInputsResponseLowLevelEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_slave_read_input_registers_request_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusSlaveReadInputRegistersRequestEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusSlaveReadInputRegistersRequest))
            .await
            .map(|p| ModbusSlaveReadInputRegistersRequestEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_modbus_master_read_input_registers_response_low_level_callback_receiver(
        &mut self,
    ) -> impl Stream<Item = ModbusMasterReadInputRegistersResponseLowLevelEvent> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackModbusMasterReadInputRegistersResponseLowLevel))
            .await
            .map(|p| ModbusMasterReadInputRegistersResponseLowLevelEvent::from_le_byte_slice(p.body()))
    }
    pub async fn get_frame_readable_callback_receiver(&mut self) -> impl Stream<Item = u16> {
        self.device
            .get_callback_receiver(u8::from(Rs485BrickletFunction::CallbackFrameReadable))
            .await
            .map(|p| u16::from_le_byte_slice(p.body()))
    }
    pub async fn write_low_level(
        &mut self,
        message_length: u16,
        message_chunk_offset: u16,
        message_chunk_data: &[char; 60],
    ) -> Result<WriteLowLevel, TinkerforgeError> {
        let mut payload = [0; 64];
        message_length.write_to_slice(&mut payload[0..2]);
        message_chunk_offset.write_to_slice(&mut payload[2..4]);
        message_chunk_data.write_to_slice(&mut payload[4..64]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::WriteLowLevel), &payload).await?;
        Ok(WriteLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn read_low_level(&mut self, length: u16) -> Result<ReadLowLevel, TinkerforgeError> {
        let mut payload = [0; 2];
        length.write_to_slice(&mut payload[0..2]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ReadLowLevel), &payload).await?;
        Ok(ReadLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn enable_read_callback(&mut self) -> Result<(), TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::EnableReadCallback), &payload).await?;
        Ok(())
    }
    pub async fn disable_read_callback(&mut self) -> Result<(), TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::DisableReadCallback), &payload).await?;
        Ok(())
    }
    pub async fn is_read_callback_enabled(&mut self) -> Result<bool, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::IsReadCallbackEnabled), &payload).await?;
        Ok(bool::from_le_byte_slice(result.body()))
    }
    pub async fn set_rs485_configuration(
        &mut self,
        baudrate: u32,
        parity: u8,
        stopbits: u8,
        wordlength: u8,
        duplex: u8,
    ) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 8];
        baudrate.write_to_slice(&mut payload[0..4]);
        parity.write_to_slice(&mut payload[4..5]);
        stopbits.write_to_slice(&mut payload[5..6]);
        wordlength.write_to_slice(&mut payload[6..7]);
        duplex.write_to_slice(&mut payload[7..8]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetRs485Configuration), &payload).await?;
        Ok(())
    }
    pub async fn get_rs485_configuration(&mut self) -> Result<Rs485Configuration, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetRs485Configuration), &payload).await?;
        Ok(Rs485Configuration::from_le_byte_slice(result.body()))
    }
    pub async fn set_modbus_configuration(&mut self, slave_address: u8, master_request_timeout: u32) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 5];
        slave_address.write_to_slice(&mut payload[0..1]);
        master_request_timeout.write_to_slice(&mut payload[1..5]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetModbusConfiguration), &payload).await?;
        Ok(())
    }
    pub async fn get_modbus_configuration(&mut self) -> Result<ModbusConfiguration, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetModbusConfiguration), &payload).await?;
        Ok(ModbusConfiguration::from_le_byte_slice(result.body()))
    }
    pub async fn set_mode(&mut self, mode: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        mode.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetMode), &payload).await?;
        Ok(())
    }
    pub async fn get_mode(&mut self) -> Result<u8, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetMode), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn set_communication_led_config(&mut self, config: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        config.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetCommunicationLedConfig), &payload).await?;
        Ok(())
    }
    pub async fn get_communication_led_config(&mut self) -> Result<u8, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetCommunicationLedConfig), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn set_error_led_config(&mut self, config: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        config.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetErrorLedConfig), &payload).await?;
        Ok(())
    }
    pub async fn get_error_led_config(&mut self) -> Result<u8, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetErrorLedConfig), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn set_buffer_config(&mut self, send_buffer_size: u16, receive_buffer_size: u16) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 4];
        send_buffer_size.write_to_slice(&mut payload[0..2]);
        receive_buffer_size.write_to_slice(&mut payload[2..4]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetBufferConfig), &payload).await?;
        Ok(())
    }
    pub async fn get_buffer_config(&mut self) -> Result<BufferConfig, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetBufferConfig), &payload).await?;
        Ok(BufferConfig::from_le_byte_slice(result.body()))
    }
    pub async fn get_buffer_status(&mut self) -> Result<BufferStatus, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetBufferStatus), &payload).await?;
        Ok(BufferStatus::from_le_byte_slice(result.body()))
    }
    pub async fn enable_error_count_callback(&mut self) -> Result<(), TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::EnableErrorCountCallback), &payload).await?;
        Ok(())
    }
    pub async fn disable_error_count_callback(&mut self) -> Result<(), TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::DisableErrorCountCallback), &payload).await?;
        Ok(())
    }
    pub async fn is_error_count_callback_enabled(&mut self) -> Result<bool, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::IsErrorCountCallbackEnabled), &payload).await?;
        Ok(bool::from_le_byte_slice(result.body()))
    }
    pub async fn get_error_count(&mut self) -> Result<ErrorCount, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetErrorCount), &payload).await?;
        Ok(ErrorCount::from_le_byte_slice(result.body()))
    }
    pub async fn get_modbus_common_error_count(&mut self) -> Result<ModbusCommonErrorCount, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetModbusCommonErrorCount), &payload).await?;
        Ok(ModbusCommonErrorCount::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_report_exception(&mut self, request_id: u8, exception_code: i8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 2];
        request_id.write_to_slice(&mut payload[0..1]);
        exception_code.write_to_slice(&mut payload[1..2]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveReportException), &payload).await?;
        Ok(())
    }
    pub async fn modbus_slave_answer_read_coils_request_low_level(
        &mut self,
        request_id: u8,
        coils_length: u16,
        coils_chunk_offset: u16,
        coils_chunk_data: &[bool; 472],
    ) -> Result<ModbusSlaveAnswerReadCoilsRequestLowLevel, TinkerforgeError> {
        let mut payload = [0; 64];
        request_id.write_to_slice(&mut payload[0..1]);
        coils_length.write_to_slice(&mut payload[1..3]);
        coils_chunk_offset.write_to_slice(&mut payload[3..5]);
        coils_chunk_data.write_to_slice(&mut payload[5..64]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadCoilsRequestLowLevel), &payload).await?.unwrap();
        Ok(ModbusSlaveAnswerReadCoilsRequestLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_master_read_coils(&mut self, slave_address: u8, starting_address: u32, count: u16) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 7];
        slave_address.write_to_slice(&mut payload[0..1]);
        starting_address.write_to_slice(&mut payload[1..5]);
        count.write_to_slice(&mut payload[5..7]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterReadCoils), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_answer_read_holding_registers_request_low_level(
        &mut self,
        request_id: u8,
        holding_registers_length: u16,
        holding_registers_chunk_offset: u16,
        holding_registers_chunk_data: &[u16; 29],
    ) -> Result<ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel, TinkerforgeError> {
        let mut payload = [0; 63];
        request_id.write_to_slice(&mut payload[0..1]);
        holding_registers_length.write_to_slice(&mut payload[1..3]);
        holding_registers_chunk_offset.write_to_slice(&mut payload[3..5]);
        holding_registers_chunk_data.write_to_slice(&mut payload[5..63]);
        #[allow(unused_variables)]
        let result = self
            .device
            .set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel), &payload)
            .await?
            .unwrap();
        Ok(ModbusSlaveAnswerReadHoldingRegistersRequestLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_master_read_holding_registers(
        &mut self,
        slave_address: u8,
        starting_address: u32,
        count: u16,
    ) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 7];
        slave_address.write_to_slice(&mut payload[0..1]);
        starting_address.write_to_slice(&mut payload[1..5]);
        count.write_to_slice(&mut payload[5..7]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterReadHoldingRegisters), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_answer_write_single_coil_request(&mut self, request_id: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        request_id.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteSingleCoilRequest), &payload).await?;
        Ok(())
    }
    pub async fn modbus_master_write_single_coil(
        &mut self,
        slave_address: u8,
        coil_address: u32,
        coil_value: bool,
    ) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 6];
        slave_address.write_to_slice(&mut payload[0..1]);
        coil_address.write_to_slice(&mut payload[1..5]);
        coil_value.write_to_slice(&mut payload[5..6]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterWriteSingleCoil), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_answer_write_single_register_request(&mut self, request_id: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        request_id.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteSingleRegisterRequest), &payload).await?;
        Ok(())
    }
    pub async fn modbus_master_write_single_register(
        &mut self,
        slave_address: u8,
        register_address: u32,
        register_value: u16,
    ) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 7];
        slave_address.write_to_slice(&mut payload[0..1]);
        register_address.write_to_slice(&mut payload[1..5]);
        register_value.write_to_slice(&mut payload[5..7]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterWriteSingleRegister), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_answer_write_multiple_coils_request(&mut self, request_id: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        request_id.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteMultipleCoilsRequest), &payload).await?;
        Ok(())
    }
    pub async fn modbus_master_write_multiple_coils_low_level(
        &mut self,
        slave_address: u8,
        starting_address: u32,
        coils_length: u16,
        coils_chunk_offset: u16,
        coils_chunk_data: &[bool; 440],
    ) -> Result<ModbusMasterWriteMultipleCoilsLowLevel, TinkerforgeError> {
        let mut payload = [0; 64];
        slave_address.write_to_slice(&mut payload[0..1]);
        starting_address.write_to_slice(&mut payload[1..5]);
        coils_length.write_to_slice(&mut payload[5..7]);
        coils_chunk_offset.write_to_slice(&mut payload[7..9]);
        coils_chunk_data.write_to_slice(&mut payload[9..64]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterWriteMultipleCoilsLowLevel), &payload).await?;
        Ok(ModbusMasterWriteMultipleCoilsLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_answer_write_multiple_registers_request(&mut self, request_id: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        request_id.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerWriteMultipleRegistersRequest), &payload).await?;
        Ok(())
    }
    pub async fn modbus_master_write_multiple_registers_low_level(
        &mut self,
        slave_address: u8,
        starting_address: u32,
        registers_length: u16,
        registers_chunk_offset: u16,
        registers_chunk_data: &[u16; 27],
    ) -> Result<ModbusMasterWriteMultipleRegistersLowLevel, TinkerforgeError> {
        let mut payload = [0; 63];
        slave_address.write_to_slice(&mut payload[0..1]);
        starting_address.write_to_slice(&mut payload[1..5]);
        registers_length.write_to_slice(&mut payload[5..7]);
        registers_chunk_offset.write_to_slice(&mut payload[7..9]);
        registers_chunk_data.write_to_slice(&mut payload[9..63]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterWriteMultipleRegistersLowLevel), &payload).await?;
        Ok(ModbusMasterWriteMultipleRegistersLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_answer_read_discrete_inputs_request_low_level(
        &mut self,
        request_id: u8,
        discrete_inputs_length: u16,
        discrete_inputs_chunk_offset: u16,
        discrete_inputs_chunk_data: &[bool; 472],
    ) -> Result<ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel, TinkerforgeError> {
        let mut payload = [0; 64];
        request_id.write_to_slice(&mut payload[0..1]);
        discrete_inputs_length.write_to_slice(&mut payload[1..3]);
        discrete_inputs_chunk_offset.write_to_slice(&mut payload[3..5]);
        discrete_inputs_chunk_data.write_to_slice(&mut payload[5..64]);
        #[allow(unused_variables)]
        let result =
            self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel), &payload).await?.unwrap();
        Ok(ModbusSlaveAnswerReadDiscreteInputsRequestLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_master_read_discrete_inputs(
        &mut self,
        slave_address: u8,
        starting_address: u32,
        count: u16,
    ) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 7];
        slave_address.write_to_slice(&mut payload[0..1]);
        starting_address.write_to_slice(&mut payload[1..5]);
        count.write_to_slice(&mut payload[5..7]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterReadDiscreteInputs), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_slave_answer_read_input_registers_request_low_level(
        &mut self,
        request_id: u8,
        input_registers_length: u16,
        input_registers_chunk_offset: u16,
        input_registers_chunk_data: &[u16; 29],
    ) -> Result<ModbusSlaveAnswerReadInputRegistersRequestLowLevel, TinkerforgeError> {
        let mut payload = [0; 63];
        request_id.write_to_slice(&mut payload[0..1]);
        input_registers_length.write_to_slice(&mut payload[1..3]);
        input_registers_chunk_offset.write_to_slice(&mut payload[3..5]);
        input_registers_chunk_data.write_to_slice(&mut payload[5..63]);
        #[allow(unused_variables)]
        let result =
            self.device.set(u8::from(Rs485BrickletFunction::ModbusSlaveAnswerReadInputRegistersRequestLowLevel), &payload).await?.unwrap();
        Ok(ModbusSlaveAnswerReadInputRegistersRequestLowLevel::from_le_byte_slice(result.body()))
    }
    pub async fn modbus_master_read_input_registers(
        &mut self,
        slave_address: u8,
        starting_address: u32,
        count: u16,
    ) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 7];
        slave_address.write_to_slice(&mut payload[0..1]);
        starting_address.write_to_slice(&mut payload[1..5]);
        count.write_to_slice(&mut payload[5..7]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ModbusMasterReadInputRegisters), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn set_frame_readable_callback_configuration(&mut self, frame_size: u16) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 2];
        frame_size.write_to_slice(&mut payload[0..2]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetFrameReadableCallbackConfiguration), &payload).await?;
        Ok(())
    }
    pub async fn get_frame_readable_callback_configuration(&mut self) -> Result<u16, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetFrameReadableCallbackConfiguration), &payload).await?;
        Ok(u16::from_le_byte_slice(result.body()))
    }
    pub async fn get_spitfp_error_count(&mut self) -> Result<SpitfpErrorCount, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetSpitfpErrorCount), &payload).await?;
        Ok(SpitfpErrorCount::from_le_byte_slice(result.body()))
    }
    pub async fn set_bootloader_mode(&mut self, mode: u8) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 1];
        mode.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::SetBootloaderMode), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn get_bootloader_mode(&mut self) -> Result<u8, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetBootloaderMode), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn set_write_firmware_pointer(&mut self, pointer: u32) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 4];
        pointer.write_to_slice(&mut payload[0..4]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetWriteFirmwarePointer), &payload).await?;
        Ok(())
    }
    pub async fn write_firmware(&mut self, data: &[u8; 64]) -> Result<u8, TinkerforgeError> {
        let mut payload = [0; 64];
        data.write_to_slice(&mut payload[0..64]);
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::WriteFirmware), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn set_status_led_config(&mut self, config: u8) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 1];
        config.write_to_slice(&mut payload[0..1]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::SetStatusLedConfig), &payload).await?;
        Ok(())
    }
    pub async fn get_status_led_config(&mut self) -> Result<u8, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetStatusLedConfig), &payload).await?;
        Ok(u8::from_le_byte_slice(result.body()))
    }
    pub async fn get_chip_temperature(&mut self) -> Result<i16, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetChipTemperature), &payload).await?;
        Ok(i16::from_le_byte_slice(result.body()))
    }
    pub async fn reset(&mut self) -> Result<(), TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::Reset), &payload).await?;
        Ok(())
    }
    pub async fn write_uid(&mut self, uid: u32) -> Result<(), TinkerforgeError> {
        let mut payload = [0; 4];
        uid.write_to_slice(&mut payload[0..4]);
        #[allow(unused_variables)]
        let result = self.device.set(u8::from(Rs485BrickletFunction::WriteUid), &payload).await?;
        Ok(())
    }
    pub async fn read_uid(&mut self) -> Result<u32, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::ReadUid), &payload).await?;
        Ok(u32::from_le_byte_slice(result.body()))
    }
    pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
        let payload = [0; 0];
        #[allow(unused_variables)]
        let result = self.device.get(u8::from(Rs485BrickletFunction::GetIdentity), &payload).await?;
        Ok(Identity::from_le_byte_slice(result.body()))
    }
}