<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://ez.analog.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Q&amp;amp;A - Recent Threads</title><link>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><lastBuildDate>Thu, 06 Aug 2026 10:09:03 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a" /><item><title>On ADIN6310 with HSR Redbox configuration - when mac addresses are exchanged between interlink ports - they cannot communicate.</title><link>https://ez.analog.com/thread/605551?ContentTypeID=0</link><pubDate>Thu, 06 Aug 2026 10:09:03 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:bd33dd8b-4fab-4e34-8872-66d7af2a9cce</guid><dc:creator>mdejw</dc:creator><slash:comments>0</slash:comments><comments>https://ez.analog.com/thread/605551?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/605551/on-adin6310-with-hsr-redbox-configuration---when-mac-addresses-are-exchanged-between-interlink-ports---they-cannot-communicate/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;EVAL-ADIN6310EBZ, I configure as follows:&lt;/p&gt;
&lt;p&gt;```&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;---------------- HSR status ----------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;type=HSR, end-node=HSR RedBox SAN, device=RedBox, HSR mode=mode H&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;ports: A=2 (active, up), B=3 (active, up), C=0; interlinks=1,4,5,-1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;LRE MAC=02:00:00:2a:0d:33, supervision: A VID=4095 PCP=0, B VID=4095 PCP=0, evaluate=yes, duplicate-time=625&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;forwarding=store-and-forward&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;reserved HSR VLAN=4094&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;HSR counters: TX A=100 B=100 C=37; RX A=90 B=90 C=58&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;errors: A=0 B=0 C=0; wrong-LAN A=0 B=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;duplicates: unique A=0 B=0; duplicate A=0 B=0; multi A=0 B=0; own RX A=0 B=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;nodes: 1, proxy nodes: 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;HSR node table:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; node[1] MAC=02:00:00:cf:c8:42, type=HSR RedBox, last-seen A=15414 B=15414, read-ts=15566&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;HSR proxy-node table:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[0] MAC=00:e0:4c:38:7d:93&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[1] MAC=4c:d7:17:68:b6:9f&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[2] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[3] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[4] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[5] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[6] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[7] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;-------------- end HSR status --------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;As shown, I have connect two Ethernet devices to two interlink ports on one EVAL board (nodes visible in `&lt;span style="font-family:courier new, courier;"&gt;proxy-node table&lt;/span&gt; `). they are connected to ports 4,5. I try arping between them - and I see communication.&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new, courier;"&gt;marcda@marcda-lol:~/PRACA/Q3/Q3-SW-DIAG/repo/zephyr-fw/boards/q3-sw-diag-sim$ arping -b 192.168.44.55&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;ARPING 192.168.44.55 from 192.168.44.44 enx00e04c387d93&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast request from 192.168.44.55 [4C:D7:17:68:B6:9F] 215.684ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast request from 192.168.44.55 [4C:D7:17:68:B6:9F] 215.528ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast request from 192.168.44.55 [4C:D7:17:68:B6:9F] 215.637ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast request from 192.168.44.55 [4C:D7:17:68:B6:9F] 215.622ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast request from 192.168.44.55 [4C:D7:17:68:B6:9F] 215.636ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast request from 192.168.44.55 [4C:D7:17:68:B6:9F] 215.530ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast request from 192.168.44.55 [4C:D7:17:68:B6:9F] 215.613ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;^CSent 7 probes (7 broadcast(s))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Received 7 response(s) (7 request(s))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;marcda@marcda-lol:~/PRACA/Q3/Q3-SW-DIAG/repo/zephyr-fw/boards/q3-sw-diag-sim$ ping 192.168.44.55&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;PING 192.168.44.55 (192.168.44.55) 56(84) bytes of data.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=1 ttl=64 time=457 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=2 ttl=64 time=0.803 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=3 ttl=64 time=0.746 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=4 ttl=64 time=1.01 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=5 ttl=64 time=1.39 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=6 ttl=64 time=0.950 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;^C&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;--- 192.168.44.55 ping statistics ---&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;6 packets transmitted, 6 received, 0% packet loss, time 5043ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;rtt min/avg/max/mdev = 0.746/76.924/456.651/169.818 ms&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;When I un-pluge one of them and plug to the other port, or I swap them - then there is &lt;strong&gt;no communication between them&lt;/strong&gt;. Waiting more than a minute doesn&amp;#39;t change this condition. &lt;strong&gt;This seems wrong.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After more than a minut, MAC addresses are still, in `proxy node table`.&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new, courier;"&gt;---------------- HSR status ----------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;type=HSR, end-node=HSR RedBox SAN, device=RedBox, HSR mode=mode H&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;ports: A=2 (active, up), B=3 (active, up), C=0; interlinks=1,4,5,-1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;LRE MAC=02:00:00:2a:0d:33, supervision: A VID=4095 PCP=0, B VID=4095 PCP=0, evaluate=yes, duplicate-time=625&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;forwarding=store-and-forward&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;reserved HSR VLAN=4094&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;HSR counters: TX A=2550 B=2550 C=2703; RX A=1906 B=1906 C=3115&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;errors: A=0 B=0 C=0; wrong-LAN A=0 B=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;duplicates: unique A=0 B=0; duplicate A=0 B=0; multi A=0 B=0; own RX A=0 B=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;nodes: 1, proxy nodes: 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;HSR node table:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; node[1] MAC=02:00:00:cf:c8:42, type=HSR RedBox, last-seen A=475411 B=475411, read-ts=475471&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;HSR proxy-node table:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[0] MAC=00:e0:4c:38:7d:93&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[1] MAC=4c:d7:17:68:b6:9f&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[2] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[3] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[4] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[5] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[6] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;&amp;nbsp; proxy[7] read failed: -1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;-------------- end HSR status --------------&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;When I unplug both ports, and wait till `proxy node table` is cleared, then plug them in. Communication between ports is working. This may be hint in solving this problem.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;How to fix this behavior?&lt;/p&gt;
&lt;p&gt;Additional question - why reply on broadcast over ADIN6310 configured with HSR takes that long (200+ milliseconds), while using regular Ethernet switch it is less than 2 milliseconds.&lt;/p&gt;
&lt;p&gt;Below is ping test over regular Ethernet switch:&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new, courier;"&gt;marcda@marcda-lol:~/PRACA/Q3/Q3-SW-DIAG/repo/zephyr-fw/boards/q3-sw-diag-sim$ arping -b 192.168.44.55&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;ARPING 192.168.44.55 from 192.168.44.44 enx00e04c387d93&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast reply from 192.168.44.55 [4C:D7:17:68:B6:9F]&amp;nbsp; 1.250ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast reply from 192.168.44.55 [4C:D7:17:68:B6:9F]&amp;nbsp; 1.449ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Unicast reply from 192.168.44.55 [4C:D7:17:68:B6:9F]&amp;nbsp; 1.385ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;^CSent 3 probes (3 broadcast(s))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;Received 3 response(s)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;marcda@marcda-lol:~/PRACA/Q3/Q3-SW-DIAG/repo/zephyr-fw/boards/q3-sw-diag-sim$ ping 192.168.44.55&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;PING 192.168.44.55 (192.168.44.55) 56(84) bytes of data.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=1 ttl=64 time=0.913 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=2 ttl=64 time=0.830 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;64 bytes from 192.168.44.55: icmp_seq=3 ttl=64 time=0.791 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;^C&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;--- 192.168.44.55 ping statistics ---&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;3 packets transmitted, 3 received, 0% packet loss, time 2001ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;rtt min/avg/max/mdev = 0.791/0.844/0.913/0.050 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new, courier;"&gt;marcda@marcda-lol:~/PRACA/Q3/Q3-SW-DIAG/repo/zephyr-fw/boards/q3-sw-diag-sim$&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;Could you point me a information source that will describe HSR limitations of this switch?&lt;/p&gt;
&lt;p&gt;eg:&lt;/p&gt;
&lt;p&gt;- maximum number of concurrent connections between interlink MAC port to other HSR MAC addresses..&lt;/p&gt;
&lt;p&gt;- limitation on continuously broadcasting MAC addresses connected to HSR ring?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If there is needed some clarification about configuration, I can provide it - or provide wireshark dump from Ethernet configuration interface.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Marcin Dawidowicz&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>SES AddDevice error -1</title><link>https://ez.analog.com/thread/605546?ContentTypeID=0</link><pubDate>Wed, 05 Aug 2026 19:47:39 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:8017a700-5f84-4005-a7fa-30784c7c3635</guid><dc:creator>subseaSteve</dc:creator><slash:comments>4</slash:comments><comments>https://ez.analog.com/thread/605546?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/605546/ses-adddevice-error--1/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I have successfully configured the EVAL-ADIN6310 board from Windows and now am trying the Linux example-app. &amp;nbsp;The app runs,&amp;nbsp;but returns&amp;nbsp;SES AddDevice error -1. &amp;nbsp;I have built the app on a Beaglebone Black running Debian Trixie. &amp;nbsp;The app and example.xml file are in the same directory. &amp;nbsp;I copied the yang modules from sysrepo-glue-srv to /usr/share/yang/modules/. &amp;nbsp;(Note that without sudo, I get error -602, which I believe indicates the app is unable to access the Ethernet port.)&lt;/p&gt;
&lt;p&gt;$ sudo ./ses-example-app -f example-eval-6310.xml -p f4:b8:98:86:3f:bd -i production&lt;br /&gt;Board settings file is located at example-eval-6310.xml&lt;br /&gt;Yang modules folder /usr/share/yang/modules/&lt;br /&gt;libyang[0]: Value &amp;quot;7A&amp;quot; was not found in the dictionary.&lt;br /&gt;libyang[1]: String &amp;quot;7A&amp;quot; not freed from the dictionary, refcount 1&lt;br /&gt;Device MAC: 7A:C6:BB:11:11:11&lt;br /&gt;Init with host MAC: F4:B8:98:86:3f:bd&lt;br /&gt;SES AddDevice error -1&lt;/p&gt;
&lt;p&gt;I ran tcpdump and can see activity from the beaglebone but there is no response from the ADIN6310. &amp;nbsp;The board strapping is the same as&amp;nbsp;what works for windows (all jumpers in place except Timer2). &amp;nbsp;Link lights are on at both ends and ifconfig says the link is UP. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ sudo tcpdump -i eth0 ether proto 0xAAC5 -XX&lt;br /&gt;tcpdump: verbose output suppressed, use -v[v]... for full protocol decode&lt;br /&gt;listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes&lt;br /&gt;15:31:26.246382 f4:b8:98:86:3f:bd (oui Unknown) &amp;gt; 7a:c6:bb:11:11:11 (oui Unknown), ethertype Unknown (0xaac5), length 60: &lt;br /&gt; 0x0000: 7ac6 bb11 1111 f4b8 9886 3fbd aac5 f000 z.........?.....&lt;br /&gt; 0x0010: 0000 1900 5600 1400 0100 0000 0900 0000 ....V...........&lt;br /&gt; 0x0020: 0800 0000 6800 0000 0200 0000 0000 0000 ....h...........&lt;br /&gt; 0x0030: 0000 0000 0000 0000 0000 0000 ............&lt;br /&gt;15:31:27.247781 f4:b8:98:86:3f:bd (oui Unknown) &amp;gt; 7a:c6:bb:ff:fe:00 (oui Unknown), ethertype Unknown (0xaac5), length 60: &lt;br /&gt; 0x0000: 7ac6 bbff fe00 f4b8 9886 3fbd aac5 f000 z.........?.....&lt;br /&gt; 0x0010: 0000 1900 5600 1400 0200 0000 0900 0000 ....V...........&lt;br /&gt; 0x0020: 0800 0000 6800 0000 0200 0000 0000 0000 ....h...........&lt;br /&gt; 0x0030: 0000 0000 0000 0000 0000 0000 ............&lt;/p&gt;
&lt;p&gt;I see other people were stuck at this same point using SPI, but I am using Ethernet. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Can anyone suggest next steps to troubleshoot? &amp;nbsp;TIA, -Steve&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Startup file XML for SFPs</title><link>https://ez.analog.com/thread/605339?ContentTypeID=0</link><pubDate>Tue, 21 Jul 2026 16:27:43 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:ad16010f-2409-4d94-9fb1-87eec0932b5c</guid><dc:creator>subseaSteve</dc:creator><slash:comments>4</slash:comments><comments>https://ez.analog.com/thread/605339?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/605339/startup-file-xml-for-sfps/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Can someone point me to the full set of parameters that need to be included in the ADIN6310 startup file to enable 1000BASE-LX SFPs?&lt;/p&gt;
&lt;p&gt;I am using the ADIN6310-tsn-evaluation-util on windows.&amp;nbsp; I have modified the startup xml&amp;nbsp;so if-type is sgmii-1000base-sxlx and phy-type is unmanaged.&amp;nbsp; And I have moved the jumpers on the board.&amp;nbsp; Port Status indicates the ports&amp;nbsp;are up and I can see on the port statistics page that packets are being sent, but nothing is received.&amp;nbsp; The far end of the link does not show as being up.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am guessing this has something to do with LOS polarity.&amp;nbsp; Google search returns the following code snippet.&amp;nbsp;&amp;nbsp;Can sfpEnabled and losPolarity be passed in the&amp;nbsp;&amp;lt;interface&amp;gt; block of the startup&amp;nbsp;file or does this belong somewhere else?&amp;nbsp; Or am I missing something entirely?&lt;/p&gt;
&lt;p&gt;TIA, &lt;br /&gt;-Steve&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt; &amp;lt;&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;port&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;portNumber&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;2&amp;lt;/&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;portNumber&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;interfaceMode&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;SGMII&amp;lt;/&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;interfaceMode&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;sfpEnabled&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;true&amp;lt;/&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;sfpEnabled&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;speed&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;1000&amp;lt;/&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;speed&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;losPolarity&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;active-low&amp;lt;/&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;losPolarity&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="mexSqb" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(147, 52, 230);"&gt;port&lt;/span&gt;&lt;span class="undefined" data-copy-service-computed-style="font-family: monospace; font-size: 14px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(0, 29, 53);"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Title: ADIN2111 1588 timestamps: t2 - t1 remains constant between two boards with independent 25 MHz crystals</title><link>https://ez.analog.com/thread/605215?ContentTypeID=0</link><pubDate>Tue, 14 Jul 2026 03:59:29 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:3e598f78-2b09-4c65-87b9-b6b2adf08bf1</guid><dc:creator>GuoNX</dc:creator><slash:comments>3</slash:comments><comments>https://ez.analog.com/thread/605215?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/605215/title-adin2111-1588-timestamps-t2---t1-remains-constant-between-two-boards-with-independent-25-mhz-crystals/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi ADI team,&lt;/p&gt;
&lt;p&gt;I am using two ADIN2111-based boards connected through the Port 1 10BASE-T1L interface. I am currently trying to bring up a simple IEEE 1588/PTP test over raw Layer-2 Ethernet frames.&lt;/p&gt;
&lt;p&gt;I simplified the test to only:&lt;/p&gt;
&lt;p&gt;The PTP source sends a PTP Sync frame.&lt;br /&gt;The PTP source reads the ADIN2111 egress timestamp as t1.&lt;br /&gt;The PTP source sends a Follow_Up frame carrying t1.&lt;br /&gt;The PTP receiver receives the Sync frame and obtains the ADIN2111 RX timestamp as t2.&lt;br /&gt;The PTP receiver receives the Follow_Up frame and compares t2 - t1.&lt;/p&gt;
&lt;p&gt;There is no Delay_Req/Delay_Resp in this test, and the PTP receiver does not apply any phase correction or frequency correction.&lt;/p&gt;
&lt;p&gt;I observed t2 - t1 remains constant between two boards with independent 25 MHz crystals.Here&amp;#39;s the details:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hardware setup&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are two separate boards:&lt;/p&gt;
&lt;p&gt;Board A: ADIN2111 used as the PTP source in this test.&lt;br /&gt;Board B: ADIN2111 used as the PTP receiver in this test.&lt;br /&gt;The two boards are connected through ADIN2111 Port 1.&lt;br /&gt;Each ADIN2111 has its own independent 25 MHz crystal source.&lt;br /&gt;The two 25 MHz crystal specifications are approximately &amp;plusmn;10 ppm and &amp;plusmn;1.5 ppm.&lt;br /&gt;The MCU clocks are also independent from the ADIN2111 25 MHz clock domains.&lt;/p&gt;
&lt;p&gt;Because the ADIN2111 25 MHz references are independent, I would expect the free-running 1588 timestamp counters to have a measurable frequency difference over tens or hundreds of seconds, unless some part of the ADIN2111/10BASE-T1L link makes the timestamp counter frequency follow the recovered PHY clock.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software initialization&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Both boards use the ADI ADIN2111 driver with OPEN Alliance SPI.&lt;/p&gt;
&lt;p&gt;The initialization flow is approximately:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;adin2111_Init(...);
adin2111_Open(...);
adin2111_SetPortEnabled(...);
adin2111_TsEnable(..., ADI_MAC_TS_FORMAT_64B_1588);
adin2111_Enable(...);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The PTP clock wrapper only stores the ADIN2111 device handle:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void myPtpClockInit(adin2111_DeviceHandle_t hDevice)
{
ptpClockDevice = hDevice;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The timestamp mode is configured as 64-bit 1588 timestamps. During the test, I dump these registers around the timestamp events.&lt;/p&gt;
&lt;p&gt;Typical PTP source register dump:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;CONFIG0=0x000080c6
TS_CFG=0x00000001
TS_ADDEND=0x85555555&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Typical PTP receiver register dump:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;CONFIG0=0x000080e6
TS_CFG=0x00000001
TS_ADDEND=0x85555555&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;So, on both sides:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;CONFIG0.FTSE = 1
CONFIG0.FTSS = 1, 64-bit timestamp format
CONFIG0.SYNC = 1
TS_CFG.TS_EN = 1
TS_ADDEND = 0x85555555, unchanged default value&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The difference between 0x80c6 and 0x80e6 appears to be CONFIG0.PROTE, which I do not expect to affect timestamp frequency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TX timestamp path on the PTP source&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The PTP source sends a raw L2 PTP Sync frame with Ethertype 0x88F7. When queueing the Sync frame, I request egress capture A&lt;/p&gt;
&lt;p&gt;I wait for the timestamp-ready callback/event before reading the egress timestamp. After the ready event is observed, I call:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;adin2111_TsGetEgressTimestamp(
hDevice,
ADI_MAC_EGRESS_CAPTURE_A,
&amp;amp;ts);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This timestamp is used as t1.&lt;/p&gt;
&lt;p&gt;Then I build a Follow_Up frame and put this t1 into the Follow_Up payload. I also print the source-side t1.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RX timestamp path on the PTP receiver&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On the PTP receiver, when a PTP L2 frame is received, I check the RX buffer descriptor timestamp fields.&lt;/p&gt;
&lt;p&gt;The conversion uses:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;adin2111_TsConvert(
tsLow,
tsHigh,
ADI_MAC_TS_FORMAT_64B_1588,
&amp;amp;ts);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;For a received Sync frame, this converted RX timestamp is used as t2.&lt;/p&gt;
&lt;p&gt;For the subsequent Follow_Up frame, the PTP receiver parses t1 from the Follow_Up payload. I verified from logs that the t1 printed by the PTP source and the t1 parsed by the PTP receiver match exactly for all common sequence IDs.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simplified observation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this simplified observe-only mode:&lt;/p&gt;
&lt;p&gt;Sync is sent once per second.&lt;br /&gt;Follow_Up carries the egress timestamp t1.&lt;br /&gt;The PTP receiver calculates t2 - t1.&lt;br /&gt;The PTP receiver does not send Delay_Req.&lt;br /&gt;The PTP receiver does not call TsSetTimerAbsolute.&lt;br /&gt;The PTP receiver does not modify TS_ADDEND.&lt;br /&gt;No frequency or phase correction is applied.&lt;/p&gt;
&lt;p&gt;However, the measured value of t2 - t1 remains essentially constant.&lt;/p&gt;
&lt;p&gt;From one log:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;106 common Sync/Follow_Up sequence IDs were compared.
The t1 value in the receiver-side Follow_Up matched the source-side printed t1 exactly.
The observed drift of t2 - t1 was only 0 ns or 1 ns over about 100 seconds.
TS_ADDEND remained 0x85555555 on both sides.&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This is the surprising part. With two independent 25 MHz crystals, I would expect some visible accumulated phase drift between t1 and t2, for example several microseconds per second for a few ppm difference. But the difference stays constant to around 1 ns.&lt;/p&gt;
&lt;p&gt;I also tried heating the receiver-side 25 MHz crystal, but the observed t2 - t1 still did not show meaningful drift.&lt;/p&gt;
&lt;p&gt;Questions&lt;/p&gt;
&lt;p&gt;1. Is the ADIN2111 1588 timestamp counter always based on the local 25 MHz reference, or can it become frequency-synchronized to the 10BASE-T1L link/PHY recovered clock because of the leader/follower mechanism?&lt;/p&gt;
&lt;p&gt;2. Does my TX/RX timestamp usage look correct? The PTP source waits for the Sync egress timestamp-ready event, reads EGRESS_CAPTURE_A as t1, sends t1 in Follow_Up, and the PTP receiver uses the RX buffer descriptor timestamp as t2. If this is the correct method, what could explain t2 - t1 staying constant within about 0/1 ns over ~100 seconds even though the two ADIN2111 devices use independent 25 MHz crystals?&lt;/p&gt;
&lt;p&gt;My main concern is that the current result looks too stable for two independent free-running timestamp counters. I would like to understand whether this is expected ADIN2111/10BASE-T1L behavior, or whether I am reading/interpreting the timestamps incorrectly.&lt;/p&gt;
&lt;p&gt;Thanks,&lt;br /&gt;GuoNX&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Adin3310 only Same data reading</title><link>https://ez.analog.com/thread/604876?ContentTypeID=0</link><pubDate>Sat, 20 Jun 2026 05:32:27 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:47a60a81-2506-4197-b521-8977b7dfb13f</guid><dc:creator>Kowsik</dc:creator><slash:comments>7</slash:comments><comments>https://ez.analog.com/thread/604876?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/604876/adin3310-only-same-data-reading/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;HI&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; I am currently usnig adin3310 etherenet switch in cusyom board i want too configure it through spi from xazu3eg1sfvc78i i am getting the pulses from the timer0 that there is no image my interrupt is taking that and reading i am getting the read&amp;nbsp; first time the 4 bytes header and the second time header + 20 bytes of the payload but the problem i am not able to read the next data i am countinously reading the same data again ad again i am using the windows example i ported the spi porting layer and replayed the spi function everything is fine but the next reads are not happening i have the spi transactions pdf that i need to get for intilization i am attaching the spi porting layer and the read messages i observed .&lt;/p&gt;
&lt;p&gt;Thanks and regards ,&lt;/p&gt;
&lt;p&gt;kowsik&lt;pre class="ui-code" data-mode="text"&gt;/*
 * Copyright (c) 2024 Analog Devices, Inc. All Rights Reserved.
 *
 * This software is proprietary and confidential to Analog Devices, Inc.
 * and its licensors.
 */

/*
 * FreeRTOS Port &amp;#226;€” Zynq UltraScale+ MPSoC (Vitis / FreeRTOS 10)
 * Target  : ADIN3310 Ethernet Switch &amp;#226;€” SPI interface abstraction
 * Toolchain: Xilinx Vitis, arm-none-eabi-gcc
 *
 * Hardware mapping
 * &amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€
 *  Windows reference          This port
 *  &amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€  &amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€
 *  FT4222 USB-SPI bridge      PS-SPI (XSpiPs) on Zynq MPSoC
 *  FT4222 GPIO port 3 (IRQ)   MIO GPIO pin 62  (XGpioPs)
 *  Windows CreateThread()     FreeRTOS xTaskCreate()
 *  WaitForSingleObject(event) FreeRTOS binary semaphore (IRQ &amp;#226;†’ task notify)
 *  HANDLE / BOOL              XSpiPs_Config * / BaseType_t
 *
 * SPI configuration for ADIN3310 (UG2287 &amp;#194;&amp;#167;3.1)
 *   Mode  : CPOL=0, CPHA=0  (SPI mode 0)
 *   Width : 8-bit
 *   CS    : active-low, driven by hardware (SSNBS)
 *   Max   : 25 MHz &amp;#226;€” use the clock divider appropriate for your PL/PS
 *
 * GPIO / Interrupt
 *   MIO 62 is configured as input with a rising-edge interrupt routed to
 *   GIC via XScuGic.  The ISR posts a binary semaphore; the IRQ task
 *   takes that semaphore and calls HandleReceivedMessage().
 *
 * FreeRTOSConfig.h requirements
 *   configUSE_COUNTING_SEMAPHORES   1
 *   configUSE_TASK_NOTIFICATIONS    1   (optional &amp;#226;€” binary sem used instead)
 *   INCLUDE_vTaskDelete             1
 *   configMAX_PRIORITIES            &amp;#226;‰&amp;#165; (SES_PORT_IRQ_TASK_PRIORITY + 1)
 *
 * Vivado / Vitis assumptions
 *   - xparameters.h defines XPAR_PSU_SPI_0_DEVICE_ID / BASEADDR
 *   - xparameters.h defines XPAR_PSU_GPIO_0_DEVICE_ID
 *   - xparameters.h defines XPAR_PSU_GPIO_0_INTR  (GIC SPI ID for GPIO)
 *   - GIC driver (XScuGic) is already initialised by the BSP before
 *     SES_PORT_SPI_Init() is called.
 * &amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€&amp;#226;”€
 */

// Includes *******************************************************************

#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdint.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

/* FreeRTOS */
#include &amp;quot;FreeRTOS.h&amp;quot;
#include &amp;quot;task.h&amp;quot;
#include &amp;quot;semphr.h&amp;quot;

/* Xilinx BSP */
#include &amp;quot;xparameters.h&amp;quot;
#include &amp;quot;xspips.h&amp;quot;          /* PS SPI driver                                 */
#include &amp;quot;xgpiops.h&amp;quot;         /* PS GPIO driver                                */
#include &amp;quot;xscugic.h&amp;quot;         /* GIC interrupt controller                      */
#include &amp;quot;xil_exception.h&amp;quot;

/* SES driver */
#include &amp;quot;SES_debug.h&amp;quot;
#include &amp;quot;SES_port_api.h&amp;quot;
#include &amp;quot;SES_PORT_interface.h&amp;quot;
#include &amp;quot;xil_cache.h&amp;quot;
// End Includes ***************************************************************

// Macros, typedefs, enums ****************************************************

/* &amp;#226;”€&amp;#226;”€ General &amp;#226;”€&amp;#226;”€ */
#define SES_PORT_SPI_MAX_TYPE               (15)
#define SES_PORT_SPI_TFER_TYPE_MASK         (0xF)
#define SES_PORT_SEM_INFINITE_WAIT          (-1)

/* Milliseconds the Release path waits for the IRQ task to finish */
#define SES_PORT_SPI_WAIT_THREAD_STOP_MS    (5000U)

/* &amp;#226;”€&amp;#226;”€ SPI frame commands (identical to reference) &amp;#226;”€&amp;#226;”€ */
#define SES_PORT_SPI_READ_CMD               (0x80U)
#define SES_PORT_SPI_WRITE_CMD              (0x40U)
#define SES_PORT_SPI_CMD_SZ                 (1U)

/* &amp;#226;”€&amp;#226;”€ Hardware IDs &amp;#226;”€&amp;#226;”€ pull from xparameters.h; override here if needed &amp;#226;”€&amp;#226;”€ */
#ifndef SES_SPI_DEVICE_ID
#  define SES_SPI_DEVICE_ID                 XPAR_PSU_SPI_0_DEVICE_ID
#endif

#ifndef SES_GPIO_DEVICE_ID
#  define SES_GPIO_DEVICE_ID                XPAR_PSU_GPIO_0_DEVICE_ID
#endif

/* MIO pin used as the ADIN3310 interrupt input */
#define SES_PORT_IRQ_GPIO_PIN               (62U)
#define gpio								(63U)



/*
 * SPI clock divider.
 * PS-SPI ref clock is typically 200 MHz on ZU+.
 * XSPIPS_CLK_PRESCALE_8  &amp;#226;†’ 25 MHz  (ADIN3310 maximum).
 * Adjust if your ref clock differs.
 */
#define SES_SPI_CLK_PRESCALE                XSPIPS_CLK_PRESCALE_32

/* FreeRTOS task parameters for the IRQ handler task */
#define SES_PORT_IRQ_TASK_STACK_WORDS       (1024U)
#define SES_PORT_IRQ_TASK_PRIORITY          (configMAX_PRIORITIES - 1U)
#define SES_PORT_IRQ_TASK_NAME              &amp;quot;SES_SpiIrq&amp;quot;

/* &amp;#226;”€&amp;#226;”€ Struct &amp;#226;”€&amp;#226;”€ */
typedef struct {
    int               initialized;
    void             *spiProtectSem;   /* counting sem, max=1: SPI bus mutex  */
    SemaphoreHandle_t rxEventSem;      /* binary sem: ISR &amp;#226;†’ IRQ task          */
    TaskHandle_t      irqTask;         /* FreeRTOS IRQ handler task           */
    volatile int      stopTask;        /* flag: ask the IRQ task to exit      */
    XSpiPs            spiInst;         /* Xilinx PS-SPI instance              */
    XGpioPs           gpioInst;        /* Xilinx PS-GPIO instance             */
    int               chipSelect;      /* SPI CS index (0 for single-device)  */
} SES_PORT_spiLinkDescription_t;

/* Passed through pvPortMalloc to the IRQ task on creation */
typedef struct {
    int drvHdlIdx;
} SES_PORT_threadData_t;

// End Macros, typedefs, enums ************************************************

// Global Variables ***********************************************************

static SES_PORT_spiLinkDescription_t
    spiLinkDescription_g[SES_PORT_MAX_SPI_LINKS] = { { 0 } };

/* Protects the spiLinkDescription_g[] table during Init/Release */
static void *dataTableProtectionSem_gp = NULL;

/*
 * Shared GIC handle.
 * The application must initialise this before calling SES_PORT_SPI_Init().
 * Declare it extern here so the SPI port can register its GPIO ISR.
 */
extern XScuGic XInterruptController;

// End Global Variables *******************************************************

// Static Function Prototypes *************************************************

static int  GetLinkDescriptionEntry(void);
static int  HandleReceivedMessage(int tblIndex);
static int  InitDrv(int tblIndex);
static int  SpiClose(int tblIndex);
static int  SpiRead(int tblIndex, uint16_t length, uint8_t *dataRx_p);
static void TaskSpiIrq(void *pvParam);
static void GpioIsr(void *callbackRef);

// End Static Function Prototypes *********************************************

// Functions ******************************************************************

/**
 * @brief  Initialise the SPI interface to the ADIN3310.
 *
 * Replaces the Windows FT4222 open/init sequence with XSpiPs + XGpioPs
 * initialisation.  The init parameter struct is SES_PORT_zynqSpiInitParams_t
 * (defined in SES_PORT_interface.h &amp;#226;€” see note in that file).
 *
 * @param[in]  param_p     Pointer to SES_PORT_zynqSpiInitParams_t.
 * @param[out] intfType_p  Set to SES_PORT_spiInterface on success.
 * @param[out] srcMac_p    Not used for SPI; may be NULL.
 *
 * @return  Non-negative interface handle on success, negative error code on failure.
 */
int SES_PORT_SPI_Init(void *param_p,
                      SES_PORT_intfType_t *intfType_p,
                      uint8_t *srcMac_p)
{
    int intfHandle;
    int response;
    SES_PORT_zynqSpiInitParams_t *initParams_p =
        (SES_PORT_zynqSpiInitParams_t *)param_p;

    (void)srcMac_p; /* not used for SPI */

    /* &amp;#226;”€&amp;#226;”€ Parameter check &amp;#226;”€&amp;#226;”€ */
    if ((param_p == NULL) || (intfType_p == NULL)) {
        return SES_PORT_INVALID_PARAM;
    }

    /* &amp;#226;”€&amp;#226;”€ Create the table-protection semaphore once &amp;#226;”€&amp;#226;”€ */
    if (dataTableProtectionSem_gp == NULL) {
        dataTableProtectionSem_gp = SES_PORT_CreateSemaphore(1, 1);
        if (dataTableProtectionSem_gp == NULL) {
            return SES_PORT_ERROR;
        }
    }

    SES_PORT_WaitSemaphore(dataTableProtectionSem_gp,
                           SES_PORT_PROTECTION_TIMEOUT);

    /* &amp;#226;”€&amp;#226;”€ Find a free link-description slot &amp;#226;”€&amp;#226;”€ */
    intfHandle = GetLinkDescriptionEntry();
    if (intfHandle &amp;lt; SES_PORT_OK) {
        SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);
        return SES_PORT_ERROR;
    }

    /* &amp;#226;”€&amp;#226;”€ Per-link SPI-bus mutex (counting sem, max = 1) &amp;#226;”€&amp;#226;”€ */
    spiLinkDescription_g[intfHandle].spiProtectSem =
        SES_PORT_CreateSemaphore(1, 1);
    if (spiLinkDescription_g[intfHandle].spiProtectSem == NULL) {
        SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);
        return SES_PORT_ERROR;
    }

    /*
     * &amp;#226;”€&amp;#226;”€ IRQ event semaphore &amp;#226;”€&amp;#226;”€
     * Binary semaphore:  ISR calls xSemaphoreGiveFromISR(),
     *                    TaskSpiIrq() calls xSemaphoreTake().
     * Replaces the Windows CreateEvent(auto-reset) + WaitForSingleObject().
     */
    spiLinkDescription_g[intfHandle].rxEventSem =
        xSemaphoreCreateBinary();
    if (spiLinkDescription_g[intfHandle].rxEventSem == NULL) {
        SES_PORT_DeleteSemaphore(
            spiLinkDescription_g[intfHandle].spiProtectSem);
        SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);
        return SES_PORT_ERROR;
    }

    /* Store the chip-select index supplied by the caller */
    spiLinkDescription_g[intfHandle].chipSelect = initParams_p-&amp;gt;chipSelect;
    spiLinkDescription_g[intfHandle].stopTask   = 0;

    SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);

    /* &amp;#226;”€&amp;#226;”€ Hardware init (SPI + GPIO + IRQ task) &amp;#226;”€&amp;#226;”€ */
    response = InitDrv(intfHandle);
    if (response != SES_PORT_OK) {
        vSemaphoreDelete(spiLinkDescription_g[intfHandle].rxEventSem);
        SES_PORT_DeleteSemaphore(
            spiLinkDescription_g[intfHandle].spiProtectSem);
        return SES_PORT_ERROR;
    }

    spiLinkDescription_g[intfHandle].initialized = 1;
    *intfType_p = SES_PORT_spiInterface;

    return intfHandle;
}

/**
 * @brief  Release (close) the SPI interface.
 *
 * Signals the IRQ task to stop, waits up to SES_PORT_SPI_WAIT_THREAD_STOP_MS,
 * then tears down GPIO, SPI and semaphores.
 */
int SES_PORT_SPI_Release(int intfHandle)
{
    int rv = SES_PORT_OK;

    SES_PORT_WaitSemaphore(dataTableProtectionSem_gp,
                           SES_PORT_PROTECTION_TIMEOUT);

    if (!spiLinkDescription_g[intfHandle].initialized) {
        DBG_INFO(&amp;quot;SES_PORT_SPI_Release called before Initialization&amp;quot;);
        rv = SES_PORT_NOT_INITIALIZED;
    }

    if (rv == SES_PORT_OK) {
        rv = SpiClose(intfHandle);
        if (rv != SES_PORT_OK) {
            rv = SES_PORT_ERROR;
        }
    }

    SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);

    return rv;
}

/**
 * @brief  Send a framed message to the ADIN3310 over SPI.
 *
 * Prepends the 1-byte WRITE command (0x40) then transfers the full frame
 * using XSpiPs_PolledTransfer() under the protection of the per-link mutex.
 *
 * @param[in] intfHandle  Handle returned by SES_PORT_SPI_Init().
 * @param[in] size        Payload size in bytes (NOT including command byte).
 * @param[in] data_p      Pointer to payload buffer (freed on success).
 *
 * @return SES_PORT_OK on success, negative error code on failure.
 */
int SES_PORT_SPI_SendMessage(int intfHandle, int size, void *data_p)
{
    int      result   = SES_PORT_ERROR;
    int      response = SES_PORT_ERROR;
    int i;
    int      spiFrmSz;
    int      count    = 0;
    int      status;
    uint8_t *tx_frame = NULL;

    /* Dummy RX buffer &amp;#226;€” XSpiPs always full-duplex */
    uint8_t *rx_dummy = NULL;

    if (!spiLinkDescription_g[intfHandle].initialized) {
        return SES_PORT_NOT_INITIALIZED;
    }

    if (data_p == NULL) {
        return SES_PORT_INVALID_PARAM;
    }

    /* Build TX frame: [0x40 | payload] */
    spiFrmSz = size + SES_PORT_SPI_CMD_SZ;

    result = SES_PORT_Malloc((void **)&amp;amp;tx_frame, spiFrmSz);
    if (result != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }

    result = SES_PORT_Malloc((void **)&amp;amp;rx_dummy, spiFrmSz);
    if (result != SES_PORT_OK) {
        SES_PORT_Free(tx_frame);
        return SES_PORT_ERROR;
    }

    tx_frame[0] = SES_PORT_SPI_WRITE_CMD;
    memcpy(tx_frame + SES_PORT_SPI_CMD_SZ, data_p, size);

    /* &amp;#226;”€&amp;#226;”€ Take SPI bus mutex &amp;#226;”€&amp;#226;”€ */
    SES_PORT_WaitSemaphore(spiLinkDescription_g[intfHandle].spiProtectSem,
                           SES_PORT_SEM_INFINITE_WAIT);

    /*
     * XSpiPs_PolledTransfer drives CS automatically when configured with
     * XSPIPS_MANUAL_START_OPTION disabled (the default after SetOptions).
//     */
//    while(1){
    status = XSpiPs_PolledTransfer(
                 &amp;amp;spiLinkDescription_g[intfHandle].spiInst,
                 tx_frame,
                 rx_dummy,
                 (u32)spiFrmSz);
    for(i=0;i&amp;lt;1000;i++);
//    }

    SES_PORT_SignalSemaphore(spiLinkDescription_g[intfHandle].spiProtectSem);

    count = (status == XST_SUCCESS) ? spiFrmSz : 0;

    SES_PORT_Free(tx_frame);
    SES_PORT_Free(rx_dummy);

    if (count != spiFrmSz) {
        response = SES_PORT_ERROR;
    } else {
        response = SES_PORT_OK;
        SES_PORT_Free(data_p);   /* convention: caller&amp;#39;s buffer freed on OK */
    }

    return response;
}

/**
 * @brief  Return a human-readable string describing the SPI interface.
 *
 * The FT4222 device enumeration has no equivalent on Zynq; we return a
 * static description based on the BSP parameters instead.
 */
int32_t SES_PORT_SPI_GetInterfaceInfo(char *interfaceInfo_p,
                                      uint16_t bufferSize)
{
    if ((interfaceInfo_p == NULL) || (bufferSize == 0U)) {
        return SES_PORT_BUF_ERR;
    }

    int written = snprintf(interfaceInfo_p, bufferSize,
                           &amp;quot;0,Zynq-UltraScale-PS-SPI(dev=%d,gpio=%d);&amp;quot;,
                           (int)SES_SPI_DEVICE_ID,
                           (int)SES_PORT_IRQ_GPIO_PIN);

    return (written &amp;gt; 0) ? SES_PORT_OK : SES_PORT_BUF_ERR;
}

// End Functions **************************************************************

// Static Functions ***********************************************************

/**
 * @brief  Handle one incoming SPI message from the ADIN3310.
 *
 * Reads the 4-byte header, validates the length and transfer-type fields,
 * allocates a receive buffer, reads the payload, then hands everything to
 * SES_ReceiveMessage().  Logic is identical to the Windows reference.
 */
static int HandleReceivedMessage(int tblIndex)
{
    int      response = SES_PORT_OK;
    uint8_t  transferType;
    int16_t  txLength;
    int16_t  pad_to_block;
    uint32_t header   = 0U;
    int      rxLength;
    uint8_t *rx_frame = NULL;

    /* Step 1 &amp;#226;€“ read the 4-byte header */
    response = SpiRead(tblIndex, sizeof(header), (uint8_t *)&amp;amp;header);
    if (response != SES_PORT_OK) {
        return response;
    }

    /* Step 2 &amp;#226;€“ decode and validate length (lower 12 bits) */
    rxLength = (int)((uint16_t)(header &amp;amp; SES_PORT_SPI_LENGTH_MASK));
    if (rxLength != (int)(((~header &amp;gt;&amp;gt; SES_PORT_SPI_INVERTED_LENGTH_SHIFT) &amp;amp;
                           SES_PORT_SPI_LENGTH_MASK))) {
        return SES_PORT_ERROR;
    }

    /* Step 3 &amp;#226;€“ decode and validate transfer type (4 bits) */
    transferType = (uint8_t)((header &amp;gt;&amp;gt; SES_PORT_SPI_TYPE_SHIFT) &amp;amp;
                             SES_PORT_SPI_TFER_TYPE_MASK);
    if (transferType != (uint8_t)(((~header &amp;gt;&amp;gt; SES_PORT_SPI_INVERTED_TYPE_SHIFT) &amp;amp;
                                   SES_PORT_SPI_TFER_TYPE_MASK))) {
        return SES_PORT_ERROR;
    }

    /* Step 4 &amp;#226;€“ round up to block boundary */
    txLength     = (int16_t)(rxLength + SES_PORT_SPI_BLOCK_LENGTH - 1);
    txLength    &amp;amp;= (int16_t)(~(SES_PORT_SPI_BLOCK_LENGTH - 1));
    pad_to_block = txLength - (int16_t)rxLength;

    /* Step 5 &amp;#226;€“ allocate and fill the payload buffer */
    response = SES_PORT_Malloc((void **)&amp;amp;rx_frame,
                               (int)(rxLength + pad_to_block));
    if (response != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }
//pad_to_block
    response = SpiRead(tblIndex, (uint16_t)(rxLength), rx_frame);
    if (response != SES_PORT_OK) {
        (void)SES_PORT_Free(rx_frame);
        return response;
    }

    /* Step 6 &amp;#226;€“ deliver to the SES stack */
    response = SES_ReceiveMessage(tblIndex,
                                  SES_PORT_spiInterface,
                                  rxLength,
                                  (void *)rx_frame,
                                  (-1),
                                  (0),
                                  NULL);
    SES_PORT_Free(rx_frame);
    return response;
}

/**
 * @brief  Initialise the PS-SPI peripheral, GPIO interrupt pin, and IRQ task.
 *
 * Replaces FT_OpenEx / FT4222_SPIMaster_Init / CreateThread.
 */
static int InitDrv(int tblIndex)
{
    int              rv;
    XSpiPs_Config   *spiCfg_p;
    XGpioPs_Config  *gpioCfg_p;
    int              xilStatus;
    SES_PORT_threadData_t *thStruct_p = NULL;
    BaseType_t        taskCreated;

    /* &amp;#226;”€&amp;#226;”€ 1. Initialise PS-SPI &amp;#226;”€&amp;#226;”€ */
    spiCfg_p = XSpiPs_LookupConfig(SES_SPI_DEVICE_ID);
    if (spiCfg_p == NULL) {
        return SES_PORT_ERROR;
    }

    xilStatus = XSpiPs_CfgInitialize(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    spiCfg_p,
                    spiCfg_p-&amp;gt;BaseAddress);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /*
     * ADIN3310 SPI: CPOL=0, CPHA=0 (mode 0), 8-bit, MSB first.
     * XSPIPS_MASTER_OPTION   &amp;#226;€“ this device is the SPI master
     * XSPIPS_FORCE_SSELECT_OPTION &amp;#226;€“ hardware drives CS automatically
     *                               (de-asserts after each transfer)
     */
    xilStatus = XSpiPs_SetOptions(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    XSPIPS_MASTER_OPTION |
					XSPIPS_FORCE_SSELECT_OPTION);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    xilStatus = XSpiPs_SetClkPrescaler(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    SES_SPI_CLK_PRESCALE);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* Select the chip-select line */
    xilStatus = XSpiPs_SetSlaveSelect(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    0x00);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* &amp;#226;”€&amp;#226;”€ 2. Initialise PS-GPIO for interrupt pin (MIO 62) &amp;#226;”€&amp;#226;”€ */
    gpioCfg_p = XGpioPs_LookupConfig(SES_GPIO_DEVICE_ID);
    if (gpioCfg_p == NULL) {
        return SES_PORT_ERROR;
    }

    xilStatus = XGpioPs_CfgInitialize(
                    &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
                    gpioCfg_p,
                    gpioCfg_p-&amp;gt;BaseAddr);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* Configure MIO 62 as input */
    XGpioPs_SetDirectionPin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN,
        0U);   /* 0 = input */

    /*
     * &amp;#226;”€&amp;#226;”€ 3. Connect GPIO ISR to GIC &amp;#226;”€&amp;#226;”€
     *
     * XPAR_PSU_GPIO_0_INTR is the GIC SPI interrupt ID for the PS GPIO block.
     * All 78 MIO pins share this one GIC line; the ISR reads the interrupt
     * status register to identify which pin fired.
     */
    xilStatus = XScuGic_Connect(
                    &amp;amp;XInterruptController,
                    XPAR_PSU_GPIO_0_INTR,
                    (Xil_ExceptionHandler)GpioIsr,
                    (void *)&amp;amp;spiLinkDescription_g[tblIndex].gpioInst);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* Rising-edge interrupt on MIO 62 */
    XGpioPs_SetIntrTypePin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN,
		XGPIOPS_IRQ_TYPE_EDGE_RISING);//changed to rising edge

    XGpioPs_IntrEnablePin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN);

    XScuGic_Enable(&amp;amp;XInterruptController, XPAR_PSU_GPIO_0_INTR);

    /* &amp;#226;”€&amp;#226;”€ 4. Create the IRQ handler task &amp;#226;”€&amp;#226;”€ */
    rv = SES_PORT_Malloc((void **)&amp;amp;thStruct_p,
                         sizeof(SES_PORT_threadData_t));
    if (rv != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }
    thStruct_p-&amp;gt;drvHdlIdx = tblIndex;

    /*
     * xTaskCreate() replaces CreateThread().
     * The task runs at the highest priority so interrupt-driven frames are
     * processed before any lower-priority application tasks &amp;#226;€” matching the
     * THREAD_PRIORITY_TIME_CRITICAL setting in the Windows reference.
     */
    taskCreated = xTaskCreate(TaskSpiIrq,
                              SES_PORT_IRQ_TASK_NAME,
                              SES_PORT_IRQ_TASK_STACK_WORDS,
                              (void *)thStruct_p,
                              SES_PORT_IRQ_TASK_PRIORITY,
                              &amp;amp;spiLinkDescription_g[tblIndex].irqTask);

    if (taskCreated != pdPASS) {
        SES_PORT_Free(thStruct_p);
        return SES_PORT_THREAD_FAIL;
    }

    return SES_PORT_OK;
}

/**
 * @brief  Low-level SPI read helper.
 *
 * Prepends the 1-byte READ command (0x80), performs a full-duplex polled
 * transfer, and copies the received payload (skipping the command echo byte)
 * into @p dataRx_p.
 *
 * Block-alignment padding is added on the TX side so the ADIN3310 SPI framing
 * is satisfied (identical calculation to the Windows reference).
 */
static int SpiRead(int tblIndex, uint16_t length, uint8_t *dataRx_p)
{
    int      response = SES_PORT_OK;
    int16_t  txLength;
    int16_t  pad_to_block;
    uint8_t *tx_frame = NULL;
    uint8_t d[22]={0};
    uint8_t *rx_frame = NULL;
//    uint8_t rx_frame[128];
    int      spiFrmSz;
    int      xilStatus;



    /* Round up to block boundary */
    txLength     = (int16_t)(length + SES_PORT_SPI_BLOCK_LENGTH - 1);
    txLength    &amp;amp;= (int16_t)(~(SES_PORT_SPI_BLOCK_LENGTH - 1));
    pad_to_block = txLength - (int16_t)length;

    spiFrmSz = (int)(SES_PORT_SPI_CMD_SZ + length + pad_to_block);



    /* Allocate TX and RX working buffers */
    response = SES_PORT_Malloc((void **)&amp;amp;tx_frame, spiFrmSz);
    if (response != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }
//
    response = SES_PORT_Malloc((void **)&amp;amp;rx_frame, spiFrmSz);
    if (response != SES_PORT_OK) {
        (void)SES_PORT_Free(tx_frame);
        return SES_PORT_ERROR;
    }




    /* Build TX frame: READ command + zero padding */
    tx_frame[0] = SES_PORT_SPI_READ_CMD;
    memset(tx_frame + SES_PORT_SPI_CMD_SZ, 0x00U,
           (size_t)(spiFrmSz - SES_PORT_SPI_CMD_SZ));
//
//    Xil_DCacheFlushRange((INTPTR)tx_frame,(u32)spiFrmSz);
//    Xil_DCacheInvalidateRange((INTPTR)rx_frame,(u32)spiFrmSz);


    /* &amp;#226;”€&amp;#226;”€ Take SPI bus mutex &amp;#226;”€&amp;#226;”€ */
    SES_PORT_WaitSemaphore(spiLinkDescription_g[tblIndex].spiProtectSem,
                           SES_PORT_SEM_INFINITE_WAIT);


    xilStatus = XSpiPs_PolledTransfer(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    tx_frame,
					rx_frame,
                    (u32)spiFrmSz);
    for(int i =0;i&amp;lt;=20;i++){
    	d[i]=rx_frame[i];
    }


//    Xil_DCacheInvalidateRange((INTPTR)rx_frame,(u32)spiFrmSz);

    SES_PORT_SignalSemaphore(spiLinkDescription_g[tblIndex].spiProtectSem);

    if (xilStatus != XST_SUCCESS) {
        response = SES_PORT_ERROR;
    }

    /* Free TX buffer */
    if (SES_PORT_Free(tx_frame) != SES_PORT_OK) {
        (void)SES_PORT_Free(rx_frame);
        return SES_PORT_ERROR;
    }

    /* Copy payload (skip the echoed command byte) into caller&amp;#39;s buffer */
    if (response == SES_PORT_OK) {
    	if(length==4){
    	memcpy(dataRx_p, rx_frame+ SES_PORT_SPI_CMD_SZ, length);
    	}
    	else{
    	memcpy(dataRx_p, rx_frame+ SES_PORT_SPI_CMD_SZ+4, length);

    	}

    }
    for(int i =0;i&amp;lt;=20;i++){
    	d[i]=dataRx_p[i];
    }
//
    if (SES_PORT_Free(rx_frame) != SES_PORT_OK) {
        response = SES_PORT_ERROR;
    }

    return response;
}

/**
 * @brief  FreeRTOS IRQ handler task &amp;#226;€” replaces ThreadSpiIrq().
 *
 * Blocks indefinitely on rxEventSem.  The GPIO ISR posts that semaphore
 * whenever MIO 62 sees a rising edge.  On each wake-up the task reads the
 * GPIO pin level and, if still asserted, processes one received message.
 *
 * The task self-deletes when stopTask is set (by SpiClose).
 */
static void TaskSpiIrq(void *pvParam)
{
    SES_PORT_threadData_t  localData;
    SES_PORT_threadData_t *param_p = (SES_PORT_threadData_t *)pvParam;

    /* Copy data locally and free the heap allocation */
    memcpy(&amp;amp;localData, param_p, sizeof(SES_PORT_threadData_t));
    SES_PORT_Free(param_p);

    for (;;) {
        /*
         * Block until GpioIsr posts the semaphore.
         * portMAX_DELAY = wait forever (mirrors INFINITE in the Windows port).
         */
        xSemaphoreTake(
            spiLinkDescription_g[localData.drvHdlIdx].rxEventSem,
            portMAX_DELAY);

        /* Check the exit flag set by SpiClose() */
        if (spiLinkDescription_g[localData.drvHdlIdx].stopTask) {
            break;
        }

        /*
         * Confirm the interrupt pin is still high before reading.
         * Replaces FT4222_GPIO_Read() &amp;#226;€” reads MIO 62 directly.
         */
//        if (XGpioPs_ReadPin(
//                &amp;amp;spiLinkDescription_g[localData.drvHdlIdx].gpioInst,
//                SES_PORT_IRQ_GPIO_PIN) ==1U) {//changed to 0
//            HandleReceivedMessage(localData.drvHdlIdx);
//        }
       while  (XGpioPs_ReadPin(
                   &amp;amp;spiLinkDescription_g[localData.drvHdlIdx].gpioInst,
                   SES_PORT_IRQ_GPIO_PIN) ==1U) {//changed to 0
               HandleReceivedMessage(localData.drvHdlIdx);
           }
    }

    /* Signal SpiClose() that we have exited */
    xSemaphoreGive(
        spiLinkDescription_g[localData.drvHdlIdx].rxEventSem);

    vTaskDelete(NULL);
}

/**
 * @brief  GPIO ISR &amp;#226;€” fires on the rising edge of MIO 62.
 *
 * Clears the interrupt status flag and posts rxEventSem so that TaskSpiIrq
 * wakes up.  Replaces the FT_EVENT_RXCHAR / SetEvent() mechanism.
 *
 * @param callbackRef  Pointer to the XGpioPs instance for this link.
 */
static void GpioIsr(void *callbackRef)
{
    XGpioPs       *gpio_p = (XGpioPs *)callbackRef;
    BaseType_t     xHigherPriorityTaskWoken = pdFALSE;
    u32            pendingIrq;

    /* Read which pins triggered */
    pendingIrq = XGpioPs_IntrGetStatusPin(gpio_p, SES_PORT_IRQ_GPIO_PIN);

    if (pendingIrq) {
        /* Clear the interrupt at the GPIO level */
        XGpioPs_IntrClearPin(gpio_p, SES_PORT_IRQ_GPIO_PIN);

        /*
         * Find the link whose gpioInst matches and post its rxEventSem.
         * In a single-link build this is always index 0; the loop makes
         * it robust for multi-link configurations (SES_PORT_MAX_SPI_LINKS &amp;gt; 1).
         */
        for (int i = 0; i &amp;lt; SES_PORT_MAX_SPI_LINKS; i++) {
            if (spiLinkDescription_g[i].initialized &amp;amp;&amp;amp;
                (&amp;amp;spiLinkDescription_g[i].gpioInst == gpio_p)) {
                xSemaphoreGiveFromISR(
                    spiLinkDescription_g[i].rxEventSem,
                    &amp;amp;xHigherPriorityTaskWoken);
                break;
            }
        }
    }

    /* Yield to a higher-priority task if one was unblocked */
    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}

/**
 * @brief  Scan the link-description table for a free slot.
 *
 * @return  Table index on success, -1 if all slots are occupied.
 */
static int GetLinkDescriptionEntry(void)
{
    int i;
    int freeEntry = -1;

    for (i = 0; i &amp;lt; SES_PORT_MAX_SPI_LINKS; i++) {
        if (spiLinkDescription_g[i].initialized == 0) {
            freeEntry = i;
            break;
        }
    }

    return freeEntry;
}

/**
 * @brief  Stop the IRQ task, disable the interrupt, and clean up resources.
 *
 * Replaces the Windows TerminateThread / FT4222_UnInitialize / FT_Close
 * sequence.
 */
static int SpiClose(int tblIndex)
{
    TickType_t waitTicks =
        pdMS_TO_TICKS(SES_PORT_SPI_WAIT_THREAD_STOP_MS);

    if (spiLinkDescription_g[tblIndex].irqTask == NULL) {
        DBG_INFO(&amp;quot;SpiClose: invalid task handle&amp;quot;);
        return SES_PORT_INVALID_PARAM;
    }

    /* &amp;#226;”€&amp;#226;”€ 1. Ask the IRQ task to exit and wake it up &amp;#226;”€&amp;#226;”€ */
    spiLinkDescription_g[tblIndex].stopTask = 1;
    xSemaphoreGive(spiLinkDescription_g[tblIndex].rxEventSem);

    /*
     * Wait for the task to re-post the semaphore as its exit handshake.
     * If it doesn&amp;#39;t respond within the timeout, we give up and return error.
     */
    if (xSemaphoreTake(spiLinkDescription_g[tblIndex].rxEventSem,
                       waitTicks) != pdTRUE) {
        return SES_PORT_ERROR;
    }

    /* &amp;#226;”€&amp;#226;”€ 2. Disable the GPIO interrupt &amp;#226;”€&amp;#226;”€ */
    XGpioPs_IntrDisablePin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN);

    XScuGic_Disconnect(&amp;amp;XInterruptController, XPAR_PSU_GPIO_0_INTR);

    /* &amp;#226;”€&amp;#226;”€ 3. Delete the FreeRTOS binary semaphore &amp;#226;”€&amp;#226;”€ */
    vSemaphoreDelete(spiLinkDescription_g[tblIndex].rxEventSem);
    spiLinkDescription_g[tblIndex].rxEventSem = NULL;

    /* &amp;#226;”€&amp;#226;”€ 4. Clear the link-description entry &amp;#226;”€&amp;#226;”€ */
    SES_PORT_WaitSemaphore(spiLinkDescription_g[tblIndex].spiProtectSem,
                           SES_PORT_PROTECTION_TIMEOUT);
    memset(&amp;amp;spiLinkDescription_g[tblIndex], 0,
           sizeof(SES_PORT_spiLinkDescription_t));
    /* NOTE: spiProtectSem is cleared by the memset above; do not signal
     * it after this point.  The SES_PORT_DeleteSemaphore() was called
     * implicitly when the slot was zeroed &amp;#226;€” if your RTOS heap requires
     * explicit deletion, call it before the memset. */

    return SES_PORT_OK;
}

// End Static Functions *******************************************************
&lt;/pre&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/Screenshot-from-2026_2D00_06_2D00_03-18_2D00_24_2D00_16.png" alt=" " /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/Screenshot-from-2026_2D00_06_2D00_03-18_2D00_24_2D00_38.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>ADIN6310 Fails to Calculate Mean Link Delay When Synchronizing with Raspberry Pi CM5 eth0</title><link>https://ez.analog.com/thread/604613?ContentTypeID=0</link><pubDate>Thu, 04 Jun 2026 12:52:31 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:4cf0b34d-21e5-4353-bc9c-0cf4d3f1f07e</guid><dc:creator>Katsu717</dc:creator><slash:comments>16</slash:comments><comments>https://ez.analog.com/thread/604613?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/604613/adin6310-fails-to-calculate-mean-link-delay-when-synchronizing-with-raspberry-pi-cm5-eth0/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello！&lt;/p&gt;
&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I am trying to synchronize time using IEEE 802.1AS-2020 with a Raspberry Pi CM5 as the Grandmaster(Time Transmitter) and an ADIN6310 as the TimeReceiver.&lt;/p&gt;
&lt;p&gt;The Raspberry Pi CM5 is running LinuxPTP (ptp4l), and the ADIN6310 is configured for IEEE 802.1AS-2020 gPTP.&lt;/p&gt;
&lt;p&gt;However, synchronization does not complete successfully.&lt;/p&gt;
&lt;p&gt;Using Wireshark, I can confirm that the following gPTP messages are being exchanged correctly between the Raspberry Pi CM5 and the ADIN6310:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Announce&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sync&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow_Up&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pdelay_Req&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pdelay_Resp&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pdelay_Resp_Follow_Up&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Despite this, the ADIN6310 never calculates the Mean Link Delay. The Mean Link Delay remains 0 ns, and the device does not achieve synchronization.&lt;/p&gt;
&lt;p&gt;One additional observation is that if I replace the Raspberry Pi CM5 &amp;nbsp;eth0 interface with a USB Ethernet adapter, synchronization works correctly and the Mean Link Delay is calculated as expected. The problem only occurs when using the CM5 &amp;nbsp;eth0 interface.&lt;/p&gt;
&lt;p&gt;The Raspberry Pi CM5 is running ptp4l with hardware timestamping enabled.&lt;/p&gt;
&lt;p&gt;Additional information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wireshark confirms that Pdelay_Resp and Pdelay_Resp_Follow_Up messages are exchanged.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the ADIN6310 status page, the Pdelay timestamp fields (T1&amp;ndash;T4) are populated.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;However, Mean Link Delay remains 0 ns.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Parent Dataset shows a Grandmaster Identity of 00-00-00-00-00-00-00-00.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Synchronization succeeds when using a USB Ethernet NIC on the Raspberry Pi, but fails when using the&amp;nbsp;CM5 eth0 interface.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Could there be any known compatibility issues with the Raspberry Pi CM5 &amp;nbsp;Ethernet MAC/PHY and the ADIN6310 gPTP implementation, or any additional settings required for IEEE 802.1AS-2020 interoperability?&lt;/p&gt;
&lt;p&gt;Thank you for your help.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/pastedimage1780577364153v2.png" alt=" " /&gt;&lt;br /&gt;&amp;uarr;GUI Candidate screen&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/pastedimage1780577125622v1.png" alt=" " /&gt;&lt;br /&gt;&amp;uarr;GUI Status screen&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/Screenshot-from-2026_2D00_06_2D00_04-21_2D00_23_2D00_19.png" alt=" " /&gt;&lt;br /&gt;&amp;uarr;ptp4l-configure File&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/Screenshot-from-2026_2D00_06_2D00_04-21_2D00_25_2D00_14.png" alt=" " /&gt;&lt;br /&gt;&amp;uarr;ptp4l&amp;nbsp;Execution Results&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Device not Responding</title><link>https://ez.analog.com/thread/604573?ContentTypeID=0</link><pubDate>Tue, 02 Jun 2026 11:31:04 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:414299a6-be09-4fa6-84b0-4160db8ee69b</guid><dc:creator>Kowsik</dc:creator><slash:comments>2</slash:comments><comments>https://ez.analog.com/thread/604573?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/604573/device-not-responding/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I am working on the ADIN3310 Industrial Ethernet Switch, for which I have already downloaded the driver from the software resources on the official ADIN3310 website.&lt;/p&gt;
&lt;p&gt;I am trying to configure the switch from the Zynq UltraScale+ MPSoC XAZU3EG on my custom board. I have the PS SPI from the Zynq block connected to the Ethernet switch and a GPIO connected to Timer0.&lt;/p&gt;
&lt;p&gt;I configured the Zynq block in Vivado by enabling the necessary MIO pins for the SPI signals and a GPIO for the Timer0 interrupts. On power-up, at the Timer0 pin of the Ethernet switch, I am able to see the 1.25 seconds high and 2 ms low signal as mentioned in the user guide.&lt;/p&gt;
&lt;p&gt;I generated the bitstream, exported the XSA, and also enabled the TTC for FreeRTOS. I then created a platform project for the XSA in xilfreertos10 instead of standalone. I initialized the driver as mentioned in the user guide and took the Windows example from GitHub, converting the SPI functions and other necessary things to a Vitis FreeRTOS-based implementation.&lt;/p&gt;
&lt;p&gt;I am also able to see the data transfer, but in the AddDevice() function, during the CheckMacFirmwareVersion() call, after sending the request, I am getting success. However, I am getting a semaphore timeout error. I also verified the IRQ by putting a breakpoint in the IRQ task, which is being hit, but the SPI read is returning all zeros.&lt;/p&gt;
&lt;p&gt;If I bypass the CheckMacFirmwareVersion() call and proceed to SES_InitializePorts(), I still get the same timeout error.&lt;/p&gt;
&lt;p&gt;int32_t SES_MX_GetInterfaces(sesID_t sesId,&lt;br /&gt; SES_interfaceDescriptor_t interfaceArray[],&lt;br /&gt; int32_t arrayLength)&lt;br /&gt;{&lt;br /&gt; int rv = SES_PORT_OK;&lt;br /&gt; int32_t retVal = SES_PORT_ERROR;&lt;/p&gt;
&lt;p&gt;RPC_sem_t sem = RPC_ReservePoolSem();&lt;/p&gt;
&lt;p&gt;rv = SES_GetInterfaces_non_blocking(sesId,&lt;br /&gt; interfaceArray,&lt;br /&gt; arrayLength,&lt;br /&gt; NULL,&lt;br /&gt; sem,&lt;br /&gt; &amp;amp;retVal);&lt;br /&gt; if (rv == SES_PORT_OK) {&lt;br /&gt; // request message sent successfully&lt;br /&gt; rv = SES_PORT_WaitSemaphore(sem, SES_PORT_BLOCK_TIMEOUT)&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;-------- here i&amp;nbsp; am getting timeout error&amp;nbsp;&lt;br /&gt; if (rv == SES_PORT_TIMEOUT) {&lt;br /&gt; // response timeout/error&lt;br /&gt; retVal = SES_PORT_TIMEOUT;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; else {&lt;br /&gt; retVal = rv;&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;i am also attaching the main ,example_config and spi porting layer for&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks and Regards,&lt;/p&gt;
&lt;p&gt;K.V.N.S.Kowisk&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;///////main code 

// Includes *******************************************************************

#include &amp;lt;stdio.h&amp;gt;

/* FreeRTOS */
#include &amp;quot;FreeRTOS.h&amp;quot;
#include &amp;quot;task.h&amp;quot;

/* Xilinx BSP */
#include &amp;quot;xparameters.h&amp;quot;
#include &amp;quot;xscugic.h&amp;quot;
#include &amp;quot;xil_exception.h&amp;quot;

/* SES */
#include &amp;quot;SES_example_config.h&amp;quot;
#include &amp;quot;SES_codes.h&amp;quot;

// End Includes ***************************************************************

// Macros *********************************************************************

/* Application task parameters */
#define SES_APP_TASK_STACK_WORDS    (2048U)
#define SES_APP_TASK_PRIORITY       (tskIDLE_PRIORITY + 1U)
#define SES_APP_TASK_NAME           &amp;quot;SES_App&amp;quot;

// End Macros *****************************************************************

// Global Variables ***********************************************************

/*
 * Single GIC instance shared across the whole application.
 * Declared extern in SES_PORT_SPI_interface.c so the SPI port layer can
 * connect the GPIO ISR without needing a separate init path.
 */
XScuGic XInterruptController;

// End Global Variables *******************************************************

// Static Function Prototypes *************************************************

static void vSesAppTask(void *pvParam);
static int  prvGicInit(void);

// End Static Function Prototypes *********************************************

// Functions ******************************************************************

/**
 * @brief  Zynq/FreeRTOS application entry point.
 *
 * Responsibilities:
 *   1. Initialise the ARM Generic Interrupt Controller (GIC).
 *   2. Enable ARM exceptions so interrupts are routed correctly.
 *   3. Create the SES application task.
 *   4. Start the FreeRTOS scheduler — never returns.
 */
int main(void)
{
    printf(&amp;quot;\n--START SES (Zynq FreeRTOS Port)--\n\n&amp;quot;);

    /* ── 1. Initialise the GIC ── */
    if (prvGicInit() != XST_SUCCESS) {
        printf(&amp;quot;GIC initialisation failed — halting.\n&amp;quot;);
        for (;;) {}   /* hang; inspect via debugger */
    }

    /* ── 2. Enable ARM exception handling ── */
    Xil_ExceptionEnable();

    /* ── 3. Create the SES application task ── */
    BaseType_t taskCreated = xTaskCreate(
                                 vSesAppTask,
                                 SES_APP_TASK_NAME,
                                 SES_APP_TASK_STACK_WORDS,
                                 NULL,
                                 SES_APP_TASK_PRIORITY,
                                 NULL);

    if (taskCreated != pdPASS) {
        printf(&amp;quot;Failed to create SES app task — halting.\n&amp;quot;);
        for (;;) {}
    }

    /* ── 4. Start scheduler — does not return ── */
    vTaskStartScheduler();

    /*
     * Reaching here means the scheduler failed to start (usually because
     * there is not enough heap for the idle task).
     * Check configTOTAL_HEAP_SIZE in FreeRTOSConfig.h.
     */
    printf(&amp;quot;Scheduler failed to start — halting.\n&amp;quot;);
    for (;;) {}

    return 0;   /* never reached; suppresses compiler warning */
}

// End Functions **************************************************************

// Static Functions ***********************************************************

/**
 * @brief  SES application task — equivalent to the original main() body.
 *
 * Runs AFTER the FreeRTOS scheduler has started.  All SES API calls that
 * create internal FreeRTOS objects (semaphores, tasks) are safe here.
 *
 * The task loops forever at the bottom so FreeRTOS always has at least one
 * user task alive (besides idle and the SES IRQ task).
 */
static void vSesAppTask(void *pvParam)
{
    (void)pvParam;

    /*
     * sesConfig() performs the full hardware + SES library initialisation:
     *   - Opens PS-SPI and XGpioPs (MIO 62)
     *   - Connects the GPIO ISR to the GIC
     *   - Creates the FreeRTOS IRQ handler task (TaskSpiIrq)
     *   - Calls SES_Init(), SES_AddHwInterface(), SES_AddDevice()
     *   - Pushes port configuration to ADIN3310 over SPI
     *
     *
     */
//    sesGetAppInfo_Example();

    if (SES_OK == sesConfig()) {

        /* Print ADIN3310 firmware version over SPI */
        sesGetAppInfo_Example();

        printf(&amp;quot;############ Configuring the Switch ###################\n&amp;quot;);

        /*
         * Run whichever protocol examples are enabled by compile-time flags
         * (TIME_SYNC, MSTP, FRER, LLDP_INIT, etc.).
         * This function may block in the interactive TIME_SYNC loop —
         * that is fine because TaskSpiIrq runs at a higher priority and
         * will still process incoming frames while this task is in scanf().
         */
        sesProtocolInitialization_Example();

    } else {
        printf(&amp;quot;SES initialisation failed !!!!\n&amp;quot;);
    }

    printf(&amp;quot;\n--END--\n&amp;quot;);

    /*
     * Keep the task alive.
     * Deleting the task here (vTaskDelete(NULL)) would be valid only if you
     * are certain no more SES callbacks will need this task&amp;#39;s stack.
     * Blocking on a long delay is the safe default.
     */
    for (;;) {
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

/**
 * @brief  Initialise the ARM Generic Interrupt Controller.
 *
 * Uses the single XScuGic instance (xInterruptController) that is shared
 * with SES_PORT_SPI_interface.c via the extern declaration there.
 *
 * @return XST_SUCCESS on success, XST_FAILURE on error.
 */
static int prvGicInit(void)
{
    XScuGic_Config *gicCfg_p;
    int             status;

    /* Look up the GIC hardware configuration from xparameters.h */
    gicCfg_p = XScuGic_LookupConfig(XPAR_PSU_ACPU_GIC_DEVICE_ID);
    if (gicCfg_p == NULL) {
        return XST_FAILURE;
    }

    /* Initialise the GIC driver */
    status = XScuGic_CfgInitialize(&amp;amp;XInterruptController,
                                   gicCfg_p,
                                   gicCfg_p-&amp;gt;CpuBaseAddress);
    if (status != XST_SUCCESS) {
        return XST_FAILURE;
    }

    /*
     * Connect the GIC interrupt handler to the ARM exception vector.
     * After this, any peripheral that raises a GIC SPI interrupt will be
     * routed through XScuGic_InterruptHandler automatically.
     */
    Xil_ExceptionRegisterHandler(
        XIL_EXCEPTION_ID_INT,
        (Xil_ExceptionHandler)XScuGic_InterruptHandler,
        &amp;amp;XInterruptController);

    return XST_SUCCESS;
}

// End Static Functions *******************************************************




////////ses_port_spi_interface


#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdint.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

/* FreeRTOS */
#include &amp;quot;FreeRTOS.h&amp;quot;
#include &amp;quot;task.h&amp;quot;
#include &amp;quot;semphr.h&amp;quot;

/* Xilinx BSP */
#include &amp;quot;xparameters.h&amp;quot;
#include &amp;quot;xspips.h&amp;quot;          /* PS SPI driver                                 */
#include &amp;quot;xgpiops.h&amp;quot;         /* PS GPIO driver                                */
#include &amp;quot;xscugic.h&amp;quot;         /* GIC interrupt controller                      */
#include &amp;quot;xil_exception.h&amp;quot;

/* SES driver */
#include &amp;quot;SES_debug.h&amp;quot;
#include &amp;quot;SES_port_api.h&amp;quot;
#include &amp;quot;SES_PORT_interface.h&amp;quot;

// End Includes ***************************************************************

// Macros, typedefs, enums ****************************************************

/* ── General ── */
#define SES_PORT_SPI_MAX_TYPE               (15)
#define SES_PORT_SPI_TFER_TYPE_MASK         (0xF)
#define SES_PORT_SEM_INFINITE_WAIT          (-1)

/* Milliseconds the Release path waits for the IRQ task to finish */
#define SES_PORT_SPI_WAIT_THREAD_STOP_MS    (5000U)

/* ── SPI frame commands (identical to reference) ── */
#define SES_PORT_SPI_READ_CMD               (0x80U)
#define SES_PORT_SPI_WRITE_CMD              (0x40U)
#define SES_PORT_SPI_CMD_SZ                 (1U)

/* ── Hardware IDs ── pull from xparameters.h; override here if needed ── */
#ifndef SES_SPI_DEVICE_ID
#  define SES_SPI_DEVICE_ID                 XPAR_PSU_SPI_0_DEVICE_ID
#endif

#ifndef SES_GPIO_DEVICE_ID
#  define SES_GPIO_DEVICE_ID                XPAR_PSU_GPIO_0_DEVICE_ID
#endif

/* MIO pin used as the ADIN3310 interrupt input */
#define SES_PORT_IRQ_GPIO_PIN               (62U)
#define gpio								(63U)

/*
 * SPI clock divider.
 * PS-SPI ref clock is typically 200 MHz on ZU+.
 * XSPIPS_CLK_PRESCALE_8  → 25 MHz  (ADIN3310 maximum).
 * Adjust if your ref clock differs.
 */
#define SES_SPI_CLK_PRESCALE                XSPIPS_CLK_PRESCALE_8

/* FreeRTOS task parameters for the IRQ handler task */
#define SES_PORT_IRQ_TASK_STACK_WORDS       (1024U)
#define SES_PORT_IRQ_TASK_PRIORITY          (configMAX_PRIORITIES - 1U)
#define SES_PORT_IRQ_TASK_NAME              &amp;quot;SES_SpiIrq&amp;quot;

/* ── Struct ── */
typedef struct {
    int               initialized;
    void             *spiProtectSem;   /* counting sem, max=1: SPI bus mutex  */
    SemaphoreHandle_t rxEventSem;      /* binary sem: ISR → IRQ task          */
    TaskHandle_t      irqTask;         /* FreeRTOS IRQ handler task           */
    volatile int      stopTask;        /* flag: ask the IRQ task to exit      */
    XSpiPs            spiInst;         /* Xilinx PS-SPI instance              */
    XGpioPs           gpioInst;        /* Xilinx PS-GPIO instance             */
    int               chipSelect;      /* SPI CS index (0 for single-device)  */
} SES_PORT_spiLinkDescription_t;

/* Passed through pvPortMalloc to the IRQ task on creation */
typedef struct {
    int drvHdlIdx;
} SES_PORT_threadData_t;

// End Macros, typedefs, enums ************************************************

// Global Variables ***********************************************************

static SES_PORT_spiLinkDescription_t
    spiLinkDescription_g[SES_PORT_MAX_SPI_LINKS] = { { 0 } };

/* Protects the spiLinkDescription_g[] table during Init/Release */
static void *dataTableProtectionSem_gp = NULL;

/*
 * Shared GIC handle.
 * The application must initialise this before calling SES_PORT_SPI_Init().
 * Declare it extern here so the SPI port can register its GPIO ISR.
 */
extern XScuGic XInterruptController;

// End Global Variables *******************************************************

// Static Function Prototypes *************************************************

static int  GetLinkDescriptionEntry(void);
static int  HandleReceivedMessage(int tblIndex);
static int  InitDrv(int tblIndex);
static int  SpiClose(int tblIndex);
static int  SpiRead(int tblIndex, uint16_t length, uint8_t *dataRx_p);
static void TaskSpiIrq(void *pvParam);
static void GpioIsr(void *callbackRef);

// End Static Function Prototypes *********************************************

// Functions ******************************************************************

/**
 * @brief  Initialise the SPI interface to the ADIN3310.
 *
 * Replaces the Windows FT4222 open/init sequence with XSpiPs + XGpioPs
 * initialisation.  The init parameter struct is SES_PORT_zynqSpiInitParams_t
 * (defined in SES_PORT_interface.h — see note in that file).
 *
 * @param[in]  param_p     Pointer to SES_PORT_zynqSpiInitParams_t.
 * @param[out] intfType_p  Set to SES_PORT_spiInterface on success.
 * @param[out] srcMac_p    Not used for SPI; may be NULL.
 *
 * @return  Non-negative interface handle on success, negative error code on failure.
 */
int SES_PORT_SPI_Init(void *param_p,
                      SES_PORT_intfType_t *intfType_p,
                      uint8_t *srcMac_p)
{
    int intfHandle;
    int response;
    SES_PORT_zynqSpiInitParams_t *initParams_p =
        (SES_PORT_zynqSpiInitParams_t *)param_p;

    (void)srcMac_p; /* not used for SPI */

    /* ── Parameter check ── */
    if ((param_p == NULL) || (intfType_p == NULL)) {
        return SES_PORT_INVALID_PARAM;
    }

    /* ── Create the table-protection semaphore once ── */
    if (dataTableProtectionSem_gp == NULL) {
        dataTableProtectionSem_gp = SES_PORT_CreateSemaphore(1, 1);
        if (dataTableProtectionSem_gp == NULL) {
            return SES_PORT_ERROR;
        }
    }

    SES_PORT_WaitSemaphore(dataTableProtectionSem_gp,
                           SES_PORT_PROTECTION_TIMEOUT);

    /* ── Find a free link-description slot ── */
    intfHandle = GetLinkDescriptionEntry();
    if (intfHandle &amp;lt; SES_PORT_OK) {
        SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);
        return SES_PORT_ERROR;
    }

    /* ── Per-link SPI-bus mutex (counting sem, max = 1) ── */
    spiLinkDescription_g[intfHandle].spiProtectSem =
        SES_PORT_CreateSemaphore(1, 1);
    if (spiLinkDescription_g[intfHandle].spiProtectSem == NULL) {
        SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);
        return SES_PORT_ERROR;
    }

    /*
     * ── IRQ event semaphore ──
     * Binary semaphore:  ISR calls xSemaphoreGiveFromISR(),
     *                    TaskSpiIrq() calls xSemaphoreTake().
     * Replaces the Windows CreateEvent(auto-reset) + WaitForSingleObject().
     */
    spiLinkDescription_g[intfHandle].rxEventSem =
        xSemaphoreCreateBinary();
    if (spiLinkDescription_g[intfHandle].rxEventSem == NULL) {
        SES_PORT_DeleteSemaphore(
            spiLinkDescription_g[intfHandle].spiProtectSem);
        SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);
        return SES_PORT_ERROR;
    }

    /* Store the chip-select index supplied by the caller */
    spiLinkDescription_g[intfHandle].chipSelect = initParams_p-&amp;gt;chipSelect;
    spiLinkDescription_g[intfHandle].stopTask   = 0;

    SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);

    /* ── Hardware init (SPI + GPIO + IRQ task) ── */
    response = InitDrv(intfHandle);
    if (response != SES_PORT_OK) {
        vSemaphoreDelete(spiLinkDescription_g[intfHandle].rxEventSem);
        SES_PORT_DeleteSemaphore(
            spiLinkDescription_g[intfHandle].spiProtectSem);
        return SES_PORT_ERROR;
    }

    spiLinkDescription_g[intfHandle].initialized = 1;
    *intfType_p = SES_PORT_spiInterface;

    return intfHandle;
}

/**
 * @brief  Release (close) the SPI interface.
 *
 * Signals the IRQ task to stop, waits up to SES_PORT_SPI_WAIT_THREAD_STOP_MS,
 * then tears down GPIO, SPI and semaphores.
 */
int SES_PORT_SPI_Release(int intfHandle)
{
    int rv = SES_PORT_OK;

    SES_PORT_WaitSemaphore(dataTableProtectionSem_gp,
                           SES_PORT_PROTECTION_TIMEOUT);

    if (!spiLinkDescription_g[intfHandle].initialized) {
        DBG_INFO(&amp;quot;SES_PORT_SPI_Release called before Initialization&amp;quot;);
        rv = SES_PORT_NOT_INITIALIZED;
    }

    if (rv == SES_PORT_OK) {
        rv = SpiClose(intfHandle);
        if (rv != SES_PORT_OK) {
            rv = SES_PORT_ERROR;
        }
    }

    SES_PORT_SignalSemaphore(dataTableProtectionSem_gp);

    return rv;
}

/**
 * @brief  Send a framed message to the ADIN3310 over SPI.
 *
 * Prepends the 1-byte WRITE command (0x40) then transfers the full frame
 * using XSpiPs_PolledTransfer() under the protection of the per-link mutex.
 *
 * @param[in] intfHandle  Handle returned by SES_PORT_SPI_Init().
 * @param[in] size        Payload size in bytes (NOT including command byte).
 * @param[in] data_p      Pointer to payload buffer (freed on success).
 *
 * @return SES_PORT_OK on success, negative error code on failure.
 */
int SES_PORT_SPI_SendMessage(int intfHandle, int size, void *data_p)
{
    int      result   = SES_PORT_ERROR;
    int      response = SES_PORT_ERROR;
    int i;
    int      spiFrmSz;
    int      count    = 0;
    int      status;
    uint8_t *tx_frame = NULL;

    /* Dummy RX buffer — XSpiPs always full-duplex */
    uint8_t *rx_dummy = NULL;

    if (!spiLinkDescription_g[intfHandle].initialized) {
        return SES_PORT_NOT_INITIALIZED;
    }

    if (data_p == NULL) {
        return SES_PORT_INVALID_PARAM;
    }

    /* Build TX frame: [0x40 | payload] */
    spiFrmSz = size + SES_PORT_SPI_CMD_SZ;

    result = SES_PORT_Malloc((void **)&amp;amp;tx_frame, spiFrmSz);
    if (result != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }

    result = SES_PORT_Malloc((void **)&amp;amp;rx_dummy, spiFrmSz);
    if (result != SES_PORT_OK) {
        SES_PORT_Free(tx_frame);
        return SES_PORT_ERROR;
    }

    tx_frame[0] = SES_PORT_SPI_WRITE_CMD;
    memcpy(tx_frame + SES_PORT_SPI_CMD_SZ, data_p, size);

    /* ── Take SPI bus mutex ── */
    SES_PORT_WaitSemaphore(spiLinkDescription_g[intfHandle].spiProtectSem,
                           SES_PORT_SEM_INFINITE_WAIT);

    /*
     * XSpiPs_PolledTransfer drives CS automatically when configured with
     * XSPIPS_MANUAL_START_OPTION disabled (the default after SetOptions).
//     */
//    while(1){
    status = XSpiPs_PolledTransfer(
                 &amp;amp;spiLinkDescription_g[intfHandle].spiInst,
                 tx_frame,
                 rx_dummy,
                 (u32)spiFrmSz);
//    for(i=0;i&amp;lt;1000;i++);
//    }

    SES_PORT_SignalSemaphore(spiLinkDescription_g[intfHandle].spiProtectSem);

    count = (status == XST_SUCCESS) ? spiFrmSz : 0;

    SES_PORT_Free(tx_frame);
    SES_PORT_Free(rx_dummy);

    if (count != spiFrmSz) {
        response = SES_PORT_ERROR;
    } else {
        response = SES_PORT_OK;
        SES_PORT_Free(data_p);   /* convention: caller&amp;#39;s buffer freed on OK */
    }

    return response;
}

/**
 * @brief  Return a human-readable string describing the SPI interface.
 *
 * The FT4222 device enumeration has no equivalent on Zynq; we return a
 * static description based on the BSP parameters instead.
 */
int32_t SES_PORT_SPI_GetInterfaceInfo(char *interfaceInfo_p,
                                      uint16_t bufferSize)
{
    if ((interfaceInfo_p == NULL) || (bufferSize == 0U)) {
        return SES_PORT_BUF_ERR;
    }

    int written = snprintf(interfaceInfo_p, bufferSize,
                           &amp;quot;0,Zynq-UltraScale-PS-SPI(dev=%d,gpio=%d);&amp;quot;,
                           (int)SES_SPI_DEVICE_ID,
                           (int)SES_PORT_IRQ_GPIO_PIN);

    return (written &amp;gt; 0) ? SES_PORT_OK : SES_PORT_BUF_ERR;
}

// End Functions **************************************************************

// Static Functions ***********************************************************

/**
 * @brief  Handle one incoming SPI message from the ADIN3310.
 *
 * Reads the 4-byte header, validates the length and transfer-type fields,
 * allocates a receive buffer, reads the payload, then hands everything to
 * SES_ReceiveMessage().  Logic is identical to the Windows reference.
 */
static int HandleReceivedMessage(int tblIndex)
{
    int      response = SES_PORT_OK;
    uint8_t  transferType;
    int16_t  txLength;
    int16_t  pad_to_block;
    uint32_t header   = 0U;
    int      rxLength;
    uint8_t *rx_frame = NULL;

    /* Step 1 – read the 4-byte header */
    response = SpiRead(tblIndex, sizeof(header), (uint8_t *)&amp;amp;header);
    if (response != SES_PORT_OK) {
        return response;
    }

    /* Step 2 – decode and validate length (lower 12 bits) */
    rxLength = (int)((uint16_t)(header &amp;amp; SES_PORT_SPI_LENGTH_MASK));
    if (rxLength != (int)(((~header &amp;gt;&amp;gt; SES_PORT_SPI_INVERTED_LENGTH_SHIFT) &amp;amp;
                           SES_PORT_SPI_LENGTH_MASK))) {
        return SES_PORT_ERROR;
    }

    /* Step 3 – decode and validate transfer type (4 bits) */
    transferType = (uint8_t)((header &amp;gt;&amp;gt; SES_PORT_SPI_TYPE_SHIFT) &amp;amp;
                             SES_PORT_SPI_TFER_TYPE_MASK);
    if (transferType != (uint8_t)(((~header &amp;gt;&amp;gt; SES_PORT_SPI_INVERTED_TYPE_SHIFT) &amp;amp;
                                   SES_PORT_SPI_TFER_TYPE_MASK))) {
        return SES_PORT_ERROR;
    }

    /* Step 4 – round up to block boundary */
    txLength     = (int16_t)(rxLength + SES_PORT_SPI_BLOCK_LENGTH - 1);
    txLength    &amp;amp;= (int16_t)(~(SES_PORT_SPI_BLOCK_LENGTH - 1));
    pad_to_block = txLength - (int16_t)rxLength;

    /* Step 5 – allocate and fill the payload buffer */
    response = SES_PORT_Malloc((void **)&amp;amp;rx_frame,
                               (int)(rxLength + pad_to_block));
    if (response != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }

    response = SpiRead(tblIndex, (uint16_t)(rxLength + pad_to_block), rx_frame);
    if (response != SES_PORT_OK) {
        (void)SES_PORT_Free(rx_frame);
        return response;
    }

    /* Step 6 – deliver to the SES stack */
    response = SES_ReceiveMessage(tblIndex,
                                  SES_PORT_spiInterface,
                                  rxLength,
                                  (void *)rx_frame,
                                  (-1),
                                  (0),
                                  NULL);
    SES_PORT_Free(rx_frame);
    return response;
}

/**
 * @brief  Initialise the PS-SPI peripheral, GPIO interrupt pin, and IRQ task.
 *
 * Replaces FT_OpenEx / FT4222_SPIMaster_Init / CreateThread.
 */
static int InitDrv(int tblIndex)
{
    int              rv;
    XSpiPs_Config   *spiCfg_p;
    XGpioPs_Config  *gpioCfg_p;
    int              xilStatus;
    SES_PORT_threadData_t *thStruct_p = NULL;
    BaseType_t        taskCreated;

    /* ── 1. Initialise PS-SPI ── */
    spiCfg_p = XSpiPs_LookupConfig(SES_SPI_DEVICE_ID);
    if (spiCfg_p == NULL) {
        return SES_PORT_ERROR;
    }

    xilStatus = XSpiPs_CfgInitialize(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    spiCfg_p,
                    spiCfg_p-&amp;gt;BaseAddress);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /*
     * ADIN3310 SPI: CPOL=0, CPHA=0 (mode 0), 8-bit, MSB first.
     * XSPIPS_MASTER_OPTION   – this device is the SPI master
     * XSPIPS_FORCE_SSELECT_OPTION – hardware drives CS automatically
     *                               (de-asserts after each transfer)
     */
    xilStatus = XSpiPs_SetOptions(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    XSPIPS_MASTER_OPTION |
                    XSPIPS_FORCE_SSELECT_OPTION);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    xilStatus = XSpiPs_SetClkPrescaler(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    SES_SPI_CLK_PRESCALE);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* Select the chip-select line */
    xilStatus = XSpiPs_SetSlaveSelect(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    (u8)spiLinkDescription_g[tblIndex].chipSelect);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* ── 2. Initialise PS-GPIO for interrupt pin (MIO 62) ── */
    gpioCfg_p = XGpioPs_LookupConfig(SES_GPIO_DEVICE_ID);
    if (gpioCfg_p == NULL) {
        return SES_PORT_ERROR;
    }

    xilStatus = XGpioPs_CfgInitialize(
                    &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
                    gpioCfg_p,
                    gpioCfg_p-&amp;gt;BaseAddr);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* Configure MIO 62 as input */
    XGpioPs_SetDirectionPin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN,
        0U);   /* 0 = input */

    /*
     * ── 3. Connect GPIO ISR to GIC ──
     *
     * XPAR_PSU_GPIO_0_INTR is the GIC SPI interrupt ID for the PS GPIO block.
     * All 78 MIO pins share this one GIC line; the ISR reads the interrupt
     * status register to identify which pin fired.
     */
    xilStatus = XScuGic_Connect(
                    &amp;amp;XInterruptController,
                    XPAR_PSU_GPIO_0_INTR,
                    (Xil_ExceptionHandler)GpioIsr,
                    (void *)&amp;amp;spiLinkDescription_g[tblIndex].gpioInst);
    if (xilStatus != XST_SUCCESS) {
        return SES_PORT_ERROR;
    }

    /* Rising-edge interrupt on MIO 62 */
    XGpioPs_SetIntrTypePin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN,
        XGPIOPS_IRQ_TYPE_EDGE_RISING);

    XGpioPs_IntrEnablePin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN);

    XScuGic_Enable(&amp;amp;XInterruptController, XPAR_PSU_GPIO_0_INTR);

    /* ── 4. Create the IRQ handler task ── */
    rv = SES_PORT_Malloc((void **)&amp;amp;thStruct_p,
                         sizeof(SES_PORT_threadData_t));
    if (rv != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }
    thStruct_p-&amp;gt;drvHdlIdx = tblIndex;

    /*
     * xTaskCreate() replaces CreateThread().
     * The task runs at the highest priority so interrupt-driven frames are
     * processed before any lower-priority application tasks — matching the
     * THREAD_PRIORITY_TIME_CRITICAL setting in the Windows reference.
     */
    taskCreated = xTaskCreate(TaskSpiIrq,
                              SES_PORT_IRQ_TASK_NAME,
                              SES_PORT_IRQ_TASK_STACK_WORDS,
                              (void *)thStruct_p,
                              SES_PORT_IRQ_TASK_PRIORITY,
                              &amp;amp;spiLinkDescription_g[tblIndex].irqTask);

    if (taskCreated != pdPASS) {
        SES_PORT_Free(thStruct_p);
        return SES_PORT_THREAD_FAIL;
    }

    return SES_PORT_OK;
}

/**
 * @brief  Low-level SPI read helper.
 *
 * Prepends the 1-byte READ command (0x80), performs a full-duplex polled
 * transfer, and copies the received payload (skipping the command echo byte)
 * into @p dataRx_p.
 *
 * Block-alignment padding is added on the TX side so the ADIN3310 SPI framing
 * is satisfied (identical calculation to the Windows reference).
 */
static int SpiRead(int tblIndex, uint16_t length, uint8_t *dataRx_p)
{
    int      response = SES_PORT_OK;
    int16_t  txLength;
    int16_t  pad_to_block;
    uint8_t *tx_frame = NULL;
    uint8_t *rx_frame = NULL;
    int      spiFrmSz;
    int      xilStatus;

    /* Round up to block boundary */
    txLength     = (int16_t)(length + SES_PORT_SPI_BLOCK_LENGTH - 1);
    txLength    &amp;amp;= (int16_t)(~(SES_PORT_SPI_BLOCK_LENGTH - 1));
    pad_to_block = txLength - (int16_t)length;

    spiFrmSz = (int)(SES_PORT_SPI_CMD_SZ + length + pad_to_block);

    /* Allocate TX and RX working buffers */
    response = SES_PORT_Malloc((void **)&amp;amp;tx_frame, spiFrmSz);
    if (response != SES_PORT_OK) {
        return SES_PORT_ERROR;
    }

    response = SES_PORT_Malloc((void **)&amp;amp;rx_frame, spiFrmSz);
    if (response != SES_PORT_OK) {
        (void)SES_PORT_Free(tx_frame);
        return SES_PORT_ERROR;
    }

    /* Build TX frame: READ command + zero padding */
    tx_frame[0] = SES_PORT_SPI_READ_CMD;
    memset(tx_frame + SES_PORT_SPI_CMD_SZ, 0x00U,
           (size_t)(spiFrmSz - SES_PORT_SPI_CMD_SZ));

    /* ── Take SPI bus mutex ── */
    SES_PORT_WaitSemaphore(spiLinkDescription_g[tblIndex].spiProtectSem,
                           SES_PORT_SEM_INFINITE_WAIT);

    xilStatus = XSpiPs_PolledTransfer(
                    &amp;amp;spiLinkDescription_g[tblIndex].spiInst,
                    tx_frame,
                    rx_frame,
                    (u32)spiFrmSz);

    SES_PORT_SignalSemaphore(spiLinkDescription_g[tblIndex].spiProtectSem);

    if (xilStatus != XST_SUCCESS) {
        response = SES_PORT_ERROR;
    }

    /* Free TX buffer */
    if (SES_PORT_Free(tx_frame) != SES_PORT_OK) {
        (void)SES_PORT_Free(rx_frame);
        return SES_PORT_ERROR;
    }

    /* Copy payload (skip the echoed command byte) into caller&amp;#39;s buffer */
    if (response == SES_PORT_OK) {
        memcpy(dataRx_p, rx_frame + SES_PORT_SPI_CMD_SZ, length);
    }

    if (SES_PORT_Free(rx_frame) != SES_PORT_OK) {
        response = SES_PORT_ERROR;
    }

    return response;
}

/**
 * @brief  FreeRTOS IRQ handler task — replaces ThreadSpiIrq().
 *
 * Blocks indefinitely on rxEventSem.  The GPIO ISR posts that semaphore
 * whenever MIO 62 sees a rising edge.  On each wake-up the task reads the
 * GPIO pin level and, if still asserted, processes one received message.
 *
 * The task self-deletes when stopTask is set (by SpiClose).
 */
static void TaskSpiIrq(void *pvParam)
{
    SES_PORT_threadData_t  localData;
    SES_PORT_threadData_t *param_p = (SES_PORT_threadData_t *)pvParam;

    /* Copy data locally and free the heap allocation */
    memcpy(&amp;amp;localData, param_p, sizeof(SES_PORT_threadData_t));
    SES_PORT_Free(param_p);

    for (;;) {
        /*
         * Block until GpioIsr posts the semaphore.
         * portMAX_DELAY = wait forever (mirrors INFINITE in the Windows port).
         */
        xSemaphoreTake(
            spiLinkDescription_g[localData.drvHdlIdx].rxEventSem,
            portMAX_DELAY);

        /* Check the exit flag set by SpiClose() */
        if (spiLinkDescription_g[localData.drvHdlIdx].stopTask) {
            break;
        }

        /*
         * Confirm the interrupt pin is still high before reading.
         * Replaces FT4222_GPIO_Read() — reads MIO 62 directly.
         */
        if (XGpioPs_ReadPin(
                &amp;amp;spiLinkDescription_g[localData.drvHdlIdx].gpioInst,
                SES_PORT_IRQ_GPIO_PIN) == 1U) {
            HandleReceivedMessage(localData.drvHdlIdx);
        }
    }

    /* Signal SpiClose() that we have exited */
    xSemaphoreGive(
        spiLinkDescription_g[localData.drvHdlIdx].rxEventSem);

    vTaskDelete(NULL);
}

/**
 * @brief  GPIO ISR — fires on the rising edge of MIO 62.
 *
 * Clears the interrupt status flag and posts rxEventSem so that TaskSpiIrq
 * wakes up.  Replaces the FT_EVENT_RXCHAR / SetEvent() mechanism.
 *
 * @param callbackRef  Pointer to the XGpioPs instance for this link.
 */
static void GpioIsr(void *callbackRef)
{
    XGpioPs       *gpio_p = (XGpioPs *)callbackRef;
    BaseType_t     xHigherPriorityTaskWoken = pdFALSE;
    u32            pendingIrq;

    /* Read which pins triggered */
    pendingIrq = XGpioPs_IntrGetStatusPin(gpio_p, SES_PORT_IRQ_GPIO_PIN);

    if (pendingIrq) {
        /* Clear the interrupt at the GPIO level */
        XGpioPs_IntrClearPin(gpio_p, SES_PORT_IRQ_GPIO_PIN);

        /*
         * Find the link whose gpioInst matches and post its rxEventSem.
         * In a single-link build this is always index 0; the loop makes
         * it robust for multi-link configurations (SES_PORT_MAX_SPI_LINKS &amp;gt; 1).
         */
        for (int i = 0; i &amp;lt; SES_PORT_MAX_SPI_LINKS; i++) {
            if (spiLinkDescription_g[i].initialized &amp;amp;&amp;amp;
                (&amp;amp;spiLinkDescription_g[i].gpioInst == gpio_p)) {
                xSemaphoreGiveFromISR(
                    spiLinkDescription_g[i].rxEventSem,
                    &amp;amp;xHigherPriorityTaskWoken);
                break;
            }
        }
    }

    /* Yield to a higher-priority task if one was unblocked */
    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}

/**
 * @brief  Scan the link-description table for a free slot.
 *
 * @return  Table index on success, -1 if all slots are occupied.
 */
static int GetLinkDescriptionEntry(void)
{
    int i;
    int freeEntry = -1;

    for (i = 0; i &amp;lt; SES_PORT_MAX_SPI_LINKS; i++) {
        if (spiLinkDescription_g[i].initialized == 0) {
            freeEntry = i;
            break;
        }
    }

    return freeEntry;
}

/**
 * @brief  Stop the IRQ task, disable the interrupt, and clean up resources.
 *
 * Replaces the Windows TerminateThread / FT4222_UnInitialize / FT_Close
 * sequence.
 */
static int SpiClose(int tblIndex)
{
    TickType_t waitTicks =
        pdMS_TO_TICKS(SES_PORT_SPI_WAIT_THREAD_STOP_MS);

    if (spiLinkDescription_g[tblIndex].irqTask == NULL) {
        DBG_INFO(&amp;quot;SpiClose: invalid task handle&amp;quot;);
        return SES_PORT_INVALID_PARAM;
    }

    /* ── 1. Ask the IRQ task to exit and wake it up ── */
    spiLinkDescription_g[tblIndex].stopTask = 1;
    xSemaphoreGive(spiLinkDescription_g[tblIndex].rxEventSem);

    /*
     * Wait for the task to re-post the semaphore as its exit handshake.
     * If it doesn&amp;#39;t respond within the timeout, we give up and return error.
     */
    if (xSemaphoreTake(spiLinkDescription_g[tblIndex].rxEventSem,
                       waitTicks) != pdTRUE) {
        return SES_PORT_ERROR;
    }

    /* ── 2. Disable the GPIO interrupt ── */
    XGpioPs_IntrDisablePin(
        &amp;amp;spiLinkDescription_g[tblIndex].gpioInst,
        SES_PORT_IRQ_GPIO_PIN);

    XScuGic_Disconnect(&amp;amp;XInterruptController, XPAR_PSU_GPIO_0_INTR);

    /* ── 3. Delete the FreeRTOS binary semaphore ── */
    vSemaphoreDelete(spiLinkDescription_g[tblIndex].rxEventSem);
    spiLinkDescription_g[tblIndex].rxEventSem = NULL;

    /* ── 4. Clear the link-description entry ── */
    SES_PORT_WaitSemaphore(spiLinkDescription_g[tblIndex].spiProtectSem,
                           SES_PORT_PROTECTION_TIMEOUT);
    memset(&amp;amp;spiLinkDescription_g[tblIndex], 0,
           sizeof(SES_PORT_spiLinkDescription_t));
    /* NOTE: spiProtectSem is cleared by the memset above; do not signal
     * it after this point.  The SES_PORT_DeleteSemaphore() was called
     * implicitly when the slot was zeroed — if your RTOS heap requires
     * explicit deletion, call it before the memset. */

    return SES_PORT_OK;
}

// End Static Functions *******************************************************

/////////////example_config




#include &amp;lt;stdio.h&amp;gt;

/* FreeRTOS — needed only for vTaskDelay() used in FIRMWARE_UPDATE path */
#include &amp;quot;FreeRTOS.h&amp;quot;
#include &amp;quot;task.h&amp;quot;

/* SES driver headers — unchanged from reference */
#include &amp;quot;SES_PORT_interface.h&amp;quot;
#include &amp;quot;SES_interface_management.h&amp;quot;
#include &amp;quot;SES_configuration.h&amp;quot;
#include &amp;quot;SES_codes.h&amp;quot;

// End Includes ***************************************************************

// Functions ******************************************************************

/**
 * @brief  Initialise the SES stack and configure the ADIN3310 switch ports.
 *
 * Call this once from your FreeRTOS application task (NOT from main() before
 * the scheduler starts) because SES_Init() and SES_AddHwInterface() internally
 * create FreeRTOS objects (semaphores, tasks).
 *
 * Sequence
 * ─────────
 *  1. SES_Init()            — initialise the SES library internals.
 *  2. SES_AddHwInterface()  — register the SPI transport (calls our
 *                             SES_PORT_SPI_Init() which sets up XSpiPs,
 *                             XGpioPs MIO-62, the GIC ISR, and the IRQ task).
 *  3. SES_AddDevice()       — tell the library which MAC address identifies
 *                             this ADIN3310 on the bus.
 *  4. SES_InitializePorts() — push the per-port PHY configuration to the
 *                             switch over SPI.
 *
 * @return SES_PORT_OK on success, negative SES error code on failure.
 */
int32_t sesConfig(void)
{
    int32_t  rv;
    uint8_t  sesPrimaryMac[6] = SES_PRIMARY_MAC;


    /*
     * Initialise to 0, not NULL.
     * interfaceId and deviceId are integers returned by the SES library;
     * assigning NULL (a pointer constant) causes a -Wint-conversion warning
     * with arm-none-eabi-gcc.
     */
    int      interfaceId = 0;
    sesID_t  deviceId    = 0;

    /* ── Port configurations ── */

    /*
     * ADIN6310 — 6-port configuration (kept for completeness; not used when
     * SES_PORT_COUNT == 3 and FIELD_SWITCH == 0).
     */
//    const SES_portInit_t portConfiguration6310[6] = {
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1300, { true, 0, 0, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 0, SES_phyADIN1300, { true, 0, 1, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 0, SES_phyADIN1300, { true, 0, 2, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 0, SES_phyADIN1300, { true, 0, 4, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 0, SES_phyADIN1300, { true, 0, 8, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 0, SES_phyADIN1300, { true, 0, 9, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } }
//    };

    /*
     * ADIN3310 — 3-port configuration.
     * This is the active path for your Zynq build (SES_PORT_COUNT == 3).
     */
    const SES_portInit_t portConfiguration3310[3] = {
        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1300, { true, 0, 0, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1300, { true, 0, 1, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1300, { true, 0, 2, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } }
    };

//    /* Field Switch Board — 6-port mixed ADIN1100/ADIN1300 configuration */
//    const SES_portInit_t portConfigurationFieldSwitch[6] = {
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1100, { true, 1, 0, SES_phySpeed10,   SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1100, { true, 1, 1, SES_phySpeed10,   SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1300, { true, 1, 6, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1300, { true, 1, 5, SES_phySpeed1000, SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1100, { true, 1, 2, SES_phySpeed10,   SES_phyDuplexModeFull, SES_autoMdix } },
//        { 1, SES_rgmiiMode, { 0, 0, 0 }, 1, SES_phyADIN1100, { true, 1, 3, SES_phySpeed10,   SES_phyDuplexModeFull, SES_autoMdix } }
//    };

    /* ── SES Configuration Over SPI ── */
#ifndef ENABLE_SPI

    /*
     * Register the three SPI transport function pointers.
     * These point to our FreeRTOS/Zynq implementations in
     * SES_PORT_SPI_interface.c — no change needed here.
     */
    SES_driverFunctions_t driverFunctions = {
        .init_p        = SES_PORT_SPI_Init,
        .release_p     = SES_PORT_SPI_Release,
        .sendMessage_p = SES_PORT_SPI_SendMessage
    };

    /*
     * Init parameters for the Zynq PS-SPI port.
     *
     * CHANGED: SES_PORT_ft4222InitParams_t  →  SES_PORT_zynqSpiInitParams_t
     *
     * The FT4222 struct had:
     *   .baseLocationId  — USB location ID, not applicable on Zynq
     *   .spiMode         — single/dual/quad, handled by XSpiPs options
     *
     * Our Zynq struct only needs:
     *   .chipSelect      — which CS line the ADIN3310 is on (0 for single device)
     *
     * SES_PORT_SPI_Init() reads this and passes chipSelect to
     * XSpiPs_SetSlaveSelect() during hardware initialisation.
     */
    SES_PORT_zynqSpiInitParams_t initParameter = {
        .chipSelect = 0    /* ADIN3310 is the only device on CS0 */
    };

    printf(&amp;quot;SES Configuration Over SPI (Zynq PS-SPI, MIO-62 IRQ)\n&amp;quot;);

    /* Step 1: Initialise SES library internals */
    rv = SES_Init();
    sesGetAppInfo_Example();
    if (rv == SES_PORT_OK) {

        /*
         * Step 2: Register the SPI hardware interface.
         *
         * Internally this calls SES_PORT_SPI_Init() which:
         *   a) Calls XSpiPs_CfgInitialize() — opens the PS-SPI peripheral
         *   b) Calls XGpioPs_CfgInitialize() — opens MIO GPIO
         *   c) Configures MIO pin 62 as input with rising-edge interrupt
         *   d) Connects GpioIsr() to the GIC
         *   e) Creates the FreeRTOS IRQ handler task (TaskSpiIrq)
         *
         * On return, interfaceId is a small integer index (e.g. 0) that
         * identifies this SPI link inside the SES routing layer.
         */
        rv = SES_AddHwInterface(&amp;amp;initParameter, &amp;amp;driverFunctions, &amp;amp;interfaceId);
        if (rv == SES_PORT_OK) {

            /*
             * Step 3: Tell SES the MAC address of the ADIN3310.
             * The library will embed this in the SPI frame headers so the
             * switch can identify the host.
             */
            rv = SES_AddDevice(interfaceId, sesPrimaryMac, &amp;amp;deviceId);
            if (rv == SES_PORT_OK) {

                /*
                 * Step 4: Push port configuration to the ADIN3310 over SPI.
                 * For a 3-port ADIN3310 with FIELD_SWITCH == 0, this sends
                 * portConfiguration3310[] to the switch.
                 */
                if (FIELD_SWITCH) {
//                    rv = SES_InitializePorts(SES_PORT_COUNT,
//                                            portConfigurationFieldSwitch);
                } else if (SES_PORT_COUNT == 6) {
//                    rv = SES_InitializePorts(SES_PORT_COUNT,
//                                            portConfiguration6310);
                } else {
                    rv = SES_InitializePorts(SES_PORT_COUNT,
                                            portConfiguration3310);
                }
            }
        }
    }

#else
    /*
     * SES Configuration Over Ethernet — retained for reference only.
     * This path is NOT used on Zynq (we use SPI).
     * Compile with -DENABLE_SPI to always take the SPI path above.
     */
    uint8_t hostMac[6] = HOST_MAC;

    SES_driverFunctions_t driverFunctions = {
        .init_p          = SES_PORT_ETH_Init,
        .release_p       = SES_PORT_ETH_Release,
        .sendMessage_p   = SES_PORT_ETH_SendMessage,
        .updateFilter_p  = SES_PORT_ETH_UpdateFilter
    };

    printf(&amp;quot;SES Configuration Over Ethernet\n&amp;quot;);

    rv = SES_Init();
    if (rv == SES_PORT_OK) {
        rv = SES_AddHwInterface(hostMac, &amp;amp;driverFunctions, &amp;amp;interfaceId);
        if (rv == SES_PORT_OK) {
            rv = SES_AddDevice(interfaceId, sesPrimaryMac, &amp;amp;deviceId);
            if (rv == SES_PORT_OK) {
                if (FIELD_SWITCH) {
                    rv = SES_InitializePorts(6, portConfigurationFieldSwitch);
                } else if (SES_PORT_COUNT == 6) {
                    rv = SES_InitializePorts(SES_PORT_COUNT, portConfiguration6310);
                } else {
                    rv = SES_InitializePorts(SES_PORT_COUNT, portConfiguration3310);
                }
            }
        }
    }
#endif

    return rv;
}

/* ── Helper: print firmware version info ── */
void sesGetAppInfo_Example(void)
{
    SES_appInfo_t appInfo;

    printf(&amp;quot;---------------------FIRMWARE DETAILS----------------------\n&amp;quot;);
    SES_GetFirmwareInfo(&amp;amp;appInfo, sizeof(appInfo));
    printf(&amp;quot;appInfoVersion :: %d\n&amp;quot;,  appInfo.appInfoVersion);
    printf(&amp;quot;buildNumber    :: %d\n&amp;quot;,  appInfo.buildNumber);
    printf(&amp;quot;name           :: %s\n&amp;quot;,  appInfo.name);
    printf(&amp;quot;part Number    :: %s\n&amp;quot;,  appInfo.partNum);
    printf(&amp;quot;Version        :: %s\n&amp;quot;,  appInfo.version);
    printf(&amp;quot;-----------------------------------------------\n\n&amp;quot;);
}

/**
 * @brief  Run whichever protocol examples are selected via compile-time flags.
 *
 * The interactive TIME_SYNC loop uses scanf() which works on the Vitis UART
 * console.  If your application has no stdin, remove or guard that block.
 *
 * CHANGED: Sleep(5000) → vTaskDelay(pdMS_TO_TICKS(5000))
 *   Sleep() is a Windows API (milliseconds).
 *   vTaskDelay() is the FreeRTOS equivalent — it yields the current task for
 *   the given number of ticks, letting other tasks run during the wait.
 *   pdMS_TO_TICKS() converts 5000 ms → the correct tick count regardless of
 *   configTICK_RATE_HZ.
 */
void sesProtocolInitialization_Example(void)
{
//    int input;

//    if (DEFAULT_SWITCH) {
//        printf(&amp;quot;Initializing the switch with default configurations !!\n&amp;quot;);
//        sesLldpInit_Example();
//        sesSingleASPtpInstance_Example();
//        sesMstpStackStart_Example();
//    }
//    else if (HSR_PRP) {
//        sesHsrPrp_Example();
//    }
//    else {
//        if (TIME_SYNC)          { sesTimeSync_Example(); }
//        if (SCHEDULED_TRAFFIC)  { sesScheduledTrafficGuardBand_Example(); }
//        if (FRAME_PREEMPTION)   { sesSetPreemptionConfigurationStructure_Example(); }
//        if (SENDLIST)           { sesSendlist_Example(); }
//        if (FRER)               { sesFrer_Example(); }
//        if (PSFP)               { sesPsfp_Example(); }
//        if (MRP)                { sesMrp_Example(); }
//        if (MSTP)               { sesMultipleMsti_Example(); }
//    }
//
//    if (EVENT)           { sesEvent_Example(); }
//    if (LLDP_INIT)       { sesLldpInit_Example(); }
//
//    if (FIRMWARE_UPDATE) {
//        sesFirmwareUpdate_Example();
//        /*
//         * CHANGED: Sleep(5000) → vTaskDelay(pdMS_TO_TICKS(5000))
//         *
//         * Wait 5 seconds for the firmware update to complete.
//         * vTaskDelay() blocks ONLY this task; the FreeRTOS scheduler
//         * continues running other tasks (IRQ handler, idle, etc.) during
//         * the wait.  Sleep() on Windows would have blocked the whole thread.
//         */
//        vTaskDelay(pdMS_TO_TICKS(5000));
//    }
//
//    if (IGMP_SNOOPING)   { sesIgmp_Example(); }
//    if (VLAN_CONFIG)     { sesVlan_Example(); }
//    if (SWITCH_EXAMPLE)  { sesSwitch_Example(); }
//    if (LAYER_2)         { seslayer2_Example(); }
//    if (UPDATE_SOURCE_MAC) { sesUpdateMACAddress_Example(); }
//
//    /*
//     * Interactive PTP parameter read loop.
//     * Runs on the Vitis UART console (stdin/stdout routed to UART0 by BSP).
//     * The while(1) here is intentional — the user types 9 to exit.
//     */
//    if (TIME_SYNC) {
//        while (1) {
//            printf(&amp;quot;\n&amp;quot;);
//            printf(&amp;quot;*-------- Time Sync Read Parameters --------\n&amp;quot;);
//            printf(&amp;quot;1: Read Port Specific Parameters\n&amp;quot;);
//            printf(&amp;quot;2: Read CMLDS Specific Parameters\n&amp;quot;);
//            printf(&amp;quot;9: Exit\n&amp;quot;);
//            scanf(&amp;quot;%d&amp;quot;, &amp;amp;input);
//            printf(&amp;quot;Option Entered :: %d\n&amp;quot;, input);
//
//            if (input == 9) {
//                break;
//            } else {
//                sesGetPtpParameters_Example(input);
//            }
//        }
//    }
}

// End Functions **************************************************************


//////memory and semaphore


// Includes *******************************************************************

#include &amp;quot;FreeRTOS.h&amp;quot;       /* pvPortMalloc / vPortFree                       */
#include &amp;quot;SES_port_api.h&amp;quot;

// End Includes ***************************************************************

// Macros, typedefs, enums ****************************************************

/*
 * The Windows reference implementation rounds every allocation up to 98 bytes
 * to mimic the fixed-block FIFO mempool behaviour of the original RTOS port.
 * Keep the same floor so that buffer-size assumptions in the SES driver hold.
 */
#define SES_PORT_MIN_BLK_SIZE   (98U)

// End Macros, typedefs, enums ************************************************

// Functions ******************************************************************

/**
 * @brief  Allocate a buffer of at least @p size bytes.
 *
 * Uses FreeRTOS heap (pvPortMalloc) so the allocation is thread-safe and
 * participates in the same heap-4/heap-5 pool as the rest of the application.
 *
 * @param[out] buf_pp  Receives the address of the allocated buffer.
 * @param[in]  size    Minimum number of bytes required.
 *
 * @retval SES_PORT_OK       Allocation succeeded; *buf_pp is valid.
 * @retval SES_PORT_BUF_ERR  buf_pp is NULL, or heap exhausted.
 */
int32_t SES_PORT_Malloc(void **buf_pp, int size)
{
    if (buf_pp == NULL) {
        return SES_PORT_BUF_ERR;
    }

    /* Mirror the reference: enforce a minimum block size */
    if (size &amp;lt; (int)SES_PORT_MIN_BLK_SIZE) {
        size = (int)SES_PORT_MIN_BLK_SIZE;
    }
    
    
    
    
    
#include &amp;quot;FreeRTOS.h&amp;quot;
#include &amp;quot;semphr.h&amp;quot;         /* SemaphoreHandle_t, xSemaphoreCreateCounting … */
#include &amp;quot;SES_port_api.h&amp;quot;

// End Includes ***************************************************************

// Macros, typedefs, enums ****************************************************

/*
 * Helper: convert the opaque (int*) handle used by the SES API back into
 * a FreeRTOS SemaphoreHandle_t.  Both are pointer-sized on Cortex-A53.
 */
#define TO_SEM_HANDLE(p)    ((SemaphoreHandle_t)(p))

// End Macros, typedefs, enums ************************************************

// Functions ******************************************************************

/**
 * @brief  Create a counting semaphore.
 *
 * @param[in] initCount  Initial semaphore count (tokens available immediately).
 * @param[in] maxCount   Maximum semaphore count.
 *
 * @return  Opaque handle cast to (int*) on success, NULL on failure.
 *
 * @note  maxCount must be &amp;gt;= initCount and &amp;gt;= 1, otherwise
 *        xSemaphoreCreateCounting() returns NULL.
 */
void* SES_PORT_CreateSemaphore(int initCount, int maxCount)
{
    SemaphoreHandle_t sem;

    sem = xSemaphoreCreateCounting((UBaseType_t)maxCount,
                                   (UBaseType_t)initCount);
    if (sem == NULL) {
        return NULL;
    }

    /*
     * Cast to (int*) to match the SES API signature.
     * The actual value stored is a FreeRTOS queue handle (pointer).
     */
    return (int*)sem;
}

/**
 * @brief  Wait (take) a semaphore, blocking for up to @p timeout ms.
 *
 * @param[in] semaphore_p  Handle returned by SES_PORT_CreateSemaphore().
 * @param[in] timeout      Maximum wait time in milliseconds.
 *                         Pass portMAX_DELAY_MS (0xFFFFFFFF) to wait forever.
 *
 * @retval SES_PORT_OK             Semaphore taken successfully.
 * @retval SES_PORT_TIMEOUT        Timed out before the semaphore was available.
 * @retval SES_PORT_INVALID_PARAM  semaphore_p is NULL.
 * @retval SES_PORT_ERROR          Unexpected FreeRTOS error.
 */
int32_t SES_PORT_WaitSemaphore(int* semaphore_p, int timeout)
{
    BaseType_t result;
    TickType_t ticks;

    if (semaphore_p == NULL) {
        return SES_PORT_INVALID_PARAM;
    }

    /*
     * Convert milliseconds → FreeRTOS ticks.
     * A timeout of portMAX_DELAY (0xFFFFFFFF ms) is treated as &amp;quot;wait forever&amp;quot;
     * so we propagate it as portMAX_DELAY ticks without overflow.
     */
    if ((uint32_t)timeout == 0xFFFFFFFFU) {
        ticks = portMAX_DELAY;
    } else {
        ticks = pdMS_TO_TICKS((uint32_t)timeout);
    }

    result = xSemaphoreTake(TO_SEM_HANDLE(semaphore_p), ticks);

    if (result == pdTRUE) {
        return SES_PORT_OK;
    }

    /*
     * FreeRTOS returns pdFALSE for both timeout and other failures;
     * in normal usage this is always a timeout (the semaphore was not
     * signalled within the allotted time).
     */
    return SES_PORT_TIMEOUT;
}

/**
 * @brief  Signal (give) a semaphore.
 *
 * @param[in] semaphore_p  Handle returned by SES_PORT_CreateSemaphore().
 *
 * @retval  1 (non-zero)          Semaphore signalled successfully.
 * @retval  0                     xSemaphoreGive() failed (count at maximum).
 * @retval  SES_PORT_INVALID_PARAM  semaphore_p is NULL.
 *
 * @note  Must NOT be called from an ISR.  If you need to signal from an ISR,
 *        replace xSemaphoreGive() with xSemaphoreGiveFromISR() and handle
 *        the higher-priority task wakeup accordingly.
 */
int32_t SES_PORT_SignalSemaphore(int* semaphore_p)
{
    BaseType_t result;

    if (semaphore_p == NULL) {
        return SES_PORT_INVALID_PARAM;
    }

    result = xSemaphoreGive(TO_SEM_HANDLE(semaphore_p));

    /*
     * Mirror the Windows port: return non-zero on success, zero on failure.
     * (The SES driver checks the return value as a boolean.)
     */
    return (result == pdTRUE) ? 1 : 0;
}

/**
 * @brief  Delete a semaphore and free its resources.
 *
 * @param[in] semaphore_p  Handle returned by SES_PORT_CreateSemaphore().
 *
 * @retval  1 (non-zero)          Semaphore deleted successfully.
 * @retval  SES_PORT_INVALID_PARAM  semaphore_p is NULL.
 *
 * @note  After this call the handle is invalid; do not use it again.
 *        Ensure no task is blocked on the semaphore before deleting it.
 */
int32_t SES_PORT_DeleteSemaphore(int* semaphore_p)
{
    if (semaphore_p == NULL) {
        return SES_PORT_INVALID_PARAM;
    }

    vSemaphoreDelete(TO_SEM_HANDLE(semaphore_p));

    /*
     * vSemaphoreDelete() is void — it always succeeds when given a valid
     * handle.  Return non-zero to indicate success, consistent with the
     * Windows reference implementation.
     */
    return 1;
}

// End Functions **************************************************************
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>ADIN6310 over SPI: FRER Stream Identification Failing (No R-TAGs, Listener Stats Zero)</title><link>https://ez.analog.com/thread/604537?ContentTypeID=0</link><pubDate>Sat, 30 May 2026 06:04:21 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:b11d7935-3e25-4331-a9d1-d59620ac984b</guid><dc:creator>prahadeeshDP</dc:creator><slash:comments>8</slash:comments><comments>https://ez.analog.com/thread/604537?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/604537/adin6310-over-spi-frer-stream-identification-failing-no-r-tags-listener-stats-zero/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;Hello!&lt;span class="emoticon" data-url="https://ez.analog.com/cfs-file/__key/system/emoji/1f64c.svg" title="Raised hands"&gt;&amp;#x1f64c;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node="5"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;I am trying to implement IEEE 802.1CB (FRER) using two ADIN6310 evaluation kits connected to Texas Instruments AM62P MPUs over SPI in Linux.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node="6"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;Standard switching and ping work perfectly with my general configuration, but I am struggling to get the FRER Talker and Listener proxies to actually encapsulate/decapsulate the traffic. Normal TCP data is successfully received, but the FRER mechanisms appear to be bypassed.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node="7"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="7" data-index-in-node="0"&gt;Hardware &amp;amp; Topology Setup:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul data-path-to-node="8"&gt;
&lt;li&gt;
&lt;p data-path-to-node="8,0,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="8,0,0" data-index-in-node="0"&gt;Host A (Talker Node):&lt;/b&gt; TI AM62P MPU connected via SPI to ADIN6310 Eval Kit 1.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="8,1,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="8,1,0" data-index-in-node="0"&gt;Host B (Listener Node):&lt;/b&gt; TI AM62P MPU connected via SPI to ADIN6310 Eval Kit 2.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="8,2,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="8,2,0" data-index-in-node="0"&gt;Topology:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul data-path-to-node="8,2,1"&gt;
&lt;li&gt;
&lt;p data-path-to-node="8,2,1,0,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;Host 1 (AM62p - 1) Eth0 &amp;lt;---&amp;gt; [Port 1] Talker ADIN6310 -1&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="8,2,1,1,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;Talker&amp;nbsp;ADIN6310 -1 [Port 4] &amp;lt;---&amp;gt; [Port 4] Listener ADIN6310 - 2 (Path A)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="8,2,1,2,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;Talker ADIN6310 -1 [Port 5] &amp;lt;---&amp;gt; [Port 5] Listener ADIN6310 - 2 (Path B)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="8,2,1,3,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;Listener ADIN6310 - 2 [Port 1] &amp;lt;---&amp;gt; Host 2&amp;nbsp;(AM62p - 2) Eth0&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node="9"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="9" data-index-in-node="0"&gt;Software &amp;amp; Configuration Context:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul data-path-to-node="10"&gt;
&lt;li&gt;
&lt;p data-path-to-node="10,1,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;VLAN: VLAN 100 allowed on all ports (&lt;code data-path-to-node="10,1,0" data-index-in-node="37"&gt;SES_SetVlanMode(100, 0xFFF)&lt;/code&gt;).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="10,2,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;MSTP is disabled. Using Unicast/Multicast miss return for basic loop protection between ports 4 and 5.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="10,3,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;I am utilizing the sample code logic provided in the driver user guide for Talker/Listener stream configuration but I changed the&amp;nbsp;redundant ports.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Config the VLAN 100 in both AM62p&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;"&gt;&lt;strong&gt;The Talker Script VLAN&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;code&gt;#!/bin/sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;echo &amp;quot;Configuring FRER Talker Network Interfaces...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# 1. Bring up the physical interface&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip link set eth0 up&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# 2. Create a VLAN 100 interface and assign an IP&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip link add link eth0 name eth0.100 type vlan id 100&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip addr add 192.168.100.1/24 dev eth0.100&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip link set eth0.100 up&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# 3. Force the ARP table to map the Listener&amp;#39;s IP to the hardcoded FRER Dest MAC&lt;/code&gt;&lt;br /&gt;&lt;code&gt;arp -s 192.168.100.2 C0:D6:0A:F9:6A:D8&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;echo &amp;quot;Talker setup complete! Ping traffic to 192.168.100.2 will now trigger FRER.&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;strong&gt;The Listener Script VLAN&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left:60px;"&gt;&lt;code&gt;#!/bin/sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;echo &amp;quot;Configuring FRER Listener Network Interfaces...&amp;quot;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# 1. Bring up the physical interface&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip link set eth0 up&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# 2. Create a VLAN 100 interface and assign an IP&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip link add link eth0 name eth0.100 type vlan id 100&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip addr add 192.168.100.2/24 dev eth0.100&lt;/code&gt;&lt;br /&gt;&lt;code&gt;ip link set eth0.100 up&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;echo &amp;quot;Listener setup complete! Ready to receive FRER traffic on 192.168.100.2.&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p data-path-to-node="11"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="11" data-index-in-node="0"&gt;The Issue:&lt;/b&gt; To test the FRER redundancy, I am running a simple unidirectional TCP client/server counter program from Host A to Host B. by VLAN&amp;#39;s IP&amp;nbsp;&lt;code&gt;192.168.100.2&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol start="1" data-path-to-node="12"&gt;
&lt;li&gt;
&lt;p data-path-to-node="12,0,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="12,0,0" data-index-in-node="0"&gt;Data Arrives:&lt;/b&gt; The server on Host B successfully receives the counter data.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="12,1,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="12,1,0" data-index-in-node="0"&gt;No FRER Tags: &lt;/b&gt;&amp;nbsp;I connected talker end to AM62P&amp;#39;s to 2 ethernet eth0 and etn1 for capture RTAG,&amp;nbsp; I perform a packet capture (pcap format) on the AM62P monitoring the FRER ports (Ports 4 &amp;amp; 5), there is no FRER ID / R-TAG sequence number injected into the packets.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-path-to-node="12,2,0"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="12,2,0" data-index-in-node="0"&gt;Zero Statistics:&lt;/b&gt; Polling &lt;code data-path-to-node="12,2,0" data-index-in-node="25"&gt;SES_FrerGetSequenceRecoveryStatistics()&lt;/code&gt; continuously returns &lt;code data-path-to-node="12,2,0" data-index-in-node="86"&gt;0&lt;/code&gt; for &lt;code data-path-to-node="12,2,0" data-index-in-node="92"&gt;rxPassedPkts&lt;/code&gt;, &lt;code data-path-to-node="12,2,0" data-index-in-node="106"&gt;rxDiscardedPkts&lt;/code&gt;, etc., despite data flowing.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-path-to-node="13"&gt;&lt;span style="font-family:verdana, geneva;font-size:inherit;"&gt;&lt;b data-path-to-node="13" data-index-in-node="0"&gt;Stream Identification Configuration code:&lt;br /&gt;&lt;span class="user-query-container"&gt;&lt;span class="user-query-bubble-with-background luminous-expanded enable-2026q1-formatting-improvements ng-star-inserted" data-test-id="luminous-expanded-bubble"&gt;&lt;span class="horizontal-container ng-star-inserted"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#121314;color:#bbbebf;font-family:Consolas, &amp;#39;Courier New&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;/*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;&amp;nbsp;* Copyright (c) 2024 - 2026 Analog Devices, Inc. All Rights Reserved.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;getopt.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;signal.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;inttypes.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;lt;sys/wait.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_PORT_interface.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_interface_management.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_codes.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_switch.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_port_api.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;EX_ses_example_app.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;EX_util.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_app_debug.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_frer.h&amp;quot;&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// Essential for FRER configurations&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; PORT_COUNT &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SPI_SPEED &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;16000000&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// Port Map Definitions&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORT_0 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORT_1 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORT_2 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORT_3 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;3&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORTMAP_PORT_0 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORTMAP_PORT_1 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORTMAP_PORT_2 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORTMAP_PORT_3 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;8&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORTMAP_PORT_4 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;16&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SES_PORTMAP_PORT_5 &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;32&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// Global Variables&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; AppRunningStatus &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;struct&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; sigaction sa;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// Function Prototypes&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;bool&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_IsSpiModeValid&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;spiMode&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_HardcodeBoardSettings&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;primaryMac&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;, &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;portCount&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;, &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;SES_portInit_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;void&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;handle_sigint&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;sig&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// FRER &amp;amp; Loop Protection Prototypes&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_ConfigureLoopPreventionMissReturn&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;void&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;configure_adin6310_talker&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;frerTableIndex&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;configure_adin6310_listener&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;listenerFrerTableIndex&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;sesGetFrerListenerStatistics&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;listenerFrerTableIndex&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;main&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;argc&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;, &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;char&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;**&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;argv&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; opt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; interfaceId &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;char&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; interface_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;NULL&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;Version :- FRER(Embedded AM62p)&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#if&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SPIDEV&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;char&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; readyPin_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;NULL&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#endif&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;primaryMac&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;hostMac&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portCount;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;SES_portInit_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[SES_MAX_PORTS] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;sesID_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; deviceId &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;SES_driverFunctions_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; driverFunctions &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#if&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SPIDEV&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;SES_PORT_SpidevInitParams_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; spiInitParams &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;while&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; ((opt &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;getopt&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(argc, argv, &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;p:g:s:lh&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;)) &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;!=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#else&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;SES_PORT_ft4222InitParams_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; spiInitParams &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {{&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;}, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, SES_PORT_SPI_notUsed};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;while&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; ((opt &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;getopt&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(argc, argv, &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;p:s:lh&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;)) &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;!=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#endif&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;switch&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (opt)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;case&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;#39;p&amp;#39;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; interface_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; optarg;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;break&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#if&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SPIDEV&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;#39;g&amp;#39;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; readyPin_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; optarg;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;break&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#endif&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;case&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;#39;s&amp;#39;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spiInitParams.spiMode &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;strtol&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(optarg, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;NULL&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;10&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;break&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;case&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;#39;h&amp;#39;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;default&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;Usage: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%s&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt; -p &amp;lt;interface&amp;gt; [-s &amp;lt;mode&amp;gt;]&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;argv&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;]);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;exit&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(EXIT_FAILURE);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// 1. Initialize Board Settings&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_HardcodeBoardSettings&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(primaryMac, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portCount, initializePorts_p);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;!=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;exit&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(EXIT_FAILURE);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// 2. Initialize SES Library&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (&lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_Init&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;() &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;!=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// 3. YOUR SPI/Ethernet Selection Logic&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (spiInitParams.spiMode &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_SPI_notUsed)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (&lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_StringToMacAddress&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(interface_p, hostMac, &lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;:&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;) &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;!=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;exit&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(EXIT_FAILURE);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverFunctions.init_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_ETH_Init;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverFunctions.release_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_ETH_Release;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverFunctions.sendMessage_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_ETH_SendMessage;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverFunctions.updateFilter_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_ETH_UpdateFilter;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_AddHwInterface&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(hostMac, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; driverFunctions, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; interfaceId);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; } &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;else&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#if&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; SPIDEV&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (interface_p)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spiInitParams.spiDevice &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; interface_p;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (readyPin_p)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spiInitParams.gpioPin &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; readyPin_p;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spiInitParams.speed &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SPI_SPEED;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#else&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (interface_p)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spiInitParams.deviceIndex &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;strtol&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(interface_p, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;NULL&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;10&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c586c0;"&gt;#endif&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverFunctions.init_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_SPI_Init;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverFunctions.release_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_SPI_Release;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; driverFunctions.sendMessage_p &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_SPI_SendMessage;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_AddHwInterface&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; spiInitParams, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; driverFunctions, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; interfaceId);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;!=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// 4. Add Device and Initialize ALL Ports&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_AddDevice&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;((&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;) interfaceId, primaryMac, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; deviceId);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_InitializePorts&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(portCount, initializePorts_p);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_ConfigureLoopPreventionMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// Print the Firmware Version&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;sesGetAppInfo&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// 6. Apply FRER Configuration&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; talkerFrerTableIndex &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; listenerFrerTableIndex &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;switch&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (Frer_Config_opt) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;case&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Talker&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;configure_adin6310_talker&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;talkerFrerTableIndex&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES Application Running: FRER Talker Proxy&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;break&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;case&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Listener&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;configure_adin6310_listener&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;listenerFrerTableIndex&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES Application Running: FRER Listener Proxy&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;break&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;default&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;No FRER Config&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// Setup ISR and Loop&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; sa.sa_handler &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; handle_sigint;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;sigaction&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SIGINT, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; sa, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;NULL&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;Setup Finish&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;while&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (AppRunningStatus)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;switch&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (Frer_Config_opt) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;case&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Talker&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;//printf(&amp;quot;.\n&amp;quot;); // Keepalive marker for Talker&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;break&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;case&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Listener&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;sesGetStatisticsPortStatistics&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;sesGetFrerListenerStatistics&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(listenerFrerTableIndex);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;break&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;default&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;:&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // No Frer config&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;No FRER Config&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;sleep&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Wait 2 seconds before repolling stats&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_RemoveHwInterface&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(interfaceId);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// Loop Protection (Approach 2 - Miss Return)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_ConfigureLoopPreventionMissReturn&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;void&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;bool&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; cutThrough;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; lookupDone;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilter;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;bool&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilterValid;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilter;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;bool&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilterValid;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_GetUnicastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort4, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; cutThrough, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; lookupDone, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilterValid, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;~&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;5&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // 1 &amp;lt;&amp;lt; 5 represents Port 5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_SetUnicastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort4, portMap, cutThrough, lookupDone, txFilter, txFilterValid, rxFilter, rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_GetMulticastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort4, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; cutThrough, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; lookupDone, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilterValid, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;~&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;5&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_SetMulticastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort4, portMap, cutThrough, lookupDone, txFilter, txFilterValid, rxFilter, rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_GetUnicastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort5, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; cutThrough, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; lookupDone, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilterValid, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;~&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // 1 &amp;lt;&amp;lt; 4 represents Port 4&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_SetUnicastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort5, portMap, cutThrough, lookupDone, txFilter, txFilterValid, rxFilter, rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_GetMulticastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort5, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; cutThrough, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; lookupDone, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; txFilterValid, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilter, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;~&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_SetMulticastMissReturn&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(SES_macPort5, portMap, cutThrough, lookupDone, txFilter, txFilterValid, rxFilter, rxFilterValid);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;Loop Protection (Miss Return Approach) Applied between Ports 4 &amp;amp; 5.&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// FRER Talker Configuration&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;configure_adin6310_talker&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;frerTableIndex&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;destinationMAC&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xC0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xD6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x0A&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xF9&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x6A&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xD8&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbFrer_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbStream_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; streamParameters;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbMaskAndMatch_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; maskAndMatchParameters;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memset&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbFrer_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memset&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; streamParameters, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbStream_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memset&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; maskAndMatchParameters, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbMaskAndMatch_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_SetVlanMode&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;100&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xFFF&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Allow VLAN 100 on all switch ports&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;SES_SetVlanMode Error :: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%d&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, rv);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// Stream table Parameters&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_streamIdentity.identificationType &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; TSN_nullStream;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;for&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; i &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;; i &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;; i&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;++&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; streamParameters.TSN_streamIdentity.TSN_parameters.TSN_nullStreamIdentification.destinationMac[i] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;destinationMAC&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_streamIdentity.TSN_parameters.TSN_nullStreamIdentification.vlan &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;100&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORTMAP_PORT_4 &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORTMAP_PORT_5;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_HardwareTableIndices.dynTblIdx[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_HardwareTableIndices.dynTblIdx[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_HardwareTableIndices.exTblruleId &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.useStreamtable &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_sequenceGeneration.reset &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_sequenceRecovery.individualRecovery &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_streamSplit.port &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_1;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.individualRecoveryTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.sequenceGenerationTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.sequenceRecoveryTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.txTransformTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_FrerConfigureTalkerProxyForStream&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; streamParameters, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; maskAndMatchParameters);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerTableIndex &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters.TSN_HardwareTableIndices.sequenceGenerationTblIdx;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// FRER Listener Configuration &amp;amp; Statistics&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;configure_adin6310_listener&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;listenerFrerTableIndex&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;destinationMAC&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xC0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xD6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x0A&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xF9&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x6A&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xD8&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbFrer_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbStream_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; streamParameters;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbMaskAndMatch_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; maskAndMatchParameters;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memset&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbFrer_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memset&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; streamParameters, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbStream_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memset&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; maskAndMatchParameters, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbMaskAndMatch_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_SetVlanMode&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;100&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xFFF&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_streamIdentity.identificationType &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; TSN_nullStream;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;for&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; i &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;; i &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;; i&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;++&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; streamParameters.TSN_streamIdentity.TSN_parameters.TSN_nullStreamIdentification.destinationMac[i] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;destinationMAC&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_streamIdentity.TSN_parameters.TSN_nullStreamIdentification.vlan &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;100&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#8b949e;"&gt;// Output reconstructed data strictly out of Port 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.portMap &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORTMAP_PORT_1;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_HardwareTableIndices.dynTblIdx[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_HardwareTableIndices.dynTblIdx[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.TSN_HardwareTableIndices.exTblruleId &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; streamParameters.useStreamtable &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_sequenceRecovery.algorithm &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; TSN_vector;&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Or TSN_match&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_sequenceRecovery.historyLength &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;5&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_sequenceRecovery.resetTimeout &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xffff&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_sequenceRecovery.takeNoSequence &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_sequenceRecovery.individualRecovery &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.individualRecoveryTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.sequenceGenerationTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.sequenceRecoveryTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; frerParameters.TSN_HardwareTableIndices.txTransformTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_FrerConfigureListenerProxyForStream&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; streamParameters, &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; maskAndMatchParameters);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; listenerFrerTableIndex &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; frerParameters.TSN_HardwareTableIndices.sequenceRecoveryTblIdx;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;sesGetFrerListenerStatistics&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int32_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;listenerFrerTableIndex&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (listenerFrerTableIndex &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;) &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbFrer_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; monitorParams;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memset&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; monitorParams, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;TSN_ieee802Dot1cbFrer_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; monitorParams.TSN_HardwareTableIndices.sequenceRecoveryTblIdx &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; listenerFrerTableIndex;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; monitorParams.TSN_sequenceRecovery.port &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;SES_FrerGetSequenceRecoveryStatistics&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;( &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; monitorParams);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (rv &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PORT_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;--- FRER Listener Stats ---&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot; Passed Packets (Valid) &amp;nbsp; :: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%llu&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, monitorParams.TSN_perPortPerStreamCounters.rxPassedPkts);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot; Discarded Packets (Dups) :: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%llu&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, monitorParams.TSN_perPortPerStreamCounters.rxDiscardedPkts);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot; Lost Packets &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%llu&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, monitorParams.TSN_perPortPerStreamCounters.rxLostPkts);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot; Out Of Order Packets &amp;nbsp; &amp;nbsp; :: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%llu&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, monitorParams.TSN_perPortPerStreamCounters.rxOutOfOrderPkts);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot; Rogue Packets &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%llu&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, monitorParams.TSN_perPortPerStreamCounters.rxRoguePkts);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; } &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;else&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;printf&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;Failed to read FRER stats: &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;%d&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#a5d6ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, rv);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; rv;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// Basic Environment Setup&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#8b949e;"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_HardcodeBoardSettings&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;primaryMac&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;, &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;portCount&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;, &lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;SES_portInit_t&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;mac_addr&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;] &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x7A&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xC6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xBB&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x11&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x11&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x11&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;memcpy&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;(primaryMac, mac_addr, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;6&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portCount &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; PORT_COUNT;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;for&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; i &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;; i &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;*&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; portCount; i&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;++&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].enablePort &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].mii &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_rgmiiMode;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyConfig.autoNegEnable &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;true&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyConfig.speed &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_phySpeed1000;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyConfig.duplexMode &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_phyDuplexModeFull;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyConfig.crossover &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_autoMdi;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].miiClkDelays.enableRxDelay &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_DISABLE_DELAY;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].miiClkDelays.enableTxDelay &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_DISABLE_DELAY;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].miiClkDelays.clkSelection &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_CLK_INTERNAL;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyConfig.phyPullupCtrl &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_PHY_PULLUP_INTERNAL;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; addrs&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;[]&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; {&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;8&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;9&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyConfig.phyAddr &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;addrs&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i];&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (i &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;==&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyType &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_phyUnmanaged;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].linkStatusPolarity &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_LINK_ACTIVE_LOW;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;else&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;initializePorts_p&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;[i].phyType &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_phyADIN1300;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; SES_OK;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;bool&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;EX_IsSpiModeValid&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;spiMode&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;return&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; (spiMode &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; spiMode &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#ff7b72;"&gt;void&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;"&gt;handle_sigint&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;(&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;int&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt; &lt;/span&gt;&lt;span style="color:#ffa657;"&gt;sig&lt;/span&gt;&lt;span style="color:#bbbebf;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; (&lt;/span&gt;&lt;span style="color:#ff7b72;"&gt;void&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;) sig;&lt;/span&gt;&lt;span style="color:#8b949e;"&gt; // Acknowledge parameter to stop compiler warning&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;&amp;nbsp; &amp;nbsp; AppRunningStatus &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;=&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#c9d1d9;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c9d1d9;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-path-to-node="13"&gt;From the below function I configured based on what given in driver guide&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node="13"&gt;&lt;br /&gt;&lt;code&gt;int32_t EX_ConfigureLoopPreventionMissReturn(void);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;int32_t configure_adin6310_talker(int32_t * frerTableIndex);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;int32_t configure_adin6310_listener(int32_t * listenerFrerTableIndex);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;int32_t sesGetFrerListenerStatistics(int32_t listenerFrerTableIndex);&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p data-path-to-node="13"&gt;I need to know is that anything I missed or I did some thing wrong.&lt;/p&gt;
&lt;p data-path-to-node="13"&gt;Thank you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Regarding the latency of ADIN6310/ADIN3310</title><link>https://ez.analog.com/thread/604094?ContentTypeID=0</link><pubDate>Fri, 24 Apr 2026 09:33:45 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:60fecf27-6df9-4323-8269-ee76484f8d57</guid><dc:creator>UBOTI</dc:creator><slash:comments>3</slash:comments><comments>https://ez.analog.com/thread/604094?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/604094/regarding-the-latency-of-adin6310-adin3310/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I&amp;#39;d like to confirm some details regarding the latency of the ADIN6310/ADIN3310.&lt;br /&gt;Q1: Is it acceptable to use the CUT-THROUGH value for SWITCH LATENCY regardless of whether HRS is used or not?&lt;br /&gt;Q2: The datasheet doesn&amp;#39;t mention RGMII; is it okay to treat SGMII PHY LATENCY as an approximation?&lt;br /&gt;Q3: Please provide any other documentation regarding the device&amp;#39;s latency.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>ADIN 3310 SPI host interface - MISO not responsive during bring-up</title><link>https://ez.analog.com/thread/603898?ContentTypeID=0</link><pubDate>Mon, 13 Apr 2026 17:15:47 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:323eb85e-eb9d-46b6-a4a1-5ed00d45bf52</guid><dc:creator>JoanGCL</dc:creator><slash:comments>2</slash:comments><comments>https://ez.analog.com/thread/603898?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/603898/adin-3310-spi-host-interface---miso-not-responsive-during-bring-up/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;We are currently evaluating the ADIN3310 using the EVAL‑ADIN3310 development board. Our intended workflow is to perform an initial configuration over SPI, and then hand over control to Ethernet Port 0.&lt;/p&gt;
&lt;p&gt;We have built and integrated the ADIN33x0 TSN driver library, and configured the switch to use single‑SPI as the host interface. During bring‑up, the initialization fails with a timeout in SES_AddDevice(), and we observe no activity on the MISO line. Additionally, TIMER0 remains low.&lt;/p&gt;
&lt;p&gt;On the bus side, CS, SCLK, and MOSI appear correct on the scope. The driver sends a 32‑bit SPI transaction (repeated twice), but no response is received from the ADIN3310. At this point, we would expect valid data to be driven on MISO for device enumeration.&lt;/p&gt;
&lt;p&gt;What we checked so far:&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;The device has valid firmware: We can successfully connect to the ADIN3310 by configuring Ethernet Port 0 as the host interface.&lt;br /&gt;- Bootstrapping pins are correctly set at reset: CS, TIMER0, TIMER1 = HIGH, TIMER2, TIMER3 = LOW.&lt;br /&gt;- Supply voltages: VDD and the SPI I/O voltage are both at 3.3 V.&lt;br /&gt;- SPI configuration: Clock reduced to 100 kHz and all four SPI modes tested.&lt;/p&gt;
&lt;p&gt;Given the timeout in SES_AddDevice(), we suspect the ADIN3310 is not responding as expected to the initial SPI discovery/handshake sequence.&lt;/p&gt;
&lt;p&gt;During SES_AddDevice(), is the ADIN3310 expected to drive MISO and return a valid response in single‑SPI mode, or is a prior configuration/state (e.g., TIMER0 assertion, SPI_SIO configuration, or alternate frame format) required before MISO becomes active?&lt;/p&gt;
&lt;p&gt;Any guidance on additional checks or common SPI bring‑up pitfalls around SES_AddDevice() would be greatly appreciated.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>#adin3310 SES AddDevice error -1</title><link>https://ez.analog.com/thread/603848?ContentTypeID=0</link><pubDate>Fri, 10 Apr 2026 08:04:56 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:303deec7-5905-49d5-a515-dfe369bed013</guid><dc:creator>Kiranmaye</dc:creator><slash:comments>14</slash:comments><comments>https://ez.analog.com/thread/603848?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/603848/adin3310-ses-adddevice-error--1/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&lt;br /&gt;&lt;br /&gt;I am trying to configure the ADIN3310 Ethernet switch using the SPI interface. I built the **ses-example-app** through cross-compilation on my Ubuntu host system, targeting a custom board based on the Kria K26 SoM running PetaLinux.&lt;br /&gt;&lt;br /&gt;After successfully building the application, I transferred the executable to the target board and attempted to run it with the following command:&lt;/p&gt;
&lt;p&gt;sudo LD_LIBRARY_PATH=/home/petalinux/adin3310/deploy_libs ./ses-example-app -f example-eval-6310.xml -g /dev/gpiochip0:5 -p /dev/spidev3.0 -m sysrepo-glue-srv/modules/ -s 1 -i production -l&lt;/p&gt;
&lt;p&gt;The application starts but fails during initialization with the following output:&lt;/p&gt;
&lt;p&gt;Interface Information:&lt;br /&gt;-- /dev/spidev3.0, /dev/spidev1.0&lt;br /&gt;&lt;br /&gt;Board settings file is located at example-eval-6310.xml&lt;br /&gt;Yang modules folder sysrepo-glue-srv/modules/&lt;br /&gt;libyang[0]: Value &amp;quot;00&amp;quot; was not found in the dictionary.&lt;br /&gt;libyang[1]: String &amp;quot;00&amp;quot; not freed from the dictionary, refcount 1&lt;br /&gt;Device MAC: 00:E0:22:12:34:56&lt;br /&gt;Init with device on: /dev/spidev3.0 ready_pin:/dev/gpiochip0:5 speed:16000000&lt;br /&gt;SES AddDevice error -1&lt;/p&gt;
&lt;p&gt;The failure occurs during the device initialization step (SES AddDevice error -1). SPI pin strapping is configured correctly, but no pulses are observed on Timer0. A dummy MAC address is used in the XML file. I am not sure whether this is related to SPI communication, GPIO configuration, device tree settings, or the libyang/sysrepo setup.&lt;br /&gt;&lt;br /&gt;Could you please help identify what might be causing this issue and what I should check or modify to resolve it?&lt;br /&gt;&lt;br /&gt;Thank you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>ADIN6310 custom hardware verification</title><link>https://ez.analog.com/thread/603700?ContentTypeID=0</link><pubDate>Tue, 31 Mar 2026 19:47:05 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:4d9d2bf0-f33b-4951-a354-4dc6f64c1ee3</guid><dc:creator>BW866</dc:creator><slash:comments>19</slash:comments><comments>https://ez.analog.com/thread/603700?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/603700/adin6310-custom-hardware-verification/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I have been working on verifying some custom hardware with the ADIN6310. I am having some troubles connecting to it, so I have yet to flash the firmware on it for the first time. My goal is to be able to flash firmware/configure the switch on ethernet port 0, which will be driven by a microcontroller. I am still waiting on the software for the switch to be configured by the microcontroller, so I am trying to verify the switch by connecting to port 1, which has a standard ethernet phy.&lt;/p&gt;
&lt;p&gt;I believe I have some simple things working and verified, but I am lacking the ability to connect to the host port via Ethernet. Here is what I have verified so far:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- I can strap the switch for SPI communication and see the pulses on the TIMER0 line every 1.25 seconds. This leads me to believe that my power/pinout/crystal oscillator is in a good enough shape to at least have the switch be able to communicate.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- When I strap the board for Ethernet communication, I have scoped the 125MHz clock signal (Px_TXC). It seems to be stable and clean.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am trying to connect to it via the &amp;quot;...tsn_evaluation_util.exe&amp;quot; and I am not having any luck. Should I be able to connect to a switch that has never had any firmware flashed to it?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I know there is a driver example on github (&lt;a href="https://github.com/analogdevicesinc/windows-project-for-adinx310"&gt;this guy&lt;/a&gt;). I went to download it, and I am not able to build the project. It says that I am missing header information. I have provided a screenshot below:&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/4532.pastedimage1774986246061v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Is there something I am missing for this project?&lt;/p&gt;
&lt;p&gt;Any help you can provide would be greatly appreciated.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;BW&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Missing files in the ADIN6310 driver software</title><link>https://ez.analog.com/thread/603550?ContentTypeID=0</link><pubDate>Mon, 23 Mar 2026 10:01:18 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:8c97381f-95fa-4e5d-a017-00384d0407df</guid><dc:creator>vaughany24</dc:creator><slash:comments>8</slash:comments><comments>https://ez.analog.com/thread/603550?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/603550/missing-files-in-the-adin6310-driver-software/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I am trying to control the ADIN6310 device over SPI from a processor running embedded linux. I was following UG2287 which led me to download&amp;nbsp;ADIN6310SWDR-Rel5.1.0 and try to build&amp;nbsp;the ses-example-app and ses-tsn-configuration-app into my yocto environment with the SPIDEV switch set.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I initially attempted to follow the README but had to adjust bitbake recipes a little bit to make sure CMAKE was seeing all the source files&amp;hellip;&amp;nbsp;Unfortunately, I am still struggling to get it to build as it seem there are some header files (REG_registrar.h &amp;amp; SHL_command_line_interface.h) missing whichsome of the other source files refer to.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Has anyone had any success with this driver software or know where these missing header files come from?&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
&lt;p&gt;Steve&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>TXP to TXN pins' impedance when chip power is off</title><link>https://ez.analog.com/thread/603027?ContentTypeID=0</link><pubDate>Thu, 26 Feb 2026 16:17:45 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:d8a19ae1-0d82-4df6-b9a2-8dd4beddff70</guid><dc:creator>jsohnis</dc:creator><slash:comments>8</slash:comments><comments>https://ez.analog.com/thread/603027?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/603027/txp-to-txn-pins-impedance-when-chip-power-is-off/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;P4 &amp;amp; P5 are two ADIN110 media converter ports of our T1L 3 port switch.&lt;/p&gt;
&lt;p&gt;They are typically used to pass T1L signal for concatenated links;&amp;nbsp;downstream link connects to P4 upstream link connects to P5. P3 is a node port on the switch and not of interest here.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Object:&amp;nbsp;&lt;/strong&gt;In the event of power fail (VDD=0V) to the switch, we&amp;nbsp;want to bypass the switch and&amp;nbsp;connect&amp;nbsp;P5&amp;nbsp;directly to P4. Basically, splicing P5 to P4 using a DPST relay for the wire pair.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve implemented and preliminarily tested this using a DPDT relay.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since P4 circuitry is still connected during power off for the splice to be enabled, the concern is that this may introduce a mismatching impedance to the spliced 110 ohm 2 wire cable.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We would like to know when ADIN1100 is powered off, is there a low impedance pathway between TXN &amp;amp; TXP pins, as the concern is that it would introduce 49.9+49.9 to the differential pair?&lt;/li&gt;
&lt;li&gt;Or are there potentially other concerns, other than the obvious that could be introduced by the external DPDT relay?&lt;/li&gt;
&lt;li&gt;Or turn on substrate diodes&amp;hellip; limited by 49.9 ohm are activated&lt;/li&gt;
&lt;li&gt;or...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks..jonathan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Number of supported simultaneous Modbus TCP connections</title><link>https://ez.analog.com/thread/602898?ContentTypeID=0</link><pubDate>Fri, 20 Feb 2026 20:06:25 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:75e3c776-a4a2-4187-9781-11c4f75b776c</guid><dc:creator>BClendenin</dc:creator><slash:comments>1</slash:comments><comments>https://ez.analog.com/thread/602898?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/602898/number-of-supported-simultaneous-modbus-tcp-connections/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;How many simultaneous / concurrent Modbus TCP connections are supported on the ADIN2299?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>No voltage on the DLDO1_1P1</title><link>https://ez.analog.com/thread/602756?ContentTypeID=0</link><pubDate>Fri, 13 Feb 2026 05:41:09 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:dfd566a4-b0aa-4835-9f42-4dfadeea2bdc</guid><dc:creator>AMike</dc:creator><slash:comments>3</slash:comments><comments>https://ez.analog.com/thread/602756?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/602756/no-voltage-on-the-dldo1_1p1/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello there,&lt;/p&gt;
&lt;p&gt;has anyone encountered this problem? The same rail, 3.3V, is used to supply the ADIN2111 AVDD_H, AVDD_L, and VDDIO supply rails. Both DVDDx_1P1 1.1 V rails are being supplied from their internally DLDOx_1P1&amp;nbsp;1.1 V power supplies. There is an output voltage of 1.1 V on the DLDO2_1P1, but the&amp;nbsp;DLDO1_1P1 output is 0 V. There are no shorts between DLDO1_1P1 and DVDD1_1P1 pins to the ground or any other pins or traces.&amp;nbsp; Do you know what the problem might be? Your help is greatly appreciated. &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Enable MDIO Clause 45 operations for ADIN6310</title><link>https://ez.analog.com/thread/602080?ContentTypeID=0</link><pubDate>Tue, 13 Jan 2026 14:57:54 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:af58cfc7-4f94-4d9e-88e0-fc64314aab6d</guid><dc:creator>Kistler</dc:creator><slash:comments>2</slash:comments><comments>https://ez.analog.com/thread/602080?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/602080/enable-mdio-clause-45-operations-for-adin6310/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi ADI,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We are trying to use an ADIN6310 (EVAL-ADIN6310) together with Marvell 88Q2221 Automotive Ethernet PHY that only supports Clause 45 commands for MDIO access.&lt;/p&gt;
&lt;p&gt;From the documentation it only follows that using concatenated device and register address in&amp;nbsp;SES_ReadPhyReg()&amp;nbsp;&lt;span&gt;ADIN6310&amp;nbsp;enables C45 register space access using four C22 operations, which we observe on the EVAL-ADIN6310.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Is it possible to enable Clause 45 commands to manage Marvell 88Q222X PHYs?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Best regards,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Vladimir&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Cascaded ADIN6310 switches</title><link>https://ez.analog.com/thread/600896?ContentTypeID=0</link><pubDate>Mon, 05 Jan 2026 11:28:22 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:38342672-a726-43fc-98d0-7af999f43d8b</guid><dc:creator>chethan310</dc:creator><slash:comments>3</slash:comments><comments>https://ez.analog.com/thread/600896?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/600896/cascaded-adin6310-switches/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Subject:&lt;/strong&gt; Assistance with Cascaded ADIN6310 Switch Configuration&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Message:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;We are working on configuring cascaded ADIN6310 switches with the following topology:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Processor (SPI) &amp;rarr; Switch1 (Port2 SGMII) &amp;rarr; Switch2 (Port3 SGMII) &amp;rarr; Switch3 (Port2 SGMII)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For two switches, the configuration works as expected. However, when we attempt to configure the third switch using &lt;code&gt;SES_AddDevice()&lt;/code&gt;, we encounter the following issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SES_AddDevice()&lt;/code&gt; returns an error (&lt;code&gt;SES_AddDeviceError -1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The third switch does not respond on the expected MAC or the default MAC.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have followed the daisy-chain code snippet provided in the ADIN6310 software manual. For two switches, this approach works fine. The manual also mentions that &lt;em&gt;&amp;ldquo;the application is responsible for adding static table entries.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My questions are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is this daisy-chain configuration supported for three switches?&lt;/li&gt;
&lt;li&gt;If yes, what is the correct procedure to configure the third switch?
&lt;ul&gt;
&lt;li&gt;Should we add static forwarding entries manually for SES control packets?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The manual provides examples for a star configuration where Switch1 configures all other switches directly. How should we adapt this for a cascaded setup?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Please advise on the recommended approach or share any example code for adding static entries in a daisy-chain configuration.&lt;/p&gt;
&lt;p&gt;Thank you for your support.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Using switch to extend number of network ports in host processor</title><link>https://ez.analog.com/thread/601225?ContentTypeID=0</link><pubDate>Wed, 26 Nov 2025 23:45:58 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:664e772c-de58-4599-8d0c-905917c3a0c2</guid><dc:creator>harrisonNoja</dc:creator><slash:comments>6</slash:comments><comments>https://ez.analog.com/thread/601225?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/601225/using-switch-to-extend-number-of-network-ports-in-host-processor/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;We are currently using the ADIN6310 switch as a way to expand the number of network ports in our existing embedded Linux product as well as utilise some of the high level features&amp;nbsp;to off load these from our main processor.&lt;/p&gt;
&lt;p&gt;I am&amp;nbsp;currently using Logical Mac groups as well as&amp;nbsp;adding an entry into the static table for each of the mac groups to let all mac addresses pass through (passing 00:00:00:00:00:00 in MAC address mask) the specific network port and adding a tag on ingress.&lt;/p&gt;
&lt;p&gt;These features&amp;nbsp;seem to be targeting L2 traffic however for our use case we would like to&amp;nbsp;use these features for L3 traffic also.&lt;/p&gt;
&lt;p&gt;This is currently working for both L2 and L3 traffic and I have validated with basic network packets (Ethernet &amp;amp; IP) however have not yet done extensive testing.&amp;nbsp;There is no documentation outlining this and I was just wondering if this is&amp;nbsp;an expected use case for this switch and if there are any other features I could be utilising for this?&lt;/p&gt;
&lt;p&gt;Thank you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Base configuration for ADIN6310</title><link>https://ez.analog.com/thread/601038?ContentTypeID=0</link><pubDate>Wed, 19 Nov 2025 18:17:48 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:3fdf8874-5ad7-4f5a-a0a0-48d4fd584d5d</guid><dc:creator>BW866</dc:creator><slash:comments>2</slash:comments><comments>https://ez.analog.com/thread/601038?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/601038/base-configuration-for-adin6310/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am nearing the process of getting a board made with the ADIN6310. I understand that it is a managed switch with a lot of configuration ability. I am curious though, if our purpose was to use it as a regular ethernet switch, would that require any interaction from the host? I ask because we plan on using the TSN features at some point in the future, but for our testing and software development, I would like to know what needs to be done in order for the device to function as a regular switch.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;BW&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>ADIN6310 Web GUI – Error When Selecting 802.1AS in Time Synchronization</title><link>https://ez.analog.com/thread/600751?ContentTypeID=0</link><pubDate>Mon, 10 Nov 2025 10:23:36 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:67e0752a-2c4c-4c2f-84e7-aa4790a8c22d</guid><dc:creator>ThejasKumar</dc:creator><slash:comments>1</slash:comments><comments>https://ez.analog.com/thread/600751?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/600751/adin6310-web-gui-error-when-selecting-802-1as-in-time-synchronization/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;When 802.1AS is selected in the ADIN6310 Time Synchronization section of the web GUI, an error occurs and the page fails to load. I have attached a screenshot for your reference.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/pastedimage1762769803133v1.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>ADIN3310 VDDIO_B</title><link>https://ez.analog.com/thread/600598?ContentTypeID=0</link><pubDate>Tue, 04 Nov 2025 13:43:01 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:cd9a40a6-f81b-4462-86a6-38c973c906e8</guid><dc:creator>mxjnk</dc:creator><slash:comments>1</slash:comments><comments>https://ez.analog.com/thread/600598?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/600598/adin3310-vddio_b/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello,&amp;nbsp;&lt;br /&gt;I&amp;#39;m designing a product using the ADIN3310 together with ADIN1300 for two gigabit Base-T ports and one gigabit host port.&lt;br /&gt;In the datasheet under the section Power consumption and thermal considerations it says &amp;quot; When operating at 1 Gbps on all six ports, use VDDIO_B at 1.8 V or 2.5 V. Operating at VDDIO_B = 3.3 V when all ports are at a 1 Gbps speed is not supported&amp;quot;.&lt;br /&gt;Does this &amp;quot;Operating at VDDIO_B = 3.3 V when all ports are at a 1 Gbps speed is not supported&amp;quot; also apply to the three port version of the chip or can i use 3.3V for VDIO_B when both VDDIO_B ports and the VDDIO_A port are running 1Gbps RGMII?&lt;br /&gt;&lt;br /&gt;Best Regards&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>FRER Configuration, Setup, and Status - Seeking Monitoring Guidance</title><link>https://ez.analog.com/thread/600044?ContentTypeID=0</link><pubDate>Tue, 14 Oct 2025 10:11:29 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:c3c0e5d6-c8bd-42ab-8d04-f343a62898a7</guid><dc:creator>Dhevak</dc:creator><slash:comments>11</slash:comments><comments>https://ez.analog.com/thread/600044?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/600044/frer-configuration-setup-and-status---seeking-monitoring-guidance/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;FRER Configuration, Setup, and Status - Seeking Monitoring Guidance&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I&amp;#39;m implementing a Fault-Tolerant Redundancy (FRER, IEEE 802.1CB) configuration across two switches and two end devices (AM62p boards) to establish a redundant ring network.&amp;nbsp;&lt;br /&gt;I&amp;#39;ve observed the status counters on the Listener switch and now seek advice on the best way to monitor the replicated data transmission across the FRER ring using a host port,&amp;nbsp;&lt;br /&gt;specifically via Wireshark on Switch 1.&lt;br /&gt;&lt;br /&gt;The core question is: How can I observe the data duplication (replication) that FRER creates, given that the Listener switch (Switch 2) removes the duplicate frames before they reach the end device (AM62p board 2)?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Network Configuration Overview&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The setup consists of an FRER ring connecting two switches (Switch 1 and Switch 2), with the Talker (AM62p brd 1) connected to Switch 1 and the Listener (AM62p brd 2) connected to Switch 2.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1.1. Switch 1 (Talker Side)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Component&amp;nbsp; &amp;nbsp; Configuration Details&lt;br /&gt;FRER Config&amp;nbsp; &amp;nbsp; Unicast/Multicast Miss Config: Port 1 and Port 2 set to 0.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Stream Table: For Ports 1, 2, 3. Identification Type: Source MAC / VLAN. VLAN: 100. Source MAC: 08-04-b4-31-12-42.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Talker Configuration: On Port 3 (connected to AM62p brd 1).&lt;br /&gt;VLAN Config&amp;nbsp; &amp;nbsp; VLAN 100: Learn and forward for Ports 1, 2, 3.&lt;br /&gt;MSTP Exception&amp;nbsp; &amp;nbsp; VLAN 100 added to the MSTP exception list.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/FRER_5F00_1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/1732.vlan.png" alt=" " /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/MSTSP_5F00_1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.2. Switch 2 (Listener Side)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Component&amp;nbsp; &amp;nbsp; Configuration Details&lt;br /&gt;FRER Config&amp;nbsp; &amp;nbsp; Unicast/Multicast Miss Config: Port 0 and Port 1 set to 0.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Stream Table: For Ports 0, 1, 2. Identification Type: Source MAC / VLAN. VLAN: 100. Source MAC: 08-04-b4-31-12-42.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Listener Configuration: On Port 2 (connected to AM62p brd 2).&lt;br /&gt;VLAN Config&amp;nbsp; &amp;nbsp; VLAN 100: Learn and forward for Ports 0, 1, 2.&lt;br /&gt;MSTP Exception&amp;nbsp; &amp;nbsp; VLAN 100 added to the MSTP exception list.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/FRER_5F00_2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/VLAN_5F00_2.png" alt=" " /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/MSTP_5F00_2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1.3. End Devices&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Device&amp;nbsp; &amp;nbsp; Configuration Details&lt;br /&gt;AM62p brd 1 (Talker)&amp;nbsp; &amp;nbsp; VLAN ID 100 created and IP configured. Runs simple client to generate traffic. Source MAC: 08-04-b4-31-12-42.&lt;br /&gt;AM62p brd 2 (Listener)&amp;nbsp; &amp;nbsp; VLAN ID 100 created and IP configured. Runs simple server to receive data via VLAN 100. Crucially, no duplicate data is received.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Observed FRER Status (Switch 2 - Listener)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The status counters on the Listener Switch (Switch 2) demonstrate the FRER functionality, specifically the sequence reconciliation logic.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.1. Status with Both Ethernet Ports Connected (Redundant Path Active)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Counter&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Value&amp;nbsp; &amp;nbsp; Interpretation&lt;br /&gt;Passed-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 114&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Packets successfully forwarded to the Listener device.&lt;br /&gt;Discarded-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 342&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Significantly high count. These are the replicated frames discarded by the Sequence Reconciliation Function as they were duplicates of frames already received and passed. &amp;rarr; This confirms the data duplication and reconciliation is working.&lt;br /&gt;Out-of-order-pkts&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;Rogue-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;Lost-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/STS_5F00_1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2.2. Status with One Cable Removed (Single Path Active)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Counter&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Value&amp;nbsp; &amp;nbsp; Interpretation&lt;br /&gt;Passed-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 36&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Packets successfully forwarded. (Fewer total packets due to reduced test duration/traffic).&lt;br /&gt;Discarded-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; As expected. With only one path, no duplicate frames arrive, and thus no packets are discarded by the reconciliation function.&lt;br /&gt;Out-of-order-pkts&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;Rogue-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;Lost-pkts&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://ez.analog.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/913/STS_5F00_2.png" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. Monitoring Question and Proposed Approach&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The status counters confirm that Switch 1 is replicating the traffic and Switch 2 is reconciling it. However, since the duplicate frames are removed at Switch 2, I cannot capture the duplicated data on the AM62p brd 2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Critical Negative Observation During Monitoring Attempt:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When I configured a host port on Switch 1 for monitoring and set it as a standard &amp;quot;&lt;strong&gt;learn and forward&lt;/strong&gt;&amp;quot; port while mirroring traffic from the ring ports:&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; The entire network bandwidth was severely reduced.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; The switch started flooding (dumping) data out of many ports.&lt;br /&gt;&lt;br /&gt;This behavior is consistent with MAC address flapping caused by the two identical,&amp;nbsp;&lt;br /&gt;replicated frames (Stream A and Stream B, both from MAC: 08&amp;minus;04&amp;minus;b4&amp;minus;31&amp;minus;12&amp;minus;42) hitting the switch&amp;#39;s MAC address table via the two mirrored ports simultaneously.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Question:&lt;br /&gt;&lt;br /&gt;What is the recommended method to monitor the duplicated traffic (the two distinct streams of identical, sequenced packets) that is traversing the FRER ring?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>TSN IEEE 802.1AS , ADIN6310 gPTP Slave Fails to Detect/Sync to AM62 Master (BMCA Conflict)</title><link>https://ez.analog.com/thread/599844?ContentTypeID=0</link><pubDate>Mon, 06 Oct 2025 12:40:22 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:ea598bcf-dc75-4d88-a2e1-2169ac1436b7</guid><dc:creator>Dhevak</dc:creator><slash:comments>6</slash:comments><comments>https://ez.analog.com/thread/599844?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/599844/tsn-ieee-802-1as-adin6310-gptp-slave-fails-to-detect-sync-to-am62-master-bmca-conflict/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;ADIN6310(Master) with -AM62 (as slave) (Peer-to-Peer Mode)&lt;br /&gt;&lt;br /&gt;ADIN 6310 as Master configuration&lt;br /&gt;&lt;br /&gt;ref :image 1&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:464px;max-width:826px;" height="464" src="https://ez.analog.com/resized-image/__size/1652x928/__key/communityserver-discussions-components-files/913/4034.image-1.png" width="826" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;Am62 configuration as Slave&amp;nbsp;&lt;br /&gt;&lt;br /&gt;command: ptp4l -i eth0 -H -2 -m -q -l 6 -f gptp_custom.cfg&lt;br /&gt;&lt;br /&gt;gptp_custom.cfg&lt;br /&gt;[global]&lt;br /&gt;transportSpecific&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;br /&gt;domainNumber&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;br /&gt;clientOnly&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;br /&gt;logSyncInterval&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -3&lt;br /&gt;logAnnounceInterval&amp;nbsp; &amp;nbsp; 0&lt;br /&gt;priority1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 255&lt;br /&gt;delay_mechanism&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; P2P&lt;br /&gt;&lt;br /&gt;output status&amp;nbsp;&lt;br /&gt;&amp;nbsp;Adin 6310 ref iamge 2.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:468px;max-width:833px;" height="468" src="https://ez.analog.com/resized-image/__size/1666x936/__key/communityserver-discussions-components-files/913/3021.image-2.png" width="833" alt=" " /&gt;&lt;br /&gt;&amp;nbsp;AM62 output:&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4534.688]: selected /dev/ptp0 as PTP clock&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4534.742]: port 1 (eth0): INITIALIZING to LISTENING on INIT_COMPLETE&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4534.742]: port 0 (/var/run/ptp4l): INITIALIZING to LISTENING on INIT_COMPLET&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4538.549]: port 1 (eth0): LISTENING to UNCALIBRATED on RS_SLAVE&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4539.024]: port 1 (eth0): UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4539.650]: rms 163212 max 324892 freq -38074 +/- 14495 delay&amp;nbsp; &amp;nbsp;240 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4540.650]: rms 3896 max 5970 freq -25301 +/- 5287 delay&amp;nbsp; &amp;nbsp;241 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4541.650]: rms 6489 max 6804 freq -13500 +/- 1711 delay&amp;nbsp; &amp;nbsp;240 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4542.649]: rms 4105 max 5459 freq -11222 +/- 166 delay&amp;nbsp; &amp;nbsp;241 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4543.649]: rms 1326 max 2193 freq -12485 +/- 481 delay&amp;nbsp; &amp;nbsp;240 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4544.649]: rms&amp;nbsp; 237 max&amp;nbsp; 369 freq -13884 +/- 302 delay&amp;nbsp; &amp;nbsp;240 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4545.649]: rms&amp;nbsp; 390 max&amp;nbsp; 406 freq -14558 +/- 104 delay&amp;nbsp; &amp;nbsp;240 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4546.649]: rms&amp;nbsp; 257 max&amp;nbsp; 333 freq -14715 +/-&amp;nbsp; 11 delay&amp;nbsp; &amp;nbsp;240 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4547.649]: rms&amp;nbsp; &amp;nbsp;86 max&amp;nbsp; 144 freq -14640 +/-&amp;nbsp; 34 delay&amp;nbsp; &amp;nbsp;240 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4548.649]: rms&amp;nbsp; &amp;nbsp;24 max&amp;nbsp; &amp;nbsp;33 freq -14529 +/-&amp;nbsp; 23 delay&amp;nbsp; &amp;nbsp;239 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4549.649]: rms&amp;nbsp; &amp;nbsp;28 max&amp;nbsp; &amp;nbsp;33 freq -14490 +/-&amp;nbsp; &amp;nbsp;6 delay&amp;nbsp; &amp;nbsp;241 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4550.649]: rms&amp;nbsp; &amp;nbsp;12 max&amp;nbsp; &amp;nbsp;18 freq -14493 +/-&amp;nbsp; &amp;nbsp;5 delay&amp;nbsp; &amp;nbsp;241 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4551.649]: rms&amp;nbsp; &amp;nbsp; 6 max&amp;nbsp; &amp;nbsp;11 freq -14495 +/-&amp;nbsp; &amp;nbsp;5 delay&amp;nbsp; &amp;nbsp;241 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4552.649]: rms&amp;nbsp; &amp;nbsp; 6 max&amp;nbsp; &amp;nbsp;11 freq -14490 +/-&amp;nbsp; &amp;nbsp;5 delay&amp;nbsp; &amp;nbsp;241 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4553.649]: rms&amp;nbsp; &amp;nbsp; 9 max&amp;nbsp; &amp;nbsp;12 freq -14478 +/-&amp;nbsp; &amp;nbsp;6 delay&amp;nbsp; &amp;nbsp;241 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4554.649]: rms&amp;nbsp; &amp;nbsp; 5 max&amp;nbsp; &amp;nbsp; 7 freq -14487 +/-&amp;nbsp; &amp;nbsp;7 delay&amp;nbsp; &amp;nbsp;242 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[4555.649]: rms&amp;nbsp; &amp;nbsp; 7 max&amp;nbsp; &amp;nbsp;15 freq -14488 +/-&amp;nbsp; &amp;nbsp;9 delay&amp;nbsp; &amp;nbsp;242 +/-&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&lt;br /&gt;pcap LOG :&lt;br /&gt;&amp;nbsp; &amp;nbsp; 84 7.849925 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 85 7.850069 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 86 7.974904 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 87 7.975067 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 88 7.999743 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Announce Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 89 7.999857 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 78 Signalling Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 90 8.000015 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Req Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 91 8.000133 08:04:b4:31:12:42 LLDP_Multicast PTPv2 68 Peer_Delay_Resp Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 92 8.000206 08:04:b4:31:12:42 LLDP_Multicast PTPv2 68 Peer_Delay_Resp_Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 93 8.099926 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 94 8.100109 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 95 8.224866 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 96 8.225059 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 97 8.331701 08:04:b4:31:12:42 LLDP_Multicast PTPv2 68 Peer_Delay_Req Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; 98 8.331933 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Resp Message&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;ADIN6310 with -AM62 (Peer-to-Peer Mode)&lt;br /&gt;&lt;br /&gt;Component&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Role&amp;nbsp; &amp;nbsp; MAC Address&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sync Interval&lt;br /&gt;Grandmaster (GM)&amp;nbsp; &amp;nbsp; AM62 Host&amp;nbsp; &amp;nbsp; c0:d6:0a:f9:69:c9&amp;nbsp; &amp;nbsp; 1/8 s (125 ms)&lt;br /&gt;Network Device&amp;nbsp; &amp;nbsp; ADIN6310 Switch&amp;nbsp; &amp;nbsp; 7a:c6:bb:11:11:13&amp;nbsp; &amp;nbsp; Intended Slave/Boundary Clock&lt;br /&gt;&lt;br /&gt;The ADIN6310 is configured in P2P (Peer-to-Peer) mode and intended to be a Slave to the AM62 Master.&amp;nbsp;&lt;br /&gt;Synchronization is failing because the ADIN is running as a competing Master or Grandmaster (GM).&lt;br /&gt;&lt;br /&gt;The packet trace shows the ADIN (7a:c6:bb:11:11:13) is actively transmitting its own Sync and Follow_Up messages,&amp;nbsp;&lt;br /&gt;which should only be done by the elected GM. The AM62&amp;#39;s Announce messages are being ignored, and the ADIN is not transitioning to the Slave state.&lt;br /&gt;&lt;br /&gt;ADIN 6310 as Slave configuration&lt;br /&gt;&lt;br /&gt;ref :image 3&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:501px;max-width:891px;" height="501" src="https://ez.analog.com/resized-image/__size/1782x1002/__key/communityserver-discussions-components-files/913/6644.image-3.png" width="891" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;Am62 configuration as Slave&amp;nbsp;&lt;br /&gt;&lt;br /&gt;command: ptp4l -2 -H -i eth0 -m -l 6 -f gptp_custom_master.cfg&lt;br /&gt;&lt;br /&gt;gptp_custom_master.cfg&lt;br /&gt;&lt;br /&gt;[global]&lt;br /&gt;transportSpecific&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;br /&gt;domainNumber&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;priority1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;10&lt;br /&gt;logSyncInterval&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-3&lt;br /&gt;logAnnounceInterval&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;br /&gt;delay_mechanism&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;P2P&lt;br /&gt;&lt;br /&gt;output status&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;AM62 output:&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1356.082]: selected /dev/ptp0 as PTP clock&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1356.116]: port 1 (eth0): INITIALIZING to LISTENING on INIT_COMPLETE&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1356.116]: port 0 (/var/run/ptp4l): INITIALIZING to LISTENING on INIT_COMPLETE&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1356.116]: port 0 (/var/run/ptp4lro): INITIALIZING to LISTENING on INIT_COMPLETE&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1357.919]: port 1 (eth0): new foreign master 7ac6bb.1111.110000-1&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1359.529]: port 1 (eth0): LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1359.529]: selected local clock 0804b4.fffe.3112ea as best master&lt;br /&gt;&amp;nbsp; &amp;nbsp; ptp4l[1359.529]: port 1 (eth0): assuming the grand master role&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;Adin 6310 ref iamge 4.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:581px;max-width:1032px;" height="581" src="https://ez.analog.com/resized-image/__size/2064x1162/__key/communityserver-discussions-components-files/913/0724.image-4.png" width="1032" alt=" " /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;PCAP LOG&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.688251 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.688370 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.813268 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.813323 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.938289 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.938340 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.961916 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 78 Signalling Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.962056 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Req Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.962141 c0:d6:0a:f9:69:c9 LLDP_Multicast PTPv2 68 Peer_Delay_Resp Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.962184 c0:d6:0a:f9:69:c9 LLDP_Multicast PTPv2 68 Peer_Delay_Resp_Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;30.962578 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Announce Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.000973 c0:d6:0a:f9:69:c9 LLDP_Multicast PTPv2 68 Peer_Delay_Req Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.001231 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Resp Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.001330 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Resp_Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.056993 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.057204 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.063326 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.063371 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.182004 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.182200 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.188345 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.188398 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.307013 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.307199 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.307376 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 78 Announce Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.313373 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.313428 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.432004 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.432197 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.438402 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.438457 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.556998 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.557195 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.563437 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.563500 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.682008 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.682194 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.688472 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.688519 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.806995 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.807192 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.813493 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.813547 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.931989 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.932189 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.938513 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.938562 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.961865 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Announce Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.961981 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 78 Signalling Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.962140 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Req Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.962180 c0:d6:0a:f9:69:c9 LLDP_Multicast PTPv2 68 Peer_Delay_Resp Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;31.962216 c0:d6:0a:f9:69:c9 LLDP_Multicast PTPv2 68 Peer_Delay_Resp_Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.000978 c0:d6:0a:f9:69:c9 LLDP_Multicast PTPv2 68 Peer_Delay_Req Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.001196 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Resp Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.001312 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 72 Peer_Delay_Resp_Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.056986 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.057186 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.063543 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.063592 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.181985 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.182185 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.188566 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.188615 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.306990 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 64 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.307183 7a:c6:bb:11:11:13 LLDP_Multicast PTPv2 94 Follow_Up Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.307395 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 78 Announce Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.313594 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Sync Message&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;32.313644 c0:d6:0a:f9:69:c9 IeeeI&amp;amp;MS_00:00:00 PTPv2 58 Follow_Up Message&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Time-Sensitive Networking (TSN) Configuration and Observation Issue in IEEE 802.1Qbv (TAS)</title><link>https://ez.analog.com/thread/599832?ContentTypeID=0</link><pubDate>Mon, 06 Oct 2025 07:36:21 GMT</pubDate><guid isPermaLink="false">a884d118-f55f-49de-87eb-b9dbaf99b3e3:d828e625-1960-4867-a41a-4493a106b5ca</guid><dc:creator>Dhevak</dc:creator><slash:comments>16</slash:comments><comments>https://ez.analog.com/thread/599832?ContentTypeID=0</comments><wfw:commentRss>https://ez.analog.com/industrial-ethernet/embedded-ethernet-switches/f/q-a/599832/time-sensitive-networking-tsn-configuration-and-observation-issue-in-ieee-802-1qbv-tas/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;System Setup&lt;br /&gt;&lt;br /&gt;Component&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Model/Platform&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Role&lt;br /&gt;Endpoint (Sender)&amp;nbsp; &amp;nbsp; Texas Instruments AM62 (Linux)&amp;nbsp; &amp;nbsp; Traffic Source, responsible for VLAN/PCP Tagging.&lt;br /&gt;TSN Switch&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Analog Devices ADIN6310&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TAS Gatekeeper, responsible for Scheduling (802.1Qbv).&lt;br /&gt;Synchronization&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IEEE 802.1AS (gPTP)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Configured in Boundary Mode and assumed stable.&lt;br /&gt;&lt;br /&gt;AM62 (Sender) Configuration (Traffic Classification)&lt;br /&gt;&lt;br /&gt;The AM62 uses Linux Traffic Control (tc) to classify UDP traffic&amp;nbsp;&lt;br /&gt;DPort&amp;nbsp; &amp;nbsp; &amp;nbsp;tc Filter Action&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Linux skb-&amp;gt;priority&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;10001&amp;nbsp; &amp;nbsp; action skbedit priority 0&amp;nbsp; &amp;nbsp; &amp;nbsp;0 (Highest)&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;10002&amp;nbsp; &amp;nbsp; action skbedit priority 1&amp;nbsp; &amp;nbsp; &amp;nbsp;1 (Medium)&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;10003&amp;nbsp; &amp;nbsp; action skbedit priority 2&amp;nbsp; &amp;nbsp; &amp;nbsp;2 (Lowest)&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;AM62 Traffic Generation Command&lt;br /&gt;&lt;br /&gt;The output was observed while generating high-rate traffic, likely hitting DPort 10001 with a single plget instance:&lt;/p&gt;
&lt;pre id="codecell5"&gt;&lt;span class="go"&gt;./plget -i eth0 -m pkt-gen -p 3 -t ptpl2 -n 128 -a 70:ff:76:1d:8c:08 -l 1500&lt;/span&gt;
&lt;span class="go"&gt;sleep 5&lt;/span&gt;
&lt;span class="go"&gt;./plget -i eth0 -m pkt-gen -p 2 -t ptpl2 -n 128 -a 70:ff:76:1d:8c:08 -l 1500&lt;/span&gt;
&lt;span class="go"&gt;sleep 5&lt;/span&gt;
&lt;span class="go"&gt;./plget -i eth0 -m pkt-gen -p 1 -t ptpl2 -n 128 -a 70:ff:76:1d:8c:08 -l 1500&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;ADIN6310 (TSN Switch) Configuration&lt;br /&gt;&lt;br /&gt;TAS Gate Control List (GCL)&lt;br /&gt;&lt;br /&gt;The TAS GCL was configured with three entries for three intended priority queues :&lt;br /&gt;GCL Entry&amp;nbsp; &amp;nbsp; Gate Duration (ns)&amp;nbsp; &amp;nbsp; Gate State (Assumed Queue Index)&lt;br /&gt;Entry 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;125,000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Opens Queue for Prio 3 (e.g., Q3 - from &amp;quot;4th checkbox from right&amp;quot;)&lt;br /&gt;Entry 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;125,000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Opens Queue for Prio 2 (e.g., Q1 - from &amp;quot;2nd checkbox from right&amp;quot;)&lt;br /&gt;Entry 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;250,000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Opens Queue for Prio 1 (e.g., Q0 - from &amp;quot;1st checkbox from right&amp;quot;)&lt;br /&gt;GCL Cycle&amp;nbsp; &amp;nbsp; 500,000 ns (0.5 ms)&amp;nbsp; &amp;nbsp; Sum of Durations&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Receiver End (AM62)&lt;/p&gt;
&lt;p&gt;command&lt;br /&gt;#Bash&lt;br /&gt;while sleep 1; do ./plget -m rx-lat -f ipgap -n 128 -i vlan100 -t ptpl2 -f hwts; done&lt;/p&gt;
&lt;p&gt;Observed Output (Single Transaction Phenomenon)&lt;br /&gt;&lt;br /&gt;The output provided below shows the inter-packet gap (IPG) from the receiver, which was identified as traffic from a single observed queue (&amp;quot;queue 1 with prio mof 3&amp;quot;).&lt;br /&gt;&lt;br /&gt;The majority of IPGs are 12.224 ms, interspersed with much larger delays, including 263.943 ms and 266.559 ms some random large gaps.&lt;br /&gt;&lt;br /&gt;Only one transaction is appeared in output&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Clarification required : settings required for the ADIN6310 to correctly classify incoming PCP 0, 1, and 2 traffic into specific internal queues (e.g., Q3, Q1, Q0) for TAS scheduling.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>