⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upnp_tv_ctrlpt.c

📁 Upnp开发包文件
💻 C
📖 第 1 页 / 共 4 页
字号:
    IXML_Document *actionNode = NULL;    int rc = TV_SUCCESS;    int param;    ithread_mutex_lock( &DeviceListMutex );    rc = TvCtrlPointGetDevice( devnum, &devnode );    if( TV_SUCCESS == rc ) {        if( 0 == param_count ) {            actionNode =                UpnpMakeAction( actionname, TvServiceType[service], 0,                                NULL );        } else {            for( param = 0; param < param_count; param++ ) {                if( UpnpAddToAction                    ( &actionNode, actionname, TvServiceType[service],                      param_name[param],                      param_val[param] ) != UPNP_E_SUCCESS ) {                    SampleUtil_Print                        ( "ERROR: TvCtrlPointSendAction: Trying to add action param" );                    //return -1; // TBD - BAD! leaves mutex locked                }            }        }        rc = UpnpSendActionAsync( ctrlpt_handle,                                  devnode->device.TvService[service].                                  ControlURL, TvServiceType[service],                                  NULL, actionNode,                                  TvCtrlPointCallbackEventHandler, NULL );        if( rc != UPNP_E_SUCCESS ) {            SampleUtil_Print( "Error in UpnpSendActionAsync -- %d", rc );            rc = TV_ERROR;        }    }    ithread_mutex_unlock( &DeviceListMutex );    if( actionNode )        ixmlDocument_free( actionNode );    return rc;}/******************************************************************************** * TvCtrlPointSendActionNumericArg * * Description:Send an action with one argument to a device in the global device list. * * Parameters: *   devnum -- The number of the device (order in the list, starting with 1) *   service -- TV_SERVICE_CONTROL or TV_SERVICE_PICTURE *   actionName -- The device action, i.e., "SetChannel" *   paramName -- The name of the parameter that is being passed *   paramValue -- Actual value of the parameter being passed * ********************************************************************************/intTvCtrlPointSendActionNumericArg( int devnum,                                 int service,                                 char *actionName,                                 char *paramName,                                 int paramValue ){    char param_val_a[50];    char *param_val = param_val_a;    sprintf( param_val_a, "%d", paramValue );    return TvCtrlPointSendAction( service, devnum, actionName, &paramName,                                  &param_val, 1 );}intTvCtrlPointSendPowerOn( int devnum ){    return TvCtrlPointSendAction( TV_SERVICE_CONTROL, devnum, "PowerOn",                                  NULL, NULL, 0 );}intTvCtrlPointSendPowerOff( int devnum ){    return TvCtrlPointSendAction( TV_SERVICE_CONTROL, devnum, "PowerOff",                                  NULL, NULL, 0 );}intTvCtrlPointSendSetChannel( int devnum,                           int channel ){    return TvCtrlPointSendActionNumericArg( devnum, TV_SERVICE_CONTROL,                                            "SetChannel", "Channel",                                            channel );}intTvCtrlPointSendSetVolume( int devnum,                          int volume ){    return TvCtrlPointSendActionNumericArg( devnum, TV_SERVICE_CONTROL,                                            "SetVolume", "Volume",                                            volume );}intTvCtrlPointSendSetColor( int devnum,                         int color ){    return TvCtrlPointSendActionNumericArg( devnum, TV_SERVICE_PICTURE,                                            "SetColor", "Color", color );}intTvCtrlPointSendSetTint( int devnum,                        int tint ){    return TvCtrlPointSendActionNumericArg( devnum, TV_SERVICE_PICTURE,                                            "SetTint", "Tint", tint );}intTvCtrlPointSendSetContrast( int devnum,                            int contrast ){    return TvCtrlPointSendActionNumericArg( devnum, TV_SERVICE_PICTURE,                                            "SetContrast", "Contrast",                                            contrast );}intTvCtrlPointSendSetBrightness( int devnum,                              int brightness ){    return TvCtrlPointSendActionNumericArg( devnum, TV_SERVICE_PICTURE,                                            "SetBrightness", "Brightness",                                            brightness );}/******************************************************************************** * TvCtrlPointGetDevice * * Description:  *       Given a list number, returns the pointer to the device *       node at that position in the global device list.  Note *       that this function is not thread safe.  It must be called  *       from a function that has locked the global device list. * * Parameters: *   devnum -- The number of the device (order in the list, *             starting with 1) *   devnode -- The output device node pointer * ********************************************************************************/intTvCtrlPointGetDevice( int devnum,                      struct TvDeviceNode **devnode ){    int count = devnum;    struct TvDeviceNode *tmpdevnode = NULL;    if( count )        tmpdevnode = GlobalDeviceList;    while( --count && tmpdevnode ) {        tmpdevnode = tmpdevnode->next;    }    if( !tmpdevnode ) {        SampleUtil_Print( "Error finding TvDevice number -- %d", devnum );        return TV_ERROR;    }    *devnode = tmpdevnode;    return TV_SUCCESS;}/******************************************************************************** * TvCtrlPointPrintList * * Description:  *       Print the universal device names for each device in the global device list * * Parameters: *   None * ********************************************************************************/intTvCtrlPointPrintList(  ){    struct TvDeviceNode *tmpdevnode;    int i = 0;    ithread_mutex_lock( &DeviceListMutex );    SampleUtil_Print( "TvCtrlPointPrintList:" );    tmpdevnode = GlobalDeviceList;    while( tmpdevnode ) {        SampleUtil_Print( " %3d -- %s", ++i, tmpdevnode->device.UDN );        tmpdevnode = tmpdevnode->next;    }    SampleUtil_Print( "" );    ithread_mutex_unlock( &DeviceListMutex );    return TV_SUCCESS;}/******************************************************************************** * TvCtrlPointPrintDevice * * Description:  *       Print the identifiers and state table for a device from *       the global device list. * * Parameters: *   devnum -- The number of the device (order in the list, *             starting with 1) * ********************************************************************************/intTvCtrlPointPrintDevice( int devnum ){    struct TvDeviceNode *tmpdevnode;    int i = 0,      service,      var;    char spacer[15];    if( devnum <= 0 ) {        SampleUtil_Print            ( "Error in TvCtrlPointPrintDevice: invalid devnum = %d",              devnum );        return TV_ERROR;    }    ithread_mutex_lock( &DeviceListMutex );    SampleUtil_Print( "TvCtrlPointPrintDevice:" );    tmpdevnode = GlobalDeviceList;    while( tmpdevnode ) {        i++;        if( i == devnum )            break;        tmpdevnode = tmpdevnode->next;    }    if( !tmpdevnode ) {        SampleUtil_Print            ( "Error in TvCtrlPointPrintDevice: invalid devnum = %d  --  actual device count = %d",              devnum, i );    } else {        SampleUtil_Print( "  TvDevice -- %d", devnum );        SampleUtil_Print( "    |                  " );        SampleUtil_Print( "    +- UDN        = %s",                          tmpdevnode->device.UDN );        SampleUtil_Print( "    +- DescDocURL     = %s",                          tmpdevnode->device.DescDocURL );        SampleUtil_Print( "    +- FriendlyName   = %s",                          tmpdevnode->device.FriendlyName );        SampleUtil_Print( "    +- PresURL        = %s",                          tmpdevnode->device.PresURL );        SampleUtil_Print( "    +- Adver. TimeOut = %d",                          tmpdevnode->device.AdvrTimeOut );        for( service = 0; service < TV_SERVICE_SERVCOUNT; service++ ) {            if( service < TV_SERVICE_SERVCOUNT - 1 )                sprintf( spacer, "    |    " );            else                sprintf( spacer, "         " );            SampleUtil_Print( "    |                  " );            SampleUtil_Print( "    +- Tv %s Service",                              TvServiceName[service] );            SampleUtil_Print( "%s+- ServiceId       = %s", spacer,                              tmpdevnode->device.TvService[service].                              ServiceId );            SampleUtil_Print( "%s+- ServiceType     = %s", spacer,                              tmpdevnode->device.TvService[service].                              ServiceType );            SampleUtil_Print( "%s+- EventURL        = %s", spacer,                              tmpdevnode->device.TvService[service].                              EventURL );            SampleUtil_Print( "%s+- ControlURL      = %s", spacer,                              tmpdevnode->device.TvService[service].                              ControlURL );            SampleUtil_Print( "%s+- SID             = %s", spacer,                              tmpdevnode->device.TvService[service].SID );            SampleUtil_Print( "%s+- ServiceStateTable", spacer );            for( var = 0; var < TvVarCount[service]; var++ ) {                SampleUtil_Print( "%s     +- %-10s = %s", spacer,                                  TvVarName[service][var],                                  tmpdevnode->device.TvService[service].                                  VariableStrVal[var] );            }        }    }    SampleUtil_Print( "" );    ithread_mutex_unlock( &DeviceListMutex );    return TV_SUCCESS;}/******************************************************************************** * TvCtrlPointAddDevice * * Description:  *       If the device is not already included in the global device list, *       add it.  Otherwise, update its advertisement expiration timeout. * * Parameters: *   DescDoc -- The description document for the device *   location -- The location of the description document URL *   expires -- The expiration time for this advertisement * ********************************************************************************/voidTvCtrlPointAddDevice( IXML_Document * DescDoc,                      char *location,                      int expires ){    char *deviceType = NULL;    char *friendlyName = NULL;    char presURL[200];    char *baseURL = NULL;    char *relURL = NULL;    char *UDN = NULL;    char *serviceId[TV_SERVICE_SERVCOUNT] = { NULL, NULL };    char *eventURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL };    char *controlURL[TV_SERVICE_SERVCOUNT] = { NULL, NULL };    Upnp_SID eventSID[TV_SERVICE_SERVCOUNT];    int TimeOut[TV_SERVICE_SERVCOUNT] =        { default_timeout, default_timeout };    struct TvDeviceNode *deviceNode;    struct TvDeviceNode *tmpdevnode;    int ret = 1;    int found = 0;    int service,      var;    ithread_mutex_lock( &DeviceListMutex );    /*       Read key elements from description document      */    UDN = SampleUtil_GetFirstDocumentItem( DescDoc, "UDN" );    deviceType = SampleUtil_GetFirstDocumentItem( DescDoc, "deviceType" );    friendlyName =        SampleUtil_GetFirstDocumentItem( DescDoc, "friendlyName" );    baseURL = SampleUtil_GetFirstDocumentItem( DescDoc, "URLBase" );    relURL = SampleUtil_GetFirstDocumentItem( DescDoc, "presentationURL" );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -