1 // ApnCamera_NET.cpp: implementation of the CApnCamera_NET class.
3 // Copyright (c) 2003, 2004 Apogee Instruments, Inc.
4 //////////////////////////////////////////////////////////////////////
7 #include "ApnCamera_NET.h"
10 #include <sys/types.h>
13 #include "ApogeeNet.h"
14 #include "ApogeeNetErr.h"
17 //////////////////////////////////////////////////////////////////////
18 // Construction/Destruction
19 //////////////////////////////////////////////////////////////////////
23 bool CApnCamera::InitDriver( unsigned long CamIdA
,
24 unsigned short CamIdB
,
25 unsigned long Option
)
31 ipAddr
[0] = (BYTE
)(CamIdA
& 0xFF);
32 ipAddr
[1] = (BYTE
)((CamIdA
>> 8) & 0xFF);
33 ipAddr
[2] = (BYTE
)((CamIdA
>> 16) & 0xFF);
34 ipAddr
[3] = (BYTE
)((CamIdA
>> 24) & 0xFF);
36 sprintf( Hostname
, "%u.%u.%u.%u:%u", ipAddr
[3], ipAddr
[2], ipAddr
[1], ipAddr
[0], CamIdB
);
38 if ( ApnNetConnect( Hostname
) != APNET_SUCCESS
)
43 m_CameraInterface
= Apn_Interface_NET
;
45 // Before trying to initialize, perform a simple loopback test
46 unsigned short RegData
;
47 unsigned short NewRegData
;
50 if ( Write( FPGA_REG_SCRATCH
, RegData
) != APNET_SUCCESS
) return false;
51 if ( Read( FPGA_REG_SCRATCH
, NewRegData
) != APNET_SUCCESS
) return false;
52 if ( RegData
!= NewRegData
) return false;
55 if ( Write( FPGA_REG_SCRATCH
, RegData
) != APNET_SUCCESS
) return false;
56 if ( Read( FPGA_REG_SCRATCH
, NewRegData
) != APNET_SUCCESS
) return false;
57 if ( RegData
!= NewRegData
) return false;
58 printf("Loopback test successful - ALTA-E detected at %u.%u.%u.%u:%u\n", ipAddr
[3], ipAddr
[2], ipAddr
[1], ipAddr
[0]);
60 // The loopback test was successful. Proceed with initialization.
61 init
= InitDefaults();
63 printf("Loopback test successful - InitDefaults FAILED\n");
67 printf("Loopback test successful - InitDefaults completed\n");
72 bool CApnCamera::CloseDriver()
80 bool CApnCamera::GetImageData( unsigned short *pImageBuffer
,
81 unsigned short &Width
,
82 unsigned short &Height
,
83 unsigned long &Count
)
85 unsigned short Offset
;
86 unsigned short *pTempBuffer
;
90 // Make sure it is okay to get the image data
91 // The app *should* have done this on its own, but we have to make sure
92 while ( !ImageReady() )
101 if ( m_pvtBitsPerPixel
== 16 )
104 if ( m_pvtBitsPerPixel
== 12 )
107 Width
-= Offset
; // Calculate the true image width
109 pTempBuffer
= new unsigned short[(Width
+Offset
) * Height
];
111 ApnNetGetImageTcp( pTempBuffer
);
113 for ( i
=0; i
<Height
; i
++ )
115 for ( j
=0; j
<Width
; j
++ )
117 pImageBuffer
[(i
*Width
)+j
] = pTempBuffer
[(i
*(Width
+Offset
))+j
+Offset
];
121 delete [] pTempBuffer
;
123 Count
= read_ImageCount();
131 bool CApnCamera::GetLineData( unsigned short *pLineBuffer
,
132 unsigned short &Size
)
140 long CApnCamera::PreStartExpose( unsigned short BitsPerPixel
)
142 m_pvtWidth
= GetExposurePixelsH();
143 m_pvtHeight
= GetExposurePixelsV();
145 if ( (BitsPerPixel
!= 16) && (BitsPerPixel
!= 12) )
147 // Invalid bit depth request
151 m_pvtBitsPerPixel
= BitsPerPixel
;
153 if ( BitsPerPixel
== 16 )
156 if ( BitsPerPixel
== 12 )
159 if ( ApnNetStartExp( m_pvtWidth
, m_pvtHeight
) != APNET_SUCCESS
)
168 long CApnCamera::PostStopExposure( bool DigitizeData
)
170 if ( ApnNetStopExp( DigitizeData
) != APNET_SUCCESS
)
184 void CApnCamera::SetNetworkTransferMode( Apn_NetworkMode TransferMode
)
186 switch ( TransferMode
)
188 case Apn_NetworkMode_Tcp
:
189 ApnNetSetSpeed( false );
191 case Apn_NetworkMode_Udp
:
192 ApnNetSetSpeed( true );
198 long CApnCamera::Read( unsigned short reg
, unsigned short& val
)
200 if ( ApnNetReadReg( reg
, &val
) != APNET_SUCCESS
)
208 long CApnCamera::Write( unsigned short reg
, unsigned short val
)
210 if ( ApnNetWriteReg( reg
, val
) != APNET_SUCCESS
)
219 long CApnCamera::WriteMultiSRMD( unsigned short reg
, unsigned short val
[], unsigned short count
)
221 if ( ApnNetWriteRegMulti( reg
, val
, count
) != APNET_SUCCESS
)
230 long CApnCamera::WriteMultiMRMD( unsigned short reg
[], unsigned short val
[], unsigned short count
)
232 if ( ApnNetWriteRegMultiMRMD( reg
, val
, count
) != APNET_SUCCESS
)
241 long CApnCamera::QueryStatusRegs( unsigned short& StatusReg
,
242 unsigned short& HeatsinkTempReg
,
243 unsigned short& CcdTempReg
,
244 unsigned short& CoolerDriveReg
,
245 unsigned short& VoltageReg
,
246 unsigned short& TdiCounter
,
247 unsigned short& SequenceCounter
)
249 unsigned short RegNumber
[7];
250 unsigned short RegData
[7];
260 if ( ApnNetReadRegMulti( RegNumber
, RegData
, 7 ) != APNET_SUCCESS
)
265 StatusReg
= RegData
[0];
266 HeatsinkTempReg
= RegData
[1];
267 CcdTempReg
= RegData
[2];
268 CoolerDriveReg
= RegData
[3];
269 VoltageReg
= RegData
[4];
270 TdiCounter
= RegData
[5];
271 SequenceCounter
= RegData
[6];