diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedbackAdvanced.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedbackAdvanced.cs
index f0a018c5..5baece21 100644
--- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedbackAdvanced.cs
+++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IBasicVolumeWithFeedbackAdvanced.cs
@@ -14,5 +14,10 @@ namespace PepperDash.Essentials.Core
/// Gets the volume level units
///
eVolumeLevelUnits Units { get; }
+
+ ///
+ /// Gets the maximum volume level
+ ///
+ int MaxVolumeLevel { get; }
}
}
\ No newline at end of file
diff --git a/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs b/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs
index 04f14ac9..229197f3 100644
--- a/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs
+++ b/src/PepperDash.Essentials.Core/Devices/LevelControlListItem.cs
@@ -8,7 +8,7 @@ namespace PepperDash.Essentials.Core;
///
/// Represents a level control item in a list, which can be used to control volume or mute functionality.
///
-public class LevelControlListItem : AudioControlListItemBase
+public class LevelControlListItem : AudioConptrolListItemBase
{
///
diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IBasicVolumeControlsMessenger.cs
similarity index 88%
rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs
rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IBasicVolumeControlsMessenger.cs
index ff38a784..91b01f78 100644
--- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs
+++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IBasicVolumeControlsMessenger.cs
@@ -9,19 +9,19 @@ using PepperDash.Essentials.Core;
namespace PepperDash.Essentials.AppServer.Messengers
{
///
- /// Represents a DeviceVolumeMessenger
+ /// Represents a IBasicVolumeControlsMessenger
///
- public class DeviceVolumeMessenger : MessengerBase
+ public class IBasicVolumeControlsMessenger : MessengerBase
{
private readonly IBasicVolumeControls device;
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
/// The key.
/// The message path.
/// The device.
- public DeviceVolumeMessenger(string key, string messagePath, IBasicVolumeControls device)
+ public IBasicVolumeControlsMessenger(string key, string messagePath, IBasicVolumeControls device)
: base(key, messagePath, device)
{
this.device = device;
@@ -40,6 +40,7 @@ namespace PepperDash.Essentials.AppServer.Messengers
{
Volume = new Volume
{
+ Label = device.Name,
Level = feedbackDevice?.VolumeLevelFeedback.IntValue ?? -1,
Muted = feedbackDevice?.MuteFeedback.BoolValue ?? false,
HasMute = true, // assume all devices have mute for now
@@ -50,6 +51,7 @@ namespace PepperDash.Essentials.AppServer.Messengers
{
messageObj.Volume.RawValue = volumeAdvanced.RawVolumeLevel.ToString();
messageObj.Volume.Units = volumeAdvanced.Units;
+ messageObj.Volume.MaxLevel = volumeAdvanced.MaxVolumeLevel;
}
PostStatusMessage(messageObj, id);
@@ -155,6 +157,7 @@ namespace PepperDash.Essentials.AppServer.Messengers
{
message.Volume.RawValue = volumeAdvanced.RawVolumeLevel.ToString();
message.Volume.Units = volumeAdvanced.Units;
+ message.Volume.MaxLevel = volumeAdvanced.MaxVolumeLevel;
}
PostStatusMessage(JToken.FromObject(message));
@@ -220,5 +223,11 @@ namespace PepperDash.Essentials.AppServer.Messengers
[JsonConverter(typeof(StringEnumConverter))]
[JsonProperty("units", NullValueHandling = NullValueHandling.Ignore)]
public eVolumeLevelUnits? Units { get; set; }
+
+ ///
+ /// Gets or sets the MaxLevel. Defaults to 65535, which is the standard for Crestron devices. This is used by the mobile control app to determine how to scale the volume level for display and input purposes.
+ ///
+ [JsonProperty("maxLevel", NullValueHandling = NullValueHandling.Ignore)]
+ public int MaxLevel { get; set; } = 65535;
}
}
\ No newline at end of file
diff --git a/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs b/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs
index e3454031..1b81a5b0 100644
--- a/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs
+++ b/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs
@@ -14,6 +14,7 @@ using PepperDash.Essentials.Devices.Common.Codec;
using PepperDash.Essentials.Devices.Common.VideoCodec;
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
using PepperDash.Essentials.Room.MobileControl;
+using PepperDash.Essentials.RoomBridges;
namespace PepperDash.Essentials
{
@@ -134,7 +135,7 @@ namespace PepperDash.Essentials
// ── Audio / Video ─────────────────────────────────────────────────────────
new MessengerFactoryEntry(
typeof(IBasicVolumeControls),
- (d, mp, ck) => new DeviceVolumeMessenger(
+ (d, mp, ck) => new IBasicVolumeControlsMessenger(
$"{d.Key}-volume-{ck}", mp, (IBasicVolumeControls)d)
),
new MessengerFactoryEntry(
@@ -404,6 +405,13 @@ namespace PepperDash.Essentials
(d, mp, ck) => new ILevelControlsMessenger(
$"{d.Key}-levelControls-{ck}", mp, (ILevelControls)d)
),
+
+ // ── Essentials Room ─────────────────────────────────────────────────────────
+ new MessengerFactoryEntry(
+ typeof(IEssentialsRoom),
+ (d, mp, ck) => new MobileControlEssentialsRoomBridge(
+ (IEssentialsRoom)d)
+ ),
};
}
}