Skip to content

atrus05/JVCProjectorControl

Repository files navigation

🎥 JVC Projector Control (iOS)

A modern iOS remote-control app for JVC D-ILA projectors. This project implements the raw TCP control protocol used by models such as the JVC DLA-X5900, handling handshakes, commands, and status queries using POSIX sockets.

Built with SwiftUI, Combine, and a modular architecture with tabs for Start, Log, Settings, and About.

✨ Features

📡 Core Functionality • Power On / Power Off commands • Full TCP handshake: • Reads PJ_OK greeting • Sends PJREQ • Waits for PJACK • Sends properly-formatted JVC commands (LF / CRLF variants) • Receives and parses Acknowledgement and Detailed Response return codes

🔎 Status Polling • Supports advanced enquiry mode (3F 89 01 50 57 0A) for detailed power states: • 30 → Standby • 31 → Power On • 32 → Cooling • 34 → Emergency • Automatically displays: • Human-friendly status (“Power On”, “Cooling”, etc.) • Raw packet bytes • Hex dumps in the log

🛠 Settings Tab • User-modifiable: • Projector IP address • Projector port • Values persist for the session and update the controller live

📝 Log Tab • Timestamped, scrollable log of: • Packets sent • Responses received • HEX chunks from the socket • Handshake results • Polling activity • Extremely helpful for debugging projector behavior

🎨 iOS-friendly UI • Uses SwiftUI TabView • Metallic projector app icon in light, dark, and tinted variations • Color-coded power state (green/orange/red/gray)

🧰 Requirements • iOS 16+ • Xcode 15 or newer • A JVC projector supporting the TCP control protocol on port 20554 • Local network access permission enabled in your app

🚀 Getting Started

  1. Clone the repository git clone git@github.com:YOURUSER/YOURREPO.git

  2. Open the project

Open JVCProjectorControl.xcodeproj in Xcode.

  1. Update IP / Port

Go to the Settings tab in the running app and enter your projector’s IP address (usually something like 192.168.x.x).

  1. Test connectivity

Use: • Poll now • Power On / Off

Watch the Log tab for diagnostics and raw protocol data.

📡 Supported Projector Models

Tested with: • JVC D-ILA X5900

Should also work (with identical protocol) on: • X7900 / X9900 • RS540 / RS640 • Several other D-ILA models supporting TCP remote control

⸻ 📦 Project Architecture JVCProjectorControl/ │ ├── ProjectorController.swift # All networking, parsing, logging ├── ContentView.swift # TabView layout ├── StartView.swift # Main projector controls ├── LogView.swift # Live socket log ├── SettingsView.swift # IP/port editing └── AboutView.swift # App info

Key design goal: Keep networking logic isolated in ProjectorController, making the UI thin and easy to extend.

🧪 Troubleshooting

If you see: • No PJ_OK greeting → Projector not reachable or not ready • No PJACK → The projector rejected the handshake • Raw responses like 06 89 01 ... → Basic ACK • Raw responses containing two packets glued together → Expected behavior (continuous mode)

If your projector is cooling down, responses may be delayed or different.

🤝 Contributing

Contributions are welcome! Ideas include: • Adding input/source switching • Lens control • Picture mode switching • HomeKit or Siri integration • Persistent IP storage using AppStorage / UserDefaults • Widget or Apple Watch remote

📄 License

MIT — free to use, modify, and distribute.

💬 Contact

If you have questions, suggestions, or want help adding new JVC commands, feel free to open an issue or reach out.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages