Developer Application Interface (ARC API) v4.5.8
ARC, Inc. GenIV Application Interface
CArcPacketFactory.h
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: CArcPacketFactory.h ( GenIV ) |
3// +------------------------------------------------------------------------------------------------------------------+
4// | PURPOSE: This file defines the ARC device/controller packet factory. All types of packets instances are |
5// | created using this class. Implemented as a singleton class. |
6// | |
7// | AUTHOR: Scott Streit DATE: March 26, 2014 |
8// | |
9// | Copyright 2014 Astronomical Research Cameras, Inc. All rights reserved. |
10// +------------------------------------------------------------------------------------------------------------------+
13#pragma once
14
15#ifdef _WINDOWS
16 #pragma warning( disable: 4251 )
17#endif
18
19#include <type_traits>
20#include <cstdint>
21#include <memory>
22#include <any>
23
24#include <CArcPacket.h>
25#include <CArcStatusPacket.h>
26#include <CArcDLoadPacket.h>
27#include <CArcCommandPacket.h>
28#include <CArcAlertPacket.h>
29#include <CArcImagePacket.h>
30#include <CArcDeviceDllMain.h>
31#include <ArcConcepts.h>
32
33
34
35namespace arc
36{
37 namespace gen4
38 {
39
43 class GEN4_CARCDEVICE_API CArcPacketFactory
44 {
45 public:
46
50 static CArcPacketFactory& getInstance( void ) noexcept;
51
56 inline std::unique_ptr<CArcCommandPacket> cmdPacket( const std::uint8_t uiId = 0 ) const
57 {
58 return std::unique_ptr<CArcCommandPacket>( newCmdPacket( uiId ) );
59 }
60
66 inline std::unique_ptr<CArcCommandPacket> cmdPacket( const std::vector<std::uint32_t>& vCmdList, const std::uint8_t uiId = 0 ) const
67 {
68 return std::unique_ptr<CArcCommandPacket>( newCmdPacket( vCmdList, uiId ) );
69 }
70
77 inline std::unique_ptr<CArcCommandPacket> cmdPacket( const std::vector<std::any>& vCmdList, const std::uint8_t uiId = 0 ) const
78 {
79 return std::unique_ptr<CArcCommandPacket>( newCmdPacket( vCmdList, uiId ) );
80 }
81
87 inline std::unique_ptr<CArcCommandPacket> cmdPacket( const std::uint32_t uiCmd ) const
88 {
89 return std::unique_ptr<CArcCommandPacket>( newCmdPacket( std::vector{ uiCmd } ) );
90 }
91
96 template<uint32Type... CommandList> inline
97 std::unique_ptr<CArcCommandPacket> cmdPacket( CommandList... uiCmdList ) const
98 {
99 return std::unique_ptr<CArcCommandPacket>( newCmdPacket( std::forward<CommandList>( uiCmdList )... ) );
100 }
101
107 template<uint32Type... Args> inline
108 std::unique_ptr<CArcCommandPacket> cmdPacket( const arc::gen4::cmds_e tCmd, const Args... uiArgs ) const
109 {
110 return std::unique_ptr<CArcCommandPacket>( newCmdPacket( tCmd, std::forward<Args>( uiArgs )... ) );
111 }
112
116 inline std::unique_ptr<CArcDLoadPacket> dloadPacket( void ) const
117 {
118 return std::unique_ptr<CArcDLoadPacket>( newDLoadPacket() );
119 }
120
124 inline std::unique_ptr<CArcStatusPacket> statusPacket( void ) const
125 {
126 return std::unique_ptr<CArcStatusPacket>( newStatusPacket() );
127 }
128
132 inline std::unique_ptr<CArcAlertPacket> alertPacket( void ) const
133 {
134 return std::unique_ptr<CArcAlertPacket>( newAlertPacket() );
135 }
136
140 inline std::unique_ptr<CArcImagePacket> imagePacket( void ) const
141 {
142 return std::unique_ptr<CArcImagePacket>( newImagePacket() );
143 }
144
145 private:
146
149 CArcPacketFactory( void ) = default;
150
155 CArcCommandPacket* newCmdPacket( const std::uint8_t uiId = 0 ) const;
156
162 CArcCommandPacket* newCmdPacket( const std::vector<std::uint32_t>& vCmdList, const std::uint8_t uiId = 0 ) const;
163
170 CArcCommandPacket* newCmdPacket( const std::vector<std::any>& vCmdList, const std::uint8_t uiId = 0 ) const;
171
177 CArcCommandPacket* newCmdPacket( const std::uint32_t uiCmd, const std::uint8_t uiId = 0 ) const;
178
183 template<uint32Type... CommandList> inline
184 CArcCommandPacket* newCmdPacket( CommandList... uiCmdList ) const
185 {
186 auto pCommandPacket = new CArcCommandPacket();
187
188 pCommandPacket->add( std::forward<CommandList>( uiCmdList )... );
189
190 return pCommandPacket;
191 }
192
198 template<uint32Type... Args> inline
199 CArcCommandPacket* newCmdPacket( arc::gen4::cmds_e tCmd, Args... uiArgs ) const
200 {
201 auto pCommandPacket = new CArcCommandPacket( tCmd );
202
203 pCommandPacket->add( std::forward<Args>( uiArgs )... );
204
205 return pCommandPacket;
206 }
207
211 CArcDLoadPacket* newDLoadPacket( void ) const;
212
216 CArcStatusPacket* newStatusPacket( void ) const;
217
221 CArcAlertPacket* newAlertPacket( void ) const;
222
226 CArcImagePacket* newImagePacket( void ) const;
227
228 };
229
230 } // end gen4 namespace
231} // end arc namespace
std::unique_ptr< CArcCommandPacket > cmdPacket(const std::vector< std::any > &vCmdList, const std::uint8_t uiId=0) const
std::unique_ptr< CArcCommandPacket > cmdPacket(const arc::gen4::cmds_e tCmd, const Args... uiArgs) const
std::unique_ptr< CArcCommandPacket > cmdPacket(const std::vector< std::uint32_t > &vCmdList, const std::uint8_t uiId=0) const
static CArcPacketFactory & getInstance(void) noexcept
std::unique_ptr< CArcCommandPacket > cmdPacket(const std::uint8_t uiId=0) const
std::unique_ptr< CArcStatusPacket > statusPacket(void) const
std::unique_ptr< CArcImagePacket > imagePacket(void) const
std::unique_ptr< CArcDLoadPacket > dloadPacket(void) const
std::unique_ptr< CArcCommandPacket > cmdPacket(const std::uint32_t uiCmd) const
std::unique_ptr< CArcCommandPacket > cmdPacket(CommandList... uiCmdList) const
std::unique_ptr< CArcAlertPacket > alertPacket(void) const
Definition: CArcBase.h:50