upnp_tv_combo_main.c
来自「原来由英特尔制定的UPnP SDK的」· C语言 代码 · 共 492 行 · 第 1/2 页
C
492 行
} return NULL;}intTvCtrlPointProcessCommand( char *cmdline ){ char cmd[100]; char strarg[100]; int arg_val_err = -99999; int arg1 = arg_val_err; int arg2 = arg_val_err; int cmdnum = -1; int numofcmds = sizeof( cmdloop_cmdlist ) / sizeof( cmdloop_commands ); int cmdfound = 0; int i, rc; int invalidargs = 0; int validargs; validargs = sscanf( cmdline, "%s %d %d", cmd, &arg1, &arg2 ); for( i = 0; i < numofcmds; i++ ) { if( strcasecmp( cmd, cmdloop_cmdlist[i].str ) == 0 ) { cmdnum = cmdloop_cmdlist[i].cmdnum; cmdfound++; if( validargs != cmdloop_cmdlist[i].numargs ) invalidargs++; break; } } if( !cmdfound ) { SampleUtil_Print( "Command not found; try 'Help'" ); return TV_SUCCESS; } if( invalidargs ) { SampleUtil_Print( "Invalid arguments; try 'Help'" ); return TV_SUCCESS; } switch ( cmdnum ) { case PRTHELP: TvCtrlPointPrintShortHelp(); break; case PRTFULLHELP: TvCtrlPointPrintLongHelp(); break; case POWON: TvCtrlPointSendPowerOn( arg1 ); break; case POWOFF: TvCtrlPointSendPowerOff( arg1 ); break; case SETCHAN: TvCtrlPointSendSetChannel( arg1, arg2 ); break; case SETVOL: TvCtrlPointSendSetVolume( arg1, arg2 ); break; case SETCOL: TvCtrlPointSendSetColor( arg1, arg2 ); break; case SETTINT: TvCtrlPointSendSetTint( arg1, arg2 ); break; case SETCONT: TvCtrlPointSendSetContrast( arg1, arg2 ); break; case SETBRT: TvCtrlPointSendSetBrightness( arg1, arg2 ); break; case CTRLACTION: /* re-parse commandline since second arg is string */ validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg ); if( 3 == validargs ) TvCtrlPointSendAction( TV_SERVICE_CONTROL, arg1, strarg, NULL, NULL, 0 ); else invalidargs++; break; case PICTACTION: /* re-parse commandline since second arg is string */ validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg ); if( 3 == validargs ) TvCtrlPointSendAction( TV_SERVICE_PICTURE, arg1, strarg, NULL, NULL, 0 ); else invalidargs++; break; case CTRLGETVAR: /* re-parse commandline since second arg is string */ validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg ); if( 3 == validargs ) TvCtrlPointGetVar( TV_SERVICE_CONTROL, arg1, strarg ); else invalidargs++; break; case PICTGETVAR: /* re-parse commandline since second arg is string */ validargs = sscanf( cmdline, "%s %d %s", cmd, &arg1, strarg ); if( 3 == validargs ) TvCtrlPointGetVar( TV_SERVICE_PICTURE, arg1, strarg ); else invalidargs++; break; case PRTDEV: TvCtrlPointPrintDevice( arg1 ); break; case LSTDEV: TvCtrlPointPrintList(); break; case REFRESH: TvCtrlPointRefresh(); break; case EXITCMD: rc = TvCtrlPointStop(); exit( rc ); break; default: SampleUtil_Print( "Command not implemented; see 'Help'" ); break; } if( invalidargs ) SampleUtil_Print( "Invalid args in command; see 'Help'" ); return TV_SUCCESS;}intdevice_main( int argc, char **argv ){ unsigned int portTemp = 0; char *ip_address = NULL, *desc_doc_name = NULL, *web_dir_path = NULL; unsigned int port = 0; int i = 0; SampleUtil_Initialize( linux_print ); // Parse options for( i = 1; i < argc; i++ ) { if( strcmp( argv[i], "-ip" ) == 0 ) { ip_address = argv[++i]; } else if( strcmp( argv[i], "-port" ) == 0 ) { sscanf( argv[++i], "%u", &portTemp ); } else if( strcmp( argv[i], "-desc" ) == 0 ) { desc_doc_name = argv[++i]; } else if( strcmp( argv[i], "-webdir" ) == 0 ) { web_dir_path = argv[++i]; } else if( strcmp( argv[i], "-help" ) == 0 ) { SampleUtil_Print( "Usage: %s -ip ipaddress -port port" " -desc desc_doc_name -webdir web_dir_path" " -help (this message)\n", argv[0] ); SampleUtil_Print( "\tipaddress: IP address of the device" " (must match desc. doc)\n" ); SampleUtil_Print( "\t\te.g.: 192.168.0.4\n" ); SampleUtil_Print( "\tport: Port number to use for " "receiving UPnP messages (must match desc. doc)\n" ); SampleUtil_Print( "\t\te.g.: 5431\n" ); SampleUtil_Print ( "\tdesc_doc_name: name of device description document\n" ); SampleUtil_Print( "\t\te.g.: tvcombodesc.xml\n" ); SampleUtil_Print ( "\tweb_dir_path: Filesystem path where web files " "related to the device are stored\n" ); SampleUtil_Print( "\t\te.g.: /upnp/sample/web\n" ); return 1; } } port = ( unsigned short )portTemp; return TvDeviceStart( ip_address, port, desc_doc_name, web_dir_path, linux_print );}int main( int argc, char **argv ){ int rc; ithread_t cmdloop_thread;#ifndef WIN32 int sig; sigset_t sigs_to_catch;#endif int code; device_main(argc, argv); rc = TvCtrlPointStart( linux_print, NULL ); if( rc != TV_SUCCESS ) { SampleUtil_Print( "Error starting UPnP TV Control Point" ); return rc; } /* start a command loop thread */ code = ithread_create( &cmdloop_thread, NULL, TvCtrlPointCommandLoop, NULL );#ifndef WIN32 /* Catch Ctrl-C and properly shutdown */ sigemptyset( &sigs_to_catch ); sigaddset( &sigs_to_catch, SIGINT ); sigwait( &sigs_to_catch, &sig ); SampleUtil_Print( "Shutting down on signal %d...\n", sig );#else ithread_join(cmdloop_thread, NULL);#endif TvDeviceStop(); rc = TvCtrlPointStop(); return rc;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?