Program Listing for File Command.h
↰ Return to documentation for file (/tmp/ws/src/sick_safetyscanners_base/include/sick_safetyscanners_base/cola2/Command.h
)
// this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
// -- BEGIN LICENSE BLOCK ----------------------------------------------
// -- END LICENSE BLOCK ------------------------------------------------
//----------------------------------------------------------------------
//----------------------------------------------------------------------
#ifndef SICK_SAFETYSCANNERS_BASE_COLA2_COMMAND_H
#define SICK_SAFETYSCANNERS_BASE_COLA2_COMMAND_H
#include <vector>
#include "sick_safetyscanners_base/datastructure/PacketBuffer.h"
#include "sick_safetyscanners_base/Logging.h"
#include "sick_safetyscanners_base/data_processing/ParseTCPPacket.h"
#include "sick_safetyscanners_base/data_processing/ReadWriteHelper.hpp"
#include <boost/thread/mutex.hpp>
namespace sick {
namespace cola2 {
class Cola2Session;
class Command
{
public:
Command(sick::cola2::Cola2Session& session, uint16_t command_type, uint16_t command_mode);
virtual ~Command() {}
void lockExecutionMutex();
std::vector<uint8_t> constructTelegram(const std::vector<uint8_t>& telegram) const;
void processReplyBase(const std::vector<uint8_t>& packet);
void waitForCompletion();
uint32_t getSessionID() const;
void setSessionID(uint32_t session_id);
bool wasSuccessful() const;
uint8_t getCommandType() const;
void setCommandType(const uint8_t& command_type);
uint8_t getCommandMode() const;
void setCommandMode(const uint8_t& command_mode);
uint16_t getRequestID() const;
void setRequestID(const uint16_t& request_id);
std::vector<uint8_t> getDataVector() const;
void setDataVector(const std::vector<uint8_t>& data);
protected:
sick::cola2::Cola2Session& m_session;
std::vector<uint8_t> expandTelegram(const std::vector<uint8_t>& telegram,
size_t additional_bytes) const;
private:
std::shared_ptr<sick::data_processing::ParseTCPPacket> m_tcp_parser_ptr;
boost::mutex m_execution_mutex;
bool m_was_successful;
uint8_t m_command_mode;
uint8_t m_command_type;
uint32_t m_session_id;
uint16_t m_request_id;
std::vector<uint8_t> m_data_vector;
virtual bool processReply() = 0;
virtual std::vector<uint8_t> addTelegramData(const std::vector<uint8_t>& telegram) const = 0;
std::vector<uint8_t> addTelegramHeader(const std::vector<uint8_t>& telegram) const;
std::vector<uint8_t> prepareHeader() const;
void writeCola2StxToDataPtr(std::vector<uint8_t>::iterator data_ptr) const;
void writeLengthToDataPtr(std::vector<uint8_t>::iterator data_ptr,
const std::vector<uint8_t>& telegram) const;
void writeCola2HubCntrToDataPtr(std::vector<uint8_t>::iterator data_ptr) const;
void writeCola2NoCToDataPtr(std::vector<uint8_t>::iterator data_ptr) const;
void writeSessionIdToDataPtr(std::vector<uint8_t>::iterator data_ptr) const;
void writeRequestIdToDataPtr(std::vector<uint8_t>::iterator data_ptr) const;
void writeCommandTypeToDataPtr(std::vector<uint8_t>::iterator data_ptr) const;
void writeCommandModeToDataPtr(std::vector<uint8_t>::iterator data_ptr) const;
void writeDataToDataPtr(std::vector<uint8_t>::iterator data_ptr,
const std::vector<uint8_t>& telegram) const;
};
} // namespace cola2
} // namespace sick
#endif // SICK_SAFETYSCANNERS_BASE_COLA2_COMMAND_H