#include #include #include #include #define BASEPORT 0x378 /* lp1 */ #define SAMPLECNT 200 void resetPort(); int readBit( void ); void printData( void ); void interpretData( void ); unsigned timeData[SAMPLECNT]; char txt[200]; int cnt=0; main() { unsigned int j=0, j2; int x, x2, k; int start; if (ioperm(BASEPORT, 3, 1)) { perror("ioperm"); exit(1); } x2 = x = readBit(); while (1) { start = 0; cnt = 0; do { do { x = readBit(); j++; } while ((x == x2) && (j < 26000)); x2 = x; j2 = j; j = 0; if ((!cnt) && (!start)) start = 1; else { if (j2 < 26000) timeData[cnt++] = j2; } } while ((j2 < 26000) && (cnt < SAMPLECNT)); if (cnt) { // interpretData(); printData(); } } } void interpretData( void ) { int k; int txtCnt = 0; // printf( "n=%d\t", cnt ); for (k=0; k 10000) txt[txtCnt++] = 'E'; else if (timeData[k] > 2000) txt[txtCnt++] = 'S'; else if (timeData[k] > 1000) txt[txtCnt++] = 's'; else if (timeData[k] > 290) txt[txtCnt++] = '1'; else if (timeData[k] > 30) txt[txtCnt++] = '0'; else txt[txtCnt++] = '?'; } txt[txtCnt] = '\0'; if (!strncmp( txt, "Ss00000000000001000101010101010000000000000100010001010101000100010", 67)) printf( "MUTE\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000000000000000001010101010101010", 67)) printf( "1\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010000000000000000010101010101010", 67)) printf( "2\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000100000000000001000101010101010", 67)) printf( "3\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010100000000000000000101010101010", 67)) printf( "4\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000001000000000001010001010101010", 67)) printf( "5\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010001000000000000010001010101010", 67)) printf( "6\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000101000000000001000001010101010", 67)) printf( "7\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010101000000000000000001010101010", 67)) printf( "8\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000000010000000001010100010101010", 67)) printf( "9\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010100010000000000000100010101010", 67)) printf( "0\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010000010100000000010100000101010", 67)) printf( "MODE\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000100000100000001000101000101010", 67)) printf( "Power\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010001010000000000010000010101010", 67)) printf( "Eject\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000101010100000001000000000101010", 67)) printf( "AUDIO\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000101010000000001000000010101010", 67)) printf( "OK\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000001000000010001010001010100010", 67)) printf( "Play\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000000000100000001010101000101010", 67)) printf( "Up\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010001000000010000010001010100010", 67)) printf( "Stop\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010000000100000000010101000101010", 67)) printf( "Down\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010100000100000000000101000101010", 67)) printf( "Right\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000001010000000001010000010101010", 67)) printf( "Left\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000100010100000001000100000101010", 67)) printf( "SETUP\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010100010100000000000100000101010", 67)) printf( "CARD/DVD\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000001000100000001010001000101010", 67)) printf( "TITLE\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010001000100000000010001000101010", 67)) printf( "MENU\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000101000100000001000001000101010", 67)) printf( "RETURN\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000000010100000001010100000101010", 67)) printf( "DISPLAY\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010101000100000000000001000101010", 67)) printf( "VIDEO-OUT\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000100010000000001000100010101010", 67)) printf( "CLR\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010000010000000000010100010101010", 67)) printf( "PROGRAM\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010001010100000000010000000101010", 67)) printf( "SEARCH\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000001010100000001010000000101010", 67)) printf( "ANGLE\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010101010100000000000000000101010", 67)) printf( "SUBTITLE\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000000000000010001010101010100010", 67)) printf( "<<\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010000000000010000010101010100010", 67)) printf( ">>\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000100000000010001000101010100010", 67)) printf( "|<<\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010100000000010000000101010100010", 67)) printf( ">>|\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010100010000010000000100010100010", 67)) printf( "+ (VOLUME)\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010101010000010000000000010100010", 67)) printf( "- (VOLUME)\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010000000100010000010101000100010", 67)) printf( "ZOOM\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000100000100010001000101000100010", 67)) printf( "PAGE+\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010100000100010000000101000100010", 67)) printf( "PAGE-\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000101010000010001000000010100010", 67)) printf( "MARK\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000100010000010001000100010100010", 67)) printf( "A-B\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010000010000010000010100010100010", 67)) printf( "REPEAT\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000000010000010001010100010100010", 67)) printf( "PAUSE/STEP\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000010001010000010000010000010100010", 67)) printf( "SLOWF\n" ); else if (!strncmp( txt, "Ss00000000000001000101010101010000000001010000010001010000010100010", 67)) printf( "SLOWR\n" ); else if (!strncmp( txt, "S10", 3)) printf( "...\n" ); // else if (!strncmp( txt, "Ss00000000000001000101010101010000", 34)) else printf( "%s\n", txt ); fflush( stdout ); } void printData( void ) { int k; printf( "n=%d\n", cnt ); for (k=0; k> 4) & 1); } void resetPort() { outb(0, BASEPORT+0); outb(0, BASEPORT+1); outb(0, BASEPORT+2); } /* EOF*/