Command.cpp
Go to the documentation of this file.
1 // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
2 
3 // -- BEGIN LICENSE BLOCK ----------------------------------------------
4 
24 // -- END LICENSE BLOCK ------------------------------------------------
25 
26 //----------------------------------------------------------------------
33 //----------------------------------------------------------------------
34 
36 
38 
39 
40 namespace sick {
41 namespace cola2 {
42 
43 Command::Command(Cola2Session& session, const uint16_t& command_type, const uint16_t& command_mode)
44  : m_session(session)
45  , m_command_mode(command_mode)
46  , m_command_type(command_type)
47 {
50  m_tcp_parser_ptr = std::make_shared<sick::data_processing::ParseTCPPacket>();
51  m_writer_ptr = std::make_shared<sick::data_processing::ReadWriteHelper>();
52 }
53 
55 {
56  m_execution_mutex.lock();
57 }
58 
60 {
61  addTelegramData(telegram);
62  addTelegramHeader(telegram);
63 }
64 
66 {
67  m_tcp_parser_ptr->parseTCPSequence(packet, *this);
69  m_execution_mutex.unlock();
70 }
71 
73 {
74  boost::mutex::scoped_lock lock(m_execution_mutex);
75 }
76 
78 {
79  return m_was_successful;
80 }
81 
82 uint8_t Command::getCommandType() const
83 {
84  return m_command_type;
85 }
86 
87 void Command::setCommandType(const uint8_t& command_type)
88 {
89  m_command_type = command_type;
90 }
91 
92 uint8_t Command::getCommandMode() const
93 {
94  return m_command_mode;
95 }
96 
97 void Command::setCommandMode(const uint8_t& command_mode)
98 {
99  m_command_mode = command_mode;
100 }
101 
102 uint32_t Command::getSessionID() const
103 {
104  return m_session_id;
105 }
106 
107 void Command::setSessionID(const uint32_t& session_id)
108 {
109  m_session_id = session_id;
110 }
111 
112 uint16_t Command::getRequestID() const
113 {
114  return m_request_id;
115 }
116 
117 void Command::setRequestID(const uint16_t& request_id)
118 {
119  m_request_id = request_id;
120 }
121 
123 {
125  uint8_t* data_ptr = header.data();
126  writeDataToDataPtr(data_ptr, telegram);
127  telegram.insert(telegram.begin(), header.begin(), header.end());
128 }
129 
131 {
133  header.resize(18);
134  return header;
135 }
136 
137 std::vector<uint8_t> Command::getDataVector() const
138 {
139  return m_data_vector;
140 }
141 
142 void Command::setDataVector(const std::vector<uint8_t>& data)
143 {
144  m_data_vector = data;
145 }
146 
147 void Command::writeDataToDataPtr(uint8_t*& data_ptr,
149 {
150  writeCola2StxToDataPtr(data_ptr);
151  writeLengthToDataPtr(data_ptr, telegram);
152  writeCola2HubCntrToDataPtr(data_ptr);
153  writeCola2NoCToDataPtr(data_ptr);
154  writeSessionIdToDataPtr(data_ptr);
155  writeRequestIdToDataPtr(data_ptr);
156  writeCommandTypeToDataPtr(data_ptr);
157  writeCommandModeToDataPtr(data_ptr);
158 }
159 
160 void Command::writeCola2StxToDataPtr(uint8_t*& data_ptr) const
161 {
162  uint32_t cola2_stx = 0x02020202;
163  m_writer_ptr->writeuint32_tBigEndian(data_ptr, cola2_stx, 0);
164 }
165 
166 void Command::writeLengthToDataPtr(uint8_t*& data_ptr,
168 {
169  uint32_t length = 10 + telegram.size();
170  m_writer_ptr->writeuint32_tBigEndian(data_ptr, length, 4);
171 }
172 
173 void Command::writeCola2HubCntrToDataPtr(uint8_t*& data_ptr) const
174 {
175  uint8_t cola2_hub_cntr = 0x00;
176  m_writer_ptr->writeuint8_tBigEndian(data_ptr, cola2_hub_cntr, 8);
177 }
178 
179 void Command::writeCola2NoCToDataPtr(uint8_t*& data_ptr) const
180 {
181  uint8_t cola2_noc = 0x00;
182  m_writer_ptr->writeuint8_tBigEndian(data_ptr, cola2_noc, 9);
183 }
184 
185 void Command::writeSessionIdToDataPtr(uint8_t*& data_ptr) const
186 {
187  m_writer_ptr->writeuint32_tBigEndian(data_ptr, getSessionID(), 10);
188 }
189 
190 void Command::writeRequestIdToDataPtr(uint8_t*& data_ptr) const
191 {
192  m_writer_ptr->writeuint16_tBigEndian(data_ptr, getRequestID(), 14);
193 }
194 
195 void Command::writeCommandTypeToDataPtr(uint8_t*& data_ptr) const
196 {
197  m_writer_ptr->writeuint8_tBigEndian(data_ptr, getCommandType(), 16);
198 }
199 
200 void Command::writeCommandModeToDataPtr(uint8_t*& data_ptr) const
201 {
202  m_writer_ptr->writeuint8_tBigEndian(data_ptr, getCommandMode(), 17);
203 }
204 
205 } // namespace cola2
206 } // namespace sick
void setCommandMode(const uint8_t &command_mode)
Sets the command mode.
Definition: Command.cpp:97
void setSessionID(const uint32_t &session_id)
Sets the session ID.
Definition: Command.cpp:107
void setDataVector(const std::vector< uint8_t > &data)
Sets the data vector.
Definition: Command.cpp:142
std::shared_ptr< sick::data_processing::ReadWriteHelper > m_writer_ptr
Definition: Command.h:195
std::vector< uint8_t > getDataVector() const
Returns the data vector.
Definition: Command.cpp:137
uint16_t getRequestID() const
Returns the request id of the command.
Definition: Command.cpp:112
void processReplyBase(const sick::datastructure::PacketBuffer::VectorBuffer &packet)
Parses the da incoming data package and then processes it with the inherited processReply. Afterwards the mutex will be unlocked to allow new commands to be send.
Definition: Command.cpp:65
void writeCommandTypeToDataPtr(uint8_t *&data_ptr) const
Definition: Command.cpp:195
sick::datastructure::PacketBuffer::VectorBuffer prepareHeader() const
Definition: Command.cpp:130
boost::mutex m_execution_mutex
Definition: Command.h:197
uint8_t getCommandType() const
Returns the command type.
Definition: Command.cpp:82
void setRequestID(const uint16_t &request_id)
Sets the request ID of the command.
Definition: Command.cpp:117
virtual void addTelegramData(sick::datastructure::PacketBuffer::VectorBuffer &telegram) const =0
void writeCola2HubCntrToDataPtr(uint8_t *&data_ptr) const
Definition: Command.cpp:173
void writeDataToDataPtr(uint8_t *&data_ptr, datastructure::PacketBuffer::VectorBuffer &telegram) const
Definition: Command.cpp:147
void constructTelegram(sick::datastructure::PacketBuffer::VectorBuffer &telegram) const
Adds the data to the telegram and afterwards the header with the correct length.
Definition: Command.cpp:59
void setCommandType(const uint8_t &command_type)
Sets the command type.
Definition: Command.cpp:87
Command(sick::cola2::Cola2Session &session, const uint16_t &command_type, const uint16_t &command_mode)
Constructor of the command. Sets the common variables for a command to the sensor.
Definition: Command.cpp:43
uint32_t getSessionID() const
Returns the current session ID.
Definition: Command.cpp:102
void writeLengthToDataPtr(uint8_t *&data_ptr, datastructure::PacketBuffer::VectorBuffer &telegram) const
Definition: Command.cpp:166
std::shared_ptr< sick::data_processing::ParseTCPPacket > m_tcp_parser_ptr
Definition: Command.h:194
void waitForCompletion()
Scooped call to the mutex, which will block until the reply was processed.
Definition: Command.cpp:72
void writeCola2NoCToDataPtr(uint8_t *&data_ptr) const
Definition: Command.cpp:179
uint32_t m_session_id
Definition: Command.h:204
sick::cola2::Cola2Session & m_session
Definition: Command.h:191
uint8_t getCommandMode() const
Returns the command mode.
Definition: Command.cpp:92
void writeCommandModeToDataPtr(uint8_t *&data_ptr) const
Definition: Command.cpp:200
uint16_t getNextRequestID()
Returns the next request ID. The request ID is used to match the return packages of the sensor to the...
void writeRequestIdToDataPtr(uint8_t *&data_ptr) const
Definition: Command.cpp:190
void lockExecutionMutex()
Locks a mutex to prevent other commands being executed in parallel.
Definition: Command.cpp:54
const std::string header
uint32_t getSessionID() const
Returns the current session ID.
std::vector< uint8_t > m_data_vector
Definition: Command.h:207
uint8_t m_command_type
Definition: Command.h:202
std::vector< uint8_t > VectorBuffer
Typedef for a vector buffer, to sort the incoming packets.
Definition: PacketBuffer.h:71
Establishes a cola2 session with a sensor and enables execution of commands in this session...
Definition: Cola2Session.h:72
bool wasSuccessful() const
Returns if the command was successfully parsed.
Definition: Command.cpp:77
virtual bool processReply()=0
void writeSessionIdToDataPtr(uint8_t *&data_ptr) const
Definition: Command.cpp:185
uint16_t m_request_id
Definition: Command.h:205
uint8_t m_command_mode
Definition: Command.h:201
void writeCola2StxToDataPtr(uint8_t *&data_ptr) const
Definition: Command.cpp:160
void addTelegramHeader(sick::datastructure::PacketBuffer::VectorBuffer &telegram) const
Definition: Command.cpp:122


sick_safetyscanners
Author(s): Lennart Puck
autogenerated on Thu May 9 2019 02:41:08