Developer Application Interface (ARC API) v3.6.2
ARC, Inc. GenII/III Application Interface
ArcDefs.h
Go to the documentation of this file.
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: ArcDefs.h |
3// +------------------------------------------------------------------------------------------------------------------+
4// | PURPOSE: This file defines the standard ARC board, command and reply definitions. |
5// | |
6// | AUTHOR: Scott Streit DATE: ? |
7// | |
8// | Copyright Astronomical Research Cameras, Inc. All rights reserved. |
9// +------------------------------------------------------------------------------------------------------------------+
12#pragma once
13
14
15#ifdef __cplusplus
16namespace arc
17{
18#endif
19
20
21 // +----------------------------------------------------------------------------------------
22 // | Define board id's
23 // +----------------------------------------------------------------------------------------
24 constexpr auto PCI_ID = static_cast<std::uint32_t>( 1 );
25 constexpr auto TIM_ID = static_cast<std::uint32_t>( 2 );
26 constexpr auto UTIL_ID = static_cast<std::uint32_t>( 3 );
27 constexpr auto SMALLCAM_DLOAD_ID = static_cast<std::uint32_t>( 3 );
28
29
30 // +----------------------------------------------------------------------------------------
31 // | Memory Location Id Constants
32 // | R_MEM (Bit 20) ROM
33 // | P_MEM (Bit 21) DSP program memory space
34 // | X_MEM (Bit 22) DSP X memory space
35 // | Y_MEM (Bit 23) DSP Y memory space
36 // +----------------------------------------------------------------------------------------
37 constexpr auto P_MEM = static_cast<std::uint32_t>( 0x100000 );
38 constexpr auto X_MEM = static_cast<std::uint32_t>( 0x200000 );
39 constexpr auto Y_MEM = static_cast<std::uint32_t>( 0x400000 );
40 constexpr auto R_MEM = static_cast<std::uint32_t>( 0x800000 );
41
42
43 // +----------------------------------------------------------------------------------------
44 // | Define controller/PCI replies
45 // +----------------------------------------------------------------------------------------
46 constexpr auto TOUT = static_cast<std::uint32_t>( 0x544F5554 ); // Timeout
47 constexpr auto ROUT = static_cast<std::uint32_t>( 0x524F5554 ); // Readout
48 constexpr auto HERR = static_cast<std::uint32_t>( 0x48455252 ); // Header Error
49 constexpr auto DON = static_cast<std::uint32_t>( 0x00444F4E ); // Done
50 constexpr auto ERR = static_cast<std::uint32_t>( 0x00455252 ); // Error
51 constexpr auto SYR = static_cast<std::uint32_t>( 0x00535952 ); // System reset
52 constexpr auto RST = static_cast<std::uint32_t>( 0x00525354 ); // reset
53 constexpr auto CNR = static_cast<std::uint32_t>( 0x00434E52 ); // Controller Not Ready
54
55
56 // +----------------------------------------------------------------------------------------
57 // | Define controller/manual commands
58 // +----------------------------------------------------------------------------------------
59 constexpr auto DBC = static_cast<std::uint32_t>( 0x00444243 ); // Download Boot Code
60 constexpr auto TDL = static_cast<std::uint32_t>( 0x0054444C ); // Test Data Link
61 constexpr auto RDM = static_cast<std::uint32_t>( 0x0052444D ); // ReaD Memory
62 constexpr auto WRM = static_cast<std::uint32_t>( 0x0057524D ); // WRite Memory
63 constexpr auto SEX = static_cast<std::uint32_t>( 0x00534558 ); // Start EXposure
64 constexpr auto SET = static_cast<std::uint32_t>( 0x00534554 ); // Set Exposure Time
65 constexpr auto PEX = static_cast<std::uint32_t>( 0x00504558 ); // Pause EXposure
66 constexpr auto REX = static_cast<std::uint32_t>( 0x00524558 ); // Resume EXposure
67 constexpr auto RET = static_cast<std::uint32_t>( 0x00524554 ); // Read Elapsed Time
68 constexpr auto PON = static_cast<std::uint32_t>( 0x00504F4E ); // Power ON
69 constexpr auto POF = static_cast<std::uint32_t>( 0x00504F46 ); // Power OFf
70 constexpr auto RDI = static_cast<std::uint32_t>( 0x00524449 ); // ReaD Image
71 constexpr auto SOS = static_cast<std::uint32_t>( 0x00534F53 ); // Select Output Source
72 constexpr auto MPP = static_cast<std::uint32_t>( 0x004D5050 ); // Multi-Pinned Phase mode
73 constexpr auto DCA = static_cast<std::uint32_t>( 0x00444341 ); // Download CoAdder
74 constexpr auto SNF = static_cast<std::uint32_t>( 0x00534E46 ); // Set Number of Frames
75 constexpr auto FPB = static_cast<std::uint32_t>( 0x00465042 ); // Set the Frames-Per-Buffer for coadds
76 constexpr auto VID = static_cast<std::uint32_t>( 0x00564944 ); // mnemonic that means VIDeo board
77 constexpr auto SBN = static_cast<std::uint32_t>( 0x0053424E ); // Set Bias Number
78 constexpr auto SBV = static_cast<std::uint32_t>( 0x00534256 ); // Set Bias Voltage
79 constexpr auto SGN = static_cast<std::uint32_t>( 0x0053474E ); // Set GaiN
80 constexpr auto SMX = static_cast<std::uint32_t>( 0x00534D58 ); // Select MultipleXer
81 constexpr auto CLK = static_cast<std::uint32_t>( 0x00434C4B ); // mnemonic that means CLocK driver board
82 constexpr auto SSS = static_cast<std::uint32_t>( 0x00535353 ); // Set Subarray Sizes
83 constexpr auto SSP = static_cast<std::uint32_t>( 0x00535350 ); // Set Subarray Positions
84 constexpr auto LGN = static_cast<std::uint32_t>( 0x004C474E ); // Set Low Gain
85 constexpr auto HGN = static_cast<std::uint32_t>( 0x0048474E ); // Set High Gain
86 constexpr auto SRM = static_cast<std::uint32_t>( 0x0053524D ); // Set Readout Mode - either CDS or single
87 constexpr auto CDS = static_cast<std::uint32_t>( 0x00434453 ); // Correlated Double Sampling
88 constexpr auto SFS = static_cast<std::uint32_t>( 0x00534653 ); // Send Fowler Sample
89 constexpr auto SPT = static_cast<std::uint32_t>( 0x00535054 ); // Set Pass Through mode
90 constexpr auto LDA = static_cast<std::uint32_t>( 0x004C4441 ); // LoaD Application
91 constexpr auto RCC = static_cast<std::uint32_t>( 0x00524343 ); // Read Controller Configuration
92 constexpr auto CLR = static_cast<std::uint32_t>( 0x00434C52 ); // CleaR Array
93 constexpr auto IDL = static_cast<std::uint32_t>( 0x0049444C ); // IDLe
94 constexpr auto STP = static_cast<std::uint32_t>( 0x00535450 ); // SToP idle
95 constexpr auto CSH = static_cast<std::uint32_t>( 0x00435348 ); // close SHutter
96 constexpr auto OSH = static_cast<std::uint32_t>( 0x004F5348 ); // open SHutter
97 constexpr auto SUR = static_cast<std::uint32_t>( 0x00535552 ); // Set Up the Ramp mode
98 constexpr auto MH1 = static_cast<std::uint32_t>( 0x004D4831 ); // Move NIRIM Filter Wheel 1 Home
99 constexpr auto MM1 = static_cast<std::uint32_t>( 0x004D4D31 ); // Move NIRIM Filter Wheel 1
100 constexpr auto MH2 = static_cast<std::uint32_t>( 0x004D4832 ); // Move NIRIM Filter Wheel 2 Home
101 constexpr auto MM2 = static_cast<std::uint32_t>( 0x004D4D32 ); // Move NIRIM Filter Wheel 2
102 constexpr auto SBS = static_cast<std::uint32_t>( 0x00534253 ); // Set Hardware Byte Swapping
103 constexpr auto TBS = static_cast<std::uint32_t>( 0x00544253 ); // Test for Hardware Byte Swapping
104 constexpr auto RNC = static_cast<std::uint32_t>( 0x00524E43 ); // Read Number of Channels for Hawaii RG array
105 constexpr auto THG = static_cast<std::uint32_t>( 0x00544847 ); // Test High Gain - Utility Board Temperature
106 constexpr auto SID = static_cast<std::uint32_t>( 0x00534944 ); // System ID - FastCam
107 constexpr auto JDL = static_cast<std::uint32_t>( 0x004A444C ); // Jump to DownLoad for C based ARC-22 systems
108 constexpr auto XMT = static_cast<std::uint32_t>( 0x00584D54 ); // Set/Clear fiber optic 2x transmitter mode
109 constexpr auto ABR = static_cast<std::uint32_t>( 0x00414252 ); // ABort Readout & Exposure
110 constexpr auto STM = static_cast<std::uint32_t>( 0x0053544D ); // Set Trigger Mode
111
112 constexpr auto CDT = static_cast<std::uint32_t>( 0x00434454 ); // SmallCam control detector temperature
113 constexpr auto RDT = static_cast<std::uint32_t>( 0x00524454 ); // SmallCam read detector temperature
114 constexpr auto RHV = static_cast<std::uint32_t>( 0x00524856 ); // SmallCam read heater voltage
115 constexpr auto RDC = static_cast<std::uint32_t>( 0x00524443 ); // SmallCam read detector current ( actually, DN )
116
117 constexpr auto RSC = static_cast<std::uint32_t>( 0x00525343 ); // FastCam Only - ReSet Controller
118
119
120 // +----------------------------------------------------------------------------------------
121 // | Controller Configuration Bit Definitions
122 // +----------------------------------------------------------------------------------------
123 // |
124 // | BIT #'s FUNCTION
125 // | 2,1,0 Video Processor
126 // | 000 ARC-41 Dual Readout CCD
127 // | 001 CCD Gen I
128 // | 010 ARC-42 Dual Readout IR
129 // | 011 ARC-44 Four Readout IR Coadder ( obsolete )
130 // | 100 ARC-45 Dual Readout CCD
131 // | 101 ARC-46 8-Channel IR
132 // | 110 ARC-48 8-Channel CCD
133 // | 111 ARC-47 4-Channel CCD
134 // |
135 // | 4,3 Timing Board
136 // | 00 Rev. 4, Gen II
137 // | 01 Gen I
138 // | 10 Rev. 5, Gen III, 250 MHz
139 // |
140 // | 6,5 Utility Board
141 // | 00 No utility board
142 // | 01 Utility Rev. 3
143 // |
144 // | 7 Shutter
145 // | 0 No shutter support
146 // | 1 Yes shutter support
147 // |
148 // | 9,8 Temperature readout
149 // | 00 No temperature readout
150 // | 01 Polynomial Diode calibration
151 // | 10 Linear temperature sensor calibration
152 // |
153 // | 10 Subarray readout
154 // | 0 Not supported
155 // | 1 Yes supported
156 // |
157 // | 11 Binning
158 // | 0 Not supported
159 // | 1 Yes supported
160 // |
161 // | 12 Split-Serial readout
162 // | 0 Not supported
163 // | 1 Yes supported
164 // |
165 // | 13 Split-Parallel readout
166 // | 0 Not supported
167 // | 1 Yes supported
168 // |
169 // | 14 MPP = Inverted parallel clocks
170 // | 0 Not supported
171 // | 1 Yes supported
172 // |
173 // | 16,15 Clock Driver Board
174 // | 00 Rev. 3
175 // | 11 No clock driver board (Gen I)
176 // |
177 // | 19,18,17 Special implementations
178 // | 000 Somewhere else
179 // | 001 Mount Laguna Observatory
180 // | 010 NGST Aladdin
181 // | 011 2x FO Transmitter
182 // | xxx Other
183 // +----------------------------------------------------------------------------------------
184 constexpr auto CCDVIDREV3B = static_cast<std::uint32_t>( 0x000000 ); // CCD Video Processor Rev. 3
185 constexpr auto ARC41 = static_cast<std::uint32_t>( 0x000000 );
186 constexpr auto VIDGENI = static_cast<std::uint32_t>( 0x000001 ); // CCD Video Processor Gen I
187 constexpr auto IRREV4 = static_cast<std::uint32_t>( 0x000002 ); // IR Video Processor Rev. 4
188 constexpr auto ARC42 = static_cast<std::uint32_t>( 0x000002 );
189 constexpr auto COADDER = static_cast<std::uint32_t>( 0x000003 ); // IR Coadder
190 constexpr auto ARC44 = static_cast<std::uint32_t>( 0x000003 );
191 constexpr auto CCDVIDREV5 = static_cast<std::uint32_t>( 0x000004 ); // Differential input CCD video Rev. 5
192 constexpr auto ARC45 = static_cast<std::uint32_t>( 0x000004 );
193 constexpr auto IR8X = static_cast<std::uint32_t>( 0x000005 ); // 8x IR
194 constexpr auto ARC46 = static_cast<std::uint32_t>( 0x000005 ); // 8-channel IR video board
195 constexpr auto ARC48 = static_cast<std::uint32_t>( 0x000006 ); // 8-channel CCD video board
196 constexpr auto ARC47 = static_cast<std::uint32_t>( 0x000007 ); // 4-channel CCD video board
197 constexpr auto TIMREV4 = static_cast<std::uint32_t>( 0x000000 ); // Timing Revision 4 = 50 MHz
198 constexpr auto ARC20 = static_cast<std::uint32_t>( 0x000000 );
199 constexpr auto TIMGENI = static_cast<std::uint32_t>( 0x000008 ); // Timing Gen I = 40 MHz
200 constexpr auto TIMREV5 = static_cast<std::uint32_t>( 0x000010 ); // Timing Revision 5 = 250 MHz
201 constexpr auto ARC22 = static_cast<std::uint32_t>( 0x000010 );
202 constexpr auto UTILREV3 = static_cast<std::uint32_t>( 0x000020 ); // Utility Rev. 3 supported
203 constexpr auto ARC50 = static_cast<std::uint32_t>( 0x000020 );
204 constexpr auto SHUTTER_CC = static_cast<std::uint32_t>( 0x000080 ); // Shutter supported
205 constexpr auto TEMP_SIDIODE = static_cast<std::uint32_t>( 0x000100 ); // Polynomial calibration
206 constexpr auto TEMP_LINEAR = static_cast<std::uint32_t>( 0x000200 ); // Linear calibration
207 constexpr auto SUBARRAY = static_cast<std::uint32_t>( 0x000400 ); // Subarray readout supported
208 constexpr auto BINNING = static_cast<std::uint32_t>( 0x000800 ); // Binning supported
209 constexpr auto SPLIT_SERIAL = static_cast<std::uint32_t>( 0x001000 ); // Split serial supported
210 constexpr auto SPLIT_PARALLEL = static_cast<std::uint32_t>( 0x002000 ); // Split parallel supported
211 constexpr auto MPP_CC = static_cast<std::uint32_t>( 0x004000 ); // Inverted clocks supported
212 constexpr auto ARC32 = static_cast<std::uint32_t>( 0x008000 ); // CCD & IR clock driver board
213 constexpr auto CLKDRVGENI = static_cast<std::uint32_t>( 0x018000 ); // No clock driver board - Gen I
214 constexpr auto MLO = static_cast<std::uint32_t>( 0x020000 ); // Set if Mount Laguna Observatory
215 constexpr auto NGST = static_cast<std::uint32_t>( 0x040000 ); // NGST Aladdin implementation
216 constexpr auto FO_2X_TRANSMITR = static_cast<std::uint32_t>( 0x060000 ); // 2x FO transmitters
217 constexpr auto CONT_RD = static_cast<std::uint32_t>( 0x100000 ); // continuous readout implemented
218 constexpr auto SEL_READ_SPEED = static_cast<std::uint32_t>( 0x200000 ); // Selectable readout speeds
219
220 #define ALL_READOUTS ( SPLIT_SERIAL | SPLIT_PARALLEL )
221
222 // +----------------------------------------------------------------------------------------
223 // | 'SOS' Array Amplifier Parameters
224 // +----------------------------------------------------------------------------------------
225 constexpr auto AMP_0 = static_cast<std::uint32_t>( 0x5F5F43 ); // Ascii __C amp 0
226 constexpr auto AMP_1 = static_cast<std::uint32_t>( 0x5F5F44 ); // Ascii __D amp 1
227 constexpr auto AMP_2 = static_cast<std::uint32_t>( 0x5F5F42 ); // Ascii __B amp 2
228 constexpr auto AMP_3 = static_cast<std::uint32_t>( 0x5F5F41 ); // Ascii __A amp 3
229 constexpr auto AMP_L = static_cast<std::uint32_t>( 0x5F5F4C ); // Ascii __L left amp
230 constexpr auto AMP_R = static_cast<std::uint32_t>( 0x5F5F52 ); // Ascii __R left amp
231 constexpr auto AMP_LR = static_cast<std::uint32_t>( 0x5F4C52 ); // Ascii _LR right two amps
232 constexpr auto AMP_ALL = static_cast<std::uint32_t>( 0x414C4C ); // Ascii ALL four amps (quad)
233
234
235 // +-----------------------------------------------------------
236 // | Define continuous readout modes
237 // +-----------------------------------------------------------
238 constexpr auto CR_WRITE = static_cast< std::uint32_t >( 0 );
239 constexpr auto CR_COADD = static_cast< std::uint32_t >( 1 );
240 constexpr auto CR_DEBUG = static_cast< std::uint32_t >( 2 );
241
242
243 // +----------------------------------------------------------------------------------------
244 // A valid start address must be less than 0x4000 for
245 // the load DSP file in timming or utility boards.
246 // +----------------------------------------------------------------------------------------
247 constexpr auto MAX_DSP_START_LOAD_ADDR = static_cast<std::uint32_t>( 0x4000 );
248
249
250 // +-----------------------------------------------------------
251 // | Shutter Position Constants
252 // +-----------------------------------------------------------
253 constexpr auto OPEN_SHUTTER_POSITION = static_cast< std::uint32_t >( ( 1 << 11 ) );
254 constexpr auto CLOSED_SHUTTER_POSITION = static_cast< std::uint32_t >( ~( 1 << 11 ) );
255
256
257 // +----------------------------------------------------------------------------
258 // | Macro that returns 'true' if the parameter indicates the ARC-12
259 // | ( SmallCam ) controller; returns 'false' otherwise.
260 // +----------------------------------------------------------------------------
261 constexpr auto IS_ARC12( std::uint32_t id ) { return ( ( ( ( id & 0xFF0000 ) >> 16 ) == 'S' && ( ( id & 0x00FF00 ) >> 8 ) == 'C' ) ? true : false ); }
262
263
264 // +-----------------------------------------------------------
265 // | SmallCam Synthetic Image Commands & Arguments
266 // +-----------------------------------------------------------
267 constexpr auto SIM = static_cast<std::uint32_t>( 0x0053494D );
268
269 enum class syntheticImage_t : std::uint32_t
270 {
271 SYN_IMG_DISABLE = 0,
272 SYN_IMG_FIXED,
273 SYN_IMG_RAMP,
274 SYN_IMG_RESET
275 };
276
277#ifdef __cplusplus
278} // end namespace
279#endif