• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kstars

ApnCamera_NET.cpp

Go to the documentation of this file.
00001 // ApnCamera_NET.cpp: implementation of the CApnCamera_NET class.
00002 //
00003 // Copyright (c) 2003, 2004 Apogee Instruments, Inc.
00005 
00006 #include "stdafx.h"
00007 #include "ApnCamera_NET.h"
00008 
00009 #include <stdio.h>
00010 #include <sys/types.h>
00011 #include <sys/stat.h>
00012 
00013 #include "ApogeeNet.h"
00014 #include "ApogeeNetErr.h"
00015 
00016 
00018 // Construction/Destruction
00020 
00021 
00022 
00023 bool CApnCamera::InitDriver( unsigned long  CamIdA, 
00024                                  unsigned short CamIdB, 
00025                                  unsigned long  Option )
00026 {
00027     char    Hostname[25];
00028     BYTE    ipAddr[4];
00029     int init;
00030 
00031     ipAddr[0] = (BYTE)(CamIdA & 0xFF);
00032     ipAddr[1] = (BYTE)((CamIdA >> 8) & 0xFF);
00033     ipAddr[2] = (BYTE)((CamIdA >> 16) & 0xFF);
00034     ipAddr[3] = (BYTE)((CamIdA >> 24) & 0xFF);
00035 
00036     sprintf( Hostname, "%u.%u.%u.%u:%u", ipAddr[3], ipAddr[2], ipAddr[1], ipAddr[0], CamIdB );
00037 
00038     if ( ApnNetConnect( Hostname ) != APNET_SUCCESS )
00039     {
00040         return false;
00041     }
00042 
00043     m_CameraInterface = Apn_Interface_NET;
00044     
00045     // Before trying to initialize, perform a simple loopback test
00046     unsigned short  RegData;
00047     unsigned short  NewRegData;
00048 
00049     RegData = 0x5AA5;
00050     if ( Write( FPGA_REG_SCRATCH, RegData )     != APNET_SUCCESS ) return false;
00051     if ( Read( FPGA_REG_SCRATCH, NewRegData )   != APNET_SUCCESS ) return false;        
00052     if ( RegData != NewRegData ) return false;
00053 
00054     RegData = 0xA55A;
00055     if ( Write( FPGA_REG_SCRATCH, RegData )     != APNET_SUCCESS ) return false;
00056     if ( Read( FPGA_REG_SCRATCH, NewRegData )   != APNET_SUCCESS ) return false;        
00057     if ( RegData != NewRegData ) return false;
00058     printf("Loopback test successful - ALTA-E detected at %u.%u.%u.%u:%u\n", ipAddr[3], ipAddr[2], ipAddr[1], ipAddr[0]);
00059 
00060     // The loopback test was successful.  Proceed with initialization.
00061     init = InitDefaults();
00062     if ( init != 0 ) {
00063         printf("Loopback test successful - InitDefaults FAILED\n");
00064         return false;
00065     }
00066 
00067     printf("Loopback test successful - InitDefaults completed\n");
00068     return true;
00069 }
00070 
00071 
00072 bool CApnCamera::CloseDriver()
00073 {
00074     ApnNetClose();
00075 
00076     return true;
00077 }
00078 
00079 
00080 bool CApnCamera::GetImageData( unsigned short *pImageBuffer, 
00081                                    unsigned short &Width,
00082                                    unsigned short &Height,
00083                                    unsigned long  &Count )
00084 {
00085     unsigned short  Offset;
00086     unsigned short  *pTempBuffer;
00087     long            i, j;
00088 
00089     
00090     // Make sure it is okay to get the image data
00091     // The app *should* have done this on its own, but we have to make sure
00092     while ( !ImageReady() )
00093     {
00094         Sleep( 50 );
00095         read_ImagingStatus();
00096     }
00097 
00098     Width   = m_pvtWidth;
00099     Height  = m_pvtHeight;
00100 
00101     if ( m_pvtBitsPerPixel == 16 )
00102         Offset = 1;
00103 
00104     if ( m_pvtBitsPerPixel == 12 )
00105         Offset = 10;
00106 
00107     Width -= Offset;    // Calculate the true image width
00108 
00109     pTempBuffer = new unsigned short[(Width+Offset) * Height];
00110     
00111     ApnNetGetImageTcp( pTempBuffer );
00112 
00113     for ( i=0; i<Height; i++ )
00114     {
00115         for ( j=0; j<Width; j++ )
00116         {
00117             pImageBuffer[(i*Width)+j] = pTempBuffer[(i*(Width+Offset))+j+Offset];
00118         }
00119     }
00120 
00121     delete [] pTempBuffer;
00122 
00123     Count = read_ImageCount();
00124 
00125     SignalImagingDone();
00126 
00127     return true;
00128 }
00129 
00130 
00131 bool CApnCamera::GetLineData( unsigned short *pLineBuffer,
00132                                   unsigned short &Size )
00133 {
00134     Size = 0;
00135 
00136     return false;
00137 }
00138 
00139 
00140 long CApnCamera::PreStartExpose( unsigned short BitsPerPixel )
00141 {
00142     m_pvtWidth  = GetExposurePixelsH();
00143     m_pvtHeight = GetExposurePixelsV();
00144 
00145     if ( (BitsPerPixel != 16) && (BitsPerPixel != 12) )
00146     {
00147         // Invalid bit depth request
00148         return 1;
00149     }
00150 
00151     m_pvtBitsPerPixel = BitsPerPixel;
00152 
00153     if ( BitsPerPixel == 16 )
00154         m_pvtWidth += 1;
00155 
00156     if ( BitsPerPixel == 12 )
00157         m_pvtWidth += 10;
00158 
00159     if ( ApnNetStartExp( m_pvtWidth, m_pvtHeight ) != APNET_SUCCESS )
00160     {
00161         return 1;
00162     }
00163 
00164     return 0;
00165 }
00166 
00167 
00168 long CApnCamera::PostStopExposure( bool DigitizeData )
00169 {
00170     if ( ApnNetStopExp( DigitizeData ) != APNET_SUCCESS )
00171     {
00172         return 1;
00173     }
00174 
00175     if ( !DigitizeData )
00176     {
00177         SignalImagingDone();
00178     }
00179 
00180     return 0;
00181 }
00182 
00183 
00184 void CApnCamera::SetNetworkTransferMode( Apn_NetworkMode TransferMode )
00185 {
00186     switch ( TransferMode )
00187     {
00188     case Apn_NetworkMode_Tcp:
00189         ApnNetSetSpeed( false );
00190         break;
00191     case Apn_NetworkMode_Udp:
00192         ApnNetSetSpeed( true );
00193         break;
00194     }
00195 }
00196 
00197 
00198 long CApnCamera::Read( unsigned short reg, unsigned short& val )
00199 {
00200     if ( ApnNetReadReg( reg, &val ) != APNET_SUCCESS )
00201     {
00202         return 1;       // Failure
00203     }
00204     return 0;
00205 }
00206 
00207 
00208 long CApnCamera::Write( unsigned short reg, unsigned short val )
00209 {
00210     if ( ApnNetWriteReg( reg, val ) != APNET_SUCCESS )
00211     {
00212         return 1;       // Failure
00213     }
00214 
00215     return 0;
00216 }
00217 
00218 
00219 long CApnCamera::WriteMultiSRMD( unsigned short reg, unsigned short val[], unsigned short count )
00220 {
00221     if ( ApnNetWriteRegMulti( reg, val, count ) != APNET_SUCCESS )
00222     {
00223         return 1;
00224     }
00225 
00226     return 0;
00227 }
00228 
00229 
00230 long CApnCamera::WriteMultiMRMD( unsigned short reg[], unsigned short val[], unsigned short count )
00231 {
00232     if ( ApnNetWriteRegMultiMRMD( reg, val, count ) != APNET_SUCCESS )
00233     {
00234         return 1;
00235     }
00236 
00237     return 0;
00238 }
00239 
00240 
00241 long CApnCamera::QueryStatusRegs( unsigned short& StatusReg,
00242                                       unsigned short& HeatsinkTempReg,
00243                                       unsigned short& CcdTempReg,
00244                                       unsigned short& CoolerDriveReg,
00245                                       unsigned short& VoltageReg,
00246                                       unsigned short& TdiCounter,
00247                                       unsigned short& SequenceCounter )
00248 {
00249     unsigned short RegNumber[7];
00250     unsigned short RegData[7];
00251 
00252     RegNumber[0] = 91;
00253     RegNumber[1] = 93;
00254     RegNumber[2] = 94;
00255     RegNumber[3] = 95;
00256     RegNumber[4] = 96;
00257     RegNumber[5] = 104;
00258     RegNumber[6] = 105;
00259 
00260     if ( ApnNetReadRegMulti( RegNumber, RegData, 7 ) != APNET_SUCCESS )
00261     {
00262         return 1;
00263     }
00264 
00265     StatusReg       = RegData[0];
00266     HeatsinkTempReg = RegData[1];
00267     CcdTempReg      = RegData[2];
00268     CoolerDriveReg  = RegData[3];
00269     VoltageReg      = RegData[4];
00270     TdiCounter      = RegData[5];
00271     SequenceCounter = RegData[6];
00272 
00273     return 0;
00274 }
00275 

kstars

Skip menu "kstars"
  • Main Page
  • Modules
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • keduca
  • kstars
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal