Developer Application Interface (ARC API) v4.5.8
ARC, Inc. GenIV Application Interface
CArcCommandPacket.h
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: CArcCommandPacket.h ( GenIV ) |
3// +------------------------------------------------------------------------------------------------------------------+
4// | PURPOSE: This file defines the ARC device/controller command packet class. |
5// | |
6// | AUTHOR: Scott Streit DATE: August 14, 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 <initializer_list>
20#include <cstdint>
21#include <memory>
22#include <any>
23
24#include <CArcPacket.h>
25#include <ArcCommandDefs.h>
26#include <CArcDeviceDllMain.h>
27#include <ArcConcepts.h>
28
29
30
31namespace arc
32{
33 namespace gen4
34 {
35
39 class GEN4_CARCDEVICE_API CArcCommandPacket : public CArcPacket
40 {
41 public:
42
46 CArcCommandPacket( const std::uint8_t uiId = 0 );
47
52 CArcCommandPacket( const arc::gen4::cmds_e tCmd, const std::uint8_t uiId = 0 );
53
58 CArcCommandPacket( const std::uint32_t uiCmd, const std::uint8_t uiId = 0 );
59
64 CArcCommandPacket( const std::vector<std::uint32_t>& vCmdList, const std::uint8_t uiId = 0 );
65
71 CArcCommandPacket( const std::vector<std::any>& vCmdList, const std::uint8_t uiId = 0 );
72
77
82
86 CArcCommandPacket( arc::gen4::CArcCommandPacket&& tObject ) noexcept = delete;
87
92
95 virtual ~CArcCommandPacket( void ) = default;
96
100 bool headerValid( void ) const noexcept override;
101
108 const std::string getName( void ) const override;
109
113 bool isStartId( void ) const noexcept;
114
118 std::uint32_t command( void ) const noexcept;
119
127 std::uint8_t getDestination( void ) const noexcept;
128
133 template <uint32Type... Args> void add( const Args... args )
134 {
135 std::array<std::uint32_t, sizeof...( Args )> tArgsArray{ std::forward<const Args>( args )... };
136
137 for ( std::uint32_t i = 0; i < tArgsArray.size(); i++ )
138 {
139 arc::gen4::CArcPacket::add( tArgsArray[ i ] );
140 }
141 }
142
143 protected:
144
146 static constexpr std::uint8_t PAYLOAD_ID = 0xAC;
147
151 static std::uint8_t getNextId( void );
152
154 static const std::uint8_t MAX_ID = 255;
155
157 static std::uint8_t m_uiId;
158
159 std::uint32_t* m_pCommand;
160
161 std::uint32_t* m_pArgs;
162 };
163
164 } // end gen4 namespace
165} // end arc namespace
166
167
168
169#ifndef DOXYGEN_SHOULD_SKIP_THIS
170
171namespace std
172{
178 template<>
179 class GEN4_CARCDEVICE_API default_delete< arc::gen4::CArcCommandPacket >
180 {
181 public:
182
186 void operator()( arc::gen4::CArcCommandPacket* pObj );
187 };
188}
189
190#endif // DOXYGEN_SHOULD_SKIP_THIS
CArcCommandPacket(const arc::gen4::CArcCommandPacket &tObject)=delete
CArcCommandPacket(const arc::gen4::cmds_e tCmd, const std::uint8_t uiId=0)
CArcCommandPacket(arc::gen4::CArcCommandPacket &&tObject) noexcept=delete
bool headerValid(void) const noexcept override
void add(const Args... args)
CArcCommandPacket(const std::vector< std::any > &vCmdList, const std::uint8_t uiId=0)
CArcCommandPacket(const std::uint32_t uiCmd, const std::uint8_t uiId=0)
const std::string getName(void) const override
CArcCommandPacket(const std::vector< std::uint32_t > &vCmdList, const std::uint8_t uiId=0)
CArcCommandPacket(const std::uint8_t uiId=0)
CArcCommandPacket & operator=(const arc::gen4::CArcCommandPacket &tObject)=delete
std::uint8_t getDestination(void) const noexcept
CArcCommandPacket & operator=(arc::gen4::CArcCommandPacket &&tObject) noexcept=delete
bool isStartId(void) const noexcept
std::uint32_t command(void) const noexcept
static std::uint8_t getNextId(void)
virtual ~CArcCommandPacket(void)=default
void add(const std::uint32_t uiValue)
Definition: CArcBase.h:50