LiteOS组件尝鲜-玩转Upnp

举报
Lionlace 发表于 2021/08/04 10:38:30 2021/08/04
【摘要】 LiteOS组件尝鲜系列话题又更新啦!本期小编带大家认识Upnp的协议特点及工作流程,以供大家参考及学习交流。UPnP介绍UPnP(Universal Plug and Play)是通用即插即用的缩写,是用于设备之间智能互联互通的通讯协议。UPnP技术是一种架构在TCP/IP和HTTP之上的分布式、开放的网络结构,可以实现已联网设备之间命令及数据的传递。UPnP协议可以在大部分操作系统平台上...

LiteOS组件尝鲜系列话题又更新啦!本期小编带大家认识Upnp的协议特点及工作流程,以供大家参考及学习交流。

UPnP介绍

UPnP(Universal Plug and Play)是通用即插即用的缩写,是用于设备之间智能互联互通的通讯协议。UPnP技术是一种架构在TCP/IP和HTTP之上的分布式、开放的网络结构,可以实现已联网设备之间命令及数据的传递。UPnP协议可以在大部分操作系统平台上运行,使用UPnP协议时不需要添加设备驱动程序,可以方便地在办公室、家庭或其他公共场所实现设备之间的互联互通。

UPnP协议栈

UPnP协议定义了设备之间、设备和控制点之间以及控制点之间的通讯协议。UPnP协议栈如下图所示:

图片3.png

( Protocol stack )

UPnP协议结构最底层是TCP/IP协议,它是UPnP协议结构的基础。IP层用于数据的收发。UPnP协议的底层可以是以太网、WIFI、IEEE1394等,只需支持IP协议即可。
在TCP/IP协议之上的是HTTP协议及其变种,这部分是UPnP协议的核心,所有UPnP消息都是被封装在HTTP协议及其变种当中。HTTP协议的变种是HTTPU和HTTPMU,他们的协议格式继承了HTTP协议,但与HTTP协议不同的是HTTP协议的变种是通过UDP来承载的而非TCP,并且可用于组播进行通信。


工作流程

寻址(Addressing)

设备和控制点获取一个网络地址

发现(Discovery)

控制点发现网络中感兴趣的设

描述(Description)

控制点获取网络中设备的功能描述

控制(Control)

控制点发送设备操控命令,控制设备

事件(Eventing)

控制点监听设备状态的改变

展示(Presentation)

控制点展示设备用户界面


示例介绍

此案例完成了UPnP SDK初始化、注册一个client设备并完成一次搜索。该DemoSTM32F769IDISCOVERY开发板上编译运行的流程如下:

编译

  • 在LiteOS源码根目录下拷贝开发板的默认配置文件tools/build/config/STM32F769IDISCOVERY.config到根目录,并重命名为.config,命令如下:

~/Huawei_LiteOS$ cp tools/build/config/STM32F769IDISCOVERY.config .config
  • 继续在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能UPnP Demo。因为UPnP依赖lwIP,而且LiteOS目前只支持UPnP使用Ipv4,不支持Ipv6,所以还需要同时使能lwIP并设置为Ipv4模式。

Components  --->
     Network  --->
         [*] Enable DHCP
         [*] Enable Lwip  --->
                     Enable Ipv4 Or Ipv6 (Enable Ipv4)  --->
                         [*] Enable Ipv4
 Demos  --->
     Media Demo  --->
             [*] Enable UPnP Demo

使能UPnP Demo后,LiteOS会自动使能UPnP组件。保存退出menuconfig后,LiteOS会从github上自动下载UPnP的源代码,并从gitee的LiteOS组件仓库LiteOS_Components下载对应的patch包,并打入patch。关于自动下载的详细流程,请查阅components/download.sh脚本。

运行

  • 准备一台PC, Linux或Windows,确保已安装并打开wireshark抓包工具。

  • 将PC与开发板通过以太网连接。

  • 将开发版串口和PC连接并打开串口监视软件。

  • 使能UPnP Demo后,在LiteOS源码根目录下执行make clean ; make -j命令编译LiteOS工程,编译成功后将在out/STM32F769IDISCOVERY/lib目录下生成组件静态库文件libupnp.a及Demo静态库文件libupnp_demo.a,系统镜像文件为Huawei_LiteOS.bin。

  • 烧录系统镜像文件,复位开发板。

开发板启动后,可以在串口上看到如下输出结果:
********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.1.0
build data : Jul 28 2021 16:24:26
**********************************
osAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
lwip_init OK!!
dhcp start...
Huawei LiteOS # 
Upnp demo task start to run.
Upnp demo task finished.

显示Upnp demo task finished.表示UPnP控制点已经注册成功并完成了一次搜索请求,通过wireshark抓包工具可监测到多播M-SEARCH SSDP(Simple Service Discovery Protocol)消息,广播地址为239.255.255.250,如下图:

44.jpg

结语

以上就是UPnP运行的全部过程啦,如果想更深入地学习UPnP运行机制,请参考UPnP的源码路径:LiteOS/components/media/upnp/libupnp-1.6.22

感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步:  https://gitee.com/LiteOS/LiteOS/issues

为了更容易找到“LiteOS”代码仓,建议访问https://gitee.com/LiteOS/LiteOS,关注“ Watch”、点赞“Star”、并“Fork”到自己账号下,如下图。

图片

-end-

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。