#pragma once
#include <cstddef>
#include <cstdint>
#include <ethercatcpp/cia402_device.h>
namespace {
//----------------------------------------------------------------------------//
// B U F F E R S D E F I N I T I O N S //
//----------------------------------------------------------------------------//
static constexpr size_t mailbox_size = 1024;
// Define output mailbox size
struct [[gnu::packed]] mailbox_out_t {
int8_t mailbox[mailbox_size];<--- struct member 'mailbox_out_t::mailbox' is never used.
};
// Define input mailbox size
struct [[gnu::packed]] mailbox_in_t {
int8_t mailbox[mailbox_size];<--- struct member 'mailbox_in_t::mailbox' is never used.
};
//----------------------------------------------------------------------------//
// C Y C L I C B U F F E R //
//----------------------------------------------------------------------------//
// buffer that contains all basically needed data
struct [[gnu::packed]] buffer_out_base_command_t {
uint16_t control_word;<--- struct member 'buffer_out_base_command_t::control_word' is never used.
int8_t operation_modes;<--- struct member 'buffer_out_base_command_t::operation_modes' is never used.
int32_t target_output_torque; // in torque Units (mNm)<--- struct member 'buffer_out_base_command_t::target_output_torque' is never used.
int32_t target_output_velocity; // in mrpm<--- struct member 'buffer_out_base_command_t::target_output_velocity' is never used.
int32_t target_output_position; // in inc<--- struct member 'buffer_out_base_command_t::target_output_position' is never used.
int16_t target_motor_torque; // in "per thousandth" rated torque<--- struct member 'buffer_out_base_command_t::target_motor_torque' is never used.
int32_t target_velocity; // in mrpm<--- struct member 'buffer_out_base_command_t::target_velocity' is never used.
int32_t target_position; // in inc<--- struct member 'buffer_out_base_command_t::target_position' is never used.
int16_t torque_feedforward_offset; // in "per thousandth" rated torque<--- struct member 'buffer_out_base_command_t::torque_feedforward_offset' is never used.
int32_t velocity_feedforward_offset; // in mrpm<--- struct member 'buffer_out_base_command_t::velocity_feedforward_offset' is never used.
};
// variant: buffer that contains all basically needed data + haptics
struct [[gnu::packed]] buffer_out_haptics_command_t {
uint16_t spring_stiffness; // in torque units (mNm) / deg<--- struct member 'buffer_out_haptics_command_t::spring_stiffness' is never used.
uint16_t spring_damping; // in 0.1* torque units (mNm) * s /deg<--- struct member 'buffer_out_haptics_command_t::spring_damping' is never used.
int32_t spring_neutral_position; // in 0.1 * deg<--- struct member 'buffer_out_haptics_command_t::spring_neutral_position' is never used.
int32_t external_load_torque_offset; // in torque units (mNm)<--- struct member 'buffer_out_haptics_command_t::external_load_torque_offset' is never used.
};
struct [[gnu::packed]] buffer_in_status_base_t {
uint16_t status_word;<--- struct member 'buffer_in_status_base_t::status_word' is never used.
int8_t operation_modes;<--- struct member 'buffer_in_status_base_t::operation_modes' is never used.
uint16_t error_code;<--- struct member 'buffer_in_status_base_t::error_code' is never used.
char error_report[8];<--- struct member 'buffer_in_status_base_t::error_report' is never used.
int32_t current_output_torque; // in mNm<--- struct member 'buffer_in_status_base_t::current_output_torque' is never used.
int32_t current_velocity; // in mrpm<--- struct member 'buffer_in_status_base_t::current_velocity' is never used.
int32_t current_position; // in inc<--- struct member 'buffer_in_status_base_t::current_position' is never used.
};
struct [[gnu::packed]] buffer_in_status_torque_t {
int16_t current_motor_torque; // in "per thousandth" rated torque<--- struct member 'buffer_in_status_torque_t::current_motor_torque' is never used.
int32_t current_friction_torque; // in "per thousandth" rated torque<--- struct member 'buffer_in_status_torque_t::current_friction_torque' is never used.
};
struct [[gnu::packed]] buffer_in_status_safety_t {
int32_t current_sensor_temperature; // in "per thousandth" of °C<--- struct member 'buffer_in_status_safety_t::current_sensor_temperature' is never used.
int32_t current_drive_temperature; // in "per thousandth" of °C<--- struct member 'buffer_in_status_safety_t::current_drive_temperature' is never used.
float current_motor_temperature; // in °C<--- struct member 'buffer_in_status_safety_t::current_motor_temperature' is never used.
uint8_t sto; // on/off<--- struct member 'buffer_in_status_safety_t::sto' is never used.
uint8_t sbc; // on/off<--- struct member 'buffer_in_status_safety_t::sbc' is never used.
};
} // namespace
namespace ethercatcpp {
namespace sensojoint {
extern coe::cia402::CIA402ObjectDictionary dictionary_;
extern coe::PDOMapping rx_mapping_1_;
extern coe::PDOMapping rx_mapping_2_;
extern coe::PDOMapping rx_mapping_3_;
extern coe::PDOMapping rx_mapping_4_;
extern coe::PDOMapping tx_mapping_1_;
extern coe::PDOMapping tx_mapping_2_;
extern coe::PDOMapping tx_mapping_3_;
extern coe::PDOMapping tx_mapping_4_;
extern coe::PDOBuffer rx_buffer_;
extern coe::PDOBuffer tx_buffer_;
[[gnu::visibility("hidden")]] void manage_haptics();
} // namespace sensojoint
} // namespace ethercatcpp