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:
Administrator
2025-12-31 18:10:54 +01:00
commit 14893e62a5
4189 changed files with 1395076 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -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ücks
GeViSoftsuite.Itincludesanapplicationprogramminginterface(API)withallnecessary
DLLs,headers,exampleprojects,anddocumentationtohelpyougettingstartedwithyour
integrationeasily.
TheSDKsupportsC++andDelphi.Furthermorea.Netwrapperisincludedwhichallowsyou
tousetheSDKfromC#.Itprovidesvariousexampleprojectsandsolutionsintheselan-
guages.
────────────────────────────────────────────────────────────────────────────────
Page 3
────────────────────────────────────────────────────────────────────────────────
GeViSoft
GeViSoftisGeutebrückscentralmanagementsystemforvideocontrol.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ücks.
TheSDKincludestheDLLsandcorrespondingheaderfilesrequiredbyyourC++orDelphi
projects.Furthermore.NetwrapperDllsareincludedwhichallowyoutousetheSDKfrom
yourC#application.
SeveralexampleapplicationshelpyougettingstartedwiththeGeViSoftSDKdevelopment
andmayactasafoundationforyourownsolutions.
FilesandDirectoryStructure
Duringinstallation,theenvironmentvariable%GEVISOFTSDKPATH%isset.Itpointstothe
rootdirectoryoftheSDKinstallation.Thevariablesvalueisdeterminedbythepathchosen
astheinstalldirectoryduringsetup.Usually,thisis“C:\GEVISOFT”.AllSDKdirectoriesare
locatedinsidethisrootdirectory.
Thisisa(partial)treeviewofthestandardinstallation:
────────────────────────────────────────────────────────────────────────────────
Page 10
────────────────────────────────────────────────────────────────────────────────

View File

@@ -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.batscriptinyourGeViSoftinstallationsrootfolder.The
consoleargumentforcesthesoftwaretorunasaconsoleapplicationandallowsyouto
────────────────────────────────────────────────────────────────────────────────
Page 13
────────────────────────────────────────────────────────────────────────────────
easilymonitortheserversoutput.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)
TheGeViIOclientsconfigurationisalreadydoneforyouinsidethedatabasethatisshipped
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ücksGeViScope
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
CommunicationLogshowninthelowerpartoftheGeViAPITestClientswindow.
IfarealVX3wouldbeconnectedtoyourGeViSoftandtheinputswereconnectedtovideosig-
nals,youwouldswitchtherealsignaltotheaccordingoutput(normallyamonitor).Youwill
learnhowtousetheseswitchactionstoremotecontrolaGscViewinthesamewayyou
woulduseananaloguematrixinthechapterSwitchingVideo.
ManipulatingDigitalI/O
Similartothevideosignalsyoucanswitchdigitaloutputsandgeneratedigitalinputsignalsin
yourvirtualtestclient.
Generateasimulateddigitalinput:
Togenerateaninputmoveyourmousepointeroverthedesiredinputchannel.Aleftclick
willsimulateaclosingofthecontact,arightclickanopening.Thecontactsstatesare
colorcodedaccordingtothistable:
Color State
White Unknown
Red Closed
Green Open
Gray Unavailable
Generateasimulateddigitaloutput:
Togenerateanoutputmovethepointeroverthedesiredoutputsignal.Left-clickingwill
settheoutputsstatetoopen,right-clickingtoclose. Theoutputsstatesarecolorcoded
accordingtothistable:
Color State
White Unknown
Red Closed

View File

@@ -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
SofaryouonlyusedGeViAPITestClientsbuilt-infunctionalitytointeractwithGeViServer.
InthischapteryouwilllearntouseGeViSoftactionstocontrolthesystem.
GeViSoftactionscanbesentbytypingthemintothetextboxinthelowermiddleoftheGeVi-
APITestClientswindow.Youcanfindacompletelistofthepossibleactionsinthedoc-
umentation.
Hint
Youcaninteractivelygenerateactionsandlearnabouttheirparametersbycom-
posingtheminGeViSet.Therefore,openGeViSet,andconnecttotheserver.
ThennavigatetoServer->NamedactionsandpressAddinthewindowthat
popsup.InthewindowNamedactionsettingsyoumaypressthebuttonwiththe
threedots(“…”)totakeyoutotheActionsettingsmenu.
Thereyoucanchooseanyoftheimplementedactionsandviewtheirparameters
andsettings.Tofiltertheactionsbycategorychooseoneofthecategoriesfrom
theupperleftlistbox.Hooverthemouseoveranyoftheparameterstogeta
detaileddescriptionofit.
AsanexampleselectCrossbarcontrolasacategoryandmovetoCrossSwitchto
seethemessagesparametersontherightside.
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)CheckthatthecontactisalternatingafterpressingtheRefreshbutton,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.ConnecttoGeViServerviaGETASOpenacommandwindow(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)VerifythatyoucanalsoseetheactionintheGeViAPITestClientscom-
municationlog.Ifyoucannotseethemessage,makesureyouareconnectedand
yourfiltersettingsinthetabFilterGeViSoftaresetcorrectly.Tobesure,setthe
filtertoacceptallmessages.
6.Monitoractionssentbyotherclientsinyourtelnetsession:
a)SendanactionfromGeViAPITestClient:CustomAction(23,"HelloGETAS
client")
b)Verifythatyoureceivedtheactioninyourtelnetwindow.
VideoandIOControlwithGETAS
1.NowcontrolyourvirtualVX3byusingGETASMakesurethatGeViAPITestClient
isrunningwhileyouissuecommandsviatelnetandyoucanseetheVideo/DigIOtab.
YourGeViIO_01configurationshouldbethesameasinchapterSettingupGeViIO.

View File

@@ -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.SettheAlternateContactactionsparameterstoGlobalContactID=2,BlinkPeriod=
1000ms,andBlinkOnTime=500ms.EnterblinkthebeaconasCaption.
8.SendthesetuptotheGeViServer
9.TestthemappingbysendingtheactionInputContact(3,false)eitherbyGETASor
insideGeViAPITestClient.YoushouldseethemappedactionAlternateContact(2,
1000,500)deliveredbytheGeViServerdirectlyafterwards.Youcanalsochecktheout-
putsstatusinGeViAPITestClientsVideo/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 Periodicaltimerthistimerallowstriggeringactionsperiodicallyeverytimeit
reachesthenumberofmainticks.Afterfiringtheaction,thetimerrestartscounting
ticksfromzero.
l Periodicaltimerwithembeddedtickthistimeractssimilartothesimpleperi-
odicaltimer.Inaddition,itcanfireasecondactiononreachingthe“embeddedtick”
count.Asanexample,youcouldrealizeswitchingonandoffofabeaconlightwitha
timerlikethis.Simplyclosetheoutputattheembeddedtickandopenitatthemain
tick.
────────────────────────────────────────────────────────────────────────────────
Page 36
────────────────────────────────────────────────────────────────────────────────
Timer1
────────────────────────────────────────────────────────────────────────────────
Page 37
────────────────────────────────────────────────────────────────────────────────
ConfiguringaTimer
1.Torealizethebeaconstimerselect„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:

View File

@@ -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 Alarmnamecanbeusedinactions
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)SetthegroupsNameandDescriptiontoMonitorGroup1
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.Notethattheoutputscolorchangedtoredwhichindicatesan
alarmfeed.YoushouldalsofindtheAlarmStarted()actionintheCommunication
log
d)Acknowledgethealarmandopenthebarrierbyleft-clickinginputcontact2.Make
surethatthisleadstotheopeningofoutput1andanAlarmAcked()actionappearing
inthelog.
e)Quitthealarmbyleft-clickinginputcontact3.Thevideooutputscolorshould
changetogreenasthealarmhasfinished.Thebarrier(output1)shouldhaveclosed.
────────────────────────────────────────────────────────────────────────────────
Page 50
────────────────────────────────────────────────────────────────────────────────
SwitchingVideo
Thoughmonitorgroupsdatebacktoanaloguevideorecording,theideabehindthemcomesin
handywhencomplexsituationsaretobepresentedtooperators.InmodernCCTVsystems
mostofthesourcesaredigitalonesandtheviewersrunassoftwareondedicatedconsoles.
NeverthelesstheconceptofmonitorgroupscanstillbereproducedwithGeutebrückssys-
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.

View File

@@ -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
monitortheserversoutputduringyourdevelopment.
 WARNING
MakesuretodeleteallobjectsthatarecreatedinsideofDLLs.TheSDKoffersaDeleteObject()
methodfortheseobjects.
 NOTICE
────────────────────────────────────────────────────────────────────────────────
Page 57
────────────────────────────────────────────────────────────────────────────────
CallbackfunctionswhicharecalledoutoftheSDKDLLsarecalledfromthreads.Thesewere
createdinsidetheDLLs.Variablesandpointersthatarepassedasargumentsofthecallback
maynotbeusedoutsidethecallbackcontext.Theyareonlyvalidforthedurationofthecallback
call.
 NOTICE
StructuresthatareusedasargumentsforSDKfunctionsshouldalwaysbeinitializedbyuseof
thefunctionmemset().Ifthestructurecontainsasizeorstructsizeelement,thenithastobe
initializedwiththesizeof()function.
────────────────────────────────────────────────────────────────────────────────
Page 58
────────────────────────────────────────────────────────────────────────────────
OverviewoftheSDKsInterfacesforC++andDelphiusers
 NOTICE
ThefollowingparagraphsdescribetheSDKusagefromC++andDelphi.Foradescriptionofthe
.NetInterfacesseechapterC#and.Netspecifics
GeViProcAPI
TheSDKisbasedontwoDLLsandthecorrespondingheaders.TheGeViProcAPI.dllincon-
nectionwiththeGSCActions.dllimplementsalltheSDKsfunctionality.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.)AddGeViSoftsheaderandcppfilestoyourproject.
(YoucandothisbydragginganddroppingtheGeViScopeSDK\IncludefolderandtheGeV-
iSoftSDK\Includefolderfrom%GEVISOFTSDKPATH%\Examples\VS2008CPPtoyour
project.)
2.)AddtheSDKsincludefilestoyourprojectbyadding
$(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.)IntheprojectspropertiesTABConfigurationProperties->Linker->Generaladd
$(GEVISOFTSDKPATH)\Examples\VS2008CPP\GeViScopeSDK\lib
and
$(GEVISOFTSDKPATH)\Examples\VS2008CPP\GeViSoftSDK\lib
totheAdditionalLibraryDirectoriesofyourproject
5.)IntheprojectspropertiesTABConfigurationProperties->Linker->Input->Additional
DependenciesaddGeViProcAPI.libandGscActions.lib
6.)MakesurethatyouroutputfilecanfindthepathtoGeViProcAPIandGscActionsDLLs.
ItisrecommendedtosetConfigurationProperties->Linker->General->OutputFileto
$(GEVISOFTSDKPATH)\$(ProjectName).exeorcopytheDLLsintotheapplicationsfolder.
7.)SettheConfigurationProperties->Debugging->Commandtoyourexecutablesname:

View File

@@ -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.)AddGeViSoftsheaderandcppfilestoyourproject.
(YoucandothisbydragginganddroppingtheGeViScopeSDK\IncludefolderandtheGeV-
iSoftSDK\Includefolderfrom%GEVISOFTSDKPATH%\Examples\VS2010CPPtoyour
project.
2.)AddtheSDKsincludefilestoyourprojectbyadding
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViScopeSDK\Include
and
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViSoftSDK\Include
toyourConfigurationProperties->VC++Directories->IncludeDirectories
3.)AddtheSDKslibraryfilestoyourprojectbyadding
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViScopeSDK\lib
and
────────────────────────────────────────────────────────────────────────────────
Page 62
────────────────────────────────────────────────────────────────────────────────
$(GEVISOFTSDKPATH)\Examples\VS2010CPP\GeViSoftSDK\lib
toyourConfigurationProperties->VC++Directories->LibraryDirectories
4.)IntheprojectspropertiesTABConfigurationProperties->Linker->Input->Additional
DependenciesaddGeViProcAPI.libandGscActions.lib
5.)MakesurethatyouroutputfilecanfindthepathtoGeViProcAPIandGscActionsDLLs.
ItisrecommendedtosetConfigurationProperties->Linker->General->OutputFileto
$(GEVISOFTSDKPATH)\$(ProjectName).exeorcopytheDLLsintotheapplicationsfolder.
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.Callthewrappersconnectmethod
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)
{
//connecttotheserverConnectProgressCBisyourcallback
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));
}
//Yourclassscallback
boolCYourClass::ConnectProgress(intpercentageLower,
intpercentageUpper)
{
//Dos.th.,e.g.showaProgressCtrl.
return(true);
}
ConnectionMonitoring
GeViSoftoffersmethodstomonitorifyourconnectionisstillestablished.Itisadvisableto
monitortheconnectionfromyourapplicationandtryareconnectifitbreaksdown.
YoucanusethesendPing()methodforconnectionmonitoringwhichreturnstrueifthecon-
nectionisstillestablishedandfalseifnot.
────────────────────────────────────────────────────────────────────────────────
Page 67
────────────────────────────────────────────────────────────────────────────────
BestpracticeistocyclicallycallsendPing()fromaseparatethreadandhandletherecon-
nectionfrominsidethisthreadifnecessary.
Monitoringconnectionsis implementedintheSDKsexampleCPP_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

View File

@@ -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);
//DontforgettodeleteobjectsyoucreateinsidetheDLL
gevimessage->DeleteObject();
}
ReceivingActionMessages
ThisexampleshowsyouhowtoreceiveamessagefromGeViSoft.Asaprerequisite,aGeVi-
APIClientobjectmustalreadybecreatedandconnectedtotheserver.Furthermore,adata-
basenotificationcallbackfunctionmustbedefined.Thiscallbackfunctionwillbecalledfrom
insidetheGeViProcAPIDLLwheneveranotificationfromtheserverisreceived.
Pseudocode
1.Definethecallback
2.Definethecallbackshandlermethod
3.RegisteryourcallbackwiththeGeViAPIClientconnectionsobject.
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.Definethecallbacks 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.Allthestatequeriescon-
structorsarelocatedintheStateQueriesheader,C++,andPascalfiles.
StatequeriescanthenbesentwiththeSendStateQuery()methodoftheGeViAPIClient
class.ThismethodreturnsaCStateAnswerobjectwiththeGeViServersresponse.
CStateAnswer*StateAnswer=m_APIClient->SendStateQuery(
GetFirstVideoInputQuery,INFINITE);
Thesecondparameterofthemethodisthetimeoutforaserveranswerinmilliseconds.By
sendingINFINITE,youcanpreventthecallfromtimingout.
Creating,sending,andreceivingstatequeriesis implementedintheSDKsexam-
pleDelphi/CPP_SimpleClient.
Enumerationofallvideoinputs
Pseudocode
1.Createastatequerytogetthefirstvideoinput(classCSQGetFirstVideoInput)
2.Sendthequerytotheserver
────────────────────────────────────────────────────────────────────────────────
Page 77
────────────────────────────────────────────────────────────────────────────────
3.If theanswerisavalidinputchannelthen
4.REPEAT
a)Gettheactualchannels 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.
TogetfamiliarwiththepossibilitiesofGeViSoftsdatabasequeries,andespe-
ciallyitsfilteringoptions,pleasehavealookattheGeViAPITestClients“Data-
baseViewer”and“DatabaseFilter”tabs.
CreatingDatabaseQueries
Youcancreateadatabasequerybycallingitspredefinedconstructor.Allthedatabaseque-
riesconstructorsarelocatedintheDatabaseQueriesheader,C++,andPascalfiles.
DatabasequeriescanthenbesentwiththeSendDatabaseQuery()methodoftheGeVi-
APIClientclass.ThismethodreturnsaCDataBaseAnswerobjectwiththeGeViServers
response.
CDataBaseQuery*geviquery=newCDBQCreateActionQuery(0);
CDataBaseAnswer*dbAnswer=m_APIClient->SendDatabaseQuery(geviquery,INFI-
NITE);
Thesecondparameterofthemethodisthetimeoutforaserveranswerinmilliseconds.By
sendingINFINITE,youcanpreventthecallfromtimingout.
DatabaseQuerySessionHandling
Actionsendingandstatequeryingdidnotneedanyformofsessionhandling.Thisisdifferent
fordatabasequerying.Usuallyyouwanttocollectseveralrecordsthatareconnectedin

View File

@@ -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.Extractthelatestactionsprimarykeyfromtheanswer
6.CreateanewCDBQGetPrevquerywiththehandleandthelatestactionsprimarykeyas
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-
werstaballowsyoutoverifythattheyarestoredcorrectlyafterwards.
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 implementedintheSDKsexampleDelphi/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.Netwrapperstoyourprojectsreferences.
(Youcandothisbyright-clickingonReferencesinyourSolutionExplorer.AfterpressingAdd
Referencebrowsetoyour%GEVISOFTSDKPATH%andaddGeViProcAPINET_2_0.dll.Ifyou
plantouseGeViScopeActionsalsoaddGscActionsNET_2_0.dll.

View File

@@ -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.)Addtherequiredusingdirectivestoyourprojectssourcefiles.
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.
Example1Creatinganinstanceofamessageandsendingitafter-
wards
//CreateaCrossSwitchActionandswitch
//input7tooutput1
GeViAct_CrossSwitchmyAction=newGeViAct_CrossSwitch(
7,1,GeViTSwitchMode.sm_Normal);
//Sendtheaction
────────────────────────────────────────────────────────────────────────────────
Page 97
────────────────────────────────────────────────────────────────────────────────
myDB.SendMessage(myAction);
 NOTICE
Makesureyouhaveincludedyouractionscorrespondingactionclassnamespaceinyour
usingdirectives.SeeConfiguringyourIDEforGeViSoft.NetProjects->VS2008,C#
Example2Directlysendingamessagefromastring
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);
//DontforgettoregisterthehandlerinsidetheGeViSoftconnection
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()methodsparameters.
SendingGeViScopeActions
ExamplesendingaGeViScopemessage:
────────────────────────────────────────────────────────────────────────────────
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.

View File

@@ -0,0 +1,280 @@
================================================================================
GeViSoft_SDK_Documentation.pdf - Pages 101 to 110
================================================================================
────────────────────────────────────────────────────────────────────────────────
Page 101
────────────────────────────────────────────────────────────────────────────────
ExampleReceivingandDispatchingGeViScopeActionsinsideGeViSoft:
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.
ExampleSettingtheSendQuerytimeouttoonesecond:
myDB.SetQueryTimeoutInMs(1000);
Enumerationofallvideoinputs
Pseudocode
1.Createastatequerytogetthefirstvideoinput(classGeViSQ_GetFirstVideoInput)
2.Sendthequerytotheserver
3.Iftheanswerisavalidinputchannelthen
4.REPEAT
a)Gettheactualchannelsinformationfromtheanswerandprocessitasneeded
(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

View File

@@ -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