'!TITLE "CameraSetting"

Public lCameraID as long
Public CAMFMT_PRMS(9) as long
Public CAMFPS_PRMS(9) as long

#define	ID_CAMCTRL_PAN		0
#define	ID_CAMCTRL_TILT		1
#define	ID_CAMCTRL_ROLL		2
#define	ID_CAMCTRL_ZOOM		3
#define	ID_CAMCTRL_EXPOSURE	4
#define	ID_CAMCTRL_IRIS		5
#define	ID_CAMCTRL_FOCUS	6

Public CAMCTRL_PRMS(6) as long
Public CAMCTRL_FLGS(6) as long

#define ID_VIDEOPROCAMP_BRIGHTNESS	0
#define ID_VIDEOPROCAMP_CONTRAST	1
#define ID_VIDEOPROCAMP_HUE		2
#define ID_VIDEOPROCAMP_SATURATION	3
#define ID_VIDEOPROCAMP_SHARPNESS	4
#define ID_VIDEOPROCAMP_GAMMA		5
#define ID_VIDEOPROCAMP_COLORENABLE	6
#define ID_VIDEOPROCAMP_WHITEBALANCE	7
#define ID_VIDEOPROCAMP_BACKLIGHT	8
#define ID_VIDEOPROCAMP_GAIN		9

Public VIDEOPROCAMP_PRMS(9) as long
Public VIDEOPROCAMP_FLGS(9) as long


Sub Main()
	
	Dim vntRet as Variant
	Dim caoOCVCtrl as Object
	Dim caoCameraVal as Object

	caoOCVCtrl = cao.AddController("OCV", "caoProv.OpenCV", "", "@IfNotMember=True")

	' Check Camera
	caoCameraVal = caoOCVCtrl.AddVariable("@CAM_COUNT", "@IfNotMember=True")
	If(caoCameraVal.Value = 0) Then
		Debug.Print "No Camera"
		Exit Sub
	End If

	' ------------------------  Camera Control ----------------------------------------------------------------------------
	If CtrlExecute(caoOCVCtrl, "GetRangeCameraCtrl", Array(lCameraID, ID_CAMCTRL_PAN), vntRet) Then
		If vntRet(0) <= CAMCTRL_PRMS(ID_CAMCTRL_PAN) And vntRet(1) >= CAMCTRL_PRMS(ID_CAMCTRL_PAN) Then
			If Not CtrlExecute(caoOCVCtrl, "SetCameraCtrl", Array(lCameraID, ID_CAMCTRL_PAN, CAMCTRL_PRMS(ID_CAMCTRL_PAN), CAMCTRL_FLGS(ID_CAMCTRL_PAN)), vntRet) Then
				Debug.Print "ID_CAMCTRL_PAN Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeCameraCtrl", Array(lCameraID, ID_CAMCTRL_TILT), vntRet) Then
		If vntRet(0) <= CAMCTRL_PRMS(ID_CAMCTRL_TILT) And vntRet(1) >= CAMCTRL_PRMS(ID_CAMCTRL_TILT) Then
			If Not CtrlExecute(caoOCVCtrl, "SetCameraCtrl", Array(lCameraID, ID_CAMCTRL_TILT, CAMCTRL_PRMS(ID_CAMCTRL_TILT), CAMCTRL_FLGS(ID_CAMCTRL_TILT)), vntRet) Then
				Debug.Print "ID_CAMCTRL_TILT Set Failed"
			End If
		End If
	End If
	
	If CtrlExecute(caoOCVCtrl, "GetRangeCameraCtrl", Array(lCameraID, ID_CAMCTRL_ROLL), vntRet) Then
		If vntRet(0) <= CAMCTRL_PRMS(ID_CAMCTRL_ROLL) And vntRet(1) >= CAMCTRL_PRMS(ID_CAMCTRL_ROLL) Then
			If Not CtrlExecute(caoOCVCtrl, "SetCameraCtrl", Array(lCameraID, ID_CAMCTRL_ROLL, CAMCTRL_PRMS(ID_CAMCTRL_ROLL), CAMCTRL_FLGS(ID_CAMCTRL_ROLL)), vntRet) Then
				Debug.Print "ID_CAMCTRL_ROLL Set Failed"
			End If
		End If
	End If
	
	If CtrlExecute(caoOCVCtrl, "GetRangeCameraCtrl", Array(lCameraID, ID_CAMCTRL_ZOOM), vntRet) Then
		If vntRet(0) <= CAMCTRL_PRMS(ID_CAMCTRL_ZOOM) And vntRet(1) >= CAMCTRL_PRMS(ID_CAMCTRL_ZOOM) Then
			If Not CtrlExecute(caoOCVCtrl, "SetCameraCtrl", Array(lCameraID, ID_CAMCTRL_ZOOM, CAMCTRL_PRMS(ID_CAMCTRL_ZOOM), CAMCTRL_FLGS(ID_CAMCTRL_ZOOM)), vntRet) Then
				Debug.Print "ID_CAMCTRL_ZOOM Set Failed"
			End If
		End If
	End If
	
	If CtrlExecute(caoOCVCtrl, "GetRangeCameraCtrl", Array(lCameraID, ID_CAMCTRL_EXPOSURE), vntRet) Then
		If vntRet(0) <= CAMCTRL_PRMS(ID_CAMCTRL_EXPOSURE) And vntRet(1) >= CAMCTRL_PRMS(ID_CAMCTRL_EXPOSURE) Then
			If Not CtrlExecute(caoOCVCtrl, "SetCameraCtrl", Array(lCameraID, ID_CAMCTRL_EXPOSURE, CAMCTRL_PRMS(ID_CAMCTRL_EXPOSURE), CAMCTRL_FLGS(ID_CAMCTRL_EXPOSURE)), vntRet) Then
				Debug.Print "ID_CAMCTRL_EXPOSURE Set Failed"
			End If
		End If
	End If
	
	If CtrlExecute(caoOCVCtrl, "GetRangeCameraCtrl", Array(lCameraID, ID_CAMCTRL_IRIS), vntRet) Then
		If vntRet(0) <= CAMCTRL_PRMS(ID_CAMCTRL_IRIS) And vntRet(1) >= CAMCTRL_PRMS(ID_CAMCTRL_IRIS) Then
			If Not CtrlExecute(caoOCVCtrl, "SetCameraCtrl", Array(lCameraID, ID_CAMCTRL_IRIS, CAMCTRL_PRMS(ID_CAMCTRL_IRIS), CAMCTRL_FLGS(ID_CAMCTRL_IRIS)), vntRet) Then
				Debug.Print "ID_CAMCTRL_IRIS Set Failed"
			End If
		End If
	End If
	
	If CtrlExecute(caoOCVCtrl, "GetRangeCameraCtrl", Array(lCameraID, ID_CAMCTRL_FOCUS), vntRet) Then
		If vntRet(0) <= CAMCTRL_PRMS(ID_CAMCTRL_FOCUS) And vntRet(1) >= CAMCTRL_PRMS(ID_CAMCTRL_FOCUS) Then
			If Not CtrlExecute(caoOCVCtrl, "SetCameraCtrl", Array(lCameraID, ID_CAMCTRL_FOCUS, CAMCTRL_PRMS(ID_CAMCTRL_FOCUS), CAMCTRL_FLGS(ID_CAMCTRL_FOCUS)), vntRet) Then
				Debug.Print "ID_CAMCTRL_FOCUS Set Failed"
			End If
		End If
	End If


	' ------------------------  VideoProcAmp ----------------------------------------------------------------------------
	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_BRIGHTNESS), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_BRIGHTNESS) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_BRIGHTNESS) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_BRIGHTNESS, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_BRIGHTNESS), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_BRIGHTNESS)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_BRIGHTNESS Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_CONTRAST), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_CONTRAST) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_CONTRAST) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_CONTRAST, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_CONTRAST), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_CONTRAST)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_CONTRAST Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_HUE), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_HUE) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_HUE) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_HUE, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_HUE), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_HUE)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_HUE Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_SATURATION), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_SATURATION) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_SATURATION) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_SATURATION, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_SATURATION), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_SATURATION)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_SATURATION Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_SHARPNESS), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_SHARPNESS) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_SHARPNESS) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_SHARPNESS, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_SHARPNESS), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_SHARPNESS)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_SHARPNESS Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_GAMMA), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_GAMMA) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_GAMMA) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_GAMMA, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_GAMMA), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_GAMMA)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_GAMMA Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_COLORENABLE), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_COLORENABLE) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_COLORENABLE) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_COLORENABLE, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_COLORENABLE), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_COLORENABLE)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_COLORENABLE Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_WHITEBALANCE), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_WHITEBALANCE) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_WHITEBALANCE) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_WHITEBALANCE, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_WHITEBALANCE), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_WHITEBALANCE)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_WHITEBALANCE Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_BACKLIGHT), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_BACKLIGHT) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_BACKLIGHT) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_BACKLIGHT, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_BACKLIGHT), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_BACKLIGHT)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_BACKLIGHT Set Failed"
			End If
		End If
	End If

	If CtrlExecute(caoOCVCtrl, "GetRangeVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_GAIN), vntRet) Then
		If vntRet(0) <= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_GAIN) And vntRet(1) >= VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_GAIN) Then
			If Not CtrlExecute(caoOCVCtrl, "SetVideoProcAmp", Array(lCameraID, ID_VIDEOPROCAMP_GAIN, VIDEOPROCAMP_PRMS(ID_VIDEOPROCAMP_GAIN), VIDEOPROCAMP_FLGS(ID_VIDEOPROCAMP_GAIN)), vntRet) Then
				Debug.Print "ID_VIDEOPROCAMP_GAIN Set Failed"
			End If
		End If
	End If
	
	' ------------------------  CameraFormat ----------------------------------------------------------------------------
	If Not  CtrlExecute(caoOCVCtrl, "SetCameraFormat", Array(lCameraID, CAMFMT_PRMS(lCameraID-1)), vntRet) Then
		Debug.Print "CAMFMT_PRMS Set Failed"
	End If
	
	If Not  CtrlExecute(caoOCVCtrl, "SetCameraFrameRate", Array(lCameraID, CAMFPS_PRMS(lCameraID-1)), vntRet) Then
		Debug.Print "CAMFPS_PRMS Set Failed"
	End If

End Sub


Function CtrlExecute(ByVal oCtrl as Object, ByVal bstrCommand As String, ByVal vntParam As Variant, vntRet As Variant) As Long
    On Error GoTo ErrorProc
    
    vntRet = oCtrl.Execute(bstrCommand, vntParam)
    CtrlExecute = TRUE
    Exit Function
ErrorProc:
    CtrlExecute = FALSE
End Function

