The VP320 and VP330 media players by Waves System offer advanced control via RS-232 (serial) and TCP/IP (network) protocols. These protocols allow you to send precise commands to manage playback, volume, subtitles, power, and even external devices like displays (HDMI-CEC) or projectors (PJLINK).
This guide details all available commands, the frame structure, communication parameters, and best practices for successful integration.
Communication Protocols: RS-232 vs TCP/IP
1. RS-232 (Serial)
Communication Type: Bi-directional (the player can send and receive data).
Connector: DB9 serial port (or other depending on the model).
Default Parameters:
Parameter
Value
Baud Rate
115200 (adjustable from 1200 to 115200)
Start Bits
1
Data Bits
8
Parity Bits
None
Stop Bits
1
Handshake
None
Configuration: Adjustable via System Settings > Serial Port.
Default Address: All players have the 0x80 address by default.
Note: The address can be modified to target a specific player (see Section 15.1.5).
2. TCP/IP (Network)
Communication Type: Incoming only (the player can only receive commands, not send them).
Default Port: 65079 (for general commands).
Exception: Port 44830 is used for player synchronization (see article 007 - Synchronizing Players).
IP Address: Must be configured (static or reserved DHCP) for each player.
Communication: The player responds to commands sent to its ID number or a general command (address 0x80).
Frame Structure
General Format
All commands are built as serial frames consisting of at least 3 bytes:
Byte | Role | Description |
|---|---|---|
0 | Sync + ID | Synchronization byte and player identifier (e.g., |
1 | Command | Command code (e.g., |
2+ | Parameters | Command-specific values (e.g., folder number, volume level). |
Byte Representation: 8 bits (e.g.,
10000000bin binary =0x80in hexadecimal).Frame Ending: For player responses (via RS-232), a CR/LF (
0x0D 0x0A) is added.
Available Commands
? 1. Player Control Commands
1.1. Jump to a Folder
Allows jumping to a specific folder among 1000 possibilities (000-999).
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID (e.g., |
1 | Command | 0x01 | Jump to folder 000-127. |
1 | Command | 0x11 | Jump to folder 128-255. |
1 | Command | 0x21 | Jump to folder 256-383. |
1 | Command | 0x31 | Jump to folder 384-511. |
1 | Command | 0x41 | Jump to folder 512-639. |
1 | Command | 0x51 | Jump to folder 640-767. |
1 | Command | 0x61 | Jump to folder 768-895. |
1 | Command | 0x71 | Jump to folder 896-999. |
2 | Parameter | [0x00-0x7F] | Folder number in the selected range (0-127). |
Example:
0x81 0x41 0x7C→ Player 001 jumps to folder 636 (since0x41= range 512-639, and0x7C= 124 → 512 + 124 = 636).
1.2. Playback and Standby Commands
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x02 | Playback and standby commands. |
2 | Parameter | 0x01 | PLAY: Play from the start of the file. |
2 | Parameter | 0x02 | STOP: Stop playback. |
2 | Parameter | 0x03 | Next file in the current folder. |
2 | Parameter | 0x04 | Previous file in the current folder. |
2 | Parameter | 0x05 | Pause / Resume at current position. |
2 | Parameter | 0x06 | Play next folder. |
2 | Parameter | 0x07 | Play previous folder. |
2 | Parameter | 0x08 | Toggle standby mode. |
2 | Parameter | 0x09 | Increase volume by +1 step. |
2 | Parameter | 0x0A | Decrease volume by -1 step. |
2 | Parameter | 0x0B | Unused. |
2 | Parameter | 0x0C | STANDBY: Put the player in standby. |
2 | Parameter | 0x0D | WAKE UP: Wake up the player. |
2 | Parameter | 0x0E | Pause the player. |
2 | Parameter | 0x0F | Resume playback after pause. |
1.3. Volume Adjustment
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x03 | Volume command. |
2 | Parameter | [0x00-0x64] | Volume level (0 to 100). |
Example: 0x81 0x03 0x3C → Player 001 sets volume to 60.
1.4. Information Requests
The player can return information via RS-232 (response in ASCII + CR/LF).
Byte | Role | Value (Hex) | Description | Response |
|---|---|---|---|---|
0 | Sync | 0x80 | Player ID. | |
1 | Command | 0x04 | Information request. | |
2 | Parameter | 0x01 | Player status |
|
2 | Parameter | 0x02 | Current file name |
|
2 | Parameter | 0x03 | File name and location |
|
2 | Parameter | 0x04 | Media in use |
|
2 | Parameter | 0x06 | Current folder name |
|
2 | Parameter | 0x09 | Remaining time |
|
2 | Parameter | 0x0A | Total file time |
|
2 | Parameter | 0x0B | Volume value |
|
Example Frame:
Request:
0x81 0x04 0x01→ Status of player 001.Response:
PLAYING + CR/LF(in ASCII:50 4C 41 59 49 4E 47 0D 0A).
? 2. Clock Update Commands
2.1. Update Local Time
Sets the time in the current timezone of the player.
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x0C | Update local time. |
2 | Hours | [0x00-0x17] | Hours (0-23). |
3 | Minutes | [0x00-0x3B] | Minutes (0-59). |
4 | Seconds | [0x00-0x3B] | Seconds (0-59). |
Example: 0x81 0x0C 0x0F 0x2D 0x1E → Player 001 sets time to 15:45:30.
2.2. Update Local Date
Sets the date in the current timezone.
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x1C | Update local date. |
2 | Year | [0x00-0x7F] | Years since 2000 (0-127). |
3 | Month | [0x01-0x0C] | Month (1-12). |
4 | Day | [0x01-0x1F] | Day (1-31). |
2.3. Update Local Date and Time
Combines commands 2.1 and 2.2.
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x2C | Update local date and time. |
2 | Year | [0x00-0x7F] | Years since 2000. |
3 | Month | [0x01-0x0C] | Month. |
4 | Day | [0x01-0x1F] | Day. |
5 | Hours | [0x00-0x17] | Hours (0-23). |
6 | Minutes | [0x00-0x3B] | Minutes (0-59). |
7 | Seconds | [0x00-0x3B] | Seconds (0-59). |
2.4. Update UTC/GMT Time (Epoch Version)
Uses a timestamp epoch (seconds since January 1, 1970).
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x3C | Update UTC (epoch). |
2-6 | Epoch | [0x00-0x7F] | Timestamp split into 5 bytes (bits 28-34, 21-27, etc.). |
2.5. Update UTC/GMT Time (Full Version)
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x4C | Update UTC/GMT. |
2 | Year | [0x00-0x7F] | Years since 2000. |
3 | Month | [0x01-0x0C] | Month. |
4 | Day | [0x01-0x1F] | Day. |
5 | Hours | [0x00-0x17] | Hours (UTC/GMT). |
6 | Minutes | [0x00-0x3B] | Minutes. |
7 | Seconds | [0x00-0x3B] | Seconds. |
2.6. Enable/Disable NTP
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x5C | Enable/Disable NTP. |
2 | Activation | 0x00 | Disable NTP. |
2 | Activation | 0x01 | Enable NTP. |
Note: Disable NTP if you use manual commands for the clock.
? 3. Subtitle Selection Commands
3.1. Generic Subtitle Selection
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x0D | Subtitle selection. |
2 | Parameter | 0x00 | Disable subtitles. |
2 | Parameter | 0x01 | Enable automatic selection. |
2 | Parameter | 0x02 | Previous subtitle (no loop). |
2 | Parameter | 0x03 | Next subtitle (no loop). |
2 | Parameter | 0x04 | Previous subtitle (with loop). |
2 | Parameter | 0x05 | Next subtitle (with loop). |
3.2. Subtitle Selection by Language Code (ISO-639)
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x1D | Selection by ISO-639 code. |
2-4 | Language Code | [0x61-0x7A] | 3 ASCII bytes (e.g., |
Example: 0x81 0x1D 0x65 0x6E 0x67 → Selects the English (eng) track for player 001.
3.3. Subtitle Selection by Index
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x2D | Selection by index. |
2 | Index | [0x00-0x7F] | Track index (0-127). |
3.4. List Subtitle Tracks
Byte | Role | Value (Hex) | Description | Response |
|---|---|---|---|---|
0 | Sync | 0x80 | Player ID. | |
1 | Command | 0x04 | Information request. | |
2 | Sub-command | 0x41 | List subtitle tracks. |
|
Example Response: eng;ara;nld (available tracks in ISO-639).
? 4. External Device Control Commands
Byte | Role | Value (Hex) | Description |
|---|---|---|---|
0 | Sync | 0x80 | Player ID. |
1 | Command | 0x02 | Playback and standby commands. |
2 | Parameter | 0x13 | HDMI-CEC STANDBY: Turn off the display. |
2 | Parameter | 0x14 | HDMI-CEC WAKE UP: Turn on the display (One Touch Play). |
2 | Parameter | 0x15 | HDMI-CEC standby/power on based on context. |
2 | Parameter | 0x16 | PJLINK POWER ON: Turn on the projector. |
2 | Parameter | 0x17 | PJLINK POWER OFF: Turn off the projector. |
Transmission Modes
1. Unitary Mode (Default)
Only custom data transmitted by the
[RSSxxx]and[RSExxx]tags are sent on the Tx output (RS-232).Example: A file named
video [RSS001].mp4will send the serial frame defined inserial.txt(line#001).
2. Daisy Chain Mode
All data received on Rx is retransmitted identically on Tx.
Allows chaining multiple players:
Connect the Tx output of player 1 to the Rx input of player 2, etc.
The information received by the first player is retransmitted in chain to the others.
Activation: Via the Advanced Configuration > Serial Port menu.
⚠️ Warning: A slight delay may occur at the end of the chain if many players are connected.
Advanced Configuration
1. Changing the Player Address
By default, all players have the 0x80 address (for general commands). To target a specific player:
Use a command like:
0x8X 0xXX 0xXXwhere X = player number (e.g.,0x81for player 001).Example:
0x82 0x02 0x01→ Player 002 executes the PLAY command.
2. Serial Port Parameters (RS-232)
Baud Rate: Adjustable from 1200 to 115200 baud (default: 115200).
Menu: System Settings > Serial Port.
3. TCP/IP Ports
Port 65079: Default port for general commands (player control).
Port 44830: Dedicated port for player synchronization (see article 007).
Practical Examples
1. Play Folder 001 on Player 001
Frame:
0x81 0x01 0x000x81: Player 001.0x01: Jump to folder command (000-127).0x00: Folder 000 (000 + 0 = 000).
2. Put Player 002 in Standby
Frame:
0x82 0x02 0x0C0x82: Player 002.0x02: Playback/standby commands.0x0C: STANDBY.
3. Request Status of Player 001
Frame Sent:
0x81 0x04 0x01Expected Response:
PLAYING + CR/LF(if the player is playing a file).
4. Set Volume to 75 on Player 001
Frame:
0x81 0x03 0x4B0x4B= 75 in hexadecimal.
5. Turn On a Projector via PJLINK (Player 001)
Frame:
0x81 0x02 0x16
Best Practices
1. RS-232 Wiring
Use short cables (max 15 m) to avoid signal loss.
Ensure serial parameters (baud rate, bits) match on all connected devices.
2. TCP/IP Network
Static IP recommended: Avoid dynamic DHCP for critical installations.
Open Ports: Ensure port 65079 (and 44830 for synchronization) is not blocked by a firewall.
3. Testing
Check responses: Use a tool like Termite or PuTTY to send frames and receive responses.
Start with simple commands: E.g.,
PLAY,STOP, or status request (0x04).
4. Troubleshooting
Issue | Possible Cause | Solution |
|---|---|---|
No response from player | Incorrect RS-232 wiring or serial parameters | Check connections and baud rate. |
Command ignored | Incorrect ID address or malformed frame | Use |
TCP/IP port blocked | Firewall or router | Open port 65079 (or 44830). |
Delay in Daisy Chain | Too many players in series | Limit to 5-6 players max or use TCP/IP. |
Unreadable response | ASCII format not respected | Ensure your testing software interprets CR/LF. |
For further reading:
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article