- Add GeViScope Bridge (C# .NET 8.0) on port 7720 - Full SDK wrapper for camera control, PTZ, actions/events - 17 REST API endpoints for GeViScope server interaction - Support for MCS (Media Channel Simulator) with 16 test channels - Real-time action/event streaming via PLC callbacks - Add GeViServer Bridge (C# .NET 8.0) on port 7710 - Integration with GeViSoft orchestration layer - Input/output control and event management - Update Python API with new routers - /api/geviscope/* - Proxy to GeViScope Bridge - /api/geviserver/* - Proxy to GeViServer Bridge - /api/excel/* - Excel import functionality - Add Flutter app GeViScope integration - GeViScopeRemoteDataSource with 17 API methods - GeViScopeBloc for state management - GeViScopeScreen with PTZ controls - App drawer navigation to GeViScope - Add SDK documentation (extracted from PDFs) - GeViScope SDK docs (7 parts + action reference) - GeViSoft SDK docs (12 chunks) - Add .mcp.json for Claude Code MCP server config Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
24 KiB
GeViSoft SDK - Functions & Examples Summary
Document Version: 2012_1.7 Total Pages: 113 Total Examples Found: 33 Generated: 2026-01-12
Table of Contents
SDK Overview
Supported Languages
- C++ (primary)
- Delphi
- C# (.NET wrapper)
Main SDKs
- GeViProcAPI - Flat C function calls for GeViServer communication
- GeViAPIClient - Object-oriented abstraction layer over GeViProcAPI
- GscActions - GeViScope action message handling
Architecture
- Client-Server paradigm
- GeViServer - Backend server managing database
- GeViIO - IO client handling peripheral connections
- GeViSet - Configuration tool
- GeViAPITestClient - Testing and debugging tool
Core Components
1. Connection Management
Found in: Chunks 2, 6, 7, 10, 11
Key Functions:
GeViAPI_Database_Connect()- Connect to GeViServerGeViAPI_Database_Disconnect()- Disconnect from serverGeViAPI_Database_Ping()- Check connection status- Password encryption functions
Example Implementations:
-
Direct GeViProcAPI Connection (Chunk 7, Pages 61-70)
- Declare database handle
- Encrypt password string
- Create remote database object
- Connect to database
-
GeViAPIClient Connection (Chunk 7, Pages 61-70)
- Use higher-level abstraction
- Simpler connection management
-
Connection Monitoring (Chunk 7, Pages 61-70)
- Create separate monitoring thread
- Send periodic pings
- Auto-reconnect on failure
- 10-second sleep intervals
-
C# Connection (Chunk 10, Pages 91-100)
- Event-based connection handling
- Database notification callbacks
2. Action Messages
Found in: Chunks 3, 4, 7, 8, 10
Key Actions:
Video Control:
CrossSwitch(IDVideoInput, IDVideoOutput, Switchmode)- Route video signalsClearOutput(IDVideoOutput)- Clear video output- Video routing and matrix control
Digital I/O:
InputContact(ContactID, State)- Digital input stateOpenContact(ContactID)- Open digital outputCloseContact(ContactID)- Close digital output
Timer Control:
StartTimer(TimerID, TimerName)- Start timerStopTimer(TimerID, TimerName)- Stop timer
Event Control:
- Event start/stop/kill operations
- Event retriggering
- AutoStop configuration
Alarm Control:
- Alarm start/acknowledge/quit
- Monitor group assignment
- Priority-based alarm handling
- Retrigger options
Message Creation Methods:
- Direct Constructor (Chunk 7, Pages 61-70)
CGeViMessage* gevimessage = new CActCustomAction(123, "HelloGeViSoft!");
- From ASCII String (Chunk 7, Pages 61-70)
string buffer("CustomAction(123,\"Hello GeViSoft!\")");
CGeViMessage* gevimessage = CGeViMessage::ReadASCIIMessage(
buffer.c_str(), buffer.size(), bytesRead);
- ASCII Output (Chunk 7, Pages 61-70)
- Convert binary messages to ASCII representation
- C# Message Creation (Chunk 10, Pages 91-100)
// Method 1: Instance creation
GeViAct_CrossSwitch myAction = new GeViAct_CrossSwitch(7, 1, GeViTSwitchMode.sm_Normal);
myDB.SendMessage(myAction);
// Method 2: String-based
myDB.SendMessage("CrossSwitch(7,1,0)");
3. GeViScope Integration
Found in: Chunks 2, 8, 10, 11
Key Functions:
CActGscAction- GeViScope action wrapper- GeViScope server alias configuration
- Bidirectional action passing
Examples:
- Creating GeViScope Actions (Chunk 8, Pages 71-80)
CGeViMessage* gevimessage = new CActGscAction(
"YourGscServerName",
GscAct_CreateCustomAction(1, L"HelloGeViScope!"));
- Sending GeViScope Messages (Chunk 8, Pages 71-80)
- Use server alias from GeViSet configuration
- See "ActionMessages -> Creating Action Messages -> Example 4"
- C# GeViScope Actions (Chunk 10, Pages 91-100)
GscAct_CustomAction myGscAction = new GscAct_CustomAction(23, "HelloGeViScope!");
myDB.SendMessage("GEVISCOPE_ALIAS", myGscAction);
- Receiving/Dispatching GeViScope Actions (Chunk 11, Pages 101-110)
- Use
GscActionDispatcherclass - Event-based dispatching
- Register handlers for specific GeViScope actions
- Embedded actions in
GscActionwrapper
- Use
Configuration Required:
- GeViScope SDK installation
- Connection configuration in GeViSet
- Server alias setup
4. State Queries
Found in: Chunks 8, 11
Query Types:
CSQGetFirstVideoInput- Get first video input channelCSQGetNextVideoInput- Get next video input channelCSQGetFirstVideoOutput- Get first video output channelCSQGetNextVideoOutput- Get next video output channel- Digital I/O enumeration queries
Usage Pattern (Chunk 8, Pages 71-80):
- Create state query
- Send query with
SendStateQuery(query, INFINITE) - Receive
CStateAnswerobject - Process answer data
- Iterate with "next" queries
C# Implementation (Chunk 11, Pages 101-110):
GeViMessage myAnswer;
GeViMessage myQuery = new GeViSQ_GetFirstVideoInput(true, true);
myDB.SendQuery(myQuery, out myAnswer);
if (myAnswer is GeViSA_VideoInputInfo) {
// Process video input info
}
Timeout Control:
- Default: 3000ms
- Use
INFINITEfor no timeout - C#:
SetQueryTimeoutInMs()method
5. Database Queries
Found in: Chunks 8, 9
Query Session Workflow:
- Create Action Query (Chunk 9, Pages 81-90)
CDataBaseQuery* geviquery = new CDBQCreateActionQuery(0);
CDataBaseAnswer* dbanswer = m_APIClient->SendDatabaseQuery(geviquery, INFINITE);
- Get Query Handle (Chunk 9, Pages 81-90)
if (dbanswer->m_AnswerCode == dbac_QueryHandle) {
CDBQQueryHandle* handle = reinterpret_cast<CDBQQueryHandle*>(dbanswer);
}
-
Navigate Records (Chunk 9, Pages 81-90)
CDBQGetLast- Get latest recordCDBQGetNext- Get next recordCDBQGetPrev- Get previous recordCDBQGetFirst- Get first record
-
Filter Queries (Chunk 9, Pages 81-90)
CDBFTypeName- Filter by action type nameCDBFPK_GrtEqu- Filter by primary key >= valueCDBFPK_LowEqu- Filter by primary key <= value- Filters use LIKE comparison:
dbc_LIKE - Multiple filters can be combined (AND logic)
-
Close Query Session
- Release query handle
- Clean up resources
Example: Retrieve Two Latest Actions (Chunk 9, Pages 81-90)
- Create
CDBQCreateActionQuery - Get handle from response
- Send
CDBQGetLastquery - Extract primary key
- Send
CDBQGetPrevwith handle and PK - Process results
Example: Filtered Query (Chunk 9, Pages 81-90)
- Filter for
CustomActiontypes - With primary key between 500-600
- Send filters after obtaining handle
- Iterate through filtered results
6. Event Configuration
Found in: Chunks 4, 5
Event Options:
| Option | Description |
|---|---|
| Name | Event name for actions |
| Description | Event description |
| EventID | Event identifier |
| Active | Must be checked to trigger |
| Startby | Actions that trigger the event (OR logic) |
| Onstart | Actions executed on start (AND logic) |
| Onstop | Actions executed on stop (AND logic) |
| Stopafter | Auto-stop timeout period |
| Retriggerable | Allow event retriggering |
Example: Video Routing Event (Chunk 4, Pages 31-40)
Scenario: Digital input 3 triggers video routing
- Trigger:
InputContact(3, true)- Contact 3 closes - On Start:
CrossSwitch(3, 2, 0)- Route input 3 to output 2 - On Stop:
ClearOutput(2)- Clear output 2 - Auto Stop: After 5 seconds
- Retriggerable: Yes
7. Timer Configuration
Found in: Chunk 4
Timer Types:
- Periodical - Regular intervals
- Periodical with embedded tick - Two ticks per cycle
Example: Beacon Light Timer (Chunk 4, Pages 31-40)
Scenario: Toggle beacon at 1Hz
- Main Tick: Every 1000ms →
CloseContact(2)- Turn on - Embedded Tick: Every 500ms →
OpenContact(2)- Turn off - Control:
- Start:
StartTimer(1, "BeaconTimer") - Stop:
StopTimer(1, "BeaconTimer")
- Start:
Timer Addressing:
- By Name:
StartTimer(0, "BeaconTimer") - By ID:
StartTimer(1, "") - Name takes precedence over ID
8. Alarm Configuration
Found in: Chunks 5
Alarm Options:
| Option | Description |
|---|---|
| Name/Description | Alarm identification |
| AlarmID | Numeric identifier |
| Active | Enable/disable alarm |
| Priority | 1 (high) to 10 (low) |
| Monitor Group | Display target monitors |
| Cameras | Video inputs to show |
| Retriggerable | Allow retriggering |
| Popup (Retrigger) | Show popup on retrigger |
| Undo acknowledge (Retrigger) | Reset ack state on retrigger |
| User specific (Retrigger) | Custom retrigger actions |
Alarm Actions:
- Start by - Actions that trigger alarm (OR)
- On start - Actions on alarm start (AND)
- Acknowledge by - Actions to acknowledge (OR)
- On acknowledge - Actions on acknowledgment (AND)
- Quit by - Actions to quit alarm (OR)
- On quit - Actions on alarm quit (AND)
Example: Parking Lot Alarm (Chunk 5, Pages 41-50)
Scenario: Vehicle detection and barrier control
- Trigger:
InputContact(1, true)- Vehicle detected - Acknowledge:
InputContact(2, true)- Operator button - On Acknowledge:
OpenContact(1)- Open barrier - Quit:
InputContact(3, true)- Vehicle passed - On Quit:
CloseContact(1)- Close barrier - Cameras: Video inputs 4 and 7
- Monitor Group: Outputs 1 and 2
9. Callback & Notification Handling
Found in: Chunks 6, 7, 8, 10
Callback Types:
-
Database Notification Callback (Chunk 8, Pages 71-80)
- Triggered on server messages
NFServer_NewMessage- New message receivedNFServer_Disconnected- Connection lostNFServer_GoingShutdown- Server shutting down
-
C# Event Handlers (Chunk 10, Pages 91-100)
- Event-based message dispatching
- Register handlers for specific actions
- Automatic action parsing
Example: Receiving Messages (Chunk 8, Pages 71-80)
void DatabaseNotification(TServerNotification Notification, void* Params) {
if (Notification == NFServer_NewMessage) {
TMessageEntry* messageEntry = reinterpret_cast<TMessageEntry*>(Params);
CGeViMessage* gevimessage = CGeViMessage::ReadBinMessage(
messageEntry->Buffer,
messageEntry->Length,
noOfBytesRead);
// Process message
}
}
C# Example: Action Events (Chunk 10, Pages 91-100)
// Register event handler
myDB.ReceivedCrossSwitch += myDB_ReceivedCrossSwitch;
// Handler method
void myDB_ReceivedCrossSwitch(object sender, GeViAct_CrossSwitchEventArgs e) {
// Process CrossSwitch action
}
Examples by Category
Connection Examples (6 examples)
-
CPP_SimpleActionClient (C++, VS2008/VS2010)
- Basic connection/disconnection
- Sending/receiving actions
- Server notifications
- Message conversion
-
CPP_MonitoredConnectionClient (C++, VS2008/VS2010)
- Connection monitoring
- Auto-reconnect on loss
- Ping-based health checks
-
CS_SimpleActionClient (C#, VS2008/VS2010)
- .NET connection handling
- Event-based notifications
-
CS_ConsoleClient (C#, VS2008/VS2010)
- Console-based client
- User input parsing
-
Delphi_SimpleActionClient (Delphi, RAD Studio XE)
- Delphi connection implementation
-
Delphi_ConsoleClient (Delphi, RAD Studio XE)
- Delphi console client
Video/IO Control Examples (3 examples)
-
CrossSwitching Video (Chunk 2, 3, Pages 11-30)
- Select input and output
- Route video signals
- Use GeViAPI TestClient
-
Virtual VX3 Matrix (Chunk 2, Pages 11-20)
- Configure virtual matrix
- VirtualVX3 setup
-
GeViScope Video Control (Chunk 2, Pages 11-20)
- Control GeViScope/GscView
- Like analogue matrix
Timer Examples (1 example)
- Beacon Timer (Chunk 4, Pages 31-40)
- Periodical with embedded tick
- 1Hz toggle frequency
- Digital output control
Event Examples (1 example)
- Video Routing Event (Chunk 4, Pages 31-40)
- Digital input trigger
- Auto-stop after 5 seconds
- Retriggerable configuration
Alarm Examples (1 example)
- Parking Lot Alarm (Chunk 5, Pages 41-50)
- Multi-stage alarm flow
- Acknowledge/quit pattern
- Monitor group routing
- Camera assignment
State Query Examples (4 examples)
-
Enumerate Video Inputs (Chunk 8, Pages 71-80, C++)
- GetFirst/GetNext pattern
- Active/enabled filtering
- INFINITE timeout
-
Enumerate Video Inputs (Chunk 11, Pages 101-110, C#)
- .NET implementation
- Query timeout configuration
- List building
-
Enumerate Video Outputs (Referenced, similar pattern)
-
Enumerate Digital I/O (Referenced, similar pattern)
Database Query Examples (5 examples)
-
Create Action Query (Chunk 9, Pages 81-90)
- Get query handle
- Basic query session
-
Retrieve Two Latest Actions (Chunk 9, Pages 81-90)
- GetLast/GetPrev navigation
- Primary key extraction
-
Filter by Action Type (Chunk 9, Pages 81-90)
- TypeName filter
- LIKE comparison
-
Filter by Primary Key Range (Chunk 9, Pages 81-90)
- PK_GrtEqu and PK_LowEqu
- Range filtering
-
Complex Filtered Query (Chunk 9, Pages 81-90)
- Multiple filters combined
- CustomAction with PK 500-600
GeViScope Examples (4 examples)
-
Create GeViScope Action (Chunk 8, Pages 71-80, C++)
- CActGscAction constructor
- Server alias usage
-
Send GeViScope Message (Chunk 8, Pages 71-80)
- Through GeViSoft connection
-
Send GeViScope Action (Chunk 10, Pages 91-100, C#)
- .NET wrapper usage
- GscAct_CustomAction
-
Receive/Dispatch GeViScope Actions (Chunk 11, Pages 101-110)
- GscActionDispatcher
- Event-based handling
- Embedded action extraction
Message Conversion Examples (3 examples)
-
Binary to ASCII (Chunk 7, Pages 61-70)
- ReadASCIIMessage
- ASCII representation
-
ASCII to Binary (Chunk 7, Pages 61-70)
- Parse string messages
- bytesRead tracking
-
Direct Constructor (Chunk 7, Pages 61-70)
- Type-safe message creation
- No parsing required
Testing Plan
Phase 1: Connection & Basic Communication
Duration: Test 1-3 days
Test Cases:
-
TC-001: Connect to GeViServer
- Input: Server IP, username, password
- Expected: Successful connection
- Verify: Connection status indicator
-
TC-002: Disconnect from GeViServer
- Pre-condition: Connected
- Expected: Clean disconnection
- Verify: Resources released
-
TC-003: Connection Monitoring
- Action: Disconnect network
- Expected: Auto-reconnect
- Verify: Connection restored within 10s
-
TC-004: Send Ping
- Action: Send ping command
- Expected: Pong response
- Verify: Latency measurement
Phase 2: Video Control
Duration: Test 2-4 days
Test Cases:
-
TC-005: Cross-Switch Video
- Input: VideoInput=7, VideoOutput=3
- Action: Send CrossSwitch(7, 3, 0)
- Expected: Video routed
- Verify: Output shows input 7
-
TC-006: Clear Video Output
- Pre-condition: Video routed
- Action: Send ClearOutput(3)
- Expected: Output cleared
- Verify: Output shows no video
-
TC-007: Enumerate Video Inputs
- Action: GetFirstVideoInput, loop GetNextVideoInput
- Expected: List of all inputs
- Verify: Count matches configuration
-
TC-008: Enumerate Video Outputs
- Action: GetFirstVideoOutput, loop GetNextVideoOutput
- Expected: List of all outputs
- Verify: Count matches configuration
Phase 3: Digital I/O Control
Duration: Test 1-2 days
Test Cases:
-
TC-009: Close Digital Output
- Input: ContactID=1
- Action: CloseContact(1)
- Expected: Output closed
- Verify: Physical contact state
-
TC-010: Open Digital Output
- Input: ContactID=1
- Action: OpenContact(1)
- Expected: Output opened
- Verify: Physical contact state
-
TC-011: Read Digital Input
- Action: Monitor InputContact events
- Expected: Receive state changes
- Verify: Event data matches hardware
-
TC-012: Enumerate Digital I/O
- Action: Query all contacts
- Expected: List of all contacts
- Verify: Active/inactive states
Phase 4: Timer Operations
Duration: Test 1-2 days
Test Cases:
-
TC-013: Start Timer by Name
- Input: TimerName="BeaconTimer"
- Action: StartTimer(0, "BeaconTimer")
- Expected: Timer starts
- Verify: Timer ticks received
-
TC-014: Start Timer by ID
- Input: TimerID=1
- Action: StartTimer(1, "")
- Expected: Timer starts
- Verify: Timer events
-
TC-015: Stop Timer
- Pre-condition: Timer running
- Action: StopTimer(1, "BeaconTimer")
- Expected: Timer stops
- Verify: No more ticks
-
TC-016: Beacon Timer (Embedded Tick)
- Configuration: MainTick=1000ms, EmbeddedTick=500ms
- Expected: 1Hz toggle pattern
- Verify: Digital output toggles
Phase 5: Event Handling
Duration: Test 2-3 days
Test Cases:
-
TC-017: Trigger Event by Digital Input
- Configuration: StartBy=InputContact(3, true)
- Action: Close contact 3
- Expected: Event starts
- Verify: OnStart actions execute
-
TC-018: Event Auto-Stop
- Configuration: StopAfter=5 seconds
- Expected: Event stops automatically
- Verify: OnStop actions execute
-
TC-019: Retrigger Event
- Configuration: Retriggerable=true
- Action: Trigger again while running
- Expected: Event restarts
- Verify: Event counter resets
-
TC-020: Video Routing Event
- Full scenario from documentation
- Expected: Complete workflow
- Verify: All actions execute
Phase 6: Alarm Handling
Duration: Test 2-3 days
Test Cases:
-
TC-021: Start Alarm
- Trigger: InputContact(1, true)
- Expected: Alarm state active
- Verify: OnStart actions execute
-
TC-022: Acknowledge Alarm
- Action: InputContact(2, true)
- Expected: Alarm acknowledged
- Verify: OnAcknowledge actions execute
-
TC-023: Quit Alarm
- Action: InputContact(3, true)
- Expected: Alarm quit
- Verify: OnQuit actions execute
-
TC-024: Parking Lot Alarm (Full Scenario)
- Full workflow from documentation
- Expected: Complete alarm lifecycle
- Verify: All stages work correctly
-
TC-025: Alarm Priority
- Configuration: Multiple alarms with different priorities
- Expected: High priority displaces low
- Verify: Monitor group shows correct alarm
-
TC-026: Alarm Retriggering
- Configuration: Retriggerable=true
- Action: Trigger again
- Expected: Alarm restarted
- Verify: Undo acknowledge if configured
Phase 7: Database Queries
Duration: Test 2-3 days
Test Cases:
-
TC-027: Create Action Query
- Action: Send CDBQCreateActionQuery
- Expected: Query handle received
- Verify: Handle != 0
-
TC-028: Get Last Action
- Action: CDBQGetLast with handle
- Expected: Latest action record
- Verify: Primary key matches
-
TC-029: Navigate Previous/Next
- Action: GetPrev, GetNext sequence
- Expected: Sequential navigation
- Verify: Record order
-
TC-030: Filter by Action Type
- Filter: TypeName="CustomAction"
- Expected: Only CustomAction records
- Verify: All results are CustomAction
-
TC-031: Filter by Primary Key Range
- Filter: PK >= 500 AND PK <= 600
- Expected: Records in range
- Verify: All PKs between 500-600
-
TC-032: Complex Multi-Filter Query
- Filters: TypeName + PK range
- Expected: Combined filter results
- Verify: Results match all criteria
-
TC-033: Close Query Session
- Action: Release query handle
- Expected: Resources freed
- Verify: No memory leaks
Phase 8: GeViScope Integration
Duration: Test 2-3 days
Test Cases:
-
TC-034: Send GeViScope CustomAction
- Input: TypeID=123, Text="HelloGeViScope!"
- Expected: Action sent to GeViScope
- Verify: GeViScope receives action
-
TC-035: Receive GeViScope Action
- Pre-condition: GeViScope sends action
- Expected: Action received in GeViSoft
- Verify: Correct parsing
-
TC-036: Dispatch GeViScope Actions
- Configuration: Event handlers registered
- Expected: Handlers called
- Verify: Correct action types
-
TC-037: GeViScope Server Alias
- Configuration: Multiple GeViScope servers
- Action: Address by alias
- Expected: Correct server receives
- Verify: Alias routing works
Phase 9: Message Conversion & Parsing
Duration: Test 1-2 days
Test Cases:
-
TC-038: Binary to ASCII Conversion
- Input: Binary CGeViMessage
- Expected: ASCII string output
- Verify: Correct format
-
TC-039: ASCII to Binary Conversion
- Input: "CrossSwitch(7,3,0)"
- Expected: Binary CGeViMessage
- Verify: Correct parsing
-
TC-040: Direct Constructor Creation
- Action: new CActCrossSwitch(7, 3, 0)
- Expected: Valid message
- Verify: Type-safe construction
Phase 10: Error Handling & Edge Cases
Duration: Test 1-2 days
Test Cases:
-
TC-041: Invalid Connection Parameters
- Input: Wrong IP/password
- Expected: Connection failure
- Verify: Error message
-
TC-042: Send Action While Disconnected
- Pre-condition: Not connected
- Expected: Error or queue
- Verify: Graceful handling
-
TC-043: Query Timeout
- Action: Query with 1ms timeout
- Expected: Timeout error
- Verify: No deadlock
-
TC-044: Invalid Action Parameters
- Input: CrossSwitch(-1, 999, 0)
- Expected: Parameter validation
- Verify: Error message
-
TC-045: Server Shutdown During Operation
- Action: Stop GeViServer
- Expected: NFServer_GoingShutdown
- Verify: Graceful cleanup
Implementation Status Tracking
To Be Mapped Against Flutter App:
- Connection management
- Video control actions
- Digital I/O control
- Timer management
- Event configuration
- Alarm handling
- State queries
- Database queries
- GeViScope integration
- Message parsing
- Callback handling
- Error handling
Priority Matrix:
| Priority | Category | Reason |
|---|---|---|
| P0 (Critical) | Connection Management | Foundation for all operations |
| P0 (Critical) | Video Control | Core functionality |
| P1 (High) | Digital I/O | Hardware integration |
| P1 (High) | State Queries | System information |
| P2 (Medium) | Events | Automation logic |
| P2 (Medium) | Alarms | Alert handling |
| P2 (Medium) | Timers | Scheduled operations |
| P3 (Low) | Database Queries | Historical data |
| P3 (Low) | GeViScope | Advanced integration |
Notes
Important Considerations:
- Thread Safety: All callback handlers must be thread-safe
- Memory Management: Call DeleteObject() on messages after use
- Timeouts: Use INFINITE cautiously, prefer explicit timeouts
- Error Handling: Always check answer codes before processing
- Query Sessions: Close query handles to prevent resource leaks
Configuration Prerequisites:
- GeViServer must be running
- GeViIO client configured for virtual or physical hardware
- GeViSet configuration completed
- For GeViScope: SDK installed and connection configured
Development Tools:
- GeViAPITestClient - Essential for testing and debugging
- Use communication log to monitor action flow
- Database Viewer tab for query testing
- Video/DigIO tab for visual verification
Next Steps:
- Map each function to Flutter app implementation
- Identify missing implementations
- Prioritize implementation gaps
- Execute test plan systematically
- Document results and issues