Conversation
…lities Co-authored-by: APayerl <6882326+APayerl@users.noreply.github.com>
Co-authored-by: APayerl <6882326+APayerl@users.noreply.github.com>
Co-authored-by: APayerl <6882326+APayerl@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Analyze improvements to generic structure for extensibility
Refactor architecture for extensibility: configuration, protocols, and capability interfaces
Dec 1, 2025
APayerl
reviewed
Dec 2, 2025
Owner
APayerl
left a comment
There was a problem hiding this comment.
do not include a Epson config. we want to be sure that it is correct before we add it (need to see specification!)
| ); | ||
|
|
||
| // Both projectors can be controlled through the same interfaces | ||
| if (benq instanceof PowerControl) { |
Owner
There was a problem hiding this comment.
generally in these situations use the java syntax to auto create a variable as well. "if (benq instanceof PowerControl pc) {" to get shorter syntax
| Projector projector = ProjectorFactory.createProjector(ProjectorType.BENQ_W1070); | ||
|
|
||
| // Check if this projector supports power control | ||
| if (projector instanceof PowerControl) { |
Owner
There was a problem hiding this comment.
same here with "projector instanceof PowerControl pc)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The project lacked extensibility—adding new projector models required hardcoded changes, duplicated serial handling, and tight coupling to BenQ-specific commands.
Changes
Configuration System
ProjectorConfigwith builder pattern decouples connection parameters from implementationcreateBenQConfig())Protocol Abstraction
CommandProtocolinterface separates command formatting from projector logicBenQProtocol(\r*pow=on#\r),EpsonProtocol(PWR ON\r)Capability Interfaces
PowerControl,SourceControl,CommandCapabilitydefine clear contractsinstanceofchecksFactory Pattern
ProjectorFactorycentralizes creation with type-safe enum selectionRefactored Core
Projectorbase class now uses dependency injection (config + protocol)W1070implements capability interfaces, maintains backward compatibilityEpsonGenericdemonstrates adding new projector typeUsage
Adding New Projector Types
Three steps:
CommandProtocol(command format)Projector, implement capability interfacesProjectorFactoryenumTime reduced from hours to minutes.
Documentation
ARCHITECTURE.md: Design patterns, component relationshipsEXTENSIBILITY_EXAMPLES.md: Adding Sony, network-based projectors, custom capabilitiesARCHITECTURE_DIAGRAM.md: Visual class structure and data flowsOriginal prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.