--- public_html/bottlerocket/br.c Sun Jun 6 22:14:38 1999 +++ br.c Mon Jun 7 23:17:50 1999 @@ -27,13 +27,8 @@ */ -/* - * Yeah. I know. It'll get moved to ttySx soon enough... Maybe some day if - * you're really lucky, I'll even add a command-line option. Woo! - */ - -#define X10_DEVICE "/dev/cua0" - +#define DEBUG 1 + char *MyName = "bottlerocket"; /* Default */ void usage() @@ -44,16 +39,18 @@ fprintf(stderr, "Purpose: Control X10 \"FireCracker\" wireless \n"); fprintf(stderr, " home-control interface things. \n"); fprintf(stderr, " \n"); - fprintf(stderr, "Usage: %s <1-16> (on | off) \n", + fprintf(stderr, "Usage: %s [0|1|2|3] <1-16> (on | off) \n", MyName); - fprintf(stderr, " %s (bright | dim) \n", + fprintf(stderr, " %s [0|1|2|3] (bright | dim) \n\n", MyName); - fprintf(stderr, " \n"); + fprintf(stderr, " [0|1|2|3]: optional, sets serial port to ttyS0,1,2,3\n"); + fprintf(stderr, " default is ttyS0 \n\n"); + fprintf(stderr, " \n"); fprintf(stderr, "Examples: %s A1 on \n", MyName); - fprintf(stderr, " %s P8 off \n", + fprintf(stderr, " %s 3 P8 off \n", MyName); - fprintf(stderr, " %s B dim \n", + fprintf(stderr, " %s 2 B dim \n", MyName); } @@ -122,6 +119,19 @@ return group; } +char* get_port(char *arg1, char *arg2) +{ + + if (!strcmp(arg1,arg2)) return "/dev/ttyS0"; + else { + if (!strcmp(arg2,"0")) return "/dev/ttyS0"; + if (!strcmp(arg2,"1")) return "/dev/ttyS1"; + if (!strcmp(arg2,"2")) return "/dev/ttyS2"; + if (!strcmp(arg2,"3")) return "/dev/ttyS3"; + } + return "0"; +} + int main(int argc, char *argv[]) { char device; @@ -129,12 +139,12 @@ int cmd; int fd; unsigned short unit; - + char* X10_DEVICE = "/dev/ttyS0"; /* * Who am I? */ - + if (argc > 0) MyName = argv[0]; @@ -142,23 +152,25 @@ * What am I doing? */ - if ((argc < 3) - || ((cmd = get_cmd(argv[2])) < 0) - || ((device = get_device(argv[1], cmd)) < 0) - || ((group = get_group(argv[1])) < 0) + + if ((argc < 3) + || ((cmd = get_cmd(argv[argc - 1])) < 0) + || ((device = get_device(argv[argc - 2], cmd)) < 0) + || ((group = get_group(argv[argc - 2])) < 0) + || !strcmp((X10_DEVICE = get_port(argv[0], argv[argc - 3])),"0") ) { - usage(); + usage(); exit(0); } - + unit = (unsigned char)((group << 4) | device); /* * Snag the serial port... */ - if ((fd = open(X10_DEVICE, O_RDWR)) < 0) { + if ((fd = open(X10_DEVICE, O_RDWR | O_NONBLOCK)) < 0) { fprintf(stderr, "%s: Error %d opening %s.\n", MyName, errno, X10_DEVICE); perror(MyName);