diff --git a/Crestron-Library-Usage-Analysis.md b/Crestron-Library-Usage-Analysis.md new file mode 100644 index 00000000..e295d0db --- /dev/null +++ b/Crestron-Library-Usage-Analysis.md @@ -0,0 +1,282 @@ +# Crestron Library Usage Analysis - PepperDash Essentials + +This document provides a comprehensive analysis of Crestron classes and interfaces used throughout the PepperDash Essentials framework, organized by namespace and library component. + +## Executive Summary + +The PepperDash Essentials framework extensively leverages Crestron SDK components across 100+ files, providing abstractions for: +- Control system hardware (processors, touchpanels, IO devices) +- Communication interfaces (Serial, TCP/IP, SSH, CEC, IR) +- Device management and routing +- User interface components and smart objects +- System monitoring and diagnostics + +## 1. Core Crestron Libraries + +### 1.1 Crestron.SimplSharp + +**Primary Usage**: Foundational framework components, collections, and basic types. + +**Key Files**: +- Multiple files across all projects use `Crestron.SimplSharp` namespaces +- Provides basic C# runtime support for Crestron processors + +### 1.2 Crestron.SimplSharpPro + +**Primary Usage**: Main hardware abstraction layer for Crestron devices. + +**Key Classes Used**: + +#### CrestronControlSystem +- **File**: `/src/PepperDash.Essentials/ControlSystem.cs` +- **Usage**: Base class for the main control system implementation +- **Implementation**: `public class ControlSystem : CrestronControlSystem, ILoadConfig` + +#### Device (Base Class) +- **Files**: 50+ files inherit from or use this class +- **Key Implementations**: + - `/src/PepperDash.Core/Device.cs` - Core device abstraction + - `/src/PepperDash.Essentials.Core/Devices/EssentialsDevice.cs` - Extended device base + - `/src/PepperDash.Essentials.Core/Room/Room.cs` - Room device implementation + - `/src/PepperDash.Essentials.Core/Devices/CrestronProcessor.cs` - Processor device wrapper + +#### BasicTriList +- **Files**: 30+ files use this class extensively +- **Primary Usage**: Touchpanel communication and SIMPL bridging +- **Key Files**: + - `/src/PepperDash.Essentials.Core/Touchpanels/TriListExtensions.cs` - Extension methods for signal handling + - `/src/PepperDash.Essentials.Core/Devices/EssentialsBridgeableDevice.cs` - Bridge interface + - `/src/PepperDash.Essentials.Core/Touchpanels/ModalDialog.cs` - UI dialog implementation + +#### BasicTriListWithSmartObject +- **Files**: Multiple touchpanel and UI files +- **Usage**: Enhanced touchpanel support with smart object integration +- **Key Files**: + - `/src/PepperDash.Essentials.Core/Touchpanels/Interfaces.cs` - Interface definitions + - `/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferenceList/SubpageReferenceList.cs` + +## 2. Communication Hardware + +### 2.1 Serial Communication (ComPort) + +**Primary Class**: `ComPort` +**Key Files**: +- `/src/PepperDash.Essentials.Core/Comm and IR/ComPortController.cs` +- `/src/PepperDash.Essentials.Core/Comm and IR/CommFactory.cs` + +**Usage Pattern**: +```csharp +public class ComPortController : Device, IBasicCommunicationWithStreamDebugging +public static ComPort GetComPort(EssentialsControlPropertiesConfig config) +``` + +**Interface Support**: `IComPorts` - Used for devices that provide multiple COM ports + +### 2.2 IR Communication (IROutputPort) + +**Primary Class**: `IROutputPort` +**Key Files**: +- `/src/PepperDash.Essentials.Core/Devices/IrOutputPortController.cs` +- `/src/PepperDash.Essentials.Core/Devices/GenericIRController.cs` +- `/src/PepperDash.Essentials.Core/Comm and IR/IRPortHelper.cs` + +**Usage Pattern**: +```csharp +public class IrOutputPortController : Device +IROutputPort IrPort; +public IrOutputPortController(string key, IROutputPort port, string irDriverFilepath) +``` + +### 2.3 CEC Communication (ICec) + +**Primary Interface**: `ICec` +**Key Files**: +- `/src/PepperDash.Essentials.Core/Comm and IR/CecPortController.cs` +- `/src/PepperDash.Essentials.Core/Comm and IR/CommFactory.cs` + +**Usage Pattern**: +```csharp +public class CecPortController : Device, IBasicCommunicationWithStreamDebugging +public static ICec GetCecPort(ControlPropertiesConfig config) +``` + +## 3. Input/Output Hardware + +### 3.1 Digital Input + +**Primary Interface**: `IDigitalInput` +**Key Files**: +- `/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs` +- `/src/PepperDash.Essentials.Core/Microphone Privacy/MicrophonePrivacyController.cs` + +**Usage Pattern**: +```csharp +public List Inputs { get; private set; } +void AddInput(IDigitalInput input) +``` + +### 3.2 Versiport Support + +**Key Files**: +- `/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs` +- `/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportAnalogInputDevice.cs` +- `/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportOutputDevice.cs` + +**Usage**: Provides flexible I/O port configuration for various signal types + +## 4. Touchpanel Hardware + +### 4.1 MPC3 Touchpanel + +**Primary Class**: `MPC3Basic` +**Key File**: `/src/PepperDash.Essentials.Core/Touchpanels/Mpc3Touchpanel.cs` + +**Usage Pattern**: +```csharp +public class Mpc3TouchpanelController : Device +readonly MPC3Basic _touchpanel; +_touchpanel = processor.ControllerTouchScreenSlotDevice as MPC3Basic; +``` + +### 4.2 TSW Series Support + +**Evidence**: References found in messenger files and mobile control components +**Usage**: Integrated through mobile control messaging system for TSW touchpanel features + +## 5. Timer and Threading + +### 5.1 CTimer + +**Primary Class**: `CTimer` +**Key File**: `/src/PepperDash.Core/PasswordManagement/PasswordManager.cs` + +**Usage Pattern**: +```csharp +Debug.Console(1, string.Format("PasswordManager.UpdatePassword: CTimer Started")); +Debug.Console(1, string.Format("PasswordManager.UpdatePassword: CTimer Reset")); +``` + +## 6. Networking and Communication + +### 6.1 Ethernet Communication + +**Libraries Used**: +- `Crestron.SimplSharpPro.EthernetCommunication` +- `Crestron.SimplSharp.Net.Utilities.EthernetHelper` + +**Key Files**: +- `/src/PepperDash.Core/Comm/GenericTcpIpClient.cs` +- `/src/PepperDash.Core/Comm/GenericTcpIpServer.cs` +- `/src/PepperDash.Core/Comm/GenericSecureTcpIpClient.cs` +- `/src/PepperDash.Core/Comm/GenericSshClient.cs` +- `/src/PepperDash.Core/Comm/GenericUdpServer.cs` + +**Usage Pattern**: +```csharp +public class GenericTcpIpClient : Device, ISocketStatusWithStreamDebugging, IAutoReconnect +public class GenericSecureTcpIpClient : Device, ISocketStatusWithStreamDebugging, IAutoReconnect +``` + +## 7. Device Management Libraries + +### 7.1 DeviceSupport + +**Library**: `Crestron.SimplSharpPro.DeviceSupport` +**Usage**: Core device support infrastructure used throughout the framework + +### 7.2 DM (DigitalMedia) + +**Library**: `Crestron.SimplSharpPro.DM` +**Usage**: Digital media routing and switching support +**Evidence**: Found in routing configuration and DM output card references + +## 8. User Interface Libraries + +### 8.1 UI Components + +**Library**: `Crestron.SimplSharpPro.UI` +**Usage**: User interface elements and touchpanel controls + +### 8.2 Smart Objects + +**Key Files**: +- `/src/PepperDash.Essentials.Core/SmartObjects/SmartObjectDynamicList.cs` +- `/src/PepperDash.Essentials.Core/SmartObjects/SubpageReferenceList/SubpageReferenceList.cs` + +**Usage**: Advanced UI components with dynamic content + +## 9. System Monitoring and Diagnostics + +### 9.1 Diagnostics + +**Library**: `Crestron.SimplSharpPro.Diagnostics` +**Usage**: System health monitoring and performance tracking + +### 9.2 System Information + +**Key Files**: +- `/src/PepperDash.Essentials.Core/Monitoring/SystemMonitorController.cs` + +**Usage**: Provides system status, Ethernet information, and program details + +## 10. Integration Patterns + +### 10.1 SIMPL Bridging + +**Pattern**: Extensive use of `BasicTriList` for SIMPL integration +**Files**: Bridge classes throughout the framework implement `LinkToApi` methods: +```csharp +public abstract void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge); +``` + +### 10.2 Device Factory Pattern + +**Implementation**: Factory classes create hardware-specific implementations +**Example**: `CommFactory.cs` provides communication device creation + +### 10.3 Extension Methods + +**Pattern**: Extensive use of extension methods for Crestron classes +**Example**: `TriListExtensions.cs` adds 30+ extension methods to `BasicTriList` + +## 11. Signal Processing + +### 11.1 Signal Types + +**Bool Signals**: Digital control and feedback +**UShort Signals**: Analog values and numeric data +**String Signals**: Text and configuration data + +**Implementation**: Comprehensive signal handling in `TriListExtensions.cs` + +## 12. Error Handling and Logging + +**Pattern**: Consistent use of Crestron's Debug logging throughout +**Examples**: +```csharp +Debug.LogMessage(LogEventLevel.Information, "Device {0} is not a valid device", dc.PortDeviceKey); +Debug.LogMessage(LogEventLevel.Debug, "Error Waking Panel. Maybe testing with Xpanel?"); +``` + +## 13. Threading and Synchronization + +**Components**: +- CTimer for time-based operations +- Thread-safe collections and patterns +- Event-driven programming models + +## Conclusion + +The PepperDash Essentials framework demonstrates sophisticated integration with the Crestron ecosystem, leveraging: + +- **Core Infrastructure**: CrestronControlSystem, Device base classes +- **Communication**: COM, IR, CEC, TCP/IP, SSH protocols +- **Hardware Abstraction**: Touchpanels, I/O devices, processors +- **User Interface**: Smart objects, signal processing, SIMPL bridging +- **System Services**: Monitoring, diagnostics, device management + +This analysis shows that Essentials serves as a comprehensive middleware layer, abstracting Crestron hardware complexities while providing modern software development patterns and practices. + +--- +*Generated: [Current Date]* +*Framework Version: PepperDash Essentials (Based on codebase analysis)* diff --git a/src/PepperDash.Essentials.Core/Devices/ProcessorExtensionDeviceFactory.cs b/src/PepperDash.Essentials.Core/Devices/ProcessorExtensionDeviceFactory.cs index c8528c4a..514e9a20 100644 --- a/src/PepperDash.Essentials.Core/Devices/ProcessorExtensionDeviceFactory.cs +++ b/src/PepperDash.Essentials.Core/Devices/ProcessorExtensionDeviceFactory.cs @@ -19,11 +19,10 @@ namespace PepperDash.Essentials.Core { foreach (var typeName in TypeNames) { - //Debug.LogMessage(LogEventLevel.Verbose, "Getting Description Attribute from class: '{0}'", typeof(T).FullName); var descriptionAttribute = typeof(T).GetCustomAttributes(typeof(DescriptionAttribute), true) as DescriptionAttribute[]; - string description = descriptionAttribute != null && descriptionAttribute.Length > 0 - ? descriptionAttribute[0].Description - : throw new InvalidOperationException($"No DescriptionAttribute found for type {typeof(T).FullName}"); + string description = descriptionAttribute != null && descriptionAttribute.Length > 0 + ? descriptionAttribute[0].Description + : "No description available"; var snippetAttribute = typeof(T).GetCustomAttributes(typeof(ConfigSnippetAttribute), true) as ConfigSnippetAttribute[]; ProcessorExtensionDeviceFactory.AddFactoryForType(typeName.ToLower(), description, typeof(T), BuildDevice); } diff --git a/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs b/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs index 06e35850..ee23e310 100644 --- a/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs +++ b/src/PepperDash.Essentials.Core/Feedbacks/IntFeedback.cs @@ -43,6 +43,7 @@ namespace PepperDash.Essentials.Core /// it will NOT reflect an actual value from a device until has been called /// /// Delegate to invoke when this feedback needs to be updated + [Obsolete("use constructor with Key parameter. This constructor will be removed in a future version")] public IntFeedback(Func valueFunc) : this(null, valueFunc) {