<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki-ext.aps.anl.gov/epics/index.php?action=history&amp;feed=atom&amp;title=V4_Link_Support_Tutorial</id>
	<title>V4 Link Support Tutorial - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-ext.aps.anl.gov/epics/index.php?action=history&amp;feed=atom&amp;title=V4_Link_Support_Tutorial"/>
	<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;action=history"/>
	<updated>2026-06-04T01:50:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=2725&amp;oldid=prev</id>
		<title>MartyKraimer at 19:46, 3 November 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=2725&amp;oldid=prev"/>
		<updated>2005-11-03T19:46:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;amp;diff=2725&amp;amp;oldid=585&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=585&amp;oldid=prev</id>
		<title>MartyKraimer at 19:48, 2 November 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=585&amp;oldid=prev"/>
		<updated>2005-11-02T19:48:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;amp;diff=585&amp;amp;oldid=578&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=578&amp;oldid=prev</id>
		<title>MartyKraimer at 20:23, 1 November 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=578&amp;oldid=prev"/>
		<updated>2005-11-01T20:23:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;amp;diff=578&amp;amp;oldid=573&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=573&amp;oldid=prev</id>
		<title>MartyKraimer: added discussion about analog conversion and special support for output records</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=573&amp;oldid=prev"/>
		<updated>2005-10-26T18:17:33Z</updated>

		<summary type="html">&lt;p&gt;added discussion about analog conversion and special support for output records&lt;/p&gt;
&lt;a href=&quot;https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;amp;diff=573&amp;amp;oldid=568&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=568&amp;oldid=prev</id>
		<title>MartyKraimer at 19:29, 25 October 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=568&amp;oldid=prev"/>
		<updated>2005-10-25T19:29:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:29, 25 October 2005&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l141&quot;&gt;Line 141:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 141:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                    }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                    }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The last example &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;attaches the link to &lt;/del&gt;support for a VME Analog to Digital device.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The last example &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;selects &lt;/ins&gt;support for a VME Analog to Digital device.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      AiRecord aiMonitorExample = {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      AiRecord aiMonitorExample = {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          ...&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          ...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l236&quot;&gt;Line 236:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 236:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;low, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int16 &lt;/ins&gt;low, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int16 &lt;/ins&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In C++ would be:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In C++ would be:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      class LinkInt16 {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      class LinkInt16 {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      public:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      public:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          virtual LinkResult get(Callback &amp;amp;callback, int16_t &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/del&gt;data) = 0;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          virtual LinkResult get(Callback &amp;amp;callback, int16_t &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;&lt;/ins&gt;data) = 0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          virtual LinkResult put(Callback &amp;amp;callback, int16_t data) = 0;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          virtual LinkResult put(Callback &amp;amp;callback, int16_t data) = 0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;         virtual void getBounds(int16_t &amp;amp;low, int16_t &amp;amp;high) = 0;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      };&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      };&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l248&quot;&gt;Line 248:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 249:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Link and MonitorLink ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Link and MonitorLink ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;All support &amp;lt;b&gt;must&amp;lt;/b&gt; register interface &amp;lt;tt&gt;Link&amp;lt;/tt&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and if it supports monitors interface &amp;lt;tt&gt;MonitorLink&amp;lt;/tt&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;b&amp;gt;NOTE: arguments and return types ignored for now&amp;lt;/b&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;b&amp;gt;NOTE: arguments and return types ignored for now&amp;lt;/b&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface Link {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface Link {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l343&quot;&gt;Line 343:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 346:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getOutputEos(octet[] eos);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getOutputEos(octet[] eos);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== asynDigital Support ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      enum interruptReason {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      enum interruptReason {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l385&quot;&gt;Line 385:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 390:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int16 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;low, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int16 &lt;/ins&gt;low, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int16 &lt;/ins&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface LinkArrayInt16 {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface LinkArrayInt16 {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l394&quot;&gt;Line 394:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 399:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int32 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int32 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int32 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int32 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;low, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int32 &lt;/ins&gt;low, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int32 &lt;/ins&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface LinkArrayInt32 {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface LinkArrayInt32 {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l403&quot;&gt;Line 403:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 408:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int64 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult get(Callback callback,Int64 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int64 data);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkResult put(Callback callback,Int64 data);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;low, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;type&amp;gt; &lt;/del&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          void getBounds(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int64 &lt;/ins&gt;low, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Int64 &lt;/ins&gt;high);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface LinkArrayInt64 {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface LinkArrayInt64 {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l410&quot;&gt;Line 410:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 415:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     enum interruptReason {&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;         interruptOnZeroToOne, interruptOnOneToZero, interruptOnBoth&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     } &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;         &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Float Support ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Float Support ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l459&quot;&gt;Line 459:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 460:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It assumes that there is VME support of the form&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It assumes that there is VME support of the form&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;public class vme {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;public class vme {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;static public short getShort(long addr);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;         &lt;/ins&gt;static public short getShort(long addr);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;...&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;         &lt;/ins&gt;...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The link support would be something like:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The link support would be something like:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l471&quot;&gt;Line 471:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 472:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          addr = fromFactory;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          addr = fromFactory;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          connected = false;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          connected = false;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          //  from the VME &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;initailze &lt;/del&gt;vmeaddr and channel&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          //  from the VME &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;initialize &lt;/ins&gt;vmeaddr and channel&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          // details left to your imagination&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          // details left to your imagination&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=567&amp;oldid=prev</id>
		<title>MartyKraimer at 18:35, 25 October 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=567&amp;oldid=prev"/>
		<updated>2005-10-25T18:35:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;amp;diff=567&amp;amp;oldid=565&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=565&amp;oldid=prev</id>
		<title>MartyKraimer at 15:17, 24 October 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=565&amp;oldid=prev"/>
		<updated>2005-10-24T15:17:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;amp;diff=565&amp;amp;oldid=563&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=563&amp;oldid=prev</id>
		<title>MartyKraimer at 15:00, 4 October 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=563&amp;oldid=prev"/>
		<updated>2005-10-04T15:00:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:00, 4 October 2005&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;EPICS: IOC Link Support Tutorial &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sept 30 &lt;/del&gt;2005&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;EPICS: IOC Link Support Tutorial &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Oct 04 &lt;/ins&gt;2005&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l278&quot;&gt;Line 278:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 278:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Process Link Support ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Process Link Support ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ProcessLinkSupport&lt;/del&gt;&amp;lt;type&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      interface &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LinkProcess&lt;/ins&gt;&amp;lt;type&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkWaitResult process(Callback callback);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          LinkWaitResult process(Callback callback);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=555&amp;oldid=prev</id>
		<title>MartyKraimer at 15:15, 30 September 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=555&amp;oldid=prev"/>
		<updated>2005-09-30T15:15:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;amp;diff=555&amp;amp;oldid=551&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=551&amp;oldid=prev</id>
		<title>MartyKraimer at 19:26, 29 September 2005</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=V4_Link_Support_Tutorial&amp;diff=551&amp;oldid=prev"/>
		<updated>2005-09-29T19:26:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;EPICS: IOC Link Support Tutorial Sept 29 2005&lt;br /&gt;
&amp;lt;b&amp;gt;UNDER CONSTRUCTION&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The V4 link support is a replacement for V3 &lt;br /&gt;
# DBF_DEVICE, DBF_INLINK, DBF_OUTLINK, and DBF_FWDLINK&lt;br /&gt;
# device DBD definition and device support&lt;br /&gt;
# driver DBD definition and driver support&lt;br /&gt;
&lt;br /&gt;
The link support model is:&lt;br /&gt;
* For each link, record support defines a list of interfaces it can use for communicating with link support&lt;br /&gt;
* Link support registers the set of interfaces it implements&lt;br /&gt;
&lt;br /&gt;
Link support has no knowledge of what record types are using it&lt;br /&gt;
and record support has no knowledge about link support other than the&lt;br /&gt;
interface it is using.&lt;br /&gt;
&lt;br /&gt;
EPICS base defines a standard set of interfaces for link support.&lt;br /&gt;
The intention is that the set includes enough functionality such that&lt;br /&gt;
most link support can be implemented via just these interfaces.&lt;br /&gt;
&lt;br /&gt;
The interfaces support all the functionality needed by Channel/Database access&lt;br /&gt;
and by the generic EPICS device support supplied by asynDriver.&lt;br /&gt;
Since asynDriver is intended as a framework for interfacing to most hardware,&lt;br /&gt;
this means that the interfaces supplied and used by base allows support&lt;br /&gt;
for most hardware. The support can communicate with the hardware&lt;br /&gt;
however it wants but must implement some set of the interfaces defined&lt;br /&gt;
by base.&lt;br /&gt;
&lt;br /&gt;
This document gives a brief overview of the V4 link support model.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
=  Database Definitions For Links =&lt;br /&gt;
 &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section first reviews the DBD syntax related to link definitions.&lt;br /&gt;
It then gives a brief description of link related definitions in dbCommon.dbd&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&lt;br /&gt;
A record link has the syntax:&lt;br /&gt;
     link(linkDirection,interface(string,...))&lt;br /&gt;
A link itself has the syntax:&lt;br /&gt;
     link(linkDirection, choiceName, interfaceName, dataStructName)&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;linkDirection&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Must be one of &amp;lt;tt&amp;gt;none&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;in&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;out&amp;lt;/tt&amp;gt;,&amp;lt;tt&amp;gt;process&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;inout&amp;lt;/tt&amp;gt;. Compatible checks are made to match the interface with a field.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;interface&amp;lt;/tt&amp;gt;&lt;br /&gt;
: This is a list of the interfaces that the record support understands.&lt;br /&gt;
; &amp;lt;tt&amp;gt;choiceName&amp;lt;/tt&amp;gt;&lt;br /&gt;
: UTF-8 string that describes the choice&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;interfaceName&amp;lt;/tt&amp;gt;&lt;br /&gt;
: The name of an interface via which record support communicates with device support.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;dataStructName&amp;lt;/tt&amp;gt;&lt;br /&gt;
: The name of a &amp;lt;tt&amp;gt;struct&amp;lt;/tt&amp;gt; containing configuration information for the link support. Record support normally does not access this structure. Database configuration tools do prompt the user to assign values to the structure.&lt;br /&gt;
&lt;br /&gt;
When a record instance is created the choiceName selects the support&lt;br /&gt;
to attach to a record link. The interfaceName must be one of the&lt;br /&gt;
interface names the record has listed as a valid type and linkDirection must be compatible&lt;br /&gt;
with the linkDirection the record type specified.&lt;br /&gt;
&lt;br /&gt;
== Standard Definitions For Channel/Database Access ==&lt;br /&gt;
&lt;br /&gt;
These are the database definitions defined in dbCommon are used by&lt;br /&gt;
the base supplied support for Channel/Database access.&lt;br /&gt;
&lt;br /&gt;
=== Data Structures ===&lt;br /&gt;
&lt;br /&gt;
The complete set of definitions are defined in &amp;quot;V4 DB RecordCommon&amp;quot;.&lt;br /&gt;
     struct(MonitorLinkData) {&lt;br /&gt;
         field(pvname,string) { link}&lt;br /&gt;
         field(process,boolean) // process this record when monitor occurs&lt;br /&gt;
         field(inheritSeverity,boolean)&lt;br /&gt;
     }&lt;br /&gt;
     struct(InputLinkData) {&lt;br /&gt;
         field(pvname,string) { link}&lt;br /&gt;
         field(process,boolean)&lt;br /&gt;
         field(wait,boolean)&lt;br /&gt;
         field(timeout,float64)&lt;br /&gt;
         field(block,boolean)&lt;br /&gt;
         field(inheritSeverity,boolean)&lt;br /&gt;
     }&lt;br /&gt;
     ... also OutputLinkData and ProcessLinkData&lt;br /&gt;
&lt;br /&gt;
A look at the fields shows that these are what is required to implement&lt;br /&gt;
the V4 semantics for Channel/Database access links.&lt;br /&gt;
&lt;br /&gt;
=== Link Definitions ===&lt;br /&gt;
&lt;br /&gt;
Link support is provided for&lt;br /&gt;
* input&lt;br /&gt;
** monitor support&lt;br /&gt;
** input support&lt;br /&gt;
* output&lt;br /&gt;
* process&lt;br /&gt;
&lt;br /&gt;
For input and output The following data types are supported:&lt;br /&gt;
* primitive types&lt;br /&gt;
* string&lt;br /&gt;
* arrays of primitive types and strings&lt;br /&gt;
&lt;br /&gt;
&amp;quot;V4 DB RecordCommon&amp;quot; describes the complete set of link definitions&lt;br /&gt;
supplied by EPICS base. Some examples are:&lt;br /&gt;
&lt;br /&gt;
     link(process,processLink,ProcessLink,ProcessLinkData);&lt;br /&gt;
&lt;br /&gt;
     link(in,monitorLinkArrayOctet,LinkArrayOctet,MonitorLinkData);&lt;br /&gt;
     link(in,inputLinkArrayOctet,LinkArrayOctet,InputLinkData);&lt;br /&gt;
     link(out,outputLinkArrayOctet,LinkArrayOctet,OutputLinkData);&lt;br /&gt;
&lt;br /&gt;
     link(in,monitorLinkBoolean,LinkBoolean,MonitorLinkData);&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
     link(in,monitorLinkInt16,LinkInt16,MonitorLinkData);&lt;br /&gt;
     link(in,monitorLinkInt32,LinkInt32,MonitorLinkData);&lt;br /&gt;
     link(in,monitorLinkInt64,LinkInt64,MonitorLinkData);&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
     link(in,monitorLinkFloat32,LinkFloat32,MonitorLinkData);&lt;br /&gt;
     link(in,monitorLinkFloat64,LinkFloat64,MonitorLinkData);&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
     link(in,monitorLinkArrayString,LinkArrayString,MonitorLinkData);&lt;br /&gt;
     link(in,inputLinkArrayString,LinkArrayString,InputLinkData);&lt;br /&gt;
     link(out,outputLinkArrayString,LinkArrayString,OutputLinkData);&lt;br /&gt;
&lt;br /&gt;
These are the link definitions for the Channel/Database access link&lt;br /&gt;
support supplied with base. The support registers support for processLink,&lt;br /&gt;
monitorLinkArrayOctet, ...&lt;br /&gt;
&lt;br /&gt;
== asynDriver link support ==&lt;br /&gt;
&lt;br /&gt;
These are definitions that are used by the standard EPICS device support&lt;br /&gt;
for asynDriver. Since asynDriver is a generic way of interfacing arbitrary&lt;br /&gt;
hardware support, this is a generic way of attaching links in records to&lt;br /&gt;
hardware.&lt;br /&gt;
&lt;br /&gt;
=== Data Definitions ===&lt;br /&gt;
     struct(AsynLinkData) {&lt;br /&gt;
         field(portName,string)&lt;br /&gt;
         field(addr,int32)&lt;br /&gt;
         field(timeout,float64)&lt;br /&gt;
         field(drvPvt,string)&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
=== link definitions ===&lt;br /&gt;
&lt;br /&gt;
     link(inout,asynInt32,LinkInt32,AsynLinkData)&lt;br /&gt;
     link(in,asynInt32Average,LinkInt32,AsynLinkData)&lt;br /&gt;
     link(in,asynInt32Monitor,LinkInt32,AsynLinkData)&lt;br /&gt;
     link(inout,asynFloat64,LinkFloat64,AsynLinkData)&lt;br /&gt;
     link(in,asynFloat64Average,LinkFloat64,AsynLinkData)&lt;br /&gt;
     link(in,asynFloat64Monitor,LinkFloat64,AsynLinkData)&lt;br /&gt;
     link(in,asynDigitalMonitor,AsynDigital,AsynLinkData)&lt;br /&gt;
     link(inout,asynDigital,AsynDigital,AsynLinkData)&lt;br /&gt;
     link(inout,asynInt32Array,LinkArrayInt32,AsynLinkData)&lt;br /&gt;
     link(inout,asynFloat64Array,LinkArrayFloat64,AsynLinkData)&lt;br /&gt;
     link(inout,asynOctet,AsynOctet,AsynLinkData)&lt;br /&gt;
&lt;br /&gt;
This is the set of definitions for the standard EPICS device support implemented&lt;br /&gt;
by asynDriver. Although, at least for the first few V4 releases,&lt;br /&gt;
asynDriver will not be part of base, they are shown here because the&lt;br /&gt;
LinkInt32,... interface definitions are defined as part of base.&lt;br /&gt;
Again it is expected that almost all hardware support be created by&lt;br /&gt;
implementing a combination of these link interface definitions or&lt;br /&gt;
the interfaces implemented by Channel/Database access link support.&lt;br /&gt;
---&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
=  Link Support =&lt;br /&gt;
 &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
An arbitrary number of Link Support implementations can exist.&lt;br /&gt;
An implementation can be either soft support or support that communicates with&lt;br /&gt;
hardware.&lt;br /&gt;
&lt;br /&gt;
Other link support can also be supplied.&lt;br /&gt;
New support should try very hard to implement the standard interfaces&lt;br /&gt;
supplied by EPICS base. These are the interfaces that the record types&lt;br /&gt;
supplied with base know how to use.&lt;br /&gt;
&lt;br /&gt;
Soft support should try to implement the same interfaces implemented by&lt;br /&gt;
the Channel/Database access support supplied with base. The support&lt;br /&gt;
can, of course, define data structures for it's own use.&lt;br /&gt;
Implementing these interfaces means that nthe support will work for&lt;br /&gt;
the same set of record links as the Channel/Database access support.&lt;br /&gt;
&lt;br /&gt;
Hardware support should, if possible, also implement the same interfaces&lt;br /&gt;
implemented by the Channel/Database access support.&lt;br /&gt;
Message based support may also have to implement the AsynOctet interface&lt;br /&gt;
but this interface is only used by a few record links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This section describes the interfaces implemented by all link support&lt;br /&gt;
and then the standard interfaces used by the records supplied with base.&lt;br /&gt;
&lt;br /&gt;
== Link and MonitorLink ==&lt;br /&gt;
&lt;br /&gt;
     interface Link {&lt;br /&gt;
         void report(int16 level);&lt;br /&gt;
         void cancel();&lt;br /&gt;
         void destroy();&lt;br /&gt;
         void initialize();&lt;br /&gt;
         void connect();&lt;br /&gt;
         void disconnect();&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     interface MonitorLink {&lt;br /&gt;
         void addMonitor(Callback callback);&lt;br /&gt;
         void removeMonitor();&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Link&amp;lt;/tt&amp;gt; is an interface that must be implemented by every link&lt;br /&gt;
support.&lt;br /&gt;
An instance of this is connected to each DbfLink field.&lt;br /&gt;
The &amp;lt;tt&amp;gt;Link&amp;lt;/tt&amp;gt; methods are:&lt;br /&gt;
* &amp;lt;tt&amp;gt;report&amp;lt;/tt&amp;gt; - report &lt;br /&gt;
* &amp;lt;tt&amp;gt;cancel&amp;lt;/tt&amp;gt; - Cancel any outstanding I/O&lt;br /&gt;
* &amp;lt;tt&amp;gt;destroy&amp;lt;/tt&amp;gt; - This is called if the field is being changed after initialization or if the record is being removed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;initialize&amp;lt;/tt&amp;gt; - Called to initialize a link.&lt;br /&gt;
* &amp;lt;tt&amp;gt;connect&amp;lt;/tt&amp;gt; - Called to connect. Note that this is different than initilization.&lt;br /&gt;
* &amp;lt;tt&amp;gt;disconnect&amp;lt;/tt&amp;gt; - disconnect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;MonitorLink&amp;lt;/tt&amp;gt; is an interface that is implemented by link support that&lt;br /&gt;
supports monitors. An example is support for hardware interrupts.&lt;br /&gt;
The &amp;lt;tt&amp;gt;MonitorLink&amp;lt;/tt&amp;gt; methods are:&lt;br /&gt;
* &amp;lt;tt&amp;gt;addMonitor&amp;lt;/tt&amp;gt; - Add a monitor callback&lt;br /&gt;
* &amp;lt;tt&amp;gt;removeMonitor&amp;lt;/tt&amp;gt; - Remove monitor&lt;br /&gt;
&lt;br /&gt;
Normally record support does not need to call any of the Link &lt;br /&gt;
or MonitorLink methods since database access does this automatically.&lt;br /&gt;
For example if a link field is modified via a channel access put,&lt;br /&gt;
database access will call destroy before modifying the link&lt;br /&gt;
and initialize and connect after the link is modified.&lt;br /&gt;
&lt;br /&gt;
== Definitions that apply to Process,Monitor,Input,and Output support ==&lt;br /&gt;
These are the definitions used by the Channel/Database access support&lt;br /&gt;
supplied with base. It is also used by the standard EPICS support from asyn.&lt;br /&gt;
&lt;br /&gt;
     enum LinkWaitResult {&lt;br /&gt;
         linkNoop,           // Nothing was done, e.g. link is null link&lt;br /&gt;
         linkDone,           // field was modified. No wait is necessary&lt;br /&gt;
         linkWait,           // waiting. can do additional procsssing&lt;br /&gt;
         linkWaitBlock,      // waiting. dont do additional processing until&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     interface Callback {&lt;br /&gt;
         void done();&lt;br /&gt;
         void failure();&lt;br /&gt;
     }&lt;br /&gt;
== Process Link Support ==&lt;br /&gt;
     interface ProcessLinkSupport&amp;lt;type&amp;gt; {&lt;br /&gt;
         LinkWaitResult process(Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
== Octet Support ==&lt;br /&gt;
There is no support for octet but there is support for an array of octets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     interface LinkArrayOctet {&lt;br /&gt;
         LinkWaitResult getWait(octet[] data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(octet[] data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
The data source must be an array of octets or the connect request will fail.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;GENERIC QUESTION&amp;lt;/b&amp;gt; The data is passed as primitive or arrays of&lt;br /&gt;
primitive types. Should &amp;lt;tt&amp;gt;Dbf&amp;lt;/tt&amp;gt; interfaces be used? Needs thought.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== asynOctet Support ==&lt;br /&gt;
&lt;br /&gt;
This still needs more work. It attempts to reproduce the functionality&lt;br /&gt;
of V3 asynDriver.&lt;br /&gt;
&lt;br /&gt;
     interface AsynOctet {&lt;br /&gt;
         LinkWaitResult write(Callback callback,&lt;br /&gt;
           octet[] data, int32 numchars, Int32 nbytesTransfered);&lt;br /&gt;
         LinkWaitResult writeRaw(Callback callback,&lt;br /&gt;
           octet[] data, int32 numchars, Int32 nbytesTransfered);&lt;br /&gt;
         LinkWaitResult read(Callback callback,&lt;br /&gt;
           octet[] data, Int32 nbytesTransfered);&lt;br /&gt;
         LinkWaitResult readRaw(Callback callback,&lt;br /&gt;
           octet[] data, Int32 nbytesTransfered);&lt;br /&gt;
         void flush();&lt;br /&gt;
         void setInputEos(octet[] eos);&lt;br /&gt;
         void getInputEos(octet[] eos);&lt;br /&gt;
         void setOutputEos(octet[] eos);&lt;br /&gt;
         void getOutputEos(octet[] eos);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     enum interruptReason {&lt;br /&gt;
         interruptOnZeroToOne, interruptOnOneToZero, interruptOnBoth&lt;br /&gt;
     }&lt;br /&gt;
     struct asynDigitalInterrupt {&lt;br /&gt;
         octet[] mask;&lt;br /&gt;
         int32 addr;&lt;br /&gt;
         Callback callback&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     interface AsynDigital {&lt;br /&gt;
          LinkWaitResult write(octet[] value, octet[] mask);&lt;br /&gt;
          LinkWaitResult read(octet[] value, octet[] mask);&lt;br /&gt;
          void setInterrupt(octet[] mask, interruptReason reason);&lt;br /&gt;
          void clearInterrupt(octet[] mask);&lt;br /&gt;
          void getInterrupt(octet[] mask, interruptReason reason);&lt;br /&gt;
          void registerInterruptUser(interruptCallbackUInt32Digital callback,&lt;br /&gt;
              octet[] mask);&lt;br /&gt;
          void cancelInterruptUser();&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
== Boolean Support ==&lt;br /&gt;
     interface LinkBoolean {&lt;br /&gt;
         LinkWaitResult getWait(Boolean data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(boolean data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
     interface LinkArrayBoolean {&lt;br /&gt;
         LinkWaitResult getWait(boolean[] data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(boolean[] data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The data source must be a boolean or a string that contains a valid&lt;br /&gt;
boolean value.&lt;br /&gt;
&lt;br /&gt;
== Integer Support ==&lt;br /&gt;
&lt;br /&gt;
Support is available. for int16, int32, and int64.&lt;br /&gt;
This section uses the Java generic syntax, e.g. &amp;lt;type&amp;gt;. In this&lt;br /&gt;
section &amp;lt;type&amp;gt; must be int16, int32, or int64.&lt;br /&gt;
&lt;br /&gt;
     interface Link&amp;lt;type&amp;gt; {&lt;br /&gt;
         LinkWaitResult getWait(&amp;lt;type&amp;gt; data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(&amp;lt;type&amp;gt; data,Callback callback);&lt;br /&gt;
         void getBounds(&amp;lt;type&amp;gt; low, &amp;lt;type&amp;gt; high);&lt;br /&gt;
     }&lt;br /&gt;
     interface LinkArray&amp;lt;type&amp;gt; {&lt;br /&gt;
         LinkWaitResult getWait(&amp;lt;type&amp;gt;[] data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(&amp;lt;type&amp;gt;[] data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     enum interruptReason {&lt;br /&gt;
         interruptOnZeroToOne, interruptOnOneToZero, interruptOnBoth&lt;br /&gt;
     } &lt;br /&gt;
         &lt;br /&gt;
         &lt;br /&gt;
== Float Support ==&lt;br /&gt;
&lt;br /&gt;
Support is available. for float32 and float64.&lt;br /&gt;
This section uses the Java generic syntax, e.g. &amp;lt;type&amp;gt;. In this&lt;br /&gt;
section &amp;lt;type&amp;gt; must be float32 or float64.&lt;br /&gt;
&lt;br /&gt;
     interface Link&amp;lt;type&amp;gt; {&lt;br /&gt;
         LinkWaitResult getWait(&amp;lt;type&amp;gt; data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(&amp;lt;type&amp;gt; data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
     interface LinkArray&amp;lt;type&amp;gt; {&lt;br /&gt;
         LinkWaitResult getWait(&amp;lt;type&amp;gt;[] data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(&amp;lt;type&amp;gt;[] data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
== String Support ==&lt;br /&gt;
     interface LinkString {&lt;br /&gt;
         LinkWaitResult getWait(string data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(string data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
     interface LinkArrayString {&lt;br /&gt;
         LinkWaitResult getWait(string[] data,Callback callback);&lt;br /&gt;
         LinkWaitResult putWait(string[] data,Callback callback);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The data source must be a string.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
= Example - VME ADC support =&lt;br /&gt;
 &amp;lt;/center&amp;gt;&lt;br /&gt;
== DBD definitions ==&lt;br /&gt;
The following struct is defined for configuration information.&lt;br /&gt;
     struct VMEADC {&lt;br /&gt;
         field(a16 int16)&lt;br /&gt;
         field(a32 int32)&lt;br /&gt;
         field(channel int16)&lt;br /&gt;
     }&lt;br /&gt;
The following link definition is defined:&lt;br /&gt;
     link(in,myAdcSupport,LinkInt32,VMEADC)&lt;br /&gt;
&lt;br /&gt;
This allows record instance definitions like:&lt;br /&gt;
     AiRecord aiExample = {&lt;br /&gt;
        ...&lt;br /&gt;
        input = myAdcSupport{a16=0x0010;channel=1}&lt;br /&gt;
        ...&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
The link support would be something like:&lt;br /&gt;
&lt;br /&gt;
     class AdcSupport : public Link LinkInt32 {&lt;br /&gt;
     public:&lt;br /&gt;
     AdcSupport(VMEADCData fromFactory) : data(fromFactory) connected(false)&lt;br /&gt;
     {&lt;br /&gt;
         //  from the VMEADC initailze vmeaddr and channel&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     // Link methods&lt;br /&gt;
     void report(int16_t level)&lt;br /&gt;
     {&lt;br /&gt;
         printf(&amp;quot;AdcSupport a16 %x channel %d\n&amp;quot;,a16,channel);&lt;br /&gt;
     }&lt;br /&gt;
     void cancel() {} // nothing to do&lt;br /&gt;
     void destroy() {delete this};&lt;br /&gt;
     void initialize()&lt;br /&gt;
     {&lt;br /&gt;
         // make sure we can access a16&lt;br /&gt;
     }&lt;br /&gt;
     void connect() {connected = true}&lt;br /&gt;
     void disconnect() {connected = false}&lt;br /&gt;
     &lt;br /&gt;
     // LinkInt32 methods&lt;br /&gt;
     LinkWaitResult getWait(int32_t *data,Callback callback)&lt;br /&gt;
     {&lt;br /&gt;
         *data = (int32_t)vmeaddr[1];&lt;br /&gt;
         return linkDone;&lt;br /&gt;
     }&lt;br /&gt;
     LinkWaitResult putWait(int32_t *data,Callback callback)&lt;br /&gt;
     {&lt;br /&gt;
         throw CantWriteAdc;&lt;br /&gt;
     }&lt;br /&gt;
     void getBounds(int32_t *low, int32_t *high) &lt;br /&gt;
     {&lt;br /&gt;
         // assume 16 bit unipolor adc&lt;br /&gt;
         *low = 0; *high = 0xffff;&lt;br /&gt;
     }&lt;br /&gt;
     private:&lt;br /&gt;
         VMEADCData data;&lt;br /&gt;
         uint16_t *vmeaddr;&lt;br /&gt;
         int channel;&lt;br /&gt;
         bool connected;&lt;br /&gt;
     }&lt;/div&gt;</summary>
		<author><name>MartyKraimer</name></author>
	</entry>
</feed>