cleaned out framework files; added framework submodule; referneced p.core to reference in framework; moved essentials.sln; changed paths in sln to match; test build

This commit is contained in:
Heath Volmer
2018-06-28 13:59:14 -06:00
parent 058ea730ed
commit 0e9d1e4c35
413 changed files with 33026 additions and 71338 deletions

View File

@@ -0,0 +1,48 @@
namespace PepperDash.Essentials
{
public class CrestronTouchpanelPropertiesConfig
{
public string IpId { get; set; }
public string DefaultRoomKey { get; set; }
public string RoomListKey { get; set; }
public string SgdFile { get; set; }
public string ProjectName { get; set; }
public bool ShowVolumeGauge { get; set; }
public bool UsesSplashPage { get; set; }
public bool ShowDate { get; set; }
public bool ShowTime { get; set; }
public UiSetupPropertiesConfig Setup { get; set; }
public string HeaderStyle { get; set; }
public bool IncludeInFusionRoomHealth { get; set; }
/// <summary>
/// The count of sources that will trigger the "additional" arrows to show on the SRL.
/// Defaults to 5
/// </summary>
public int SourcesOverflowCount { get; set; }
public CrestronTouchpanelPropertiesConfig()
{
SourcesOverflowCount = 5;
HeaderStyle = CrestronTouchpanelPropertiesConfig.Habanero;
}
/// <summary>
/// "habanero"
/// </summary>
public const string Habanero = "habanero";
/// <summary>
/// "verbose"
/// </summary>
public const string Verbose = "verbose";
}
/// <summary>
///
/// </summary>
public class UiSetupPropertiesConfig
{
public bool IsVisible { get; set; }
}
}

View File

@@ -0,0 +1,28 @@
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using Crestron.SimplSharp;
//using Crestron.SimplSharpPro;
//using Crestron.SimplSharpPro.DeviceSupport;
//using Crestron.SimplSharpPro.UI;
//using PepperDash.Essentials.Core;
//namespace PepperDash.Essentials
//{
// public class DualDisplaySourceSRLController : SubpageReferenceList
// {
// public DualDisplaySourceSRLController(BasicTriListWithSmartObject triList,
// uint smartObjectId, EssentialsPresentationRoom room)
// : base(triList, smartObjectId, 3, 3, 3)
// {
// var srcList = room.s items.Values.ToList().OrderBy(s => s.Order);
// foreach (var item in srcList)
// {
// GetBoolFeedbackSig(index, 1).UserObject = new Action<bool>(routeAction);
// }
// }
// }
//}

View File

@@ -0,0 +1,181 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronIO;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
using Crestron.SimplSharpPro.UI;
using PepperDash.Core;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.PageManagers;
namespace PepperDash.Essentials
{
public class EssentialsTouchpanelController : Device
{
public BasicTriListWithSmartObject Panel { get; private set; }
public PanelDriverBase PanelDriver { get; private set; }
CTimer BacklightTransitionedOnTimer;
public EssentialsTouchpanelController(string key, string name, Tswx52ButtonVoiceControl tsw,
string projectName, string sgdPath)
: base(key, name)
{
Panel = tsw;
tsw.LoadSmartObjects(sgdPath);
tsw.SigChange += new Crestron.SimplSharpPro.DeviceSupport.SigEventHandler(Tsw_SigChange);
}
/// <summary>
/// Config constructor
/// </summary>
public EssentialsTouchpanelController(string key, string name, string type, CrestronTouchpanelPropertiesConfig props, uint id)
: base(key, name)
{
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Creating touchpanel hardware...");
type = type.ToLower();
try
{
if (type == "crestronapp")
{
var app = new CrestronApp(id, Global.ControlSystem);
app.ParameterProjectName.Value = props.ProjectName;
Panel = app;
}
else if (type == "tsw550")
Panel = new Tsw550(id, Global.ControlSystem);
else if (type == "tsw552")
Panel = new Tsw552(id, Global.ControlSystem);
else if (type == "tsw560")
Panel = new Tsw560(id, Global.ControlSystem);
else if (type == "tsw750")
Panel = new Tsw750(id, Global.ControlSystem);
else if (type == "tsw752")
Panel = new Tsw752(id, Global.ControlSystem);
else if (type == "tsw760")
Panel = new Tsw760(id, Global.ControlSystem);
else if (type == "tsw1050")
Panel = new Tsw1050(id, Global.ControlSystem);
else if (type == "tsw1052")
Panel = new Tsw1052(id, Global.ControlSystem);
else if (type == "tsw1060")
Panel = new Tsw1060(id, Global.ControlSystem);
else
{
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW controller with type '{0}'", type);
return;
}
}
catch (Exception e)
{
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message);
return;
}
// Reserved sigs
if (Panel is TswFt5ButtonSystem)
{
var tsw = Panel as TswFt5ButtonSystem;
tsw.ExtenderSystemReservedSigs.Use();
tsw.ExtenderSystemReservedSigs.DeviceExtenderSigChange
+= ExtenderSystemReservedSigs_DeviceExtenderSigChange;
tsw.ButtonStateChange += new ButtonEventHandler(Tsw_ButtonStateChange);
}
if (Panel.Register() != eDeviceRegistrationUnRegistrationResponse.Success)
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Registration failed. Continuing, but panel may not function: {0}", Panel.RegistrationFailureReason);
// Give up cleanly if SGD is not present.
var sgdName = Global.FilePathPrefix
+ Global.DirectorySeparator + "sgd" + Global.DirectorySeparator + props.SgdFile;
if (!File.Exists(sgdName))
{
Debug.Console(0, this, "ERROR: Smart object file '{0}' not present. Exiting TSW load", sgdName);
return;
}
Panel.LoadSmartObjects(sgdName);
Panel.SigChange += Tsw_SigChange;
}
public void LoadAndShowDriver(PanelDriverBase driver)
{
PanelDriver = driver;
driver.Show();
}
void HomePressed()
{
if (BacklightTransitionedOnTimer == null)
PanelDriver.BackButtonPressed();
}
void ExtenderSystemReservedSigs_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args)
{
// If the sig is transitioning on, mark it in case it was home button that transitioned it
var blOnSig = (Panel as TswFt5ButtonSystem).ExtenderSystemReservedSigs.BacklightOnFeedback;
if (args.Sig == blOnSig && blOnSig.BoolValue)
{
BacklightTransitionedOnTimer = new CTimer(o =>
{
BacklightTransitionedOnTimer = null;
}, 200);
}
}
public void PulseBool(uint join)
{
var act = Panel.BooleanInput[join].UserObject as Action<bool>;
if (act != null)
{
act(true);
act(false);
}
}
public void SetBoolSig(uint join, bool value)
{
var act = Panel.BooleanInput[join].UserObject as Action<bool>;
if (act != null)
act(value);
}
public void SetIntSig(uint join, ushort value)
{
var act = Panel.BooleanInput[join].UserObject as Action<ushort>;
if (act != null)
{
act(value);
}
}
void Tsw_SigChange(object currentDevice, Crestron.SimplSharpPro.SigEventArgs args)
{
if (Debug.Level == 2)
Debug.Console(2, this, "Sig change: {0} {1}={2}", args.Sig.Type, args.Sig.Number, args.Sig.StringValue);
var uo = args.Sig.UserObject;
if (uo is Action<bool>)
(uo as Action<bool>)(args.Sig.BoolValue);
else if (uo is Action<ushort>)
(uo as Action<ushort>)(args.Sig.UShortValue);
else if (uo is Action<string>)
(uo as Action<string>)(args.Sig.StringValue);
}
void Tsw_ButtonStateChange(GenericBase device, ButtonEventArgs args)
{
var uo = args.Button.UserObject;
if(uo is Action<bool>)
(uo as Action<bool>)(args.Button.State == eButtonState.Pressed);
}
}
}

View File

@@ -0,0 +1,108 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronIO;
using Crestron.SimplSharp.Net.Http;
using PepperDash.Core;
namespace PepperDash.Essentials
{
public class HttpLogoServer
{
/// <summary>
///
/// </summary>
HttpServer Server;
/// <summary>
///
/// </summary>
string FileDirectory;
/// <summary>
///
/// </summary>
public static Dictionary<string, string> ExtensionContentTypes;
/// <summary>
///
/// </summary>
/// <param name="port"></param>
/// <param name="directory"></param>
public HttpLogoServer(int port, string directory)
{
ExtensionContentTypes = new Dictionary<string, string>
{
//{ ".css", "text/css" },
//{ ".htm", "text/html" },
//{ ".html", "text/html" },
{ ".jpg", "image/jpeg" },
{ ".jpeg", "image/jpeg" },
//{ ".js", "application/javascript" },
//{ ".json", "application/json" },
//{ ".map", "application/x-navimap" },
{ ".pdf", "application.pdf" },
{ ".png", "image/png" },
//{ ".txt", "text/plain" },
};
Server = new HttpServer();
Server.Port = port;
FileDirectory = directory;
Server.OnHttpRequest += new OnHttpRequestHandler(Server_OnHttpRequest);
Server.Open();
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
}
/// <summary>
///
/// </summary>
void Server_OnHttpRequest(object sender, OnHttpRequestArgs args)
{
var path = args.Request.Path;
if (File.Exists(FileDirectory + @"\" + path))
{
string filePath = path.Replace('/', '\\');
string localPath = string.Format(@"{0}{1}", FileDirectory, filePath);
if (File.Exists(localPath))
{
args.Response.Header.ContentType = GetContentType(new FileInfo(localPath).Extension);
args.Response.ContentStream = new FileStream(localPath, FileMode.Open, FileAccess.Read);
}
else
{
args.Response.ContentString = string.Format("Not found: '{0}'", filePath);
args.Response.Code = 404;
}
}
}
/// <summary>
///
/// </summary>
void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType)
{
if (programEventType == eProgramStatusEventType.Stopping)
Server.Close();
}
/// <summary>
///
/// </summary>
/// <param name="extension"></param>
/// <returns></returns>
public static string GetContentType(string extension)
{
string type;
if (ExtensionContentTypes.ContainsKey(extension))
type = ExtensionContentTypes[extension];
else
type = "text/plain";
return type;
}
}
}

View File

@@ -0,0 +1,813 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
namespace PepperDash.Essentials
{
/// <summary>
/// Where all UI element common joins are defined
/// </summary>
public class UIBoolJoin
{
/// <summary>
/// 901
/// </summary>
public const uint VolumeUpPress = 901;
/// <summary>
/// 902
/// </summary>
public const uint VolumeDownPress = 902;
//****************************************************
// Codec General
/// <summary>
/// 1001
/// </summary>
public const uint CallEndPress = 1001;
/// <summary>
/// 1002
/// </summary>
public const uint CallEndAllConfirmPress = 1002;
/// <summary>
/// 1003 - For tapping the text field to reveal the keyboard
/// </summary>
public const uint CodecDirectorySearchTextPress = 1003;
/// <summary>
/// 1004
/// </summary>
public const uint CallStopSharingPress = 1004;
/// <summary>
/// 1005
/// </summary>
public const uint CallSharedSourceInfoVisible = 1005;
/// <summary>
/// 1006
/// </summary>
public const uint CallEndAllConfirmVisible = 1006;
// Audio Conference
/// <summary>
/// 1101
/// </summary>
public const uint ACKeypadVisible = 1101;
/// <summary>
/// 1102
/// </summary>
public const uint ACStagingPopoverVisible = 1102;
/// <summary>
/// 1111
/// </summary>
public const uint ACSpeedDial1Press = 1111;
/// <summary>
/// 1112
/// </summary>
public const uint ACSpeedDial2Press = 1112;
/// <summary>
/// 1113
/// </summary>
public const uint ACSpeedDial3Press = 1113;
/// <summary>
/// 1114
/// </summary>
public const uint ACSpeedDial4Press = 1114;
/// <summary>
/// 1121
/// </summary>
public const uint ACSpeedDial1Visible = 1121;
/// <summary>
/// 1122
/// </summary>
public const uint ACSpeedDial2Visible = 1122;
/// <summary>
/// 1123
/// </summary>
public const uint ACSpeedDial3Visible = 1123;
/// <summary>
/// 1124
/// </summary>
public const uint ACSpeedDial4Visible = 1124;
//******************************************************
// Video Conference
/// <summary>
/// 1201
/// </summary>
public const uint VCKeypadWithFavoritesVisible = 1201;
/// <summary>
/// 1202
/// </summary>
public const uint VCStagingInactivePopoverVisible = 1202;
/// <summary>
///
/// </summary>
public const uint VCStagingActivePopoverVisible = 1203;
/// <summary>
///
/// </summary>
public const uint VCKeypadVisible = 1204;
/// <summary>
/// 1205
/// </summary>
public const uint VCDirectoryVisible = 1205;
/// <summary>
/// 1206
/// </summary>
public const uint VCRecentsVisible = 1206;
/// <summary>
/// 1207
/// </summary>
public const uint VCCameraVisible = 1207;
/// <summary>
/// 1208
/// </summary>
public const uint VCSelfViewLayoutVisible = 1208;
/// <summary>
/// 1211 - 1215
/// </summary>
public const uint VCFavoritePressStart = 1211;
// RANGE IN USE
public const uint VCFavoritePressEnd = 1215;
/// <summary>
/// 1221 - 1225
/// </summary>
public const uint VCFavoriteVisibleStart = 1221;
// RANGE IN USE
public const uint VCFavoriteVisibleEnd = 1225;
/// <summary>
/// 1231
/// </summary>
public const uint VCStagingRecentsPress = 1231;
/// <summary>
/// 1232
/// </summary>
public const uint VCStagingDirectoryPress = 1232;
/// <summary>
/// 1233
/// </summary>
public const uint VCStagingKeypadPress = 1233;
/// <summary>
/// 1234
/// </summary>
public const uint VCStagingConnectPress = 1234;
/// <summary>
/// 1235
/// </summary>
public const uint VCStagingCameraPress = 1235;
/// <summary>
/// 1236
/// </summary>
public const uint VCStagingConnectEnable = 1236;
/// <summary>
/// 1237 - When the user touches the text field, should trigger keyboard
/// </summary>
public const uint VCKeypadTextPress = 1237;
/// <summary>
/// 1238
/// </summary>
public const uint VCKeypadBackspacePress = 1238;
/// <summary>
/// 1239
/// </summary>
public const uint VCKeypadBackspaceVisible = 1239;
/// <summary>
/// 1240
/// </summary>
public const uint VCDirectoryBackPress = 1240;
/// <summary>
/// 1241 For touching the text area to bring up keyboard
/// </summary>
public const uint VCDirectorySearchTextPress = 1241;
/// <summary>
/// 1242
/// </summary>
public const uint VCStagingSelfViewLayoutPress = 1242;
/// <summary>
/// 1243
/// </summary>
public const uint VCDirectoryBackVisible = 1243;
/// <summary>
/// 1244
/// </summary>
public const uint VCDirectoryBackspacePress = 1244;
/// <summary>
/// 1245
/// </summary>
public const uint VCDirectoryBackspaceVisible = 1245;
/// <summary>
/// 1251
/// </summary>
public const uint VCSelfViewTogglePress = 1251;
/// <summary>
/// 1252
/// </summary>
public const uint VCLayoutTogglePress = 1252;
/// <summary>
/// 1253
/// </summary>
public const uint VCSelfViewPipTogglePress = 1253;
/// <summary>
/// 1254
/// </summary>
public const uint VCLayoutToggleEnable = 1254;
/// <summary>
/// 1255
/// </summary>
public const uint VCMinMaxPress = 1255;
/// <summary>
/// 1256
/// </summary>
public const uint VCMinMaxEnable = 1256;
// Letter joins start at 2921;
//******************************************************
// Environment Joins
// Popup Container
/// <summary>
/// 2001 - 2004
/// </summary>
public const uint EnvironmentBackgroundSubpageVisibleBase = 2000;
// ColumnOne
/// <summary>
/// 2011 - 2015
/// </summary>
public const uint EnvironmentColumnOneLightingTypeVisibleBase = 2010;
/// <summary>
/// 2016 - 2020
/// </summary>
public const uint EnvironmentColumnOneShadingTypeVisibleBase = 2015;
// ColumnTwo
/// <summary>
/// 2021 - 2025
/// </summary>
public const uint EnvironmentColumnTwoLightingTypeVisibleBase = 2020;
/// <summary>
/// 2026 - 2030
/// </summary>
public const uint EnvironmentColumnTwoShadingTypeVisibleBase = 2025;
// ColumnThree
/// <summary>
/// 2031 - 2035
/// </summary>
public const uint EnvironmentColumnThreeLightingTypeVisibleBase = 2030;
/// <summary>
/// 2036 - 2040
/// </summary>
public const uint EnvironmentColumnThreeShadingTypeVisibleBase = 2035;
// ColumnFour
/// <summary>
/// 2041 - 2045
/// </summary>
public const uint EnvironmentColumnFourLightingTypeVisibleBase = 2040;
/// <summary>
/// 2046 - 2050
/// </summary>
public const uint EnvironmentColumnFourShadingTypeVisibleBase = 2045;
// Button press
/// <summary>
/// 2051 - 2060
/// </summary>
public const uint EnvironmentColumnOneButtonPressBase = 2050;
/// <summary>
/// 2061 - 2070
/// </summary>
public const uint EnvironmentColumnTwoButtonPressBase = 2060;
/// <summary>
/// 2071 - 2080
/// </summary>
public const uint EnvironmentColumnThreeButtonPressBase = 2070;
/// <summary>
/// 2081 - 2090
/// </summary>
public const uint EnvironmentColumnFourButtonPressBase = 2080;
// Button visibility
/// <summary>
/// 2151 - 2160
/// </summary>
public const uint EnvironmentColumnOneButtonVisibleBase = 2150;
/// <summary>
/// 2161 - 2170
/// </summary>
public const uint EnvironmentColumnTwoButtonVisibleBase = 2160;
/// <summary>
/// 2171 - 2180
/// </summary>
public const uint EnvironmentColumnThreeButtonVisibleBase = 2170;
/// <summary>
/// 2181 - 2190
/// </summary>
public const uint EnvironmentColumnFourButtonVisibleBase = 2180;
//******************************************************
/// <summary>
/// 3101
/// </summary>
public const uint TechExitButton = 3101;
/// <summary>
/// 3106
/// </summary>
public const uint TechCommonItemsVisbible = 3106;
/// <summary>
/// 3107
/// </summary>
public const uint TechSystemStatusVisible = 3107;
/// <summary>
/// 3108
/// </summary>
public const uint TechDisplayControlsVisible = 3108;
/// <summary>
/// 3109
/// </summary>
public const uint TechPanelSetupVisible = 3109;
/// <summary>
/// 3110
/// </summary>
public const uint TechAdvancedVolumeVisible = 3110;
/// <summary>
/// 3111
/// </summary>
public const uint TechAboutVisible = 3111;
/// <summary>
/// 3112
/// </summary>
public const uint TechSchedulerVisible = 3112;
//*****************************************************
/// <summary>
/// 3811
/// </summary>
public const uint VolumeSingleMute1Visible = 3811;
/// <summary>
/// 3812
/// </summary>
public const uint VolumeSlider1Press = 3812;
/// <summary>
/// 3813
/// </summary>
public const uint Volume1ProgramMutePressAndFB = 3813;
/// <summary>
/// 3821
/// </summary>
public const uint Volume2Visible = 3821;
/// <summary>
/// 3822
/// </summary>
public const uint VolumeSlider2Press = 3822;
/// <summary>
/// 3823
/// </summary>
public const uint Volume2MutePressAndFB = 3823;
/// <summary>
/// 3831
/// </summary>
public const uint Volume3Visible = 3831;
/// <summary>
/// 3832
/// </summary>
public const uint VolumeSlider3Press = 3832;
/// <summary>
/// 3833
/// </summary>
public const uint Volume3MutePressAndFB = 3833;
/// <summary>
/// 3841
/// </summary>
public const uint Volume4Visible = 3841;
/// <summary>
/// 3842
/// </summary>
public const uint VolumeSlider4Press = 3842;
/// <summary>
/// 3843
/// </summary>
public const uint Volume4MutePressAndFB = 3843;
/// <summary>
/// 3851
/// </summary>
public const uint Volume5Visible = 3851;
/// <summary>
/// 3852
/// </summary>
public const uint VolumeSlider5Press = 3852;
/// <summary>
/// 3853
/// </summary>
public const uint Volume5MutePressAndFB = 3853;
/// <summary>
/// 3861
/// </summary>
public const uint Volume6Visible = 3861;
/// <summary>
/// 3862
/// </summary>
public const uint VolumeSlider6Press = 3862;
/// <summary>
/// 3863
/// </summary>
public const uint Volume6MutePressAndFB = 3863;
/// <summary>
/// 3869 - when the system is off and the gear is pressed
/// </summary>
public const uint VolumesPagePowerOffVisible = 3869;
/// <summary>
/// 3870
/// </summary>
public const uint VolumesPageVisible = 3870;
/// <summary>
/// 3871
/// </summary>
public const uint VolumeDualMute1Visible = 3871;
/// <summary>
/// 3874
/// </summary>
public const uint Volume1SpeechMutePressAndFB = 3874;
/// <summary>
/// 3875
/// </summary>
public const uint Volume1BackerVisibility = 3875;
/// <summary>
/// 3891
/// </summary>
public const uint VolumeDefaultPress = 3891;
/// <summary>
/// 3951
/// </summary
public const uint HeaderIcon1Press = 3951;
/// <summary>
/// 3952
/// </summary>
public const uint HeaderIcon2Press = 3952;
/// <summary>
/// 3953
/// </summary>
public const uint HeaderIcon3Press = 3953;
/// <summary>
/// 3954
/// </summary>
public const uint HeaderIcon4Press = 3954;
/// <summary>
/// 3955
/// </summary>
public const uint HeaderIcon5Press = 3955;
/// <summary>
/// 3999
/// </summary>
public const uint GenericModalVisible = 3999;
/// <summary>
/// 12345
/// </summary>
public const uint AvNoControlsSubVisible = 12345;
// 10000 - 14999 are general "source" pages
/// <summary>
/// 15001
/// </summary>
public const uint StartPageVisible = 15001;
/// <summary>
/// 15002 Shows the start page in the source controls area of the screen
/// </summary>
public const uint TapToBeginVisible = 15002;
/// <summary>
/// 15003 Message text when no source is showing
/// </summary>
public const uint SelectASourceVisible = 15003;
/// <summary>
/// 15004
/// </summary>
public const uint RoomIsOn = 15004;
/// <summary>
/// 15005 Shows always-on volume control subpage with only audio mute
/// </summary>
public const uint VolumeControlsSingleMuteVisible = 15005;
/// <summary>
/// 15006 Shows always-on volume control subpage with mic and audio mutes
/// </summary>
public const uint VolumeControlsDualMuteVisible = 15006;
/// <summary>
/// 15010
/// </summary>
public const uint ShowPanelSetupPress = 15010;
/// <summary>
/// 15011 - Top bar with room name and button that pops up dialog with room data
/// </summary>
public const uint TopBarHabaneroVisible = 15011;
/// <summary>
/// 15012
/// </summary>
public const uint SourceStagingBarVisible = 15012;
/// <summary>
/// 15013
/// </summary>
public const uint PowerOffStep1Visible = 15013;
/// <summary>
/// 15014
/// </summary>
public const uint PowerOffStep2Visible = 15014;
/// <summary>
/// 15015
/// </summary>
public const uint ShowPowerOffPress = 15015;
/// <summary>
/// 15016
/// </summary>
public const uint PowerOffMorePress = 15016;
/// <summary>
/// 15017
/// </summary>
public const uint StagingPageAdditionalArrowsVisible = 15017;
/// <summary>
/// 15018 The Header with dynamic buttons
/// </summary>
public const uint TopBarHabaneroDynamicVisible = 15018;
/// <summary>
/// 15019 Shown when system is starting and not ready for use
/// </summary>
public const uint SystemInitializingVisible = 15019;
/// <summary>
/// 15020
/// </summary>
public const uint PanelSetupVisible = 15020;
/// <summary>
/// 15021
/// </summary>
public const uint SourceWaitOverlayVisible = 15021;
/// <summary>
/// 15022
/// </summary>
public const uint ActivityFooterVisible = 15022;
/// <summary>
/// 15024
/// </summary>
public const uint HeaderCallStatusLeftPositionVisible = 15024;
/// <summary>
/// 15025
/// </summary>
public const uint HeaderCallStatusRightPositionVisible = 15025;
/// <summary>
/// 15027
/// </summary>
public const uint HeaderCallStatusLabelPress = 15027;
/// <summary>
/// 15028 The gear button in header
/// </summary>
public const uint FIXFIX_HeaderGearButtonPress_FIXFIX = 15028;
/// <summary>
/// 15029 the room button in header
/// </summary>
public const uint HeaderRoomButtonPress = 15029;
/// <summary>
/// 15030 Visibility for room data popup
/// </summary>
public const uint RoomHeaderPageVisible = 15030;
/// <summary>
/// 15031
/// </summary>
public const uint AllRoomsOffPress = 15031;
/// <summary>
/// 15032
/// </summary>
public const uint DisplayPowerTogglePress = 15032;
/// <summary>
/// 15033
/// </summary>
public const uint PowerOffCancelPress = 15033;
/// <summary>
/// 15034
/// </summary>
public const uint PowerOffConfirmPress = 15034;
/// <summary>
/// 15035
/// </summary>
public const uint VolumeButtonPopupPress = 15035;
/// <summary>
/// 15035
/// </summary>
public const uint VolumeButtonPopupVisible = 15035;
/// <summary>
/// 15036
/// </summary>
public const uint VolumeGaugePopupVisible = 15036;
/// <summary>
/// 15037
/// </summary>
public const uint GearButtonVisible = 15037;
/// <summary>
/// 15038
/// </summary>
public const uint CalendarHeaderButtonVisible = 15038;
/// <summary>
/// 15039
/// </summary>
public const uint CalendarHeaderButtonPress = 15039;
/// <summary>
/// 15040
/// </summary>
public const uint CallStatusPageVisible = 15040;
/// <summary>
/// 15041
/// </summary>
public const uint LightsPageVisible = 15041;
/// <summary>
/// 15042 Closes whichever interlocked modal is open
/// </summary>
public const uint InterlockedModalClosePress = 15042;
/// <summary>
/// 15043 Vis for modal backer for full-screen source
/// </summary>
public const uint SourceBackgroundOverlayVisible = 15043;
/// <summary>
/// 15044 Close button for source modal overlay
/// </summary>
public const uint SourceBackgroundOverlayClosePress = 15044;
/// <summary>
/// 15045 - Visibility for the bar containing call navigation button list
/// </summary>
public const uint CallStagingBarVisible = 15045;
/// <summary>
/// 15046
/// </summary>
public const uint MeetingsOrContacMethodsListVisible = 15046;
/// <summary>
/// 15047 The "Join" button on the next meeting ribbon
/// </summary>
public const uint NextMeetingJoinPress = 15047;
/// <summary>
/// 15048 Dismisses the ribbon
/// </summary>
public const uint NextMeetingModalClosePress = 15048;
/// <summary>
/// 15049
/// </summary>
public const uint NextMeetingModalVisible = 15049;
/// <summary>
/// 15051
/// </summary>
public const uint Display1SelectPressAndFb = 15051;
/// <summary>
/// 15052
/// </summary>
public const uint Display1ControlButtonEnable = 15052;
/// <summary>
/// 15053
/// </summary>
public const uint Display1ControlButtonPress = 15053;
/// <summary>
/// 15054
/// </summary>
public const uint Display1AudioButtonEnable = 15054;
/// <summary>
/// 15055
/// </summary>
public const uint Display1AudioButtonPressAndFb = 15055;
/// <summary>
/// 15056
/// </summary>
public const uint Display2SelectPressAndFb = 15056;
/// <summary>
/// 15057
/// </summary>
public const uint Display2ControlButtonEnable = 15057;
/// <summary>
/// 15058
/// </summary>
public const uint Display2ControlButtonPress = 15058;
/// <summary>
/// 15059
/// </summary>
public const uint Display2AudioButtonEnable = 15059;
/// <summary>
/// 15060
/// </summary>
public const uint Display2AudioButtonPressAndFb = 15060;
/// <summary>
/// 15061 Reveals the dual-display subpage
/// </summary>
public const uint DualDisplayPageVisible = 15061;
/// <summary>
/// 15062 Reveals the toggle switch for the sharing mode
/// </summary>
public const uint ToggleSharingModeVisible = 15062;
/// <summary>
/// 15063 Press for the toggle mode switch
/// </summary>
public const uint ToggleSharingModePress = 15063;
/// <summary>
/// 15064
/// </summary>
public const uint LogoDefaultVisible = 15064;
/// <summary>
/// 15065
/// </summary>
public const uint LogoUrlVisible = 15065;
/// <summary>
/// 15066 - Reveals the active calls header item
/// </summary>
public const uint HeaderActiveCallsListVisible = 15066;
/// <summary>
/// 15067
/// </summary>
public const uint NotificationRibbonVisible = 15067;
/// <summary>
/// 15083 - Press for Call help desk on AC/VC
/// </summary>
public const uint HelpPageShowCallButtonPress = 15083;
/// <summary>
/// 15084 - Show the "call help desk" button on help page
/// </summary>
public const uint HelpPageShowCallButtonVisible = 15084;
/// <summary>
/// 15085 Visibility join for help subpage
/// </summary>
public const uint HelpPageVisible = 15085;
/// <summary>
/// 15086 Press for help header button
/// </summary>
public const uint HelpPress = 15086;
/// <summary>
/// 15088
/// </summary>
public const uint DateOnlyVisible = 15088;
/// <summary>
/// 15089
/// </summary>
public const uint TimeOnlyVisible = 15089;
/// <summary>
/// 15090
/// </summary>
public const uint DateAndTimeVisible = 15090;
/// <summary>
/// 15091
/// </summary>
public const uint SetupFullDistrib = 15091;
// PIN dialogs ************************************
/// <summary>
/// 15201
/// </summary>
public const uint PinDialog4DigitVisible = 15201;
/// <summary>
/// 15206
/// </summary>
public const uint PinDialogCancelPress = 15206;
/// <summary>
/// 15207
/// </summary>
public const uint PinDialogErrorVisible = 15207;
/// <summary>
/// 15211
/// </summary>
public const uint PinDialogDot1 = 15211;
/// <summary>
/// 15212
/// </summary>
public const uint PinDialogDot2 = 15212;
/// <summary>
/// 15213
/// </summary>
public const uint PinDialogDot3 = 15213;
/// <summary>
/// 15214
/// </summary>
public const uint PinDialogDot4 = 15214;
}
}

View File

@@ -0,0 +1,73 @@
namespace PepperDash.Essentials
{
public class UISmartObjectJoin
{
//******************************************************
// Conference
/// <summary>
/// 1001 - The list that reveals in header to show calls
/// </summary>
public const uint CodecActiveCallsHeaderList = 1001;
// Video Conference
/// <summary>
/// 1201
/// </summary>
public const uint VCDialKeypad = 1201;
/// <summary>
/// 1202
/// </summary>
public const uint VCDirectoryList = 1202;
/// <summary>
/// 1203
/// </summary>
public const uint VCRecentsList = 1203;
/// <summary>
/// 1204
/// </summary>
public const uint VCFavoritesList = 1204;
/// <summary>
/// 1205 Layout buttons dynamic list
/// </summary>
public const uint VCLayoutsList = 1205;
//******************************************************
// General
/// <summary>
/// 3200 The staging, source-select list
/// </summary>
public const uint SourceStagingSRL = 3200;
/// <summary>
/// 3901 The Tech page menu list
/// </summary>
public const uint TechMenuList = 3901;
/// <summary>
/// 3902 Tech page statuses
/// </summary>
public const uint TechStatusList = 3902;
/// <summary>
/// 3903
/// </summary>
public const uint TechPinDialogKeypad = 3903;
/// <summary>
/// 3904 - Display controls on the tech page
/// </summary>
public const uint TechDisplayControlsList = 3904;
/// <summary>
/// 15018
/// </summary>
public const uint HeaderButtonList = 15018;
/// <summary>
/// 15022 The main activity footer
/// </summary>
public const uint ActivityFooterSRL = 15022;
/// <summary>
/// 15023 - The header meetings SRL
/// </summary>
public const uint MeetingListSRL = 15023;
}
}

View File

@@ -0,0 +1,279 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
namespace PepperDash.Essentials
{
/// <summary>
/// Common string join number constants
/// </summary>
public class UIStringJoin
{
//******************************************************
// Codec
/// <summary>
/// 1001
/// </summary>
public const uint CodecAddressEntryText = 1001;
/// <summary>
/// 1002
/// </summary>
public const uint CodecDirectorySearchEntryText = 1002;
/// <summary>
/// 1004
/// </summary>
public const uint CallSharedSourceNameText = 1004;
/// <summary>
/// 1201 - 1230 range of joins for recents list
/// </summary>
public const uint VCRecentListTextStart = 1201;
// RANGE IN USE
public const uint VCRecentListTextEnd = 1230;
/// <summary>
/// 1231 - 1261 range of joins for recent list time
/// </summary>
public const uint VCRecentListTimeTextStart = 1231;
// RANGE IN USE
public const uint VCRecentListTimeTextEnd = 1260;
/// <summary>
/// 1291 - the current layout mode
/// </summary>
public const uint VCLayoutModeText = 1291;
/// <summary>
/// 1301 - 1400
/// </summary>
public const uint VCDirectoryListTextStart = 1301;
// RANGE IN USE
public const uint VCDirectoryListTextEnd = 1556;
/// <summary>
/// 1611 - 1615
/// </summary>
public const uint VCFavoritesStart = 1611;
// RANGE IN USE
public const uint VCFavoritesTextEnd = 1615;
//******************************************************
// Keyboard
/// <summary>
/// 1901
/// </summary>
//public const uint KeypadText = 2901;
//******************************************************
// Environment Joins
/// <summary>
/// 2001 - 2010
/// </summary>
public const uint EnvironmentColumnOneLabelBase = 2000;
/// <summary>
/// 2011 - 2020
/// </summary>
public const uint EnvironmentColumnTwoLabelBase = 2010;
/// <summary>
/// 2021 - 2030
/// </summary>
public const uint EnvironmentColumnThreeLabelBase = 2020;
/// <summary>
/// 2031 - 2040
/// </summary>
public const uint EnvironmentColumnFourLabelBase = 2030;
// 2050, 2060, 2070 and 2080 reserved for column device name labels
//******************************************************
/// <summary>
/// 3101 - This is the start of the range 3101 - 3120
/// </summary>
public const uint TechMenuButtonTextStart = 3101;
//----- through 3120
/// <summary>
/// 3812
/// </summary>
public const uint AdvancedVolumeSlider1Text = 3812;
/// <summary>
/// 3822
/// </summary>
public const uint AdvancedVolumeSlider2Text = 3822;
/// <summary>
/// 3832
/// </summary>
public const uint AdvancedVolumeSlider3Text = 3832;
/// <summary>
/// 3842
/// </summary>
public const uint AdvancedVolumeSlider4Text = 3842;
/// <summary>
/// 3852
/// </summary>
public const uint AdvancedVolumeSlider5Text = 3852;
/// <summary>
/// 3862
/// </summary>
public const uint AdvancedVolumeSlider6Text = 3862;
/// <summary>
/// 3901
/// </summary>
public const uint CurrentRoomName = 3901;
/// <summary>
/// 3902
/// </summary>
public const uint CurrentSourceName = 3902;
/// <summary>
/// 3903
/// </summary>
public const uint CurrentSourceIcon = 3903;
/// <summary>
/// 3904 - Phone number for room header
/// </summary>
public const uint RoomPhoneText = 3904;
/// <summary>
/// 3906 - The separator for verbose-header text on addresses
/// </summary>
public const uint RoomAddressPipeText = 3906;
/// <summary>
/// 3907 - The user code for mobile control
/// </summary>
public const uint RoomUserCode = 3907;
/// <summary>
/// 3911
/// </summary>
public const uint PowerOffMessage = 3911;
/// <summary>
/// 3912
/// </summary>
public const uint StartPageMessage = 3912;
/// <summary>
/// 3913
/// </summary>
public const uint StartActivityText = 3913;
/// <summary>
/// 3914 Title bar label for source overlay
/// </summary>
public const uint SourceBackgroundOverlayTitle = 3914;
/// <summary>
/// 3915
/// </summary>
public const uint NotificationRibbonText = 3915;
/// <summary>
/// 3916 The "active call" label
/// </summary>
public const uint HeaderCallStatusLabel = 3916;
/// <summary>
/// 3919 Mesage on init page
/// </summary>
public const uint SystemInitializingMessage = 3919;
/// <summary>
/// 3922
/// </summary>
public const uint HelpMessage = 3922;
/// <summary>
/// 3923
/// </summary>
public const uint LogoUrl = 3923;
/// <summary>
/// 3924 - the text on the "call help desk" button
/// </summary>
public const uint HelpPageCallButtonText = 3924;
/// <summary>
/// 3951
/// </summary>
public const uint HeaderButtonIcon1 = 3951;
/// <summary>
/// 3952
/// </summary>
public const uint HeaderButtonIcon2 = 3952;
/// <summary>
/// 3953
/// </summary>
public const uint HeaderButtonIcon3 = 3953;
/// <summary>
/// 3954
/// </summary>
public const uint HeaderButtonIcon4 = 3954;
/// <summary>
/// 3955
/// </summary>
public const uint HeaderButtonIcon5 = 3955;
/// <summary>
/// 3961 Name of source on display 1
/// </summary>
public const uint Display1SourceLabel = 3961;
/// <summary>
/// 3962 Title above display 1
/// </summary>
public const uint Display1TitleLabel = 3962;
/// <summary>
/// 3964 Name of source on display 2
/// </summary>
public const uint Display2SourceLabel = 3964;
/// <summary>
/// 3965 Title above display 2
/// </summary>
public const uint Display2TitleLabel = 3965;
/// <summary>
/// 3966
/// </summary>
public const uint NextMeetingStartTimeText = 3966;
/// <summary>
/// 3967
/// </summary>
public const uint NextMeetingEndTimeText = 3967;
/// <summary>
/// 3968
/// </summary>
public const uint NextMeetingTitleText = 3968;
/// <summary>
/// 3969
/// </summary>
public const uint NextMeetingNameText = 3969;
/// <summary>
/// 3970
/// </summary>
public const uint NextMeetingButtonLabel = 3970;
/// <summary>
/// 3971
/// </summary>
public const uint NextMeetingSecondaryButtonLabel = 3971;
/// <summary>
/// 3972
/// </summary>
public const uint NextMeetingFollowingMeetingText = 3972;
/// <summary>
/// 3976
/// </summary>
public const uint MeetingsOrContactMethodListIcon = 3976;
/// <summary>
/// 3977
/// </summary>
public const uint MeetingsOrContactMethodListTitleText = 3977;
// ------------------------------------
//
// MODAL JOINS 3991 - 3999
//
// ------------------------------------
}
}

View File

@@ -0,0 +1,54 @@
namespace PepperDash.Essentials
{
/// <summary>
///
/// </summary>
public class UIUshortJoin
{
// Video Codec
/// <summary>
/// 1234: values 0 = Connect, 1 = End
/// </summary>
public const uint VCStagingConnectButtonMode = 1234;
/// <summary>
/// 3812
/// </summary>
public const uint VolumeSlider1Value = 3812;
/// <summary>
/// 3822
/// </summary>
public const uint VolumeSlider2Value = 3822;
/// <summary>
/// 3832
/// </summary>
public const uint VolumeSlider3Value = 3832;
/// <summary>
/// 3842
/// </summary>
public const uint VolumeSlider4Value = 3842;
/// <summary>
/// 3852
/// </summary>
public const uint VolumeSlider5Value = 3852;
/// <summary>
/// 3862
/// </summary>
public const uint VolumeSlider6Value = 3862;
/// <summary>
/// 3922: 0-4, center->left. 5-8, center -> right.
/// </summary>
public const uint PresentationStagingCaretMode = 3922;
/// <summary>
/// 3923: 0-4, center->left. 5-8, center -> right.
/// </summary>
public const uint CallStagingCaretMode = 3923;
/// <summary>
/// 15024 - Modes 0: On hook, 1: Phone, 2: Video
/// </summary>
public const uint CallHeaderButtonMode = 15024;
}
}

View File

@@ -0,0 +1,58 @@
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using Crestron.SimplSharp;
//using Crestron.SimplSharpPro;
//using Crestron.SimplSharpPro.DeviceSupport;
//using PepperDash.Essentials.Core;
//using PepperDash.Essentials.Core.SmartObjects;
//namespace PepperDash.Essentials
//{
// public class SmartObjectHeaderButtonList : SmartObjectHelperBase
// {
// public SmartObjectHeaderButtonList(SmartObject so)
// : base(so, true)
// {
// }
// }
// public class HeaderListButton
// {
// public BoolInputSig SelectedSig { get; private set; }
// public BoolInputSig VisibleSig { get; private set; }
// public BoolOutputSig OutputSig { get; private set; }
// StringInputSig IconSig;
// public HeaderListButton(SmartObjectHeaderButtonList list, uint index)
// {
// var so = list.SmartObject;
// OutputSig = so.BooleanOutput["Item " + index + " Pressed"];
// SelectedSig = so.BooleanInput["Item " + index + " Selected"];
// VisibleSig = so.BooleanInput["Item " + index + " Visible"];
// IconSig = so.StringInput["Set Item " + index + " Icon Serial"];
// }
// public void SetIcon(string i)
// {
// IconSig.StringValue = i;
// }
// public void ClearIcon()
// {
// IconSig.StringValue = "Blank";
// }
// public static string Calendar = "Calendar";
// public static string Camera = "Camera";
// public static string Gear = "Gear";
// public static string Lights = "Lights";
// public static string Help = "Help";
// public static string OnHook = "DND";
// public static string Phone = "Phone";
// }
//}

View File

@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.UI;
using PepperDash.Essentials.Core;
namespace PepperDash.Essentials
{
public class SubpageReferenceListActivityItem : SubpageReferenceListItem
{
/// <summary>
///
/// </summary>
/// <param name="index"></param>
/// <param name="owner"></param>
/// <param name="buttonMode">0=Share, 1=Phone Call, 2=Video Call, 3=End Meeting</param>
/// <param name="pressAction"></param>
public SubpageReferenceListActivityItem(uint index, SubpageReferenceList owner,
ushort buttonMode, Action<bool> pressAction)
: base(index, owner)
{
Owner.GetBoolFeedbackSig(Index, 1).UserObject = pressAction;
Owner.UShortInputSig(Index, 1).UShortValue = buttonMode;
}
/// <summary>
/// Called by SRL to release all referenced objects
/// </summary>
public override void Clear()
{
Owner.BoolInputSig(Index, 1).UserObject = null;
Owner.UShortInputSig(Index, 1).UShortValue = 0;
}
}
}

View File

@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.UI;
using PepperDash.Essentials.Core;
namespace PepperDash.Essentials
{
public class SubpageReferenceListButtonAndModeItem : SubpageReferenceListItem
{
/// <summary>
///
/// </summary>
/// <param name="index"></param>
/// <param name="owner"></param>
/// <param name="buttonMode">0=Share, 1=Phone Call, 2=Video Call, 3=End Meeting</param>
/// <param name="pressAction"></param>
public SubpageReferenceListButtonAndModeItem(uint index, SubpageReferenceList owner,
ushort buttonMode, Action<bool> pressAction)
: base(index, owner)
{
Owner.GetBoolFeedbackSig(Index, 1).UserObject = pressAction;
Owner.UShortInputSig(Index, 1).UShortValue = buttonMode;
}
/// <summary>
/// Called by SRL to release all referenced objects
/// </summary>
public override void Clear()
{
Owner.BoolInputSig(Index, 1).UserObject = null;
Owner.UShortInputSig(Index, 1).UShortValue = 0;
}
}
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.UI;
using PepperDash.Essentials.Core;
namespace PepperDash.Essentials
{
public class SubpageReferenceListSourceItem : SubpageReferenceListItem
{
public SourceListItem SourceItem { get; private set; }
public SubpageReferenceListSourceItem(uint index, SubpageReferenceList owner,
SourceListItem sourceItem, Action<bool> routeAction)
: base(index, owner)
{
SourceItem = sourceItem;
owner.GetBoolFeedbackSig(index, 1).UserObject = new Action<bool>(routeAction);
owner.StringInputSig(index, 1).StringValue = SourceItem.PreferredName;
}
public void RegisterForSourceChange(IHasCurrentSourceInfoChange room)
{
room.CurrentSingleSourceChange -= room_CurrentSourceInfoChange;
room.CurrentSingleSourceChange += room_CurrentSourceInfoChange;
}
void room_CurrentSourceInfoChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
{
if (type == ChangeType.WillChange && info == SourceItem)
ClearFeedback();
else if (type == ChangeType.DidChange && info == SourceItem)
SetFeedback();
}
/// <summary>
/// Called by SRL to release all referenced objects
/// </summary>
public override void Clear()
{
Owner.BoolInputSig(Index, 1).UserObject = null;
Owner.StringInputSig(Index, 1).StringValue = "";
}
/// <summary>
/// Sets the selected feedback on the button
/// </summary>
public void SetFeedback()
{
Owner.BoolInputSig(Index, 1).BoolValue = true;
}
/// <summary>
/// Clears the selected feedback on the button
/// </summary>
public void ClearFeedback()
{
Owner.BoolInputSig(Index, 1).BoolValue = false;
}
}
}