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