Sony Control-S Protocol Specifications by Scott Coleman Xanadu Consulting Internet: coleman@f69.n233.z1.fidonet.org FIDOnet: 1:233/69.0 Copyright 1990 Scott Coleman. All Rights Reserved. Revised: 5/21/90 The following is a reference guide to using a microcomputer to control a VCR equipped with a Control-S (SIRCS) port. It is being released in the hope that it will be useful to some of you. Apparently there is no documentation on the Control-S protocol available from Sony (at least, that's what their publications office told me when I called). Thus, the following information is a synthesis of bits and pieces obtained from many sources, including the Sony Service Manual for the RMT-124 IR controller, some net.friends, and by connecting an oscilloscope across the LED in a Sony IR remote controller and observing the signals sent as various buttons on the controller were pressed. The timings given may not be exactly those used by the Sony products, but these timings have been used successfully in controlling a Sony SL-HF900 VCR via the Control-S port, so I figure they're pretty close. I make no guarantees of accuracy for any of the information contained in this document, although I'd appreciate hearing from you if you find any errors contained herein. Also, the names used here may not correspond to any "official" Sony names used for the various aspects of the Control-S protocol. I have made up some reasonably descriptive names for various things, since there is no official reference information (that I am aware of) which would tell me the official names. I'd also like to acknowledge the assistance of Paul Milazzo (milazzo@bbn.com) for his valuable pointers in the right direction when I first began to research this topic. Without his response to my usenet post, I might never have figured all this stuff out and gotten my controller program working. Thanks, Paul! Protocol Description The Control-S protocol used by various Sony video products is simply a TTL-level baseband version of the signals sent by the Sony remote controllers (such as the RMT-124). The Control-S command word is 12 bits long, and consists of a 5-bit device ID code followed by a 7-bit button code. The control-S data packet is preceded by a 2.4 millisecond TTL logic-1 pulse (start bit) followed by 0.6 ms of logic-0. Each 1 bit in the control word is represented by a 1.2 ms logic-1 level followed by a 0.6 ms logic- 0 level, and each 0 bit is 0.6 ms high, 0.6 ms low. The end of the control packet is always a TTL logic-0 level, and the total length of each packet is fixed at 45 ms in length. The bits in each control word are sent in increasing bit position order (i.e. low order bit first, high order bit last). As an example, let's look at the command to toggle the power on a SL-HF900. The device ID for the VCR is 00010, and the button code for the power switch is 0010101. Thus, the entire control word is 000100010101. To send this command to the VCR, we first send out a 2.4 ms start bit, and then send the bits in reverse order (i.e. 101010001000). We then hold the Control-S port to logic-0 level to make the total packet time (i.e. the time since the rising edge of the start pulse) equal 45 ms. Interfacing To send commands to a VCR equipped with a Control-S port, your computer will need a TTL-level binary output port. A standard IBM-PC parallel printer port works well, as does a data acquisition and control adapter (IBM DACA board). As long as the port can send a TTL-level signal (0VDC = logic-0, 5VDC = logic-1) you should be OK. Connect the output line from the port to a 1/8" mini phone plug, with the tip carrying the TTL signal and the ring grounded. A simple software routine can then be written to toggle the status of a bit in the output port corresponding to the output line. Setting the corresponding bit in the output port will cause the line to go high, clearing the bit will cause the line to go low. By controlling the pattern and timing of these high and low signals, the commands may be sent to the VCR. The following pseudocode outlines a routine to send a command through a port setup such as that described above: begin /* send the start bit */ raise Ctrl-S line to TTL logic-1 wait 2.4 ms lower Ctrl-S line to logic-0 wait 0.4 ms for current_bit = low_order_bit to high_order_bit do begin raise Ctrl-S line to logic-1 if (current_bit is a 1) wait 1.2 ms else wait 0.8 ms lower Ctrl-S line to logic-0 end wait a sufficient time to make the total message duration 45 ms. end Additional Information The following are some of the codes I've discovered while experimenting with the Control-S port software I wrote, as well as some additional codes sent to me by Bruce Edwards (bruce@locke.hs.washington.edu). Note that not all of these commands work with all VCR models. For example, code 22 causes the SL-HF900 to eject a tape, but the SL-HF400 ignores that command. If you come across any codes which are not listed here, I'd appreciate it if you'd send me a list of new codes you discover. Device ID Codes 1 TV 2 VTR1 4 VTR2 Button Codes 000 1 button 001 2 button 002 3 button 003 4 button 004 5 button 005 6 button 006 7 button 007 8 button 008 9 button 009 10 button/0 button 010 11 button/* button 011 12 button/CH/Enter/# 012 13 button/1- 013 14 button/2- 020 X 2 play w/sound / X 3 play 021 power 022 eject 023 L-CH/R-CH/Stereo 024 stop 025 pause 026 play 027 rewind 028 FF 029 record 032 pause engage 034 X 1/10 play 035 X 1/5 play 038 High Double Speed ( X7 ~ X15X ) 040 reverse visual scan (Review on ) 041 forward visual scan (Cue on) 042 TV/VTR (ANT-SW) 045 VTR from TV (ANT-VTR) 046 Power on 047 power off 048 single frame reverse/slow reverse play 049 single frame advance/slow forward play 051 X 1 058 Rewind and Play 060 aux 070 counter reset 071 Counter Memory on/off 072 Index write 073 Index erase 078 TV/VTR (ANT-TV) 083 index (scan) 089 Tape return 090 Display on/off 091 Open/Close 104 Audio Insert 105 Video Insert 106 edit play (Assemble) 107 mark 108 Start Well, this ought to be enough to get you started. If you have any questions, or would like to share some new device/button codes, I can be reached at either of the following addresses: Internet: UV@f69.n233.z1.fidonet.org FIDOnet: UV@1:233/69.0 From: Kyler B Laird laird@ecn.purdue.edu To: o-intelhouse@dlb.com Date: Thu, 06 Jan 1994 22:28:34 EST Subject: Re: Sony remote control protocol + The following is a reference guide to using a microcomputer to +control Sony equipment via the SIRCS protocol. This can occur either +via an infrared interface, or with a Control-S port. It is being +released in the hope that it will be useful to some of you. Apparently +there is no documentation on the protocol available from Sony (at least, +that's what their publications office said). You spoke to the wrong person/people. You need to ask for "Sony Remote Control Systems" (2RM383-1). Mine was $5. SIRCS is described on pages 17-27. (SIRCS intro from 17-22, System III on 22, Beta on 23, and Audio on 25-27) + The wired Control-S protocol used by various Sony video products is +simply a TTL-level baseband version of the signals sent by the Sony +remote controllers (such as the RMT-124). The Control-S command word is +12 or 15 bits long, and consists of a 5 or 8-bit device ID code followed +by a 7-bit button code. I haven't run into a 15 bit word. This manual only mentions 12 bit words, but it may be out of date. +The control-S data packet is preceded by a 2.4 +millisecond TTL logic-1 pulse (start bit) followed by 0.4 ms of logic-0. +Each 1 bit in the control word is represented by a 1.2 ms logic-1 level +followed by a 0.4 ms logic-0 level, and each 0 bit is 0.8 ms high, 0.4 +ms low. The end of the control packet is always a TTL logic-0 level, and +the total length of each packet usually fixed at 45 ms in length. Yeah, uh, I guess. Here's what this manual says: "The SIRCS digital code is made up of a start pulse 2.4 msec wide followed by a series of 12 pulses representing ones and zeros. The whole frame is repeated about 22 times per second having a frame period of 45 mseconds. A data 0 is represented by .6 ms of no signal and .6 ms of the 40 KHz carrier signal [logic 1 for baseband]. A data 1 is represented by .6 ms of no signal and 1.2 ms of 40 KHz carrier. After the 12 bits comprised of 7 data bits for the function followed by 5 bits for product category, there occurs no signal until the end of the frame. The signal is sent least significant bit first, most significant bit last." + 047 power off + + 048 single frame reverse/slow reverse play According to this manual, 48 is POWER OFF, and 47 is POWER ON. Although these aren't often available on remote controls, they're extremely useful for computer control since the 'puter doesn't normally have feedback with which to toggle power intelligently. Good work, guys! I started observing these signals (with an MC68HC11), but after I got them and was able to send them, I bought the manual. Much easier. --kyler