Equivalente Rust EtherCAT a ecrt_request_master()

Enquanto em C++ você usaria

ethercat_request_master.cpp
// Requisitionar master
master = ecrt_request_master(0);
if (!master) {
    std::cerr << "Failed to request master!" << std::endl;
    return -1;
}

em Rust, usando o ethercat crate, você faria assim:

ethercat_request_master.rs
use ethercat::{Master, MasterAccess};

// Você também pode usar MasterAccess::ReadOnly se não precisar de acesso de escrita
// 0 é o índice do master a abrir (geralmente 0)
let mut master = Master::open(0, MasterAccess::ReadWrite)?;
// Reserva (aka "requisitiona") o master (para acesso exclusivo, basicamente)
master.reserve()?;

Note que a função Master::open abre o dispositivo master, e o método reserve é usado para requisitar acesso exclusivo ao master.

A função C++ ecrt_request_master combina tanto abrir (ecrt_open_master()) quanto reservar (ecrt_master_reserve()) o master, enquanto em Rust esses são dois passos separados. Confira o código fonte do ecrt_request_master() para mais detalhes.


Check out similar posts by category: Rust, EtherCAT