// Faux library of camera manager commands. By installing this script as a library in an offline version of DigitalMicrograph, you will be able
// to develop scripts which are designed to work with Gatan cameras. Without this library present, when you try and run a script which uses 
// camera manager commands it will generate an error and will not work. This library allows you to do most of the rough drafting of a camera-based script
// away  from the microscope - freeing up valuable instrument time.

// D. R. G. Mitchell, adminnospam@dmscripting.com (remove the nospam to make this address work), www.dmscripting.com
// version:20200801, v2.0, August 2020

// These commands are faux commands. They do not emulate a real camera. In many cases commands simply return arbitrary images and numbers, or nothing at all.
// They will not be a substitute for a real camera. However, they will allow you to create basic outlines of scripts and include the camera commands
// without errors. Once your script is roughed out, you can then move to the microscope and begin testing your script.
// You may need to put in extra lines of temporary code to simulate delays, create some data in an image, display an image etc, which might otherwise happen
// if you were talking to real camera. Typically, I would leave gaps around such temporary code, so that they can be quickly identified (and removed)
// when it comes to migrate the script to the microscope-based version.

// The values below are default values. They are stored in tags in File:Global Info:Global Tags:Faux Hardware:Faux Camera. You can edit these manually.
// However, a companion script (Faux Hardware) will provide a dialog interface through which these settings, and those of all the other Faux .. . () libraries
// can be set.

// Not all the functions have associated default values in the tags. There are many of these commands which are camera/controller-specific.
// If you find you need an editable value when writing your script - you can always include a few lines of temporary code within your script.


// Library variables


// Any objects supplied to, or from, these library functions are empty

object cameramanager
object cameralist
object camera
object acqparams
object self
object userinteract
object acquisitionobject


// Default values

number defaultccdwidth=1024
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Width", defaultccdwidth))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Width", defaultccdwidth)
	}

number defaultccdheight=1024
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Height", defaultccdheight))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Height", defaultccdheight)
	}

number defaultpixelsizex=14 // um
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Pixel Size X", defaultpixelsizex))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Pixel Size X", defaultpixelsizex)
	}

number defaultpixelsizey=14 // um
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Pixel Size Y", defaultpixelsizey))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Pixel Size Y", defaultpixelsizey)
	}

string defaultdefects="Defects"
if(!getpersistentstringnote("Faux Hardware:Faux Camera:CCD Defects", defaultdefects))
	{
		setpersistentstringnote("Faux Hardware:Faux Camera:CCD Defects", defaultdefects)
	}

number defaultccdtop=0
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Top", defaultccdtop))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Top", defaultccdtop)
	}

number defaultccdleft=0
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Left", defaultccdleft))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Left", defaultccdleft)
	}
	
number defaultccdbottom=1024
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Bottom", defaultccdbottom))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Bottom", defaultccdbottom)
	}
	
number defaultccdright=1024
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Right", defaultccdright))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Right", defaultccdright)
	}

number defaultprocessing=3
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Processing (0-3)", defaultprocessing))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Processing (0-3)", defaultprocessing)
	}

number defaultsettlingtime=0.75
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Settling Time", defaultsettlingtime))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Settling Time", defaultsettlingtime)
	}

number defaultexposure=2.0
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Exposure Time", defaultexposure))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Exposure Time", defaultexposure)
	}

number defaultccdtranspose=1
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Transpose (0-1)", defaultccdtranspose))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Transpose (0-1)", defaultccdtranspose)
	}

number defaultccdbinningx=2
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning X", defaultccdbinningx))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning X", defaultccdbinningx)
	}

number defaultccdbinningy=2
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning Y", defaultccdbinningy))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning Y", defaultccdbinningy)
	}

number defaultnumberofshutters=2
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Number of Shutters", defaultnumberofshutters))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Number of Shutters", defaultnumberofshutters)
	}

number defaultframeshuttermask=7
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Frame Shutter Mask", defaultframeshuttermask))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Frame Shutter Mask", defaultframeshuttermask)
	}

number defaultshutterindex=2
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Shutter Index", defaultshutterindex))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Shutter Index", defaultshutterindex)
	}

number defaultconfigidleshuttersmask=5
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Configure Idle Shutters Mask", defaultconfigidleshuttersmask))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Configure Idle Shutters Mask", defaultconfigidleshuttersmask)
	}

number defaultconfigcurrenthuttersmask=3
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Configure Current Shutter Mask", defaultconfigcurrenthuttersmask))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Configure Current Shutter Mask", defaultconfigcurrenthuttersmask)
	}

number defaultccdisretractable=1
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Retractable (0-1)", defaultccdisretractable))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Retractable (0-1)", defaultccdisretractable)
	}

number defaultccdisinserted=0
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Inserted (0-1)", defaultccdisinserted))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Inserted (0-1)", defaultccdisinserted)
	}

number defaultinsertdelay=5
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Insertion Delay", defaultinsertdelay))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Insertion Delay", defaultinsertdelay)
	}

number defaultretractdelay=3
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Retraction Delay", defaultretractdelay))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Retraction Delay", defaultretractdelay)
	}

number defaultcansetantiblooming=1
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Can Set Antiblooming (0-1)", defaultcansetantiblooming))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Can Set Antiblooming (0-1)", defaultcansetantiblooming)
	}

number defaultcamerareadmodes=3
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Read Modes", defaultcamerareadmodes))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Read Modes", defaultcamerareadmodes)
	}

number defaultcurrentcameramode=2
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:Current CCD Read Mode", defaultcurrentcameramode))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Current CCD Read Mode", defaultcurrentcameramode)
	}

number defaultminimumcameratemperature=-20
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Minimum Temperature", defaultminimumcameratemperature))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Minimum Temperature", defaultminimumcameratemperature)
	}

number defaultmaximumcameratemperature=30
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Maximum Temperature", defaultmaximumcameratemperature))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Maximum Temperature", defaultmaximumcameratemperature)
	}

number defaultcurrentcameratemperature=-12
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Current Temperature", defaultcurrentcameratemperature))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Current Temperature", defaultcurrentcameratemperature)
	}

number defaulttargettemp=-18
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Target Temperature", defaulttargettemp))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Target Temperature", defaulttargettemp)
	}
	
number defaultstartuptemp=-10
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Start Up Temperature", defaultstartuptemp))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Start Up Temperature", defaultstartuptemp)
	}
	
number defaultshutdowntemp=20
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Shut Down Temperature", defaultshutdowntemp))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Shut Down Temperature", defaultshutdowntemp)
	}

string defaultcameraname="Faux Camera"
if(!getpersistentstringnote("Faux Hardware:Faux Camera:Camera Name", defaultcameraname))
	{
		setpersistentstringnote("Faux Hardware:Faux Camera:Camera Name", defaultcameraname)
	}

string defaultcameracontrollerclass="Faux Camera Class"
if(!getpersistentstringnote("Faux Hardware:Faux Camera:Camera Controller Class", defaultcameracontrollerclass))
	{
		setpersistentstringnote("Faux Hardware:Faux Camera:Camera Controller Class", defaultcameracontrollerclass)
	}

number defaultccdqualitylevel=4
if(!getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Quality Level", defaultccdqualitylevel))
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Quality Level", defaultccdqualitylevel)
	}


//Define the faux functions

Object CM_GetCameraManager()
	{
		object cameramanager
		result("\n\nReturning the camera manager object.")
		return cameramanager
	}
 
 Object CM_GetCameras( Object cam_mgr ) 
	 {
		 object camlist
		 result("\n\nReturning the list of cameras.")
		 return camlist
	 }
      
void   CM_SelectCamera( Object cameramanager, Object camera )
	{
		// sets the specified camera as the one selected
		result("\n\nSelecting the camera specified in passed in object camera.")
	}
     
Object CM_GetCurrentCamera()
	{
		object camera
		result("\n\nSourcing the current camera object.")
		return camera
	}
  
String CM_GetCameraName( Object camera )
	{
		string cameraname
		getpersistentstringnote("Faux Hardware:Faux Camera:Camera Name", cameraname)
		result("\n\nSourcing the camera name as = "+cameraname)
		return cameraname
	}
       
void   CM_SetCameraName( Object camera, String new_camera_name )
	{
		setpersistentstringnote("Faux Hardware:Faux Camera:Camera Name", new_camera_name)
		result("\n\nNew camera name is "+new_camera_name+"\n")
	}
      
String CM_GetCameraControllerClass( Object camera )
	{
		string cameracontrollerclass
		getpersistentstringnote("Faux Hardware:Faux Camera:Camera Controller Class", cameracontrollerclass)
		result("\n\nGetting the camera controller class name as = "+cameracontrollerclass)
		return cameracontrollerclass
	}
      
String CM_GetCameraIdentifier( object camera )
	{
		string camidentifier
		getpersistentstringnote("Faux Hardware:Faux Camera:Camera Name", camidentifier)
		result("\n\nGetting the camera identifier as = "+camidentifier)
		return camidentifier
	}
      
void  CM_CCD_GetSize( Object camera, Number &ccd_width, Number &ccd_height )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Width", ccd_width)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Height", ccd_height)
		result("\n\nGetting the CCD size as x = "+ccd_width+" y = "+ccd_height)
	}

void   CM_CCD_GetPixelSize_um( object camera, Number &pix_width, Number &pix_height )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Pixel Size X", pix_width)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Pixel Size Y", pix_height)
		result("\n\nGetting the CCD pixel size as x = "+pix_width+" y = "+pix_height)
	}

void   CM_CCD_CalcActiveSize( Object camera, Object acq_params, Number &ccd_width, Number &ccd_height )
	{
		number top, left, bottom, right

		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Top", top)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Left", left)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Bottom", bottom)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Right", right)

		number activewidth=right-left
		number activeheight=bottom-top
		result("\n\nGetting the active area as x = "+activewidth+" y = "+activeheight)
	}
      
String CM_CCD_GetDefectDescriptor( Object self )
	{
		string defectdescriptor
		getpersistentstringnote("Faux Hardware:Faux Camera:CCD Defects", defectdescriptor)
		result("\n\nGetting the defect descriptor string as "+defectdescriptor)
		return defectdescriptor
	}
	
void CM_CCD_SetDefectDescriptor( Object self, String defects )
	{
		setpersistentstringnote("Faux Hardware:Faux Camera:CCD Defects", defects)
		result("\n\nSetting defect descriptor: "+defects)
	}
      
Number CM_Config_GetDefaultTranspose(object camera )
	{
		number transpose
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Transpose (0-1)", transpose)
		result("\n\nGetting the default transpose.")
		return transpose
	}
      
void   CM_Config_SetDefaultTranspose( Object camera, Number transpose )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Transpose (0-1)", transpose)
		result("\n\nSetting Default Transpose to : "+transpose)
	}
      
void   CM_CalcFrameSize( Object camera, Number transpose, Number adj_x, Number adj_y, Number binx, Number biny, Number &dst_width_out, Number &dst_height_out )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Width", dst_width_out)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Height", dst_height_out)
		result("\n\nCalculating the frame size as x = "+dst_width_out+" y = "+dst_height_out)
	}
      
Number CM_CountShutters( Object camera )
	{
		number noshutters
		getpersistentnumbernote("Faux Hardware:Faux Camera:Number of Shutters", noshutters)
		result("\n\nNumber of shutters is = "+noshutters)
		return noshutters
	}

Number CM_GetFrameShuttersMask( Object self )
	{
		number shuttersmask
		getpersistentnumbernote("Faux Hardware:Faux Camera:Frame Shutter Mask", shuttersmask)
		result("\n\nNGetting frame shutter mask = "+shuttersmask)
		return shuttersmask
	}

 Number CM_GetConfigurableIdleShuttersMask( Object self )
	 {
		number idlemask
		getpersistentnumbernote("Faux Hardware:Faux Camera:Configure Idle Shutters Mask", idlemask)
		result("\n\nGetting the configurable idle shutters mask = "+idlemask)
		return idlemask
	 }
      
Number CM_GetConfigurableCurrentShuttersMask( Object self )
	{
		number currentmask
		getpersistentnumbernote("Faux Hardware:Faux Camera:Configure Current Shutter Mask", currentmask)
		result("\n\nGetting the configurable current shutters mask = "+currentmask)
		return currentmask
	}

void   CM_GetIdleShutterState( Object camera, Number shutter_index, Number &is_closed )
	{
		number idleshuttermask
		getpersistentnumbernote("Faux Hardware:Faux Camera:Configure Idle Shutters Mask", idleshuttermask)
		if(mod(idleshuttermask,2)==0) is_closed=0 // if the last bit of the mask is off assume is_closed=0 - haven't verified this.
		else is_closed=1
		result("\n\nIdle Shutter (index = "+shutter_index+") State is : "+is_closed)
	}
      
void   CM_SetIdleShutterState( Object camera, Number shutter_index, Number  is_closed )
	{
		number idleshuttersmask
		getpersistentnumbernote("Faux Hardware:Faux Camera:Configure Idle Shutters Mask", idleshuttersmask)
		idleshuttersmask=idleshuttersmask+is_closed
		setpersistentnumbernote("Faux Hardware:Faux Camera:Configure Idle Shutters Mask", idleshuttersmask)
		result("\n\nIdle Shutter (index = "+shutter_index+") State set to : "+is_closed)
	}
      
void   CM_SetCurrentShutterState( Object camera, Number shutter_index, Number is_closed )
	{
		number currentshuttersmask
		getpersistentnumbernote("Faux Hardware:Faux Camera:Configure Current Shutter Mask", currentshuttersmask)
		currentshuttersmask=currentshuttersmask+is_closed
		setpersistentnumbernote("Faux Hardware:Faux Camera:Configure Current Shutter Mask", currentshuttersmask)
		Result("\n\nCurrent Shutter ("+shutter_index+") set to "+is_closed)
	}

Number CM_GetIdleCameraState_ShutterStates( Object self, Number shut_sel, Number &des_shut_state )
	{
		number shutterstate=11
		result("\n\nGetting the idle camera state shutter states for shutter = "+shut_sel+" as = "+shutterstate)
		return shutterstate
	}

Number CM_SetIdleCameraState_ShutterStates( Object self, Number shut_sel, Number des_shut_state )
	{
		Result("\n\nSetting the Idle Camera State Shutter State: Shutter = "+shut_sel+" State = "+des_shut_state)
		return 1
	}
      
Number CM_GetCurrentCameraState_ShutterStates( Object self, Number shut_sel, Number &des_shut_state )
	{
		number shutterstate=11
		result("\n\nGetting the current camera state shutter states for shutter = "+shut_sel+" as = "+shutterstate)
		return shutterstate
	}
      
Number CM_SetCurrentCameraState_ShutterStates( Object self, Number shut_sel, Number des_shut_state )
	{
		Result("\n\nCurrent Camera State Shutter State: Shutter = "+shut_sel+" State = "+des_shut_state)
		return 1
	}

Number CM_IsCameraRetractable( Object camera )
	{
		number is_retractable
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Retractable (0-1)", is_retractable)
		Result("\n\nCamera is retractable = "+is_retractable)
		return is_retractable
	}
      
Number CM_GetCameraInserted( Object camera )
	{
		number is_inserted
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Inserted (0-1)", is_inserted)
		Result("\n\nCamera is inserted = "+is_inserted)
		return is_inserted
	}
      
void  CM_SetCameraInserted( Object camera, Number inserted )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Inserted (0-1)", inserted)
		result("\n\nCamera insertion status set to : "+inserted)
	}

void   CM_Config_GetInsertabilityDelays( Object camera, Number &insert_delay, Number &retract_delay)
	{

		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Insertion Delay", insert_delay)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Retraction Delay", retract_delay)
		result("\n\nCamera delays: Insertion = "+insert_delay+" retraction = "+retract_delay)
	}

void   CM_Config_SetInsertabilityDelays( Object camera, Number insert_delay, Number retract_delay )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Insertion Delay", insert_delay)
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Retraction Delay", retract_delay)
		result("\n\nInsertion delay set to ="+insert_delay+" retraction delay set to ="+retract_delay)
	}
	  
Number  CM_CAMTAG_Config_GetIsInsertable( TagGroup cam_config_tags, Number &is_retractable )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Retractable (0-1)", is_retractable)
		result("\n\nCamera insertability status is : "+is_retractable)
		return 1
	}

Number  CM_CAMTAG_Config_SetIsInsertable( TagGroup cam_config_tags, Number is_retractable )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Is Retractable (0-1)", is_retractable)
		result("\n\nCamera insertability set to : "+is_retractable)
		return 1
	}

Number CM_SupportsNamedStateParameter( Object camera, String state_val_name )
	{
		result("\n\nNamed Stated value name "+state_val_name)
		return 1
	}

 Number CM_SupportsNamedHighLevelAcquisitionParameter( Object camera, String named_param )
	{
 		result("\n\nThe name high level parameter is supported : "+named_param)
		return 1
	}

  Number CM_CanSetAntiblooming( Object camera )
	  {
		number cansetantiblooming
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Can Set Antiblooming (0-1)", cansetantiblooming)
		result("\n\nCan Set Antiblooming = "+cansetantiblooming)
		return cansetantiblooming
	  }
         
Number CM_CountReadModes( Object camera )
	{
		number readmodes
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Read Modes", readmodes)
		
		// this is popup derived selections run 1,2,3 and 4 for displayed values of 0, 1, 2 and 3
		readmodes=readmodes-1
		result("\n\nCamera read modes = "+readmodes)
		return readmodes
	}
         
Number CM_GetReadModeForNamedAcquisitionStyle( Object camera, String acq_style )
	{
		result("\n\nRead mode for acquisition style '"+acq_style+"; is 0")
		return 0
	}

Number CM_CountQualityLevels( Object camera, Object acqparams )
	{
		number quallevels
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Quality Levels", quallevels)
		result("\n\nQuality levels = "+quallevels)
		return quallevels
	}

Number CM_DoesCameraNeedToBeCooled( Object camera )
	{
		result("\n\nCamera does not need to be cooled")
		return 0
	}
      
Number CM_HasTemperatureControl( Object camera )
	{
		result("\n\nCamera has temperature control.")
		return 1
	}

Number CM_GetTemperatureResolution_C( Object camera )
	{
		number tempresolution=0.1
		result("\n\nCamera temperature resolution="+tempresolution)
		return tempresolution
	}

Number CM_GetMinimumTemperature_C( object camera )
	{
		number mintemp
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Minimum Temperature", mintemp)
		result("\n\nCamera Minimum Temperature = "+mintemp+" deg C")
		return mintemp
	}

Number CM_GetMaximumTemperature_C( Object camera )
	{
		number maxtemp
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Maximum Temperature", maxtemp)
		result("\n\nCamera Maximum Temperature = "+maxtemp+" deg C")
		return maxtemp
	}
		
Number CM_GetActualTemperature_C( Object camera )
	{
		number currenttemp
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Current Temperature", currenttemp)
		result("\n\nCamera Actual Temperature = "+currenttemp+" deg C")
		return currenttemp
	}

void   CM_SetTargetTemperature_C( Object camera, Number use_target_temp, Number temp_C )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Target Temperature", temp_C)
		result("\n\nSetting target temperature to "+temp_C+" will use as target : "+use_target_temp)
	}
      
Number CM_GetTargetTemperature_C( Object camera, Number &temp_C )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Target Temperature", temp_C)
		result("\n\nTarget temperature is "+temp_C)
		return 1
	}
      
void   CM_SetStartupTemperature_C( Object camera, Number use_startup_temp, Number temp_C )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Start Up Temperature", temp_C)
		result("\n\nUse startup temp = "+use_startup_temp+" temp = "+temp_C)
	}
      
Number CM_GetStartupTemperature_C( Object camera, Number &temp_C )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Start Up Temperature", temp_C)
		result("\n\nStart up Temperature = "+temp_C)
		return temp_C
	}
      
void   CM_SetShutdownTemperature_C( Object camera, Number use_shutdown_temp, Number temp_C )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Shut Down Temperature", temp_C)
		result("\n\nShutdown temperature set to "+temp_C+" use_shutdown_temp = "+use_shutdown_temp)
	}

      
Number CM_GetShutdownTemperature_C( Object camera, Number &temp_C )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Shut Down Temperature", temp_C)
		result("\n\nShutdown temperature is "+temp_C)
		return temp_C
	}

Number CM_GetLocalTargetTemperature_C( Object camera, Number &temp_C )
	{
		number targettemp=25
		result("\n\nLocal Target temperature is "+targettemp)
		return targettemp
	}

Number CM_IsTemperatureStable( Object camera, Number &targ_temp_C )
  {
		result("\n\nTemperature is stable at "+targ_temp_C)
		return 1
  }

 Number CM_GetTemperatureMaxChangeRate( Object camera )
	 {
		 number maxchangerate=4
		 result("\n\nMaximum camera temperature change rate = "+maxchangerate)
		 return maxchangerate
	 }

void   CM_SetTemperatureMaxChangeRate( Object camera, Number maxTempChange )
	{
		result("\n\nMaximum camera temperature change rate set to "+maxtempchange)
	}

String CM_Config_GetLocationIdentifier( Object camera )
	{
		string identifier="filter"
		result("\n\nCamera Location identifier="+identifier)
		return identifier
	}

void   CM_Config_SetLocationIdentifier( Object camera, String cam_loc_ident )
	{
		result("\n\nCamera Location identifier set to : "+cam_loc_ident)
		return
	}
 
 String CM_Config_GetLocationName( Object camera )
	 {
		 string locationname
		 getpersistentstringnote("Faux Hardware:Faux Camera:Camera Name", locationname)
		 result("\n\nLocation name sourced: "+locationname)
		 return(locationname)
	 }
      
String CM_Config_GetShutterSiteIdentifier( Object camera, number shut_idx )
	{
		string identifier="Pre-specimen"
		result("\n\nShutter index = "+shut_idx+" Identifier = "+identifier)
		return identifier
	}

void   CM_Config_SetShutterSiteIdentifier( Object camera, number shut_idx, String shut_site_ident )
	{
		string shuttersiteid="Post-specimen"
		result("\n\nSetting shutter site identifier: ID = "+shuttersiteid+" Shutter Index = "+shut_idx)
		return
	}

Number CM_CountCameraModes( Object cam_mgr, Object camera )
	{
		number cameramodes
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Read Modes", cameramodes)
		
		// Read modes is a popup menu selections run 1, 2, 3 and 4 and correspond
		// to the displayed values of 0,1, 2, and 3
		
		cameramodes=cameramodes-1
		result("\n\nCounting camera modes as = "+cameramodes)
		return cameramodes
	}

Number CM_GetCurrentCameraModeIndex( Object cam_mgr, Object camera )
	{
		number cammodeindex
		getpersistentnumbernote("Faux Hardware:Faux Camera:Current CCD Read Mode", cammodeindex)
		result("\n\nSourcing current camera mode index as = "+cammodeindex)
		return cammodeindex
	}

Object CM_GetCameraModeByIndex( Object cam_mgr, Object camera, Number idx )
	{
		result("\n\nPassed in camera mode index = "+idx)
		object cammode
		return cammode
	}
      

Object CM_GetCurrentCameraMode( Object cam_mgr, Object camera )
	{
		result("\n\nGetting the current camera mode object.")
		object cammode
		return cammode
	}
      
void CM_SetCurrentCameraModeByIndex( Object cam_mgr, Object camera, Number new_cam_mode_idx )
	{
		result("\n\nSetting current camera mode by index = "+new_cam_mode_idx)
		return
	}

Object CM_GetCameraAcquisitionParameterSet_LowQualityImagingView( Object camera )
	{
		result("\n\nGetting camera Acquisition parameter set - low quality imaging view.")
		object camacqset
		return camacqset
	}

Object CM_GetCameraAcquisitionParameterSet_MediumQualityImagingView( Object camera )
	{
		result("\n\nGetting camera Acquisition parameter set - medium quality imaging view.")
		object camacqset
		return camacqset
	}

Object CM_GetCameraAcquisitionParameterSet_HighQualityImagingView( Object camera )
	{
		result("\n\nGetting camera Acquisition parameter set - high quality imaging view.")
		object camacqset
		return camacqset
	}

Object CM_GetCameraAcquisitionParameterSet_LowQualityImagingAcquire( Object camera )
	{
		result("\n\nGetting camera Acquisition parameter set - low quality imaging acquire.")
		object camacqset
		return camacqset
	}

Object CM_GetCameraAcquisitionParameterSet_MediumQualityImagingAcquire( Object camera )
	{
		result("\n\nGetting camera Acquisition parameter set - medium quality imaging acquire.")
		object camacqset
		return camacqset
	}

Object CM_GetCameraAcquisitionParameterSet_HighQualityImagingAcquire( Object camera )
	{
		result("\n\nGetting camera Acquisition parameter set - high quality imaging acquire.")
		object camacqset
		return camacqset
	}

Object CM_CreateAcquisitionParameters(  object camera,  number processing,  number exposure,  number binningx, number binningy ,number top ,number left ,number bottom ,number right )
	{
		result("\n\nCreating acquistion parameters:\nProcessing="+processing+" exposure="+exposure+"\nBinning X = "+binningx+" Binning Y = "+binningy+"\nTop="+top+" Left="+left+" Bottom="+bottom+" Right="+right)
		object acqparams
		return acqparams
	}

Object CM_CreateAcquisitionParameters_FullCCD( Object camera, Number processing, Number exposure, Number binningx, Number binningy )
	{
		result("\n\nCreating acquistion parameters:\nProcessing="+processing+" exposure="+exposure+"\nBinning X = "+binningx+" Binning Y = "+binningy+" for full CCD")
		object acqparams
		return acqparams
	}

Object CM_GetCameraAcquisitionParameterSet( Object camera, String mode_name, String style_name, String param_set_name, Number do_create )
	{
		result("\n\nGetting acquisition parameter set : Mode = "+mode_name+"  Style = "+style_name+"  Parameter Set Name = "+param_set_name+"  Create if not extant = "+do_create)
		object acqparams
		return acqparams
	}

void   CM_LoadCameraAcquisitionParameterSet( Object camera, Object acq_params )
	{
		result("\n\nLoading Acquisition Parameter Set.")
		return
	}

void   CM_SaveCameraAcquisitionParameterSet( Object camera, Object acq_params )
	{
		result("\n\nSaving Acquisition Parameter Set.")
		return
	}
	
number CM_GetReadMode(object acqparams)
	{
		number readmode
		getpersistentnumbernote("Faux Hardware:Faux Camera:Current CCD Read Mode", readmode)
		result("\n\nRead mode is = "+readmode)
		return readmode
	}


void   CM_SetReadMode( Object acqparams, Number readmode )
	{
		if(readmode<0) readmode=0
		if(readmode>3) readmode=3
		setpersistentnumbernote("Faux Hardware:Faux Camera:Current CCD Read Mode", readmode)
		result("\n\nSetting read mode to = "+readmode)
	}

Number CM_GetExposure( Object acq_params )
	{
		number exposure
		getpersistentnumbernote("Faux Hardware:Faux Camera:Exposure Time", exposure)
		result("\n\nGetting Exposure as = "+exposure)
		return exposure
	}

 void   CM_SetExposure( Object acqparams, Number exposure )
	 {
	 	setpersistentnumbernote("Faux Hardware:Faux Camera:Exposure Time", exposure)
		result("\n\nSetting exposure as "+exposure)
	 }

void   CM_GetBinning( Object acqparams, Number &binningx, Number &binningy )
	{
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning X", binningx)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning Y", binningy)
		
		// Popup menus have numerical values 1, 2, 3 and 4. The binning values 
		// correspond to 1, 2, 4 and 8 
		
		if(binningx=4) binningx=8
		if(binningy=4) binningy=8

		if(binningx==3) binningx=4
		if(binningy==3) binningy=4
		
		result("\n\nSourcing Binning x as = "+binningx+" and Binning y as = "+binningy)
	}
         
void   CM_SetBinning( object acqparams, Number  binningx, Number  binningy )
	{
		// Popup menus have numerical values 1, 2, 3 and 4. The binning values 
		// correspond to 1, 2, 4 and 8 
		
		// here a binning value is entered and it is converted to a popup
		// numerical value

		if(binningx<1) binningx=1
		if(binningy<1) binningy=1
		if(binningx>8) binningx=8
		if(binningy>8) binningy=8
		
		if(binningx==8) binningx=4
		if(binningy==8) binningy=4
		
		if(binningx==4) binningx=3
		if(binningy==4) binningy=4

		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning X", binningx)
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Binning Y", binningy)
		result("\n\nSetting Binning x as = "+binningx+" and Binning y as = "+binningy)
	}

 void   CM_GetCCDReadArea( Object acqparams, Number &top, Number &left, Number &bottom, Number &right )
	 {
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Top", top)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Left", left)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Bottom", bottom)
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Right", right)
		result("\n\nGetting CCD Read Area t = "+top+" l = "+left+" b = "+bottom+" r = "+right)
	 }

void   CM_SetCCDReadArea( Object acqparams, Number  top, Number  left, Number  bottom, Number  right )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Top", top)
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Left", left)
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Bottom", bottom)
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Right", right)
		 result("\n\nSetting CCD Read Area t = "+top+" l = "+left+" b = "+bottom+" r = "+right)
	}

 void   CM_GetBinnedReadArea( Object camera, Object acq_params, Number &bin_area_t, Number &bin_area_l, Number &bin_area_b, Number &bin_area_r )
	 {
		 bin_area_t=0
		 bin_area_l=0
		 bin_area_b=1024
		 bin_area_r=2340
		 result("\n\nGetting Binned Read Area   t = "+bin_area_t+" l = "+bin_area_l+" b = "+bin_area_b+" r = "+bin_area_r)
	 }

 void   CM_SetBinnedReadArea( Object camera, Object acq_params, Number bin_area_t, Number bin_area_l, Number bin_area_b, Number bin_area_r )
	{
		 result("\n\nSetting Binned Read Area   t = "+bin_area_t+" l = "+bin_area_l+" b = "+bin_area_b+" r = "+bin_area_r)
	}

void   CM_SetProcessing( Object acqparams, Number processing )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Processing (0-3)", processing)
		result("\n\nSetting processing = "+processing)
	}

Number CM_GetProcessing( Object acqparams )
	{
		number processing
		setpersistentnumbernote("Faux Hardware:Faux Camera:Processing (0-3)", processing)
		result("\n\nSetting processing = "+processing)
		return processing
	}

Number CM_GetCorrections( Object acqparams, Number corr_mask )
	{
		number corrections=1
		result("\n\nGetting Corrections bith corrections mask = "+corr_mask)
		return corrections
	}

 void  CM_SetCorrections( Object acqparams, Number corr_mask, Number corrections )
	 {
		 result("\n\nSetting corrections as = "+corrections+" using corrections mask = "+corr_mask)
	 }

Number CM_GetDoContinuousReadout( Object acqparams )
	{
		number contreadout=1
		result("\n\nGetting Do Continuous Readout as = "+contreadout)
		return contreadout
	}

void   CM_SetDoContinuousReadout( Object acqparams, Number dcr )
	{
		result("\n\nSetting do continuous readout as = "+dcr)
	}

void   CM_SetStandardParameters( Object acq_params, Number processing, Number exposure, Number binningx, Number binningy, Number ccd_area_t, Number ccd_area_l, Number ccd_area_b, Number ccd_area_r )
	{
		result("\n\nSetting standard parameters as :\nProcessing = "+processing+"\nExposure = "+exposure+"\nBinning x = "+binningx+" Binning y = "+binningy)
		result("\nTop = "+ccd_area_t+"\nLeft = "+ccd_area_l+"\nBottom = "+ccd_area_b+"\nRight = "+ccd_area_r)
	}

 void   CM_SetStandardParameters_Dst( Object camera, Object acq_params, Number processing, Number exposure, Number bin_x_dst, Number bin_y_dst, Number bin_area_t, Number bin_area_l, Number bin_area_b, Number bin_area_r )
	{
		result("\n\nSetting standard parameters_DST as :\nProcessing = "+processing+"\nExposure = "+exposure+"\nBinning x = "+bin_x_dst+" Binning y = "+bin_y_dst)
		result("\nTop = "+bin_area_t+"\nLeft = "+bin_area_l+"\nBottom = "+bin_area_b+"\nRight = "+bin_area_r)
	}


Number CM_GetDoAntiblooming( Object acqparams )
	{
		number antiblooming
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Can Set Antiblooming (0-1)", antiblooming)
		result("\n\nGetting Do Antiblooming as = "+antiblooming)
		return antiblooming
	}

void   CM_SetDoAntiblooming( Object acqparams, Number do_antiblooming )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Can Set Antiblooming (0-1)", do_antiblooming)
		result("\n\nSetting Do Antiblooming as = "+do_antiblooming)
	}

Number CM_GetShutterExposure( Object acqparams )
	{
		number shutterexposure
		getpersistentnumbernote("Faux Hardware:Faux Camera:Exposure Time", shutterexposure)
		result("\n\nGetting shutter exposure as = "+shutterexposure)
		return shutterexposure
	}
	
void   CM_SetShutterExposure( Object acqparams, Number do_shutter_exposure )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Exposure Time", do_shutter_exposure)
		result("\n\nSetting shutter exposure as = "+do_shutter_exposure)
	}

void CM_GetChooseNumFrameShuttersAutomatically( Object acqparams, Number &choose )
	{
		choose=1
		result("\n\nSetting the NumFrameShuttersAutomatically to = "+choose)
	}

void CM_SetChooseNumFrameShuttersAutomatically( Object acqparams, Number choose )
	{
		result("\n\nSetting the Choose Frame Shutters Automatically variable as = "+choose)
	}

void CM_GetNumFrameShutters( Object acqparams, Number &num_shut )
	{
		num_shut=3
		result("\n\nGetting the number of frame shutters to open/close during a readout as = "+num_shut)
	}

void CM_SetNumFrameShutters( Object acqparams, Number num_shut )
	{
		result("\n\nSetting the number of frame shutters to open/close during a readout as = "+num_shut)
	}

void CM_GetPrimaryFrameShutterIndex( Object acqparams, Number &index )
	{
		index=2
		result("\n\nGetting the primary frame shutter index as = "+index)
	}

void CM_SetPrimaryFrameShutterIndex( Object acqparams, Number index )
	{
		result("\n\nSetting the primary frame shutter index as = "+index)
	}

Number CM_GetShutterClosedBetweenFrames( Object acqparams )
	{
		number shut_closed_between_frames=1
		result("\n\nGetting the shutter closed between frames variable as = "+shut_closed_between_frames)
		return shut_closed_between_frames=1
	}

void   CM_SetShutterClosedBetweenFrames( Object acqparams, Number is_closed )
	{
		result("\n\nSetting shutter to be closed betwen frames as = "+is_closed)
	}

void CM_GetPrimaryShutterPreExposureCompensation_s( Object acqparams, Number &exp_comp_s )
	{
		exp_comp_s= 0.4
		result("\n\nGetting primary shutter pre-exposure compensation as = "+exp_comp_s)
	}

void CM_SetPrimaryShutterPreExposureCompensation_s( Object acqparams, Number  exp_comp_s )
	{
		result("\n\nSetting primary shutter pre-exposure compensation as = "+exp_comp_s)
	}

void CM_GetPrimaryShutterPostExposureCompensation_s( Object acqparams, Number &exp_comp_s )
	{
		exp_comp_s=0.8
		result("\n\nGetting primary shutter post-exposure compensation as = "+exp_comp_s)
	}

void CM_SetPrimaryShutterPostExposureCompensation_s( object acqparams,  number exp_comp_s )
	{
		result("\n\nSetting primary shutter post-exposure compensation as = "+exp_comp_s)
	}
	
void CM_GetSecondaryShutterPreExposureCompensation_s( Object acqparams, Number &exp_comp_s )
	{
		exp_comp_s= 0.4
		result("\n\nGetting secondary shutter pre-exposure compensation as = "+exp_comp_s)
	}

void CM_SetSecondaryShutterPreExposureCompensation_s( Object acqparams, Number  exp_comp_s )
	{
		result("\n\nSetting secondary shutter pre-exposure compensation as = "+exp_comp_s)
	}

void CM_GetSecondaryShutterPostExposureCompensation_s( Object acqparams, Number &exp_comp_s )
	{
		exp_comp_s=0.8
		result("\n\nGetting secondary shutter post-exposure compensation as = "+exp_comp_s)
	}

void CM_SetSecondaryShutterPostExposureCompensation_s( object acqparams,  number exp_comp_s )
	{
		result("\n\nSetting secondary shutter post-exposure compensation as = "+exp_comp_s)
	}
   
Number CM_GetQualityLevel( Object acqparams )
	{
		number quallevel
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Quality Level", quallevel)
		result("\n\nGetting the quality level as = "+quallevel)
		return quallevel
	}

void   CM_SetQualityLevel( Object acqparams, Number level )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Quality Level", level)
		result("\n\nSetting the quality level to = "+level)
	}

Number CM_GetAcqTranspose( Object acqparams )
	{
		number acqtranspose
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Transpose (0-1)", acqtranspose)
		result("\n\nGetting the acquisition transpose variable as = "+acqtranspose)
		return acqtranspose
	}

void   CM_SetAcqTranspose( Object acqparams, Number transpose )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Transpose (0-1)", transpose)
		result("\n\nSetting the acquisition transpose variable as = "+transpose)
	}

void   CM_SetNumberToSum( Object acq_params, Number num )
	{
		result("\n\nSetting number of images to sum as = "+num)
	}

Number CM_GetNumberToSum( Object acqparams )
	{
		number numtosum=6
		result("\n\nGetting number of images to sum as = "+numtosum)
		return numtosum
	}

void   CM_SetAutoExpose( Object camera, Object acq_params, Number has_auto_expose, number do_auto_expose )
	{
		result("\n\nSetting auto exposure to = "+do_auto_expose+" wtith 'has_auto_expose' variable = "+has_auto_expose)
	}

number CM_IsAutoExposeOn( Object camera, Object acqparams )
	{
		number autoexpose_is_on=1
		result("\n\nSourcing 'is auto expose on' variable as = "+autoexpose_is_on)
		return autoexpose_is_on
	}

 Number CM_Validate_AcquisitionParameters( Object camera, Object acqparams )
	 {
		 number isvalid=1
		 result("\n\nChecking if acquisition parameters are valid as = "+isvalid)
		 result("\nParameters are valid and will not be changed.")
		 return isvalid
	 }

Number CM_IsValid_AcquisitionParameters( Object camera, Object acqparams )
	 {
		 number isvalid=1
		 result("\n\nChecking if acquisition parameters are valid.")
		 return isvalid
	 }

Number CM_PrepareCameraForAcquire( Object cameramanager, Object camera, Object acqparams, Object user_interact, Number &wait_for_prepare )
	{
		wait_for_prepare=0.25
		result("\n\nPreparing camera for acquisition. Estimated time to prepare it is = "+wait_for_prepare+" s")
		number somethingwaschanged=0
		result("\nNeed to change anything to make the acquisition happen = "+somethingwaschanged+"\n")
		return somethingwaschanged
	}

void   CM_CameraCalcImageForm( Object camera, Object acqparams, Number &data_type, Number &width, Number &height )
	{
		data_type=4
		width=1024
		height=1024
		result("\n\nCalculating image paramters from acquisition parameters. Data Type = "+data_type+" Width = "+width+" Height = "+height)
	}

Image  CM_CreateImageForAcquire( Object camera, Object acq_params, String name )
	{
		result("\n\nCreating an image called '"+name+"' using CM_CreateImageForAcquire().")
		image myimage:=realimage(name,4,256,256)
		return myimage
	}

  
Image  CM_AcquireImage( Object camera, Object acqparams )
	{
		result("\n\nAcquiring an image using CM_AcquireImage().")
		image temp:=realimage("Acq Image",4,512,512)
		temp=sin(icol/16)+cos(irow/16)
		return temp
	}

 void   CM_AcquireImage( Object camera, Object acq_params, Image img )
	 {
		 number xsize, ysize
		 getsize(img, xsize, ysize)
		 result("\n\nAcquiring image using CM_AcquireImage() - result placed into passed in image of size : x = "+xsize+" y = "+ysize)
		 image acqimage=realimage("", 4, xsize, ysize)
		 acqimage=sin(icol/16)+cos(irow/16)
		 img:=acqimage
	 }

void   CM_AcquireDarkReference( Object camera, Object acq_params, Image img, Object frame_set_info )
	{
		result("\n\nAcquiring a dark reference using 'CM_AcquireDarkReference' and placing it in the passed in image.")
		number xsize, ysize
		getsize(img, xsize, ysize)
		img=(random()*150)-(random()*100)
	}

Object CM_CreateAcquisition( Object camera, Object acqparams )
	{
		result("\n\nCreate an acquisition object.")
		object acqobject
		return acqobject
	}
	
void ACQ_StartAcquire( Object myacquisition )
	{
		result("\n\nStarting an acquisition the passed in acquisition object.")
	}

void ACQ_StopAcquire( Object acquisition  )
	{
		result("\n\nStopping an acquisition the passed in acquisition object.")
	}

void ACQ_ChangeAcquire( Object acquisition,  Object acqparams )
	{
		result("\n\nChanging the acquisition parameters based on the acquisition object.")
	}

void DoAcquire_LL( Object acquisition , Object acquisition_listener, Image img, Object frame_info )
	{
		Result("\n\nDoing a low level acquire and returning the next available frame from the camera.")
		img=cos(icol)+sin(irow)
	}

Object CM_StartCameraViewer( Object camera, Object acq_params, Number do_save_changed_parameters, Number prepare_camera )
	{
		result("\n\nStarting camera viewer.")
		object camviewerobject
		return camviewerobject
	}

Object CM_StopCurrentCameraViewer( Number close_view )
	{
		result("\n\nStopping current camera viewer.")
		object cameraviewer
		return cameraviewer
	}

Object CM_GetCurrentCameraViewer()
	{
		result("\n\nGetting current camera viewer.")
		object camviewer
		return camviewer
	}

Object CM_RestartCameraViewerFromImage( Image img, Number open_new_window )
	{
		result("\n\nRestarting camera viewer from its image, with open new window variable = "+open_new_window)
		object camviewer
		return camviewer
	}


Number CM_GetSettling( Object acqparams )
	{
		number settlingtime
		getpersistentnumbernote("Faux Hardware:Faux Camera:CCD Settling Time", settlingtime)
		result("\n\nGetting settling time in seconds as = "+settlingtime)
		return settlingtime
	}

void CM_SetSettling( Object acqparams, Number settling )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:CCD Settling Time)", settling)
		result("\n\nSetting settling time in seconds as = "+settling)
	}

Number CM_GetShutterIndex( Object acqparams )
	{
		number shutterindex
		getpersistentnumbernote("Faux Hardware:Faux Camera:Shutter Index", shutterindex)
		result("\n\nGetting shutter index as = "+shutterindex)
		return shutterindex
	}

void   CM_SetShutterIndex( Object acqparams, Number index )
	{
		setpersistentnumbernote("Faux Hardware:Faux Camera:Shutter Index", index)
		result("\n\nSetting shutter index as = "+index)
	}


