feat(UML-1462): Переделал API из статического класса в объектный
This commit is contained in:
parent
080b4f25c7
commit
0ffd4fa0fb
@ -12,7 +12,6 @@ namespace free_rtos {
|
||||
/*
|
||||
* Порядок инициализации:
|
||||
* Инициализировать и открыть драйвер eth_.Init(...), eth_.Open()
|
||||
* Вызвать EthEcatApi::init(eth_);
|
||||
* Создать служебный поток ecat_task_.Create(...) с вызовом EthEcatApi::process()
|
||||
* Вызвать EthEcatApi::config_init(...)
|
||||
* Создать пользовательский поток ecat_task_pdo_.Create(...)
|
||||
@ -20,53 +19,47 @@ namespace free_rtos {
|
||||
* pdo_write(...), pdo_read(...) или pdo_write_async(...), pdo_read_async(...)
|
||||
*/
|
||||
|
||||
Eth *EthEcatApi::eth_{nullptr};
|
||||
|
||||
void EthEcatApi::init(Eth& eth) {
|
||||
eth_ = ð
|
||||
}
|
||||
|
||||
bool EthEcatApi::config_init(TEthMacPorts port_id, uint16_t address_base) {
|
||||
bool status = false;
|
||||
|
||||
get_ecat().Init(port_id);
|
||||
ecat_.Init(port_id);
|
||||
|
||||
get_ecat().config_init(address_base);
|
||||
ecat_.config_init(address_base);
|
||||
|
||||
get_ecat_buffer_sdo().init(ECT_SII_RXMBXADR, ECT_SII_TXMBXADR);
|
||||
get_ecat_buffer_sdo().init_sync_manager(sync_manager::SYNC_M0, sync_manager::SYNC_M1);
|
||||
ecat_buffer_sdo_.init(ECT_SII_RXMBXADR, ECT_SII_TXMBXADR);
|
||||
ecat_buffer_sdo_.init_sync_manager(sync_manager::SYNC_M0, sync_manager::SYNC_M1);
|
||||
|
||||
get_ecat_buffer_pdo().init(ECT_PDOOUTPUTADR, ECT_PDOINPUTADR);
|
||||
ecat_buffer_pdo_.init(ECT_PDOOUTPUTADR, ECT_PDOINPUTADR);
|
||||
|
||||
get_ecat().enable_PDI();
|
||||
ecat_.enable_PDI();
|
||||
|
||||
status = get_ecat().init_to_preop();
|
||||
status = ecat_.init_to_preop();
|
||||
|
||||
if(status != true) {
|
||||
return status;
|
||||
}
|
||||
|
||||
get_ecat_sdo_mailbox().init();
|
||||
get_ecat_sdo_mailbox().read_pdo_map(ECT_RXPDOMAPINDEX, ECT_TXPDOMAPINDEX);
|
||||
ecat_sdo_mailbox_.init();
|
||||
ecat_sdo_mailbox_.read_pdo_map(ECT_RXPDOMAPINDEX, ECT_TXPDOMAPINDEX);
|
||||
|
||||
// Override buffer properties from eeprom for PDO
|
||||
#ifdef COMX
|
||||
get_ecat_buffer_pdo().set_buffer_offset(get_ecat_sdo_mailbox().get_pdo_map());
|
||||
ecat_buffer_pdo_.set_buffer_offset(ecat_sdo_mailbox_.get_pdo_map());
|
||||
#endif
|
||||
get_ecat_buffer_pdo().set_buffer_length(get_ecat_sdo_mailbox().get_pdo_map());
|
||||
ecat_buffer_pdo_.set_buffer_length(ecat_sdo_mailbox_.get_pdo_map());
|
||||
|
||||
get_ecat_buffer_pdo().init_sync_manager(sync_manager::SYNC_M2, sync_manager::SYNC_M3);
|
||||
get_ecat_buffer_pdo().init_fmmu(fmmu::FMMU0, fmmu::FMMU1);
|
||||
ecat_buffer_pdo_.init_sync_manager(sync_manager::SYNC_M2, sync_manager::SYNC_M3);
|
||||
ecat_buffer_pdo_.init_fmmu(fmmu::FMMU0, fmmu::FMMU1);
|
||||
|
||||
get_ecat_pdo_fmmu().init();
|
||||
ecat_pdo_fmmu_.init();
|
||||
|
||||
status = get_ecat().preop_to_safeop();
|
||||
status = ecat_.preop_to_safeop();
|
||||
|
||||
if(status != true) {
|
||||
return status;
|
||||
}
|
||||
|
||||
status = get_ecat().safeop_to_op();
|
||||
status = ecat_.safeop_to_op();
|
||||
|
||||
if(status != true) {
|
||||
return status;
|
||||
@ -76,41 +69,11 @@ bool EthEcatApi::config_init(TEthMacPorts port_id, uint16_t address_base) {
|
||||
}
|
||||
|
||||
void EthEcatApi::process() {
|
||||
get_ecat_pdo_fmmu().process();
|
||||
ecat_pdo_fmmu_.process();
|
||||
}
|
||||
|
||||
std::vector<ecat_buffer::PDOMap>& EthEcatApi::get_ecat_pdo_map() {
|
||||
return get_ecat_sdo_mailbox().get_pdo_map();
|
||||
}
|
||||
|
||||
EthEcat& EthEcatApi::get_ecat() {
|
||||
static EthEcat ecat{*eth_};
|
||||
|
||||
return ecat;
|
||||
}
|
||||
|
||||
ecat_buffer::EthEcatBuffer& EthEcatApi::get_ecat_buffer_sdo() {
|
||||
static ecat_buffer::EthEcatBuffer ecat_buffer_sdo{get_ecat()};
|
||||
|
||||
return ecat_buffer_sdo;
|
||||
}
|
||||
|
||||
ecat_buffer::EthEcatBuffer& EthEcatApi::get_ecat_buffer_pdo() {
|
||||
static ecat_buffer::EthEcatBuffer ecat_buffer_pdo{get_ecat()};
|
||||
|
||||
return ecat_buffer_pdo;
|
||||
}
|
||||
|
||||
ecat_sdo_mailbox::EthEcatSdoMailbox& EthEcatApi::get_ecat_sdo_mailbox() {
|
||||
static ecat_sdo_mailbox::EthEcatSdoMailbox ecat_sdo_mailbox{get_ecat_buffer_sdo()};
|
||||
|
||||
return ecat_sdo_mailbox;
|
||||
}
|
||||
|
||||
ecat_pdo_fmmu::EthEcatPdoFMMU& EthEcatApi::get_ecat_pdo_fmmu() {
|
||||
static ecat_pdo_fmmu::EthEcatPdoFMMU ecat_pdo_fmmu{get_ecat_buffer_pdo()};
|
||||
|
||||
return ecat_pdo_fmmu;
|
||||
return ecat_sdo_mailbox_.get_pdo_map();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ namespace free_rtos {
|
||||
/*
|
||||
* Порядок инициализации:
|
||||
* Инициализировать и открыть драйвер eth_.Init(...), eth_.Open()
|
||||
* Вызвать EthEcatApi::init(eth_);
|
||||
* Создать служебный поток ecat_task_.Create(...) с вызовом EthEcatApi::process()
|
||||
* Вызвать EthEcatApi::config_init(...)
|
||||
* Создать пользовательский поток ecat_task_pdo_.Create(...)
|
||||
@ -31,51 +30,57 @@ namespace free_rtos {
|
||||
|
||||
class EthEcatApi {
|
||||
public:
|
||||
static void init(Eth& eth);
|
||||
static bool config_init(TEthMacPorts port_id, uint16_t address_base);
|
||||
static void process(); // Внутри бесконечный цикл. Запускать в отдельном потоке
|
||||
EthEcatApi(Eth *eth)
|
||||
: eth_{eth}
|
||||
, ecat_{*eth}
|
||||
, ecat_buffer_sdo_{ecat_}
|
||||
, ecat_buffer_pdo_{ecat_}
|
||||
, ecat_sdo_mailbox_{ecat_buffer_sdo_}
|
||||
, ecat_pdo_fmmu_{ecat_buffer_pdo_} { }
|
||||
|
||||
static std::vector<ecat_buffer::PDOMap>& get_ecat_pdo_map();
|
||||
static uint32_t get_pdo_counter() {
|
||||
return get_ecat_pdo_fmmu().get_pdo_counter();
|
||||
bool config_init(TEthMacPorts port_id, uint16_t address_base);
|
||||
void process(); // Внутри бесконечный цикл. Запускать в отдельном потоке
|
||||
std::vector<ecat_buffer::PDOMap>& get_ecat_pdo_map();
|
||||
|
||||
uint32_t get_pdo_counter() {
|
||||
return ecat_pdo_fmmu_.get_pdo_counter();
|
||||
}
|
||||
|
||||
template<typename... DataTypes>
|
||||
static ecat_sdo_mailbox::CompleteSize sdo_write(size_t slave_index, uint16_t index, uint8_t subindex, DataTypes&... data) {
|
||||
return get_ecat_sdo_mailbox().sdo_write<command::FP, DataTypes...>(slave_index, index, subindex, data...);
|
||||
ecat_sdo_mailbox::CompleteSize sdo_write(size_t slave_index, uint16_t index, uint8_t subindex, DataTypes&... data) {
|
||||
return ecat_sdo_mailbox_.sdo_write<command::FP, DataTypes...>(slave_index, index, subindex, data...);
|
||||
}
|
||||
|
||||
template<typename... DataTypes>
|
||||
static ecat_sdo_mailbox::CompleteSize sdo_read(size_t slave_index, uint16_t index, uint8_t subindex, DataTypes&... data) {
|
||||
return get_ecat_sdo_mailbox().sdo_read<command::FP, DataTypes...>(slave_index, index, subindex, data...);
|
||||
ecat_sdo_mailbox::CompleteSize sdo_read(size_t slave_index, uint16_t index, uint8_t subindex, DataTypes&... data) {
|
||||
return ecat_sdo_mailbox_.sdo_read<command::FP, DataTypes...>(slave_index, index, subindex, data...);
|
||||
}
|
||||
|
||||
template<typename... DataTypes>
|
||||
static bool pdo_write(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
|
||||
return get_ecat_pdo_fmmu().pdo_write<DataTypes...>(timeout_ticks, offset, data...);
|
||||
bool pdo_write(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
|
||||
return ecat_pdo_fmmu_.pdo_write<DataTypes...>(timeout_ticks, offset, data...);
|
||||
}
|
||||
|
||||
template<typename... DataTypes>
|
||||
static bool pdo_read(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
|
||||
return get_ecat_pdo_fmmu().pdo_read<DataTypes...>(timeout_ticks, offset, data...);
|
||||
bool pdo_read(uint32_t timeout_ticks, address::Offset offset, DataTypes&... data) {
|
||||
return ecat_pdo_fmmu_.pdo_read<DataTypes...>(timeout_ticks, offset, data...);
|
||||
}
|
||||
|
||||
static void pdo_write_async(custom_promise::IPromise& promise) {
|
||||
get_ecat_pdo_fmmu().pdo_write_async(promise);
|
||||
void pdo_write_async(custom_promise::IPromise& promise) {
|
||||
ecat_pdo_fmmu_.pdo_write_async(promise);
|
||||
}
|
||||
|
||||
static void pdo_read_async(custom_promise::IPromise& promise) {
|
||||
get_ecat_pdo_fmmu().pdo_read_async(promise);
|
||||
void pdo_read_async(custom_promise::IPromise& promise) {
|
||||
ecat_pdo_fmmu_.pdo_read_async(promise);
|
||||
}
|
||||
|
||||
private:
|
||||
static Eth *eth_;
|
||||
|
||||
static EthEcat& get_ecat();
|
||||
static ecat_buffer::EthEcatBuffer& get_ecat_buffer_sdo();
|
||||
static ecat_buffer::EthEcatBuffer& get_ecat_buffer_pdo();
|
||||
static ecat_sdo_mailbox::EthEcatSdoMailbox& get_ecat_sdo_mailbox();
|
||||
static ecat_pdo_fmmu::EthEcatPdoFMMU& get_ecat_pdo_fmmu();
|
||||
Eth *eth_;
|
||||
EthEcat ecat_;
|
||||
ecat_buffer::EthEcatBuffer ecat_buffer_sdo_;
|
||||
ecat_buffer::EthEcatBuffer ecat_buffer_pdo_;
|
||||
ecat_sdo_mailbox::EthEcatSdoMailbox ecat_sdo_mailbox_;
|
||||
ecat_pdo_fmmu::EthEcatPdoFMMU ecat_pdo_fmmu_;
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user