// ApnCamera_USB.cpp: implementation of the CApnCamera_USB class. // // Copyright (c) 2003, 2004 Apogee Instruments, Inc. ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ApnCamera_USB.h" #include "ApogeeUsb.h" #include "ApogeeUsbErr.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// bool CApnCamera::InitDriver( unsigned long CamIdA, unsigned short /*CamIdB*/, unsigned long /*Option*/ ) { if ( ApnUsbOpen( (unsigned short)CamIdA ) != APN_USB_SUCCESS ) { return false; } m_CameraInterface = Apn_Interface_USB; // Before trying to initialize, perform a simple loopback test unsigned short RegData; unsigned short NewRegData; RegData = 0x5AA5; if ( Write( FPGA_REG_SCRATCH, RegData ) != APN_USB_SUCCESS ) return false; if ( Read( FPGA_REG_SCRATCH, NewRegData ) != APN_USB_SUCCESS ) return false; if ( RegData != NewRegData ) return false; RegData = 0xA55A; if ( Write( FPGA_REG_SCRATCH, RegData ) != APN_USB_SUCCESS ) return false; if ( Read( FPGA_REG_SCRATCH, NewRegData ) != APN_USB_SUCCESS ) return false; if ( RegData != NewRegData ) return false; // The loopback test was successful. Proceed with initialization. if ( InitDefaults() != 0 ) return false; return true; } bool CApnCamera::CloseDriver() { ApnUsbClose(); return true; } void CApnCamera::SetNetworkTransferMode( Apn_NetworkMode /*TransferMode*/ ) { return; } bool CApnCamera::GetImageData( unsigned short *pImageBuffer, unsigned short &Width, unsigned short &Height, unsigned long &Count ) { unsigned short Offset(0); unsigned short *pTempBuffer; long i, j; // Make sure it is okay to get the image data // The app *should* have done this on its own, but we have to make sure while ( !ImageReady() ) { Sleep( 50 ); read_ImagingStatus(); } Width = m_pvtWidth; Height = m_pvtHeight; if ( m_pvtBitsPerPixel == 16 ) Offset = 1; if ( m_pvtBitsPerPixel == 12 ) Offset = 10; Width -= Offset; // Calculate the true image width pTempBuffer = new unsigned short[(Width+Offset) * Height]; ApnUsbGetImage( pTempBuffer ); for ( i=0; i