1. 流程图

  2. 例程
    1. 接收

      1. //UDP回调函数
        void udp_demo_recv(void *arg,struct udp_pcb *upcb,struct pbuf *p,struct ip_addr *addr,u16_t port)
        {struct pbuf *q;u32 i;if(p!=NULL)  //接收到不为空的数据时{memset(udp_demo_recvbuf,0,UDP_DEMO_RX_BUFSIZE);  //数据接收缓冲区清零for(q=p;q!=NULL;q=q->next)  //遍历完整个pbuf链表{memcpy(udp_demo_recvbuf,q->payload,q->len);}   udp_demo_flag|=1<<6;   //标记接收到数据了pbuf_free(p);//释放内存}else{udp_disconnect(upcb); udp_demo_flag &= ~(1<<5);   //标记连接断开}
        } 
    2. 发送
       /********************************************************** 函数名:void udp_ArtNet_SendARTPollReplay(struct udp_pcb *upcb, uint8_t SwoutBuffer[4], uint8_t BindNum)* 描述  :回传设备节点信息* 输入  :无* 输出  :无* 返回  :无 * 调用  :内部调用 **********************************************************/
      void udp_ArtNet_SendARTPollReplay(struct udp_pcb *upcb, uint8_t SwoutBuffer[4], uint8_t BindNum)
      {struct pbuf *ptr;uint8_t id[8];uint8_t ipadd[4];uint8_t shortname[ShortNameLength];uint8_t longname[LongNameLength];uint8_t swin[4] = {0x01, 0x02, 0x03, 0x04};uint8_t swout[4] = {0};uint8_t i;for(i = 0; i < 4; i++ )swout[i] = SwoutBuffer[i];sprintf((char *)id,"Art-Net");memcpy(ArtPollReply.ID, id, sizeof(ArtPollReply.ID));   //写入ID//OpCodeArtPollReply.OpCode = OpPollReply;//写入地址ipadd[0] = lwipdev.ip[0];ipadd[1] = lwipdev.ip[1];ipadd[2] = lwipdev.ip[2];ipadd[3] = lwipdev.ip[3];memcpy(ArtPollReply.IP, ipadd, sizeof(ArtPollReply.IP));//端口号ArtPollReply.Port = DefaultPort;    //6454//软件版本号ArtPollReply.VersionInfoHi = 1;ArtPollReply.VersionInfoLo = 0;//网络开关ArtPollReply.NetSwitch = 0;ArtPollReply.SubSwitch = 0;//厂家OEMArtPollReply.OemHi = 0x55;ArtPollReply.OemLo = 0xaa;//BIOS扩展区ArtPollReply.UbeaVersion = 0;//状态寄存器ArtPollReply.Status = 0xd2;//ESTA制造商代码ArtPollReply.EstaManHi = 0;ArtPollReply.EstaManLo = 0;//空终止短名称,固定为18个字符sprintf((char *)shortname, "Art-Net");memcpy(ArtPollReply.ShortName,shortname,sizeof(shortname));//空终止长名称,固定为64个字符sprintf((char *)longname, "Art-Net SPT 200522 Dream Catcher");memcpy(ArtPollReply.LongName,longname,sizeof(longname));    //节点运行状态或者操作错误的文字报告sprintf((char *)ArtPollReply.NodeReport, "%d DMX output universes active!", 4);//端口输入输出数量,高字节扩展用,目前为零ArtPollReply.NumPortsHi = 0;//低字节端口输入输出数量,0-4,使用PortTypes时,忽略此字段ArtPollReply.NumPortsLo = 4;//通道操作协议 dmx512memset(ArtPollReply.PortTypes, 0xc0, 4);    //节点输入状态memset(ArtPollReply.GoodInput, 0x08, 4);//节点输出状态memset(ArtPollReply.GoodOutput, 0x80, 4);//SWIN、SWOUTmemcpy(ArtPollReply.SwIn, swin, sizeof(swin));memcpy(ArtPollReply.SwOut, swout, sizeof(swout));//视频显示本地数据,己弃用ArtPollReply.SwVideo = 0;//节点输入ArtPollReply.SwMacro = 0;//远程触发输入ArtPollReply.SwRemote = 0;//空字节ArtPollReply.Spare1 = 0;ArtPollReply.Spare2 = 0;ArtPollReply.Spare3 = 0;//设备功能 Art-Net主从设备ArtPollReply.Style = 0;//MAC地址 高字节在前ArtPollReply.Mac[0] = 0x01;ArtPollReply.Mac[1] = 0x02;ArtPollReply.Mac[2] = 0x03;ArtPollReply.Mac[3] = 0x04;ArtPollReply.Mac[4] = 0x05;ArtPollReply.Mac[5] = 0x06;//节点IPmemcpy(ArtPollReply.BindIp, ipadd, sizeof(ArtPollReply.BindIp));ArtPollReply.BindIndex = BindNum;//状态字,端口位数,DHCP配置ArtPollReply.Status2 = 0x08;//保留字// ArtPollReply.Filler[0-25] = 0;    ptr=pbuf_alloc(PBUF_TRANSPORT,sizeof(ArtPollReply),PBUF_POOL); //申请内存if(ptr){pbuf_take(ptr,&ArtPollReply,sizeof(ArtPollReply)); //将tcp_demo_sendbuf中的数据打包进pbuf结构中udp_send(upcb,ptr); //udp发送数据 pbuf_free(ptr);//释放内存}
      } 
  3. 总结
    1. Art-Net属于灯光行业,比较偏门,网上资料相对较少
    2. 希望这系列文档能略微帮助你解决工作上的疑惑;

【2】嵌入式TCP/IP协议——————Art-Net处理流程相关推荐

  1. Network 之五 TCP/IP 协议族、工作流程、常用协议格式

      最近工作需要搞网络相关的内容,由于之前对网络了解比较少,因此开始重点学习一下网络相关的各种知识.博文中的有些内容来自于在学习过程中对于一些互联网上我认为的重点知识的记录,如果侵权请联系删除!    ...

  2. TCP/IP协议三次握手流程

    (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认.   (2)第二次握手:Ser ...

  3. linux中tcp/ip协议实现及嵌入式应用 下载,LINU中TCPIP协议实现及嵌入式应用

    好文网为大家准备了关于LINU中TCPIP协议实现及嵌入式应用范文,好文网里面收集了五十多篇关于好LINU中TCPIP协议实现及嵌入式应用好文,希望可以帮助大家.更多关于LINU中TCPIP协议实现及 ...

  4. 打印服务器协议,基于TCP/IP协议的嵌入式网络打印服务器设计

    摘要: 随着电子技术和计算机网络技术的发展,嵌入式系统在家庭和工业的各个领域都得到了广泛的应用,各种信息家电,网络设备以及工业控制领域都出现了嵌入式系统的身影,其数量已经远远超过了各种通用计算机.但是 ...

  5. uIP tcp/ip协议分析及其在嵌入式系统中的应用

    网络技术的发展使越来越多的工业控制设备将网络接入功能作为其必备的特性之一.同样,嵌入式系统的发展,要求其应用能够支持网络功能,为用户提供一个简易方便的可视化图形界面.当前WEB浏览器已经成为用户的合理 ...

  6. 基于TCP/IP协议的网络摄像头的QT项目

    目录 项目简述: 1.服务器 步骤一:首先搭建一个基本的服务器框架. 1.初始化服务器的函数主体 2.等待连接 步骤二:数据库的使用,本次项目使用的Sqlite3数据库 1.数据库初始化 2.登录时使 ...

  7. TCP/IP协议的编写《转载》

    基于HHARM9-EDU的TCP/IP(UDP)协议的实现 原文网址:http://blog.csdn.net/lhj0503/article/details/3323788 摘 要:嵌入式技术的发展 ...

  8. 一篇文章带你详解 TCP/IP 协议(下)

    前面的第一二三章已在上篇讲解,还没看过的可以先看看:一篇文章带你详解 TCP/IP 协议(上) 本文继续讲解第四章. 四.网络层中的 IP 协议 IP(IPv4.IPv6)相当于 OSI 参考模型中的 ...

  9. TCP/IP协议讲的明明白白

    从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称.具体来说 ...

  10. 二:熟悉 TCP/IP 协议

    一篇文章带你熟悉 TCP/IP 协议(网络协议篇二) 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构 ...

最新文章

  1. Transform组件C#游戏开发快速入门
  2. 元宇宙大潮来袭?业内首个虚拟形象实时互动融合 SDK 来了!
  3. 年轻的程序员怎么快速成为架构师?
  4. 关于Netbeans调试PHP
  5. android的开始时对bug的定位和处理
  6. (6)ASP.NET Core 中使用IHttpClientFactory发出HTTP请求
  7. java程序设计课程简介_《JAVA语言程序设计》课程简介
  8. 如何利用模型对大客户风险评估——信用额度进行推测
  9. 推荐闪电王子和非洲王子鱼
  10. Verilog 序列信号发生器的三种设计思路
  11. 开箱——Amazon Lightsail(远程云桌面)
  12. matlab偏微分图像修复,图像修复 Region filling and object removal by exemplar-based image inpainting matlab实现...
  13. Flutter 官方做了一款游戏,开源的
  14. 记录2015年年初跳槽的经历!
  15. 三方App实现和微信小程序交互
  16. Android视频压缩实现,基于Android系统的H.264视频压缩技术实现
  17. 一周极客热文:Java 8简明教程
  18. 啥是数据思维能力?(一)辩证思维·关联思维·结构思维
  19. heu acm基础训练之1002
  20. ArrayList()和Collections.emptyList()的区别emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方

热门文章

  1. RAR和RAR4和zip那个压缩率最高
  2. 关于jqui datepicker 使用enter选择日期后 点击input 没有打开日期控件问题
  3. 基于Android的虚拟校园移动学习系统
  4. C语言数组指针和指向数组的指针变量—数组名作函数参数.doc
  5. gauscoor软件怎么用_高斯坐标经纬度转换器
  6. 简述冯诺依曼体系结构计算机的工作原理。
  7. (五)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训
  8. java工作流flowable
  9. 信安从业者认证一览【建议收藏】
  10. my ReadBook_dianzishangwuwangzhanshejiyuanli / 29991 / 00906 / dianzishangwu