moved kdeaccessibility kdeaddons kdeadmin kdeartwork kdebindings kdeedu kdegames...
[kdeedu.git] / kstars / kstars / indi / apogee / ApnCamera_NET.cpp
blob0f739121d38fc9d88dcca1e77dee8b21b4fe13b2
1 // ApnCamera_NET.cpp: implementation of the CApnCamera_NET class.
2 //
3 // Copyright (c) 2003, 2004 Apogee Instruments, Inc.
4 //////////////////////////////////////////////////////////////////////
6 #include "stdafx.h"
7 #include "ApnCamera_NET.h"
9 #include <stdio.h>
10 #include <sys/types.h>
11 #include <sys/stat.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 )
27 char Hostname[25];
28 BYTE ipAddr[4];
29 int init;
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 )
40 return false;
43 m_CameraInterface = Apn_Interface_NET;
45 // Before trying to initialize, perform a simple loopback test
46 unsigned short RegData;
47 unsigned short NewRegData;
49 RegData = 0x5AA5;
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;
54 RegData = 0xA55A;
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();
62 if ( init != 0 ) {
63 printf("Loopback test successful - InitDefaults FAILED\n");
64 return false;
67 printf("Loopback test successful - InitDefaults completed\n");
68 return true;
72 bool CApnCamera::CloseDriver()
74 ApnNetClose();
76 return true;
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;
87 long i, j;
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() )
94 Sleep( 50 );
95 read_ImagingStatus();
98 Width = m_pvtWidth;
99 Height = m_pvtHeight;
101 if ( m_pvtBitsPerPixel == 16 )
102 Offset = 1;
104 if ( m_pvtBitsPerPixel == 12 )
105 Offset = 10;
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();
125 SignalImagingDone();
127 return true;
131 bool CApnCamera::GetLineData( unsigned short *pLineBuffer,
132 unsigned short &Size )
134 Size = 0;
136 return false;
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
148 return 1;
151 m_pvtBitsPerPixel = BitsPerPixel;
153 if ( BitsPerPixel == 16 )
154 m_pvtWidth += 1;
156 if ( BitsPerPixel == 12 )
157 m_pvtWidth += 10;
159 if ( ApnNetStartExp( m_pvtWidth, m_pvtHeight ) != APNET_SUCCESS )
161 return 1;
164 return 0;
168 long CApnCamera::PostStopExposure( bool DigitizeData )
170 if ( ApnNetStopExp( DigitizeData ) != APNET_SUCCESS )
172 return 1;
175 if ( !DigitizeData )
177 SignalImagingDone();
180 return 0;
184 void CApnCamera::SetNetworkTransferMode( Apn_NetworkMode TransferMode )
186 switch ( TransferMode )
188 case Apn_NetworkMode_Tcp:
189 ApnNetSetSpeed( false );
190 break;
191 case Apn_NetworkMode_Udp:
192 ApnNetSetSpeed( true );
193 break;
198 long CApnCamera::Read( unsigned short reg, unsigned short& val )
200 if ( ApnNetReadReg( reg, &val ) != APNET_SUCCESS )
202 return 1; // Failure
204 return 0;
208 long CApnCamera::Write( unsigned short reg, unsigned short val )
210 if ( ApnNetWriteReg( reg, val ) != APNET_SUCCESS )
212 return 1; // Failure
215 return 0;
219 long CApnCamera::WriteMultiSRMD( unsigned short reg, unsigned short val[], unsigned short count )
221 if ( ApnNetWriteRegMulti( reg, val, count ) != APNET_SUCCESS )
223 return 1;
226 return 0;
230 long CApnCamera::WriteMultiMRMD( unsigned short reg[], unsigned short val[], unsigned short count )
232 if ( ApnNetWriteRegMultiMRMD( reg, val, count ) != APNET_SUCCESS )
234 return 1;
237 return 0;
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];
252 RegNumber[0] = 91;
253 RegNumber[1] = 93;
254 RegNumber[2] = 94;
255 RegNumber[3] = 95;
256 RegNumber[4] = 96;
257 RegNumber[5] = 104;
258 RegNumber[6] = 105;
260 if ( ApnNetReadRegMulti( RegNumber, RegData, 7 ) != APNET_SUCCESS )
262 return 1;
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];
273 return 0;