feat: Geutebruck GeViScope/GeViSoft Action Mapping System - MVP
This MVP release provides a complete full-stack solution for managing action mappings in Geutebruck's GeViScope and GeViSoft video surveillance systems. ## Features ### Flutter Web Application (Port 8081) - Modern, responsive UI for managing action mappings - Action picker dialog with full parameter configuration - Support for both GSC (GeViScope) and G-Core server actions - Consistent UI for input and output actions with edit/delete capabilities - Real-time action mapping creation, editing, and deletion - Server categorization (GSC: prefix for GeViScope, G-Core: prefix for G-Core servers) ### FastAPI REST Backend (Port 8000) - RESTful API for action mapping CRUD operations - Action template service with comprehensive action catalog (247 actions) - Server management (G-Core and GeViScope servers) - Configuration tree reading and writing - JWT authentication with role-based access control - PostgreSQL database integration ### C# SDK Bridge (gRPC, Port 50051) - Native integration with GeViSoft SDK (GeViProcAPINET_4_0.dll) - Action mapping creation with correct binary format - Support for GSC and G-Core action types - Proper Camera parameter inclusion in action strings (fixes CrossSwitch bug) - Action ID lookup table with server-specific action IDs - Configuration reading/writing via SetupClient ## Bug Fixes - **CrossSwitch Bug**: GSC and G-Core actions now correctly display camera/PTZ head parameters in GeViSet - Action strings now include Camera parameter: `@ PanLeft (Comment: "", Camera: 101028)` - Proper filter flags and VideoInput=0 for action mappings - Correct action ID assignment (4198 for GSC, 9294 for G-Core PanLeft) ## Technical Stack - **Frontend**: Flutter Web, Dart, Dio HTTP client - **Backend**: Python FastAPI, PostgreSQL, Redis - **SDK Bridge**: C# .NET 8.0, gRPC, GeViSoft SDK - **Authentication**: JWT tokens - **Configuration**: GeViSoft .set files (binary format) ## Credentials - GeViSoft/GeViScope: username=sysadmin, password=masterkey - Default admin: username=admin, password=admin123 ## Deployment All services run on localhost: - Flutter Web: http://localhost:8081 - FastAPI: http://localhost:8000 - SDK Bridge gRPC: localhost:50051 - GeViServer: localhost (default port) Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
7131
SOURCES/GeViSoft_SDK_Documentation_text/GeViScope_SDK_full.txt
Normal file
7131
SOURCES/GeViSoft_SDK_Documentation_text/GeViScope_SDK_full.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,149 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 1 to 10
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 1
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
GeViSoftSDK
|
||||
Dokumentation| Documentation| Documentation| Documentatión
|
||||
Version2012_1.7|Date19.07.2012
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 2
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
GeViSoftSDK
|
||||
Introduction
|
||||
TheGeViSoftSDKallowsintegratingyourcustomsolutionsandproductswithGeutebrück’s
|
||||
GeViSoftsuite.Itincludesanapplicationprogramminginterface(API)withallnecessary
|
||||
DLLs,headers,exampleprojects,anddocumentationtohelpyougettingstartedwithyour
|
||||
integrationeasily.
|
||||
TheSDKsupportsC++andDelphi.Furthermorea.Netwrapperisincludedwhichallowsyou
|
||||
tousetheSDKfromC#.Itprovidesvariousexampleprojectsandsolutionsintheselan-
|
||||
guages.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 3
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
GeViSoft
|
||||
GeViSoftisGeutebrück’scentralmanagementsystemforvideocontrol.Itsmainfunctionis
|
||||
theswitchingofvideosignalsbetweendifferentcameras,monitorsandDVRsbycontrolling
|
||||
avideomatrixsystem.Alarmhandlingaswellastheremotecontrolofpan/tiltanddomecam-
|
||||
erasisafurtherfunctionalityofGeViSoft.
|
||||
GeViSoftcanalsobeusedtohandlegeneralpurposedigitalinputsandoutputsandthus
|
||||
allowsintegratingcustomsensortechnologyandactuatingelementstotheGeutebrücksys-
|
||||
tem.
|
||||
Furthermore,differentperipheralscommontovideocontrolsystems,likevideomotionanal-
|
||||
ysisoroperatorconsoles,canbemanaged.
|
||||
GeViSoftArchitecture
|
||||
ThearchitectureofGeViSoftfollowstheclient-serverparadigm.Theserversoftware(GeV-
|
||||
iServer)usualrunsonadedicatedPC.ThishardwareplatformiscalledGeViStation.The
|
||||
combinedsystemofsoftwareandhardwareiscalledGeViControl.
|
||||
AtleastoneIOclientmusthandleconnectionstotheperipherals.Thisclientiscom-
|
||||
municatingwiththeGeViSoftserverandrunsonthesamemachine.ItiscalledGeViIO.
|
||||
TheGeViIOclientprovidestheinterfacesforthecommunicationtotheattachedperipherals
|
||||
likeaVX3matrixoraPTZ.Theseperipheralscanalsobevirtualized.
|
||||
GeViServerandGeViIOcanbeconfiguredfromtheGeViSetapplication.Theconfigurationis
|
||||
describedindetailinchapterConfigurationofGeViSoft.
|
||||
ThefollowingfigureshowsasetupofGeViSoftwithanattachedVX3,digitalIOandtwoPTZ
|
||||
devices.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 4
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 5
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Figure1-GeViSoftExampleConfiguration
|
||||
Historically,therehasbeenademandtocontrolalargenumberofvideofeedswithalimited
|
||||
numberofmonitorsinsurveillancesystems.Thishasleadtotheinventionofvideomatrixes
|
||||
liketheVX3,whichalloweddifferentcamerasignalstobedynamicallyroutedtotheattached
|
||||
monitors.Theroutingcouldbeuserinitiatedortriggeredbyexternaleventslikealarmsordig-
|
||||
italinputs.
|
||||
BesidesthevideoroutingitwasnecessarytoallowtheoperatortoremotecontrolPTZand
|
||||
domecamerasfromacentralconsoletoreactonalarmsorotherevents.
|
||||
Aconfigurationliketheonedescribedaboveisreflectedinthesetupaccordingtofigure1.
|
||||
NowadaysanaloguevideocamerasandmonitorsaregettingreplacedbyIPcamerasand
|
||||
PCsrunningsoftwareviewerslikeGSCView.GeViSoftallowsthehandlingofthesemodern
|
||||
setupsaswellsothattheycanbeintegratedseamlesslyintoexistinginstallations.
|
||||
Figure2givesanexampleforacomplexsetupintegratinganalogueaswellasdigitalcom-
|
||||
ponents.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 6
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Figure2-ComplexGeViSoftSetup
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 7
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Additionaltocontrollingthecrossswitchinginsidethematrix,GeViSoftcanbeusedtocom-
|
||||
municatewithGeViScopes.ItispossibletoconfigureGeViSoftinsuchawaythataGeV-
|
||||
iScopeandtheconnectedGscViewscanbecontrolledjustlikeananaloguevideomatrix,
|
||||
e.g.aVX3.
|
||||
ThenextchaptergivesanoverviewofthedifferentcomponentsthatadduptoGeViSoft.
|
||||
GeViServer
|
||||
GeViServeristhebackendserverinaGeViSoftsystem.Italsomanagestheinternaldata-
|
||||
base.GeViServerusuallyrunsasaWindowsserviceonproductionmachines,butcanalso
|
||||
bestartedasaconsoleapplicationfortestingpurposesordebugging.IfinstalledbytheSDK
|
||||
setup,theGeViServermustbestartedfromtheconsole.
|
||||
ItispossibletorunGeViServerinaclustertoincreasereliability.
|
||||
GeViAdmin
|
||||
TheapplicationGeViAdminisusedtosetuptheGeViServerdatabase.Itcanalsobeusedto
|
||||
configureredundancysettingsbyclusteringseveralGeViServers.Furthermore,GeViScope
|
||||
canbeusedfordiagnosticsandloadanalysis.GeViAdminispartoftheshippingproduct,but
|
||||
notoftheSDK.TheSDKinstallerautomaticallysetsupaGeViSoftdatabaseduringthe
|
||||
installationprocess.
|
||||
GeViIO
|
||||
TheGeViIOclientisresponsibleforthecommunicationwiththeexternalinterfacesand
|
||||
peripherals.ItrunsonthesamemachineastheGeViServer.OtherinstancesofGeViIO
|
||||
mightrunonseparatemachines.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 8
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
GeViSet
|
||||
GeViSetistheconfigurationtoolforGeViServer.ItcanbeusedtoconfigureGeViIOclients,
|
||||
users,events,alarmsandallotherfunctionalitiesofGeViServer,aswellasconnectionsto
|
||||
GeViScopeservers.SomeconfigurationstepsandoptionsinsideGeViSetareshowninthe
|
||||
followingchapters.
|
||||
GeViAPITestClient
|
||||
TheGeViAPITestClientallowstestinganddebuggingGeViSoftapplications.Withthistool
|
||||
youcansendandreceiveactionsandalarms,querythedatabase,andretrievesysteminfor-
|
||||
mation.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 9
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
SDKIntroduction
|
||||
TheGeViSoftSDKprovidesyouwithanopenapplicationprogramminginterfacetotheGeV-
|
||||
iSoftsuiteandallowsyoutointegrateyourcustomproductswithGeutebrück’s.
|
||||
TheSDKincludestheDLLsandcorrespondingheaderfilesrequiredbyyourC++orDelphi
|
||||
projects.Furthermore.NetwrapperDllsareincludedwhichallowyoutousetheSDKfrom
|
||||
yourC#application.
|
||||
SeveralexampleapplicationshelpyougettingstartedwiththeGeViSoftSDKdevelopment
|
||||
andmayactasafoundationforyourownsolutions.
|
||||
FilesandDirectoryStructure
|
||||
Duringinstallation,theenvironmentvariable%GEVISOFTSDKPATH%isset.Itpointstothe
|
||||
rootdirectoryoftheSDKinstallation.Thevariable’svalueisdeterminedbythepathchosen
|
||||
astheinstalldirectoryduringsetup.Usually,thisis“C:\GEVISOFT”.AllSDKdirectoriesare
|
||||
locatedinsidethisrootdirectory.
|
||||
Thisisa(partial)treeviewofthestandardinstallation:
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 10
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
@@ -0,0 +1,207 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 11 to 20
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 11
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
PleasenotethatthedirectoryC:/GEVISOFT/DATABASEwillbecreatedwithoutregarding
|
||||
thechoseninstallpath.ThisdirectoryhoststheGeViSoftdatabaseGeViDB.mdbwhichis
|
||||
hiddenbydefault.
|
||||
Insidethe%GEVISOFTSDKPATH%directory,astructurelikethisiscreated:
|
||||
l ADocumentationfoldercontainingallGeViSoftrelateddocumentationandmanuals.
|
||||
l AnExamplesfolderincludingsubfoldersthatarenamedaccordingtothecor-
|
||||
respondingIDEandprogramminglanguage.
|
||||
-Insideeachofthese,thereisaGeViScopeSDKandGeViSoftSDKfolderwiththe
|
||||
respectiveIncludeandLibfoldersfortheprogramminglanguageaswellasthefolders
|
||||
withthedifferentexamples.
|
||||
-TheC++headersarelocatedinsidetheIncludefolderandthelibrariesinsidetheLib
|
||||
folder.
|
||||
-ForDelphi,the.pasandthe.incfilescanallbefoundinsidetheIncludefolder.
|
||||
The%GEVISOFTSDKPATH%directoryitselfhostsalltheexecutables,dynamiclinklibraries,and
|
||||
runtimefilesthatareneededbyGeViSoft.Bydefault,alltheexampleprojectswilloutputtheir
|
||||
generatedbinariesintothisfolderaswell.Thisguaranteesthatallruntimedependenciesare
|
||||
metandyourcompiledexecutablesfindtheneededDLLs.
|
||||
Additionally,the.NetwrapperassembliesGeutebrueck.GeViSoftSDKNetWrapper.dlland
|
||||
GscActionsNET.dllresideinthisfolder.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 12
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
SDKSetup
|
||||
SetupofTest/BuildEnvironment
|
||||
ThischapterdescribeshowtosetupandconfiguretheGeViSofttestenvironment.
|
||||
NOTICE
|
||||
Pleasenotethatyouneedadministrativeprivilegesonthedevelopmentmachine.
|
||||
InstallationofGeViSoft
|
||||
TheSDKisshippedasanexecutableinstaller.Youjustneedtorunitonyourdevelopment
|
||||
machinein
|
||||
ordertoinstalltheSDK.
|
||||
NOTICE
|
||||
ItishighlyrecommendedtoinstallGeViSofttothedefaultpathC:/Gevisoft.
|
||||
WARNING
|
||||
PleasemakesurethatyoudonotinstalltheSDKonaproductionGeViSoftmachineasthesetup
|
||||
willoverwritetheinstalledGeViSoftfileswithoutnotice.
|
||||
StartingGeViServer
|
||||
YoucanstartGeViServerfromthecommandpromptbyissuingthecommand
|
||||
%GEVISOFTSDKPATH%/geviserver.execonsole
|
||||
orbyexecutingthestartserver.batscriptinyourGeViSoftinstallation’srootfolder.The
|
||||
consoleargumentforcesthesoftwaretorunasaconsoleapplicationandallowsyouto
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 13
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
easilymonitortheserver’soutput.Onaproductionmachine,GeViServerusuallyrunsasa
|
||||
windowsservice.
|
||||
NOTICE
|
||||
Pleasenotethatwithoutalicensedongle,theserverwillterminateaftertwohours.Youcan
|
||||
directlyrestartitwithoutanyfurtherrestrictions.
|
||||
ConfigurationofGeViSoft
|
||||
InthischapteryouwilllearnhowtoestablishaconnectiontotheGeViServerwiththesetup
|
||||
clientGeViSet(Settinguptheserverconnection).
|
||||
AfterthatthereisadescriptionforsettingupaGeViIOclientthatprovidesavirtualvideo
|
||||
matrixanddigitalIO(ConfigurationoftheGeViIOClient).Youdonotneedtocarryoutthe
|
||||
stepsdescribedinthatparagraph.Theyareforreferenceonlybecausethisconfigurationis
|
||||
alreadydoneforyouinthedatabasethatisdeliveredwiththeSDK.
|
||||
Settinguptheserverconnection
|
||||
1 StartGeViServerbyexecutingstartserver.batifnotalreadydoneso
|
||||
2 StartGeViSet.exe
|
||||
3 Setuptheserverconnection
|
||||
a OpenFile->GeViSoftserverconnections
|
||||
b Ifaconnectionlocalhostexists,pressConnectandmovetostep4
|
||||
c IfnoconnectionexistschooseConnections->NewConnection
|
||||
d EnterlocalhostasthenameofthenewconnectionandpresstheForwardbutton
|
||||
e IntheCreateNewServerConnectionwindowsetthecomputernametolocalhost,
|
||||
theusernametosysadmin.CheckSavepasswordandsetthepasswordtomas-
|
||||
terkey.SelectLocalconnectionasconnectiontype.PresstheForwardbutton.
|
||||
ChoosethelocalhostconnectionandpressConnect
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 14
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ConfigurationoftheGeViIOClient(reference)
|
||||
TheGeViIOclient’sconfigurationisalreadydoneforyouinsidethedatabasethatisshipped
|
||||
withtheSDK.Thestepsdescribedhereareonlyareferenceforyouifyouneedtoadaptset-
|
||||
tingsforyourtestenvironment.
|
||||
1. IntheClientsfieldpushtheAddbuttonandaddanewGeViIOclientwiththename
|
||||
GeViIO_01.
|
||||
2. SelectthenewGeViIOclientandpressConfigure.
|
||||
3. MarktheclientasActiveandVirtual.
|
||||
4. AddanewVX3matrixbypressingAddintheInterfacesfieldandselectingtheappro-
|
||||
priatetype(VX3/CX3).NametheinterfaceVirtualVX3.
|
||||
5. SelectthenewlycreatedVX3interfaceandpressEdit.
|
||||
6. Add16newvideoinputstotheVX3interfacebypressingtheAddbuttonintheVideo
|
||||
inputstab.IntheNewvideoInputwindowsetCountto16andpressok.Thenew
|
||||
videoinputchannelsshouldshowupintheVideoinputtab.
|
||||
7. Add4newvideooutputsinthesamemannerastheinputs.
|
||||
8. Add8newinputcontactsand8newoutputcontactsinthesamewayyoudidforthe
|
||||
videoinput.
|
||||
9. SendyournewlycreatedsetuptotheserverbychoosingFile->Setuptoserverorby
|
||||
clicking
|
||||
.
|
||||
Nowyourclientwindowshouldlooklikethis:
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 15
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ConnectiontoGeViScope(optional)
|
||||
IfyouhaveaGeViScopeserverupandrunning,youcanconnectGeViSofttoitviaaTCP/IP
|
||||
connection.Ifconnected,actionscanbeexchangedbetweenthetwosystems.Asan
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 16
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
examplethiscanbeusedtoremotecontrolGSCView.
|
||||
PleasenotethatyoucaninstalltheGeViScopeServerasapartofGeutebrück’sGeViScope
|
||||
SDKifyouhavenotdoneityet.YoucandownloadthisSDKonwww.geutebrueck.comor
|
||||
requestitfromtheSDKdivision.
|
||||
InstallingtheGeViScopeSDKisaprerequisiteforthescenarioandexampleinthechapter
|
||||
SwitchingVideo.
|
||||
YoucanconfiguretheconnectiontoGeViScopeinsideGeViSet.ChoosethemenuServer->
|
||||
GeViScopeConnectionsandpressAddinthepop-upmenu.Youcanthenconfigurethecon-
|
||||
nectionparametersinsidetheGeViScopeconnectionwindow.
|
||||
NOTICE
|
||||
PleasenotethattheAliasisusedtoaddressdifferentGeViScopeserversfrominsidethe
|
||||
SDKwithGSCActions.SeeActionmessages–>creatingactionmessages>4.Exampleofcre-
|
||||
atingaGeViScopeActionMessage
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 17
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
FirstStepswithGeViSoft
|
||||
ThischapterwillleadyouthroughoutyourfirststepswithGeViSoft.Youwilllearnhowtocon-
|
||||
necttoaGeViServer,sendsomebasicactions,andcustomizemessagelogginganddisplay
|
||||
toyourneeds.IfyouarealreadyfamiliarwithGeViSoft,youcanskipthischapterorskim
|
||||
throughit.
|
||||
GeViAPITestClient
|
||||
TheeasiestwaytotestyourGeViSoftsetupisbyusingtheGeViAPITestClient.Youcan
|
||||
startitfromyour%GEVISOFTSDKPATH%directory.
|
||||
PleasemakesurethatyourGeViServerisalreadystarted.Ifnotstartitbyexecutingthe
|
||||
“startserver.bat”insidetheGeViSoftrootdirectory.
|
||||
AfterstartupconnecttotheGeViServerbyaddingyourcredentialsandpressingthe“Conn”
|
||||
button.Ifeverythingworksout,the“Connected”indicatorwillbeilluminatedingreenandsev-
|
||||
eralmessageswillpopupinthe“Communicationlog”.Atthispointyourcommunicationis
|
||||
setupcorrectly.
|
||||
IfyouhavefollowedtheconfigurationstepsinchapterSettingupGeViIOyouwillalreadybe
|
||||
abletouseGeViSoftforswitchingyourvirtualvideoI/O.
|
||||
CrossSwitchingVideo
|
||||
SelectthetabVideo/DigIO.Youcanswitchyourvideosignalinthefollowingway:
|
||||
1.Selectanactiveinputandanactiveoutput.Thesignalwillbeswitchedbetweenthese
|
||||
two.YoucanseetheactiveI/OonthewindowsrighthandsidebeneaththetextVideo.
|
||||
a)Toselectanactiveoutput,left-clickononeofyourconfiguredvideooutputsinthe
|
||||
upperwindowarea.YoushouldseeActOutchangingwithregardtoyourselection.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 18
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
b)Nowmovethemouseoverthedesiredinput(e.g.7)andright-clickontheinput.
|
||||
Thenumberofyourselectedinputshouldnowappearintheblacksquareaboveyour
|
||||
selectedoutput.
|
||||
2.Clearavideooutput.Movethemouseovertheoutputtoclearandright-clickonit.The
|
||||
numberintheblacksquareabovetheoutputshouldvanish.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 19
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 20
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
NOTICE
|
||||
Whenswitchingtheoutput,aCrossSwitchactionwiththechosenchannelsisdisplayedinthe
|
||||
CommunicationLogshowninthelowerpartoftheGeViAPITestClient’swindow.
|
||||
IfarealVX3wouldbeconnectedtoyourGeViSoftandtheinputswereconnectedtovideosig-
|
||||
nals,youwouldswitchtherealsignaltotheaccordingoutput(normallyamonitor).Youwill
|
||||
learnhowtousetheseswitchactionstoremotecontrolaGscViewinthesamewayyou
|
||||
woulduseananaloguematrixinthechapterSwitchingVideo.
|
||||
ManipulatingDigitalI/O
|
||||
Similartothevideosignalsyoucanswitchdigitaloutputsandgeneratedigitalinputsignalsin
|
||||
yourvirtualtestclient.
|
||||
Generateasimulateddigitalinput:
|
||||
Togenerateaninputmoveyourmousepointeroverthedesiredinputchannel.Aleftclick
|
||||
willsimulateaclosingofthecontact,arightclickanopening.Thecontacts’statesare
|
||||
colorcodedaccordingtothistable:
|
||||
Color State
|
||||
White Unknown
|
||||
Red Closed
|
||||
Green Open
|
||||
Gray Unavailable
|
||||
Generateasimulateddigitaloutput:
|
||||
Togenerateanoutputmovethepointeroverthedesiredoutputsignal.Left-clickingwill
|
||||
settheoutput’sstatetoopen,right-clickingtoclose. Theoutputs’statesarecolorcoded
|
||||
accordingtothistable:
|
||||
Color State
|
||||
White Unknown
|
||||
Red Closed
|
||||
@@ -0,0 +1,155 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 21 to 30
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 21
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Green Open
|
||||
Yellow Alternating(CanbesetviaAlternateContactaction)
|
||||
Gray Unavailable
|
||||
Information
|
||||
IftheGeViIOclientwasconnectedtorealDIOhardware,youcouldseetheinput
|
||||
signalschanginginrealtime.Settingoftheoutputswouldresultinswitching
|
||||
realloads.
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 22
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Actions
|
||||
SofaryouonlyusedGeViAPITestClient’sbuilt-infunctionalitytointeractwithGeViServer.
|
||||
InthischapteryouwilllearntouseGeViSoftactionstocontrolthesystem.
|
||||
GeViSoftactionscanbesentbytypingthemintothetextboxinthelowermiddleoftheGeVi-
|
||||
APITestClient’swindow.Youcanfindacompletelistofthepossibleactionsinthedoc-
|
||||
umentation.
|
||||
Hint
|
||||
Youcaninteractivelygenerateactionsandlearnabouttheirparametersbycom-
|
||||
posingtheminGeViSet.Therefore,openGeViSet,andconnecttotheserver.
|
||||
ThennavigatetoServer->NamedactionsandpressAddinthewindowthat
|
||||
popsup.InthewindowNamedactionsettingsyoumaypressthebuttonwiththe
|
||||
threedots(“…”)totakeyoutotheActionsettingsmenu.
|
||||
Thereyoucanchooseanyoftheimplementedactionsandviewtheirparameters
|
||||
andsettings.Tofiltertheactionsbycategorychooseoneofthecategoriesfrom
|
||||
theupperleftlistbox.Hooverthemouseoveranyoftheparameterstogeta
|
||||
detaileddescriptionofit.
|
||||
AsanexampleselectCrossbarcontrolasacategoryandmovetoCrossSwitchto
|
||||
seethemessage’sparametersontherightside.
|
||||
Thecompletemessageis:
|
||||
CrossSwitch(IDVideoInput,ID VideoOutput,Switchmode).
|
||||
CrossSwitchingVideo
|
||||
1.Routevideofromaninputtoanoutput--Tosendthevideofrominput7tooutput3,do
|
||||
thefollowing:
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 23
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
a)TypethisactionintothetextboxinthelowermiddleoftheGeViAPITestClient
|
||||
windowandsendit: CrossSwitch(7,3,0)
|
||||
b)Makesurethatthesignalisroutedaccordinglybycheckingtheoutputinthetab
|
||||
Video/DigIO
|
||||
c)Routevideoinput3tooutputchannel2.(CrossSwitch(3,2,0))
|
||||
2.Clearvideooutput2:ClearVideoOutput(2)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 24
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Crossswitchingvideo1
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 25
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ManipulatingDigitalI/O
|
||||
1.Opencontact1andclosecontact2--TheactionsOpenContact(ContactNumber)and
|
||||
CloseContact(ContactNumber)canbeusedtosetthedigitaloutputsfromGeViSoft.
|
||||
a)Toopencontact1sendtheaction:OpenContact(1)
|
||||
b)IntheTabVideo/DigIOofGeViAPITestClientmakesurethattheindicationof
|
||||
outputonehasturnedtogreen
|
||||
c)Toclosecontact2sendtheaction:CloseContact(2)
|
||||
d)Makesurethattheoutputturnedred.
|
||||
2.Simulateaclosingoftheinputcontact3andanopeningoftheinputcontact5
|
||||
a)InputContact(3,true)
|
||||
b)Makesurethatinput3issignalingclosed(redindication)
|
||||
c)InputContact(5,false)
|
||||
d)Makesurethatinput5issignalingopen(greenindication)
|
||||
3.Alternatingacontact --Simulateaflashlightonoutput8
|
||||
a)Toalternateacontact,youcanusetheactionAlternateContact(ContactID,
|
||||
BlinkPeriod_in_ms,BlinkOnTime_in_ms)
|
||||
b)Sendthecommandtoflashthelightwithafrequencyof1Hzandadutycycleof
|
||||
500ms: AlternateContact(8,1000,500)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 26
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
c)Checkthatthecontactisalternating–afterpressingtheRefreshbutton,theout-
|
||||
put8stateshouldbealternating(yellow).
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 27
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 28
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ManipulatingdigitalIO
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 29
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
GETAS
|
||||
InthischapteryouwilllearnaboutGETAS,theGeutebrückTelnetActionServer.The
|
||||
GETAScomponentallowsyoutosendandreceiveGeViSoftactionsviatelnet.Multiple
|
||||
clientscanconnecttooneGeViServeratatime.
|
||||
ThetelnetinterfaceallowsyoutoeasilyintegratesimpleapplicationsintoyourGeViSoftinfra-
|
||||
structure.Furthermoreitoffersanoptiontoconnectnon-Windowsplatforms.
|
||||
CAUTION
|
||||
Bydefault,GETASisnotactive.ToactivateGETAS,openGeViSetandnavigatetoServer->
|
||||
GETAS.IntheGETASsettingswindow,youcanthenactivatethecomponentbycheckingEnable
|
||||
TCPport.BydefaultGETASwilllistentoport7707.Leavetheothersettingsunmodifiedand
|
||||
pressOK.Sendthealteredsetuptotheserverafterwards(File->Setuptoserver).
|
||||
CAUTION
|
||||
ToconnecttoGETAS,youneedatelnetclient.YoucaneitherusetheWindowstelnetclientora
|
||||
thirdpartyapplicationlikeputty.
|
||||
ADVICE
|
||||
IfyouareusingWindows7,thetelnetclientisnotactivatedbydefault.ToactivateitgotoStart
|
||||
->ControlPanel->ProgramsandFeaturesandselecttheTelnetClientfromthelistbox.
|
||||
NowyoucanconnecttoGeViServerandsendsomeactions.
|
||||
BasicGETASUsage
|
||||
1.ConnecttoGeViServerviaGETAS–Openacommandwindow(cmd.exe)andstart
|
||||
telnet.Inacommandwindowtype:telnetlocalhost7707
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 30
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
2.Makesurethatyourinputisechoedlocallybyentering setlocalecho
|
||||
3.Youmaywanttopressenteroncetoclearyourscreenifnecessary.
|
||||
4.MakesurethatyoustartedyourGeViAPITestClientandconnectedittotheGeV-
|
||||
iServer
|
||||
5.Sendanactiontotheserver:
|
||||
a)CustomAction(42,"HelloGETAS")
|
||||
b)Ifyoureceiveanechoofyouractionprecededbya4;fromtheGeViSoftserver,
|
||||
yourconfigurationisworking
|
||||
c)VerifythatyoucanalsoseetheactionintheGeViAPITestClient’scom-
|
||||
municationlog.Ifyoucannotseethemessage,makesureyouareconnectedand
|
||||
yourfiltersettingsinthetabFilterGeViSoftaresetcorrectly.Tobesure,setthe
|
||||
filtertoacceptallmessages.
|
||||
6.Monitoractionssentbyotherclientsinyourtelnetsession:
|
||||
a)SendanactionfromGeViAPITestClient:CustomAction(23,"HelloGETAS
|
||||
client")
|
||||
b)Verifythatyoureceivedtheactioninyourtelnetwindow.
|
||||
VideoandIOControlwithGETAS
|
||||
1.NowcontrolyourvirtualVX3byusingGETAS–MakesurethatGeViAPITestClient
|
||||
isrunningwhileyouissuecommandsviatelnetandyoucanseetheVideo/DigIOtab.
|
||||
YourGeViIO_01configurationshouldbethesameasinchapterSettingupGeViIO.
|
||||
@@ -0,0 +1,182 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 31 to 40
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 31
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
2.Routevideoinput7tovideooutput2:
|
||||
a)ConnecttotheGeViServerviatelnetinacommandwindowifnotdoneityet.
|
||||
b)Send:CrossSwitch(7,2,0)
|
||||
c)MakesurethatthevideosignalisroutedcorrectlyintheVideo/DigIOtabofGeVi-
|
||||
APITestClient
|
||||
3.Copythevideosignalfromoutput2tohaveitalsoonoutput4:
|
||||
a)Send:CopyCameraOnMonitor(2,4)
|
||||
b)Makesure,thatinput7isroutedtooutput2and4intheGeViAPITestClient
|
||||
4.Clearthevideooutputonchannel2:
|
||||
a)Send:ClearVideoOutput(2)
|
||||
b)Makesurethecommandworked(GeViAPITestClient)
|
||||
5.Closedigitaloutputcontact5:
|
||||
a)Send:CloseContact(5)
|
||||
b)VerifytheresultofthecommandinGeViAPITestClient
|
||||
GETASLimitations
|
||||
GETAScanbeusedforsimpleapplicationsorintegrationofnon-Windowsclients.Nev-
|
||||
erthelessthereisonelimitation.Thetelnetconnectionisonlyestablishedtooneserverata
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 32
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
time.IfGeViServerisrunninginaredundancysetup,theactionsarenotforwardedbetween
|
||||
thedifferentservers.
|
||||
WARNING
|
||||
IfyouplantointegrateyourGETASsolutionintoacomplexsetupwithmirroring,youhaveto
|
||||
takecareofthecommunicationwiththedifferentserversonyourown.
|
||||
ThishasnottobeconsideredifyouareusingtheSDKfunctionalityasdescribedinchapter
|
||||
SDKUsage.TheSDKfunctionswilltakecareofcommunicatingwiththevarioussystems.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 33
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ActionMapping
|
||||
Actionmappingcomesinhandyifyouneedtotriggeroneactionbyanother.Assumeyou
|
||||
wanttoswitchonabeaconifadoorisopened.Thebeaconisconnectedtoadigitaloutput2
|
||||
andthedoortoadigitalinput3(whichopenstogetherwiththedoor).Theseactionscanbe
|
||||
mappedinthefollowingway.
|
||||
1.InGeViSetselectServer–>Actionmapping
|
||||
2.PressAddintheActionmappingwindow.TheActionmappingsettingswindowwill
|
||||
open.
|
||||
3.Pressthe…buttontoaddanewinputactionandchoosetheDigitalcontactscategory
|
||||
intheActionsettingswindow
|
||||
4.SelecttheInputContactactionandsettheparametersGlobalContactIDto3and
|
||||
ChangedTotofalse.SetCaptiontodoorcontacthasopenedandpressOK.
|
||||
5.Pressthe+buttontosettheoutputactionintheActionmappingsettingswindow
|
||||
6.Toflashabeacon,theoutputsignalmustalternatebetweenonandoff.Thiscanbe
|
||||
achievedwiththeAlternateContactaction.
|
||||
7.SettheAlternateContactaction’sparameterstoGlobalContactID=2,BlinkPeriod=
|
||||
1000ms,andBlinkOnTime=500ms.EnterblinkthebeaconasCaption.
|
||||
8.SendthesetuptotheGeViServer
|
||||
9.TestthemappingbysendingtheactionInputContact(3,false)eitherbyGETASor
|
||||
insideGeViAPITestClient.YoushouldseethemappedactionAlternateContact(2,
|
||||
1000,500)deliveredbytheGeViServerdirectlyafterwards.Youcanalsochecktheout-
|
||||
put’sstatusinGeViAPITestClient’sVideo/DigIOtabafterhittingtherefreshbutton.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 34
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
10.Toswitchoffthebeaconafterthedoorhasclosed,youneedtomapanotheraction
|
||||
pairinGeViSet.Forthat,mapInputContact(3,true)toCloseContact(2)andsend
|
||||
thesetuptotheGeViServer.
|
||||
11.CheckifthebeaconisswitchedoffimmediatelyaftersendingtheactionInput-
|
||||
Contact(3,true)
|
||||
Pleasenotethatyoucanmapmultipleactionstooneinput.Thisallowsyoutorealizemore
|
||||
complexsetups.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 35
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Timer(optional)
|
||||
GeViSoftallowsyoutoconfiguretimerswhichcanscheduleactions,givingyouaversatile
|
||||
toolforcustomapplications.YoucanconfiguredifferenttypesoftimersinGeViSet.Timers
|
||||
internallycountin“ticks”.Eachtickequalsonemillisecond.
|
||||
TypesofTimers
|
||||
l Oncetimer(singleshot)–thistimercountsdownforthenumberofmainticksafter
|
||||
beingstartedandattheendfirestheconfiguredaction
|
||||
l Periodicaltimer–thistimerallowstriggeringactionsperiodicallyeverytimeit
|
||||
reachesthenumberofmainticks.Afterfiringtheaction,thetimerrestartscounting
|
||||
ticksfromzero.
|
||||
l Periodicaltimerwithembeddedtick–thistimeractssimilartothesimpleperi-
|
||||
odicaltimer.Inaddition,itcanfireasecondactiononreachingthe“embeddedtick”
|
||||
count.Asanexample,youcouldrealizeswitchingonandoffofabeaconlightwitha
|
||||
timerlikethis.Simplyclosetheoutputattheembeddedtickandopenitatthemain
|
||||
tick.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 36
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Timer1
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 37
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ConfiguringaTimer
|
||||
1.Torealizethebeacon’stimerselect„Server->„TimerinGeViSet.
|
||||
2.Addanewtimer.Makesure,theActivecheckboxisticked.NamethetimerBea-
|
||||
conTimeranddescribeitasTimertotoggleabeaconondigitaloutput2
|
||||
3.SettheTimertypetoPeriodicalwithembeddedtick,themainticktooccurevery
|
||||
1000ms,andtheembeddedticktooccurevery500ms.Thiswillgenerateatimerwith
|
||||
twotickspersecondandaspacingof500msinbetween.
|
||||
4.PresstheEditbuttonOnembeddedticktosettheactionthatshalloccurwithevery
|
||||
embeddedtick.ChoseOpenContactfortheGlobalContactID2andgivetheactionacap-
|
||||
tionliketurnofbeacon.
|
||||
5.Forthemaintick,settheactiontoCloseContactforthesameoutputandthecaption
|
||||
toturnonbeacon.
|
||||
6.SendthenewsetuptotheserverandswitchtoGeViAPITestClient
|
||||
7.YoucanstartthetimerbysendingtheStartTimeraction.Thisactiontakestwoparam-
|
||||
eters,theTimerIDandtheTimerName.IfyouwanttoaddressatimerbyitsID,justsend
|
||||
anemptyTimerName.SendStartTimer(1,"BeaconTimer")
|
||||
8.IntheVideo/DigIOtab,youshouldseethatoutput2toggleswithafrequencyof1Hz.
|
||||
9.Tostopthetimer,sendaStopTimer(1,"BeaconTimer")action.
|
||||
NOTICE
|
||||
HintforusingStartTimerandStopTimeractions:
|
||||
GeViSoftfirsttriestoevaluatethetimerbyTimerNameandonlyifnonameisgivenbyID.Ifyou
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 38
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
useanonexistingname,thetimerwillnotbestarted,evenifyoustatetherightID.Ifyouwant
|
||||
tostartatimerbyID,sendanemptystringasname(e.g.StartTimer(1,"")).
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 39
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Events(optional)
|
||||
Eventscanbeusedtocontrolcomplexbehaviorcausedbyastartconditionasatrigger.The
|
||||
GeViSofteventhandlingimplementationallowsaveryflexiblesetupofeventtriggersand
|
||||
resultingactions.
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 40
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
YoucanaddeventsinGeViSet(Server->Events->Add).
|
||||
OptionsforEvents
|
||||
Option Description
|
||||
Active EventscanonlybetriggeredifmarkedActive
|
||||
TriggerEnabled Iftriggerisenabled,theeventisrestartediftheStartbyconditionoccurs
|
||||
again.
|
||||
RepeatActions IftheStartbyconditionoccurs,theOnstartactionisinvoked
|
||||
Adjustautostop
|
||||
time
|
||||
IftheStartbyconditionoccurs,theelapsedAutostoptimeisresettozero
|
||||
Adjuststarttime Ifchecked,thestarttimeisadjustedonretriggering
|
||||
Stopbefore
|
||||
AutostopEnabled Ifenabled,theeventstopsafterthetimeframesetinStopafter
|
||||
Stopafter Periodoftimeafterwhichtheeventautomaticallystops
|
||||
AutoStoponleaveof
|
||||
validtimeranges
|
||||
Eventscanbeactivatedforcertaintimerangesonly.Ifthisoptionis
|
||||
checked,theeventautomaticallystopsifthevalidtimerangesareleft
|
||||
Timerangefield Listofallthetimerangeswheretheeventisactivated.Notethatifnotime
|
||||
rangeisgiven,theeventcannotbetriggered!
|
||||
Startby Listofactionsthattriggertheevent.Ifmultipleactionsareconfigured,any
|
||||
oftheactionswilltriggertheeventonitsown(logicalORoperation)
|
||||
Stopby Listofactionsthatterminatetheevent.Ifmultipleactionsareconfigured,
|
||||
anyoftheactionswillstoptheeventonitsown(logicalORoperation)
|
||||
Onstart Listofactionsthatareallexecutedoneventstart(logicalAND)
|
||||
OnStop Listofactionsthatareallexecutedoneventtermination(logicalAND)
|
||||
ConfiguringanEvent
|
||||
1.Hereisanexamplehowtoconfigureaneventthatroutesvideosignalsbasedondig-
|
||||
italinput--closingofcontact3triggerstheroutingofvideoinput3tovideooutput2.After
|
||||
5seconds,theeventstopsandvideooutput2iscleared.Theeventwillbeconfiguredfor
|
||||
automaticretriggering.Herearethesettings:
|
||||
@@ -0,0 +1,177 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 41 to 50
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 41
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ExampleofanEvent
|
||||
2.TheactionsforStartby,Onstart,andOnstopare:
|
||||
a)Startby:Contact3closed->InputContact(3,true)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 42
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
b)Onstart:RoutevideoIn3toVideoout2->CrossSwitch(3,2,0)
|
||||
c) Onstop:Clearvideooutput2->ClearVideoOutput(2)
|
||||
3.AfterthesetuphasbeensenttotheGeViServer,theeventcanbetestedwiththe
|
||||
GeViAPITestClient
|
||||
4.Ifyouleftclickinputcontact3theeventisstarted.Youwillseethatvideoinputstream
|
||||
3isroutedtovideooutput2.After5secondstheoutputisclearedagain.Youcanalso
|
||||
seetheeventbeingstartedinthecommunicationlog.
|
||||
5.Theeventcanberetriggered.Ifyouleftclickinput3againwhiletheeventisrunning,
|
||||
the5secondautostoptimestartsoveragain.
|
||||
6.YoucanalsostarttheeventbysendingaStartEventmessage(StartEvent(ID,
|
||||
"MessageName")).
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 43
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Alarms(optional)
|
||||
Duetothelargeamountofvideocamerasconnectedtomodernvideosurveillancesystems,
|
||||
operatorscannotobserveallthestreamsatthesametime.Moreover,onlycertainincidents
|
||||
areofinterestorneedaction.Therefore,itishelpfulthatapreselectionofthevideomaterial
|
||||
showntotheuseriscarriedoutbythesystem.Oftenspecialactionshavetobetakenifapar-
|
||||
ticularsituationishappening.Asanexampleassumethataparkinglotwithabarrieratthe
|
||||
entranceisbeingmonitored.Theoperatorissupposedtoopenthebarrieraftermakingsure
|
||||
thatawaitingvehicleisallowedtoenter.Normally,theoperatorwouldhavetowatchthe
|
||||
streamofthecamerapermanentlyandactonit.IncaseslikethisGeutebrücksystemscan
|
||||
assistbyprovidingalarms.Alarmsareverysimilartoevents,butoffermoreversatileoptions
|
||||
forcustomizinganddefiningrequireduserinteraction.
|
||||
AlarmOptions
|
||||
GeViSetoffersseveraloptionsforalarms.
|
||||
Option Description
|
||||
Name Alarmname–canbeusedinactions
|
||||
Description Fieldforthedescriptionofanalarm
|
||||
AlarmID Alarmidentifier--canbeusedinactions
|
||||
Active AlarmscanonlybetriggeredifmarkedActive
|
||||
Priority Alarmscanhaveapriorityfrom1(high)to10(low).Ahigherpriority
|
||||
alarmwilldisplacealowerpriorityoneifconfiguredtobeshownon
|
||||
thesamemonitorgroup
|
||||
MonitorGroup Severalmonitorsthatareaddressedasagroupforeasieradmin-
|
||||
istration
|
||||
Cameras Listofcamerasthatarerelevantforthealarm.Theirpicturesare
|
||||
shownonthemonitorgroupincaseanalarmoccurs
|
||||
Retriggerable Ifchecked,thealarmcanberetriggeredbyitsinitialactivator.
|
||||
Popup(Retrigger)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 44
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Option Description
|
||||
Undoacknowledge
|
||||
(Retrigger)
|
||||
Ifset,thealarmhasalreadybeenacknowledgedandthealarmis
|
||||
retriggered,thestatewillberesettonotacknowledged.
|
||||
Userspecific(Retrigger) Ifchecked,acustomlistofactionscanbeaddedwhichwillbe
|
||||
executedonaretriggereventofthealarm
|
||||
StartbyAction Listofactions.Anyoftheactionswillstartthealarm(logicalOR)
|
||||
OnstartAction Listofactions.Alloftheactionswillbesentonstart(logicalAND)
|
||||
AcknowledgebyAction Listofactions.Anyoftheactionswillacknowledgethealarm(logical
|
||||
OR)
|
||||
OnacknowledgeAction Listofactions.Alloftheactionswillbesentonacknowledge(logical
|
||||
AND)
|
||||
QuitbyAction Listofactions.Anyoftheactionswillquitthealarm(logicalOR)
|
||||
OnquitAction Listofactions.Alloftheactionswillbesentonquit(logicalAND)
|
||||
ConfiguringanAlarm
|
||||
Configureanalarmfortheparkinglotscenarioasdescribedabove.Assumethatthedetec-
|
||||
tionofavehicleisdonebyasensorondigitalinput1(vehicleisdetectedonclose).After
|
||||
checkingifthevehiclemayentertheoperatormustopenthebarrier.Todosoheacknowl-
|
||||
edgesthealarmbypushingabuttonconnectedtodigitalinput2.Asthebarrieriscontrolled
|
||||
bydigitaloutput1theOnacknowledgeactionmustopenthiscontact.Afterthevehiclehas
|
||||
passed,theoperatormustquitthealarmbypushingabuttonconnectedtodigitalinput3.On
|
||||
quitthebarriermustbeclosedbyclosingdigitaloutput1.Theparkinglotissurveilledbytwo
|
||||
camerasoninputs4and7.Duringthealarm,thesemustberoutedtooutputs1and2.
|
||||
1.AlarmsaredisplayedinMonitorGroups.FirstdefineoneInGeViSet.
|
||||
a)Server->Monitorgroups->Add
|
||||
b)Setthegroup’sNameandDescriptiontoMonitorGroup1
|
||||
c)Addvideooutputs1and2tothegroup
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 45
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
d) Leavetherestofthesettingsastheyare
|
||||
2.AddanewalarminGeViSet:Server->Alarms->Add
|
||||
a)IntheGeneraltab,setNameandDescriptiontoParkingLot
|
||||
b)PresstheMonitorgroupbuttonandaddMonitorGroup1
|
||||
c)AddVideoinput4andVideoinput7toCameras
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 46
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
AlarmSettings1
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 47
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
d)IntheActionstab,settheStartbyactiontoInputContact,theGlobalContactIDto
|
||||
1andChangedTototrue.AddtheCaptionvehicledetected
|
||||
e)SettheAcknowledgebyactiontoInputContact,theGlobalContactIDto2and
|
||||
ChangedTototrue.AddtheCaptionbuttonacknowledgedpressed
|
||||
f) SettheOnacknowledgeactiontoOpenContact,andtheGlobalContactIDto1.
|
||||
AddtheCaptionopeningbarrier
|
||||
g)SettheQuitbyactiontoInputContact,theGlobalContactIDto3andChangedTo
|
||||
totrue.AddtheCaptionbuttonquitpressed
|
||||
h)SettheOnquitactiontoCloseContact,andtheGlobalContactIDto1.Addthe
|
||||
Captionclosingbarrier
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 48
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
AlarmSettings2
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 49
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
3.Sendthesetuptotheserver
|
||||
4.TestthenewalarminGeViAPITestClient
|
||||
a)Clearvideooutputs1and2byright-clickingonthem.
|
||||
b)Simulatethearrivalofthevehiclebyleft-clickinginput1.
|
||||
c)Checkifthealarmistriggeredbyverifyingthatstreams4and7aredisplayedon
|
||||
monitors1and2.Notethattheoutputs’colorchangedtoredwhichindicatesan
|
||||
alarmfeed.YoushouldalsofindtheAlarmStarted()actionintheCommunication
|
||||
log
|
||||
d)Acknowledgethealarmandopenthebarrierbyleft-clickinginputcontact2.Make
|
||||
surethatthisleadstotheopeningofoutput1andanAlarmAcked()actionappearing
|
||||
inthelog.
|
||||
e)Quitthealarmbyleft-clickinginputcontact3.Thevideooutputs’colorshould
|
||||
changetogreenasthealarmhasfinished.Thebarrier(output1)shouldhaveclosed.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 50
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
SwitchingVideo
|
||||
Thoughmonitorgroupsdatebacktoanaloguevideorecording,theideabehindthemcomesin
|
||||
handywhencomplexsituationsaretobepresentedtooperators.InmodernCCTVsystems
|
||||
mostofthesourcesaredigitalonesandtheviewersrunassoftwareondedicatedconsoles.
|
||||
NeverthelesstheconceptofmonitorgroupscanstillbereproducedwithGeutebrück’ssys-
|
||||
tems.Thestandardviewer--GscView--canberemotecontrolledtoshowpredefinedscene
|
||||
setupsinawaysimilartomonitorgroups.
|
||||
InthischapteryouwilllearnhowtoswitchbetweentwouserdefinedGscViewscenesbytrig-
|
||||
geringaGeViSoftalarm.Youwillhaveanormal4-by-4scenedisplaying16channelsoflive
|
||||
footagefromaGeViScope.OntriggeringanalarminGeViSoft,GscViewwillbeswitchedtoa
|
||||
2-by-2scenedisplayingpredeterminedvideochannels.
|
||||
Scenario
|
||||
Assumethefollowingsituation,whichiscloselyrelatedtoConfiguringanAlarminchapter
|
||||
Alarms:
|
||||
Configureanalarmfortheparkinglotscenario.Assumethatthedetectionofavehicleisdone
|
||||
byasensorondigitalinput1(vehicleisdetectedonclose).Aftercheckingifthevehiclemay
|
||||
enter,theoperatormustopenthebarrier.Thishappensonacknowledgingthealarmbypush-
|
||||
ingabuttonconnectedtodigitalinput2.Asthebarrieriscontrolledbydigitaloutput1,theOn
|
||||
acknowledgeactionmustopenthiscontact.Afterthevehiclehaspassed,theoperatormust
|
||||
quitthealarmbypushingabuttonconnectedtodigitalinput3.Onquitthebarrierhavetobe
|
||||
closedbyclosingdigitaloutput1.Theparkinglotissurveilledbytwocamerasoninputs4and
|
||||
7.Duringthealarm,thesemustberoutedtooutputs1and2ofa2-by-2sceneMyScenein
|
||||
GscView.Beforeandafterthealarm,all16GeViScopechannelsshouldbedisplayedina4-
|
||||
by-4sceneMyStartSceneinGscView.
|
||||
@@ -0,0 +1,199 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 51 to 60
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 51
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Prerequisites
|
||||
1.PleasesetuptheGeViScopeSDKonyourdevelopmentmachineifyouhavenotdone
|
||||
ityet.
|
||||
2.ConfigureGscViewasdescribedinthechapterRemotecontrolGscViewbyactionin
|
||||
theGeViScopeSDKdocumentation.CheckthatfromGSCPLCSimulatoryoucan
|
||||
switchbetweenthescenes.
|
||||
3.ConfigureaconnectiontoGeViScopeasdescribedinConnectiontoGeViScope
|
||||
(optional).
|
||||
4.YoushouldnowhaveaGscViewsetupwithtwoscenes:MyStartSceneandMyScene
|
||||
thatcanberemotecontrolled.
|
||||
ConfiguringtheAlarm
|
||||
1.ConfigurethealarmasdescribedinConfiguringanAlarm.
|
||||
2.Afterthat,themonitorgroupmustbemappedtoaGscViewScene.GeViSoftusesthe
|
||||
CrossSwitchWithAlarmactiontoroutethevideotothemonitorgroupinternally.There-
|
||||
foretheseactionsmustbemappedtoGSCViewerControlactions(e.g.VCChange
|
||||
SceneByName).ThisisdoneinGeViSetbyaddinganewActionmapping:
|
||||
c)Thischangesthesceneintheviewer.Afterthat,channel4mustberoutedto
|
||||
viewer1101inthescene.Forthat,addanotheroutputactiontothesetbypressing
|
||||
the+button:
|
||||
d)AddtheViewerconnectliveactionwiththeGeviScopealias=GEVISCOPE,the
|
||||
viewer=1101,thechannel=4,andCaption=ViewerConnectLive(1101,4)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 52
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
a)AsInputactionselectCrossSwitchWithAlarmwithVideoInput=4,VideoOutput=
|
||||
1,andCaption=CrossSwitchWithAlarm(4,1)
|
||||
b)Tochangethesceneintheviewertherearedifferentpossibilities.Youcaneither
|
||||
callVCChangeSceneByNameordirectlyconnectalivestreamtoaviewernumber.
|
||||
ThisisdonebysendingaViewerConnectLiveaction.Here,channel4mustbe
|
||||
routedtoviewer1101inthescene.Forthat,addanoutputactiontothesetbypress-
|
||||
ingthe+button:
|
||||
c)AddtheViewerconnectliveactionwiththeGeviScopealias=GEVISCOPE,the
|
||||
viewer=1101,thechannel=4,andCaption=ViewerConnectLive(1101,4)
|
||||
d)TheActionmappingsettingswindowshouldlooklikethis:
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 53
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
SwitchingVideo1
|
||||
e)NowrepeattheprocessfortheCrossSwitchWithAlarmactionforvideoinput7
|
||||
andviewer1102.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 54
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
f)Ifexecuted,themappingsabovewillswitchthescenetoMySceneinGscView
|
||||
androutethevideochannelstotherespectiveviewer.ExecutionoftheCross-
|
||||
SwitchWithAlarmactionstakesplaceatthemomentoftriggeringthealarminGeV-
|
||||
iSoft.
|
||||
3.Afterquittingthealarmthe4-by-4sceneMyStartScenemustbereloadedinGscView,
|
||||
accordingtothescenario.ThiscanbedoneasanOnquitactionoftheGeViSetalarm:
|
||||
a)IntheGeViSetAlarmsettingsoftheParkingLotalarm,addaVCchangesceneby
|
||||
nameactiontotheOnquitlist.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 55
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
b)ChosetheactionfromGSC:VieweractionandsetGeviScopealiastoGEV-
|
||||
ISCOPE,viewerto1000,scenetoMyStartScene,andCaptiontoVCChan-
|
||||
geSceneByName(1000,MyStartScene).
|
||||
c)Sendthesetuptotheserver.
|
||||
4.OpenGeViAPITestClientandGscViewtotestyournewconfiguration.Onstarting
|
||||
thealarmbyleftclickinginput1inGeViSet,thesceneshouldswitchtoMyScenein
|
||||
GscViewwithchannel4beingdisplayedinviewer1101andchannel7inviewer1102.
|
||||
Onquittingthealarmbyleftclickinginput3inGeViAPITestClient,thesceneshould
|
||||
switchbacktoMyStartScene.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 56
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
SDKUsage
|
||||
Introduction
|
||||
ItisrecommendedtobefamiliarwiththeGeViSoftsystem,thepossibilitiesofmodernvideo
|
||||
surveillancesystemsandvideomanagementsystemsingeneral.Beforestartingpro-
|
||||
grammingyourcustomGeViSoftapplication,youshouldunderstandthebasicsofaction,
|
||||
alarm,andeventhandlinginGeViSoft,aswellastheprinciplesofclient-servernetworkcom-
|
||||
munication.
|
||||
ThefollowingsectionssupportyouwithsomesuggestionsandhintsaboutusingtheSDK
|
||||
interfaces.
|
||||
GeneralHints
|
||||
YoucanalwaysmonitortheactionssentbytheGeViServeroryourapplicationinsidethe
|
||||
GeViAPITestClient.Furthermore,thisapplicationallowsyoutosendactionsanddatabase
|
||||
queries.Itislocatedinthe%GEVISOFTSDKPATH%.
|
||||
NOTICE
|
||||
OnadevelopmentsystemitisrecommendedtostartGeViServerwiththestartserver.batscript
|
||||
orfromacommandpromptinconsolemode(geviserver.execonsole).Thisallowsyouto
|
||||
monitortheserver’soutputduringyourdevelopment.
|
||||
WARNING
|
||||
MakesuretodeleteallobjectsthatarecreatedinsideofDLLs.TheSDKoffersaDeleteObject()
|
||||
methodfortheseobjects.
|
||||
NOTICE
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 57
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
CallbackfunctionswhicharecalledoutoftheSDKDLLsarecalledfromthreads.Thesewere
|
||||
createdinsidetheDLLs.Variablesandpointersthatarepassedasargumentsofthecallback
|
||||
maynotbeusedoutsidethecallbackcontext.Theyareonlyvalidforthedurationofthecallback
|
||||
call.
|
||||
NOTICE
|
||||
StructuresthatareusedasargumentsforSDKfunctionsshouldalwaysbeinitializedbyuseof
|
||||
thefunctionmemset().Ifthestructurecontainsasizeorstructsizeelement,thenithastobe
|
||||
initializedwiththesizeof()function.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 58
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
OverviewoftheSDK’sInterfacesforC++andDelphiusers
|
||||
NOTICE
|
||||
ThefollowingparagraphsdescribetheSDKusagefromC++andDelphi.Foradescriptionofthe
|
||||
.NetInterfacesseechapterC#and.Netspecifics
|
||||
GeViProcAPI
|
||||
TheSDKisbasedontwoDLLsandthecorrespondingheaders.TheGeViProcAPI.dllincon-
|
||||
nectionwiththeGSCActions.dllimplementsalltheSDK’sfunctionality.GSCActions.dllis
|
||||
usedtoallowtheinteroperabilitybetweenGeViSoftandGeViScope.ItmakestheGeV-
|
||||
iScopeactionsavailabletoyourGeViSoftapplication.ThecorrespondingheadersandPas-
|
||||
calfilesallowyoutoaccessthefunctionsprovidedbytheseDLLsdirectly.
|
||||
GeViSoftisaclient/serverarchitectureandbasedonacentraldatabasemanagedbythe
|
||||
GeViServer.ThisisreflectedinthefunctioncallsprovidedbytheSDK.Therearefourmajor
|
||||
functiontypesdeclaredinGeViProcAPI.Theycanbedistinguishedbytheirprefixes:
|
||||
GeViAPI_Database_
|
||||
ThesedatabasefunctionsallowyoutointeractwithGeViSoftserverdirectly.Theyare
|
||||
theonesyounormallyusefordevelopingyourapplication.
|
||||
Example:GeViAPI_Database_Connect()isusedtoconnectyourapplicationtothe
|
||||
server.
|
||||
GeViAPI_DeviceClient_
|
||||
TheDeviceClientfunctionsareusedbytheGeViIOclientinternally.Theyareusuallynot
|
||||
ofinterestforSDKdevelopers.
|
||||
GeViAPI_SetupClient_
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 59
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
TheSetupClientfunctionsareusedbyGeViSettochangetheserversetup.Theyare
|
||||
usuallynotofinterestforSDKdevelopers.
|
||||
GeViAPI_
|
||||
Thesearegeneralhelperfunctionsneededforcarryingoutstandardtasksinyourappli-
|
||||
cation.
|
||||
Example:GeViAPI_FreePointer()to releasememoryallocatedbyyourobjectsinside
|
||||
theDLLthreads.
|
||||
GeViProcAPIprovidesflatfunctioncallsforcommunicatingwithaGeViServer.Togiveyoua
|
||||
moreconvenientandobjectorientedoptiontodevelopyourapplication,anotherabstraction
|
||||
layerhasbeenaddedtotheSDK.ThislayerhidestheflatfunctioncallstotheGeViProcAPI
|
||||
fromyou.ItsfunctionalitycanbefoundintheGeViAPIClientheadersandC++files.
|
||||
Foracomprehensivedescriptionofthesefunctions,pleaseconsulttheGeViSoftAPIDoc-
|
||||
umentationwhichisdeliveredwiththeGeViSoftAPISDK.
|
||||
GeViAPIClient
|
||||
GeViAPIClientasanabstractionlayerusestheflatfunctionsprovidedbyGeViProcAPIand
|
||||
encapsulatesthemintoaCGeViAPIClientclass.Youcaninstantiateanobjectofthisclass
|
||||
anduseitsprovidedmethodstohandlethecommunicationwiththeGeViServer.
|
||||
Foracomprehensivedescriptionofthesefunctions,pleaseconsulttheGeViSoftAPIDoc-
|
||||
umentationwhichisdeliveredwiththeGeViSoftAPISDK.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 60
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ConfiguringyourIDEforGeViSoftProjects
|
||||
VisualStudio2008,C++
|
||||
1.)AddGeViSoft’sheaderandcppfilestoyourproject.
|
||||
(YoucandothisbydragginganddroppingtheGeViScopeSDK\IncludefolderandtheGeV-
|
||||
iSoftSDK\Includefolderfrom%GEVISOFTSDKPATH%\Examples\VS2008CPPtoyour
|
||||
project.)
|
||||
2.)AddtheSDK’sincludefilestoyourprojectbyadding
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2008CPP\GeViScopeSDK\Include
|
||||
and
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2008CPP\GeViSoftSDK\Include
|
||||
toyourConfigurationProperties->C/C++->General–>AdditionalIncludeDirectories
|
||||
3.)IntheConfigurationProperties->C/C++->PreprocessortabaddthePreprocessorDef-
|
||||
initionGEVI_GSC_INCLUDE
|
||||
4.)Intheproject’spropertiesTABConfigurationProperties->Linker->Generaladd
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2008CPP\GeViScopeSDK\lib
|
||||
and
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2008CPP\GeViSoftSDK\lib
|
||||
totheAdditionalLibraryDirectoriesofyourproject
|
||||
5.)Intheproject’spropertiesTABConfigurationProperties->Linker->Input->Additional
|
||||
DependenciesaddGeViProcAPI.libandGscActions.lib
|
||||
6.)MakesurethatyouroutputfilecanfindthepathtoGeViProcAPIandGscActionsDLLs.
|
||||
ItisrecommendedtosetConfigurationProperties->Linker->General->OutputFileto
|
||||
$(GEVISOFTSDKPATH)\$(ProjectName).exeorcopytheDLLsintotheapplication’sfolder.
|
||||
7.)SettheConfigurationProperties->Debugging->Commandtoyourexecutablesname:
|
||||
@@ -0,0 +1,265 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 61 to 70
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 61
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
$(GEVISOFTSDKPATH)\$(TargetName)$(TargetExt)
|
||||
NOTICE
|
||||
Pleasemakesurethatyouselectthecorrectconfigurationwhensettingproperties.Bestprac-
|
||||
ticeistoadopttheGeViSoftsettingstoAllConfigurations
|
||||
NOTICE
|
||||
PleasenoticethatVisualStudioreferstoenvironmentvariablesintheform$(VAR)whereasWin-
|
||||
dowsusesthe%VAR%notation.TakethisintoaccountifyouusetheGEVISOFTSDKPATHvar-
|
||||
iable.
|
||||
VisualStudio2010,C++
|
||||
Thefollowingguideis suitableforconsoleprojectsorMFCprojects.Ifyouwish
|
||||
tobuildWindowsFormsorC++/CLIapplicationsmoreconfigurationsmightbe
|
||||
necessary.
|
||||
1.)AddGeViSoft’sheaderandcppfilestoyourproject.
|
||||
(YoucandothisbydragginganddroppingtheGeViScopeSDK\IncludefolderandtheGeV-
|
||||
iSoftSDK\Includefolderfrom%GEVISOFTSDKPATH%\Examples\VS2010CPPtoyour
|
||||
project.
|
||||
2.)AddtheSDK’sincludefilestoyourprojectbyadding
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViScopeSDK\Include
|
||||
and
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViSoftSDK\Include
|
||||
toyourConfigurationProperties->VC++Directories->IncludeDirectories
|
||||
3.)AddtheSDK’slibraryfilestoyourprojectbyadding
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViScopeSDK\lib
|
||||
and
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 62
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViSoftSDK\lib
|
||||
toyourConfigurationProperties->VC++Directories->LibraryDirectories
|
||||
4.)Intheproject’spropertiesTABConfigurationProperties->Linker->Input->Additional
|
||||
DependenciesaddGeViProcAPI.libandGscActions.lib
|
||||
5.)MakesurethatyouroutputfilecanfindthepathtoGeViProcAPIandGscActionsDLLs.
|
||||
ItisrecommendedtosetConfigurationProperties->Linker->General->OutputFileto
|
||||
$(GEVISOFTSDKPATH)\$(ProjectName).exeorcopytheDLLsintotheapplication’sfolder.
|
||||
6.)SettheConfigurationProperties->Debugging->Commandtoyourexecutablesname:
|
||||
$(GEVISOFTSDKPATH)\$(TargetName)$(TargetExt)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 63
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
CommonTasks
|
||||
Thischapterdescribesseveralcommontasksyoumightneedtocarryoutduringyourdevel-
|
||||
opment.
|
||||
ThesearedescribedinpseudocodeandC++.Foradescriptionofthe.NetAPIseechapter
|
||||
C#and.Netspecifics.
|
||||
ConnectingtoaGeViServer
|
||||
ThefirstexampleshowsyouhowtoconnecttoaGeViServerbyusingtheflatAPIcallsfrom
|
||||
GeViProcAPI.Thesecondandrecommendedmethodshowsyouhowtoestablishthecon-
|
||||
nectionwiththehelpofaGeViAPIClientobject.
|
||||
ConnectingusingGeViProcAPIcalls
|
||||
Pseudocode
|
||||
1.Declareadatabasehandle
|
||||
2.Encryptthepasswordstring
|
||||
3.CreatearemotedatabaseobjectinsidetheDLL
|
||||
4.ConnecttothedatabaseobjectcreatedinsidetheDLL
|
||||
C++,direct GeViProcAPIcalls:
|
||||
//declareastringtoholdthepasswordhash
|
||||
//(32byte+'\0')
|
||||
charencodedPassword[33];
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 64
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
//declareadatabasehandle
|
||||
GeViAPI_Namespace::HGeViDatabasedatabase;
|
||||
//encodethepassword
|
||||
GeViAPI_EncodeString(encodedPassword,"masterkey",
|
||||
sizeof(encodedPassword));
|
||||
//createaremotedatabaseobjectinsidethe DLL
|
||||
//toaccessaGeViSoftdatabase
|
||||
GeViAPI_Database_Create(database,"localhost",
|
||||
"127.0.0.1","sysadmin",
|
||||
encodedPassword,"","");
|
||||
if(database)//databasesuccessfullycreated
|
||||
{
|
||||
//Connectfunctionsresult
|
||||
TConnectResultresult;
|
||||
//Connecttothedatabaseobject.
|
||||
GeViAPI_Database_Connect(database,result,
|
||||
NULL/*yourcallbackhere!*/,
|
||||
NULL/*yourinstancehere!*/);
|
||||
if(result==connectOk)
|
||||
std::cout<<"Connectionestablished!";
|
||||
}
|
||||
ConnectingusingGeViAPIClientObjects(recommended)
|
||||
Pseudocode
|
||||
1.DeclareaGeViAPIClientwrapperobject
|
||||
2.Declareanddefineaconnectioncallbackfunctiontomonitortheconnectionprogress(this
|
||||
functionwillbecalledfrominsidetheDLLandreturnaprogressstateinitsarguments)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 65
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
3.Encryptthecleartextpassword
|
||||
4.CreateaninstanceoftheGeViAPIClientwrapperobject
|
||||
5.Callthewrapper’sconnectmethod
|
||||
6.CheckIftheconnectmethodreturnedasuccess
|
||||
C++,GeViAPIClientcalls:
|
||||
1. Connectionhandling
|
||||
//wrapperaroundaGeViAPIclientobject
|
||||
GeViAPIClient*m_APIClient;
|
||||
//declareastringtoholdthepasswordhash
|
||||
charencodedPassword[33];
|
||||
GeViAPIClient::EncodePassword(encodedPassword,
|
||||
"mypassword",
|
||||
sizeof(encodedPassword));
|
||||
//createannewinstanceofthewrapper
|
||||
m_APIClient=newGeViAPIClient("MyGeViServer",
|
||||
"127.0.0.1","sysadmin",
|
||||
encodedPassword,NULL,NULL);
|
||||
if(m_APIClient)
|
||||
{
|
||||
//connecttotheserver–ConnectProgressCBisyourcallback
|
||||
TConnectResultConnectResult=
|
||||
m_APIClient->Connect(ConnectProgressCB,this);
|
||||
if(ConnectResult==connectOk)
|
||||
{
|
||||
//Connectionsuccessfullyestablished
|
||||
//Doyourworkhere.
|
||||
}
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 66
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
}
|
||||
2. Callbacks
|
||||
//Callbackfunctionforconnectprogressdisplay
|
||||
bool__stdcallConnectProgressCB(void*Instance,
|
||||
intPercentage,
|
||||
intPercent100)
|
||||
{
|
||||
if(Instance==NULL)
|
||||
{
|
||||
return(true);
|
||||
}
|
||||
//Callthecallbackmethodofyourclass
|
||||
//object'sinstance
|
||||
CYourClass*yourClass=(CYourClass*)Instance;
|
||||
return( yourClass->ConnectProgress(
|
||||
Percentage,Percent100));
|
||||
}
|
||||
//Yourclass’scallback
|
||||
boolCYourClass::ConnectProgress(intpercentageLower,
|
||||
intpercentageUpper)
|
||||
{
|
||||
//Dos.th.,e.g.showaProgressCtrl.
|
||||
return(true);
|
||||
}
|
||||
ConnectionMonitoring
|
||||
GeViSoftoffersmethodstomonitorifyourconnectionisstillestablished.Itisadvisableto
|
||||
monitortheconnectionfromyourapplicationandtryareconnectifitbreaksdown.
|
||||
YoucanusethesendPing()methodforconnectionmonitoringwhichreturnstrueifthecon-
|
||||
nectionisstillestablishedandfalseifnot.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 67
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
BestpracticeistocyclicallycallsendPing()fromaseparatethreadandhandletherecon-
|
||||
nectionfrominsidethisthreadifnecessary.
|
||||
Monitoringconnectionsis implementedintheSDK’sexampleCPP_Mon-
|
||||
itoredConnectionClient.
|
||||
MonitoringaConnection
|
||||
Pseudocode
|
||||
1.Createaseparatethreadinsideyourapplicationifaconnectionshouldbeestablished
|
||||
2.Insidethisthead,DO:
|
||||
a.Sendapingtotheserver
|
||||
b.IFtheresultofthepingisNOTtrue:tryareconnect
|
||||
c.Sleepforagiventime(e.g.10s)
|
||||
3.UNTILtheconnectionshouldbeterminated
|
||||
C++Example
|
||||
//Prerequisite:
|
||||
//GeViAPIClient*m_APIClient
|
||||
//mustalreadybecreatedandconnected.
|
||||
//
|
||||
//RunthismethodinsideaseparateThread!
|
||||
intMonitorConnection()
|
||||
{
|
||||
constintreconnectionPeriod_in_ms=10000;
|
||||
boolresult;
|
||||
while(true){
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 68
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
result=m_APIClient->SendPing();
|
||||
if(result==false)
|
||||
{
|
||||
//TODO:notifyyouruserhere.
|
||||
//Tryareconnect:
|
||||
m_APIClient->Connect(YourConnectCallbackCB,this);
|
||||
}
|
||||
Sleep(reconnectionPeriod_in_ms);
|
||||
}
|
||||
return0;
|
||||
}
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 69
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
MessageHandling
|
||||
Afteryouhaveestablishedyourconnectionyouarereadytoexchangemessageswiththe
|
||||
server.
|
||||
MessageRepresentation
|
||||
TherearetwopossiblerepresentationsofmessagesinGeViSoft.Theyareeitherstoredina
|
||||
binaryformorasanASCIIstring.TheAPIoffersmethodstoconvertbetweenthesetworep-
|
||||
resentations.ThesemethodsaredefinedintheMessageBaseheader,C++,andPascalfiles.
|
||||
Tableofconversionmethodsbetweenmessagerepresentations.
|
||||
CGeV-
|
||||
iMessage::ReadASCIIMessage
|
||||
ConvertsanASCIIstringintoaCGeViMessage
|
||||
CGeV-
|
||||
iMessage::WriteASCIIMessage
|
||||
ConvertsaCGeViMessageintoanASCIIstring
|
||||
CGeViMessage::ReadBinMessageConvertsabinaryrepresentationofamessageintoaCGeV-
|
||||
iMessage
|
||||
CGeV-
|
||||
iMessage::WriteBinMessage
|
||||
ConvertsaCGeViMessageintoitsbinaryrepresentation
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 70
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ActionMessages
|
||||
CreatingActionMessages
|
||||
Youcancreateanactionmessageintwoways.Oneisbycallingitspredefinedactioncon-
|
||||
structordirectly.TheotherisbyconvertinganASCIIorbinaryrepresentationintoanew
|
||||
actionobject.ThepredefinedconstructorsarelocatedintheActionsheader,C++,andPas-
|
||||
calfiles.
|
||||
ActionscanbeconsideredaseitherbeingdirectcommandsfromtheclienttotheGeViServer
|
||||
tocontrolitsperipheryorasnotificationswhicharesentfromtheservertotheclienttoindi-
|
||||
catestatechangesoflogicalorphysicalcomponents.Incontrasttoactions,therearestate
|
||||
queriesanddatabasequeries.ThesearetreatedseparatelyinthechaptersStateQueriesand
|
||||
DatabaseQueries.
|
||||
1. Examplefor a directly createdCustomActionmessage(con-
|
||||
structorfromActions.h/cpp)
|
||||
CGeViMessage*gevimessage=new
|
||||
CActCustomAction(123,"HelloGeViSoft!");
|
||||
2. Examplefor a CustomActionmessagecreatedfroma string
|
||||
intbytesRead;
|
||||
std::stringbuffer("CustomAction(123,\"HelloGeViSoft!\")");
|
||||
CGeViMessage*gevimessage=
|
||||
CGeViMessage::ReadASCIIMessage(buffer.c_str(),
|
||||
buffer.size(),
|
||||
bytesRead);
|
||||
3.ExamplefortheASCIIoutputofabinaryactionmessage:
|
||||
//gevimessageisthebinarymessage
|
||||
@@ -0,0 +1,293 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 71 to 80
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 71
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
char*buffer;
|
||||
constintbufferlength=GEVI_MAXACTIONLENGTH;
|
||||
intnumBytesReceived;
|
||||
buffer=newchar[bufferlength];
|
||||
gevimessage->WriteASCIIMessage(buffer,
|
||||
bufferlength,
|
||||
numBytesReceived);
|
||||
std::cout<<buffer<<std::endl;
|
||||
4.ExampleofcreatingaGeViScopeActionMessage
|
||||
GeViScopemessagescanalsobecreatedinsideGeViSoftdirectly.Thisisneededtoallow
|
||||
theinteroperabilityofGeViSoftandGeViScope.
|
||||
TheGeViScopemessageconstructorscanbefoundintheGscActionsheader.Theyare
|
||||
implementedinsidetheGscActionsDLL.GscActionscanbecreatedbycallingtheCActG-
|
||||
scActionconstructor:
|
||||
CGeViMessage*gevimessage=newCActGscAction(
|
||||
"YourGscServerName",
|
||||
GscAct_CreateCustomAction(1,L"HelloGeViScope!"));
|
||||
NOTICE
|
||||
Pleasenotethat“GscServerNameAlias”isthealiasnameyouconfiguredfortheconnectionin
|
||||
GeViSet.
|
||||
SendingActionMessages
|
||||
ThenextexampleshowsyouhowtosendamessagetotheGeViSoftserver.Asapre-
|
||||
requisite,aGeViAPIClientobjectmustalreadybecreatedandconnectedtotheserver.
|
||||
C++Example:
|
||||
GeViAPIClient*m_APIClient
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 72
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
//mustalreadybecreatedandconnected
|
||||
/*
|
||||
…
|
||||
*/
|
||||
CGeViMessage*gevimessage=newCActCustomAction(
|
||||
123,"HelloGeViSoft!");
|
||||
if(gevimessage)
|
||||
{
|
||||
m_APIClient->SendMessage(gevimessage);
|
||||
//Don’tforgettodeleteobjectsyoucreateinsidetheDLL
|
||||
gevimessage->DeleteObject();
|
||||
}
|
||||
ReceivingActionMessages
|
||||
ThisexampleshowsyouhowtoreceiveamessagefromGeViSoft.Asaprerequisite,aGeVi-
|
||||
APIClientobjectmustalreadybecreatedandconnectedtotheserver.Furthermore,adata-
|
||||
basenotificationcallbackfunctionmustbedefined.Thiscallbackfunctionwillbecalledfrom
|
||||
insidetheGeViProcAPIDLLwheneveranotificationfromtheserverisreceived.
|
||||
Pseudocode
|
||||
1.Definethecallback
|
||||
2.Definethecallback’shandlermethod
|
||||
3.RegisteryourcallbackwiththeGeViAPIClientconnection’sobject.
|
||||
4.Handlethereceivednotificationsinyouhandlermethod.
|
||||
C++Example:
|
||||
1. Definethecallback
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 73
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
void__stdcallGeViDatabaseNotificationCB(void*Instance,
|
||||
TServerNotificationNotification,
|
||||
void*Params)
|
||||
{
|
||||
if(Instance==NULL)
|
||||
return;
|
||||
//callingthecallbackmethodofyourClassobject'sinstance.
|
||||
//Asanexample,CYourClassmightbeCMainWinforanMFCApplication
|
||||
CYourClass*yourClass=(CYourClass*)Instance;
|
||||
yourClass->DatabaseNotification(Notification,Params);
|
||||
}
|
||||
2.Definethecallback’s method
|
||||
voidDatabaseNotification(TServerNotificationNotification,
|
||||
void*Params)
|
||||
{
|
||||
//Checkifwereceivedamessage.Itmightalsobeanother
|
||||
//notificationlikeachangeofsetuporshutdownoftheserver
|
||||
if(Notification==NFServer_NewMessage)
|
||||
{
|
||||
//createthemessageifpossible
|
||||
//(themessageisfreedagaininthemainthreadcontext)
|
||||
CGeViMessage*gevimessage;
|
||||
TMessageEntry*messageEntry=
|
||||
reinterpret_cast<TMessageEntry*>(Params);
|
||||
intnoOfBytesRead=0;
|
||||
gevimessage=CGeViMessage::ReadBinMessage(
|
||||
messageEntry->Buffer,
|
||||
messageEntry->Length,
|
||||
noOfBytesRead);
|
||||
if(gevimessage)
|
||||
{
|
||||
//Youreceivedamessage!Nowyouneedtohandleit.
|
||||
//Thiscanbedonehere.
|
||||
}
|
||||
else
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 74
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
{
|
||||
//Messagecouldnotbecreated.Handletheerrorhere.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Ifwearehere,wereceivedanothertypeofnotification
|
||||
}
|
||||
}
|
||||
3. Registeryourcallback withtheconnectionobject.
|
||||
m_APIClient=newGeViAPIClient( ...);
|
||||
if(m_APIClient)
|
||||
{
|
||||
//connecttotheserver
|
||||
TConnectResultConnectResult=
|
||||
m_APIClient->Connect(ConnectProgressCB,this);
|
||||
if(ConnectResult==connectOk)
|
||||
{
|
||||
//Connectionestablished!Nowregisteryourcallback!
|
||||
m_APIClient->SetCBNotification(
|
||||
GeViDatabaseNotificationCB,this);
|
||||
}
|
||||
}
|
||||
DisconnectingfromaGeViServer
|
||||
Whendisconnectingfromtheserver,youshouldunregisteryournotificationcallbackand
|
||||
deletetheGeViAPIClientobject.
|
||||
C++Example:
|
||||
voidDisconnectFromServer()
|
||||
{
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 75
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
if(m_APIClient!=NULL)
|
||||
{
|
||||
//Unregisterthenotificationcallback
|
||||
m_APIClient->SetCBNotification(NULL,NULL);
|
||||
m_APIClient->Disconnect();
|
||||
deletem_APIClient;
|
||||
m_APIClient=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 76
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
StateQueries
|
||||
StateQueriesaremessagessentfromtheclienttotheservertogetinformationaboutthe
|
||||
stateoflogicalandphysicalcomponentsoftheGeViSoftsystemwellasvirtualressources.
|
||||
Anexampleofsuchinformationwouldbeanenumerationofallthevideoinputsavailableata
|
||||
GeViServer.
|
||||
CreatingStateQueries
|
||||
Youcancreateastatequerybycallingitspredefinedconstructor.Allthestatequeries’con-
|
||||
structorsarelocatedintheStateQueriesheader,C++,andPascalfiles.
|
||||
StatequeriescanthenbesentwiththeSendStateQuery()methodoftheGeViAPIClient
|
||||
class.ThismethodreturnsaCStateAnswerobjectwiththeGeViServer’sresponse.
|
||||
CStateAnswer*StateAnswer=m_APIClient->SendStateQuery(
|
||||
GetFirstVideoInputQuery,INFINITE);
|
||||
Thesecondparameterofthemethodisthetimeoutforaserveranswerinmilliseconds.By
|
||||
sendingINFINITE,youcanpreventthecallfromtimingout.
|
||||
Creating,sending,andreceivingstatequeriesis implementedintheSDK’sexam-
|
||||
pleDelphi/CPP_SimpleClient.
|
||||
Enumerationofallvideoinputs
|
||||
Pseudocode
|
||||
1.Createastatequerytogetthefirstvideoinput(classCSQGetFirstVideoInput)
|
||||
2.Sendthequerytotheserver
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 77
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
3.If theanswerisavalidinputchannelthen
|
||||
4.REPEAT
|
||||
a)Gettheactualchannel’s informationfromtheanswerandprocessitasneeded(e.g.
|
||||
printitout,storeittoalist)
|
||||
b)CreateastatequerytogetthenextvideoInput(classCSQGetNextVideoInput)
|
||||
c)Sendthequery
|
||||
5.UNTILthereisnomorevideoinputleft
|
||||
C++Example:
|
||||
voidCMainWin::FillVideoInputsList()
|
||||
{
|
||||
if(m_APIClient==NULL)
|
||||
return;
|
||||
//Enumerateallavailablevideoinputswiththehelpofstatequeries.
|
||||
//Createanewstatequerythatwillreturnthefirstvideoinputchan-
|
||||
nel:
|
||||
CStateQuery*getFirstVideoInputQuery=newCSQGetFirstVideoInput(
|
||||
true,//showonlyactivechannels
|
||||
true);//showonlyenabledchannels
|
||||
if(getFirstVideoInputQuery)
|
||||
{
|
||||
//Sendthequerytotheserver
|
||||
CStateAnswer*stateAnswer=m_APIClient->SendStateQuery(
|
||||
getFirstVideoInputQuery,
|
||||
INFINITE);//Timeout
|
||||
//Don'tforgettofreethememoryinsidetheDLL...
|
||||
getFirstVideoInputQuery->DeleteObject();
|
||||
if(stateAnswer)
|
||||
{
|
||||
//Iteratethroughallavailablevideoinputchannels
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 78
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
while(stateAnswer->m_AnswerKind!=sak_Nothing)
|
||||
{
|
||||
//Getthechannelsinfo
|
||||
CSAVideoInputInfo*videoInputInfo=
|
||||
reinterpret_cast<CSAVideoInputInfo*>(stateAnswer);
|
||||
//createavideoinputdescriptor
|
||||
TVideoInputDescriptor*newVideoInput=new
|
||||
TVideoInputDescriptor(videoInputInfo->m_GlobalID,
|
||||
videoInputInfo->m_Name,
|
||||
videoInputInfo->m_Description,
|
||||
videoInputInfo->m_HasPTZHead,
|
||||
videoInputInfo->m_HasVideoSensor,
|
||||
videoInputInfo->m_HasContrastDetection,
|
||||
videoInputInfo->m_HasSyncDetection);
|
||||
//Dosomethingwiththechannelinformation.Here:
|
||||
//Addthechannelinformationtoa
|
||||
//CListBoxlbVideoInputs
|
||||
intnewIndex=lbVideoInputs.AddString(
|
||||
newVideoInput->m_Name.c_str());
|
||||
lbVideoInputs.SetItemDataPtr(newIndex,newVideoInput);
|
||||
//Createaquerytogetthenextinputchannel
|
||||
CStateQuery*getNextVideoInputQuery=new
|
||||
CSQGetNextVideoInput(true,true,
|
||||
videoInputInfo->m_GlobalID);
|
||||
stateAnswer->DeleteObject();
|
||||
stateAnswer=NULL;
|
||||
if(getNextVideoInputQuery)
|
||||
{
|
||||
stateAnswer=
|
||||
m_APIClient->SendStateQuery(
|
||||
getNextVideoInputQuery,INFINITE);
|
||||
getNextVideoInputQuery->DeleteObject();
|
||||
if(!stateAnswer)
|
||||
break;
|
||||
}
|
||||
else//Nomorevideoinputchanneldetected!
|
||||
break;
|
||||
}
|
||||
if(stateAnswer)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 79
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
{
|
||||
stateAnswer->DeleteObject();
|
||||
stateAnswer=NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 80
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DatabaseQueries(optional)
|
||||
DatabasequeriesallowyoutofetchdatasetsfromtheactionoralarmtableoftheGeViSoft
|
||||
activitydatabase.Alltheactionsthathavebeenreceivedandallthealarmeventsthat
|
||||
occurredarestoredinsidethedatabase.Tospecifyandnarrowdownyourqueryresults,sev-
|
||||
eralfilteroperationsareavailableaswell.
|
||||
TogetfamiliarwiththepossibilitiesofGeViSoft’sdatabasequeries,andespe-
|
||||
ciallyitsfilteringoptions,pleasehavealookattheGeViAPITestClient’s“Data-
|
||||
baseViewer”and“DatabaseFilter”tabs.
|
||||
CreatingDatabaseQueries
|
||||
Youcancreateadatabasequerybycallingitspredefinedconstructor.Allthedatabaseque-
|
||||
ries’constructorsarelocatedintheDatabaseQueriesheader,C++,andPascalfiles.
|
||||
DatabasequeriescanthenbesentwiththeSendDatabaseQuery()methodoftheGeVi-
|
||||
APIClientclass.ThismethodreturnsaCDataBaseAnswerobjectwiththeGeViServer’s
|
||||
response.
|
||||
CDataBaseQuery*geviquery=newCDBQCreateActionQuery(0);
|
||||
CDataBaseAnswer*dbAnswer=m_APIClient->SendDatabaseQuery(geviquery,INFI-
|
||||
NITE);
|
||||
Thesecondparameterofthemethodisthetimeoutforaserveranswerinmilliseconds.By
|
||||
sendingINFINITE,youcanpreventthecallfromtimingout.
|
||||
DatabaseQuerySessionHandling
|
||||
Actionsendingandstatequeryingdidnotneedanyformofsessionhandling.Thisisdifferent
|
||||
fordatabasequerying.Usuallyyouwanttocollectseveralrecordsthatareconnectedin
|
||||
@@ -0,0 +1,235 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 81 to 90
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 81
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
someform,e.g.applyingthesamefiltersettosubsequentqueries. Tosignalthedatabase
|
||||
enginethatyourqueriesareassociated,youpassauniquequeryhandlewiththem.The
|
||||
queryhandleistheresultyoureceivefromaCDBQCreateActionQueryorCDBQCrea-
|
||||
teAlarmQuery.Thereforethesequeriesarethefirstyousendwheninteractingwiththedata-
|
||||
base.
|
||||
C++Examplefor gettinga queryhandle:
|
||||
//CreateanewActionQuery
|
||||
CDataBaseQuery*geviquery=newCDBQCreateActionQuery(0);
|
||||
//SendtheActionQuerytotheserver
|
||||
CDataBaseAnswer*dbanswer=m_APIClient->SendDatabaseQuery(geviquery,INFI-
|
||||
NITE);
|
||||
geviquery->DeleteObject();
|
||||
if(dbanswer->m_AnswerCode==dbac_QueryHandle)
|
||||
{
|
||||
//Extractthequeryhandlefromtheanswer
|
||||
CDBAQueryHandle*handle=reinterpret_cast<CDBAQueryHandle*>(dbanswer);
|
||||
}
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 82
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
IteratingoverDatabaseRecords
|
||||
Youcansendagroupofassociateddatabasequeriesafterhavingobtainedthequeryhandle.
|
||||
PleasenotethattheGeViSoftarchitecturealwaysreturnsonesingleanswerforeveryquery.
|
||||
Asaconsequence,youmightneedtoissueseveraldatabasequeriesconsecutivelytoget
|
||||
yourdesiredpiecesofinformation.
|
||||
Thiscanbeillustratedbyanexampledatabasequery.Imagineyouwanttoretrievethetwo
|
||||
latestactionsinsidethedatabase:
|
||||
Example: Retrievingof thetwolatest actionsinside thedata-
|
||||
base
|
||||
Pseudocode
|
||||
1.CreateanewCDBQCreateActionQuery
|
||||
2.SendthequerytoGeViServerandretrievethehandlefromtheanswer
|
||||
3.CreateanewCDBQGetLastquerywiththehandleastheargument
|
||||
4.Sendthequeryandfetchthelatestactionasananswer
|
||||
5.Extractthelatestaction’sprimarykeyfromtheanswer
|
||||
6.CreateanewCDBQGetPrevquerywiththehandleandthelatestaction’sprimarykeyas
|
||||
anargument
|
||||
7.Sendthequeryandfetchthesecondlatestactionasananswer
|
||||
C++:
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 83
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
//Declareaqueryhandle
|
||||
CDBAQueryHandle*handle;
|
||||
__int64primaryKey;
|
||||
//CreateanewActionQuery
|
||||
CDataBaseQuery*geviquery=newCDBQCreateActionQuery(0);
|
||||
//SendtheActionQuerytotheserver
|
||||
CDataBaseAnswer*dbanswer=m_APIClient->SendDatabaseQuery(geviquery,INFI-
|
||||
NITE);
|
||||
geviquery->DeleteObject();
|
||||
if(dbanswer->m_AnswerCode==dbac_QueryHandle)
|
||||
{
|
||||
//Extractthequeryhandefromtheanswer
|
||||
handle=reinterpret_cast<CDBAQueryHandle*>(dbanswer);
|
||||
}
|
||||
//Createadatabasequeryforthelatestactionentry
|
||||
CDataBaseQuery*getEntry=newCDBQGetLast(handle->m_Handle);
|
||||
//SendthequerytotheGeViServer
|
||||
dbanswer=m_APIClient->SendDatabaseQuery(getEntry,INFINITE);
|
||||
getEntry->DeleteObject();
|
||||
//Checkifanactionentryisinthedatabase
|
||||
if(dbanswer->m_AnswerCode==dbac_ActionEntry)
|
||||
{
|
||||
//Dos.th.withtheanswerhere...
|
||||
//Gettheprimarykeywhichisusedto
|
||||
//addresstherecordsinternally
|
||||
primaryKey=reinterpret_cast<CDBAActionEntry*>(dbanswer)->m_PK;
|
||||
}//TODO:Adderrorhandlingifnoactionisinthedatabase
|
||||
//Createadatabasequerytogetthesecondlatestactionentry
|
||||
getEntry=newCDBQGetPrev(handle->m_Handle,primaryKey);
|
||||
//SendthequerytotheGeViServer
|
||||
dbanswer=m_APIClient->SendDatabaseQuery(getEntry,INFINITE);
|
||||
getEntry->DeleteObject();
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 84
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
//Checkifanactionentryisinthedatabase
|
||||
if(dbanswer->m_AnswerCode==dbac_ActionEntry)
|
||||
{
|
||||
//Dos.th.withtheanswerhere...
|
||||
}//TODO:Adderrorhandlingifnoactionisinthedatabase
|
||||
dbanswer->DeleteObject();
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 85
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
FilteringDatabaseQueries
|
||||
GeViSoftsupportsvariousfiltersallowingyoutospecifyyourqueriesinamorepreciseway.
|
||||
Forexample,youcannarrowdownyoursearchtocertainactiontypesorsenders.Allthe
|
||||
availablefiltersaredeclaredintheDatabaseQueriesheaderfile.
|
||||
TosetthefilteringontheGeViServer,youhavetosendadatabasequeryforeveryfilterele-
|
||||
mentafteryouhaveobtainedthequeryhandle.Youcanmonitortheprocessingofthequeries
|
||||
insidetheGeViAPITestClient.
|
||||
Hereisascreenshotofadatabasequerysequencewhichsetsafilterfortheactiontype
|
||||
nameCrossSwitch.Themessagesettingthefilterishighlighted.Thefilterhasbeendefined
|
||||
intheDatabaseFiltertaboftheGeViAPITestClient.Afterwards,thefetchoperationwas
|
||||
startedfromtheDatabaseViewertab.
|
||||
ComposingFilteredQueries
|
||||
Inthisparagraphyouwilllearnhowtocomposesimplefiltersfirstandfinallyextenttheexam-
|
||||
plefromabove(IteratingoverDatabaseRecords)withafilterthatwillonlyreturn
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 86
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
CustomActionmessageswithcertainprimarykeys.
|
||||
PrerequisiteforatestonyoursystemisthatthereareCrossSwitch,CustomAction,andsev-
|
||||
eralotheractiontypeentriesstoredinsideyourdatabase.Topopulateyourdatabasewith
|
||||
these,youcansendthemwiththeGeViAPITestClient.DoingafetchintheDatabaseVie-
|
||||
wer’staballowsyoutoverifythattheyarestoredcorrectlyafterwards.
|
||||
ExampleFilters
|
||||
ExampleforafilterthatwillonlyreturnCustomActions:
|
||||
CDataBaseFilter*myActionNameFilter=
|
||||
newCDBFTypeName(handle->m_Handle,"CustomAction",dbc_LIKE);
|
||||
Aftercreatingyourfilters,youcansendthemwithGeViAPIClientsSendDatabaseQuery
|
||||
method.
|
||||
CDataBaseAnswer*dbanswer=
|
||||
m_APIClient->SendDatabaseQuery(myActionNameFilter,INFINITE);
|
||||
Makesuretoverifythattheanswercodeisdbac_DBOkandtocalltheDeleteObjectmethod
|
||||
foryourfilteraftersendingit.
|
||||
Composingcomplexfilters:
|
||||
Youcancomposeacomplexfilterbysendingasequenceofmultiplesinglefilterstothedata-
|
||||
base.Thesefilterswillthenbetreatedasaconjunction(logicalAND)byGeViServer.
|
||||
Hereisanexampleforacomplexfilterthatonlyreturnsactionswithprimarykeysbetween
|
||||
500and600.Thisfilterhastobecomposedbysendingtwosimplefilterssequentially:
|
||||
CDataBaseFilter*myMinFilter=
|
||||
newCDBFPK_GrtEqu(handle->m_Handle,500);
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 87
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
CDataBaseFilter*myMaxFilter=
|
||||
newCDBFPK_LowEqu(handle->m_Handle,600);
|
||||
CompleteExampleofaFilteredDatabaseQuery
|
||||
TheexampleIteratingoverDatabaseRecordswillbeextendedtofilterforCustomActionswith
|
||||
aprimarykeybetween500and600inthisparagraph.Toachievethis,thefiltermessages
|
||||
havetobesentdirectlyafterretrievingthedatabasehandle.Thefiltersarecreatedina
|
||||
methodcalledsetActionFilter.Thismessageisthencalledafterobtainingthedatabase
|
||||
handle.
|
||||
Examplefilteringmethod:
|
||||
voidsetActionFilter(CDBAQueryHandle*handle)
|
||||
{
|
||||
//Createavectorwithyourfiltermessages
|
||||
std::vector<CDataBaseFilter*>filterList;
|
||||
filterList.push_back( newCDBFPK_GrtEqu(handle->m_Handle,500));
|
||||
filterList.push_back( newCDBFPK_LowEqu(handle->m_Handle,600));
|
||||
filterList.push_back( newCDBFTypeName(handle->m_Handle,
|
||||
"CustomAction",dbc_LIKE));
|
||||
//Sendthefilters
|
||||
for(vector<CDataBaseFilter*>::iteratorit=
|
||||
filterList.begin();it!=filterList.end();
|
||||
it++)
|
||||
{
|
||||
CDataBaseAnswer*dbanswer=m_APIClient->SendDatabaseQuery(*it,INFI-
|
||||
NITE);
|
||||
if(dbanswer->m_AnswerCode!=dbac_DBOk)
|
||||
{
|
||||
//Doerrorhandlinghere!
|
||||
(*it)->DeleteObject();
|
||||
return;
|
||||
}
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 88
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
(*it)->DeleteObject();
|
||||
}
|
||||
}
|
||||
Nowyoucancallthatmethodinyourexamplefromabove:
|
||||
/*
|
||||
...
|
||||
*/
|
||||
CDataBaseAnswer*dbanswer=m_APIClient->SendDatabaseQuery(
|
||||
geviquery,INFINITE);
|
||||
geviquery->DeleteObject();
|
||||
if(dbanswer->m_AnswerCode==dbac_QueryHandle)
|
||||
{
|
||||
//Extractthequeryhandefromtheanswer
|
||||
handle=reinterpret_cast<CDBAQueryHandle*>(dbanswer);
|
||||
//SendFilterhere
|
||||
setActionFilter(handle);
|
||||
}
|
||||
/*
|
||||
...
|
||||
*/
|
||||
Asaresult,youshouldseethetwolatestCustomActionrecordswithaprimarykeybetween
|
||||
500and600.Ifyoudonotgetanyresults,youneedtoadoptthefilteringcriteriatomatchrec-
|
||||
ordsinyourdatabase.
|
||||
Databasequeriesandfilteringis implementedintheSDK’sexampleDelphi/CPP_
|
||||
SimpleDatabaseClient.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 89
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
C#and.Netspecifics
|
||||
ThischapterdealswiththeGeViSoftSDKs.Netcapabilitiesandspecifics.Itdescribesthe
|
||||
architectureofthewrappersandthespecificsoftheusage.
|
||||
Architecture
|
||||
TheGeViSoftSDKisdeliveredwitha.Net-Wrapper,allowingyoutodesignapplicationsin
|
||||
C#orother.Netlanguages.TheGeutebrueck.GeViSoftSDKNET.Wrapper.dllencapsulates
|
||||
allthenativeGeViProcAPI.dllcalls.Additionally,theGscActionsNet.dllfromtheGeV-
|
||||
iScopeSDKisneededtoallowforGeViScopeinteroperability.Thiswrapperencapsulatesthe
|
||||
GscActions.dllwhichitselfusestheGscDBI.dll.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 90
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DiagramoftheGeViSoft.Netwrappers
|
||||
ConfiguringyourIDEforGeViSoft.NetProjects
|
||||
VisualStudio2008,C#
|
||||
1.)Addthe.Netwrapperstoyourproject’sreferences.
|
||||
(Youcandothisbyright-clickingonReferencesinyourSolutionExplorer.AfterpressingAdd
|
||||
Referencebrowsetoyour%GEVISOFTSDKPATH%andaddGeViProcAPINET_2_0.dll.Ifyou
|
||||
plantouseGeViScopeActionsalsoaddGscActionsNET_2_0.dll.
|
||||
@@ -0,0 +1,231 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 91 to 100
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 91
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
2.)ChangetheplatformsettingstogenerateX86codeifitisnotalreadyset.
|
||||
IntheConfigurationManagerselectPlatform->New->X86andusethisplatformforthe
|
||||
DebugandReleaseconfigurations.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 92
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
3.)ChangetheOutputpathofyourproject.
|
||||
Theapplicationneedsthefollowingfilesinitspath:GeviProcAPI.dll,GscDBI.dll,GscAc-
|
||||
tions.dll,GeViProcAPINET_X_Y.dll,andGscActionsNET_X_Y.dll.Allthesefilesarein
|
||||
your%GEVISOFTSDKPATH%,sotheoutputpathtoc:\gevisoft\.
|
||||
TochangetheOutputpath,eitherright-clickonyourprojectinSolutionExplorerandpress
|
||||
PropertiesorchooseProject->ProjectNamePropertiesfromthemenu.ThenselecttheBuild
|
||||
tabandsetyourOutputpath.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 93
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 94
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
4.)Addtherequiredusingdirectivestoyourproject’ssourcefiles.
|
||||
ForaprojectthatonlyusesGeViSoftactions,youneedatleast.
|
||||
GEUTEBRUECK.GeViSoftSDKNET.ActionsWrapper
|
||||
aswellas
|
||||
GEUTEBRUECK.GeViSoftSDKNET.ActionsWrapper.ActionDispatcher
|
||||
and,additionallyforactionsfromeveryactionclassyouuse,
|
||||
GEUTEBRUECK.GeViSoftSDKNET.ActionsWrapper.YourActionClass
|
||||
IfyoualsowanttouseGeViScopeactions,makesuretoinclude
|
||||
GEUTEBRUECK.GeViScope.Wrapper.Actions.ActionDispatcher
|
||||
and
|
||||
GEUTEBRUECK.GeViScope.Wrapper.Actions.YourActionClass
|
||||
YoucanfinddescriptionsoftheactionsandtheirrespectiveactionclassesintheAPIdoc-
|
||||
umentationorbyinspectingtheassemblieswiththeObjectBrowser.
|
||||
VisualStudio2010,C#
|
||||
ConfigureyourprojectasdescribedinparagraphVisualStudio2008,C#
|
||||
CommonTaskswithC#
|
||||
Thischapterdescribesseveralcommontasksyoumightneedtocarryoutduringyourdevel-
|
||||
opment.ThetasksaredescribedinpseudocodeandC#.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 95
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ConnectingtoaGeViServer
|
||||
ThisparagraphshowsyouwhattasksareneededforconnectingtoaGeViServer.
|
||||
Connecting
|
||||
PseudoCode
|
||||
1.Implementtheconnectcallbackmethod
|
||||
2.Createaninstanceofadatabaseconnectionobject
|
||||
3.Callthecreate()methodofyourdatabaseconnectionobject
|
||||
4.Addyourcallbackdelegatemethodtotheinvocationlist
|
||||
5.Registeryourcallbackmethod
|
||||
6.Calltheconnectmethodofyourdatabaseconnectionobject
|
||||
C#
|
||||
//Thisistheconnectprogresscallbackmethod.
|
||||
//ItiscalledfromwithinGeViSoftduringtheconnectionprogress
|
||||
voidmyConnectProgress(objectsender,GeViSoftConnectProgressEventArgse)
|
||||
{
|
||||
Console.WriteLine("Connecting...{0}of{1}",e.Progress,e.Effort);
|
||||
}
|
||||
//myDBisthedatabaseobjectthatencapsulates
|
||||
//allGeViSoftinteraction.
|
||||
GeViDatabasemyDB=newGeViDatabase();
|
||||
//Settheservername,usernameandpasswordofyour
|
||||
//GeViSoftconnection
|
||||
myDb.Create("localhost","sysadmin","masterkey");
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 96
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
//Addyourcallbackdelegatetotheinvocationlist
|
||||
myDb.ConnectProgress+=newGeViSoftConnectProgressEventHandler(
|
||||
myConnectProgress);
|
||||
//RegisterthecallbackinsideGeViSoft
|
||||
myDb.RegisterCallback();
|
||||
//NowyoucanconnecttotheGeViSoftServer...
|
||||
myDB.Connect();
|
||||
AstraightforwardimplementationforestablishingaconnectioncanbefoundinexampleCS_
|
||||
ConsoleClient.
|
||||
MessageHandling
|
||||
Afterhavingestablishedtheconnection,youarereadytoexchangemessagesandactions
|
||||
withtheserver.
|
||||
CreatingandSendingofGeViSoftMessages
|
||||
TherearetwoapproachesthatcanbetakentocreateandsendGeViSoftmessages.Youcan
|
||||
eithercreateamessageinstancebycallingitsconstructorandthensendthisinstance,or
|
||||
youcandirectlysendastringrepresentationofamessagewithoutinstantiatingitfirst.
|
||||
Example1–Creatinganinstanceofamessageandsendingitafter-
|
||||
wards
|
||||
//CreateaCrossSwitchActionandswitch
|
||||
//input7tooutput1
|
||||
GeViAct_CrossSwitchmyAction=newGeViAct_CrossSwitch(
|
||||
7,1,GeViTSwitchMode.sm_Normal);
|
||||
//Sendtheaction
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 97
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
myDB.SendMessage(myAction);
|
||||
NOTICE
|
||||
Makesureyouhaveincludedyouraction’scorrespondingactionclassnamespaceinyour
|
||||
usingdirectives.SeeConfiguringyourIDEforGeViSoft.NetProjects->VS2008,C#
|
||||
Example2–Directlysendingamessagefromastring
|
||||
myDB.SendMessage("CrossSwitch(7,1,0)");
|
||||
ReceivingofGeViSoftActions
|
||||
GeViSoftactiondispatchingiseventbased.Internally,foreveryactionthatisreceived,an
|
||||
eventisfired.IfyouwanttoprocesscertainGeViSoftactionmessagesinsideyourappli-
|
||||
cation,youcanregisteraneventhandlerforthisparticularaction.Theeventhandleriscalled
|
||||
wheneveranewactionofthattypeisreceived.
|
||||
IfyouwanttoprocessCrossSwitchactionsinyourapplication,youcanproceedasshownin
|
||||
thisexample.
|
||||
Pseudocode:
|
||||
1.Implementamethodthatiscalledwhenevertheeventisfired(actionreceived)
|
||||
2.Registeryourmethodasaneventhandlerfortheparticularaction
|
||||
3.RegisteryoureventhandlerinsidetheGeViSoftconnectionobject.
|
||||
C#:
|
||||
//MethodtobecalledonreceivingaCrossSwitchAction
|
||||
voidmyDB_ReceivedCrossSwitch(objectsender,GeViAct_CrossSwitchEventArgs
|
||||
e)
|
||||
{
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 98
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
StringreceivedMessage="CrossSwitch("+
|
||||
e.aVideoInput+","+
|
||||
e.aVideoOutput+","+
|
||||
e.aSwitchMode+")";
|
||||
}
|
||||
//EventhandlerforCrossSwitchActions
|
||||
myDB.ReceivedCrossSwitch+=new
|
||||
GeViAct_CrossSwitchEventHandler(myDB_ReceivedCrossSwitch);
|
||||
//Don’tforgettoregisterthehandlerinsidetheGeViSoftconnection
|
||||
object
|
||||
myDB.RegisterCallback();
|
||||
ReceivingofGeViSoftNotifications
|
||||
Besidesactions,GeViSoftalsosendsmessagesregardingtheserverstatus,thedatabase
|
||||
notifications.YoucanreceivethesenotificationsbyregisteringaGeV-
|
||||
iSoftDatabaseNotificationEventHandler.Theprocedureissimilartotheactionsubscription
|
||||
asdescribedabove.
|
||||
Hereisanexample:
|
||||
voidmyDB_DatabaseNotification(objectsender,
|
||||
GeViSoftDatabaseNotificationEventArgse)
|
||||
{
|
||||
switch(e.ServerNotificationType)
|
||||
{
|
||||
caseGeViServerNotification.NFServer_Disconnected:
|
||||
//("DisconnectedfromServer");
|
||||
break;
|
||||
caseGeViServerNotification.NFServer_GoingShutdown:
|
||||
//("Serverisshuttingdown");
|
||||
break;
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 99
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
caseGeViServerNotification.NFServer_SetupModified:
|
||||
//("Serversetuphasbeenmodified");
|
||||
break;
|
||||
caseGeViServerNotification.NFServer_NewMessage:
|
||||
//An“ordinary”actionhasbeenreceived.
|
||||
//HandlethisactioninaseparateEvent-
|
||||
Handler
|
||||
//(likemyDB_ReceivedCrossSwitchAction)
|
||||
break;
|
||||
}
|
||||
}
|
||||
//Youregisterthehandlerasdescribedbefore
|
||||
myDB.DatabaseNotification+=new
|
||||
GeViSoftDatabaseNotificationEventHandler(myDB_DatabaseNotification);
|
||||
myDB.RegisterCallback();
|
||||
NOTICE
|
||||
Pleasenotethatthee.ServerNotificationTypeequalsGeViServerNotification.NFServer_New-
|
||||
MessagewitheveryGeViSoftactionthatisreceived,regardlessifyoualreadysubscribedforit
|
||||
withanothereventhandler.
|
||||
HandlingofGeViScopeActions
|
||||
YoucanalsosendGeViScopeactionsfromyourGeViSoftapplication.SendingGeViScope
|
||||
actionsisverysimilartosendingGeViSoftactions.Theonlydifferenceisthatyouneedto
|
||||
addtheGeViScopeserveraliastotheSendMessage()method’sparameters.
|
||||
SendingGeViScopeActions
|
||||
Example–sendingaGeViScopemessage:
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 100
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Prerequisite:
|
||||
1.ConnectiontoGeViScopehasbeenconfiguredwithGeViSet
|
||||
2.Theappropriatenamespacesareincluded
|
||||
//ExampleforGeViScopenamespaceneededtohandle
|
||||
//aGeViScopeCustomAction
|
||||
usingGEUTEBRUECK.GeViScope.Wrapper.Actions;
|
||||
usingGEUTEBRUECK.GeViScope.Wrapper.Actions.SystemActions;
|
||||
//CreatetheGeViScopeaction
|
||||
GscAct_CustomActionmyGscAction=new
|
||||
GscAct_CustomAction(23,"HelloGeViScope!");
|
||||
//SendtheActiontothe“GeViScope_Alias”server
|
||||
myDB.SendMessage("GEVISCOPE_ALIAS",myGscAction);
|
||||
ReceivingGeViScopeActions
|
||||
ReceivingGeViScopeactionsisalittledifferentfromhandlingGeViSoftactions.Duetoarchi-
|
||||
tecturalconstraints,wheneveraGeViSoftActionarrives,itisencapsulatedintoaspecial
|
||||
GeViSoftaction.ThisactioniscalledGscAction.
|
||||
TheGscActionitselfisretrievedlikeanyotherGeViSoftactionbyimplementingamethod
|
||||
thatprocessestheGscActionandthatisaddedasaneventhandlerforreceivingtheGscAc-
|
||||
tion.
|
||||
ThismethodreceivestheoriginalGeViScopeActionembeddedintoitsEventArgswhenever
|
||||
itiscalled.
|
||||
NormallyyouthenwouldhavetoidentifyandparsetheGeViScopeactionandhandleitas
|
||||
neededbyhand.Foryourconvenience,theGeutebrueckSDKsprovideyouwithadispatcher
|
||||
thatcansimplifythattask:
|
||||
ThereisaDispatchermethodforGeViScopeactionsthatworksverysimilartothedis-
|
||||
patchingmechanismusedbyGeViSoft.YoucansimplyaddeventhandlersfortheGeV-
|
||||
iScopeactionsyouareinterestedinandprocesstheminthere.
|
||||
@@ -0,0 +1,280 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 101 to 110
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 101
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Example–ReceivingandDispatchingGeViScopeActionsinsideGeViSoft:
|
||||
PseudoCode:
|
||||
1.CreateaninstanceoftheGscActionDispatcherclassthatwilldispatchtheGeV-
|
||||
iScopeactionstoyourhandlers
|
||||
2.CreateaneventhandlerthatreceivestheGeViSoftGscAction.Insidethisevent
|
||||
handler,callthedispatchmethodofyourGscActionDispatcherinstanceforevery
|
||||
receivedGscAction.
|
||||
3.RegistertheGeViSoftGscActioneventhandlerwithyourGeViSoftdatabasecon-
|
||||
nectionobject.
|
||||
4.CreateaneventhandlermethodforanyGeViScopeactionyouwanttoprocess
|
||||
5.RegisteryourGeViScopeactionseventhandleratthedispatcher.
|
||||
C#:
|
||||
//CreateaninstanceoftheGscActionDispatcherclass
|
||||
GscActionDispatchermyGscDispatcher=newGscActionDispatcher();
|
||||
//GscActioneventhandlerthatdispatchestheGscAction
|
||||
voidmyDB_ReceivedGscAction(objectsender,GeViAct_GscActionEventArgse)
|
||||
{
|
||||
myGscDispatcher.Dispatch(e.m_GscAction);
|
||||
}
|
||||
//AddthehandlerforGscAction(thisiscalledforanynewlyreceivedGeV-
|
||||
iScopeaction)
|
||||
myDB.ReceivedGscAction+=new
|
||||
GeViAct_GscActionEventHandler(myDB_ReceivedGscAction);
|
||||
//Don'tforgettoregisterthecallbacks!
|
||||
myDB.RegisterCallback();
|
||||
//EventhandlermethodfortheGeViScopeAction
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 102
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
voidmyGscDispatcher_OnCustomAction(objectsender,GscAct_Cus-
|
||||
tomActionEventArgse)
|
||||
{
|
||||
Console.WriteLine"ReceivedGEVISCOPECustomAction("+e.aInt+","
|
||||
+e.aString+")");
|
||||
}
|
||||
//RegistertheGeViScopeCustomActioneventhandlerwiththedispatcher
|
||||
myGscDispatcher.OnCustomAction+=new
|
||||
GscAct_CustomActionEventHandler(myGscDispatcher_OnCustomAction);
|
||||
NOTICE
|
||||
YoucanfindacompleteexampleapplicationthatsendsandreceivesGeViScopeactionsinCS_
|
||||
SimpleGscActionClient.
|
||||
StateQueriesinC#
|
||||
ThisparagraphdescribeshowyoucansendandreceiveStateQueriesfromwithinC#.Foran
|
||||
introductiontoStateQueriesingeneralseechapterSDK-Usage->StateQueries.
|
||||
CreatingandSendingStateQueries
|
||||
YoucancreateStateQuerieswiththeirrespectiveconstructorsandsendthemafterwardsby
|
||||
callingtheSendQuery()methodofyourdatabaseconnectioninstance.TheSendQuery()
|
||||
methodreturnstheGeViSoftStateAnswerviaanoutparameter.
|
||||
//myAnswerisfilledbytheSendQuery()method
|
||||
//withtheStateAnswer.
|
||||
GeViMessagemyAnswer;
|
||||
//Thisisyourquery
|
||||
GeViMessagemyQuery=newGeViSQ_GetFirstVideoInput(true,true);
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 103
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
//Sendthequery
|
||||
myDB.SendQuery(myQuery,outmyAnswer);
|
||||
if(myAnswerisGeViSA_VideoInputInfo)
|
||||
{
|
||||
//Dosomethingwithmyanswerhere...
|
||||
}
|
||||
SettingtheStateQueryTimeout
|
||||
ThemethodSendQuery()blocksuntilthedatabaseanswerisretrievedfromtheGeViServer.
|
||||
Iftheserverdoesnotanswer,thisleadstoadeadlock.Amaximumtimeouttimerforthe
|
||||
SendQueryexiststopreventwaitingendlesslyforadatabaseanswer.Bydefault,thetimeout
|
||||
issetto3000ms.YoucanchangethistimeoutgloballybycallingtheSetQueryTimeoutInMs
|
||||
()methodofyourdatabaseconnectioninstance.
|
||||
Example–SettingtheSendQuerytimeouttoonesecond:
|
||||
myDB.SetQueryTimeoutInMs(1000);
|
||||
Enumerationofallvideoinputs
|
||||
Pseudocode
|
||||
1.Createastatequerytogetthefirstvideoinput(classGeViSQ_GetFirstVideoInput)
|
||||
2.Sendthequerytotheserver
|
||||
3.Iftheanswerisavalidinputchannelthen
|
||||
4.REPEAT
|
||||
a)Gettheactualchannel’sinformationfromtheanswerandprocessitasneeded
|
||||
(e.g.printitout,storeittoalist)
|
||||
b)CreateastatequerytogetthenextvideoInput(classGeViSQ_
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 104
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
GetNextVideoInput)
|
||||
c)Sendthequery
|
||||
5.UNTILthereisnomorevideoinputleft
|
||||
C#Example:
|
||||
privateList<GeViSA_VideoInputInfo>getVideoInputsList()
|
||||
{
|
||||
List<GeViSA_VideoInputInfo>myVideoInputs=
|
||||
newList<GeViSA_VideoInputInfo>(0);
|
||||
if(myDB!=null)
|
||||
{
|
||||
GeViMessagemyAnswer;
|
||||
myDB.SendQuery(newGeViSQ_GetFirstVideoInput(true,true),
|
||||
outmyAnswer);
|
||||
while(myAnswerisGeViSA_VideoInputInfo)
|
||||
{
|
||||
inttempID=(myAnswerasGeViSA_VideoInputInfo).sG-
|
||||
lobalID;
|
||||
myVideoInputs.Add(myAnswerasGeViSA_VideoInputInfo);
|
||||
myDB.SendQuery(
|
||||
newGeViSQ_GetNextVideoInput(true,true,tem-
|
||||
pID),
|
||||
outmyAnswer);
|
||||
}
|
||||
}
|
||||
returnmyVideoInputs;
|
||||
}
|
||||
NOTICE
|
||||
YoucanfindacompleteexampleapplicationthatsendsStateQueriesandreceivesStateActions
|
||||
inCS_SimpleClient.Thisexampleshowsyouhowtoenumeratevideoin-andoutputsaswellas
|
||||
digitalIO.
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 105
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
SupportedDevelopmentPlatforms
|
||||
TheSDKisdesignedforandtestedtoworkwiththefollowingdevelopmentenvironments:
|
||||
l MicrosoftVisualStudio2008,C++
|
||||
l MicrosoftVisualStudio2010,C++
|
||||
l MicrosoftVisualStudio2008,C#
|
||||
l MicrosoftVisualStudio2010,C#
|
||||
l EmbarcaderoRADStudioXE,Delphi
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 106
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Examples
|
||||
TheSDKisshippedwithvariousexamplesshowingyouhowtoimplementcommontasks.
|
||||
Theexamplesaregroupedbyfunctionalityandplatform.
|
||||
ByFunctionality
|
||||
Connecting/disconnectingtoGeViServer
|
||||
l CPP_SimpleActionClient(VS2008/VS2010,C++)
|
||||
l CPP_SimpleClient(VS2008/VS2010,C++)
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l CPP_MonitoredConnectionClient(VS2008/VS2010,C++)
|
||||
l CPP_ConsoleClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleActionClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleDatabaseClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleGscActionClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleActionClient(RADStudioXE)
|
||||
l Delphi_SimpleClient(RADStudioXE)
|
||||
l Delphi_SimpleDatabaseClient(RADStudioXE)
|
||||
l Delphi_ConsoleClient(RADStudioXE)
|
||||
MonitoringaGeViSoftconnection
|
||||
l CPP_MonitoredConnectionClient(VS2008/VS2010,C++)
|
||||
AutomaticallyreconnectingaGeViSoftconnectiononloss
|
||||
l CPP_MonitoredConnectionClient(VS2008/VS2010,C++)
|
||||
Sending/receivingofGeViSoftactions/messages
|
||||
l CPP_SimpleActionClient(VS2008/VS2010,C++)
|
||||
l CPP_MonitoredConnectionClient(VS2008/VS2010,C++)
|
||||
l CPP_SimpleClient(VS2008/VS2010,C++)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 107
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l CPP_ConsoleClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleActionClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleDatabaseClient(VS2008/VS2010,C#)
|
||||
l CS_ConsoleClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleActionClient(RADStudioXE)
|
||||
l Delphi_SimpleClient(RADStudioXE)
|
||||
l Delphi_SimpleDatabaseClient(RADStudioXE)
|
||||
l Delphi_ConsoleClient(RADStudioXE)
|
||||
Sending/receivingofGeViScopeactions/messages
|
||||
l CS_SimpleGscActionClient(VS2008/VS2010,C#)
|
||||
Receivinganddispatchingofservernotifications
|
||||
l CPP_SimpleActionClient(VS2008/VS2010,C++)
|
||||
l CPP_MonitoredConnectionClient(VS2008/VS2010,C++)
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l CPP_ConsoleClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleActionClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleDatabaseClient(VS2008/VS2010,C#)
|
||||
l CS_SimpleGscActionClient(VS2008/VS2010,C#)
|
||||
l CS_ConsoleClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleActionClient(RADStudioXE)
|
||||
l Delphi_SimpleClient(RADStudioXE)
|
||||
ConvertingbetweenASCIIandbinaryrepresentationofmessages
|
||||
l CPP_SimpleActionClient(VS2008/VS2010,C++)
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l CPP_ConsoleClient(VS2008/VS2010,C++)
|
||||
l Delphi_SimpleActionClient(RADStudioXE)
|
||||
l Delphi_SimpleDatabaseClient(RADStudioXE)
|
||||
l Delphi_ConsoleClient(RADStudioXE)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 108
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Sending/receivingstatequeriesandanswers
|
||||
l CPP_SimpleClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleGscActionClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleClient(RADStudioXE)
|
||||
Enumerationofvideoinputandoutputchannels
|
||||
l CPP_SimpleClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleClient(RADStudioXE)
|
||||
EnumerationofdigitalIOcontacts
|
||||
l CPP_SimpleClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleClient(RADStudioXE)
|
||||
Sendingdatabaseactionqueries
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleDatabaseClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleDatabaseClient(RADStudioXE)
|
||||
Sendingdatabasealarmqueries
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleDatabaseClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleDatabaseClient(RADStudioXE)
|
||||
Navigatingthroughdatabaseentries
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l CS_SimpleDatabaseClient(VS2008/VS2010,C#)
|
||||
l Delphi_SimpleDatabaseClient(RADStudioXE)
|
||||
ConvertingdatabaseanswersfrombinarytoASCIIrepresentation
|
||||
l CPP_SimpleDatabaseClient(VS2008/VS2010,C++)
|
||||
l Delphi_SimpleDatabaseClient(RADStudioXE)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 109
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
BuildingGeViSoftmessagesfromuserinput
|
||||
l CPP_ConsoleClient(VS2008/VS2010,C++)
|
||||
l CS_ConsoleClient(VS2008/VS2010,C#)
|
||||
l Delphi_ConsoleClient(RADStudioXE)
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 110
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
ByPlatform
|
||||
MicrosoftVisualStudio2008/2010,C++,MFC
|
||||
CPP_SimpleActionClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sending/receivingofactions
|
||||
l Receivinganddispatchingofservernotifications
|
||||
l ConvertingbetweenASCIIandbinaryrepresentationofmessages.
|
||||
CPP_MonitoredConnectionClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sending/receivingofactions
|
||||
l Receivinganddispatchingofservernotifications
|
||||
l ConvertingbetweenASCIIandbinaryrepresentationofmessages
|
||||
l MonitoringaGeViSoftconnection
|
||||
l AutomaticallyreconnectingaGeViSoftconnectiononloss
|
||||
CPP_SimpleClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sending/receivingstatequeriesandanswers
|
||||
l Sending/receivingofactions
|
||||
l Enumerationofvideoinputandoutputchannels
|
||||
l EnumerationofdigitalIOcontacts
|
||||
l Receivinganddispatchingofservernotifications
|
||||
CPP_SimpleDatabaseClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sendingdatabaseactionqueries
|
||||
l Sendingdatabasealarmqueries
|
||||
l Navigatingthroughdatabaseentries
|
||||
l Receivingdatabaseentries
|
||||
l ConvertingdatabaseanswersfrombinarytoASCIIrepresentation
|
||||
@@ -0,0 +1,82 @@
|
||||
================================================================================
|
||||
GeViSoft_SDK_Documentation.pdf - Pages 111 to 113
|
||||
================================================================================
|
||||
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 111
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
MicrosoftVisualStudio2008/2010,C++,Console
|
||||
CPP_ConsoleClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l BuildingGeViSoftmessagesfromuserinput
|
||||
l Receivinganddisplayingmessages
|
||||
l ConvertingbetweenASCIIandbinaryrepresentationofmessages
|
||||
MicrosoftVisualStudio2008/2010,C#WinForms
|
||||
CS_SimpleActionClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sending/receivingofactions
|
||||
l Receivinganddispatchingofservernotifications
|
||||
CS_SimpleClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sending/receivingstatequeriesandanswers
|
||||
l Sending/receivingofactions
|
||||
l Enumerationofvideoinputandoutputchannels
|
||||
l EnumerationofdigitalIOcontacts
|
||||
l Receivinganddispatchingofservernotifications
|
||||
CS_SimpleDatabaseClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sendingdatabaseactionqueries
|
||||
l Sendingdatabasealarmqueries
|
||||
l Navigatingthroughdatabaseentries
|
||||
l Receivingdatabaseentries
|
||||
CS_SimpleGscActionClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Creating/DispatchingGeViScopeActions
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 112
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
l CreatingGeViScopeActionEventHandlers
|
||||
l Adding/RemovingEventHandlersonruntime
|
||||
MicrosoftVisualStudio2008/2010,C#,Console
|
||||
CS_ConsoleClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l BuildingGeViSoftmessagesfromuserinput
|
||||
l Receivinganddisplayingmessages
|
||||
l ComposingGeViSoftactionsfromstrings
|
||||
EmbarcaderoRADStudioXE,Delphi,VCL
|
||||
Delphi_SimpleActionClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sending/receivingofactions
|
||||
l Receivinganddispatchingofservernotifications
|
||||
l ConvertingbetweenASCIIandbinaryrepresentationofmessages.
|
||||
Delphi_SimpleClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sending/receivingstatequeriesandanswers
|
||||
l Sending/receivingofactions
|
||||
l Enumerationofvideoinputandoutputchannels
|
||||
l EnumerationofdigitalIOcontacts
|
||||
l Usageofvideoinputandoutputdescriptors
|
||||
l Usageofdigitalcontactinputandoutputdescriptors
|
||||
l Receivinganddispatchingofservernotifications
|
||||
Delphi_SimpleDatabaseClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l Sendingdatabaseactionqueries
|
||||
l Sendingdatabasealarmqueries
|
||||
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
Page 113
|
||||
────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
l Navigatingthroughdatabaseentries
|
||||
l Receivingdatabaseentries
|
||||
l ConvertingdatabaseanswersfrombinarytoASCIIrepresentation
|
||||
EmbarcaderoRADStudioXE,Delphi,Console
|
||||
Delphi_ConsoleClient
|
||||
l Connecting/disconnectingtoGeViServer
|
||||
l BuildingGeViSoftmessagesfromuserinput
|
||||
l Receivinganddisplayingmessages
|
||||
l ConvertingbetweenASCIIandbinaryrepresentationofmessages
|
||||
Reference in New Issue
Block a user