\hypertarget{a00908}{}\doxysection{Linked parameter update sequences}
\label{a00908}\index{Linked parameter update sequences@{Linked parameter update sequences}}
Sequence diagrams for some common linked parameter update scenarios. 

\hypertarget{a00908_advancedTopics_linkedParameters_sequences_contents}{}\doxysubsection{On this page}\label{a00908_advancedTopics_linkedParameters_sequences_contents}
\begin{DoxyItemize}
\item \mbox{\hyperlink{a00908_linkedParameters_sequences_user_gui}{User-\/generated update}} \item \mbox{\hyperlink{a00908_linkedParameters_sequences_automation}{Update from automation playback}}\end{DoxyItemize}
\begin{DoxyNote}{Note}
To enable logging for these events at run time set {\ttfamily DTF\+\_\+\+AUTOMATION=file@DTP\+\_\+\+LOW} in the \mbox{\hyperlink{a00917}{Digi\+Trace}} configuration file.
\end{DoxyNote}
\hypertarget{a00908_advancedTopics_linkedParameters_sequences_notes}{}\doxysubsubsection{Notes on threading for these sequences}\label{a00908_advancedTopics_linkedParameters_sequences_notes}

\begin{DoxyItemize}
\item Calls from the host into \mbox{\hyperlink{a02245}{AAX\+\_\+\+IEffect\+Parameters}} may occur on any thread. In general, the only synchronization that is guaranteed for data model calls in these diagrams is that the call will follow whatever event is indicated as its trigger.
\item Calls from the host into \mbox{\hyperlink{a02241}{AAX\+\_\+\+IEffect\+GUI}} will occur on the main application thread unless indicated otherwise in the \mbox{\hyperlink{a02241}{AAX\+\_\+\+IEffect\+GUI}} documentation.
\item Host-\/driven updates to the algorithm context are always synchronized with the real-\/time processing thread
\end{DoxyItemize}

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{a00906}{Basic parameter update sequences}}
\end{DoxySeeAlso}
\hypertarget{a00908_linkedParameters_sequences_user_gui}{}\doxysubsection{User-\/generated update}\label{a00908_linkedParameters_sequences_user_gui}
This is the sequence of calls for a parameter update triggered by the user. For this sequence, we assume that the edit was triggered by a GUI event. Updates from control surfaces are handled in exactly the same way, except that the parameter touch, set value, and release tokens are generated by the control surface.

In this example the updated parameter is reciprocally linked to one other parameter. These are the \char`\"{}linker\char`\"{} and \char`\"{}linked\char`\"{} parameters, respectively.

This procedure is very similar to the non-\/linked case described \mbox{\hyperlink{a00906_parameterUpdates_sequences_user}{here}}. In the diagrams below, red arcs and pink section headings are used to indicate events that are specific to the linked parameter case.

Notes\+:
\begin{DoxyEnumerate}
\item This sequence shows the linked parameter reciprocally issuing a touch on the linker parameter. The touch fails since the linker parameter is already touched at this time. If the roles were reversed (if an edit occurred on the linked parameter) then this touch would succeed.
\item The host flags all set value tokens that are triggered by a plug-\/in within the scope of \mbox{\hyperlink{a02049_a685858711efb8634ce66c327f2865c71}{AAX\+\_\+\+IEffect\+Parameters\+::\+Update\+Parameter\+Normalized\+Value()}} \char`\"{}\+Update\+Parameter\+Normalized\+Value()\char`\"{}. When those set value tokens are processed they result in additional calls to \mbox{\hyperlink{a02049_a685858711efb8634ce66c327f2865c71}{AAX\+\_\+\+IEffect\+Parameters\+::\+Update\+Parameter\+Normalized\+Value()}} \char`\"{}\+Update\+Parameter\+Normalized\+Value()\char`\"{}. The host sets {\ttfamily i\+Source} to \mbox{\hyperlink{a00443_a30be0398faf20c6b121239eb9399f3f7a401db669e68d5255c1126f7bf183b7ca}{AAX\+\_\+e\+Update\+Source\+\_\+\+Parameter}} for each of these subsequent calls to indicate that the update originated from within a parameter update event.
\item \mbox{\hyperlink{a01837_adf4d2d6060bf3e13619838cea8b59865}{Is\+Parameter\+Link\+Ready()}} returns {\ttfamily true} during the linker parameter update because the update source is unknown and the parameter is touched. Both conditions must be true in order for the linking logic to proceed with setting linked parameters\textquotesingle{} values.
\item \mbox{\hyperlink{a01837_adf4d2d6060bf3e13619838cea8b59865}{Is\+Parameter\+Link\+Ready()}} returns {\ttfamily false} during the linked parameter update because the source is \mbox{\hyperlink{a00443_a30be0398faf20c6b121239eb9399f3f7a401db669e68d5255c1126f7bf183b7ca}{AAX\+\_\+e\+Update\+Source\+\_\+\+Parameter}}. This prevents update cycles for reciprocally linked parameters, as demonstrated here.
\end{DoxyEnumerate}\hypertarget{a00908_linkedParameters_sequences_user_gui_highLevel}{}\doxysubsubsection{High-\/level interface calls and events}\label{a00908_linkedParameters_sequences_user_gui_highLevel}

\begin{DoxyImage}
\includegraphics[width=\textwidth,height=\textheight/2,keepaspectratio=true]{msc_AAX_LinkedParameterUpdate_GUI_HighLevel}
\doxyfigcaption{High-\/level sequence of interface calls and events for a reciprocally linked parameter update following a user-\/generated edit}
\end{DoxyImage}
\hypertarget{a00908_linkedParameters_sequences_user_gui_detail}{}\doxysubsubsection{Detailed interface calls and events}\label{a00908_linkedParameters_sequences_user_gui_detail}
Note that this diagram assumes a GUI implementation that uses \mbox{\hyperlink{a02049_a368b0f5a761d1eda4c41b420f153a077}{Set\+Parameter\+Normalized\+Value()}}. The implementation could also use other parameter set methods, either in \mbox{\hyperlink{a02245}{AAX\+\_\+\+IEffect\+Parameters}} or directly on an \mbox{\hyperlink{a02277}{AAX\+\_\+\+IParameter}}. The overall sequence would remain the same.


\begin{DoxyImage}
\includegraphics[width=\textwidth,height=\textheight/2,keepaspectratio=true]{msc_AAX_LinkedParameterUpdate_GUI}
\doxyfigcaption{Detailed sequence of method calls and events for a reciprocally linked parameter update following a user-\/generated edit on the plug-\/in GUI}
\end{DoxyImage}
\hypertarget{a00908_linkedParameters_sequences_automation}{}\doxysubsection{Update from automation playback}\label{a00908_linkedParameters_sequences_automation}
Since all parameter linking occurs while recording automation, automation playback is very simple. The automation lanes may contain any arbitrary values, so, in order to avoid fighting between incompatible values, the plug-\/in should respect all automation values during playback.

Notes\+:
\begin{DoxyEnumerate}
\item \mbox{\hyperlink{a01837_adf4d2d6060bf3e13619838cea8b59865}{Is\+Parameter\+Link\+Ready()}} returns {\ttfamily false} during automation playback because the updated parameter is not touched. This ensures that automation playback will proceed with the written values and also guarantees that the user will always be able to override the automation using a control surface encoder or GUI editor.
\end{DoxyEnumerate}


\begin{DoxyImage}
\includegraphics[width=\textwidth,height=\textheight/2,keepaspectratio=true]{msc_AAX_LinkedParameterUpdate_Automation}
\doxyfigcaption{Sequence of method calls and events during automation playback with linked parameters}
\end{DoxyImage}
 Collaboration diagram for Linked parameter update sequences\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=339pt]{a00908}
\end{center}
\end{figure}
