SmartOS之-----以太网精简协议栈TinyIP

作用


做物联网,没有以太网怎么能行!
基于Enc28j60,我们团队独立实现了以太网精简协议栈TinyIP,目前支持ARP/ICMP/TCP/UDP/DHCP,还缺一个DNS就完整了。
TinyIP内置一个数据缓冲区,Enc28j60收到数据以后,放入缓冲区,然后TinyIP内部开始根据Ethernet/ARP/IP/ICMP/TCP/UDP/DHCP头部结构体对数据进行拆分和重组,执行业务逻辑。
TinyIP百分百是我们团队独立完成,没有抄袭那怕参考任何一款已有以太网协议(例如uip/lwip),各种协议结构作为国际标准是公开的,我们只需要按照协议去实现即可。
鄙视那些自己做不到就说别人抄袭的人!

 

代码


 

 1 #include "Sys.h"

 2 #include "Enc28j60.h"

 3 #include "SerialPort.h"

 4 #include "TinyIP/TinyIP.h"

 5 #include "conf.h"

 6 

 7 Spi* spi;

 8 Enc28j60* enc;

 9 TinyIP* tip;

10 

11 void OnPing(TinyIP* tip, ICMP_HEADER* icmp, byte* buf, uint len)

12 {

13     debug_printf("Ping From ");

14     TinyIP::ShowIP(tip->RemoteIP);

15     debug_printf(" with Payload=%d\r\n", len);

16 }

17 

18 void OnUdpReceived(TinyIP* tip, UDP_HEADER* udp, byte* buf, uint len)

19 {

20     debug_printf("Udp From ");

21     TinyIP::ShowIP(tip->RemoteIP);

22     debug_printf(":%d with Payload=%d  ", tip->RemotePort, len);

23     TinyIP::ShowData(buf, len);

24     debug_printf(" \r\n");

25 }

26 

27 void OnTcpAccepted(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len)

28 {

29     debug_printf("TcpAccepted From ");

30     TinyIP::ShowIP(tip->RemoteIP);

31     debug_printf(":%d with Payload=%d\r\n", tip->RemotePort, len);

32 }

33 

34 void OnTcpDisconnected(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len)

35 {

36     debug_printf("TcpDisconnected From ");

37     TinyIP::ShowIP(tip->RemoteIP);

38     debug_printf(":%d with Payload=%d\r\n", tip->RemotePort, len);

39 }

40 

41 void OnTcpReceived(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len)

42 {

43     debug_printf("TcpReceived From ");

44     TinyIP::ShowIP(tip->RemoteIP);

45     debug_printf(":%d with Payload=%d  ", tip->RemotePort, len);

46     TinyIP::ShowData(buf, len);

47     debug_printf(" \r\n");

48 }

49 

50 void TestEthernet()

51 {

52     debug_printf("\r\n\r\n");

53     debug_printf("TestEthernet Start......\r\n");

54 

55     spi = new Spi(SPI_3);

56     enc = new Enc28j60(spi);

57 

58     tip = new TinyIP(enc);

59     tip->UseDHCP = true;

60     tip->Init();

61     

62     tip->OnPing = OnPing;

63     tip->OnUdpReceived = OnUdpReceived;

64     tip->OnTcpAccepted = OnTcpAccepted;

65     tip->OnTcpDisconnected = OnTcpDisconnected;

66     tip->OnTcpReceived = OnTcpReceived;

67 

68     debug_printf("\r\n TestEthernet Finish!\r\n");

69 }

 

讲解


 

芯片GD32F103VK/GD32F103VE/STM32F103VE
TinyIP类内部根据系统ID生成随机的MAC地址和初始IP地址192.168.0.x,IP最后一字节就是系统ID第一字节。
开启DHCP后,将会自动获取IP地址。
必须实现ARP协议,否则别人找不到你这个IP所对应的MAC,进而无法通信。
支持Ping/TCP/UDP多种必要事件挂载。

以太网所有功能全开,RTM下固件ROM大概9k。

End!

    ------来自新生命团队!

 

欢迎大家一起交流 ,分享程序员励志故事。   幸福的程序员 QQ群:幸福的程序员 嵌入式交流群中国嵌入式物联网群

你可能感兴趣的:(OS)