@@ -12,8 +12,9 @@ namespace kickcat
12
12
enum class ProcessingResult
13
13
{
14
14
NOOP,
15
+ CONTINUE,
15
16
FINALIZE,
16
- CONTINUE
17
+ FINALIZE_AND_KEEP
17
18
};
18
19
19
20
namespace MessageStatus
@@ -57,7 +58,31 @@ namespace kickcat
57
58
uint32_t status_; // message current status
58
59
};
59
60
60
- class SDOMessage : public AbstractMessage
61
+ struct Mailbox
62
+ {
63
+ uint16_t recv_offset;
64
+ uint16_t recv_size;
65
+ uint16_t send_offset;
66
+ uint16_t send_size;
67
+
68
+ bool can_read; // data available on the slave
69
+ bool can_write; // free space for a new message on the slave
70
+ uint8_t counter{0 }; // session handle, from 1 to 7
71
+ bool toggle; // for SDO segmented transfer
72
+
73
+ std::shared_ptr<AbstractMessage> createSDO (uint16_t index, uint8_t subindex, bool CA, uint8_t request, void * data, uint32_t * data_size);
74
+
75
+ bool receive (uint8_t const * raw_message);
76
+ std::queue<std::shared_ptr<AbstractMessage>> to_send; // message waiting to be sent
77
+ std::list <std::shared_ptr<AbstractMessage>> to_process; // message already sent, waiting for an answer
78
+
79
+ uint8_t nextCounter ();
80
+
81
+ std::vector<mailbox::Emergency> emergencies;
82
+ private:
83
+ };
84
+
85
+ class SDOMessage : public AbstractMessage
61
86
{
62
87
public:
63
88
SDOMessage (uint16_t mailbox_size, uint16_t index, uint8_t subindex, bool CA, uint8_t request, void * data, uint32_t * data_size);
@@ -78,26 +103,17 @@ namespace kickcat
78
103
uint32_t * client_data_size_;
79
104
};
80
105
81
- struct Mailbox
106
+ class EmergencyMessage : public AbstractMessage
82
107
{
83
- uint16_t recv_offset;
84
- uint16_t recv_size;
85
- uint16_t send_offset;
86
- uint16_t send_size;
87
-
88
- bool can_read; // data available on the slave
89
- bool can_write; // free space for a new message on the slave
90
- uint8_t counter{0 }; // session handle, from 1 to 7
91
- bool toggle; // for SDO segmented transfer
92
-
93
- std::shared_ptr<AbstractMessage> createSDO (uint16_t index, uint8_t subindex, bool CA, uint8_t request, void * data, uint32_t * data_size);
108
+ public:
109
+ EmergencyMessage (Mailbox& mailbox);
110
+ virtual ~EmergencyMessage () = default ;
94
111
95
- bool receive (uint8_t const * raw_message);
96
- std::queue<std::shared_ptr<AbstractMessage>> to_send; // message waiting to be sent
97
- std::list <std::shared_ptr<AbstractMessage>> to_process; // message already sent, waiting for an answer
112
+ bool needAcknowledge () const override { return false ; }
113
+ ProcessingResult process (uint8_t const * received) override ;
98
114
99
- uint8_t nextCounter ();
100
115
private:
116
+ Mailbox& mailbox_;
101
117
};
102
118
}
103
119
0 commit comments