68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
|
|
/*
|
|||
|
|
* HipMessage.h
|
|||
|
|
*
|
|||
|
|
* Created on: 4 <EFBFBD><EFBFBD><EFBFBD>. 2020 <EFBFBD>.
|
|||
|
|
* Author: user
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef UMLIBRARY_DRIVER_HIPMESSAGE_HH_
|
|||
|
|
#define UMLIBRARY_DRIVER_HIPMESSAGE_HH_
|
|||
|
|
|
|||
|
|
#include "HipMessageControl.hh"
|
|||
|
|
|
|||
|
|
namespace driver {
|
|||
|
|
|
|||
|
|
struct Header {
|
|||
|
|
union {
|
|||
|
|
struct {
|
|||
|
|
uint16_t address_value :5;
|
|||
|
|
const uint16_t fixed_pattern :3;
|
|||
|
|
uint16_t :8;
|
|||
|
|
uint16_t command_value :6;
|
|||
|
|
const uint16_t fixed1 :1;
|
|||
|
|
uint16_t error_bit :1;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
uint16_t bytes_2[2];
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
Header(uint16_t address, uint16_t command)
|
|||
|
|
: address_value(address), command_value(command),
|
|||
|
|
fixed_pattern(0x2), fixed1(0x1) {}
|
|||
|
|
|
|||
|
|
Header(char bytes[2]) { bytes_2[0] = bytes[0], bytes_2[1] = bytes[1]; }
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//...???
|
|||
|
|
class Message {
|
|||
|
|
private:
|
|||
|
|
static const unsigned short first_data_byte_pos = 2;
|
|||
|
|
|
|||
|
|
char * const data = nullptr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const std::size_t data_size = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
Message( char * data, std::size_t data_size ) : data(data), data_size(data_size) {}
|
|||
|
|
|
|||
|
|
Message & operator=( const Header & header );
|
|||
|
|
|
|||
|
|
operator Header() const { return Header(data); }
|
|||
|
|
|
|||
|
|
HipResult unpack_message( const MessageControl * message );
|
|||
|
|
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
bool pack_message( const MessageControl * message );
|
|||
|
|
|
|||
|
|
static std::size_t getRecMessageLen( const MessageControl * message ) { return message->rec_data_size + 3; }
|
|||
|
|
|
|||
|
|
static std::size_t getSendMessageLen( const MessageControl * message ) { return message->send_data_size + 3; }
|
|||
|
|
|
|||
|
|
static unsigned short calcControlSumm( const char * data, std::size_t data_len );
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
} /* namespace driver */
|
|||
|
|
|
|||
|
|
#endif /* UMLIBRARY_DRIVER_HIPMESSAGE_HH_ */
|