These are no longer needed after tw is gone.

Approved by: re@ (scottl)
This commit is contained in:
Warner Losh 2003-04-27 05:42:07 +00:00
parent 02aa843a15
commit 32660658b8
5 changed files with 0 additions and 671 deletions

View File

@ -126,7 +126,6 @@ SUBDIR= IPXrouted \
vnconfig \
watch \
wicontrol \
xten \
yp_mkdb \
ypbind \
yppoll \

View File

@ -1,8 +0,0 @@
# Makefile for xten (Stark) 10/30/93
# $FreeBSD$
PROG= xten
CFLAGS+= -I${.CURDIR}/../../libexec/xtend
.include <bsd.prog.mk>

View File

@ -1,367 +0,0 @@
Installation Notes for X-10 software
Eugene W. Stark (stark@cs.sunysb.edu)
October 30, 1993
(latest update May 29, 1997)
The TW523 is a carrier-current modem for home control/automation purposes.
It is made by:
X-10 Inc.
185A LeGrand Ave.
Northvale, NJ 07647
USA
(201) 784-9700 or 1-800-526-0027
X-10 Home Controls Inc.
1200 Aerowood Drive, Unit 20
Mississauga, Ontario
(416) 624-4446 or 1-800-387-3346
The TW523 is designed for communications using the X-10 protocol,
which is compatible with a number of home control systems, including
Radio Shack "Plug 'n Power(tm)" and Stanley "Lightmaker(tm)."
I bought my TW523 from:
Home Control Concepts
9353-C Activity Road
San Diego, CA 92126
(619) 693-8887
They supplied me with the TW523 (which has an RJ-11 four-wire modular
telephone connector), a modular cable, an RJ-11 to DB-25 connector with
internal wiring, documentation from X-10 on the TW523 (very good),
an instruction manual by Home Control Concepts (not very informative),
and a floppy disk containing binary object code of some demonstration/test
programs and of a C function library suitable for controlling the TW523
by an IBM PC under MS-DOS (not useful to me other than to verify that
the unit worked). I suggest saving money and buying the bare TW523
rather than the TW523 development kit (what I bought), because if you
are running FreeBSD you don't really care about the DOS binaries.
For details on the X-10 protocol itself, refer to the documentation from
X-10 Inc.
The interface to the TW-523 consists of four wires on the RJ-11 connector,
which are jumpered to somewhat more wires on the DB-25 connector, which
in turn is intended to plug into the PC parallel printer port. I dismantled
the DB-25 connector to find out what they had done:
Signal RJ-11 pin DB-25 pin(s) Parallel Port
Transmit TX 4 (Y) 2, 4, 6, 8 Data out
Receive RX 3 (G) 10, 14 -ACK, -AutoFeed
Common 2 (R) 25 Common
Zero crossing 1 (B) 17 or 12 -Select or +PaperEnd
NOTE: In the original cable I have (which I am still using, May, 1997)
the Zero crossing signal goes to pin 17 (-Select) on the parallel port.
In retrospect, this doesn't make a whole lot of sense, given that the
-Select signal propagates the other direction. Indeed, some people have
reported problems with this, and have had success using pin 12 (+PaperEnd)
instead. This driver searches for the zero crossing signal on either
pin 17 or pin 12, so it should work with either cable configuration.
My suggestion would be to start by making the cable so that the zero
crossing signal goes to pin 12 on the parallel port.
I use the TW-523 and this software in the USA with 120V/60Hz power.
Phil Sampson (vk2jnt@gw.vk2jnt.ampr.org OR sampson@gidday.enet.dec.com)
in Australia has reported success in using a TW-7223 (a local version
of the TW-523) and Tandy modules with this software under 240V/50Hz power.
For reasons explained in the comments in the driver, it will probably not
work if you have three-phase power, but this is usually not the case for
normal residences and offices.
1. Installing the TW523 Device Driver
I assume that you are running FreeBSD. If you are running some other
system, you are more or less on your own, though I can try to help if you
have problems.
Check the configuration parameters at the beginning of the file
/sys/i386/isa/tw.c
Probably the only thing you might need to change is to change the
definition of HALFCYCLE from 8333 to 10000 if you are using 50Hz power.
The driver assumes that the TW523 device is connected to a parallel port.
See the comments near the beginning of the file to find out where to
get a TW523 if you don't have one, and how to make a cable for it to
connect to your parallel port.
Add a line like the following
device tw0 at isa? port 0x278 tty irq 5
to /sys/i386/conf/YOURSYSTEM, but make sure to change the I/O port and
interrupt to match your hardware configuration.
Cd to /sys/i386/conf and do "config YOURSYSTEM".
Cd to /sys/compile/YOURSYSTEM and do "make depend", then "make".
(If you have any troubles, I suggest starting fresh by doing a full
"make clean; make depend; make".) Assuming the make works correctly, do
make install
(Take the usual precautions by saving a known working kernel until you
verify that the new kernel actually boots.)
Reboot the system. You should see a line indicating that the TW523 has
been configured as the system comes up. If you see this line, then probably
everything is going to work OK, because the TW523 will only get configured
if the driver is able to sync to the power line. If the TW523 is not plugged
in, or the driver is not getting sync for some reason, then you won't see
any message on bootup.
NOTE: I have received a report that some multi IDE/SIO/PARALLEL cards
"cheat" and use TTL outputs rather than pullup open collector outputs,
and this can mess up the scheme by which sync gets to the driver.
If you are having trouble getting the driver to work, you might want to
look into this possibility.
In directory /dev, execute the command
MAKEDEV tw0
2. Installing the X-10 Daemon
The X-10 daemon "xtend" is integrated in to the FreeBSD "/etc/sysconfig"
system configuration file. To enable the daemon, simply edit that file,
find the "xtend" line, change it to read as below.
# Set to YES if you want to run the X-10 power controller daemon
xtend=YES
This will cause the X-10 daemon to be invoked automatically when you boot
the system. To test the installation, you can either reboot now, or
you can just run "xtend" by hand. The daemon should start up, and it should
create files in /var/spool/xten. Check the file /var/spool/xten/Log to
make sure that the daemon started up without any errors.
Now you are ready to start trying X-10 commands. Try doing
xten A 1 Off
xten A 1 On 1 Dim:10
etc. The "xten" program expects a house code as its first argument, then
a series of key codes, which are either unit names ("1" through "16") or
else are command names. You can find the list of command names by looking
at the table in the file "xten.c". Each key code can optionally be followed
by a colon : then a number specifying the number of times that command is
to be transmitted without gaps between packets. The default is 2, and this
is the normal case, but some commands like Bright and Dim are designed to
be transmitted with counts other than 2. See the X-10 documentation for
more detail.
The "xten" program works by connecting to "xtend" through a socket, and
asking that the X-10 codes be transmitted over the TW523. All activity
on the TW523 is logged by the daemon in /var/spool/xten/Log. The daemon
also attempts to track the state of all devices. (Of course, most X-10
devices do not transmit when they are operated manually, so if somebody
operates a device manually there is no way the X-10 daemon will know
about it.)
3. Low-level Programming of the TW523 Driver
Normally, you would never operate the TW523 directly, rather you would
use the shell command "xten" or you would connect to "xtend" through its
socket. However, if you don't want to run "xtend", you can manipulate
the TW523 directly through the device /dev/tw0. Have a look at the
xtend code for a programming example.
The driver supports read(), write(), and select() system calls.
The driver allows multiple processes to read and write simultaneously,
but there is probably not much sense in having more than one reader or more
than one writer at a time, and in fact there may currently be a race
condition in the driver if two processes try to transmit simultaneously
(due to unsynchronized access to the sc_pkt structure in tw_sc).
Transmission is done by calling write() to send three byte packets of data.
The first byte contains a four bit house code (0=A to 15=P). The second byte
contains five bit unit/key code (0=unit 1 to 15=unit 16, 16=All Units Off
to 31 = Status Request). The third byte specifies the number of times the
packet is to be transmitted without any gaps between successive transmissions.
Normally this is 2, as per the X-10 documentation, but sometimes (e.g. for
bright and dim codes) it can be another value. Each call to write can specify
an arbitrary number of data bytes, but at most one packet will actually be
processed in any call. Any incomplete packet is buffered until a subsequent
call to write() provides data to complete it. Successive calls to write()
leave a three-cycle gap between transmissions, per the X-10 documentation.
The driver transmits each bit only once per half cycle, not three times as
the X-10 documentation states, because the TW523 only provides sync on
each power line zero crossing. So, the driver will probably not work
properly if you have three-phase service. Most residences use a two-wire
system, for which the driver does work.
Reception is done using read(). The driver produces a series of three
character packets. In each packet, the first character consists of flags,
the second character is a four bit house code (0-15), and the third character
is a five bit key/function code (0-31). The flags are the following:
#define TW_RCV_LOCAL 1 /* The packet arrived during a local transmission */
#define TW_RCV_ERROR 2 /* An invalid/corrupted packet was received */
The select() system call can be used in the usual way to determine if there
is data ready for reading.
Happy Controlling!
Gene Stark
stark@cs.sunysb.edu
Appendix. Miscellaneous Additional Information
The following excerpts from my E-mail correspondence may be relevant
to some situations:
From: Steve Passe
Subject: Re: tw woes
Date: Sat, 09 Dec 1995 20:57:15 -0700
Hi,
I have just verified that /dev/tw works on 2.1.0-RELEASE. I can
send and receive x10 commands via my x10 daemon and X11 based tools.
I used a "cross-over" cable between tw523 and db-25 connector:
|||||-----------|||||
\ /
NOTE: I am NOT using the RadioShack brand of hood:
looking at INSIDE of hood:
----------
| |
| |
| B G B | < Black, Green, Blue
| W R Y | < White, Red, Yellow
| |||||| |
| |||||| |
| |||||| |
| |
| |
| |
----------
OUTSIDE:
Hood TW523
---------- ------------------
| | | |
| | | |
| ------ | | +------+ |
| |||||| | | | |||| | |
| |||||| | | | |||| | |
| -- -- | | +-- --+ |
| | | | | | | |
| -- | | -- |
| | | |
| | | 1 2 3 4 |
---------- ------------------
Y G R B B R G Y
| | | | | | | |
| | | |--------------------| | | |
| | |------------------------| | |
| |----------------------------| |
|--------------------------------|
Be sure that the tw523 is NOWHERE NEAR a surge protector. I have seen
x-10 devices fail to work when plugged in NEXT to a surge protector!
I placed the tw option before the lpt entries in my config file:
device tw0 at isa? port 0x378 tty irq 7
device lpt0 at isa? port? tty irq 7
from dmesg I get:
Dec 9 19:11:59 ilsa /kernel: tw0 at 0x378-0x37f irq 7 on isa
Dec 9 19:11:59 ilsa /kernel: lpt0 not probed due to I/O address conflict with
tw0 at 0x378
Once I have opened /dev/tw with my daemon I get messages
(pressing UNIT J, key 16):
Dec 9 20:18:26 ilsa /kernel: TWRCV: valid packet: (22, 1f8) J 16
Dec 9 20:18:26 ilsa /kernel: TWRCV: valid packet: (22, 1f8) J 16
These messages from the driver should be dis-abled once you get it working,
you'll fill up the var partition with a lot of useless garbage otherwise!
From: Steve Passe
Subject: Re: tw woes
Date: Sat, 16 Dec 1995 11:56:59 -0700
Hi,
I now more or less understand the set of problems concerning cabling
for using /dev/tw and a tw523. Summary:
1: modular cables come in 2 flavors:
|||||----------||||| <- "phone" cable
\ /
\
|||||----------||||| <- "data" cable
\
we need to be able to clearly differentiate the two. I suggest we
standardize on using "phone" cables only.
2: modular db25 connectors ARE NOT CONSISTANT in their color code
scheme, EVEN within the same BRAND!
we can't describe the connection in terms of cable/connector wire color.
we must clearly explain the consequences of mis-connection:
POSSIBLE damage to (but NOT limited to) the parallel port and/or tw523.
3: not all parallel ports have pullups on their status inputs. I found
2 different port boards in my junk box without pullups on paper-out.
As is, these boards failed to work, ie the probe routine failed.
By adding 10K pullup resistors (to +5v) to both ACK and paper-out
(pins 10 & 12) I was able to make these boards work: probe succeeds,
transmit and receive work reliably.
we must describe a test to determine if a parallel port will work as is.
perhaps something like:
--------------------------------------------------------------------------
Not a parallel ports will work with the connector described in this paper.
To test your port for usability you should take the following measurements
with a voltmeter. The computer must be powered-up, and preferably in
a safe state for tinkering, such as halted in a startup menu. Nothing
should be attached to the parallel ports, except perhaps an extension
cable for testing convenience.
1: measure the voltage between pins 10 & 25 (GND) of the parallel port.
2: measure the voltage between pins 12 & 25 (GND) of the parallel port.
If both of these measurements have a value of >= 4.0 volts your port
should work as is. If either is below 4.0 volts (typically less than
1.0 volt) your port will NOT WORK RELIABLY as is. It can be made to
work by adding 10k ohm pull-up resistors to either line that is below
the minimum 4.0 volts. This is an ADVANCED TECHNIQUE that should NOT
be attempted by anyone without some hardware construction experience.
Assuming that you do feel competant to make these modifications it is
easiest to tack 10k resistors on the bottom side of the port board
from each of pins 10 & 12 of the parallel port connector to a source
of +5 volts. This will probably be the power pin of one of the ICs.
CAUTION: there may also be +-12 volts on a port board supplying some
of the ICs. If your port is on your motherboard it would probably be
best to obtain an external port card, and disable/re-address the 1st
parallel port.
--------------------------------------------------------------------------

View File

@ -1,115 +0,0 @@
.\" Copyright (c) 1992, 1993 Eugene W. Stark
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Eugene W. Stark.
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY EUGENE W. STARK (THE AUTHOR) ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.Dd October 30, 1993
.Dt XTEN 1
.Os
.Sh NAME
.Nm xten
.Nd transmit X-10 commands
.Sh SYNOPSIS
.Nm
.Op Fl ""
.Ar house
.Ar key Ns Op : Ns Ar cnt
.Oo
.Op Ar house
.Ar key Ns Op : Ns Ar cnt
.Ar ...
.Oc
.Sh DESCRIPTION
The
.Nm
utility is a command-line interface to the X-10 daemon.
When invoked with a one-letter house code (A-P) and a series of key/unit
codes as arguments, it requests the X-10 daemon to transmit a corresponding
series of X-10 packets. The X-10 daemon makes its best effort to ensure
that the packets are all transmitted correctly, though in general it is
not possible to tell whether the commands were actually received and
executed by the remote X-10 devices.
.Pp
When invoked with the single argument
.Fl "" ,
.Nm
enters an interactive mode in which a line is repeatedly read from the
standard input, sent to the X-10 daemon, and the one-line response from
the daemon printed on the standard output.
.Sh OPTIONS
The
.Ar house
argument is a one-letter house code in the range A-P.
All the X-10 requests generated will refer to this house code.
Each
.Ar key
is either a numeric unit code in the range 1-16, or else
is a string that specifies an X-10 function. The possible
function code strings are:
.Bl -diag
.It AllUnitsOff
.It AllLightsOn
.It On
.It Off
.It Dim
.It Bright
.It AllLightsOff
.It ExtendedCode
.It HailRequest
.It HailAcknowledge
.It PreSetDim0
.It PreSetDim1
.It ExtendedData
.It StatusOn
.It StatusOff
.It StatusRequest
.El
.Pp
Each
.Ar key
may be followed by an optional numeric
.Ar cnt ,
which specifies the number of packets that are to be sent with that
key code without gaps. If this argument is omitted, two packets
are transmitted. The ability to specify numbers of packets other than
two is used by the X-10
.Em Dim
and
.Em Bright
commands.
.Sh SEE ALSO
.Xr tw 4 ,
.Xr xtend 8
.Sh FILES
.Bl -tag -width /var/spool/xten/Status -compact
.It Pa /dev/tw0
the TW523 special file
.El
.Sh AUTHORS
.An Eugene W. Stark Aq stark@cs.sunysb.edu

View File

@ -1,180 +0,0 @@
/*-
* Copyright (c) 1992, 1993 Eugene W. Stark
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Eugene W. Stark.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY EUGENE W. STARK (THE AUTHOR) ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef lint
static const char rcsid[] =
"$FreeBSD$";
#endif /* not lint */
/*
* Xten - user command interface to X-10 daemon
*/
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include "xtend.h"
#include "xten.h"
#include "paths.h"
#define RETRIES 10
#define CMDLEN 512
char *X10housenames[] = {
"A", "B", "C", "D", "E", "F", "G", "H",
"I", "J", "K", "L", "M", "N", "O", "P",
NULL
};
char *X10cmdnames[] = {
"1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "11", "12", "13", "14", "15", "16",
"AllUnitsOff", "AllLightsOn", "On", "Off", "Dim", "Bright", "AllLightsOff",
"ExtendedCode", "HailRequest", "HailAcknowledge", "PreSetDim0", "PreSetDim1",
"ExtendedData", "StatusOn", "StatusOff", "StatusRequest",
NULL
};
int find(char *, char *[]);
static void usage(void) __dead2;
int
main(int argc, char *argv[])
{
int c, tmp, h, k, sock, error;
FILE *daemon;
struct sockaddr_un sa;
char *sockpath = SOCKPATH;
char reply[CMDLEN], cmd[CMDLEN], *cp;
int interactive = 0;
if (argc == 2 && !strcmp(argv[1], "-"))
interactive++;
else if(argc < 3)
usage();
if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
errx(1, "can't create socket");
strcpy(sa.sun_path, sockpath);
sa.sun_family = AF_UNIX;
if (connect(sock, (struct sockaddr *)&sa, strlen(sa.sun_path) + 2) < 0)
errx(1, "can't connect to X-10 daemon");
if ((daemon = fdopen(sock, "w+")) == NULL)
errx(1, "can't attach stream to socket");
/*
* If interactive, copy standard input to daemon and report results
* on standard output.
*/
if (interactive) {
while (!feof(stdin)) {
if (fgets(cmd, CMDLEN, stdin) != NULL) {
fprintf(daemon, "%s", cmd);
fflush(daemon);
if (fgets(reply, CMDLEN, daemon) != NULL) {
fprintf(stdout, "%s", reply);
fflush(stdout);
}
}
}
exit(0);
}
/*
* Otherwise, interpret arguments and issue commands to daemon,
* handling retries in case of errors.
*/
if ((h = find(argv[1], X10housenames)) < 0)
errx(1, "invalid house code: %s", argv[1]);
argv++;
argv++;
while (argc >= 3) {
cp = argv[0];
if((tmp = find(cp, X10housenames)) >= 0) {
h = tmp;
argv++;
argc--;
continue;
}
while (*cp != '\0' && *cp != ':')
cp++;
if (*cp == ':')
c = atoi(cp+1);
else
c = 2;
*cp = '\0';
if ((k = find(argv[0], X10cmdnames)) < 0) {
warnx("invalid key/unit code: %s", argv[0]);
error++;
}
error = 0;
while (error < RETRIES) {
fprintf(daemon, "send %s %s %d\n", X10housenames[h],
X10cmdnames[k], c);
fflush(daemon);
fgets(reply, CMDLEN, daemon);
if(strncmp(reply, "ERROR", 5)) break;
error++;
usleep(200000);
}
if (error == RETRIES) {
warnx("command failed: send %s %s %d",
X10housenames[h], X10cmdnames[k], c);
}
argc--;
argv++;
}
fprintf(daemon, "done\n");
fgets(reply, CMDLEN, daemon);
exit(0);
}
static void
usage(void)
{
fprintf(stderr,
"usage: xten house key[:cnt] [[house] key[:cnt] ...]\n");
exit(1);
}
int
find(char *s, char *tab[])
{
int i;
for (i = 0; tab[i] != NULL; i++) {
if (strcasecmp(s, tab[i]) == 0)
return (i);
}
return (-1);
}