gold: Fix hardcoded library search path
[dragonfly.git] / usr.sbin / xten / README
1Installation Notes for X-10 software
2Eugene W. Stark (
3October 30, 1993
4(latest update May 29, 1997)
6The TW523 is a carrier-current modem for home control/automation purposes.
7It is made by:
9 X-10 Inc.
10 185A LeGrand Ave.
11 Northvale, NJ 07647
12 USA
13 (201) 784-9700 or 1-800-526-0027
15 X-10 Home Controls Inc.
16 1200 Aerowood Drive, Unit 20
17 Mississauga, Ontario
18 (416) 624-4446 or 1-800-387-3346
20The TW523 is designed for communications using the X-10 protocol,
21which is compatible with a number of home control systems, including
22Radio Shack "Plug 'n Power(tm)" and Stanley "Lightmaker(tm)."
23I bought my TW523 from:
25 Home Control Concepts
26 9353-C Activity Road
27 San Diego, CA 92126
28 (619) 693-8887
30They supplied me with the TW523 (which has an RJ-11 four-wire modular
31telephone connector), a modular cable, an RJ-11 to DB-25 connector with
32internal wiring, documentation from X-10 on the TW523 (very good),
33an instruction manual by Home Control Concepts (not very informative),
34and a floppy disk containing binary object code of some demonstration/test
35programs and of a C function library suitable for controlling the TW523
36by an IBM PC under MS-DOS (not useful to me other than to verify that
37the unit worked). I suggest saving money and buying the bare TW523
38rather than the TW523 development kit (what I bought), because if you
39are running FreeBSD you don't really care about the DOS binaries.
40For details on the X-10 protocol itself, refer to the documentation from
41X-10 Inc.
43The interface to the TW-523 consists of four wires on the RJ-11 connector,
44which are jumpered to somewhat more wires on the DB-25 connector, which
45in turn is intended to plug into the PC parallel printer port. I dismantled
46the DB-25 connector to find out what they had done:
48 Signal RJ-11 pin DB-25 pin(s) Parallel Port
49 Transmit TX 4 (Y) 2, 4, 6, 8 Data out
50 Receive RX 3 (G) 10, 14 -ACK, -AutoFeed
51 Common 2 (R) 25 Common
52 Zero crossing 1 (B) 17 or 12 -Select or +PaperEnd
54NOTE: In the original cable I have (which I am still using, May, 1997)
55the Zero crossing signal goes to pin 17 (-Select) on the parallel port.
56In retrospect, this doesn't make a whole lot of sense, given that the
57-Select signal propagates the other direction. Indeed, some people have
58reported problems with this, and have had success using pin 12 (+PaperEnd)
59instead. This driver searches for the zero crossing signal on either
60pin 17 or pin 12, so it should work with either cable configuration.
61My suggestion would be to start by making the cable so that the zero
62crossing signal goes to pin 12 on the parallel port.
64I use the TW-523 and this software in the USA with 120V/60Hz power.
65Phil Sampson ( OR
66in Australia has reported success in using a TW-7223 (a local version
67of the TW-523) and Tandy modules with this software under 240V/50Hz power.
68For reasons explained in the comments in the driver, it will probably not
69work if you have three-phase power, but this is usually not the case for
70normal residences and offices.
731. Installing the TW523 Device Driver
75I assume that you are running FreeBSD. If you are running some other
76system, you are more or less on your own, though I can try to help if you
77have problems.
79Check the configuration parameters at the beginning of the file
81 /sys/i386/isa/tw.c
83Probably the only thing you might need to change is to change the
84definition of HALFCYCLE from 8333 to 10000 if you are using 50Hz power.
85The driver assumes that the TW523 device is connected to a parallel port.
86See the comments near the beginning of the file to find out where to
87get a TW523 if you don't have one, and how to make a cable for it to
88connect to your parallel port.
90Add a line like the following
92 device tw0 at isa? port 0x278 tty irq 5
94to /sys/i386/conf/YOURSYSTEM, but make sure to change the I/O port and
95interrupt to match your hardware configuration.
97Cd to /sys/i386/conf and do "config YOURSYSTEM".
98Cd to /sys/compile/YOURSYSTEM and do "make depend", then "make".
99(If you have any troubles, I suggest starting fresh by doing a full
100"make clean; make depend; make".) Assuming the make works correctly, do
102 make install
104(Take the usual precautions by saving a known working kernel until you
105verify that the new kernel actually boots.)
107Reboot the system. You should see a line indicating that the TW523 has
108been configured as the system comes up. If you see this line, then probably
109everything is going to work OK, because the TW523 will only get configured
110if the driver is able to sync to the power line. If the TW523 is not plugged
111in, or the driver is not getting sync for some reason, then you won't see
112any message on bootup.
114NOTE: I have received a report that some multi IDE/SIO/PARALLEL cards
115"cheat" and use TTL outputs rather than pullup open collector outputs,
116and this can mess up the scheme by which sync gets to the driver.
117If you are having trouble getting the driver to work, you might want to
118look into this possibility.
1212. Installing the X-10 Daemon
123The X-10 daemon "xtend" is integrated in to the FreeBSD "/etc/sysconfig"
124system configuration file. To enable the daemon, simply edit that file,
125find the "xtend" line, change it to read as below.
127 # Set to YES if you want to run the X-10 power controller daemon
128 xtend=YES
130This will cause the X-10 daemon to be invoked automatically when you boot
131the system. To test the installation, you can either reboot now, or
132you can just run "xtend" by hand. The daemon should start up, and it should
133create files in /var/spool/xten. Check the file /var/spool/xten/Log to
134make sure that the daemon started up without any errors.
136Now you are ready to start trying X-10 commands. Try doing
138 xten A 1 Off
139 xten A 1 On 1 Dim:10
141etc. The "xten" program expects a house code as its first argument, then
142a series of key codes, which are either unit names ("1" through "16") or
143else are command names. You can find the list of command names by looking
144at the table in the file "xten.c". Each key code can optionally be followed
145by a colon : then a number specifying the number of times that command is
146to be transmitted without gaps between packets. The default is 2, and this
147is the normal case, but some commands like Bright and Dim are designed to
148be transmitted with counts other than 2. See the X-10 documentation for
149more detail.
151The "xten" program works by connecting to "xtend" through a socket, and
152asking that the X-10 codes be transmitted over the TW523. All activity
153on the TW523 is logged by the daemon in /var/spool/xten/Log. The daemon
154also attempts to track the state of all devices. (Of course, most X-10
155devices do not transmit when they are operated manually, so if somebody
156operates a device manually there is no way the X-10 daemon will know
157about it.)
1593. Low-level Programming of the TW523 Driver
161Normally, you would never operate the TW523 directly, rather you would
162use the shell command "xten" or you would connect to "xtend" through its
163socket. However, if you don't want to run "xtend", you can manipulate
164the TW523 directly through the device /dev/tw0. Have a look at the
165xtend code for a programming example.
167The driver supports read(), write(), and select() system calls.
168The driver allows multiple processes to read and write simultaneously,
169but there is probably not much sense in having more than one reader or more
170than one writer at a time, and in fact there may currently be a race
171condition in the driver if two processes try to transmit simultaneously
172(due to unsynchronized access to the sc_pkt structure in tw_sc).
174Transmission is done by calling write() to send three byte packets of data.
175The first byte contains a four bit house code (0=A to 15=P). The second byte
176contains five bit unit/key code (0=unit 1 to 15=unit 16, 16=All Units Off
177to 31 = Status Request). The third byte specifies the number of times the
178packet is to be transmitted without any gaps between successive transmissions.
179Normally this is 2, as per the X-10 documentation, but sometimes (e.g. for
180bright and dim codes) it can be another value. Each call to write can specify
181an arbitrary number of data bytes, but at most one packet will actually be
182processed in any call. Any incomplete packet is buffered until a subsequent
183call to write() provides data to complete it. Successive calls to write()
184leave a three-cycle gap between transmissions, per the X-10 documentation.
185The driver transmits each bit only once per half cycle, not three times as
186the X-10 documentation states, because the TW523 only provides sync on
187each power line zero crossing. So, the driver will probably not work
188properly if you have three-phase service. Most residences use a two-wire
189system, for which the driver does work.
191Reception is done using read(). The driver produces a series of three
192character packets. In each packet, the first character consists of flags,
193the second character is a four bit house code (0-15), and the third character
194is a five bit key/function code (0-31). The flags are the following:
196#define TW_RCV_LOCAL 1 /* The packet arrived during a local transmission */
197#define TW_RCV_ERROR 2 /* An invalid/corrupted packet was received */
199The select() system call can be used in the usual way to determine if there
200is data ready for reading.
203 Happy Controlling!
204 Gene Stark
208Appendix. Miscellaneous Additional Information
210The following excerpts from my E-mail correspondence may be relevant
211to some situations:
214From: Steve Passe
215Subject: Re: tw woes
216Date: Sat, 09 Dec 1995 20:57:15 -0700
220I have just verified that /dev/tw works on 2.1.0-RELEASE. I can
221send and receive x10 commands via my x10 daemon and X11 based tools.
223I used a "cross-over" cable between tw523 and db-25 connector:
225 |||||-----------|||||
226 \ /
228NOTE: I am NOT using the RadioShack brand of hood:
230looking at INSIDE of hood:
233| |
234| |
235| B G B | < Black, Green, Blue
236| W R Y | < White, Red, Yellow
237| |||||| |
238| |||||| |
239| |||||| |
240| |
241| |
242| |
247 Hood TW523
248---------- ------------------
249| | | |
250| | | |
251| ------ | | +------+ |
252| |||||| | | | |||| | |
253| |||||| | | | |||| | |
254| -- -- | | +-- --+ |
255| | | | | | | |
256| -- | | -- |
257| | | |
258| | | 1 2 3 4 |
259---------- ------------------
260 Y G R B B R G Y
261 | | | | | | | |
262 | | | |--------------------| | | |
263 | | |------------------------| | |
264 | |----------------------------| |
265 |--------------------------------|
267Be sure that the tw523 is NOWHERE NEAR a surge protector. I have seen
268x-10 devices fail to work when plugged in NEXT to a surge protector!
271I placed the tw option before the lpt entries in my config file:
273device tw0 at isa? port 0x378 tty irq 7
274device lpt0 at isa? port? tty irq 7
276from dmesg I get:
278Dec 9 19:11:59 ilsa /kernel: tw0 at 0x378-0x37f irq 7 on isa
279Dec 9 19:11:59 ilsa /kernel: lpt0 not probed due to I/O address conflict with
280tw0 at 0x378
282Once I have opened /dev/tw with my daemon I get messages
283 (pressing UNIT J, key 16):
285Dec 9 20:18:26 ilsa /kernel: TWRCV: valid packet: (22, 1f8) J 16
286Dec 9 20:18:26 ilsa /kernel: TWRCV: valid packet: (22, 1f8) J 16
288These messages from the driver should be dis-abled once you get it working,
289you'll fill up the var partition with a lot of useless garbage otherwise!
293From: Steve Passe
294Subject: Re: tw woes
295Date: Sat, 16 Dec 1995 11:56:59 -0700
299I now more or less understand the set of problems concerning cabling
300for using /dev/tw and a tw523. Summary:
303 1: modular cables come in 2 flavors:
305|||||----------||||| <- "phone" cable
306 \ /
308 \
309|||||----------||||| <- "data" cable
310 \
312 we need to be able to clearly differentiate the two. I suggest we
313 standardize on using "phone" cables only.
316 2: modular db25 connectors ARE NOT CONSISTANT in their color code
317 scheme, EVEN within the same BRAND!
319 we can't describe the connection in terms of cable/connector wire color.
320 we must clearly explain the consequences of mis-connection:
321 POSSIBLE damage to (but NOT limited to) the parallel port and/or tw523.
324 3: not all parallel ports have pullups on their status inputs. I found
325 2 different port boards in my junk box without pullups on paper-out.
326 As is, these boards failed to work, ie the probe routine failed.
327 By adding 10K pullup resistors (to +5v) to both ACK and paper-out
328 (pins 10 & 12) I was able to make these boards work: probe succeeds,
329 transmit and receive work reliably.
331 we must describe a test to determine if a parallel port will work as is.
332 perhaps something like:
335Not a parallel ports will work with the connector described in this paper.
336To test your port for usability you should take the following measurements
337with a voltmeter. The computer must be powered-up, and preferably in
338a safe state for tinkering, such as halted in a startup menu. Nothing
339should be attached to the parallel ports, except perhaps an extension
340cable for testing convenience.
342 1: measure the voltage between pins 10 & 25 (GND) of the parallel port.
344 2: measure the voltage between pins 12 & 25 (GND) of the parallel port.
346If both of these measurements have a value of >= 4.0 volts your port
347should work as is. If either is below 4.0 volts (typically less than
3481.0 volt) your port will NOT WORK RELIABLY as is. It can be made to
349work by adding 10k ohm pull-up resistors to either line that is below
350the minimum 4.0 volts. This is an ADVANCED TECHNIQUE that should NOT
351be attempted by anyone without some hardware construction experience.
353Assuming that you do feel competant to make these modifications it is
354easiest to tack 10k resistors on the bottom side of the port board
355from each of pins 10 & 12 of the parallel port connector to a source
356of +5 volts. This will probably be the power pin of one of the ICs.
357CAUTION: there may also be +-12 volts on a port board supplying some
358of the ICs. If your port is on your motherboard it would probably be
359best to obtain an external port card, and disable/re-address the 1st
360parallel port.