rust-ads-client 0.1.0

Beckhoff ADS client to communicate with a TwinCat PLC or other ADS devices
Documentation
use ads_proto::ads_services::system_services::{
    ADSIGRP_SUMUP_READEX, ADSIGRP_SUMUP_WRITE, GET_SYMHANDLE_BY_NAME, READ_WRITE_SYMVAL_BY_HANDLE,
    RELEASE_SYMHANDLE,
};
use ads_proto::proto::ads_state::AdsState;
use ads_proto::proto::ads_transition_mode::AdsTransMode;
use ads_proto::proto::request::*;

pub fn get_var_handle_request(var_name: &str) -> ReadWriteRequest {
    ReadWriteRequest::new(
        GET_SYMHANDLE_BY_NAME.index_group,
        GET_SYMHANDLE_BY_NAME.index_offset_start,
        4,
        var_name.as_bytes().to_vec(),
    )
}

pub fn get_release_handle_request(handle: u32) -> WriteRequest {
    WriteRequest::new(
        RELEASE_SYMHANDLE.index_group,
        RELEASE_SYMHANDLE.index_offset_start,
        handle.to_le_bytes().to_vec(),
    )
}

pub fn get_read_request(handle: u32, len: u32) -> ReadRequest {
    ReadRequest::new(READ_WRITE_SYMVAL_BY_HANDLE.index_group, handle, len)
}

pub fn get_write_request(handle: u32, data: Vec<u8>) -> WriteRequest {
    WriteRequest::new(READ_WRITE_SYMVAL_BY_HANDLE.index_group, handle, data)
}

pub fn get_write_control_request(ads_state: AdsState, device_state: u16) -> WriteControlRequest {
    let data: Vec<u8> = Vec::with_capacity(0);
    WriteControlRequest::new(ads_state, device_state, 0, data)
}

pub fn get_read_write_request(
    index_offset: u32,
    read_len: u32,
    write_data: Vec<u8>,
) -> ReadWriteRequest {
    ReadWriteRequest::new(
        GET_SYMHANDLE_BY_NAME.index_group,
        index_offset,
        read_len,
        write_data,
    )
}

pub fn get_sumup_read_request(
    index_offset: u32,
    read_len: u32,
    write_data: Vec<u8>,
) -> ReadWriteRequest {
    ReadWriteRequest::new(
        ADSIGRP_SUMUP_READEX.index_group,
        index_offset,
        read_len,
        write_data,
    )
}

pub fn get_sumup_write_request(
    index_offset: u32,
    read_len: u32,
    write_data: Vec<u8>,
) -> ReadWriteRequest {
    ReadWriteRequest::new(
        ADSIGRP_SUMUP_WRITE.index_group,
        index_offset,
        read_len,
        write_data,
    )
}

pub fn get_add_device_notification(
    handle: u32,
    length: u32,
    transmission_mode: AdsTransMode,
    max_delay: u32,
    cycle_time: u32,
) -> AddDeviceNotificationRequest {
    AddDeviceNotificationRequest::new(
        READ_WRITE_SYMVAL_BY_HANDLE.index_group,
        handle,
        length,
        transmission_mode,
        max_delay,
        cycle_time,
    )
}

pub fn get_delete_device_notification(handle: u32) -> DeleteDeviceNotificationRequest {
    DeleteDeviceNotificationRequest::new(handle)
}