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 + -
显示快捷键?