I would do as SpireJeff suggested and create a queue to hold your string commands from button pushes. After the button push & string is added to queue connect to the camera. The camera will connect & you'll recieve an online event which you can use to check your queue for content & if content exists remove the 1st command in queue & send it. The camera will close the connection iniate an offline event & you can check the queus for further commands. If there are any reconnenct & repeat the process until the queue is empty.
ooops..... i was not using the authentication in my code and the camera needed authentication.
but how do i include the camera authentication. in my code
posting another silly question which i cant figure it out....
if you look at my code case 5 & 6. is it the rite way to zoom in and out..
i tried bu nothiin is happening... i tried storing it in another variable. the datatype i used was integer.. caould someone tell me wat the oprob is...
This may be hard to follow since I pass the user : pass (no spaces) into the module as a variable & it would be simpler to leave as a constant. Basically paste the base64 function into your code and call the function w/ 'user : pass' (no spcaes) as the parameter. The function call is in the "GET" string being sent to the camera posted earlier. I've included the relavent parts & pieces so you can try yo follow how I'm doing it.
DEFINE_CONSTANT //USER NAME & PASSWORD FOR EACH CAMERA !!<-NEED TO CUSTOMIZE THIS TO PROJECT->!!
(*(VAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV)*)
(*(VAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV)*)
(*>) (<*)
(*>) !! USE THE SAME USERNAME & PASSWORD FOR ALL CAMERAS !! (<*)
(*>) --> BUT IN CASE YOU CAN'T HERE'S AN ARRAY TO USE <-- (<*)
(*>) (<*)
(*>) If all cameras use the same username & password just put that in position 1 and it (<*)
(*>) will get used for all cameras. If you have even 1 camera with a different user name (<*)
(*>) & passowrd then you must fill out each username & password entry for each camera that (<*)
(*>) is going to be controlled by this module. (<*)
(*>) (<*)
(**)VOLATILE CHAR AXISCAM_USERNAME_PASSWORD[AXIS_NUM_CAMERAS][20] =
(**)
(**) {//1234567890123456789012345 username:password
(**) (*1 *)'user:pass' (*,,
(**) (*2 *)'Camera_2',
(**) (*3 *)'Camera_3',
(**) (*4 *)'Camera_4',
(**) (*5 *)'Camera_5',
(**) (*6 *)'Camera_6',
(**) (*7 *)'Camera_7',
(**) (*8 *)'Camera_8',
(**) (*9 *)'Camera_9',
(**) (*10*)'Camera_10',
(**) (*11*)'Camera_11',
(**) (*12*)'Camera_12',
(**) (*13*)'Camera_13',
(**) (*14*)'Camera_14',
(**) (*15*)'Camera_15',
(**) (*16*)'Camera_16',
(**) (*17*)'Camera_17',
(**) (*18*)'Camera_18' ,
(**) (*19*)'Camera_19',
(**) (*20*)'Camera_20' *)
(**) } ;
(**)
(*^) YOU CAN LEAVE UN USED INPUTS AS '' OR LEAVE NAMES (^*)
(*^) OR YOU CAN SHORTEN THE ARRAY TO SAVE MEMORY (^*)
(*^) (^*)
(*(VAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV)*)
(*(VAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV)*)
DEFINE_VARIABLE //
VOLATILE CHAR cAxisCam_UserPass[AXIS_NUM_CAMERAS][20] ; //ip address for each axis camera
DEFINE_FUNCTION CHAR[ENCR_MAX_ENC_LEN] fnEncrBase64Encode(CHAR cDecStr[])
{
STACK_VAR
CHAR cDecodeStr[ENCR_MAX_DEC_LEN] ;
CHAR cEncodeStr[ENCR_MAX_ENC_LEN] ;
INTEGER nLoop ;
INTEGER nTemp ;
CHAR cIdx1 ;
CHAR cIdx2 ;
CHAR cIdx3 ;
CHAR cIdx4 ;
CHAR cByte1 ;
CHAR cByte2 ;
CHAR cByte3 ;
CHAR cChar1 ;
CHAR cChar2 ;
CHAR cChar3 ;
CHAR cChar4 ;
// Copy string and pad
cDecodeStr = cDecStr
nTemp = LENGTH_STRING(cDecodeStr) % 3
If (nTemp <> 0)
{
cDecodeStr[LENGTH_STRING(cDecodeStr)+1] = 0 ;
cDecodeStr[LENGTH_STRING(cDecodeStr)+2] = 0 ;
cDecodeStr[LENGTH_STRING(cDecodeStr)+3] = 0 ;
}
// Encode
FOR (cEncodeStr = "", nLoop = 1; nLoop <= LENGTH_STRING(cDecodeStr); nLoop = nLoop + 3)
{// Get bytes
cByte1 = cDecodeStr[nLoop] ;
cByte2 = cDecodeStr[nLoop+1] ;
cByte3 = cDecodeStr[nLoop+2] ;
// Get index
cIdx1 = TYPE_CAST(((cByte1 & $FC) >> 2) + 1) ;
cIdx2 = TYPE_CAST((((cByte2 & $F0) >> 4) | ((cByte1 & $03) << 4)) + 1) ;
cIdx3 = TYPE_CAST((((cByte3 & $C0) >> 6) | ((cByte2 & $0F) << 2)) + 1) ;
cIdx4 = TYPE_CAST( (cByte3 & $3F) + 1) ;
// Get chars
cChar1 = cEncrBase64[cIdx1] ;
cChar2 = cEncrBase64[cIdx2] ;
cChar3 = cEncrBase64[cIdx3] ;
cChar4 = cEncrBase64[cIdx4] ;
// Pad?
If (LENGTH_STRING(cDecodeStr) < (nLoop+1))
{
cChar3 = $3D ;// '='
}
If (LENGTH_STRING(cDecodeStr) < (nLoop+2))
{
cChar4 = $3D ;// '='
}
// Build string
cEncodeStr = "cEncodeStr, cChar1, cChar2, cChar3, cChar4" ;
}
RETURN cEncodeStr ;
}
DEFINE_FUNCTION CHAR[ENCR_MAX_ENC_LEN] fnAxisEncryptUserPass()
{
RETURN fnEncrBase64Encode(cAXISCAM_USER_PASS) ;
}
DEFINE_START //INITIALIZE/LOAD cAxisCam_IP_Address[], cAxisCam_UserPass[] & nAxisCam[] ARRAYS WITH VALUES
{
STACK_VAR INTEGER i ;
STACK_VAR INTEGER x ;
STACK_VAR INTEGER nArryLen ;
nArryLen = length_array(AXISCAM_USERNAME_PASSWORD) ;
for(i = 1 ; i <= AXIS_NUM_CAMERAS ; i ++)
{
cAxisCam_IP_Address[i] = AXISCAM_IP_ADDRESS[i] ;
cAxisCam_PresetTXT[i] = 'Enter Preset Name' ;
nAxisCam_Online[i] = 0 ;
nAxisCam[i] = i ;
if(nArryLen == AXIS_NUM_CAMERAS)
{
cAxisCam_UserPass[i] = AXISCAM_USERNAME_PASSWORD[i] ;
}
else
{
cAxisCam_UserPass[i] = AXISCAM_USERNAME_PASSWORD[1] ;
}
for(x = 1 ; x <= AXIS_NUM_PRESETS ; x ++)
{ //persistent but not really needed?? hmmm. maybe remove completely since names are stored on camera
if(!length_string(cAxisPrestNamesArry[i][x]))
{
cAxisPrestNamesArry[i][x] = "'Preset ',itoa(x)" ;
}
}
SET_LENGTH_ARRAY(cAxisPrestNamesArry[i],AXIS_NUM_PRESETS) ;
}
SET_LENGTH_ARRAY(cAxisCam_IP_Address,AXIS_NUM_CAMERAS) ;
SET_LENGTH_ARRAY(cAxisCam_PresetTXT,AXIS_NUM_CAMERAS) ;
SET_LENGTH_ARRAY(nAxisCam_Online,AXIS_NUM_CAMERAS) ;
SET_LENGTH_ARRAY(nAxisCam,AXIS_NUM_CAMERAS) ;
SET_LENGTH_ARRAY(cAxisCam_UserPass,AXIS_NUM_CAMERAS) ;
DEFINE_MODULE 'VAV_AxisCam_PTZ_Mod,Rev 1' AXISCAM_1(vdvAxisCamTP_Arry[AXISCAM_1],dvAxisCam_Arry[AXISCAM_1],cAxisCam_IP_Address[AXISCAM_1],
cAxisCam_UserPass[AXISCAM_1],cAxisPrestNamesArry[AXISCAM_1],cAxisCam_PresetTXT[AXISCAM_1],nAxisCam[AXISCAM_1],nAxisCam_DeBug)
Comments
I would scrap the wait_until method.
Here's the string I send for basic PTZ commands:
Note: I use a username & password for camera access which requires base64 encryption.
but how do i include the camera authentication. in my code
if you look at my code case 5 & 6. is it the rite way to zoom in and out..
i tried bu nothiin is happening... i tried storing it in another variable. the datatype i used was integer.. caould someone tell me wat the oprob is...