1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#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