{"id":3396,"date":"2025-04-18T06:37:19","date_gmt":"2025-04-18T06:37:19","guid":{"rendered":"https:\/\/webprojects.cloud\/wordpress\/splatco\/?post_type=spl_knowledgebase&#038;p=3396"},"modified":"2025-06-10T11:06:21","modified_gmt":"2025-06-10T11:06:21","slug":"test-3-retrieve-multiple-values-from-the-server","status":"publish","type":"spl_knowledgebase","link":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/","title":{"rendered":"Test 3: Retrieve multiple values from the server"},"content":{"rendered":"\n<p>This test shows how something entered on a web page can be sent to a SPLat and actioned. This is the basis of over-the-web remote machine control.<\/p>\n\n\n\n<p>On the sandbox page there is an area at the bottom where you can enter two numerical values and two on\/off settings. We will now fetch those from the server. The numeric values will be displayed on the LCD, while the two on\/off settings will control front panel LEDs. (Remember, when you change any of these on the sandbox page you must click &#8220;Save&#8221; for the changes to become active).<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">The initial stuff<\/h6>\n\n\n\n<p>The codes starts of with the familiar actions, ending in sending the query string &#8220;<code>config<\/code>&#8221; (the query string doesn&#8217;t&nbsp;<em>have<\/em>&nbsp;to be name-value pairs!). I&#8217;m not showing that code here. At the end of it the server&#8217;s response will be in the SX10509 network Rx buffer. This consists of four name-value pairs separated by carriage return (<code>'0D<\/code>) characters.<\/p>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">therm=67.78\ncktime=99\npump=0\nvalve=1<\/pre>\n\n\n\n<h6 class=\"wp-block-heading\">Initializing the parsing loop<\/h6>\n\n\n\n<p>The data that comes back from the server has to be&nbsp;<em>parsed<\/em>, meaning it must have its 4 component parts (the 4 variables) extracted. We will do this in a program loop, which works like this:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Initialize the loop;<\/li>\n\n\n\n<li>Read one &#8220;chunk&#8221; from the SX10509;<\/li>\n\n\n\n<li>If there was nothing left in the SX10509, go to step 7;<\/li>\n\n\n\n<li>Determine which data item name is at the start of what we just read from the SX10509;<\/li>\n\n\n\n<li>Extract its value and act on it;<\/li>\n\n\n\n<li>Go to step 2;<\/li>\n\n\n\n<li>Finished.<\/li>\n<\/ol>\n\n\n\n<p>Step 1, initializing the loop, consists simply of setting a variable,&nbsp;<code>bSCH_RxBufferOffset<\/code>, to 0. For each iteration of the loop&nbsp;<code>bSCH_RxBufferOffset<\/code>&nbsp;will be used to move the point where we read from in the SX10509 network receive buffer. Its value for each iteration of the parsing loop will actually equal the number of characters that were &#8220;consumed&#8221; on the previous iteration. Here&#8217;s the initialization code, which also clears the LCD:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">        OBLCD_Cls\n        SetMem          bSCH_RxBufferOffset,0  ;Initialise the offset pointer<\/pre>\n\n\n\n<p>Each time we read from the SX10509 we will send it the current value of&nbsp;<code>bSCH_RxBufferOffset<\/code>. The SX10509 will add that to the previously accumulated read offset to decide where to start reading from. If we send it 0, the SX10509 resets its offset to 0.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">The parsing loop<\/h6>\n\n\n\n<p>The basic principle of how we handle the returned data is this: Each data item identifies itself with a variable name and an equals sign. So we start at the beginning and test if the stuff at the start of the SX10509 network Rx buffer is a recognizable name. Assuming it is, we extract the value (up to the terminating carriage return or end of the data) and take whatever action is required for that named item. Then we move the starting point in the SX10509 network Rx buffer to skip the characters just processed. We repeat this (loop) until all the data in the SX10509 network Rx buffer has been used up. You should note that we do a fresh read of the SX10509 network Rx buffer into the Xwire Rx data block for each data item, starting from the accumulated offset in the SX10509 network Rx buffer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"76\" src=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg\" alt=\"\" class=\"wp-image-3397\" srcset=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg 450w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1-300x51.jpg 300w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1-64x11.jpg 64w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p>The diagram above shows the situation after the first Read command is echoed by the SX10509. The yellow boxes are the 30 bytes that contain data in the Xwire Rx data block in the SPLat. The white on blue text is the contents of the Network Rx buffer in the SX10509 board. The arrow shows where data is moved from. Carriage return characters are represented by pipe symbols |. To the left you can see the read offset that&#8217;s used in the SX10509 for this read, and the number of bytes reported in&nbsp;<code>bRxLength<\/code>.<\/p>\n\n\n\n<p>Here&#8217;s the code that actually reads from the SX10509. It uses the&nbsp;<code>SCH_Read<\/code>&nbsp;subroutine we developed earlier, with&nbsp;<code>bSCH_RxBufferOffset<\/code>&nbsp;as an argument, to read from the SX10509. When the read is done it checks that there was something there and terminates the process if there was nothing.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ParseLoop:\n        Recall          bSCH_RxBufferOffset\n        XtoI     \n        GoSub           SCH_Read       ;Read from SCH n\/w Rx buffer at offset I. \n                                       ;Result in Xwire n\/w Rx data block\n        WaitForST       sSCH_GotEcho   ;Wait for the command to be echoed\n        GoIfMZ          bRxLength,T3_NoMoreData  ;Make sure SCH returned something, else quit<\/pre>\n\n\n\n<p>After the Read the program tests for a valid variable name at the start of the Xwire Rx data block. It does this using the&nbsp;<code><a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/programming-reference\/instructions-arranged-by-function\/xwire-instructions\/iistrfind-bbnnc-d28\/\">iiStrFind<\/a><\/code>&nbsp;instruction.&nbsp;<code>iiStrFind<\/code>&nbsp;was designed specifically for this kind of use. Its documentation explains in detail how it works. This section of code ends in a&nbsp;<code><a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/programming-reference\/instructions-arranged-by-function\/number-comparison-and-testing-instructions\/comparison-and-testing-for-byte-values\/branch\/\">Branch<\/a><\/code>&nbsp;to the appropriate code for each expected variable name, plus a catch-all if no match is found.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">        NVSetPtr        ptrValueNames ;Set the <a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/glossary-of-terms\/#o2970\">NVEM<\/a> pointer to the table of string pointers<br>        NVSetPage       0             ;Playing safe <br>        LoadI           0             ;Search from the 1st data byte in the Xwire network Rx data block<br>        iiStrFind       abRxData,kRxDataLen,0  ;Try to find a match in NVEM table of variable names<br>        Branch<br>        Target          T3_NoMoreData ;Not found in the table<br>        Target          T3_Therm<br>        Target          T3_CkTime<br>        Target          T3_Pump<br>        Target          T3_Valve<\/pre>\n\n\n\n<p>After the first Read, when the SPLat program checks if there is a recognizable variable name at the start of the Xwire Rx data block, it will find&nbsp;<code>therm=<\/code>. At the same time&nbsp;<code>I<\/code>&nbsp;will have been incremented so it &#8220;points&#8221; to the start of the value (courtesy of the magic of&nbsp;<code>iiStrFind<\/code>). The program then does a&nbsp;<code>Branch<\/code>&nbsp;to&nbsp;<code>T3_Therm<\/code>, the code required to handle the variable&nbsp;<code>therm<\/code>. This extracts the value (<code>67.78<\/code>) using a&nbsp;<code>iifGetNum<\/code>.&nbsp;<code>iifGetNum<\/code>, increments&nbsp;<code>I<\/code>&nbsp;by the number of characters processed in extracting the value.<\/p>\n\n\n\n<p>You will notice that&nbsp;<code>iiStrFind<\/code>&nbsp;and&nbsp;<code>iifGetNum<\/code>, have both incremented&nbsp;<code>I<\/code>&nbsp;by the number of characters each &#8220;consumed&#8221;. As we set&nbsp;<code>I<\/code>&nbsp;to 0 just before the&nbsp;<code>iiStrFind<\/code>,&nbsp;<code>I<\/code>&nbsp;will now contain the exact count of the total number of characters consumed in extracting the name-value pair.<\/p>\n\n\n\n<p>A simple subroutine,&nbsp;<code>UpdatePointers<\/code>, not shown here, takes care of incrementing&nbsp;<code>I<\/code>&nbsp;to account for the carriage return character after each name-value pair and updating&nbsp;<code>bSCH_RxBufferOffset<\/code>&nbsp;ready for next time.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">T3_Therm:    ;Get the temperature value and display\n        iifGetNum       abRxData,kRxDataLen,255 ;Get a float from the Xwire n\/w Rx data block\n        OBLCD_SetCur    0,0\n        OBLCD_Text      \"T=\"\n        OBLCD_fDispW    5,2   \n        GoSub           UpdatePointers\n        GoTo            ParseLoop<\/pre>\n\n\n\n<p>By the time&nbsp;<code>therm<\/code>&nbsp;has been processed&nbsp;<code>bSCH_RxBufferOffset<\/code>&nbsp;will contain 12, the exact number of characters in&nbsp;<code>therm=67.78|<\/code>.<\/p>\n\n\n\n<p>After the second pass through the parsing loop, the situation is as shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"83\" src=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-2.jpg\" alt=\"\" class=\"wp-image-3398\" srcset=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-2.jpg 450w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-2-300x55.jpg 300w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-2-64x12.jpg 64w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p>The second Read is performed with&nbsp;<code>bSCH_RxBufferOffset=12<\/code>, and the Read offset in the SX10509 also at 12. Hence the readout starts at the 13th character in the SX10509, which winds up in the 1st data byte of the Xwire Rx data block in the SPLat. This time, the reported byte count is only 24, as that is the number of characters actually transferred. This time the variable name&nbsp;<code>cktime<\/code>&nbsp;is extracted, along with its value,&nbsp;<code>99<\/code>&nbsp;(code not shown here). The number of bytes consumed is 10.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"83\" src=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-3.jpg\" alt=\"\" class=\"wp-image-3399\" srcset=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-3.jpg 450w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-3-300x55.jpg 300w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-3-64x12.jpg 64w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p>The third Read is performed with\u00a0<code>bSCH_RxBufferOffset=10<\/code>. This is sent to the SX10509, where it is added to the already existing value of 12, to give a new offset of 22. Hence the readout starts at the 23rd character in the SX10509, which winds up in the 1st data byte of the Xwire Rx data block in the SPLat. This time, the reported byte count is 14 The variable name\u00a0<code>pump<\/code>\u00a0is extracted, along with its value,\u00a0<code>0<\/code>. The number of bytes consumed is 7. The code that handles\u00a0<code>pump<\/code>\u00a0updates a front panel LED. To do this it exploits the fact that ASCII 0 has bit 0 clear, while ASCII 1 has bit 0 set. Hence an\u00a0<a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/programming-reference\/instructions-arranged-by-function\/logical-instructions\/andm\/\" target=\"_blank\" rel=\"noreferrer noopener\">AndM<\/a>\u00a0with 1 will give 1 or zero, which can be sent to the LED output.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">T3_Pump:\n        iRecall         abRxData                ;'30 for OFF, '31 for ON\n        IncI                                    ;Past the character just used\n        LoadX           1\n        AndM\n        Output          oLED0\n        GoSub           UpdatePointers\n        GoTo            ParseLoop<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"83\" src=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-4.jpg\" alt=\"\" class=\"wp-image-3400\" srcset=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-4.jpg 450w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-4-300x55.jpg 300w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-4-64x12.jpg 64w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p>The 4th read provides a bit of a change, because it has no terminating carriage return. The SX10509 will actually return&nbsp;<code>'00<\/code>&nbsp;bytes on a read, if there is nothing else there. The absence of a carriage return is not a problem.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"81\" src=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-5.jpg\" alt=\"\" class=\"wp-image-3401\" srcset=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-5.jpg 450w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-5-300x54.jpg 300w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-5-64x12.jpg 64w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure>\n\n\n\n<p>The fifth read returns nothing, because it is indexed past the end of the data. This is signalled in the&nbsp;<code>bRxLength<\/code>&nbsp;byte. You may recall that we test for this very condition near the top of the parsing loop.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">        GoIfMZ          bRxLength,T3_NoMoreData  ;Make sure SCH returned something<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This test shows how something entered on a web page can be sent to a SPLat and actioned. This is the basis of over-the-web remote&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":3387,"menu_order":7,"template":"","class_list":["post-3396","spl_knowledgebase","type-spl_knowledgebase","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Test 3: Retrieve multiple values from the server - SPLat Controls<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Test 3: Retrieve multiple values from the server - SPLat Controls\" \/>\n<meta property=\"og:description\" content=\"This test shows how something entered on a web page can be sent to a SPLat and actioned. This is the basis of over-the-web remote...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/\" \/>\n<meta property=\"og:site_name\" content=\"SPLat Controls\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-10T11:06:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"76\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/\",\"name\":\"Test 3: Retrieve multiple values from the server - SPLat Controls\",\"isPartOf\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg\",\"datePublished\":\"2025-04-18T06:37:19+00:00\",\"dateModified\":\"2025-06-10T11:06:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#primaryimage\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg\",\"contentUrl\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg\",\"width\":450,\"height\":76},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorials, application notes and white papers\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Tutorial: SPLat Call Home (SX10509) programming\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Example: SPLat Call Home sandbox program\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Test 3: Retrieve multiple values from the server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\",\"name\":\"SPLat Controls\",\"description\":\"OEM Embedded Machine Controllers\",\"publisher\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization\",\"name\":\"SPLat Controls\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg\",\"contentUrl\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg\",\"caption\":\"SPLat Controls\"},\"image\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Test 3: Retrieve multiple values from the server - SPLat Controls","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Test 3: Retrieve multiple values from the server - SPLat Controls","og_description":"This test shows how something entered on a web page can be sent to a SPLat and actioned. This is the basis of over-the-web remote...","og_url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/","og_site_name":"SPLat Controls","article_modified_time":"2025-06-10T11:06:21+00:00","og_image":[{"width":450,"height":76,"url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/","name":"Test 3: Retrieve multiple values from the server - SPLat Controls","isPartOf":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#primaryimage"},"image":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#primaryimage"},"thumbnailUrl":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg","datePublished":"2025-04-18T06:37:19+00:00","dateModified":"2025-06-10T11:06:21+00:00","breadcrumb":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#primaryimage","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg","contentUrl":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/04\/The-parsing-loop-1.jpg","width":450,"height":76},{"@type":"BreadcrumbList","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/test-3-retrieve-multiple-values-from-the-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/"},{"@type":"ListItem","position":2,"name":"Tutorials, application notes and white papers","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/"},{"@type":"ListItem","position":3,"name":"Tutorial: SPLat Call Home (SX10509) programming","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/"},{"@type":"ListItem","position":4,"name":"Example: SPLat Call Home sandbox program","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/knowledgebase\/tutorials-application-notes-and-white-papers\/tutorial-splat-call-home-sx10509-programming\/example-splat-call-home-sandbox-program\/"},{"@type":"ListItem","position":5,"name":"Test 3: Retrieve multiple values from the server"}]},{"@type":"WebSite","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/","name":"SPLat Controls","description":"OEM Embedded Machine Controllers","publisher":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webprojects.cloud\/wordpress\/splatco\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization","name":"SPLat Controls","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg","contentUrl":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg","caption":"SPLat Controls"},"image":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/spl_knowledgebase\/3396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/spl_knowledgebase"}],"about":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/types\/spl_knowledgebase"}],"author":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/users\/1"}],"up":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/spl_knowledgebase\/3387"}],"wp:attachment":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/media?parent=3396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}