- 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>
182 lines
3.8 KiB
Dart
182 lines
3.8 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
|
|
abstract class GeViScopeEvent extends Equatable {
|
|
const GeViScopeEvent();
|
|
|
|
@override
|
|
List<Object?> get props => [];
|
|
}
|
|
|
|
/// Connect to GeViScope Camera Server
|
|
class ConnectGeViScopeEvent extends GeViScopeEvent {
|
|
final String address;
|
|
final String username;
|
|
final String password;
|
|
|
|
const ConnectGeViScopeEvent({
|
|
required this.address,
|
|
required this.username,
|
|
required this.password,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [address, username, password];
|
|
}
|
|
|
|
/// Disconnect from GeViScope
|
|
class DisconnectGeViScopeEvent extends GeViScopeEvent {
|
|
const DisconnectGeViScopeEvent();
|
|
}
|
|
|
|
/// Check connection status
|
|
class CheckGeViScopeStatusEvent extends GeViScopeEvent {
|
|
const CheckGeViScopeStatusEvent();
|
|
}
|
|
|
|
/// Load media channels
|
|
class LoadChannelsEvent extends GeViScopeEvent {
|
|
const LoadChannelsEvent();
|
|
}
|
|
|
|
/// Refresh media channels
|
|
class RefreshChannelsEvent extends GeViScopeEvent {
|
|
const RefreshChannelsEvent();
|
|
}
|
|
|
|
/// Send CrossSwitch command
|
|
class SendGeViScopeCrossSwitchEvent extends GeViScopeEvent {
|
|
final int videoInput;
|
|
final int videoOutput;
|
|
final int switchMode;
|
|
|
|
const SendGeViScopeCrossSwitchEvent({
|
|
required this.videoInput,
|
|
required this.videoOutput,
|
|
this.switchMode = 0,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [videoInput, videoOutput, switchMode];
|
|
}
|
|
|
|
/// PTZ Camera Pan
|
|
class CameraPanEvent extends GeViScopeEvent {
|
|
final int camera;
|
|
final String direction;
|
|
final int speed;
|
|
|
|
const CameraPanEvent({
|
|
required this.camera,
|
|
required this.direction,
|
|
this.speed = 50,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [camera, direction, speed];
|
|
}
|
|
|
|
/// PTZ Camera Tilt
|
|
class CameraTiltEvent extends GeViScopeEvent {
|
|
final int camera;
|
|
final String direction;
|
|
final int speed;
|
|
|
|
const CameraTiltEvent({
|
|
required this.camera,
|
|
required this.direction,
|
|
this.speed = 50,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [camera, direction, speed];
|
|
}
|
|
|
|
/// PTZ Camera Zoom
|
|
class CameraZoomEvent extends GeViScopeEvent {
|
|
final int camera;
|
|
final String direction;
|
|
final int speed;
|
|
|
|
const CameraZoomEvent({
|
|
required this.camera,
|
|
required this.direction,
|
|
this.speed = 50,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [camera, direction, speed];
|
|
}
|
|
|
|
/// PTZ Camera Stop
|
|
class CameraStopEvent extends GeViScopeEvent {
|
|
final int camera;
|
|
|
|
const CameraStopEvent({required this.camera});
|
|
|
|
@override
|
|
List<Object?> get props => [camera];
|
|
}
|
|
|
|
/// PTZ Camera Preset
|
|
class CameraPresetEvent extends GeViScopeEvent {
|
|
final int camera;
|
|
final int preset;
|
|
|
|
const CameraPresetEvent({
|
|
required this.camera,
|
|
required this.preset,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [camera, preset];
|
|
}
|
|
|
|
/// Close digital contact
|
|
class GeViScopeCloseContactEvent extends GeViScopeEvent {
|
|
final int contactId;
|
|
|
|
const GeViScopeCloseContactEvent({required this.contactId});
|
|
|
|
@override
|
|
List<Object?> get props => [contactId];
|
|
}
|
|
|
|
/// Open digital contact
|
|
class GeViScopeOpenContactEvent extends GeViScopeEvent {
|
|
final int contactId;
|
|
|
|
const GeViScopeOpenContactEvent({required this.contactId});
|
|
|
|
@override
|
|
List<Object?> get props => [contactId];
|
|
}
|
|
|
|
/// Send custom action
|
|
class SendGeViScopeCustomActionEvent extends GeViScopeEvent {
|
|
final int typeId;
|
|
final String text;
|
|
|
|
const SendGeViScopeCustomActionEvent({
|
|
required this.typeId,
|
|
this.text = '',
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [typeId, text];
|
|
}
|
|
|
|
/// Send raw action
|
|
class SendGeViScopeActionEvent extends GeViScopeEvent {
|
|
final String action;
|
|
|
|
const SendGeViScopeActionEvent({required this.action});
|
|
|
|
@override
|
|
List<Object?> get props => [action];
|
|
}
|
|
|
|
/// Clear last action result
|
|
class ClearGeViScopeActionResultEvent extends GeViScopeEvent {
|
|
const ClearGeViScopeActionResultEvent();
|
|
}
|