Developer Application Interface (ARC API) v4.5.8
ARC, Inc. GenIV Application Interface
CArcPacket.h
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: CArcPacket.h ( GenIV ) |
3// +------------------------------------------------------------------------------------------------------------------+
4// | PURPOSE: This file defines the ARC device/controller packet class. |
5// | |
6// | AUTHOR: Scott Streit DATE: March 20, 2014 |
7// | |
8// | Copyright 2014 Astronomical Research Cameras, Inc. All rights reserved. |
9// +------------------------------------------------------------------------------------------------------------------+
12#pragma once
13
14
15#ifdef _WINDOWS
16 #pragma warning( disable: 4251 )
17#endif
18
19#include <string>
20#include <cstdint>
21#include <memory>
22
23#include <CArcBase.h>
24#include <CArcDeviceDllMain.h>
25
26//#include <iostream>
27
28namespace arc
29{
30 namespace gen4
31 {
32
37 {
38 std::uint8_t uiPayloadId;
39 std::uint8_t uiPacketId;
40 std::uint8_t uiReservedByte;
41 std::uint8_t uiPayloadLength;
42 std::uint32_t uiReserved;
43 };
44
45
49 class GEN4_CARCDEVICE_API CArcPacket : public arc::gen4::CArcBase
50 {
51 public:
52
55 virtual ~CArcPacket( void ) = default;
56
60 virtual bool headerValid( void ) const noexcept = 0;
61
65 constexpr std::uint32_t headerLength( void ) const noexcept
66 {
67 return ( sizeof( packetHeader_t ) / sizeof( std::uint32_t ) );
68 }
69
73 constexpr std::uint32_t headerByteLength( void ) const noexcept
74 {
75 return sizeof( packetHeader_t );
76 }
77
82 std::uint8_t packetId( void ) const;
83
89 bool checkPacketId( std::uint32_t uiHeader, std::uint8_t uiPacketId ) const noexcept;
90
95 std::uint8_t payloadId( void ) const;
96
101 std::uint8_t payloadLength( void ) const;
102
107 std::uint32_t payloadByteLength( void ) const;
108
112 std::uint32_t* payload( void ) const noexcept;
113
118 void add( const std::uint32_t uiValue );
119
123 std::uint32_t length( void ) const noexcept;
124
128 std::uint32_t byteLength( void ) const noexcept;
129
133 std::uint32_t maxByteLength( void ) const noexcept;
134
138 std::uint32_t maxLength( void ) const noexcept;
139
145 std::uint32_t at( const std::uint32_t uiIndex ) const;
146
153 std::uint32_t& operator [] ( const std::uint32_t uiIndex );
154
158 std::uint8_t* data( void ) const noexcept;
159
164 virtual const std::string getName( void ) const = 0;
165
171 virtual const std::string toString( void ) const;
172
178 virtual const std::string toLogString( void ) const;
179
180 protected:
181
184 CArcPacket( const std::uint32_t uiSize = MAX_PACKET_SIZE );
185
189 void incrementLength( const std::uint8_t uiIncr = 1 ) noexcept;
190
194 static constexpr auto MAX_PACKET_SIZE = static_cast< std::uint32_t >( 1024 );
195
197 packetHeader_t* m_pHeader;
198
200 std::uint32_t* m_pPayload;
201
203 std::unique_ptr<std::uint8_t[]> m_pData;
204
206 std::uint32_t m_uiSize;
207 };
208
209 } // end gen4 namespace
210} // end arc namespace
std::uint8_t * data(void) const noexcept
bool checkPacketId(std::uint32_t uiHeader, std::uint8_t uiPacketId) const noexcept
std::uint32_t payloadByteLength(void) const
std::uint32_t maxByteLength(void) const noexcept
virtual bool headerValid(void) const noexcept=0
std::uint32_t at(const std::uint32_t uiIndex) const
std::uint8_t packetId(void) const
void add(const std::uint32_t uiValue)
virtual const std::string toString(void) const
std::uint32_t byteLength(void) const noexcept
virtual const std::string toLogString(void) const
std::uint32_t maxLength(void) const noexcept
void incrementLength(const std::uint8_t uiIncr=1) noexcept
virtual ~CArcPacket(void)=default
constexpr std::uint32_t headerLength(void) const noexcept
Definition: CArcPacket.h:65
constexpr std::uint32_t headerByteLength(void) const noexcept
Definition: CArcPacket.h:73
std::uint32_t * payload(void) const noexcept
std::uint8_t payloadId(void) const
CArcPacket(const std::uint32_t uiSize=MAX_PACKET_SIZE)
virtual const std::string getName(void) const =0
std::uint8_t payloadLength(void) const
std::uint32_t length(void) const noexcept
Definition: CArcBase.h:50
std::uint8_t uiPayloadLength
Definition: CArcPacket.h:41
std::uint8_t uiPacketId
Definition: CArcPacket.h:39
std::uint8_t uiReservedByte
Definition: CArcPacket.h:40
std::uint32_t uiReserved
Definition: CArcPacket.h:42
std::uint8_t uiPayloadId
Definition: CArcPacket.h:38