📄 test_ttx.c
字号:
return(rc); } if ((rc = pthread_create(&thread,(void *)&attr, (void *)ttx_rw_task,(void *)NULL)) != 0) { printf("Error starting Teletext Receive Task\n"); return(rc); } return(0);}/*----------------------------------------------------------------------------+| ttx_close+----------------------------------------------------------------------------*/static int ttx_close(){ int rc; /*--------------------------------------------------------------------------+ | Stop Teletext processing if active +--------------------------------------------------------------------------*/ if (ttx_started) { if ((rc = ttx_stop()) != 0) { printf("ttx_stop() failed to stop Teletext driver\n"); return(rc); } } /*--------------------------------------------------------------------------+ | Close all Devices +--------------------------------------------------------------------------*/ if (fd_ttx0 != 0) { if ((rc = close(fd_ttx0)) < 0) { printf("Error closing Teletext driver (/dev/ttx0)\n"); return(rc); } fd_ttx0 = 0; } if (fd_xp0 != 0) { if ((rc = close(fd_xp0)) < 0) { printf ("Error closing Demux TTX Filter (/dev/demuxapi0/xp0)\n"); return(rc); } fd_xp0 = 0; } if (fd_pcr0 != 0) { if ((rc = close(fd_pcr0)) < 0) { printf ("Error closing Demux PCR Filter (/dev/demuxapi0/pcr0)\n"); return(rc); } fd_pcr0 = 0; } ttx_inited = 0; return(0);}/*----------------------------------------------------------------------------+| ttx_open+----------------------------------------------------------------------------*/static int ttx_open(){ int rc; int fd_vid; /*--------------------------------------------------------------------------+ | Close any devices still open +--------------------------------------------------------------------------*/ if ((fd_pcr0 != 0) || (fd_xp0 != 0) || (fd_ttx0 != 0)) { ttx_close(); } /*--------------------------------------------------------------------------+ | Open Demux 0 PCR Filter +--------------------------------------------------------------------------*/ if ((fd_pcr0 = open("/dev/demuxapi0", O_RDONLY)) < 0) { printf ("Error opening Demux PCR Filter (/dev/demuxapi0/pcr0)\n"); return(fd_pcr0); } /*--------------------------------------------------------------------------+ | Open Demux 0 Channel Filter +--------------------------------------------------------------------------*/ if ((fd_xp0 = open("/dev/demuxapi0", O_RDONLY)) < 0) { printf ("Error opening Demux TTX Filter (/dev/demuxapi0/xp0)\n"); return(fd_xp0); } /*--------------------------------------------------------------------------+ | Open Video Driver and Set Video Decoder to PAL +--------------------------------------------------------------------------*/ if ((fd_vid = open("/dev/vdec_dev", O_RDWR)) < 0) { printf("Unable to open video driver (/dev/vdec_dev)\n"); printf("Assuming video driver is already opened and set to PAL Mode\n"); } else { if ((rc = ioctl(fd_vid,MPEG_VID_SET_DISPFMT,VID_DISPFMT_PAL)) < 0) { printf("Error setting video display format to PAL\n"); return(rc); } if ((rc = close(fd_vid)) < 0) { printf("Error closing video driver (/dev/vdec_dev)\n"); return(rc); } } /*--------------------------------------------------------------------------+ | Open TTX Driver +--------------------------------------------------------------------------*/ if ((fd_ttx0 = open("/dev/ttx0", O_RDWR)) < 0) { printf ("Error opening Teletext Driver (/dev/ttx0)\n"); return(fd_ttx0); } ttx_inited = 1; ttx_clr_stats(); return(0);}/*----------------------------------------------------------------------------+| ttx_help_menu+----------------------------------------------------------------------------*/static void ttx_help_menu(void){ int n; printf("-Teletext Menu-------------------------"); printf("---------------------------------------\n\r"); for (n=0; mu_ttx_help[n]!=0; n++) { if (n % 2) printf("%-39s\n",mu_ttx_help[n]); else printf("%-39s|", mu_ttx_help[n]); } if (n%2) { printf("\n"); } printf("---------------------------------------"); printf("---------------------------------------\n\r"); return;}/*----------------------------------------------------------------------------+| ttx_test+----------------------------------------------------------------------------*/static int ttx_test(char *cmd){ char parm[80]; int pcrpid, txtpid; int err; /*--------------------------------------------------------------------------+ | t help +--------------------------------------------------------------------------*/ if (strncmp(cmd, "h", 1) ==0 || strncmp(cmd, "help", 4) ==0) { ttx_help_menu(); } /*--------------------------------------------------------------------------+ | t init +--------------------------------------------------------------------------*/ else if (strncmp(cmd, "init", 4)==0) { if ((err = ttx_open()) != 0) { printf("ttx_open() failed. rc=%d\n\r", err); } else { printf("Teletext Driver initialized sucessfully\n"); } } /*--------------------------------------------------------------------------+ | t term +--------------------------------------------------------------------------*/ else if (strncmp(cmd, "term", 4)==0) { if ((err = ttx_close()) != 0) { printf("ttx_close() failed. rc=%d\n\r", err); } else { printf("Teletext Driver terminated sucessfully\n"); } } /*--------------------------------------------------------------------------+ | t start +--------------------------------------------------------------------------*/ else if (strncmp(cmd, "start", 5)==0) { if (sscanf(&cmd[5], "%x %x", &pcrpid, &txtpid) != 2) { printf("Incorrect number of arguments was specified\n\r"); printf("Usage: t start <pcrpid txtpid> ie. t start 0x1ffe 0x240\n"); } else { if ((err = ttx_start(pcrpid,txtpid)) != 0) { printf("ttx_start() failed. rc=%d\n\r", err); } else { printf("Teletext Driver started, PCR PID=0x%04x, TTX PID=0x%04x\n", pcrpid,txtpid); } } } /*--------------------------------------------------------------------------+ | t stop +--------------------------------------------------------------------------*/ else if (strncmp(cmd, "stop", 4)==0) { if ((err = ttx_stop()) != 0) { printf("ttx_stop() failed. rc=%d\n\r", err); } else { printf("Teletext Driver stopped\n"); } } /*--------------------------------------------------------------------------+ | t stat +--------------------------------------------------------------------------*/ else if (strncmp(cmd, "stat", 4)==0) { if (sscanf(&cmd[5], "%s", parm) != 1) { printf("Incorrect number of arguments was specified\n\r"); printf("Usage: t stat <get | clear> ie. t stat clear\n"); } else { if (strcmp(parm, "clear") == 0) { if ((err = ttx_clr_stats()) != 0) { printf("ttx_clr_stats() failed. rc=%d\n\r", err); } else { printf("Teletext statistics cleared\n"); } } else if (strcmp(parm, "get") == 0) { if ((err = ttx_get_stats()) != 0) { printf("ttx_get_stats() failed. rc=%d\n\r", err); } } else { printf("Usage: t stat <get | clear> ie. t stat clear\n"); } } } /*--------------------------------------------------------------------------+ | t quit +--------------------------------------------------------------------------*/ else if (strncmp(cmd, "q", 1) ==0 || strncmp(cmd, "quit", 4) ==0) { ttx_loop = 0; } /*--------------------------------------------------------------------------+ | Unknown Command +--------------------------------------------------------------------------*/ else { printf("Unknown TTX Command\n\r"); return(-1); } return(0);}/*----------------------------------------------------------------------------+| XX XX XX XXXX XX XX| XXX XXX XXXX XX XXX XX| XXXX XXXX XX XX XX XXXX XX| XX XX XX XX XX XX XX XXXX| XX XX XX XXXXXX XX XX XXX| XX XX XX XX XX XX XX| XX XX XX XX XXXX XX XX+----------------------------------------------------------------------------*//*----------------------------------------------------------------------------+| main+----------------------------------------------------------------------------*/int main(){ char inp[40]; /*---------------------------------------------------------------------------+ | Process all Teletext commands +---------------------------------------------------------------------------*/ while(ttx_loop) { printf("TTX Input Command (h=help):"); fflush(0); memset(inp,' ',sizeof(inp)); read(0,inp,sizeof(inp)); printf("\n\r"); /*------------------------------------------------------------------------+ | Teletext Menu +------------------------------------------------------------------------*/ if (inp[0]=='t') { ttx_test(&inp[strspn(&inp[1], " ")]+ 1); } } /*---------------------------------------------------------------------------+ | Close Teletext Device +---------------------------------------------------------------------------*/ ttx_close();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -