feat: Enhance camera capabilities and messaging structure

- Introduced `ICameraCapabilities` interface and `CameraCapabilities` class for defining camera features like pan, tilt, zoom, and focus.
- Modified `IHasCameras` interface to include a list of `IHasCameraControls` objects for improved camera management.
- Refactored `CameraBaseMessenger` to be generic, enhancing flexibility and type safety.
- Updated `SendCameraFullMessageObject` to include detailed camera capabilities in status messages.
- Added `CameraStateMessage` class to encapsulate camera state, including control support and capabilities.
- Updated `IHasCamerasWithControlMessenger` to use `IKeyName` for camera list and selected camera properties, improving type consistency.
- Enhanced `MobileControlSystemController` to manage devices implementing `IHasCameraControls`, creating appropriate messengers for different device types.
This commit is contained in:
Neil Dorin
2025-10-07 15:37:31 -06:00
parent 82b5dc96c1
commit 2928c5cf94
6 changed files with 214 additions and 24 deletions

View File

@@ -1,7 +1,9 @@
using Newtonsoft.Json;
using PepperDash.Core;
using PepperDash.Essentials.Devices.Common.Cameras;
using System;
using System.Collections.Generic;
using System.Linq;
namespace PepperDash.Essentials.AppServer.Messengers
{
@@ -68,14 +70,12 @@ namespace PepperDash.Essentials.AppServer.Messengers
{
var state = new IHasCamerasWithControlsStateMessage
{
CameraList = CameraController.Cameras,
SelectedCamera = CameraController.SelectedCamera
CameraList = CameraController.Cameras.Cast<IKeyName>().ToList(),
SelectedCamera = CameraController.SelectedCamera as IKeyName
};
PostStatusMessage(state, clientId);
}
}
/// <summary>
@@ -87,13 +87,14 @@ namespace PepperDash.Essentials.AppServer.Messengers
/// List of cameras available in the device.
/// </summary>
[JsonProperty("cameraList", NullValueHandling = NullValueHandling.Ignore)]
public List<IHasCameraControls> CameraList { get; set; }
public List<IKeyName> CameraList { get; set; }
/// <summary>
/// The currently selected camera on the device.
/// </summary>
[JsonProperty("selectedCamera", NullValueHandling = NullValueHandling.Ignore)]
public IHasCameraControls SelectedCamera { get; set; }
public IKeyName SelectedCamera { get; set; }
}
}