<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ice-online.com/index.php?action=history&amp;feed=atom&amp;title=SNAPAPP</id>
	<title>SNAPAPP - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ice-online.com/index.php?action=history&amp;feed=atom&amp;title=SNAPAPP"/>
	<link rel="alternate" type="text/html" href="https://wiki.ice-online.com/index.php?title=SNAPAPP&amp;action=history"/>
	<updated>2026-06-10T16:29:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.ice-online.com/index.php?title=SNAPAPP&amp;diff=638&amp;oldid=prev</id>
		<title>ConvertBot: table driven application interface to one or more snapper macros (NextMidas Only)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ice-online.com/index.php?title=SNAPAPP&amp;diff=638&amp;oldid=prev"/>
		<updated>2020-04-27T19:19:32Z</updated>

		<summary type="html">&lt;p&gt;table driven application interface to one or more snapper macros (NextMidas Only)&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&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: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 19:19, 27 April 2020&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-l209&quot; &gt;Line 209:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 209:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; 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;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; 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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; 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;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; 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;/pre&amp;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='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; 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='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; 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;[[Category:ICE_Explain]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ConvertBot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ice-online.com/index.php?title=SNAPAPP&amp;diff=595&amp;oldid=prev</id>
		<title>ConvertBot: table driven application interface to one or more snapper macros (NextMidas Only)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ice-online.com/index.php?title=SNAPAPP&amp;diff=595&amp;oldid=prev"/>
		<updated>2020-04-27T18:59:46Z</updated>

		<summary type="html">&lt;p&gt;table driven application interface to one or more snapper macros (NextMidas Only)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;table driven application interface to one or more snapper macros (NextMidas Only)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;    Optional table of multiple case configurations (defaults to nxm.ice.mcr.snapapp.tbl)&lt;br /&gt;
&amp;lt;app 1:N&amp;gt;  Application configuration case name for 1 to N snapper macros&lt;br /&gt;
&lt;br /&gt;
This macro is a GUI to deploy one or more instances of the SNAPPER macro tailored to &lt;br /&gt;
specific ACQUIRE/PLAYBACK applications. &lt;br /&gt;
&lt;br /&gt;
An example table config file is found int ICEROOT/tbl/snapapp.tbl.&lt;br /&gt;
You may wish to modify this, put it somewhere in your AUX path, and supply that as the argument &lt;br /&gt;
to this macro.  For example:&lt;br /&gt;
&lt;br /&gt;
  nM&amp;gt; snapapp myconfig.tbl&lt;br /&gt;
&lt;br /&gt;
There are two types of entries in the config file.&lt;br /&gt;
&lt;br /&gt;
The first is a table named SNAPSET which contains the default parameters for the SNAPPER macro.  &lt;br /&gt;
It has the form:&lt;br /&gt;
&lt;br /&gt;
SNAPSET={&lt;br /&gt;
  PORT=MODULE1&lt;br /&gt;
  FORMAT=SB&lt;br /&gt;
  RATE=20&lt;br /&gt;
  CLOCK=A&lt;br /&gt;
  LENGTH=1.0&lt;br /&gt;
  DEC=512&lt;br /&gt;
  FREQ=1&lt;br /&gt;
  GAIN=0&lt;br /&gt;
  NFFT=2k&lt;br /&gt;
  PSDR=10&lt;br /&gt;
  PSDA=1&lt;br /&gt;
  FRAME=2430&lt;br /&gt;
  AFNAME=archive&lt;br /&gt;
  WAVE=NONE&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
This table is usually followed by multiple Case tables that define specific&lt;br /&gt;
parameters for different applications.  Each case table name begins with CASE_&lt;br /&gt;
followed by the Application Config Entry name.  This name can be entered from&lt;br /&gt;
the command line, or chosen from the interactive configuration menus.&lt;br /&gt;
The case entry has the form:&lt;br /&gt;
&lt;br /&gt;
CASE_MCARCH={&lt;br /&gt;
  CARD=PIC1IIA&lt;br /&gt;
  PORT=TUNER1&lt;br /&gt;
  FORMAT=CI&lt;br /&gt;
  RATE=10&lt;br /&gt;
  CLOCK=I&lt;br /&gt;
  LENGTH=1&lt;br /&gt;
  FREQ=1&lt;br /&gt;
  DEC=32&lt;br /&gt;
  NFFT=4K&lt;br /&gt;
  AFNAME=&amp;quot;mcarch&amp;quot;&lt;br /&gt;
  AFQUAL=&amp;quot;MAXLINES=16,MAXLINESIZE=8M,AUXLIST=11|12&amp;quot;&lt;br /&gt;
  FLAGS=ITDEC&lt;br /&gt;
  SWITCHES=MULTI=4/DFREQ=1e3/AAUX=11/ATL=8K/GC={MODE=RTARCH,AOVER=APP,APKT=OFF}/MLOG=MCARCH&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
These parameters can override any of the parameters in the SNAPSET defaults.  All are optional.  &lt;br /&gt;
See the explain on SNAPPER for an explanation of these parameters.&lt;br /&gt;
&lt;br /&gt;
Cases can be sub-cased to reuse most of the parameters from previously defined cases. &lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
CASE_MCARCH2={&lt;br /&gt;
  CASE=MCARCH&lt;br /&gt;
  PORT=TUNER2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Uses all of the values from CASE_MCARCH but overrides the PORT parameter.&lt;br /&gt;
When sub-casing, the special string $CASE will be substituted with the previous case's value of that parameter.&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
CASE_MCARCH2={&lt;br /&gt;
  CASE=MCARCH&lt;br /&gt;
  PORT=TUNER2&lt;br /&gt;
  AFQUAL=&amp;quot;$CASE|&amp;quot;&lt;br /&gt;
  SWITCHES=/MULTI=8/$CASE&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Note that switches have right to left preferencing and flags have left to right preferencing.&lt;br /&gt;
&lt;br /&gt;
Sub-casing can be nested any number of levels.&lt;br /&gt;
&lt;br /&gt;
Special case table entries are:&lt;br /&gt;
&lt;br /&gt;
  FLAGS - flags for the SNAPPER macro call (second argument to snapper)&lt;br /&gt;
  SWITCHES - switches to place on the SNAPPER macro call&lt;br /&gt;
  AFQUAL - Archive File qualifiers for the archive file name&lt;br /&gt;
&lt;br /&gt;
When APP1 and APP2 both use the same card, a /NORESET is automatically applied to APP2.&lt;br /&gt;
In this case, as well as any master/slave cases the menu items for starting the apps will&lt;br /&gt;
sequence the starts and stops properly.  If the individual SNAPPER macro menus are used to &lt;br /&gt;
start the apps, be careful to start slaves 1st, then masters.&lt;br /&gt;
&lt;br /&gt;
The /ACTIONS=list switch allows the user to customize the actions menu list.  &lt;br /&gt;
The available actions are:&lt;br /&gt;
&lt;br /&gt;
  Monitor - Real-Time to/from memory buffer&lt;br /&gt;
  Rec/PB - Real-Time to/from streaming disk file&lt;br /&gt;
  Stop - Pause and/or configuration state&lt;br /&gt;
  Snap - snapshot a single memory buffer&lt;br /&gt;
  Play - same as RTArchive for playback&lt;br /&gt;
  Record - same as RTArchive for acquisition&lt;br /&gt;
  Rec/PB - displays Play or Record depending on App1 switches&lt;br /&gt;
  Cntrls - toggle viewing of the control widgets&lt;br /&gt;
  Exit - exit the application&lt;br /&gt;
  PowerOff - exit the application with POWEROFF=TRUE set (test $NM_OS/nmsf POWEROFF)&lt;br /&gt;
&lt;br /&gt;
The /ACTION=item switch applies the &amp;lt;item&amp;gt; action directly after configuration.  &lt;br /&gt;
This can be used with /AUTOEXIT, /AUTOARCHIVE, and/or /BATCH to run automated scripts or icons.&lt;br /&gt;
&lt;br /&gt;
If a configuration table contains an APPLIST section the /MENU switch will display this&lt;br /&gt;
menu to the user and run snapapp with the arguments list selected by APP name.  For example:&lt;br /&gt;
&lt;br /&gt;
APPLIST={&lt;br /&gt;
  APP1=&amp;quot;PIC2_OO,PIC1_II&amp;quot;&lt;br /&gt;
  APP2=&amp;quot;PIC1IOST_O,PIC1IOST_I&amp;quot;&lt;br /&gt;
  DRFM=&amp;quot;DRFM_PLY1200,DRFM_ACQ1200,/SHOW=0&amp;quot;&lt;br /&gt;
  ONESHOT=&amp;quot;PIC1TSS,/ACTION=RTARCH,/AUTOEXIT&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Running snapapp/menu &amp;lt;table&amp;gt;  will display a menu containing the items &amp;quot;APP1,APP2,DRFM,ONESHOT&amp;quot;&lt;br /&gt;
and run snapapp with the listed arguments when selected.  Note: the /menu switch must come directly &lt;br /&gt;
after the command name so as not to be inherited by the internal snapapp call.&lt;br /&gt;
&lt;br /&gt;
To expose a list of cases other than all CASE_* entries in the table, add the PUBLIC=x,y,z table entry.&lt;br /&gt;
&lt;br /&gt;
  PUBLIC=&amp;quot;MCARCH1,MCARCH2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To hide a list of cases that are contained in the table, add the PRIVATE=x,y,z table entry.&lt;br /&gt;
&lt;br /&gt;
  PRIVATE=&amp;quot;MCARCH1,MCARCH2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A custom operational control panel is configured by the COMMON_CONTROLS=tbl and CONTROLS=tbl entries in &lt;br /&gt;
the configuration file.  The /CCT=tbl switch can be used to specify a unique Common Controls Table at &lt;br /&gt;
runtime or for different scenarios. These controls are tagged with instance name &amp;quot;_0&amp;quot; and are tied to all&lt;br /&gt;
snapper instances. They must be initialized to the desired setting. &lt;br /&gt;
&lt;br /&gt;
COMMON_CONTROLS={&lt;br /&gt;
  GAIN={VALUE=5}&lt;br /&gt;
  RFFREQ={MIN=1000,MAX=2000}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Copies the GAIN widget to the SNAPAPP global controls and sets the value to 5.&lt;br /&gt;
Also copies the RFFREQ widget to the global controls and bounds the widget between 1000 and 2000 MHz.&lt;br /&gt;
&lt;br /&gt;
The CASE specific snapper controls are defined in the CASE_xxx.CONTROLS table of the config file.  &lt;br /&gt;
These controls are initialized to the values in the underlying snapper instance at startup.  &lt;br /&gt;
&lt;br /&gt;
CASE_MCARCH2={&lt;br /&gt;
  CASE=MCARCH&lt;br /&gt;
  PORT=TUNER2&lt;br /&gt;
  CONTROLS={&lt;br /&gt;
    DEC={}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Copies the DECimation widget to the SNAPAPP controls for all SNAPPERS running or subcasing case MCARCH2.&lt;br /&gt;
&lt;br /&gt;
All global and case specific controls that are non-editable (/edit=f) are polled once per second to display &lt;br /&gt;
the current value of the underlying snapper. Common controls poll the 1st snapper instance only.&lt;br /&gt;
&lt;br /&gt;
To prevent the &amp;lt;Cntrls&amp;gt; button from toggling through the non-custom SNAPPER controls sections, add the MODCNTRLS table entry.&lt;br /&gt;
&lt;br /&gt;
  MODCNTRLS=2&lt;br /&gt;
&lt;br /&gt;
If the /SERVICE=port switch is applied to snapapp, a /SERVER=port+N switch is applied to each of the N &lt;br /&gt;
snapper instances called by snapapp.  This will create a seperate web server for the SNAPAPP operator&lt;br /&gt;
controls and each of the individual SNAPPER engineering controls.  These controls are available through&lt;br /&gt;
HTTP or RMIF calls.  See the help on ICENET for Midas and non-Midas client code.  For example:&lt;br /&gt;
&lt;br /&gt;
  nM&amp;gt; icenet SET 192.168.0.123:9001 {CHAN=4,FREQ=1.23,GAIN=3} HTTP&lt;br /&gt;
&lt;br /&gt;
Sets the CHAN, FREQ, and GAIN widgets of the 1st snapper instance if /SERVICE=9000 is placed on the SNAPAPP call.&lt;br /&gt;
&lt;br /&gt;
  http::192.168.0.123:9000/Controls/Set?{ACTION=MON}&lt;br /&gt;
&lt;br /&gt;
Sets the ACTION widget of the SNAPAPP macro starting all of the underlying SNAPPERS in monitor mode.&lt;br /&gt;
&lt;br /&gt;
For status of the system snapapp is operating on, see the help on ICE CONCEPTS NETWORK SERVICE:&lt;br /&gt;
&lt;br /&gt;
Switches: &lt;br /&gt;
  /ACTION=item - initiate the named action menu item (i.e. Monitor, Rec/PB, SnapShot)&lt;br /&gt;
  /ACTIONS=list - over-ride the default comma separated list of available actions&lt;br /&gt;
  /AFLAGSx=list - additional flags for application x=1|2...&lt;br /&gt;
  /APPEXT=macro - Application Extension Macro name&lt;br /&gt;
  /AUTOARCHIVE - to be inherited by SNAPPER submacros&lt;br /&gt;
  /AUTOCONFIG - override the card alias with an auto-detected configuration result&lt;br /&gt;
  /AUTOEXIT - to be inherited by SNAPPER submacros, exit when all snappers exit&lt;br /&gt;
  /AUTOEXIT=N - wait for the first N submacros to exit&lt;br /&gt;
  /AUTOSYNC - auto synchronize snapper starts to 1st App (applies XSOE,SGO,XTGO,RGO as appropriate)&lt;br /&gt;
  /BSIDE - run this case for the B side of the card&lt;br /&gt;
  /FILE=tbl - table of global controls to apply to all snapper instances (or query from snap1)&lt;br /&gt;
  /FILL=s - fill mode for populating panel (default s=LRTB Left2Right Top2Bott, also TBLR)&lt;br /&gt;
  /MAXCHK=n - inherited by ICEDIFF to limit number of samples in data check operations&lt;br /&gt;
  /MENU - popup a menu of the config table's APPLIST entry for selection &lt;br /&gt;
  /NW=n - number of application windows to display&lt;br /&gt;
  /QUIET - suppress messages about internally applied flags and switches&lt;br /&gt;
  /SERVICE=port - add webserver to SNAPAPP and each SNAPPER submacro&lt;br /&gt;
  /SHOW=n - control display of widget panels 0=none 1=appControls 2=snapControls 3=allControls (default=2)&lt;br /&gt;
  /TBL=name - name of table file (checks aux path and ICEROOT/tbl paths for named .tbl file)&lt;br /&gt;
  /TEST - output the flags and switches for each SNAPPER invocation but do not execute&lt;br /&gt;
  /TIMEOUT=n - run for N seconds and quit&lt;br /&gt;
  /TP - use internal test port to auto synchronize multiple cards instead of eXternal SMB&lt;br /&gt;
  /USE={} - use entries in table to override any of the configuration entries (ex /use={card=pic3,clock=px}&lt;br /&gt;
  /USEGC={} - use entries in table to override any of the /GC={} graphical controls (ex /usegc={RFFREQ==1200,RFBW=30}&lt;br /&gt;
  /VERBOSE=n - pass the /verbose on to the snapper macros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>ConvertBot</name></author>
		
	</entry>
</feed>