If you find a mistake or learn something new, I'd love to hear about it. I'm especially interested in experiments with devices other than CD changers. Happy hunting.
Based on the original version of this document by Jeff and Brian, Peter has been adding revisions based on work with a 400 CD changer, the CDP-CX450 (The cheaper CDP-CX400 is not available in the UK). The document is now a compilation of our experiments and other web sources.
A lot of the commands and responses are only supported on the later players. However, this is not very important if you want to control everything from a computer and display all the information on your monitor.
We would like to build up a list of which models support which commands - if you can help by testing our work, please get in touch. In particular, we would like to know what the 0x22 query capacity command returns for different models. The returned 0x61 message includes a byte of data which may encode what level of features the deck supports.
Code | Description | Extended Data Format |
0x00 | Play Response Playing (0x00) |
No Extended Data |
0x01 | Stop Response Stopped (0x01) |
No Extended Data |
0x02 | Pause Response Paused (0x02) |
No Extended Data |
0x03 | Toggle Pause Note: Response Paused (0x02) if was playing, Playing (0x00) if was paused |
No Extended Data |
0x08 | Next Track | No Extended Data |
0x09 | Previous Track Note: Send once to go back to the begining of the current track, send again to go back to the start of the previous track |
No Extended Data |
0x0E | Query Disc Memory Information Note: Get a 0x71 back. This tells you if the disk has a memo set, delete file or CDText. |
Unknown |
0x0F | Query Deck Status Note: This command can be used to determine if a CD player is in one of its various special modes. (i.e. shuffle, repeat, program play, etc.) Get a 0x70 back. |
No Extended Data |
0x10 | Fast Forward Note: This appears to be the same as 0x12 on CDP-CX??? decks tested. This command will continue until a play or resume command is sent. |
No Extended Data |
0x11 | Fast Rewind Note: This appears to be the same as 0x13 on CDP-CX??? decks tested. This command will continue until a play or resume command is sent. |
No Extended Data |
0x12 | Forward Note: On all decks tested this is an extremely fast advance (60x or so). This command will continue until a play or resume command is sent. |
No Extended Data |
0x13 | Rewind Note: On all decks tested this an extremely fast rewind (60x or so). This command will continue until a play or resume command is sent. |
No Extended Data |
0x1F | Resume This resumes normal play after a scan forward or reverse command. You can also send a play command to have this result. |
Unknown |
0x20 | Disable front panel (Remote Mode On) Note: This doesn't lock out all console buttons, and it isn't even consistent between models. Also this changes the command/response behaviour in unpredictable ways which have proven vexing. I would recommend never using this mode. |
No Extended Data |
0x21 | Enable front panel (Remote Mode Off) Note: This is the default setting. |
No Extended Data |
0x22 | Query Player Capacity | No Extended Data |
0x23 | Unknown Note: Generates no response on CDP-CX450 so may not be supported. |
Unknown |
0x24 | Report Start Of Tracks (?) Note: This command was found by Kamal Mostafa and is documented in both the Nirvis and Jukebox Control files. It does not appear to be supported on the CDP-CX450. Expected response is the return of 0x09 messages at the start of tracks. |
Unknown |
0x25 | Verbose Mode Note: The decks produce a lot of traffic in this mode. The most significant change in behaviour is that when a disc is playing the disc, track, minute, and second is reported every second (message 0x51). The minute markers are posted five times. Note that verbose mode seems to get turned off at the start of the next track. |
No Extended Data |
0x26 | Brief Mode Note: Turns off verbose mode. This is the default mode for all the changers we have encountered. |
No Extended Data |
0x27 | Does disc have CD Text? Returns 0x47 if it does, or 0x0E if not. |
No Extended Data |
0x29 | Unknown Note: Generates no response on CDP-CX450 so may not be supported. |
Unknown |
0x2E | Power On | No Extended Data |
0x2F | Power Off | No Extended Data |
0x30 | Unknown | Unknown |
0x31 | Unknown | Unknown |
0x32 | Query Artist/Group Mode Note: Get a 0x96 back, see also commands 0x74 and 0x96. |
No Extended Data |
0x40 | Query Disc Memo Note: The first players with a memory for memo description for each disc stored only 13 bytes. This is returned as an 0x40. More recent changers (e.g. CDP-CX450) have memory for a 20 byte memo description for each disc. To maintain backwards complatability the first 13 bytes are returned in a 0x40, the next 7 bytes of the name will be returned as a 0x80 response. See also command 0x48. |
[disc] |
0x41 | Query Delete File Note: Each disc can have a Delete File which marks some tracks as not to be played in normal or random mode. Returns 0x41 unless no delete file has been setup, in which case get 0x11 back. |
[disc] |
0x42 | Query Group Memo Note: Returns the name of the group as an 0x42 message. |
[group] |
0x43 | Query Group Discs Note: Which discs are in the specified group. Result is bit-packed set of packets. See responses 0x43, 0x44, 0x45 and 0x78. |
[group] |
0x44 | Query Disc Info Note: Get disc statistics, length, tracks as a 0x60. If the disc is not loaded get 0x14. |
[disc] |
0x45 | Query Track Info Note: Get track length on a specific track as a 0x45. If the disc is not loaded get 0x15. |
[disc] [track] |
0x46 | Unknown | Unknown |
0x47 | Unknown | Unknown |
0x48 | Query Enhanced Memo Note: On older decks this is treated in the same way as the command 0x40. On the newer decks gets back data as 0x48 and 0x49 rather than 0x40 and 0x80 responses. Also, if the disc has CDText AND the disc is currently loaded, the full CDText is returned by the 0x48 and 0x49 messages. If not, only the memo stored in the player's memory is returned (on my CDP-CX450 this is 20 bytes). |
[disc] |
0x49 | Unknown | Unknown |
0x4A | Convert BCD to Hex / Get Track Title Note: On older decks this changes a BCD byte to a hexadecimal byte, returned as 0x5D. On newer decks such as the CDP-CX450 the response on CD Text discs is the track name (0x4A and 0x4B), or a 0x1D if not. If pass argument of 0, returns the title of the current track. |
[BCD] / [Track] |
0x50 | Play Disc, Track Note: Deck will play disc and track specified. If parameters are omitted 1 is assumed (?). |
[disc] [track] |
0x51 | Cue Disc, Track Note: Deck will load disc and wait with track paused. If parameters are omitted 1 is assumed (?). |
[disc] [track] |
0x5E | Fade Out Note: Takes a seconds value from 1-30. If no value is given, or an invalid value is given, it assumes 30 seconds. |
[seconds (hex)] |
0x5F | Fade In Note: Same as 0x5E except the other direction. |
[seconds (hex)] |
0x63 | Get XXXX Information for Disc Note: This returns 0x63 with data, or 0x19. We don't know what the data means, possible ideas are some sort of marker on the disc to state its publisher and copy permissions. |
[disc] |
0x64 | Get YYYY Information for current track If the player is currently playing or pause, will sometimes get back a 0x64 message with 9 bytes of data. Sometimes get back just 0x1A with no data. Usually get back error 0x0F. Presumably 0x0F means the agruments where invalid (or no current disc), and 0x1A means the information is unavailable. |
No Extended Data (?) |
0x6A | Query Deck Model Note: Ask the deck what model it is. Returns 13 byte ASCII string. |
No Extended Data |
0x72 | Query Deck Contents Note: Ask the deck which slots have discs. This returns a bit-packed list of which slots contain discs as far as the deck knows. It should be noted that the deck forgets this when the door is opened and will return unreliable results until fully traversed so it can get a look at everything. See also message 0x70, Deck Mode. |
No Extended Data |
0x74 | Set/Clear Group Mode Sending argument 0x00 will turn Group Mode off. Returns message 0x96. See also commands 0x32 and 0x96. |
[group] |
0x80 | Set Disc Memo (Part 1) Note: Set a disc memo field. Accepts a 13 byte ASCII string as data. Filling the field with zeros resets the memory. See also command 0x83. |
[disc] [13 bytes ASCII] |
0x81 | Unknown Note: Jeff says this appears to be intended to copy memos around. I haven't been able to get any response at all on the CDP-CX450. |
Unknown |
0x83 | Set Disc Memo (Part 2) Note: To set a 20 letter disc name, use command 0x80 to set the first 13 letters. Then set the remaining seven letters with this command. I believe the second argument is a part number, and could be used in future players to set even longer disc names. Note that at this time we have no way of knowing how many letters each 0x83 command would be used for, but it would probably be 13 or 14. You can get back 0x1B meaning the edit failed - try using a part number of 0x03. |
[disc] [02] [ASCII] |
0x84 | Unknown | Unknown |
0x88 | Programing? Note: Probably used to set/edit program one. Responds with 0x1F (memo written) with no args. With args of 01 disc track will reports mode, stops, cues disc/track, and leaves the player in program entry mode. |
Unknown |
0x8A | Edit Program One Note: It appears that only program one can be changed. This is a limitation of the remote control as well. This command is used by the two-way remote control for the CDP-CX450 to dowload a program created on the remote as program one on the deck. The first byte might have something to do with the position in the playing order. The sets of three bytes are as follows: Two bytes for a hex encoded disc number, one byte track number. To mean all the disc 0xAB is used. If this works get a 0x1F (acknowledging memo set), if it fails get a 0x1B. |
[unknown] followed by five sets of three bytes |
0x90 | Get All Disc Memos Return the memo text for all the discs. |
Unknown |
0x91 | Query Memo? Note: This query produces unpredictable (or at least so far indecipherable) responses. |
Unknown |
0x92 | Get (All) Artist Memos Note: If give argument 0x00 returns all artist memos. Returns 0x92 response(s). |
[artist] |
0x93 | Set Artist Name The CDP-CX450 supports 20 character Artist Memos, to set a name over 13 letters long means sending two commands. |
[artist] [packet number] [13 bytes ASCII] |
0x94 | Get (All) Artist Data Note: If give argument 0x00 returns all the data. Returns 0x94 reponse(s). |
[packet number] |
0x95 | Assign Artist for Disc Note: Using artist 0x00 will clear the artist for that disc. Data returned is the 0x94 message that was changed. |
[disc] [artist] |
0x96 | Set/Clear Artist Mode Sending argument 0x00 will turn Artist Mode off. Returns message 0x96. See also commands 0x32 and 0x74. |
[artist] |
0x98 | Get CD Text Note: If the disc is currently loaded and has CD Text, this query returns the disc name (0x48 and 0x49s) and all the track names (0x4A and 0x4Bs). If the second byte is 0x01, it will only return the first packet. That means you get the first 14 letters of the disc name (0x48 only) and the first 14 letters of each track name (0x4A only). If the disc is not loaded or does not have CD Text you get an 0x0E back. |
[disc] [optional arg of 0x01] |
0xE0 | Technically 0xE? are not valid command codes in the slink protocol. The linux device driver package uses the command codes 0xE0 thru 0xE8 as a flag to send a seven bit infrared remote codes across the Control-A1 bus or on Control-S data channels. Since these commands do not conform to the Control-A1 standard and appear to be legacy support, they are treated seperately in this reference. | [IR command byte] |