Files
2026-03-28 11:39:04 +11:00

5195 lines
138 KiB
C++

/***************************************************************************************
*
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
*
* By downloading, copying, installing or using the software you agree to this license.
* If you do not agree to this license, do not download, install,
* copy or use the software.
*
* Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
*
* Redistribution and use in binary forms, with or without modification, are permitted.
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*
****************************************************************************************/
#include "sys_inc.h"
#include "http.h"
#include "http_parse.h"
#include "onvif.h"
#include "onvif_probe.h"
#include "onvif_event.h"
#include "onvif_api.h"
#include "config.h"
#include "linked_list.h"
/***************************************************************************************/
PPSN_CTX * m_dev_fl; // device free list
PPSN_CTX * m_dev_ul; // device used list
BOOL m_bStateDetect; // device state detect flag
pthread_t m_hStateDetect; // device state detect threand handler
#define MAX_DEV_NUMS 10
/***************************************************************************************/
ONVIF_DEVICE_EX * findDevice(ONVIF_DEVICE_EX * pdevice)
{
ONVIF_DEVICE_EX * p_dev = (ONVIF_DEVICE_EX *) pps_lookup_start(m_dev_ul);
while (p_dev)
{
if (strcmp(p_dev->onvif_device.binfo.XAddr.host, pdevice->onvif_device.binfo.XAddr.host) == 0 &&
p_dev->onvif_device.binfo.XAddr.port == pdevice->onvif_device.binfo.XAddr.port)
{
break;
}
p_dev = (ONVIF_DEVICE_EX *) pps_lookup_next(m_dev_ul, p_dev);
}
pps_lookup_end(m_dev_ul);
return p_dev;
}
ONVIF_DEVICE_EX * findDeviceByEndpointReference(char * p_EndpointReference)
{
ONVIF_DEVICE_EX * p_dev = (ONVIF_DEVICE_EX *) pps_lookup_start(m_dev_ul);
while (p_dev)
{
if (strcmp(p_dev->onvif_device.binfo.EndpointReference, p_EndpointReference) == 0)
{
break;
}
p_dev = (ONVIF_DEVICE_EX *) pps_lookup_next(m_dev_ul, p_dev);
}
pps_lookup_end(m_dev_ul);
return p_dev;
}
ONVIF_DEVICE_EX * addDevice(ONVIF_DEVICE_EX * pdevice)
{
ONVIF_DEVICE_EX * p_dev = (ONVIF_DEVICE_EX *) pps_fl_pop(m_dev_fl);
if (p_dev)
{
memcpy(p_dev, pdevice, sizeof(ONVIF_DEVICE_EX));
p_dev->p_user = 0;
p_dev->onvif_device.events.init_term_time = 60;
// set device login information
onvif_SetAuthInfo(&p_dev->onvif_device, "admin", "admin");
// set auth method
onvif_SetAuthMethod(&p_dev->onvif_device, AuthMethod_UsernameToken);
// set request timeout
onvif_SetReqTimeout(&p_dev->onvif_device, 5000);
pps_ctx_ul_add(m_dev_ul, p_dev);
}
return p_dev;
}
void onvifServiceCapabilitiesTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
// device service capabilities
tds_GetServiceCapabilities_RES tds;
memset(&tds, 0, sizeof(tds));
ret = onvif_tds_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tds);
printf("onvif_tds_GetServiceCapabilities return ret = %d\n", ret);
// media service capabilities
trt_GetServiceCapabilities_RES trt;
memset(&trt, 0, sizeof(trt));
ret = onvif_trt_GetServiceCapabilities(&p_dev->onvif_device, NULL, &trt);
printf("onvif_trt_GetServiceCapabilities return ret = %d\n", ret);
// ptz service capabilities
ptz_GetServiceCapabilities_RES ptz;
memset(&ptz, 0, sizeof(ptz));
ret = onvif_ptz_GetServiceCapabilities(&p_dev->onvif_device, NULL, &ptz);
printf("onvif_ptz_GetServiceCapabilities return ret = %d\n", ret);
// event service capabilities
tev_GetServiceCapabilities_RES tev;
memset(&tev, 0, sizeof(tev));
ret = onvif_tev_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tev);
printf("onvif_tev_GetServiceCapabilities return ret = %d\n", ret);
// imaging service capabilities
img_GetServiceCapabilities_RES img;
memset(&img, 0, sizeof(img));
ret = onvif_img_GetServiceCapabilities(&p_dev->onvif_device, NULL, &img);
printf("onvif_img_GetServiceCapabilities return ret = %d\n", ret);
// analytics service capabilities
tan_GetServiceCapabilities_RES tan;
memset(&tan, 0, sizeof(tan));
ret = onvif_tan_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tan);
printf("onvif_tan_GetServiceCapabilities return ret = %d\n", ret);
// media2 service capabilities
tr2_GetServiceCapabilities_RES tr2;
memset(&tr2, 0, sizeof(tr2));
ret = onvif_tr2_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tr2);
printf("onvif_tr2_GetServiceCapabilities return ret = %d\n", ret);
#ifdef DEVICEIO_SUPPORT
// deviceIO service capabilities
tmd_GetServiceCapabilities_RES tmd;
memset(&tmd, 0, sizeof(tmd));
ret = onvif_tmd_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tmd);
printf("onvif_tmd_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef PROFILE_G_SUPPORT
// recording service capabilities
trc_GetServiceCapabilities_RES trc;
memset(&trc, 0, sizeof(trc));
ret = onvif_trc_GetServiceCapabilities(&p_dev->onvif_device, NULL, &trc);
printf("onvif_trc_GetServiceCapabilities return ret = %d\n", ret);
// replay service capabilities
trp_GetServiceCapabilities_RES trp;
memset(&trp, 0, sizeof(trp));
ret = onvif_trp_GetServiceCapabilities(&p_dev->onvif_device, NULL, &trp);
printf("onvif_trp_GetServiceCapabilities return ret = %d\n", ret);
// search service capabilities
tse_GetServiceCapabilities_RES tse;
memset(&tse, 0, sizeof(tse));
ret = onvif_tse_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tse);
printf("onvif_tse_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef PROFILE_C_SUPPORT
// access control service capabilities
tac_GetServiceCapabilities_RES tac;
memset(&tac, 0, sizeof(tac));
ret = onvif_tac_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tac);
printf("onvif_tac_GetServiceCapabilities return ret = %d\n", ret);
// door control service capabilities
tdc_GetServiceCapabilities_RES tdc;
memset(&tdc, 0, sizeof(tdc));
ret = onvif_tdc_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tdc);
printf("onvif_tdc_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef THERMAL_SUPPORT
// thermal service capabilities
tth_GetServiceCapabilities_RES tth;
memset(&tth, 0, sizeof(tth));
ret = onvif_tth_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tth);
printf("onvif_tth_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef CREDENTIAL_SUPPORT
// crendential service capabilities
tcr_GetServiceCapabilities_RES tcr;
memset(&tcr, 0, sizeof(tcr));
ret = onvif_tcr_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tcr);
printf("onvif_tcr_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef ACCESS_RULES
// access rules service capabilities
tar_GetServiceCapabilities_RES tar;
memset(&tar, 0, sizeof(tar));
ret = onvif_tar_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tar);
printf("onvif_tar_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef SCHEDULE_SUPPORT
// schedule service capabilities
tsc_GetServiceCapabilities_RES tsc;
memset(&tsc, 0, sizeof(tsc));
ret = onvif_tsc_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tsc);
printf("onvif_tsc_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef RECEIVER_SUPPORT
// receiver service capabilities
trv_GetServiceCapabilities_RES trv;
memset(&trv, 0, sizeof(trv));
ret = onvif_trv_GetServiceCapabilities(&p_dev->onvif_device, NULL, &trv);
printf("onvif_trv_GetServiceCapabilities return ret = %d\n", ret);
#endif
#ifdef PROVISIONING_SUPPORT
// provisioning service capabilities
tpv_GetServiceCapabilities_RES tpv;
memset(&trv, 0, sizeof(trv));
ret = onvif_tpv_GetServiceCapabilities(&p_dev->onvif_device, NULL, &tpv);
printf("onvif_tpv_GetServiceCapabilities return ret = %d\n", ret);
#endif
}
void onvifNetworkTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (1)
{
tds_GetNetworkInterfaces_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tds_GetNetworkInterfaces(&p_dev->onvif_device, NULL, &res);
printf("onvif_tds_GetNetworkInterfaces return ret = %d\n", ret);
onvif_free_NetworkInterfaces(&res.NetworkInterfaces);
break;
}
while (1)
{
tds_GetScopes_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tds_GetScopes(&p_dev->onvif_device, NULL, &res);
printf("onvif_tds_GetScopes return ret = %d\n", ret);
break;
}
while (1)
{
tds_GetNetworkDefaultGateway_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tds_GetNetworkDefaultGateway(&p_dev->onvif_device, NULL, &res);
printf("onvif_tds_GetNetworkDefaultGateway return ret = %d\n", ret);
break;
}
while (1)
{
tds_GetDNS_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tds_GetDNS(&p_dev->onvif_device, NULL, &res);
printf("onvif_tds_GetDNS return ret = %d\n", ret);
break;
}
while (1)
{
tds_GetZeroConfiguration_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tds_GetZeroConfiguration(&p_dev->onvif_device, NULL, &res);
printf("onvif_tds_GetZeroConfiguration return ret = %d\n", ret);
break;
}
}
void onvifMediaTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (1)
{
// GetAudioOutputs
trt_GetAudioOutputs_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trt_GetAudioOutputs(&p_dev->onvif_device, NULL, &res);
printf("onvif_trt_GetAudioOutputs return ret = %d\n", ret);
if (!ret || NULL == res.AudioOutputs)
{
break;
}
// GetAudioOutputConfigurations
trt_GetAudioOutputConfigurations_RES res1;
memset(&res1, 0, sizeof(res1));
ret = onvif_trt_GetAudioOutputConfigurations(&p_dev->onvif_device, NULL, &res1);
printf("onvif_trt_GetAudioOutputConfigurations return ret = %d\n", ret);
if (ret && res1.Configurations)
{
// GetAudioOutputConfiguration
trt_GetAudioOutputConfiguration_REQ req2;
trt_GetAudioOutputConfiguration_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ConfigurationToken, res1.Configurations->Configuration.token);
ret = onvif_trt_GetAudioOutputConfiguration(&p_dev->onvif_device, &req2, &res2);
printf("onvif_trt_GetAudioOutputConfiguration return ret = %d\n", ret);
// SetAudioOutputConfiguration
trt_SetAudioOutputConfiguration_REQ req3;
memset(&req3, 0, sizeof(req3));
memcpy(&req3.Configuration, &res2.Configuration, sizeof(onvif_AudioOutputConfiguration));
strcpy(req3.Configuration.Name, "test");
ret = onvif_trt_SetAudioOutputConfiguration(&p_dev->onvif_device, &req3, NULL);
printf("onvif_trt_SetAudioOutputConfiguration return ret = %d\n", ret);
// AddAudioOutputConfiguration
trt_AddAudioOutputConfiguration_REQ req4;
memset(&req4, 0, sizeof(req4));
strcpy(req4.ProfileToken, p_dev->onvif_device.curProfile->token);
strcpy(req4.ConfigurationToken, res2.Configuration.token);
ret = onvif_trt_AddAudioOutputConfiguration(&p_dev->onvif_device, &req4, NULL);
printf("onvif_trt_AddAudioOutputConfiguration return ret = %d\n", ret);
// RemoveAudioOutputConfiguration
trt_RemoveAudioOutputConfiguration_REQ req5;
memset(&req5, 0, sizeof(req5));
strcpy(req5.ProfileToken, p_dev->onvif_device.curProfile->token);
ret = onvif_trt_RemoveAudioOutputConfiguration(&p_dev->onvif_device, &req5, NULL);
printf("onvif_trt_RemoveAudioOutputConfiguration return ret = %d\n", ret);
onvif_free_AudioOutputConfigurations(&res1.Configurations);
}
// GetAudioDecoderConfigurations
trt_GetAudioDecoderConfigurations_RES res6;
memset(&res6, 0, sizeof(res6));
ret = onvif_trt_GetAudioDecoderConfigurations(&p_dev->onvif_device, NULL, &res6);
printf("onvif_trt_GetAudioDecoderConfigurations return ret = %d\n", ret);
if (ret && res6.Configurations)
{
// GetAudioDecoderConfiguration
trt_GetAudioDecoderConfiguration_REQ req7;
trt_GetAudioDecoderConfiguration_RES res7;
memset(&req7, 0, sizeof(req7));
memset(&res7, 0, sizeof(res7));
strcpy(req7.ConfigurationToken, res6.Configurations->Configuration.token);
ret = onvif_trt_GetAudioDecoderConfiguration(&p_dev->onvif_device, &req7, &res7);
printf("onvif_trt_GetAudioDecoderConfiguration return ret = %d\n", ret);
// onvif_SetAudioDecoderConfiguration
trt_SetAudioDecoderConfiguration_REQ req8;
memset(&req8, 0, sizeof(req8));
memcpy(&req8.Configuration, &res7.Configuration, sizeof(onvif_AudioDecoderConfiguration));
strcpy(req8.Configuration.Name, "test");
ret = onvif_trt_SetAudioDecoderConfiguration(&p_dev->onvif_device, &req8, NULL);
printf("onvif_trt_SetAudioDecoderConfiguration return ret = %d\n", ret);
// AddAudioDecoderConfiguration
trt_AddAudioDecoderConfiguration_REQ req9;
memset(&req9, 0, sizeof(req9));
strcpy(req9.ProfileToken, p_dev->onvif_device.curProfile->token);
strcpy(req9.ConfigurationToken, res7.Configuration.token);
ret = onvif_trt_AddAudioDecoderConfiguration(&p_dev->onvif_device, &req9, NULL);
printf("onvif_trt_AddAudioDecoderConfiguration return ret = %d\n", ret);
// RemoveAudioDecoderConfiguration
trt_RemoveAudioDecoderConfiguration_REQ req10;
memset(&req10, 0, sizeof(req10));
strcpy(req10.ProfileToken, p_dev->onvif_device.curProfile->token);
ret = onvif_trt_RemoveAudioDecoderConfiguration(&p_dev->onvif_device, &req10, NULL);
printf("onvif_trt_RemoveAudioDecoderConfiguration return ret = %d\n", ret);
onvif_free_AudioDecoderConfigurations(&res6.Configurations);
}
onvif_free_AudioOutputs(&res.AudioOutputs);
break;
}
while (1)
{
// GetMetadataConfigurations
trt_GetMetadataConfigurations_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trt_GetMetadataConfigurations(&p_dev->onvif_device, NULL, &res);
printf("onvif_trt_GetMetadataConfigurations return ret = %d\n", ret);
if (NULL == res.Configurations)
{
break;
}
// GetMetadataConfiguration
trt_GetMetadataConfiguration_REQ req1;
trt_GetMetadataConfiguration_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_trt_GetMetadataConfiguration(&p_dev->onvif_device, &req1, &res1);
printf("onvif_trt_GetMetadataConfiguration return ret = %d\n", ret);
onvif_free_Configs(&res1.Configuration.AnalyticsEngineConfiguration.AnalyticsModule);
// GetMetadataConfigurationOptions
trt_GetMetadataConfigurationOptions_RES res2;
memset(&res2, 0, sizeof(res2));
ret = onvif_trt_GetMetadataConfigurationOptions(&p_dev->onvif_device, NULL, &res2);
printf("onvif_trt_GetMetadataConfigurationOptions return ret = %d\n", ret);
// SetMetadataConfiguration
trt_SetMetadataConfiguration_REQ req3;
memcpy(&req3.Configuration, &res.Configurations->Configuration, sizeof(onvif_MetadataConfiguration));
req3.ForcePersistence = FALSE;
req3.Configuration.PTZStatus.Status = !req3.Configuration.PTZStatus.Status;
ret = onvif_trt_SetMetadataConfiguration(&p_dev->onvif_device, &req3, NULL);
printf("onvif_trt_SetMetadataConfiguration return ret = %d\n", ret);
// SetMetadataConfiguration
req3.Configuration.PTZStatus.Status = !req3.Configuration.PTZStatus.Status;
ret = onvif_trt_SetMetadataConfiguration(&p_dev->onvif_device, &req3, NULL);
printf("onvif_trt_SetMetadataConfiguration return ret = %d\n", ret);
if (p_dev->onvif_device.curProfile)
{
// AddMetadataConfiguration
trt_AddMetadataConfiguration_REQ req4;
strcpy(req4.ConfigurationToken, res.Configurations->Configuration.token);
strcpy(req4.ProfileToken, p_dev->onvif_device.curProfile->token);
ret = onvif_trt_AddMetadataConfiguration(&p_dev->onvif_device, &req4, NULL);
printf("onvif_trt_AddMetadataConfiguration return ret = %d\n", ret);
// RemoveMetadataConfiguration
trt_RemoveMetadataConfiguration_REQ req5;
strcpy(req5.ProfileToken, p_dev->onvif_device.curProfile->token);
ret = onvif_trt_RemoveMetadataConfiguration(&p_dev->onvif_device, &req5, NULL);
printf("onvif_trt_RemoveMetadataConfiguration return ret = %d\n", ret);
}
// free resource
onvif_free_MetadataConfigurations(&res.Configurations);
break;
}
while (1)
{
// GetVideoAnalyticsConfigurations
trt_GetVideoAnalyticsConfigurations_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trt_GetVideoAnalyticsConfigurations(&p_dev->onvif_device, NULL, &res);
printf("onvif_trt_GetVideoAnalyticsConfigurations return ret = %d\n", ret);
if (NULL == res.Configurations)
{
break;
}
// GetVideoAnalyticsConfiguration
trt_GetVideoAnalyticsConfiguration_REQ req1;
trt_GetVideoAnalyticsConfiguration_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_trt_GetVideoAnalyticsConfiguration(&p_dev->onvif_device, &req1, &res1);
printf("onvif_trt_GetVideoAnalyticsConfiguration return ret = %d\n", ret);
onvif_free_Configs(&res1.Configuration.AnalyticsEngineConfiguration.AnalyticsModule);
onvif_free_Configs(&res1.Configuration.RuleEngineConfiguration.Rule);
// SetVideoAnalyticsConfiguration
trt_SetVideoAnalyticsConfiguration_REQ req2;
memcpy(&req2.Configuration, &res.Configurations->Configuration, sizeof(onvif_VideoAnalyticsConfiguration));
req2.ForcePersistence = FALSE;
strcpy(req2.Configuration.Name, "video_analytics_test");
ret = onvif_trt_SetVideoAnalyticsConfiguration(&p_dev->onvif_device, &req2, NULL);
printf("onvif_trt_SetVideoAnalyticsConfiguration return ret = %d\n", ret);
// SetVideoAnalyticsConfiguration
memcpy(&req2.Configuration, &res.Configurations->Configuration, sizeof(onvif_VideoAnalyticsConfiguration));
ret = onvif_trt_SetVideoAnalyticsConfiguration(&p_dev->onvif_device, &req2, NULL);
printf("onvif_trt_SetVideoAnalyticsConfiguration return ret = %d\n", ret);
if (p_dev->onvif_device.curProfile)
{
// AddMetadataConfiguration
trt_AddVideoAnalyticsConfiguration_REQ req3;
strcpy(req3.ConfigurationToken, res.Configurations->Configuration.token);
strcpy(req3.ProfileToken, p_dev->onvif_device.curProfile->token);
ret = onvif_trt_AddVideoAnalyticsConfiguration(&p_dev->onvif_device, &req3, NULL);
printf("onvif_trt_AddVideoAnalyticsConfiguration return ret = %d\n", ret);
// RemoveMetadataConfiguration
trt_RemoveVideoAnalyticsConfiguration_REQ req4;
strcpy(req4.ProfileToken, p_dev->onvif_device.curProfile->token);
ret = onvif_trt_RemoveVideoAnalyticsConfiguration(&p_dev->onvif_device, &req4, NULL);
printf("onvif_trt_RemoveVideoAnalyticsConfiguration return ret = %d\n", ret);
}
// free resource
onvif_free_VideoAnalyticsConfigurations(&res.Configurations);
break;
}
}
void onvifUserTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
char username[32];
// CreateUsers
tds_CreateUsers_REQ req;
memset(&req, 0, sizeof(req));
snprintf(username, sizeof(username), "testuser%d", rand()%1000);
strcpy(req.User.Username, username);
req.User.PasswordFlag = 1;
strcpy(req.User.Password, "testpass");
req.User.UserLevel = UserLevel_Administrator;
ret = onvif_tds_CreateUsers(&p_dev->onvif_device, &req, NULL);
printf("onvif_tds_CreateUsers return ret = %d\n", ret);
if (!ret)
{
return;
}
onvif_SetAuthInfo(&p_dev->onvif_device, username, "testpass");
// GetNetworkProtocols
tds_GetNetworkProtocols_REQ req1;
tds_GetNetworkProtocols_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
ret = onvif_tds_GetNetworkProtocols(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tds_GetNetworkProtocols return ret = %d\n", ret);
}
void onvifGeoLocationTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
// GetGeoLocation
tds_GetGeoLocation_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tds_GetGeoLocation(&p_dev->onvif_device, NULL, &res);
printf("onvif_tds_GetGeoLocation return ret = %d\n", ret);
if (NULL == res.Location)
{
LocationEntityList * p_item = onvif_add_LocationEntity(&res.Location);
p_item->Location.EntityFlag = 1;
strcpy(p_item->Location.Entity, "VideoSource");
p_item->Location.TokenFlag = 1;
strcpy(p_item->Location.Token, "VideoSourceToken");
p_item->Location.GeoLocationFlag = 1;
p_item->Location.GeoLocation.lonFlag = 1;
p_item->Location.GeoLocation.lon = 100.0;
p_item->Location.GeoLocation.latFlag = 1;
p_item->Location.GeoLocation.lat = 100.0;
p_item->Location.GeoLocation.elevationFlag = 1;
p_item->Location.GeoLocation.elevation = 100.0;
}
// SetGeoLocation
tds_SetGeoLocation_REQ req1;
req1.Location = res.Location;
ret = onvif_tds_SetGeoLocation(&p_dev->onvif_device, &req1, NULL);
printf("onvif_tds_SetGeoLocation return ret = %d\n", ret);
// DeleteGeoLocation
tds_DeleteGeoLocation_REQ req2;
req2.Location = res.Location;
ret = onvif_tds_DeleteGeoLocation(&p_dev->onvif_device, &req2, NULL);
printf("onvif_tds_DeleteGeoLocation return ret = %d\n", ret);
// SetGeoLocation
tds_SetGeoLocation_REQ req3;
req3.Location = res.Location;
ret = onvif_tds_SetGeoLocation(&p_dev->onvif_device, &req3, NULL);
printf("onvif_tds_SetGeoLocation return ret = %d\n", ret);
onvif_free_LocationEntitis(&res.Location);
}
void onvifImageTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (1)
{
// GetVideoSources
trt_GetVideoSources_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trt_GetVideoSources(&p_dev->onvif_device, NULL, &res);
printf("onvif_trt_GetVideoSources return ret = %d\n", ret);
if (!ret || NULL == res.VideoSources)
{
break;
}
// GetMoveOptions
img_GetMoveOptions_REQ req1;
img_GetMoveOptions_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.VideoSourceToken, res.VideoSources->VideoSource.token);
ret = onvif_img_GetMoveOptions(&p_dev->onvif_device, &req1, &res1);
printf("onvif_img_GetMoveOptions return ret = %d\n", ret);
if (ret && res1.MoveOptions.ContinuousFlag)
{
// Move
img_Move_REQ req2;
memset(&req2, 0, sizeof(req2));
strcpy(req2.VideoSourceToken, res.VideoSources->VideoSource.token);
req2.Focus.ContinuousFlag = 1;
req2.Focus.Continuous.Speed = res1.MoveOptions.Continuous.Speed.Min;
ret = onvif_img_Move(&p_dev->onvif_device, &req2, NULL);
printf("onvif_img_Move return ret = %d\n", ret);
// Stop
img_Stop_REQ req3;
memset(&req3, 0, sizeof(req3));
strcpy(req3.VideoSourceToken, res.VideoSources->VideoSource.token);
ret = onvif_img_Stop(&p_dev->onvif_device, &req3, NULL);
printf("onvif_img_Stop return ret = %d\n", ret);
}
if (p_dev->onvif_device.Capabilities.image.Presets)
{
// GetPresets
img_GetPresets_REQ req4;
img_GetPresets_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
strcpy(req4.VideoSourceToken, res.VideoSources->VideoSource.token);
ret = onvif_img_GetPresets(&p_dev->onvif_device, &req4, &res4);
printf("onvif_img_GetPresets return ret = %d\n", ret);
// GetCurrentPreset
img_GetCurrentPreset_REQ req5;
img_GetCurrentPreset_RES res5;
memset(&req5, 0, sizeof(req5));
memset(&res5, 0, sizeof(res5));
strcpy(req5.VideoSourceToken, res.VideoSources->VideoSource.token);
ret = onvif_img_GetCurrentPreset(&p_dev->onvif_device, &req5, &res5);
printf("onvif_img_GetCurrentPreset return ret = %d\n", ret);
if (res4.Preset && p_dev->onvif_device.Capabilities.image.AdaptablePreset)
{
// SetCurrentPreset
img_SetCurrentPreset_REQ req6;
memset(&req6, 0, sizeof(req6));
strcpy(req6.VideoSourceToken, res.VideoSources->VideoSource.token);
strcpy(req6.PresetToken, res4.Preset->Preset.token);
ret = onvif_img_SetCurrentPreset(&p_dev->onvif_device, &req6, NULL);
printf("onvif_img_SetCurrentPreset return ret = %d\n", ret);
// SetCurrentPreset, resume
strcpy(req6.PresetToken, res5.Preset.token);
ret = onvif_img_SetCurrentPreset(&p_dev->onvif_device, &req6, NULL);
printf("onvif_img_SetCurrentPreset return ret = %d\n", ret);
}
onvif_free_ImagingPresets(&res4.Preset);
}
onvif_free_VideoSources(&res.VideoSources);
break;
}
}
#ifdef DEVICEIO_SUPPORT
void onvifDeviceIOTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
// GetRelayoutputs
tmd_GetRelayOutputs_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tmd_GetRelayOutputs(&p_dev->onvif_device, NULL, &res);
printf("onvif_tmd_GetRelayOutputs return ret = %d\n", ret);
if (NULL == res.RelayOutputs)
{
return;
}
// SetRelayOutputSettings
tmd_SetRelayOutputSettings_REQ req1;
memset(&req1, 0, sizeof(req1));
memcpy(&req1.RelayOutput, &res.RelayOutputs->RelayOutput, sizeof(onvif_RelayOutput));
req1.RelayOutput.Properties.IdleState = RelayIdleState_open;
req1.RelayOutput.Properties.DelayTime = 20;
ret = onvif_tmd_SetRelayOutputSettings(&p_dev->onvif_device, &req1, NULL);
printf("onvif_tmd_SetRelayOutputSettings return ret = %d\n", ret);
// SetRelayOutputSettings
tmd_SetRelayOutputSettings_REQ req2;
memset(&req2, 0, sizeof(req2));
memcpy(&req2.RelayOutput, &res.RelayOutputs->RelayOutput, sizeof(onvif_RelayOutput));
ret = onvif_tmd_SetRelayOutputSettings(&p_dev->onvif_device, &req2, NULL);
printf("onvif_tmd_SetRelayOutputSettings return ret = %d\n", ret);
// SetRelayoutputState
tmd_SetRelayOutputState_REQ req3;
memset(&req3, 0, sizeof(req3));
strcpy(req3.RelayOutputToken, res.RelayOutputs->RelayOutput.token);
req3.LogicalState = RelayLogicalState_inactive;
ret = onvif_tmd_SetRelayOutputState(&p_dev->onvif_device, &req3, NULL);
printf("onvif_tmd_SetRelayOutputState return ret = %d\n", ret);
// SetRelayoutputState
tmd_SetRelayOutputState_REQ req4;
memset(&req4, 0, sizeof(req4));
strcpy(req4.RelayOutputToken, res.RelayOutputs->RelayOutput.token);
req4.LogicalState = RelayLogicalState_active;
ret = onvif_tmd_SetRelayOutputState(&p_dev->onvif_device, &req4, NULL);
printf("onvif_tmd_SetRelayOutputState return ret = %d\n", ret);
// GetRelayOutputOptions
tmd_GetRelayOutputOptions_REQ req5;
tmd_GetRelayOutputOptions_RES res5;
memset(&req5, 0, sizeof(req5));
memset(&res5, 0, sizeof(res5));
req5.RelayOutputTokenFlag = 1;
strcpy(req5.RelayOutputToken, res.RelayOutputs->RelayOutput.token);
ret = onvif_tmd_GetRelayOutputOptions(&p_dev->onvif_device, &req5, &res5);
printf("onvif_tmd_GetRelayOutputOptions return ret = %d\n", ret);
onvif_free_RelayOutputOptions(&res5.RelayOutputOptions);
onvif_free_RelayOutputs(&res.RelayOutputs);
// GetDigitalInputs
tmd_GetDigitalInputs_RES res6;
memset(&res6, 0, sizeof(res6));
ret = onvif_tmd_GetDigitalInputs(&p_dev->onvif_device, NULL, &res6);
printf("onvif_tmd_GetDigitalInputs return ret = %d\n", ret);
if (NULL == res6.DigitalInputs)
{
return;
}
// GetDigitalInputConfigurationOptions
tmd_GetDigitalInputConfigurationOptions_REQ req7;
tmd_GetDigitalInputConfigurationOptions_RES res7;
memset(&req7, 0, sizeof(req7));
memset(&res7, 0, sizeof(res7));
req7.TokenFlag = 1;
strcpy(req7.Token, res6.DigitalInputs->DigitalInput.token);
ret = onvif_tmd_GetDigitalInputConfigurationOptions(&p_dev->onvif_device, &req7, &res7);
printf("onvif_tmd_GetDigitalInputConfigurationOptions return ret = %d\n", ret);
// SetDigitalInputConfigurations
tmd_SetDigitalInputConfigurations_REQ req8;
memset(&req8, 0, sizeof(req8));
req8.DigitalInputs = res6.DigitalInputs;
req8.DigitalInputs->DigitalInput.IdleStateFlag = 1;
req8.DigitalInputs->DigitalInput.IdleState = DigitalIdleState_open;
ret = onvif_tmd_SetDigitalInputConfigurations(&p_dev->onvif_device, &req8, NULL);
printf("onvif_tmd_SetDigitalInputConfigurations return ret = %d\n", ret);
// SetDigitalInputConfigurations
tmd_SetDigitalInputConfigurations_REQ req9;
memset(&req9, 0, sizeof(req9));
req8.DigitalInputs = res6.DigitalInputs;
ret = onvif_tmd_SetDigitalInputConfigurations(&p_dev->onvif_device, &req9, NULL);
printf("onvif_tmd_SetDigitalInputConfigurations return ret = %d\n", ret);
onvif_free_DigitalInputs(&res6.DigitalInputs);
}
#endif // end of DEVICEIO_SUPPORT
void onvifMedia2Test(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (1)
{
// GetAudioEncoderConfigurationOptions
tr2_GetAudioEncoderConfigurationOptions_REQ req;
tr2_GetAudioEncoderConfigurationOptions_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioEncoderConfigurationOptions(&p_dev->onvif_device, &req, &res);
if (ret)
{
onvif_free_AudioEncoder2ConfigurationOptions(&res.Options);
}
printf("onvif_tr2_GetAudioEncoderConfigurationOptions return ret = %d\n", ret);
break;
}
while (1)
{
// GetAudioEncoderConfigurations
tr2_GetAudioEncoderConfigurations_REQ req;
tr2_GetAudioEncoderConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioEncoderConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetAudioEncoderConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// SetAudioEncoderConfiguration
tr2_SetAudioEncoderConfiguration_REQ req1;
tr2_SetAudioEncoderConfiguration_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
memcpy(&req1.Configuration, &res.Configurations->Configuration, sizeof(onvif_AudioEncoder2Configuration));
ret = onvif_tr2_SetAudioEncoderConfiguration(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_SetAudioEncoderConfiguration return ret = %d\n", ret);
onvif_free_AudioEncoder2Configurations(&res.Configurations);
break;
}
while (1)
{
// GetAudioSourceConfigurationOptions
tr2_GetAudioSourceConfigurationOptions_REQ req;
tr2_GetAudioSourceConfigurationOptions_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioSourceConfigurationOptions(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetAudioSourceConfigurationOptions return ret = %d\n", ret);
break;
}
while (1)
{
// GetAudioSourceConfigurations
tr2_GetAudioSourceConfigurations_REQ req;
tr2_GetAudioSourceConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioSourceConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetAudioSourceConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// SetAudioSourceConfiguration
tr2_SetAudioSourceConfiguration_REQ req1;
tr2_SetAudioSourceConfiguration_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
memcpy(&req1.Configuration, &res.Configurations->Configuration, sizeof(onvif_AudioSourceConfiguration));
ret = onvif_tr2_SetAudioSourceConfiguration(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_SetAudioSourceConfiguration return ret = %d\n", ret);
onvif_free_AudioSourceConfigurations(&res.Configurations);
break;
}
while (1)
{
// GetVideoEncoderConfigurationOptions
tr2_GetVideoEncoderConfigurationOptions_REQ req;
tr2_GetVideoEncoderConfigurationOptions_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoEncoderConfigurationOptions(&p_dev->onvif_device, &req, &res);
if (ret)
{
onvif_free_VideoEncoder2ConfigurationOptions(&res.Options);
}
printf("onvif_tr2_GetVideoEncoderConfigurationOptions return ret = %d\n", ret);
break;
}
while (1)
{
// GetVideoEncoderConfigurations
tr2_GetVideoEncoderConfigurations_REQ req;
tr2_GetVideoEncoderConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoEncoderConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetVideoEncoderConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// SetVideoEncoderConfiguration
tr2_SetVideoEncoderConfiguration_REQ req1;
tr2_SetVideoEncoderConfiguration_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
memcpy(&req1.Configuration, &res.Configurations->Configuration, sizeof(onvif_VideoEncoder2Configuration));
ret = onvif_tr2_SetVideoEncoderConfiguration(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_SetVideoEncoderConfiguration return ret = %d\n", ret);
onvif_free_VideoEncoder2Configurations(&res.Configurations);
break;
}
while (1)
{
// GetVideoSourceConfigurationOptions
tr2_GetVideoSourceConfigurationOptions_REQ req;
tr2_GetVideoSourceConfigurationOptions_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoSourceConfigurationOptions(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetVideoSourceConfigurationOptions return ret = %d\n", ret);
break;
}
while (1)
{
// GetVideoSourceConfigurations
tr2_GetVideoSourceConfigurations_REQ req;
tr2_GetVideoSourceConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoSourceConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetVideoSourceConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// SetVideoSourceConfiguration
tr2_SetVideoSourceConfiguration_REQ req1;
tr2_SetVideoSourceConfiguration_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
memcpy(&req1.Configuration, &res.Configurations->Configuration, sizeof(onvif_VideoSourceConfiguration));
ret = onvif_tr2_SetVideoSourceConfiguration(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_SetVideoSourceConfiguration return ret = %d\n", ret);
// GetVideoEncoderInstances
tr2_GetVideoEncoderInstances_REQ req2;
tr2_GetVideoEncoderInstances_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tr2_GetVideoEncoderInstances(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tr2_GetVideoEncoderInstances return ret = %d\n", ret);
onvif_free_VideoSourceConfigurations(&res.Configurations);
break;
}
{
// GetMetadataConfigurationOptions
tr2_GetMetadataConfigurationOptions_REQ req;
tr2_GetMetadataConfigurationOptions_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetMetadataConfigurationOptions(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetMetadataConfigurationOptions return ret = %d\n", ret);
}
{
// GetMetadataConfigurations
tr2_GetMetadataConfigurations_REQ req;
tr2_GetMetadataConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetMetadataConfigurations(&p_dev->onvif_device, &req, &res);
if (ret)
{
onvif_free_MetadataConfigurations(&res.Configurations);
}
printf("onvif_tr2_GetMetadataConfigurations return ret = %d\n", ret);
}
while (1)
{
// GetProfiles
tr2_GetProfiles_REQ req;
tr2_GetProfiles_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetProfiles(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetProfiles return ret = %d\n", ret);
if (!ret || NULL == res.Profiles)
{
break;
}
// GetStreamUri
tr2_GetStreamUri_REQ req1;
tr2_GetStreamUri_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.Protocol, "RtspUnicast");
strcpy(req1.ProfileToken, res.Profiles->MediaProfile.token);
ret = onvif_tr2_GetStreamUri(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_GetStreamUri return ret = %d\n", ret);
if (ret)
{
printf("onvif_tr2_GetStreamUri, profile=%s, uri=%s\n", req1.ProfileToken, res1.Uri);
}
// SetSynchronizationPoint
tr2_SetSynchronizationPoint_REQ req2;
tr2_SetSynchronizationPoint_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ProfileToken, res.Profiles->MediaProfile.token);
ret = onvif_tr2_SetSynchronizationPoint(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tr2_SetSynchronizationPoint return ret = %d\n", ret);
// AddConfiguration
tr2_AddConfiguration_REQ req3;
tr2_AddConfiguration_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
req3.sizeConfiguration = 1;
strcpy(req3.Configuration[0].Type, "All");
strcpy(req3.ProfileToken, res.Profiles->MediaProfile.token);
ret = onvif_tr2_AddConfiguration(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tr2_AddConfiguration return ret = %d\n", ret);
// free profiles
onvif_free_MediaProfiles(&res.Profiles);
break;
}
while (1)
{
// CreateProfile
tr2_CreateProfile_REQ req;
tr2_CreateProfile_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
strcpy(req.Name, "test");
ret = onvif_tr2_CreateProfile(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_CreateProfile return ret = %d\n", ret);
if (ret)
{
printf("onvif_tr2_CreateProfile token = %s\n", res.Token);
}
else
{
break;
}
// DeleteProfile
tr2_DeleteProfile_REQ req1;
tr2_DeleteProfile_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.Token, res.Token);
ret = onvif_tr2_DeleteProfile(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_DeleteProfile return ret = %d\n", ret);
break;
}
while (1)
{
// GetAudioOutputConfigurations
tr2_GetAudioOutputConfigurations_REQ req;
tr2_GetAudioOutputConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioOutputConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetAudioOutputConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// SetAudioOutputConfiguration
tr2_SetAudioOutputConfiguration_REQ req1;
memset(&req1, 0, sizeof(req1));
memcpy(&req1.Configuration, &res.Configurations->Configuration, sizeof(onvif_AudioOutputConfiguration));
ret = onvif_tr2_SetAudioOutputConfiguration(&p_dev->onvif_device, &req1, NULL);
printf("onvif_tr2_SetAudioOutputConfiguration return ret = %d\n", ret);
onvif_free_AudioOutputConfigurations(&res.Configurations);
break;
}
while (1)
{
// GetAudioOutputConfigurationOptions
tr2_GetAudioOutputConfigurationOptions_REQ req;
tr2_GetAudioOutputConfigurationOptions_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioOutputConfigurationOptions(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetAudioOutputConfigurationOptions return ret = %d\n", ret);
break;
}
while (1)
{
// GetAudioDecoderConfigurations
tr2_GetAudioDecoderConfigurations_REQ req;
tr2_GetAudioDecoderConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioDecoderConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetAudioDecoderConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// SetAudioDecoderConfiguration
tr2_SetAudioDecoderConfiguration_REQ req1;
memset(&req1, 0, sizeof(req1));
memcpy(&req1.Configuration, &res.Configurations->Configuration, sizeof(onvif_AudioDecoderConfiguration));
ret = onvif_tr2_SetAudioDecoderConfiguration(&p_dev->onvif_device, &req1, NULL);
printf("onvif_tr2_SetAudioDecoderConfiguration return ret = %d\n", ret);
onvif_free_AudioDecoderConfigurations(&res.Configurations);
break;
}
while (1)
{
// GetAudioDecoderConfigurationOptions
tr2_GetAudioDecoderConfigurationOptions_REQ req;
tr2_GetAudioDecoderConfigurationOptions_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetAudioDecoderConfigurationOptions(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetAudioDecoderConfigurationOptions return ret = %d\n", ret);
onvif_free_AudioEncoder2ConfigurationOptions(&res.Options);
break;
}
while (1)
{
// GetProfiles
tr2_GetProfiles_REQ req;
tr2_GetProfiles_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetProfiles(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetProfiles return ret = %d\n", ret);
if (!ret || NULL == res.Profiles)
{
break;
}
// GetSnapshotUri
tr2_GetSnapshotUri_REQ req1;
tr2_GetSnapshotUri_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.ProfileToken, res.Profiles->MediaProfile.token);
ret = onvif_tr2_GetSnapshotUri(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_GetSnapshotUri return ret = %d\n", ret);
// StartMulticastStreaming
tr2_StartMulticastStreaming_REQ req2;
tr2_StartMulticastStreaming_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ProfileToken, res.Profiles->MediaProfile.token);
ret = onvif_tr2_StartMulticastStreaming(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tr2_StartMulticastStreaming return ret = %d\n", ret);
// StopMulticastStreaming
tr2_StopMulticastStreaming_REQ req3;
tr2_StopMulticastStreaming_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.ProfileToken, res.Profiles->MediaProfile.token);
ret = onvif_tr2_StopMulticastStreaming(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tr2_StopMulticastStreaming return ret = %d\n", ret);
onvif_free_MediaProfiles(&res.Profiles);
break;
}
while (1)
{
// GetVideoSourceConfigurations
tr2_GetVideoSourceConfigurations_REQ req;
tr2_GetVideoSourceConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoSourceConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetVideoSourceConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// GetVideoSourceModes
tr2_GetVideoSourceModes_REQ req1;
tr2_GetVideoSourceModes_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.VideoSourceToken, res.Configurations->Configuration.SourceToken);
ret = onvif_tr2_GetVideoSourceModes(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_GetVideoSourceModes return ret = %d\n", ret);
if (!ret || NULL == res1.VideoSourceModes)
{
onvif_free_VideoSourceConfigurations(&res.Configurations);
break;
}
// SetVideoSourceMode
tr2_SetVideoSourceMode_REQ req2;
tr2_SetVideoSourceMode_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.VideoSourceToken, res.Configurations->Configuration.SourceToken);
strcpy(req2.VideoSourceModeToken, res1.VideoSourceModes->VideoSourceMode.token);
ret = onvif_tr2_SetVideoSourceMode(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tr2_SetVideoSourceMode return ret = %d\n", ret);
onvif_free_VideoSourceModes(&res1.VideoSourceModes);
onvif_free_VideoSourceConfigurations(&res.Configurations);
break;
}
}
void onvifMedia2OSDTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (1)
{
// GetVideoSourceConfigurations
tr2_GetVideoSourceConfigurations_REQ req;
tr2_GetVideoSourceConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoSourceConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetVideoSourceConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// GetOSDOptions
tr2_GetOSDOptions_REQ req1;
tr2_GetOSDOptions_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tr2_GetOSDOptions(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_GetOSDOptions return ret = %d\n", ret);
onvif_free_VideoSourceConfigurations(&res.Configurations);
break;
}
while (1)
{
// GetVideoSourceConfigurations
tr2_GetVideoSourceConfigurations_REQ req;
tr2_GetVideoSourceConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoSourceConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetVideoSourceConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
break;
}
// CreateOSD
tr2_CreateOSD_REQ req1;
tr2_CreateOSD_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
req1.OSD.Type = OSDType_Text;
strcpy(req1.OSD.VideoSourceConfigurationToken, res.Configurations->Configuration.token);
req1.OSD.Position.Type = OSDPosType_UpperRight;
req1.OSD.TextStringFlag = 1;
req1.OSD.TextString.Type = OSDTextType_Plain;
req1.OSD.TextString.PlainTextFlag = 1;
strcpy(req1.OSD.TextString.PlainText, "test");
ret = onvif_tr2_CreateOSD(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_CreateOSD return ret = %d\n", ret);
// GetOSDs
tr2_GetOSDs_REQ req2;
tr2_GetOSDs_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
ret = onvif_tr2_GetOSDs(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tr2_GetOSDs return ret = %d\n", ret);
if (!ret || NULL == res2.OSDs)
{
onvif_free_VideoSourceConfigurations(&res.Configurations);
break;
}
// SetOSD
tr2_SetOSD_REQ req3;
tr2_SetOSD_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
memcpy(&req3.OSD, &res2.OSDs->OSD, sizeof(onvif_OSDConfiguration));
ret = onvif_tr2_SetOSD(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tr2_SetOSD return ret = %d\n", ret);
// DeleteOSD
tr2_DeleteOSD_REQ req4;
memset(&req4, 0, sizeof(req4));
strcpy(req4.OSDToken, res1.OSDToken);
ret = onvif_tr2_DeleteOSD(&p_dev->onvif_device, &req4, NULL);
printf("onvif_tr2_DeleteOSD return ret = %d\n", ret);
onvif_free_OSDConfigurations(&res2.OSDs);
onvif_free_VideoSourceConfigurations(&res.Configurations);
break;
}
}
void onvifMedia2MaskTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
// GetVideoSourceConfigurations
tr2_GetVideoSourceConfigurations_REQ req;
tr2_GetVideoSourceConfigurations_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tr2_GetVideoSourceConfigurations(&p_dev->onvif_device, &req, &res);
printf("onvif_tr2_GetVideoSourceConfigurations return ret = %d\n", ret);
if (!ret || NULL == res.Configurations)
{
return;
}
// CreateMask
tr2_CreateMask_REQ req1;
tr2_CreateMask_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.Mask.ConfigurationToken, res.Configurations->Configuration.token);
req1.Mask.Polygon.sizePoint = 5;
req1.Mask.Polygon.Point[0].x = 0;
req1.Mask.Polygon.Point[0].y = 0;
req1.Mask.Polygon.Point[1].x = 400;
req1.Mask.Polygon.Point[1].y = 0;
req1.Mask.Polygon.Point[2].x = 400;
req1.Mask.Polygon.Point[2].y = 400;
req1.Mask.Polygon.Point[3].x = 0;
req1.Mask.Polygon.Point[3].y = 400;
req1.Mask.Polygon.Point[4].x = 0;
req1.Mask.Polygon.Point[4].y = 0;
strcpy(req1.Mask.Type, "Pixelated");
req1.Mask.Enabled = TRUE;
ret = onvif_tr2_CreateMask(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tr2_CreateMask return ret = %d\n", ret);
// GetMasks
tr2_GetMasks_REQ req2;
tr2_GetMasks_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
ret = onvif_tr2_GetMasks(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tr2_GetMasks return ret = %d\n", ret);
// GetMaskOptions
tr2_GetMaskOptions_REQ req3;
tr2_GetMaskOptions_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tr2_GetMaskOptions(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tr2_GetMaskOptions return ret = %d\n", ret);
// SetMask
tr2_SetMask_REQ req4;
tr2_SetMask_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
memcpy(&req4.Mask, &req1.Mask, sizeof(onvif_Mask));
req4.Mask.Enabled = FALSE;
strcpy(req4.Mask.token, res1.Token);
ret = onvif_tr2_SetMask(&p_dev->onvif_device, &req4, &res4);
printf("onvif_tr2_SetMask return ret = %d\n", ret);
// DeleteMask
tr2_DeleteMask_REQ req5;
tr2_DeleteMask_RES res5;
memset(&req5, 0, sizeof(req5));
memset(&res5, 0, sizeof(res5));
strcpy(req5.Token, res1.Token);
ret = onvif_tr2_DeleteMask(&p_dev->onvif_device, &req5, &res5);
printf("onvif_tr2_DeleteMask return ret = %d\n", ret);
// free resources
onvif_free_Masks(&res2.Masks);
onvif_free_VideoSourceConfigurations(&res.Configurations);
}
void onvifAnalyticsTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
// GetVideoAnalyticsConfigurations
trt_GetVideoAnalyticsConfigurations_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trt_GetVideoAnalyticsConfigurations(&p_dev->onvif_device, NULL, &res);
printf("onvif_trt_GetVideoAnalyticsConfigurations return ret = %d\n", ret);
if (NULL == res.Configurations)
{
return;
}
while (1)
{
// GetSupportedAnalyticsModules
tan_GetSupportedAnalyticsModules_REQ req1;
tan_GetSupportedAnalyticsModules_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tan_GetSupportedAnalyticsModules(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tan_GetSupportedAnalyticsModules return ret = %d\n", ret);
// GetAnalyticsModules
tan_GetAnalyticsModules_REQ req2;
tan_GetAnalyticsModules_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tan_GetAnalyticsModules(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tan_GetAnalyticsModules return ret = %d\n", ret);
onvif_free_Configs(&res2.AnalyticsModule);
// GetAnalyticsModuleOptions
tan_GetAnalyticsModuleOptions_REQ req3;
tan_GetAnalyticsModuleOptions_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tan_GetAnalyticsModuleOptions(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tan_GetAnalyticsModuleOptions return ret = %d\n", ret);
onvif_free_AnalyticsModuleConfigOptions(&res3.Options);
onvif_free_ConfigDescriptions(&res1.SupportedAnalyticsModules.AnalyticsModuleDescription);
break;
}
while (1)
{
// GetSupportedRules
tan_GetSupportedRules_REQ req1;
tan_GetSupportedRules_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tan_GetSupportedRules(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tan_GetSupportedRules return ret = %d\n", ret);
// GetRules
tan_GetRules_REQ req2;
tan_GetRules_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tan_GetRules(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tan_GetRules return ret = %d\n", ret);
onvif_free_Configs(&res2.Rule);
// GetRuleOptions
tan_GetRuleOptions_REQ req3;
tan_GetRuleOptions_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.ConfigurationToken, res.Configurations->Configuration.token);
ret = onvif_tan_GetRuleOptions(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tan_GetRuleOptions return ret = %d\n", ret);
onvif_free_ConfigOptions(&res3.RuleOptions);
onvif_free_ConfigDescriptions(&res1.SupportedRules.RuleDescription);
break;
}
onvif_free_VideoAnalyticsConfigurations(&res.Configurations);
// GetSupportedMetadata
tan_GetSupportedMetadata_REQ req4;
tan_GetSupportedMetadata_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
ret = onvif_tan_GetSupportedMetadata(&p_dev->onvif_device, &req4, &res4);
printf("onvif_tan_GetSupportedMetadata return ret = %d\n", ret);
onvif_free_MetadataInfo(&res4.AnalyticsModule);
}
#ifdef PROFILE_C_SUPPORT
void onvifAccessControlTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (1)
{
// GetAccessPointInfoList
tac_GetAccessPointInfoList_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tac_GetAccessPointInfoList(&p_dev->onvif_device, NULL, &res);
printf("onvif_tac_GetAccessPointInfoList return ret = %d\n", ret);
if (!ret || !res.AccessPointInfo)
{
break;
}
// GetAccessPointInfo
tac_GetAccessPointInfo_REQ req1;
tac_GetAccessPointInfo_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.token[0], res.AccessPointInfo->AccessPointInfo.token);
ret = onvif_tac_GetAccessPointInfo(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tac_GetAccessPointInfo return ret = %d\n", ret);
if (ret)
{
onvif_free_AccessPoints(&res1.AccessPointInfo);
}
onvif_free_AccessPoints(&res.AccessPointInfo);
break;
}
while (1)
{
// GetAreaInfoList
tac_GetAreaInfoList_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tac_GetAreaInfoList(&p_dev->onvif_device, NULL, &res);
printf("onvif_tac_GetAreaInfoList return ret = %d\n", ret);
if (!ret || !res.AreaInfo)
{
break;
}
// GetAreaInfo
tac_GetAreaInfo_REQ req1;
tac_GetAreaInfo_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.token[0], res.AreaInfo->AreaInfo.token);
ret = onvif_tac_GetAreaInfo(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tac_GetAreaInfo return ret = %d\n", ret);
if (ret)
{
onvif_free_Areas(&res1.AreaInfo);
}
onvif_free_Areas(&res.AreaInfo);
break;
}
while (1)
{
// GetAccessPointInfoList
tac_GetAccessPointInfoList_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tac_GetAccessPointInfoList(&p_dev->onvif_device, NULL, &res);
printf("onvif_tac_GetAccessPointInfoList return ret = %d\n", ret);
if (!ret || !res.AccessPointInfo)
{
break;
}
// GetAccessPointState
tac_GetAccessPointState_REQ req1;
tac_GetAccessPointState_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.Token, res.AccessPointInfo->AccessPointInfo.token);
ret = onvif_tac_GetAccessPointState(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tac_GetAccessPointState return ret = %d\n", ret);
// EnableAccessPoint
tac_EnableAccessPoint_REQ req2;
memset(&req2, 0, sizeof(req2));
strcpy(req2.Token, res.AccessPointInfo->AccessPointInfo.token);
ret = onvif_tac_EnableAccessPoint(&p_dev->onvif_device, &req2, NULL);
printf("onvif_tac_EnableAccessPoint return ret = %d\n", ret);
// GetAccessPointState
memset(&res1, 0, sizeof(res1));
ret = onvif_tac_GetAccessPointState(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tac_GetAccessPointState return ret = %d\n", ret);
// DisableAccessPoint
tac_DisableAccessPoint_REQ req3;
memset(&req3, 0, sizeof(req3));
strcpy(req3.Token, res.AccessPointInfo->AccessPointInfo.token);
ret = onvif_tac_DisableAccessPoint(&p_dev->onvif_device, &req3, NULL);
printf("onvif_tac_DisableAccessPoint return ret = %d\n", ret);
// GetAccessPointState
memset(&res1, 0, sizeof(res1));
ret = onvif_tac_GetAccessPointState(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tac_GetAccessPointState return ret = %d\n", ret);
onvif_free_AccessPoints(&res.AccessPointInfo);
break;
}
}
void onvifDoorControlTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (1)
{
// GetDoorList
tdc_GetDoorList_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tdc_GetDoorList(&p_dev->onvif_device, NULL, &res);
printf("onvif_tdc_GetDoorList return ret = %d\n", ret);
if (!ret || !res.Door)
{
break;
}
// GetDoors
tdc_GetDoors_REQ req1;
tdc_GetDoors_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.token[0], res.Door->Door.DoorInfo.token);
ret = onvif_tdc_GetDoors(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tdc_GetDoors return ret = %d\n", ret);
if (ret)
{
onvif_free_Doors(&res1.Door);
}
onvif_free_Doors(&res.Door);
break;
}
while (p_dev->onvif_device.Capabilities.doorcontrol.DoorManagementSupported)
{
// CreateDoor
tdc_CreateDoor_REQ req;
tdc_CreateDoor_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
strcpy(req.Door.DoorInfo.Name, "testname");
req.Door.DoorInfo.DescriptionFlag = 1;
strcpy(req.Door.DoorInfo.Description, "testdesc");
req.Door.DoorInfo.Capabilities.Access = 1;
req.Door.DoorInfo.Capabilities.Lock = 1;
req.Door.DoorInfo.Capabilities.Unlock = 1;
req.Door.DoorInfo.Capabilities.Block = 1;
req.Door.DoorInfo.Capabilities.DoubleLock = 1;
ret = onvif_tdc_CreateDoor(&p_dev->onvif_device, &req, &res);
printf("onvif_tdc_CreateDoor return ret = %d\n", ret);
// SetDoor
tdc_SetDoor_REQ req2;
memset(&req2, 0, sizeof(req2));
memcpy(&req2.Door, &req.Door, sizeof(onvif_Door));
strcpy(req2.Door.DoorInfo.token, res.Token);
strcpy(req2.Door.DoorInfo.Name, "testname1");
ret = onvif_tdc_SetDoor(&p_dev->onvif_device, &req2, NULL);
printf("onvif_tdc_SetDoor return ret = %d\n", ret);
// ModifyDoor
tdc_ModifyDoor_REQ req3;
memset(&req3, 0, sizeof(req3));
memcpy(&req3.Door, &req.Door, sizeof(onvif_Door));
strcpy(req3.Door.DoorInfo.token, res.Token);
strcpy(req3.Door.DoorInfo.Name, "testname2");
ret = onvif_tdc_ModifyDoor(&p_dev->onvif_device, &req3, NULL);
printf("onvif_tdc_ModifyDoor return ret = %d\n", ret);
// DeleteDoor
tdc_DeleteDoor_REQ req4;
memset(&req4, 0, sizeof(req4));
strcpy(req4.Token, res.Token);
ret = onvif_tdc_DeleteDoor(&p_dev->onvif_device, &req4, NULL);
printf("onvif_tdc_DeleteDoor return ret = %d\n", ret);
break;
}
while (1)
{
// GetDoorInfoList
tdc_GetDoorInfoList_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tdc_GetDoorInfoList(&p_dev->onvif_device, NULL, &res);
printf("onvif_tdc_GetDoorInfoList return ret = %d\n", ret);
if (!ret || !res.DoorInfo)
{
break;
}
// GetDoorInfo
tdc_GetDoorInfo_REQ req1;
tdc_GetDoorInfo_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.token[0], res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_GetDoorInfo(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tdc_GetDoorInfo return ret = %d\n", ret);
if (ret)
{
onvif_free_DoorInfos(&res1.DoorInfo);
}
onvif_free_DoorInfos(&res.DoorInfo);
break;
}
while (1)
{
// GetDoorInfoList
tdc_GetDoorInfoList_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tdc_GetDoorInfoList(&p_dev->onvif_device, NULL, &res);
printf("onvif_tdc_GetDoorInfoList return ret = %d\n", ret);
if (!ret || !res.DoorInfo)
{
break;
}
// GetDoorState
tdc_GetDoorState_REQ req1;
tdc_GetDoorState_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_GetDoorState(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tdc_GetDoorState return ret = %d\n", ret);
onvif_free_DoorInfos(&res.DoorInfo);
break;
}
while (1)
{
// GetDoorInfoList
tdc_GetDoorInfoList_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tdc_GetDoorInfoList(&p_dev->onvif_device, NULL, &res);
printf("onvif_tdc_GetDoorInfoList return ret = %d\n", ret);
if (!ret || !res.DoorInfo)
{
break;
}
if (res.DoorInfo->DoorInfo.Capabilities.Access)
{
// AccessDoor
tdc_AccessDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_AccessDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_AccessDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.Lock)
{
// LockDoor
tdc_LockDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_LockDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_LockDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.Unlock)
{
// UnlockDoor
tdc_UnlockDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_UnlockDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_UnlockDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.DoubleLock)
{
// DoubleLockDoor
tdc_DoubleLockDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_DoubleLockDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_DoubleLockDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.Block)
{
// BlockDoor
tdc_BlockDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_BlockDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_BlockDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.LockDown)
{
// LockDownDoor
tdc_LockDownDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_LockDownDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_LockDownDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.LockDown)
{
// LockDownReleaseDoor
tdc_LockDownReleaseDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_LockDownReleaseDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_LockDownReleaseDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.LockOpen)
{
// LockOpenDoor
tdc_LockOpenDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_LockOpenDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_LockOpenDoor return ret = %d\n", ret);
}
if (res.DoorInfo->DoorInfo.Capabilities.LockOpen)
{
// LockOpenReleaseDoor
tdc_LockOpenReleaseDoor_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.Token, res.DoorInfo->DoorInfo.token);
ret = onvif_tdc_LockOpenReleaseDoor(&p_dev->onvif_device, &req, NULL);
printf("onvif_tdc_LockOpenReleaseDoor return ret = %d\n", ret);
}
onvif_free_DoorInfos(&res.DoorInfo);
break;
}
}
#endif // end of PROFILE_C_SUPPORT
#ifdef PROFILE_G_SUPPORT
void onvifRecordingTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
while (p_dev->onvif_device.Capabilities.recording.DynamicRecordings)
{
// CreateRecording
trc_CreateRecording_REQ req;
trc_CreateRecording_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
strcpy(req.RecordingConfiguration.Source.SourceId, "test");
strcpy(req.RecordingConfiguration.Source.Name, "test");
strcpy(req.RecordingConfiguration.Source.Location, "test");
strcpy(req.RecordingConfiguration.Source.Description, "test");
strcpy(req.RecordingConfiguration.Source.Address, "test");
strcpy(req.RecordingConfiguration.Content, "test");
ret = onvif_trc_CreateRecording(&p_dev->onvif_device, &req, &res);
printf("onvif_trc_CreateRecording return ret = %d\n", ret);
if (!ret)
{
break;
}
// GetRecordings
trc_GetRecordings_RES res1;
memset(&res1, 0, sizeof(res1));
ret = onvif_trc_GetRecordings(&p_dev->onvif_device, NULL, &res1);
printf("onvif_trc_GetRecordings return ret = %d\n", ret);
if (!ret || NULL == res1.Recordings)
{
break;
}
// SetRecordingConfiguration
trc_SetRecordingConfiguration_REQ req2;
memset(&req2, 0, sizeof(req2));
strcpy(req2.RecordingToken, res.RecordingToken);
memcpy(&req2.RecordingConfiguration, &res1.Recordings->Recording.Configuration, sizeof(onvif_RecordingConfiguration));
ret = onvif_trc_SetRecordingConfiguration(&p_dev->onvif_device, &req2, NULL);
printf("onvif_trc_SetRecordingConfiguration return ret = %d\n", ret);
// GetRecordingConfiguration
trc_GetRecordingConfiguration_REQ req3;
trc_GetRecordingConfiguration_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.RecordingToken, res.RecordingToken);
ret = onvif_trc_GetRecordingConfiguration(&p_dev->onvif_device, &req3, &res3);
printf("onvif_trc_GetRecordingConfiguration return ret = %d\n", ret);
// GetRecordingOptions
trc_GetRecordingOptions_REQ req4;
trc_GetRecordingOptions_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
strcpy(req4.RecordingToken, res.RecordingToken);
ret = onvif_trc_GetRecordingOptions(&p_dev->onvif_device, &req4, &res4);
printf("onvif_trc_GetRecordingOptions return ret = %d\n", ret);
// CreateTrack
trc_CreateTrack_REQ req5;
trc_CreateTrack_RES res5;
memset(&req5, 0, sizeof(req5));
memset(&res5, 0, sizeof(res5));
strcpy(req5.RecordingToken, res.RecordingToken);
req5.TrackConfiguration.TrackType = TrackType_Video;
strcpy(req5.TrackConfiguration.Description, "trackdesc");
ret = onvif_trc_CreateTrack(&p_dev->onvif_device, &req5, &res5);
printf("onvif_trc_CreateTrack return ret = %d\n", ret);
if (ret)
{
// GetTrackConfiguration
trc_GetTrackConfiguration_REQ req6;
trc_GetTrackConfiguration_RES res6;
memset(&req6, 0, sizeof(req6));
memset(&res6, 0, sizeof(res6));
strcpy(req6.RecordingToken, res.RecordingToken);
strcpy(req6.TrackToken, res5.TrackToken);
ret = onvif_trc_GetTrackConfiguration(&p_dev->onvif_device, &req6, &res6);
printf("onvif_trc_GetTrackConfiguration return ret = %d\n", ret);
// SetTrackConfiguration
trc_SetTrackConfiguration_REQ req7;
memset(&req7, 0, sizeof(req7));
strcpy(req7.RecordingToken, res.RecordingToken);
strcpy(req7.TrackToken, res5.TrackToken);
memcpy(&req7.TrackConfiguration, &res6.TrackConfiguration, sizeof(onvif_TrackConfiguration));
ret = onvif_trc_SetTrackConfiguration(&p_dev->onvif_device, &req7, NULL);
printf("onvif_trc_SetTrackConfiguration return ret = %d\n", ret);
// DeleteTrack
trc_DeleteTrack_REQ req8;
memset(&req8, 0, sizeof(req8));
strcpy(req8.RecordingToken, res.RecordingToken);
strcpy(req8.TrackToken, res5.TrackToken);
ret = onvif_trc_DeleteTrack(&p_dev->onvif_device, &req8, NULL);
printf("onvif_trc_DeleteTrack return ret = %d\n", ret);
}
// CreateRecordingJob
trc_CreateRecordingJob_REQ req9;
trc_CreateRecordingJob_RES res9;
memset(&req9, 0, sizeof(req9));
memset(&res9, 0, sizeof(res9));
strcpy(req9.JobConfiguration.RecordingToken, res.RecordingToken);
strcpy(req9.JobConfiguration.Mode, "Idle");
req9.JobConfiguration.Priority = 1;
ret = onvif_trc_CreateRecordingJob(&p_dev->onvif_device, &req9, &res9);
printf("onvif_trc_CreateRecordingJob return ret = %d\n", ret);
// GetRecordingJobs
trc_GetRecordingJobs_RES res10;
memset(&res10, 0, sizeof(res10));
ret = onvif_trc_GetRecordingJobs(&p_dev->onvif_device, NULL, &res10);
printf("onvif_trc_GetRecordingJobs return ret = %d\n", ret);
if (ret && res10.RecordingJobs)
{
onvif_free_RecordingJobs(&res10.RecordingJobs);
}
// GetRecordingJobConfiguration
trc_GetRecordingJobConfiguration_REQ req11;
trc_GetRecordingJobConfiguration_RES res11;
memset(&req11, 0, sizeof(req11));
memset(&res11, 0, sizeof(res11));
strcpy(req11.JobToken, res9.JobToken);
ret = onvif_trc_GetRecordingJobConfiguration(&p_dev->onvif_device, &req11, &res11);
printf("onvif_trc_GetRecordingJobConfiguration return ret = %d\n", ret);
// SetRecordingJobConfiguration
trc_SetRecordingJobConfiguration_REQ req12;
trc_SetRecordingJobConfiguration_RES res12;
memset(&req12, 0, sizeof(req12));
memset(&res12, 0, sizeof(res12));
strcpy(req12.JobToken, res9.JobToken);
memcpy(&req12.JobConfiguration, &res11.JobConfiguration, sizeof(onvif_RecordingJobConfiguration));
ret = onvif_trc_SetRecordingJobConfiguration(&p_dev->onvif_device, &req12, &res12);
printf("onvif_trc_SetRecordingJobConfiguration return ret = %d\n", ret);
// SetRecordingJobMode
trc_SetRecordingJobMode_REQ req13;
memset(&req13, 0, sizeof(req13));
strcpy(req13.JobToken, res9.JobToken);
strcpy(req13.Mode, "Active");
ret = onvif_trc_SetRecordingJobMode(&p_dev->onvif_device, &req13, NULL);
printf("onvif_trc_SetRecordingJobMode return ret = %d\n", ret);
// GetRecordingJobState
trc_GetRecordingJobState_REQ req14;
trc_GetRecordingJobState_RES res14;
memset(&req14, 0, sizeof(req14));
memset(&res14, 0, sizeof(res14));
strcpy(req14.JobToken, res9.JobToken);
ret = onvif_trc_GetRecordingJobState(&p_dev->onvif_device, &req14, &res14);
printf("onvif_trc_GetRecordingJobState return ret = %d\n", ret);
// SetRecordingJobMode
trc_SetRecordingJobMode_REQ req15;
memset(&req15, 0, sizeof(req15));
strcpy(req15.JobToken, res9.JobToken);
strcpy(req15.Mode, "Idle");
ret = onvif_trc_SetRecordingJobMode(&p_dev->onvif_device, &req15, NULL);
printf("onvif_trc_SetRecordingJobMode return ret = %d\n", ret);
// DeleteRecordingJob
trc_DeleteRecordingJob_REQ req16;
memset(&req16, 0, sizeof(req16));
strcpy(req16.JobToken, res9.JobToken);
ret = onvif_trc_DeleteRecordingJob(&p_dev->onvif_device, &req16, NULL);
printf("onvif_trc_DeleteRecordingJob return ret = %d\n", ret);
// DeleteRecording
trc_DeleteRecording_REQ req17;
memset(&req17, 0, sizeof(req17));
strcpy(req17.RecordingToken, res.RecordingToken);
ret = onvif_trc_DeleteRecording(&p_dev->onvif_device, &req17, NULL);
printf("onvif_trc_DeleteRecording return ret = %d\n", ret);
onvif_free_Recordings(&res1.Recordings);
break;
}
}
void onvifSearchTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
tse_GetRecordingSummary_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tse_GetRecordingSummary(&p_dev->onvif_device, NULL, &res);
printf("onvif_tse_GetRecordingSummary return ret = %d\n", ret);
while (1)
{
tse_FindRecordings_REQ req1;
tse_FindRecordings_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
req1.KeepAliveTime = 10;
req1.MaxMatchesFlag = 1;
req1.MaxMatches = 1;
ret = onvif_tse_FindRecordings(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tse_FindRecordings return ret = %d\n", ret);
if (ret)
{
sleep(3);
tse_GetRecordingSearchResults_REQ req2;
tse_GetRecordingSearchResults_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.SearchToken, res1.SearchToken);
ret = onvif_tse_GetRecordingSearchResults(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tse_GetRecordingSearchResults return ret = %d\n", ret);
onvif_free_RecordingInformations(&res2.ResultList.RecordInformation);
tse_EndSearch_REQ req3;
tse_EndSearch_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.SearchToken, res1.SearchToken);
ret = onvif_tse_EndSearch(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tse_EndSearch return ret = %d\n", ret);
}
break;
}
while (1)
{
tse_FindEvents_REQ req1;
tse_FindEvents_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
req1.KeepAliveTime = 10;
req1.MaxMatchesFlag = 1;
req1.MaxMatches = 1;
ret = onvif_tse_FindEvents(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tse_FindEvents return ret = %d\n", ret);
if (ret)
{
sleep(3);
tse_GetEventSearchResults_REQ req2;
tse_GetEventSearchResults_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.SearchToken, res1.SearchToken);
ret = onvif_tse_GetEventSearchResults(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tse_GetEventSearchResults return ret = %d\n", ret);
onvif_free_FindEventResults(&res2.ResultList.Result);
tse_EndSearch_REQ req3;
tse_EndSearch_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.SearchToken, res1.SearchToken);
ret = onvif_tse_EndSearch(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tse_EndSearch return ret = %d\n", ret);
}
break;
}
while (1)
{
tse_FindMetadata_REQ req1;
tse_FindMetadata_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
req1.KeepAliveTime = 10;
req1.MaxMatchesFlag = 1;
req1.MaxMatches = 1;
ret = onvif_tse_FindMetadata(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tse_FindMetadata return ret = %d\n", ret);
if (ret)
{
sleep(3);
tse_GetMetadataSearchResults_REQ req2;
tse_GetMetadataSearchResults_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.SearchToken, res1.SearchToken);
ret = onvif_tse_GetMetadataSearchResults(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tse_GetMetadataSearchResults return ret = %d\n", ret);
onvif_free_FindMetadataResults(&res2.ResultList.Result);
tse_EndSearch_REQ req3;
tse_EndSearch_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.SearchToken, res1.SearchToken);
ret = onvif_tse_EndSearch(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tse_EndSearch return ret = %d\n", ret);
}
break;
}
while (1)
{
tse_FindPTZPosition_REQ req1;
tse_FindPTZPosition_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
req1.KeepAliveTime = 10;
req1.MaxMatchesFlag = 1;
req1.MaxMatches = 1;
ret = onvif_tse_FindPTZPosition(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tse_FindPTZPosition return ret = %d\n", ret);
if (ret)
{
sleep(3);
tse_GetPTZPositionSearchResults_REQ req2;
tse_GetPTZPositionSearchResults_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.SearchToken, res1.SearchToken);
ret = onvif_tse_GetPTZPositionSearchResults(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tse_GetPTZPositionSearchResults return ret = %d\n", ret);
onvif_free_FindPTZPositionResults(&res2.ResultList.Result);
tse_EndSearch_REQ req3;
tse_EndSearch_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
strcpy(req3.SearchToken, res1.SearchToken);
ret = onvif_tse_EndSearch(&p_dev->onvif_device, &req3, &res3);
printf("onvif_tse_EndSearch return ret = %d\n", ret);
}
break;
}
}
void onvifReplayTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
// GetReplayConfiguration
trp_GetReplayConfiguration_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trp_GetReplayConfiguration(&p_dev->onvif_device, NULL, &res);
printf("onvif_trp_GetReplayConfiguration return ret = %d\n", ret);
// SetReplayConfiguration
trp_SetReplayConfiguration_REQ req2;
memset(&req2, 0, sizeof(req2));
req2.Configuration.SessionTimeout = 120;
ret = onvif_trp_SetReplayConfiguration(&p_dev->onvif_device, &req2, NULL);
printf("onvif_trp_SetReplayConfiguration return ret = %d\n", ret);
// GetRecordings
trc_GetRecordings_RES res3;
memset(&res3, 0, sizeof(res3));
ret = onvif_trc_GetRecordings(&p_dev->onvif_device, NULL, &res3);
printf("onvif_trc_GetRecordings return ret = %d\n", ret);
if (res3.Recordings)
{
trp_GetReplayUri_REQ req4;
trp_GetReplayUri_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
strcpy(req4.RecordingToken, res3.Recordings->Recording.RecordingToken);
req4.StreamSetup.Stream = StreamType_RTP_Unicast;
req4.StreamSetup.Transport.Protocol = TransportProtocol_UDP;
ret = onvif_trp_GetReplayUri(&p_dev->onvif_device, &req4, &res4);
printf("onvif_trp_GetReplayUri return ret = %d\n", ret);
if (ret)
{
printf("replay uri : %s\n", res4.Uri);
}
onvif_free_Recordings(&res3.Recordings);
}
// SetReplayConfiguration
trp_SetReplayConfiguration_REQ req5;
memset(&req5, 0, sizeof(req5));
req2.Configuration.SessionTimeout = res.Configuration.SessionTimeout;
ret = onvif_trp_SetReplayConfiguration(&p_dev->onvif_device, &req5, NULL);
printf("onvif_trp_SetReplayConfiguration return ret = %d\n", ret);
}
#endif // end of PROFILE_G_SUPPORT
#ifdef THERMAL_SUPPORT
void onvifThermalTest(ONVIF_DEVICE_EX * p_dev)
{
BOOL ret;
// GetConfigurations
tth_GetConfigurations_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tth_GetConfigurations(&p_dev->onvif_device, NULL, &res);
printf("onvif_tth_GetConfigurations return ret = %d\n", ret);
if (res.Configurations)
{
// GetConfiguration
tth_GetConfiguration_REQ req1;
tth_GetConfiguration_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.VideoSourceToken, res.Configurations->token);
ret = onvif_tth_GetConfiguration(&p_dev->onvif_device, &req1, &res1);
printf("onvif_tth_GetConfiguration return ret = %d\n", ret);
// GetConfigurationOptions
tth_GetConfigurationOptions_REQ req2;
tth_GetConfigurationOptions_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.VideoSourceToken, res.Configurations->token);
ret = onvif_tth_GetConfigurationOptions(&p_dev->onvif_device, &req2, &res2);
printf("onvif_tth_GetConfigurationOptions return ret = %d\n", ret);
if (res2.Options.ColorPalette)
{
onvif_free_ColorPalettes(&res2.Options.ColorPalette);
}
if (res2.Options.NUCTable)
{
onvif_free_NUCTables(&res2.Options.NUCTable);
}
// SetConfiguration
tth_SetConfiguration_REQ req3;
memset(&req3, 0, sizeof(req3));
strcpy(req3.VideoSourceToken, res.Configurations->token);
memcpy(&req3.Configuration, &res.Configurations->Configuration, sizeof(onvif_ThermalConfiguration));
ret = onvif_tth_SetConfiguration(&p_dev->onvif_device, &req3, NULL);
printf("onvif_tth_SetConfiguration return ret = %d\n", ret);
// GetRadiometryConfiguration
tth_GetRadiometryConfiguration_REQ req4;
tth_GetRadiometryConfiguration_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
strcpy(req4.VideoSourceToken, res.Configurations->token);
ret = onvif_tth_GetRadiometryConfiguration(&p_dev->onvif_device, &req4, &res4);
printf("onvif_tth_GetRadiometryConfiguration return ret = %d\n", ret);
if (ret)
{
// onvif_tth_SetRadiometryConfiguration
tth_SetRadiometryConfiguration_REQ req5;
memset(&req5, 0, sizeof(req5));
strcpy(req5.VideoSourceToken, res.Configurations->token);
memcpy(&req5.Configuration, &res4.Configuration, sizeof(onvif_RadiometryConfiguration));
ret = onvif_tth_SetRadiometryConfiguration(&p_dev->onvif_device, &req5, NULL);
printf("onvif_tth_SetRadiometryConfiguration return ret = %d\n", ret);
}
// GetRadiometryConfigurationOptions
tth_GetRadiometryConfigurationOptions_REQ req6;
tth_GetRadiometryConfigurationOptions_RES res6;
memset(&req6, 0, sizeof(req6));
memset(&res6, 0, sizeof(res6));
strcpy(req6.VideoSourceToken, res.Configurations->token);
ret = onvif_tth_GetRadiometryConfigurationOptions(&p_dev->onvif_device, &req6, &res6);
printf("onvif_tth_GetRadiometryConfigurationOptions return ret = %d\n", ret);
onvif_free_ThermalConfigurations(&res.Configurations);
}
}
#endif // end of THERMAL_SUPPORT
#ifdef CREDENTIAL_SUPPORT
void onvifCredentialTest(ONVIF_DEVICE_EX * p_device)
{
uint32 i;
BOOL ret;
// GetCredentialList
tcr_GetCredentialList_REQ req;
tcr_GetCredentialList_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tcr_GetCredentialList(&p_device->onvif_device, &req, &res);
printf("onvif_tcr_GetCredentialList return ret = %d\n", ret);
if (!ret)
{
return;
}
// GetCredentials
tcr_GetCredentials_REQ req1;
tcr_GetCredentials_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
for (i = 0; i < res.sizeCredential; i++)
{
req1.sizeToken++;
strcpy(req1.Token[i], res.Credential[i].token);
}
ret = onvif_tcr_GetCredentials(&p_device->onvif_device, &req1, &res1);
printf("onvif_tcr_GetCredentials return ret = %d\n", ret);
// GetCredentialInfo
tcr_GetCredentialInfo_REQ req2;
tcr_GetCredentialInfo_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
for (i = 0; i < res.sizeCredential; i++)
{
req2.sizeToken++;
strcpy(req2.Token[i], res.Credential[i].token);
}
ret = onvif_tcr_GetCredentialInfo(&p_device->onvif_device, &req2, &res2);
printf("onvif_tcr_GetCredentialInfo return ret = %d\n", ret);
// GetCredentialInfoList
tcr_GetCredentialInfoList_REQ req3;
tcr_GetCredentialInfoList_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
ret = onvif_tcr_GetCredentialInfoList(&p_device->onvif_device, &req3, &res3);
printf("onvif_tcr_GetCredentialInfoList return ret = %d\n", ret);
if (res.sizeCredential > 0)
{
// GetCredentialState
tcr_GetCredentialState_REQ req4;
tcr_GetCredentialState_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
strcpy(req4.Token, res.Credential[0].token);
ret = onvif_tcr_GetCredentialState(&p_device->onvif_device, &req4, &res4);
printf("onvif_tcr_GetCredentialState return ret = %d\n", ret);
// EnableCredential
tcr_EnableCredential_REQ req5;
memset(&req5, 0, sizeof(req5));
strcpy(req5.Token, res.Credential[0].token);
ret = onvif_tcr_EnableCredential(&p_device->onvif_device, &req5, NULL);
printf("onvif_tcr_EnableCredential return ret = %d\n", ret);
// DisableCredential
tcr_DisableCredential_REQ req6;
memset(&req6, 0, sizeof(req6));
strcpy(req6.Token, res.Credential[0].token);
ret = onvif_tcr_DisableCredential(&p_device->onvif_device, &req6, NULL);
printf("onvif_tcr_DisableCredential return ret = %d\n", ret);
// ResetAntipassbackViolation
tcr_ResetAntipassbackViolation_REQ req7;
memset(&req7, 0, sizeof(req7));
strcpy(req7.CredentialToken, res.Credential[0].token);
ret = onvif_tcr_ResetAntipassbackViolation(&p_device->onvif_device, &req7, NULL);
printf("onvif_tcr_ResetAntipassbackViolation return ret = %d\n", ret);
// CreateCredential
tcr_CreateCredential_REQ req8;
tcr_CreateCredential_RES res8;
memset(&req8, 0, sizeof(req8));
memset(&res8, 0, sizeof(res8));
memcpy(&req8.Credential, &res.Credential[0], sizeof(onvif_Credential));
memcpy(&req8.State, &res4.State, sizeof(onvif_CredentialState));
strcpy(req8.Credential.token, "");
strcpy(req8.Credential.Description, "test");
ret = onvif_tcr_CreateCredential(&p_device->onvif_device, &req8, &res8);
printf("onvif_tcr_CreateCredential return ret = %d\n", ret);
// ModifyCredential
tcr_ModifyCredential_REQ req9;
memset(&req9, 0, sizeof(req9));
strcpy(req9.Credential.token, res8.Token);
strcpy(req9.Credential.Description, "test11");
ret = onvif_tcr_ModifyCredential(&p_device->onvif_device, &req9, NULL);
printf("onvif_tcr_ModifyCredential return ret = %d\n", ret);
// DeleteCredential
tcr_DeleteCredential_REQ req10;
memset(&req10, 0, sizeof(req10));
strcpy(req10.Token, res8.Token);
ret = onvif_tcr_DeleteCredential(&p_device->onvif_device, &req10, NULL);
printf("onvif_tcr_DeleteCredential return ret = %d\n", ret);
// GetSupportedFormatTypes
tcr_GetSupportedFormatTypes_REQ req11;
tcr_GetSupportedFormatTypes_RES res11;
memset(&req11, 0, sizeof(req11));
memset(&res11, 0, sizeof(res11));
strcpy(req11.CredentialIdentifierTypeName, "pt:Card");
ret = onvif_tcr_GetSupportedFormatTypes(&p_device->onvif_device, &req11, &res11);
printf("onvif_tcr_GetSupportedFormatTypes return ret = %d\n", ret);
// GetCredentialIdentifiers
tcr_GetCredentialIdentifiers_REQ req12;
tcr_GetCredentialIdentifiers_RES res12;
memset(&req12, 0, sizeof(req12));
memset(&res12, 0, sizeof(res12));
strcpy(req12.CredentialToken, res.Credential[0].token);
ret = onvif_tcr_GetCredentialIdentifiers(&p_device->onvif_device, &req12, &res12);
printf("onvif_tcr_GetCredentialIdentifiers return ret = %d\n", ret);
// GetCredentialAccessProfiles
tcr_GetCredentialAccessProfiles_REQ req13;
tcr_GetCredentialAccessProfiles_RES res13;
memset(&req13, 0, sizeof(req13));
memset(&res13, 0, sizeof(res13));
strcpy(req13.CredentialToken, res.Credential[0].token);
ret = onvif_tcr_GetCredentialAccessProfiles(&p_device->onvif_device, &req13, &res13);
printf("onvif_tcr_GetCredentialAccessProfiles return ret = %d\n", ret);
}
}
#endif // end of CREDENTIAL_SUPPORT
#ifdef ACCESS_RULES
void onvifAccessRulesTest(ONVIF_DEVICE_EX * p_device)
{
uint32 i;
BOOL ret;
// GetAccessProfileList
tar_GetAccessProfileList_REQ req;
tar_GetAccessProfileList_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tar_GetAccessProfileList(&p_device->onvif_device, &req, &res);
printf("onvif_tar_GetAccessProfileList return ret = %d\n", ret);
if (!ret)
{
return;
}
// GetAccessProfiles
tar_GetAccessProfiles_REQ req1;
tar_GetAccessProfiles_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
for (i = 0; i < res.sizeAccessProfile; i++)
{
req1.sizeToken++;
strcpy(req1.Token[i], res.AccessProfile[i].token);
}
ret = onvif_tar_GetAccessProfiles(&p_device->onvif_device, &req1, &res1);
printf("onvif_tar_GetAccessProfiles return ret = %d\n", ret);
// GetAccessProfileInfoList
tar_GetAccessProfileInfoList_REQ req2;
tar_GetAccessProfileInfoList_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
ret = onvif_tar_GetAccessProfileInfoList(&p_device->onvif_device, &req2, &res2);
printf("onvif_tar_GetAccessProfileInfoList return ret = %d\n", ret);
// GetAccessProfileInfo
tar_GetAccessProfileInfo_REQ req3;
tar_GetAccessProfileInfo_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
for (i = 0; i < res.sizeAccessProfile; i++)
{
req1.sizeToken++;
strcpy(req3.Token[i], res.AccessProfile[i].token);
}
ret = onvif_tar_GetAccessProfileInfo(&p_device->onvif_device, &req3, &res3);
printf("onvif_tar_GetAccessProfileInfo return ret = %d\n", ret);
if (res.sizeAccessProfile > 0)
{
// CreateAccessProfile
tar_CreateAccessProfile_REQ req4;
tar_CreateAccessProfile_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
memcpy(&req4.AccessProfile, &res.AccessProfile[0], sizeof(onvif_AccessProfile));
strcpy(req4.AccessProfile.token, "");
strcpy(req4.AccessProfile.Name, "test");
strcpy(req4.AccessProfile.Description, "test");
ret = onvif_tar_CreateAccessProfile(&p_device->onvif_device, &req4, &res4);
printf("onvif_tar_CreateAccessProfile return ret = %d\n", ret);
// ModifyAccessProfile
tar_ModifyAccessProfile_REQ req5;
memset(&req5, 0, sizeof(req5));
memcpy(&req5.AccessProfile, &res.AccessProfile[0], sizeof(onvif_AccessProfile));
strcpy(req5.AccessProfile.token, res4.Token);
strcpy(req5.AccessProfile.Name, "test11");
strcpy(req5.AccessProfile.Description, "test11");
ret = onvif_tar_ModifyAccessProfile(&p_device->onvif_device, &req5, NULL);
printf("onvif_tar_ModifyAccessProfile return ret = %d\n", ret);
// DeleteAccessProfile
tar_DeleteAccessProfile_REQ req6;
memset(&req6, 0, sizeof(req6));
strcpy(req6.Token, res4.Token);
ret = onvif_tar_DeleteAccessProfile(&p_device->onvif_device, &req6, NULL);
printf("onvif_tar_DeleteAccessProfile return ret = %d\n", ret);
}
}
#endif // end of ACCESS_RULES
#ifdef SCHEDULE_SUPPORT
void onvifScheduleTest(ONVIF_DEVICE_EX * p_device)
{
uint32 i;
BOOL ret;
// GetScheduleList
tsc_GetScheduleList_REQ req;
tsc_GetScheduleList_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tsc_GetScheduleList(&p_device->onvif_device, &req, &res);
printf("onvif_tsc_GetScheduleList return ret = %d\n", ret);
if (!ret)
{
return;
}
// GetSchedules
tsc_GetSchedules_REQ req1;
tsc_GetSchedules_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
for (i = 0; i < res.sizeSchedule; i++)
{
req1.sizeToken++;
strcpy(req1.Token[i], res.Schedule[i].token);
}
ret = onvif_tsc_GetSchedules(&p_device->onvif_device, &req1, &res1);
printf("onvif_tsc_GetSchedules return ret = %d\n", ret);
// GetScheduleInfoList
tsc_GetScheduleInfoList_REQ req2;
tsc_GetScheduleInfoList_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
ret = onvif_tsc_GetScheduleInfoList(&p_device->onvif_device, &req2, &res2);
printf("onvif_tsc_GetScheduleInfoList return ret = %d\n", ret);
// GetScheduleInfo
tsc_GetScheduleInfo_REQ req3;
tsc_GetScheduleInfo_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
for (i = 0; i < res.sizeSchedule; i++)
{
req1.sizeToken++;
strcpy(req3.Token[i], res.Schedule[i].token);
}
ret = onvif_tsc_GetScheduleInfo(&p_device->onvif_device, &req3, &res3);
printf("onvif_tsc_GetScheduleInfo return ret = %d\n", ret);
// CreateSchedule
tsc_CreateSchedule_REQ req4;
tsc_CreateSchedule_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
strcpy(req4.Schedule.token, "");
strcpy(req4.Schedule.Name, "test");
req4.Schedule.DescriptionFlag = 1;
strcpy(req4.Schedule.Description, "test");
strcpy(req4.Schedule.Standard, "BEGIN:VCALENDAR\r\n"
"BEGIN:VEVENT\r\n"
"SUMMARY:Access 24*7\r\n"
"DTSTART:19700101T000000\r\n"
"DTEND:19700102T000000\r\n"
"RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\r\n"
"END:VEVENT\r\n"
"END:VCALENDAR");
ret = onvif_tsc_CreateSchedule(&p_device->onvif_device, &req4, &res4);
printf("onvif_tsc_CreateSchedule return ret = %d\n", ret);
// ModifySchedule
tsc_ModifySchedule_REQ req5;
memset(&req5, 0, sizeof(req5));
strcpy(req5.Schedule.token, res4.Token);
strcpy(req5.Schedule.Name, "test11");
req5.Schedule.DescriptionFlag = 1;
strcpy(req5.Schedule.Description, "test11");
strcpy(req4.Schedule.Standard, "BEGIN:VCALENDAR\r\n"
"BEGIN:VEVENT\r\n"
"SUMMARY:Access 24*7\r\n"
"DTSTART:19700101T000000\r\n"
"DTEND:19700102T000000\r\n"
"RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\r\n"
"END:VEVENT\r\n"
"END:VCALENDAR");
ret = onvif_tsc_ModifySchedule(&p_device->onvif_device, &req5, NULL);
printf("onvif_tsc_ModifySchedule return ret = %d\n", ret);
// GetScheduleState
tsc_GetScheduleState_REQ req6;
tsc_GetScheduleState_RES res6;
memset(&req6, 0, sizeof(req6));
memset(&res6, 0, sizeof(res6));
strcpy(req6.Token, res4.Token);
ret = onvif_tsc_GetScheduleState(&p_device->onvif_device, &req6, &res6);
printf("onvif_tsc_GetScheduleState return ret = %d\n", ret);
// DeleteSchedule
tsc_DeleteSchedule_REQ req7;
memset(&req7, 0, sizeof(req7));
strcpy(req7.Token, res4.Token);
ret = onvif_tsc_DeleteSchedule(&p_device->onvif_device, &req7, NULL);
printf("onvif_tsc_DeleteSchedule return ret = %d\n", ret);
}
void onvifSpecialDayGroupTest(ONVIF_DEVICE_EX * p_device)
{
uint32 i;
BOOL ret;
// GetSpecialDayGroupList
tsc_GetSpecialDayGroupList_REQ req;
tsc_GetSpecialDayGroupList_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
ret = onvif_tsc_GetSpecialDayGroupList(&p_device->onvif_device, &req, &res);
printf("onvif_tsc_GetSpecialDayGroupList return ret = %d\n", ret);
if (!ret)
{
return;
}
// GetSpecialDayGroups
tsc_GetSpecialDayGroups_REQ req1;
tsc_GetSpecialDayGroups_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
for (i = 0; i < res.sizeSpecialDayGroup; i++)
{
req1.sizeToken++;
strcpy(req1.Token[i], res.SpecialDayGroup[i].token);
}
ret = onvif_tsc_GetSpecialDayGroups(&p_device->onvif_device, &req1, &res1);
printf("onvif_tsc_GetSpecialDayGroups return ret = %d\n", ret);
// GetSpecialDayGroupInfoList
tsc_GetSpecialDayGroupInfoList_REQ req2;
tsc_GetSpecialDayGroupInfoList_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
ret = onvif_tsc_GetSpecialDayGroupInfoList(&p_device->onvif_device, &req2, &res2);
printf("onvif_tsc_GetSpecialDayGroupInfoList return ret = %d\n", ret);
// GetSpecialDayGroupInfo
tsc_GetSpecialDayGroupInfo_REQ req3;
tsc_GetSpecialDayGroupInfo_RES res3;
memset(&req3, 0, sizeof(req3));
memset(&res3, 0, sizeof(res3));
for (i = 0; i < res.sizeSpecialDayGroup; i++)
{
req1.sizeToken++;
strcpy(req3.Token[i], res.SpecialDayGroup[i].token);
}
ret = onvif_tsc_GetSpecialDayGroupInfo(&p_device->onvif_device, &req3, &res3);
printf("onvif_tsc_GetSpecialDayGroupInfo return ret = %d\n", ret);
// CreateSpecialDayGroup
tsc_CreateSpecialDayGroup_REQ req4;
tsc_CreateSpecialDayGroup_RES res4;
memset(&req4, 0, sizeof(req4));
memset(&res4, 0, sizeof(res4));
strcpy(req4.SpecialDayGroup.token, "");
strcpy(req4.SpecialDayGroup.Name, "test");
req4.SpecialDayGroup.DescriptionFlag = 1;
strcpy(req4.SpecialDayGroup.Description, "test");
req4.SpecialDayGroup.DaysFlag = 1;
strcpy(req4.SpecialDayGroup.Days, "BEGIN:VCALENDAR\r\n"
"PRODID:VERSION:2.0\r\n"
"BEGIN:VEVENT\r\n"
"SUMMARY:Christmas day\r\n"
"DTSTART:20141225T000000\r\n"
"DTEND:20141226T000000\r\n"
"UID:Holiday@ONVIF.com\r\n"
"END:VEVENT\r\n"
"END:VCALENDAR\r\n");
ret = onvif_tsc_CreateSpecialDayGroup(&p_device->onvif_device, &req4, &res4);
printf("onvif_tsc_CreateSpecialDayGroup return ret = %d\n", ret);
// ModifySpecialDayGroup
tsc_ModifySpecialDayGroup_REQ req5;
memset(&req5, 0, sizeof(req5));
strcpy(req5.SpecialDayGroup.token, res4.Token);
strcpy(req5.SpecialDayGroup.Name, "test11");
req5.SpecialDayGroup.DescriptionFlag = 1;
strcpy(req5.SpecialDayGroup.Description, "test11");
req5.SpecialDayGroup.DaysFlag = 1;
strcpy(req4.SpecialDayGroup.Days, "BEGIN:VCALENDAR\r\n"
"BEGIN:VEVENT\r\n"
"SUMMARY:Access 24*7\r\n"
"DTSTART:19700101T000000\r\n"
"DTEND:19700102T000000\r\n"
"RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU\r\n"
"END:VEVENT\r\n"
"END:VCALENDAR");
ret = onvif_tsc_ModifySpecialDayGroup(&p_device->onvif_device, &req5, NULL);
printf("onvif_tsc_ModifySpecialDayGroup return ret = %d\n", ret);
// DeleteSpecialDayGroup
tsc_DeleteSpecialDayGroup_REQ req6;
memset(&req6, 0, sizeof(req6));
strcpy(req6.Token, res4.Token);
ret = onvif_tsc_DeleteSpecialDayGroup(&p_device->onvif_device, &req6, NULL);
printf("onvif_tsc_DeleteSpecialDayGroup return ret = %d\n", ret);
}
#endif // end of SCHEDULE_SUPPORT
#ifdef RECEIVER_SUPPORT
void onvifReceiverTest(ONVIF_DEVICE_EX * p_device)
{
BOOL ret;
// GetReceivers
trv_GetReceivers_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trv_GetReceivers(&p_device->onvif_device, NULL, &res);
printf("onvif_trv_GetReceivers return ret = %d\n", ret);
onvif_free_Receivers(&res.Receivers);
// CreateReceiver
trv_CreateReceiver_REQ req1;
trv_CreateReceiver_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
req1.Configuration.Mode = ReceiverMode_NeverConnect;
strcpy(req1.Configuration.MediaUri, "rtsp://192.168.0.1/test.264");
req1.Configuration.StreamSetup.Stream = StreamType_RTP_Unicast;
req1.Configuration.StreamSetup.Transport.Protocol = TransportProtocol_RTSP;
ret = onvif_trv_CreateReceiver(&p_device->onvif_device, &req1, &res1);
printf("onvif_trv_CreateReceiver return ret = %d\n", ret);
if (!ret)
{
return;
}
// GetReceiver
trv_GetReceiver_REQ req2;
trv_GetReceiver_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ReceiverToken, res1.Receiver.Token);
ret = onvif_trv_GetReceiver(&p_device->onvif_device, &req2, &res2);
printf("onvif_trv_GetReceiver return ret = %d\n", ret);
// ConfigureReceiver
trv_ConfigureReceiver_REQ req3;
memset(&req3, 0, sizeof(req3));
strcpy(req3.ReceiverToken, res1.Receiver.Token);
memcpy(&req3.Configuration, &res1.Receiver.Configuration, sizeof(onvif_ReceiverConfiguration));
strcpy(req3.Configuration.MediaUri, "rtsp://192.168.0.2/test.264");
ret = onvif_trv_ConfigureReceiver(&p_device->onvif_device, &req3, NULL);
printf("onvif_trv_ConfigureReceiver return ret = %d\n", ret);
// SetReceiverMode
trv_SetReceiverMode_REQ req4;
memset(&req4, 0, sizeof(req4));
strcpy(req4.ReceiverToken, res1.Receiver.Token);
req4.Mode = ReceiverMode_AlwaysConnect;
ret = onvif_trv_SetReceiverMode(&p_device->onvif_device, &req4, NULL);
printf("onvif_trv_SetReceiverMode return ret = %d\n", ret);
// GetReceiverState
trv_GetReceiverState_REQ req5;
trv_GetReceiverState_RES res5;
memset(&req5, 0, sizeof(req5));
memset(&res5, 0, sizeof(res5));
strcpy(req5.ReceiverToken, res1.Receiver.Token);
ret = onvif_trv_GetReceiverState(&p_device->onvif_device, &req5, &res5);
printf("onvif_trv_GetReceiverState return ret = %d\n", ret);
// DeleteReceiver
trv_DeleteReceiver_REQ req6;
memset(&req6, 0, sizeof(req6));
strcpy(req6.ReceiverToken, res1.Receiver.Token);
ret = onvif_trv_DeleteReceiver(&p_device->onvif_device, &req6, NULL);
printf("onvif_trv_DeleteReceiver return ret = %d\n", ret);
}
#endif // end of RECEIVER_SUPPORT
#ifdef IPFILTER_SUPPORT
void onvifIPAddressFilterTest(ONVIF_DEVICE_EX * p_device)
{
BOOL ret;
// GetIPAddressFilter
tds_GetIPAddressFilter_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tds_GetIPAddressFilter(&p_device->onvif_device, NULL, &res);
printf("onvif_tds_GetIPAddressFilter return ret = %d\n", ret);
// SetIPAddressFilter
tds_SetIPAddressFilter_REQ req1;
memset(&req1, 0, sizeof(req1));
memcpy(&req1.IPAddressFilter, &res.IPAddressFilter, sizeof(onvif_IPAddressFilter));
strcpy(req1.IPAddressFilter.IPv4Address[0].Address, "192.168.10.1");
req1.IPAddressFilter.IPv4Address[0].PrefixLength = 24;
ret = onvif_tds_SetIPAddressFilter(&p_device->onvif_device, &req1, NULL);
printf("onvif_tds_SetIPAddressFilter return ret = %d\n", ret);
// AddIPAddressFilter
tds_AddIPAddressFilter_REQ req2;
memset(&req2, 0, sizeof(req2));
strcpy(req2.IPAddressFilter.IPv4Address[0].Address, "192.168.10.2");
req2.IPAddressFilter.IPv4Address[0].PrefixLength = 24;
ret = onvif_tds_AddIPAddressFilter(&p_device->onvif_device, &req2, NULL);
printf("onvif_tds_AddIPAddressFilter return ret = %d\n", ret);
// RemoveIPAddressFilter
tds_RemoveIPAddressFilter_REQ req3;
memset(&req3, 0, sizeof(req3));
memcpy(&req3.IPAddressFilter, &req2.IPAddressFilter, sizeof(onvif_IPAddressFilter));
ret = onvif_tds_RemoveIPAddressFilter(&p_device->onvif_device, &req3, NULL);
printf("onvif_tds_RemoveIPAddressFilter return ret = %d\n", ret);
// SetIPAddressFilter
tds_SetIPAddressFilter_REQ req4;
memset(&req4, 0, sizeof(req4));
memcpy(&req1.IPAddressFilter, &res.IPAddressFilter, sizeof(onvif_IPAddressFilter));
ret = onvif_tds_SetIPAddressFilter(&p_device->onvif_device, &req4, NULL);
printf("onvif_tds_SetIPAddressFilter return ret = %d\n", ret);
// GetIPAddressFilter
tds_GetIPAddressFilter_RES res5;
memset(&res5, 0, sizeof(res5));
ret = onvif_tds_GetIPAddressFilter(&p_device->onvif_device, NULL, &res5);
printf("onvif_tds_GetIPAddressFilter return ret = %d\n", ret);
}
#endif // end of IPFILTER_SUPPORT
#ifdef PROVISIONING_SUPPORT
void onvifProvisioningTest(ONVIF_DEVICE_EX * p_device)
{
BOOL ret;
// GetVideoSources
trt_GetVideoSources_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_trt_GetVideoSources(&p_device->onvif_device, NULL, &res);
printf("onvif_trt_GetVideoSources return ret = %d\n", ret);
if (res.VideoSources)
{
// GetUsage
tpv_GetUsage_REQ req1;
tpv_GetUsage_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.VideoSource, res.VideoSources->VideoSource.token);
ret = onvif_tpv_GetUsage(&p_device->onvif_device, &req1, &res1);
printf("onvif_tpv_GetUsage return ret = %d\n", ret);
// PanMove
tpv_PanMove_REQ req2;
memset(&req2, 0, sizeof(req2));
strcpy(req2.VideoSource, res.VideoSources->VideoSource.token);
req2.Direction = PanDirection_Left;
ret = onvif_tpv_PanMove(&p_device->onvif_device, &req2, NULL);
printf("onvif_tpv_PanMove return ret = %d\n", ret);
// Stop
tpv_Stop_REQ req3;
memset(&req3, 0, sizeof(req3));
strcpy(req3.VideoSource, res.VideoSources->VideoSource.token);
ret = onvif_tpv_Stop(&p_device->onvif_device, &req3, NULL);
printf("onvif_tpv_Stop return ret = %d\n", ret);
// TiltMove
tpv_TiltMove_REQ req4;
memset(&req4, 0, sizeof(req4));
strcpy(req4.VideoSource, res.VideoSources->VideoSource.token);
req4.Direction = TiltDirection_Up;
ret = onvif_tpv_TiltMove(&p_device->onvif_device, &req4, NULL);
printf("onvif_tpv_TiltMove return ret = %d\n", ret);
// Stop
ret = onvif_tpv_Stop(&p_device->onvif_device, &req3, NULL);
printf("onvif_tpv_Stop return ret = %d\n", ret);
// ZoomMove
tpv_ZoomMove_REQ req5;
memset(&req5, 0, sizeof(req5));
strcpy(req5.VideoSource, res.VideoSources->VideoSource.token);
req5.Direction = ZoomDirection_Wide;
ret = onvif_tpv_ZoomMove(&p_device->onvif_device, &req5, NULL);
printf("onvif_tpv_ZoomMove return ret = %d\n", ret);
// Stop
ret = onvif_tpv_Stop(&p_device->onvif_device, &req3, NULL);
printf("onvif_tpv_Stop return ret = %d\n", ret);
// RollMove
tpv_RollMove_REQ req6;
memset(&req6, 0, sizeof(req6));
strcpy(req6.VideoSource, res.VideoSources->VideoSource.token);
req6.Direction = RollDirection_Clockwise;
ret = onvif_tpv_RollMove(&p_device->onvif_device, &req6, NULL);
printf("onvif_tpv_RollMove return ret = %d\n", ret);
// Stop
ret = onvif_tpv_Stop(&p_device->onvif_device, &req3, NULL);
printf("onvif_tpv_Stop return ret = %d\n", ret);
// FocusMove
tpv_FocusMove_REQ req7;
memset(&req7, 0, sizeof(req7));
strcpy(req7.VideoSource, res.VideoSources->VideoSource.token);
req7.Direction = FocusDirection_Near;
ret = onvif_tpv_FocusMove(&p_device->onvif_device, &req7, NULL);
printf("onvif_tpv_FocusMove return ret = %d\n", ret);
// Stop
ret = onvif_tpv_Stop(&p_device->onvif_device, &req3, NULL);
printf("onvif_tpv_Stop return ret = %d\n", ret);
}
onvif_free_VideoSources(&res.VideoSources);
}
#endif // end of PROVISIONING_SUPPORT
void onvifSystemMaintainTest(ONVIF_DEVICE_EX * p_device)
{
BOOL ret;
ret = SystemBackup(&p_device->onvif_device, "onvifsystem.backup");
printf("SystemBackup return ret = %d\n", ret);
if (ret)
{
//ret = SystemRestore(&p_device->onvif_device, "onvifsystem.backup");
//printf("SystemRestore return ret = %d\n", ret);
}
tds_GetSystemLog_REQ req;
tds_GetSystemLog_RES res;
req.LogType = SystemLogType_System;
ret = onvif_tds_GetSystemLog(&p_device->onvif_device, &req, &res);
printf("onvif_tds_GetSystemLog return ret = %d\n", ret);
req.LogType = SystemLogType_Access;
ret = onvif_tds_GetSystemLog(&p_device->onvif_device, &req, &res);
printf("onvif_tds_GetSystemLog return ret = %d\n", ret);
}
BOOL parseEventTopic1(XMLN * p_node, LINKED_LIST * p_list)
{
BOOL ret = FALSE;
XMLN * p_child = p_node;
while (p_child)
{
//if (p_child->f_attrib &&
// p_child->f_attrib->name &&
// p_child->f_attrib->data &&
// soap_strcmp(p_child->f_attrib->name, "topic") == 0 &&
// strcasecmp(p_child->f_attrib->data, "true") == 0)
if (soap_strcmp(p_child->name, "MessageDescription") != 0)
{
ret = TRUE;
h_list_add_at_back(p_list, p_child);
p_child = p_child->f_child;
}
else
{
break;
}
}
return ret;
}
void printEventTopic(LINKED_LIST * p_list)
{
char topic[512] = {'\0'};
LINKED_NODE * p_node = h_list_lookup_start(p_list);
while (p_node)
{
XMLN * p_xmln = (XMLN *)p_node->p_data;
if (topic[0] != '\0')
{
strcat(topic, "/");
strcat(topic, p_xmln->name);
}
else
{
strcpy(topic, p_xmln->name);
}
p_node = h_list_lookup_next(p_list, p_node);
}
h_list_lookup_end(p_list);
printf("topic : %s\r\n", topic);
}
void parseEventTopic(char * xml)
{
LINKED_LIST * p_list = h_list_create(FALSE);
XMLN * p_root = xxx_hxml_parse(xml, (int)strlen(xml));
if (p_root)
{
XMLN * p_child = p_root->f_child;
while (p_child)
{
if (parseEventTopic1(p_child, p_list))
{
printEventTopic(p_list);
}
LINKED_NODE * p_node = h_list_get_from_back(p_list);
if (p_node)
{
p_child = (XMLN *)p_node->p_data;
h_list_remove_from_back(p_list);
if (p_child)
{
p_child = p_child->next;
}
while (NULL == p_child)
{
p_node = h_list_get_from_back(p_list);
if (p_node)
{
p_child = (XMLN *)p_node->p_data;
h_list_remove_from_back(p_list);
if (p_child)
{
p_child = p_child->next;
}
}
else
{
break;
}
}
}
else
{
p_child = p_child->next;
}
}
}
xml_node_del(p_root);
h_list_free_container(p_list);
}
void onvifEventTest(ONVIF_DEVICE_EX * p_device)
{
BOOL ret;
tev_GetEventProperties_RES res;
memset(&res, 0, sizeof(res));
ret = onvif_tev_GetEventProperties(&p_device->onvif_device, NULL, &res);
printf("onvif_tev_GetEventProperties return ret = %d\r\n", ret);
if (ret)
{
parseEventTopic(res.TopicSet);
}
// printf("TopicSet = %s\r\n", res.TopicSet);
FreeBuff((uint8 *)res.TopicSet);
if (p_device->onvif_device.Capabilities.events.WSPullPointSupport == 1)
{
ret = CreatePullPointSubscription(&p_device->onvif_device);
printf("CreatePullPointSubscription return ret = %d\r\n", ret);
tev_PullMessages_RES res2;
memset(&res2, 0, sizeof(res2));
ret = PullMessages(&p_device->onvif_device, 60, 1, &res2);
printf("PullMessages return ret = %d\r\n", ret);
onvif_free_NotificationMessages(&res2.NotifyMessages);
}
}
void onvifPTZTest(ONVIF_DEVICE_EX * p_device)
{
BOOL ret;
if (p_device->onvif_device.curProfile->ptz_cfg)
{
// GetConfigurationOptions
ptz_GetConfigurationOptions_REQ req;
ptz_GetConfigurationOptions_RES res;
memset(&res, 0, sizeof(res));
strcpy(req.ConfigurationToken, p_device->onvif_device.curProfile->ptz_cfg->Configuration.token);
ret = onvif_ptz_GetConfigurationOptions(&p_device->onvif_device, &req, &res);
printf("onvif_ptz_GetConfigurationOptions return ret = %d\n", ret);
}
if (p_device->onvif_device.ptz_node)
{
// GetNode
ptz_GetNode_REQ req1;
ptz_GetNode_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.NodeToken, p_device->onvif_device.ptz_node->PTZNode.token);
ret = onvif_ptz_GetNode(&p_device->onvif_device, &req1, &res1);
printf("onvif_ptz_GetNode return ret = %d\n", ret);
if (p_device->onvif_device.ptz_node->PTZNode.GeoMove &&
p_device->onvif_device.profiles)
{
// GeoMove
ptz_GeoMove_REQ req2;
memset(&req2, 0, sizeof(req2));
strcpy(req2.ProfileToken, p_device->onvif_device.profiles->token);
req2.Target.lonFlag = 1;
req2.Target.lon = 20.2;
req2.Target.latFlag = 1;
req2.Target.lat = 84.3;
req2.Target.elevationFlag = 1;
req2.Target.elevation = 100.0;
ret = onvif_ptz_GeoMove(&p_device->onvif_device, &req2, NULL);
printf("onvif_ptz_GeoMove return ret = %d\n", ret);
}
}
}
void onvifPTZTest2(ONVIF_DEVICE_EX * p_device)
{
BOOL ret;
// CreatePresetTour
ptz_CreatePresetTour_REQ req;
ptz_CreatePresetTour_RES res;
memset(&req, 0, sizeof(req));
memset(&res, 0, sizeof(res));
strcpy(req.ProfileToken, p_device->onvif_device.curProfile->token);
ret = onvif_ptz_CreatePresetTour(&p_device->onvif_device, &req, &res);
printf("onvif_ptz_CreatePresetTour return ret = %d\n", ret);
if (!ret)
{
return;
}
// GetPresetTours
ptz_GetPresetTours_REQ req1;
ptz_GetPresetTours_RES res1;
memset(&req1, 0, sizeof(req1));
memset(&res1, 0, sizeof(res1));
strcpy(req1.ProfileToken, p_device->onvif_device.curProfile->token);
ret = onvif_ptz_GetPresetTours(&p_device->onvif_device, &req1, &res1);
printf("onvif_ptz_GetPresetTours return ret = %d\n", ret);
onvif_free_PresetTours(&res1.PresetTour);
// GetPresetTour
ptz_GetPresetTour_REQ req2;
ptz_GetPresetTour_RES res2;
memset(&req2, 0, sizeof(req2));
memset(&res2, 0, sizeof(res2));
strcpy(req2.ProfileToken, p_device->onvif_device.curProfile->token);
strcpy(req2.PresetTourToken, res.PresetTourToken);
ret = onvif_ptz_GetPresetTour(&p_device->onvif_device, &req2, &res2);
printf("onvif_ptz_GetPresetTour return ret = %d\n", ret);
// ModifyPresetTour
ptz_ModifyPresetTour_REQ req3;
memset(&req3, 0, sizeof(req3));
strcpy(req3.ProfileToken, p_device->onvif_device.curProfile->token);
memcpy(&req3.PresetTour, &res2.PresetTour, sizeof(onvif_PresetTour));
strcpy(req3.PresetTour.Name, "test");
ret = onvif_ptz_ModifyPresetTour(&p_device->onvif_device, &req3, NULL);
printf("onvif_ptz_ModifyPresetTour return ret = %d\n", ret);
// OperatePresetTour
ptz_OperatePresetTour_REQ req4;
memset(&req4, 0, sizeof(req4));
strcpy(req4.ProfileToken, p_device->onvif_device.curProfile->token);
strcpy(req4.PresetTourToken, res.PresetTourToken);
req4.Operation = PTZPresetTourOperation_Start;
ret = onvif_ptz_OperatePresetTour(&p_device->onvif_device, &req4, NULL);
printf("onvif_ptz_OperatePresetTour return ret = %d\n", ret);
// GetPresetTourOptions
ptz_GetPresetTourOptions_REQ req5;
ptz_GetPresetTourOptions_RES res5;
memset(&req5, 0, sizeof(req5));
memset(&res5, 0, sizeof(res5));
strcpy(req5.ProfileToken, p_device->onvif_device.curProfile->token);
strcpy(req5.PresetTourToken, res.PresetTourToken);
ret = onvif_ptz_GetPresetTourOptions(&p_device->onvif_device, &req5, &res5);
printf("onvif_ptz_GetPresetTourOptions return ret = %d\n", ret);
// GetPresetTour
ptz_GetPresetTour_REQ req6;
ptz_GetPresetTour_RES res6;
memset(&req6, 0, sizeof(req6));
memset(&res6, 0, sizeof(res6));
strcpy(req6.ProfileToken, p_device->onvif_device.curProfile->token);
strcpy(req6.PresetTourToken, res.PresetTourToken);
ret = onvif_ptz_GetPresetTour(&p_device->onvif_device, &req6, &res6);
printf("onvif_ptz_GetPresetTour return ret = %d\n", ret);
// RemovePresetTour
ptz_RemovePresetTour_REQ req7;
memset(&req7, 0, sizeof(req7));
strcpy(req7.ProfileToken, p_device->onvif_device.curProfile->token);
strcpy(req7.PresetTourToken, res.PresetTourToken);
ret = onvif_ptz_RemovePresetTour(&p_device->onvif_device, &req7, NULL);
printf("onvif_ptz_RemovePresetTour return ret = %d\n", ret);
}
BOOL mediaProfile2Profile(ONVIF_DEVICE_EX * p_device)
{
onvif_free_profiles(&p_device->onvif_device.profiles);
MediaProfileList * p_mediaProfile = p_device->onvif_device.media_profiles;
while (p_mediaProfile)
{
ONVIF_PROFILE * p_profile = onvif_add_profile(&p_device->onvif_device.profiles);
if (p_profile)
{
p_profile->fixed = p_mediaProfile->MediaProfile.fixed;
strcpy(p_profile->name, p_mediaProfile->MediaProfile.Name);
strcpy(p_profile->token, p_mediaProfile->MediaProfile.token);
strcpy(p_profile->stream_uri, p_mediaProfile->MediaProfile.stream_uri);
}
p_mediaProfile = p_mediaProfile->next;
}
return TRUE;
}
BOOL getDevInfo1(ONVIF_DEVICE_EX * p_device)
{
GetProfiles(&p_device->onvif_device);
GetStreamUris(&p_device->onvif_device, TransportProtocol_RTSP);
return TRUE;
}
BOOL getDevInfo2(ONVIF_DEVICE_EX * p_device)
{
if (!tr2_GetProfiles(&p_device->onvif_device))
{
return FALSE;
}
if (!tr2_GetStreamUris(&p_device->onvif_device, "RTSP"))
{
return FALSE;
}
mediaProfile2Profile(p_device);
return TRUE;
}
void * getDevInfoThread(void * argv)
{
char profileToken[ONVIF_TOKEN_LEN];
ONVIF_PROFILE * p_profile = NULL;
ONVIF_DEVICE_EX * p_device = (ONVIF_DEVICE_EX *) argv;
GetSystemDateAndTime(&p_device->onvif_device);
GetCapabilities(&p_device->onvif_device);
GetServices(&p_device->onvif_device);
GetDeviceInformation(&p_device->onvif_device);
GetVideoSources(&p_device->onvif_device);
GetImagingSettings(&p_device->onvif_device);
GetVideoSourceConfigurations(&p_device->onvif_device);
GetVideoEncoderConfigurations(&p_device->onvif_device);
if (GetAudioSources(&p_device->onvif_device))
{
GetAudioSourceConfigurations(&p_device->onvif_device);
GetAudioEncoderConfigurations(&p_device->onvif_device);
}
if (p_device->onvif_device.Capabilities.ptz.support)
{
GetNodes(&p_device->onvif_device);
GetConfigurations(&p_device->onvif_device);
}
/* save currrent profile token */
if (p_device->onvif_device.curProfile)
{
strcpy(profileToken, p_device->onvif_device.curProfile->token);
}
else
{
memset(profileToken, 0, sizeof(profileToken));
}
if (p_device->onvif_device.Capabilities.media2.support)
{
if (!getDevInfo2(p_device))
{
getDevInfo1(p_device);
}
}
else
{
getDevInfo1(p_device);
}
/* resume current profile */
if (profileToken[0] != '\0')
{
p_profile = onvif_find_profile(p_device->onvif_device.profiles, profileToken);
}
if (NULL == p_profile)
{
p_profile = p_device->onvif_device.profiles;
}
p_device->onvif_device.curProfile = p_profile;
if (p_device->onvif_device.curProfile == NULL)
{
p_device->thread_handler = 0;
return NULL;
}
if (p_profile)
{
int len;
uint8 * p_buff;
if (GetSnapshot(&p_device->onvif_device, p_profile->token, &p_buff, &len))
{
if (p_device->snapshot)
{
FreeBuff(p_device->snapshot);
p_device->snapshot = NULL;
p_device->snapshot_len = 0;
}
p_device->snapshot = p_buff;
p_device->snapshot_len = len;
// save the snapshot to file, for test
char name[256] = {'\0'};
snprintf(name, sizeof(name), "%d.jpg", len);
FILE * file = fopen(name, "wb");
fwrite(p_buff, sizeof(char), len, file);
fclose(file);
}
}
onvifServiceCapabilitiesTest(p_device);
if (p_device->onvif_device.Capabilities.events.support == 1)
{
onvifEventTest(p_device);
}
if (p_device->onvif_device.Capabilities.events.support == 1 &&
p_device->onvif_device.events.subscribe == FALSE)
{
Subscribe(&p_device->onvif_device, pps_get_index(m_dev_ul, p_device));
}
if (p_device->onvif_device.Capabilities.ptz.support)
{
onvifPTZTest(p_device);
onvifPTZTest2(p_device);
}
onvifNetworkTest(p_device);
onvifMediaTest(p_device);
onvifUserTest(p_device);
onvifGeoLocationTest(p_device);
if (p_device->onvif_device.Capabilities.image.support)
{
onvifImageTest(p_device);
}
#ifdef DEVICEIO_SUPPORT
if (p_device->onvif_device.Capabilities.deviceIO.support)
{
onvifDeviceIOTest(p_device);
}
#endif
if (p_device->onvif_device.Capabilities.media2.support)
{
onvifMedia2Test(p_device);
if (p_device->onvif_device.Capabilities.media2.OSD)
{
onvifMedia2OSDTest(p_device);
}
if (p_device->onvif_device.Capabilities.media2.Mask)
{
onvifMedia2MaskTest(p_device);
}
}
if (p_device->onvif_device.Capabilities.analytics.support)
{
onvifAnalyticsTest(p_device);
}
#ifdef PROFILE_C_SUPPORT
if (p_device->onvif_device.Capabilities.accesscontrol.support)
{
onvifAccessControlTest(p_device);
}
if (p_device->onvif_device.Capabilities.doorcontrol.support)
{
onvifDoorControlTest(p_device);
}
#endif
#ifdef PROFILE_G_SUPPORT
if (p_device->onvif_device.Capabilities.recording.support)
{
onvifRecordingTest(p_device);
}
if (p_device->onvif_device.Capabilities.search.support)
{
onvifSearchTest(p_device);
}
if (p_device->onvif_device.Capabilities.replay.support)
{
onvifReplayTest(p_device);
}
#endif
#ifdef THERMAL_SUPPORT
if (p_device->onvif_device.Capabilities.thermal.support)
{
onvifThermalTest(p_device);
}
#endif
#ifdef CREDENTIAL_SUPPORT
if (p_device->onvif_device.Capabilities.credential.support)
{
onvifCredentialTest(p_device);
}
#endif
#ifdef ACCESS_RULES
if (p_device->onvif_device.Capabilities.accessrules.support)
{
onvifAccessRulesTest(p_device);
}
#endif
#ifdef SCHEDULE_SUPPORT
if (p_device->onvif_device.Capabilities.schedule.support)
{
onvifScheduleTest(p_device);
onvifSpecialDayGroupTest(p_device);
}
#endif
#ifdef RECEIVER_SUPPORT
if (p_device->onvif_device.Capabilities.receiver.support)
{
onvifReceiverTest(p_device);
}
#endif
#ifdef IPFILTER_SUPPORT
if (p_device->onvif_device.Capabilities.device.IPFilter)
{
onvifIPAddressFilterTest(p_device);
}
#endif
#ifdef PROVISIONING_SUPPORT
if (p_device->onvif_device.Capabilities.provisioning.support)
{
onvifProvisioningTest(p_device);
}
#endif
onvifSystemMaintainTest(p_device);
p_device->thread_handler = 0;
return NULL;
}
ONVIF_DEVICE_EX * findDeviceByNotify(Notify_REQ * p_notify)
{
int index = -1;
ONVIF_DEVICE_EX * p_dev = NULL;
sscanf(p_notify->PostUrl, "/subscription%d", &index);
if (index >= 0)
{
p_dev = (ONVIF_DEVICE_EX *) pps_get_node_by_index(m_dev_ul, index);
}
return p_dev;
}
void updateDevice(ONVIF_DEVICE_EX * p_device)
{
if (NULL == p_device)
{
return;
}
// The current thread has not ended
if (p_device->thread_handler)
{
return;
}
BOOL need_update = FALSE;
if (p_device->need_update)
{
need_update = TRUE;
}
if (!p_device->onvif_device.authFailed)
{
if (NULL == p_device->onvif_device.curProfile)
{
need_update = TRUE;
}
else if (p_device->onvif_device.curProfile->stream_uri[0] == '\0')
{
need_update = TRUE;
}
}
if (need_update)
{
p_device->need_update = 0;
p_device->thread_handler = sys_os_create_thread((void *)getDevInfoThread, p_device);
}
}
/**
* devices state detect threand
*/
void stateDetectThread(void * argv)
{
int count = 0;
while (m_bStateDetect)
{
if (count++ < 30)
{
sleep(1);
continue;
}
else
{
count = 0;
}
int deviceNums = pps_node_count(m_dev_ul);
for (int i = 0; i < deviceNums; i++)
{
if (!m_bStateDetect)
{
break;
}
ONVIF_DEVICE_EX * p_device = (ONVIF_DEVICE_EX *) pps_get_node_by_index(m_dev_ul, i);
if (p_device)
{
int state = p_device->state;
GetSystemDateAndTime(&p_device->onvif_device);
if (p_device->onvif_device.errCode == ONVIF_ERR_ConnFailure)
{
p_device->state = 0;
}
else
{
p_device->state = 1;
}
if (state != p_device->state)
{
if (p_device->state)
{
updateDevice(p_device);
}
}
}
}
}
m_hStateDetect = 0;
}
/**
* start devices state detect
*/
void startStateDetect()
{
m_bStateDetect = TRUE;
m_hStateDetect = sys_os_create_thread((void *)stateDetectThread, NULL);
}
/**
* stop devices state detect
*/
void stopStateDetect()
{
m_bStateDetect = FALSE;
while (m_hStateDetect)
{
usleep(10*1000);
}
}
/**
* onvif device probed callback
*/
void probeCallback(DEVICE_BINFO * p_res, int msgtype, void * p_data)
{
ONVIF_DEVICE_EX * p_dev = NULL;
ONVIF_DEVICE_EX device;
memset(&device, 0, sizeof(ONVIF_DEVICE_EX));
if (msgtype == PROBE_MSGTYPE_MATCH || msgtype == PROBE_MSGTYPE_HELLO)
{
memcpy(&device.onvif_device.binfo, p_res, sizeof(DEVICE_BINFO));
device.state = 1;
p_dev = findDevice(&device);
if (p_dev == NULL)
{
printf("Found device. ip : %s, port : %d\n", p_res->XAddr.host, p_res->XAddr.port);
p_dev = addDevice(&device);
if (p_dev)
{
updateDevice(p_dev);
}
}
else
{
updateDevice(p_dev);
}
}
else if (msgtype == PROBE_MSGTYPE_BYE)
{
p_dev = findDeviceByEndpointReference(p_res->EndpointReference);
if (p_dev)
{
p_dev->state = 0;
}
}
}
/**
* onvif event notify callback
*/
void eventNotifyCallback(Notify_REQ * p_req, void * p_data)
{
ONVIF_DEVICE_EX * p_dev;
NotificationMessageList * p_notify = p_req->notify;
p_dev = findDeviceByNotify(p_req);
if (p_dev)
{
onvif_device_add_NotificationMessages(&p_dev->onvif_device, p_notify);
p_dev->onvif_device.events.notify_nums += onvif_get_NotificationMessages_nums(p_notify);
// max save 100 event notify
if (p_dev->onvif_device.events.notify_nums > 100)
{
p_dev->onvif_device.events.notify_nums -=
onvif_device_free_NotificationMessages(&p_dev->onvif_device, p_dev->onvif_device.events.notify_nums - 100);
}
}
}
/**
* onvif event subscribe disconnect callback
*/
void subscribeDisconnectCallback(ONVIF_DEVICE * p_dev, void * p_data)
{
printf("\r\nsubscribeDisconnectCallback, %s\r\n", p_dev->binfo.XAddr.host);
}
/**
* free device memory
*/
void freeDevice(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev)
{
return;
}
while (p_dev->thread_handler)
{
usleep(1000);
}
onvif_free_device(&p_dev->onvif_device);
if (p_dev->snapshot)
{
FreeBuff(p_dev->snapshot);
p_dev->snapshot = NULL;
p_dev->snapshot_len = 0;
}
}
void clearDevices()
{
ONVIF_DEVICE_EX * next_dev;
ONVIF_DEVICE_EX * dev = (ONVIF_DEVICE_EX *) pps_lookup_start(m_dev_ul);
while (dev)
{
next_dev = (ONVIF_DEVICE_EX *) pps_lookup_next(m_dev_ul, dev);
freeDevice(dev);
dev = next_dev;
}
pps_lookup_end(m_dev_ul);
}
void ptzLeftUpper(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = -0.5;
req.Velocity.PanTilt.y = 0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzUpper(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = 0;
req.Velocity.PanTilt.y = 0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzRightUpper(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = 0.5;
req.Velocity.PanTilt.y = 0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzPTZLeft(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = -0.5;
req.Velocity.PanTilt.y = 0;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzRight(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = 0.5;
req.Velocity.PanTilt.y = 0;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzLeftDown(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = -0.5;
req.Velocity.PanTilt.y = -0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzDown(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = 0;
req.Velocity.PanTilt.y = -0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzRightDown(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.PanTiltFlag = 1;
req.Velocity.PanTilt.x = 0.5;
req.Velocity.PanTilt.y = -0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzZoomIn(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.ZoomFlag = 1;
req.Velocity.Zoom.x = -0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzZoomOut(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_ContinuousMove_REQ req;
memset(&req, 0, sizeof(req));
req.Velocity.ZoomFlag = 1;
req.Velocity.Zoom.x = 0.5;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_ContinuousMove(&p_dev->onvif_device, &req, NULL);
}
void ptzHome(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_GotoHomePosition_REQ req;
memset(&req, 0, sizeof(req));
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_GotoHomePosition(&p_dev->onvif_device, &req, NULL);
}
void ptzStop(ONVIF_DEVICE_EX * p_dev)
{
if (NULL == p_dev ||
!p_dev->onvif_device.Capabilities.ptz.support ||
NULL == p_dev->onvif_device.curProfile)
{
return;
}
ptz_Stop_REQ req;
memset(&req, 0, sizeof(req));
req.ZoomFlag = 1;
req.Zoom = TRUE;
req.PanTiltFlag = 1;
req.PanTilt = TRUE;
strcpy(req.ProfileToken, p_dev->onvif_device.curProfile->token);
onvif_ptz_Stop(&p_dev->onvif_device, &req, NULL);
}
int main(int argc, char* argv[])
{
network_init();
// open log file
log_init("onviftest.log");
log_set_level(HT_LOG_DBG);
// init sys buffer
sys_buf_init(10 * MAX_DEV_NUMS);
// init http message buffer
http_msg_buf_init(10 * MAX_DEV_NUMS);
// max support 100 devices
m_dev_fl = pps_ctx_fl_init(100, sizeof(ONVIF_DEVICE_EX), TRUE);
m_dev_ul = pps_ctx_ul_init(m_dev_fl, TRUE);
// init event handler
// bind the http server to 0.0.0.0:30100
onvif_event_init(NULL, 30100, MAX_DEV_NUMS);
// set event callback
onvif_set_event_notify_cb(eventNotifyCallback, 0);
// set event subscribe disconnect callback
onvif_set_subscribe_disconnect_cb(subscribeDisconnectCallback, 0);
// set probe callback
set_probe_cb(probeCallback, 0);
// start probe thread
start_probe(NULL, 30);
// start device state detect
startStateDetect();
for (;;)
{
if (getchar() == 'q')
{
break;
}
sleep(1);
}
stopStateDetect();
stop_probe();
onvif_event_deinit();
clearDevices();
pps_ul_free(m_dev_ul);
pps_fl_free(m_dev_fl);
http_msg_buf_deinit();
sys_buf_deinit();
log_close();
return 0;
}