ethercat 0.3.1

Binding to the IgH/Etherlab open-source EtherCAT master
Documentation
use ethercat::{AlState, Master, MasterAccess, SdoEntryAddr, SdoIdx, SdoPos, SlavePos, SubIdx};

pub fn main() -> Result<(), std::io::Error> {
    let slave_pos = SlavePos::from(0);
    let mut master = Master::open(0, MasterAccess::ReadWrite)?;
    master.request_state(slave_pos, AlState::PreOp)?;
    #[cfg(feature = "sncn")]
    master.dict_upload(slave_pos)?;
    let sdo_count = master.get_slave_info(slave_pos)?.sdo_count;
    if sdo_count == 0 {
        println!("Could not find any SDOs");
        return Ok(());
    }
    for i in 0..sdo_count {
        let sdo_info = master.get_sdo(slave_pos, SdoPos::from(i))?;
        for j in 0..=u8::from(sdo_info.max_sub_idx) {
            let addr = SdoEntryAddr::ByIdx(SdoIdx {
                idx: sdo_info.idx,
                sub_idx: SubIdx::from(j),
            });
            let entry = master.get_sdo_entry(slave_pos, addr)?;
            println!("0x{:X}/{} = {:#?}", u16::from(sdo_info.idx), j, entry);
        }
    }
    Ok(())
}