/* Linux FRS Radio Control */ /* http://www.gbppr.org */ /* */ /* Compile using: gcc -O2 frs_control.c -o frs_control */ #include #include #include #include #include #define BASE_ADDRESS 0x378 /* 0x378 is 1st parallel port */ /* 0x278 is 2nd parallel port */ int c; extern int errno; /* pin 432 on the parallel port */ unsigned char data_0 = 0; /* Send 00000000b */ unsigned char data_1 = 1; /* Send 00000001b */ unsigned char data_2 = 2; /* Send 00000010b */ unsigned char data_4 = 4; /* Send 00000100b */ void usage (char *); int txtime, verbose; int main (int argc, char **argv) { if (geteuid () && getuid ()) { fprintf (stderr, "\n\n%s must be run as root to access hardware ports.\n", argv[0]); fprintf (stderr, "Leaving...\n\n"); exit (1); } if (argc < 2) { usage (argv[0]); } while ((c = getopt (argc, argv, "t:rum")) != EOF) { switch (c) { case 't': txtime = atoi(optarg); TX (); exit (0); case 'r': RESET (); exit (0); case 'u': UP (); exit (0); case 'm': MODE (); exit (); default: usage (argv[0]); } } return (0); } int TX (void) { porttest (); outb (data_1, BASE_ADDRESS); sleep (txtime); outb (data_0, BASE_ADDRESS); usleep (200000); ioperm (BASE_ADDRESS, 3, 0); return (0); } int RESET (void) { porttest (); outb (data_0, BASE_ADDRESS); printf ("Parallel Port Reset: 0x%x hex\t(%d decimal)\n", BASE_ADDRESS, BASE_ADDRESS); printf ("Sending '00000000' ...\n"); usleep (200000); ioperm (BASE_ADDRESS, 3, 0); return (0); } int UP (void) { porttest (); outb (data_2, BASE_ADDRESS); usleep (500000); outb (data_0, BASE_ADDRESS); usleep (200000); ioperm (BASE_ADDRESS, 3, 0); return (0); } int MODE (void) { porttest (); outb (data_4, BASE_ADDRESS); usleep (500000); outb (data_0, BASE_ADDRESS); usleep (200000); ioperm (BASE_ADDRESS, 3, 0); return (0); } int porttest (void) { if (ioperm (BASE_ADDRESS, 3, 1) < 0) { fprintf (stderr, "\nERROR: Can not open port 0x%x\n\n", BASE_ADDRESS); perror ("port"); exit (errno); } usleep (200000); return (0); } void usage (char *pname) { fprintf (stderr, "\n\nUsage: %s\n\n", pname); fprintf (stderr, "\t-t x\tEnable Transmit for 'x' seconds\n"); fprintf (stderr, "\t-r\tParallel port reset\n"); fprintf (stderr, "\t-u\tEnable Up Arrow\n"); fprintf (stderr, "\t-m\tEnable Mode Function\n"); exit (1); }