基于Atinav SDK的UPnP设计

原创 2006年05月22日 16:22:00
 

    1、引言

    UPnP是针对智能家电、无线设备以及各种个人电脑的普遍对等(peer-to-peer)网络连接而设计的一种架构。它主要用来简化家庭或商业网络中智能家电、无线设备以及PC间的网络连接。UPnP 是一个充分利用TCP/IP 和Web 技术的分布式开放型网络体系结构,能够实现异构网络的无缝连接以及网络设备间的控制和数据传输。

    UPnP 不仅仅只是即插即用外设模式的简单扩展。它设计用于支持零配置、“不可见”联网,以及对众多厂商的广泛设备类型的自动发现。这就意味着,一台设备能够动态加入一个网络,获取一个IP 地址,通报其功能,以及了解其它设备的存在和功能。最后,设备能够顺利地自动离线,而不会造成任何不期望的影响。

    2、UPnP技术描述

    (1)UPnP网络的基本组成

    UPnP网络通常由设备(Device)、服务(Service)、控制点(Control Point)三个基础部分组成。

    一个UPnP设备可以看成一个包含服务并嵌套了常规设备的“容器”。设备可以是物理的设备,比如数码相机,也可以是逻辑的设备,比如运行于计算机上的软件模拟设备。即UPnP之下的设备不能仅仅理解为硬件意义上的设备,而应当包括服务功能。另外,设备也可以包括其他子设备形成嵌套。一个设备由用XML写的设备描述文档来表示,其内容包括一个或多个服务和设备的属性(如设备名、设备图标)。

    设备执行用户请求的控制过程,可划分成一个个很小的阶段或单位,每个单位就称为一个服务。每一个服务,对外都表现为具体的行为和模式,而行为和模式又可以用状态和变量值进行描述。同设备描述一样,服务也是用XML写的服务描述文档来表示的。

    在UPnP网络中,用户请求设备执行的控制是通过控制点实现的,控制点首先是一个有能力控制别的设备的控制者,还要具有在网络中“发现”控制目标的能力。它能在发现设备后:取得设备的描述信息并得到所关联的服务列表;取得相关服务的描述;调用控制服务。

    (2)UPnP协议栈

    UPnP采用了许多现存的、标准的协议以获得最广泛的设备支持。采用IP协议来保证UPnP独立于网络传输的物理介质,SOAP协议来保证UPnP设备具有互操作能力,XML来对设备和服务进行统一的描述,HTTP协议来进行UPnP设备的信息交互。采用这些协议能减少开发UPnP设备的工作量,使UPnP设备更好地融入现有网络。UPnP协议如图1所示。

 

     其中UPnP设备架构定义是一个抽象的、公用的设备模型,任何UPnP设备都必须使用这一层。UPnP论坛工作组定义包含不同类型设备的DCP(Device Control Protocol)。最上层的UPnP厂商定义一般包含设备名称序列号、厂商信息,以及用户接口等。

    (3)UPnP工作机制

    控制点和设备间的交互分为六个阶段:寻址,发现,描述,控制,事件触发和展示。

    寻址:每个UPnP设备都有一个DHCP(动态主机配置协议)的客户端。当设备连到网络中后,它会搜寻DHCP服务器,并请求一个IP地址。如果没有DHCP服务器的响应,设备就会使用自动IP获得一个地址。

    发现:设备连到网络中后,会用简单服务发现协议(SSDP)向所有的控制点广告它拥有的服务。控制点也可以使用SSDP在网络中搜寻它感兴趣的设备及服务。在这两种情况中,最基本的交换信息是设备或者它的某种服务的特征:设备的类型,独有的标识符以及指向更多详细信息的指针。

    描述: 在控制点发现设备之后,它通过包含在发现消息里的统一资源定位器(URL)向设备请求UPnP 描述。其中包括设备描述,一个或多个服务描述。设备描述包含有关厂商、制造商的信息,比如模块名称和编号,序列号,制造商的名称,厂商的专门网站URL等。在设备描述中,会一一列出它包含的每一种服务的类型、名称和指向服务描述、控制和事件触发的URLs。服务描述包含服务所响应的命令或动作,以及一系列状态变量。这些变量将服务在运行时的状态模型化,并通过数据类型、数值范围和事件特征进行描述。

    控制:在得到设备及其服务的有关信息后,控制点就可以向这些服务发出动作请求。同时控制点也可以轮询服务的状态变量值。这是一种远程的过程调用:控制点把动作请求发送给设备的相关服务,当这些动作被完成之后(或失败),服务向控制点返回结果(或报告失败)。

    事件触发:一个UPnP的服务描述包括服务所响应的动作列表,和状态的变量表。当这些变量改变时,服务会用事件消息的方式公布这些更新。控制点也可以订阅这些信息。如果订阅被接受,设备会返回一个唯一的标识符和订阅的有效时间。当一个事件状态变量改变时,服务会发送事件消息通知所有订阅的控制点。这些消息也就是GENA 通知消息,使用HTTP协议传送。在消息内部包含一个或多个状态变量的名称和它们的当前值。

    展示:设备除了通过控制和事件触发提供功能接口外,还能提供一个展示URL作为网络接口(可以使用标准的网络浏览器进行处理)。如果在设备描述里有这样的统一资源定位器(URL),控制点就可以使用一个HTTP GET请求,从这一URL找到一个HTML网页,并把它下载到浏览器中,使用户可以控制设备并查看设备的状态。

    3、基于Atinav SDK的UPnP设计

    3.1  Atinav SDK介绍

    Atinav SDK是美国atinav公司为UPnP架构开发的基于C的软件开发包。该SDK实现了UPnP架构,并提供设备和控制点开发工具。由于其代码全部由ASIC C生成,所以具有较好的可移植性。

    3.2  设计流程

    我们以一个电视机的模拟程序来演示基于Atinav SDK的设计流程。

    首先,要设计电视机模拟程序所能提供的服务、动作、状态变量以及输入参数。如果要在电视机中嵌入子设备,还要考虑子设备提供的服务、动作、状态变量和输入参数。在我们的设计中,tv设备提供tvcontrol, video, audio, selectChannel, selectBand服务,tv的子设备timer具有clock服务。Tv和timer的状态变量设计为:

    Power, brightness, contrast, volume, channel, band, mode, time。参数列表:

    Hour, minute, second, selectedChannel, desiredBand, desiredMode动作列表:powerOn,powerOff,incrBrightness, decrBrightness, incrContrast, decrContrast, incrVolume, decrVolume, 
setTime, incrChannel, decrChannel, setChannel, setBand, setMode 。
在VC环境下建立一个工作区,并添加Atinav SDK中的aveupnp.h,aveupnp1.lib和aveupnp1.dll文件。这三个文件是实现UPnP的关键。用户可以利用SDK的模型编写自己的UPnP设备。然后,建立用户的C文件。在该文件中,用户要设计动作函数,以及设备实现主函数。下面,我们会详细介绍用户C文件的实现。

    (1)  在C文件中加入freeAllocated(),GetStateVarValue(),GetArgumentValue()函数,分别用来释放分配的内存,获得状态变量值以及得到参数值(SDK提供,可以直接引用)。           

    (2)  调用SDK中的GetStateVarValue(),UpnpChangeStateVariableValueExt()函数,编写控制函数。要考虑返回信息和出错提示。

    (3)  在主程序中,为设备、服务、动作和参数声明句柄变量。

    (4) 分步做以下工作: 调用UpnpNewStateVariable()函数创建状态变量,并用UpnpSetStateVariableDefValue()函数设置其默认值;调用UpnpNewAction()函数创建动作;调用UpnpNewArgument()函数创建参数(输入参数对应于特定的动作,比如参数hour,minute,second对应于动作SetTime)。利用UpnpNewService()函数创建服务。若服务有多个状态变量,可用UpnpAddStateVariable()为其添加状态变量。调用UpnpNewDevice()创建动作。同时会为设备设置各种参数。调用UpnpAddArgument()函数为相关动作添加参数。调用UpnpAddAction()为服务添加相应的动作。调用UpnpSetUDN()函数为设备设置UUID。主设备和子设备都要设置。调用UpnpAddDevice()函数来设置设备间的嵌套关系(UpnpAddDevice(tv,timer); 设置timer为tv的子设备)。 编写用户接口。(本程序是在PC机上运行的,运行后要求输入IP地址。)并调用UpnpInitializeFramework()函数初始化UPnP架构(SDK提供)。若初始化成功,则将根设备注册到UPnP架构中。然后用UpnpGetDescriptionURL()函数获得设备的描述URL,并显示出来。同时给出退出提示符,并进入无限循环,若没有输入退出命令符,就一直运行。

    4、设备运行界面及控制方法

    设备运行后,可以有多种方法对其进行控制或查看其状态。可以利用Atinav SDK创建一个控制点程序,专门用来对设备进行控制。由于设备程序在运行时会给出设备描述URL,我们据此可以找到设备的展示页面,该页面由SDK根据用户的程序自动生成。通过展示页面,用户可以对设备进行控制和变量查询。另外一种方法跟第二种类似,但只适用于Windows XP用户。由于在Windows XP中加入了对UPnP的支持,如果用户安装了UPnP服务,就可以在网上邻居中显示网络中存在的UPnP设备,并可直接调用设备的展示页面。图2和图3分别是我们的实例的运行页面和设备展示页面。

    我们在一台PC上运行实例程序后,分别选择了局域网中的两台PC(A和B)测试对设备的控制。其中,A装的是Win2000,B为Windows XP。在A的浏览器中直接输入设备展示页面的URL;在B中安装UPnP服务,通过网上邻居中显示的设备图标直接调用设备的展示页面,同样可以对设备进行控制。但由于笔者所用的SDK版本并不支持UPnP的订阅,所有不能实现事件触发功能。

 

 

Platinum UPnP SDK(xbmc) DLNA

2013-06-07 09:17:26| 分类: xbmc |举报 |字号 订阅Platinum UPnP SDK 是一个跨平台的C++库,利用该库,你可以很容易就构建出DLNA/UPnP控制点(DL...
  • mirkerson
  • mirkerson
  • 2014年05月19日 10:56
  • 4173

dlna(Upnp媒体服务器)开发

随着移动互联网潮流,多设备互动逐渐走入人们生活。比如,手机QQ和PC之间的文件共享,手机可以观看PC上的视频,智能路由器等。而相关的尝试在很久以前就开始了,比如Upnp和dlna。dlna是一堆业界大...
  • baihacker
  • baihacker
  • 2014年07月09日 18:27
  • 6724

Upnp指令

UPnP是DLNA里面比较重要的一块,相对也是复杂的一块,大致过了一些协议,发觉确实还是比较复杂,什么SSDP,GENA,HTTPMU,都是很新的东西。相关的协议也没有比较好的中文版,索性装了几个相关...
  • RationalGo
  • RationalGo
  • 2013年06月06日 16:26
  • 1432

关于UPNP开发的基础实现步骤

编写一个Upnp设备   使用UPnP设备开发的SDK实现一个UPnP设备有很多方法,然而,任何实现都必须完成一 些基本步骤。 确切来说,一个应用程序必须:      1、使用以下基本步骤安装...
  • b_xjie
  • b_xjie
  • 2014年01月08日 14:40
  • 1904

DLAN(UPNP)主流开源库的官网及SDK下载地址

DLAN(UPNP)主流开源库的官网及SDK下载地址
  • rhui1982
  • rhui1982
  • 2016年03月04日 15:12
  • 354

JavaScript SDK 设计指南

Introduction This guide gives you an introduction to developing a JavaScript SDK on desktop and mob...
  • hel613
  • hel613
  • 2016年06月26日 15:33
  • 3870

UPNP sdk中ContentDirectory service中Browse方法解析

原文在:http://4895268.blog.51cto.com/4885268/1048617 Browse 方法是 ContentDirectory  Service中的常用方法,它的主要...
  • RationalGo
  • RationalGo
  • 2013年06月21日 00:23
  • 1254

miniupnp映射本地端口到外网

miniupnpc的主要函数介绍 1.miniupnpc库主要使用的头文件有 #include"miniwget.h" #include"miniupnpc.h" #include...
  • htjx99
  • htjx99
  • 2014年07月10日 10:19
  • 2872

UPnP原理简介

UPnP是通用即插即用(Universal Plug and Play)的缩写,主要用于智能设备之间的互通互联。使用Upnp协议不需要任何驱动,可以运行在各种操作系统上。在家庭和办公场所等可以连接局...
  • hjx5200
  • hjx5200
  • 2014年03月21日 16:02
  • 3797

UPnP基本原理介绍

随着计算机产业以及计算机网络技术的迅猛发展,越来越多嵌入式设备的出现和家庭网络的发展,实现各种设备的互联互通已经成为人们的迫切需求,而实现家庭网络互联互通的关键是家庭网络的中间件技术。业界各大厂商都提...
  • braddoris
  • braddoris
  • 2014年11月28日 11:26
  • 10636
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Atinav SDK的UPnP设计
举报原因:
原因补充:

(最多只允许输入30个字)