<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Geometrics Forum - Recent Posts				            </title>
            <link>https://www.geometrics.com/community/</link>
            <description>Geometrics Discussion Board</description>
            <language>en-US</language>
            <lastBuildDate>Mon, 11 May 2026 16:20:28 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>How to download or delete raw data from MagStation micro-SD card</title>
                        <link>https://www.geometrics.com/community/magex-magex-software/how-to-download-or-delete-raw-data-from-magstation-micro-sd-card/#post-1276</link>
                        <pubDate>Wed, 22 Apr 2026 00:27:28 +0000</pubDate>
                        <description><![CDATA[1. Establish WIFI connection between your PC and the MagStation.
2. Open a web browser and type in

3. Click &quot;Delete project storage&quot; or &quot;Download survey data&quot; to delete or down raw data ...]]></description>
                        <content:encoded><![CDATA[<p>1. Establish WIFI connection between your PC and the MagStation.</p>
<p>2. Open a web browser and type in <span style="text-decoration: underline">http://192.168.1.1/supporttools.htm</span>. </p>
153
<p>3. Click "Delete project storage" or "Download survey data" to delete or down raw data from micro-SD card. We recommend deleting raw data files after 700 hours data collection. </p>
<p>4. The downloaded survey data is in .magdata format. To convert it to CSV, open Survey Manager and create a new MagStation project. Inside the project, create a new survey. Select the survey name, click "Import Data" and then choose the .magdata file. After successful import, click "Export CSV".</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Rui Zhang</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magex-magex-software/how-to-download-or-delete-raw-data-from-magstation-micro-sd-card/#post-1276</guid>
                    </item>
				                    <item>
                        <title>Why does my mobile device sometimes disconnect from instrument WIFI?</title>
                        <link>https://www.geometrics.com/community/general-magnetometer/why-does-my-mobile-device-sometimes-disconnect-from-instrument-wifi/#post-1275</link>
                        <pubDate>Tue, 21 Apr 2026 19:38:13 +0000</pubDate>
                        <description><![CDATA[Geometrics instruments, such as G-864, MagEx, MagArrow, MagStation et al, communicate with a mobile device via WIFI. But because the instrument WIFI has NO internet access, some Android devi...]]></description>
                        <content:encoded><![CDATA[<p>Geometrics instruments, such as G-864, MagEx, MagArrow, MagStation et al, communicate with a mobile device via WIFI. But because the instrument WIFI has NO internet access, some Android device, after connecting to the instrument for a while, will automatically start searching for another WIFI access point. To prevent this from happening, when the No Internet Access warning window pops up after first WiFi connection, choose "Tap for options". On the following window, check the “Don’t ask again for this network” box and press “Yes” .</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Rui Zhang</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/general-magnetometer/why-does-my-mobile-device-sometimes-disconnect-from-instrument-wifi/#post-1275</guid>
                    </item>
				                    <item>
                        <title>RE: Geometrics preliminary MagArrow and MagEx data processing program download</title>
                        <link>https://www.geometrics.com/community/magarrow-software/geometrics-preliminary-magarrow-and-magex-data-processing-program-download/paged/2/#post-1274</link>
                        <pubDate>Fri, 03 Apr 2026 12:41:30 +0000</pubDate>
                        <description><![CDATA[I got it . it&#039;s worked now.]]></description>
                        <content:encoded><![CDATA[<p>I got it . it's worked now.</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Sotheavy Lok</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magarrow-software/geometrics-preliminary-magarrow-and-magex-data-processing-program-download/paged/2/#post-1274</guid>
                    </item>
				                    <item>
                        <title>RE: Geometrics preliminary MagArrow and MagEx data processing program download</title>
                        <link>https://www.geometrics.com/community/magarrow-software/geometrics-preliminary-magarrow-and-magex-data-processing-program-download/paged/2/#post-1273</link>
                        <pubDate>Fri, 03 Apr 2026 11:54:39 +0000</pubDate>
                        <description><![CDATA[]]></description>
                        <content:encoded><![CDATA[
<p>&nbsp;</p>
<p>The zipped files can be downloaded here:</p>
<span class="wpf-attachment-404">-- attachment is not available --</span>
<p>After unzip, please keep all files and folders! </p>
<p>Before you run the program, please download and install the LabView Runtime (free, 64-bit 2020 SP1) first:<br />https://www.ni.com/en-us/support/downloads/software-products/download.labview-runtime.html#369642</p>
<p>The user guide is located in the folder. </p>
<p>It is worth mentioning that the data processing program provides 2 methods of suppressing the survey noise: <br />1. Through frequency filtering and line levelling (Survey Data Noise Reduction).<br />2. Heading effect compensation (Heading Error Compensation).</p>
<p>In general, to perform the heading error compensation, you need to collect heading effect calibration data (Instruction included in the folder). <br />It is possible that the calibration data can be obtained from the survey data itself. <br />If you have trouble processing your data, please share some of your data with Geometrics and we can provide help, especially in generating the calibration file.</p>
<p>If the trial version expires, please replace the configuration file inside the Config Files folder with the new one below:</p>
<span class="wpf-attachment-404">-- attachment is not available --</span>
<p>Leave a comment if you have questions!</p>
152
<br />
<p>&nbsp;</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Sotheavy Lok</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magarrow-software/geometrics-preliminary-magarrow-and-magex-data-processing-program-download/paged/2/#post-1273</guid>
                    </item>
				                    <item>
                        <title>RE: Teensy 4.1 with MFAM</title>
                        <link>https://www.geometrics.com/community/mfam/teensy-4-1-with-mfam/#post-1272</link>
                        <pubDate>Wed, 25 Mar 2026 18:31:16 +0000</pubDate>
                        <description><![CDATA[Nice work! Thanks for sharing!]]></description>
                        <content:encoded><![CDATA[<p>Nice work! Thanks for sharing!</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Rui Zhang</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/mfam/teensy-4-1-with-mfam/#post-1272</guid>
                    </item>
				                    <item>
                        <title>Teensy 4.1 with MFAM</title>
                        <link>https://www.geometrics.com/community/mfam/teensy-4-1-with-mfam/#post-1271</link>
                        <pubDate>Wed, 25 Mar 2026 09:21:36 +0000</pubDate>
                        <description><![CDATA[Hi All,
&nbsp;
We are using the Teensy 4.1 as a logger (Adafruit GPS is linked with the Teensy) for the MFAM SX. Below is the code for the Arduino IDE (Teensy), for people who might find i...]]></description>
                        <content:encoded><![CDATA[<p>Hi All,</p>
<p>&nbsp;</p>
<p>We are using the Teensy 4.1 as a logger (Adafruit GPS is linked with the Teensy) for the MFAM SX. Below is the code for the Arduino IDE (Teensy), for people who might find it useful,</p>
<p>Roi</p>
<p>&nbsp;</p>
<div>
<div><span>#include</span><span> </span><span>&lt;NativeEthernet.h&gt;</span></div>
<div><span>#include</span><span> </span><span>&lt;SD.h&gt;</span></div>
<br />
<div><span>// ---- NETWORK CONFIGURATION ----</span></div>
<div><span>byte mac[] = </span><span>{</span><span> 0x</span><span>DE</span><span>, 0x</span><span>AD</span><span>, 0x</span><span>BE</span><span>, 0x</span><span>EF</span><span>, 0x</span><span>FE</span><span>, 0x</span><span>ED</span><span> </span><span>}</span><span>;</span></div>
<div><span>IPAddress </span><span>ip</span><span>(</span><span>192</span><span>, </span><span>168</span><span>, </span><span>2</span><span>, </span><span>10</span><span>)</span><span>;</span></div>
<div><span>IPAddress </span><span>mfamIP</span><span>(</span><span>192</span><span>, </span><span>168</span><span>, </span><span>2</span><span>, </span><span>2</span><span>)</span><span>;</span></div>
<div><span>uint16_t</span><span> mfamPort = </span><span>1000</span><span>;</span></div>
<br />
<div><span>EthernetClient client;</span></div>
<br />
<div><span>// ---- PACKET STRUCTURE ----</span></div>
<div><span>const</span><span> </span><span>int</span><span> PACKET_SIZE = </span><span>1380</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> SAMPLE_SIZE = </span><span>32</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> HEADER_SIZE = </span><span>16</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> NUM_SAMPLES = </span><span>40</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> SD_CHIP_SELECT = BUILTIN_SDCARD;</span></div>
<br />
<div><span>uint8_t</span><span> </span><span>buffer</span><span>;</span></div>
<div><span>int</span><span> bufferPos = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- SD CARD ----</span></div>
<div><span>File logFile;</span></div>
<div><span>bool</span><span> sdReady = </span><span>false</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> sampleCount = </span><span>0</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> fileStartTime = </span><span>0</span><span>;</span></div>
<div><span>char</span><span> </span><span>filename</span><span>;</span></div>
<br />
<div><span>// ---- AUXILIARY CHANNEL STORAGE ----</span></div>
<div><span>double</span><span> gyroX = </span><span>0</span><span>, gyroY = </span><span>0</span><span>, gyroZ = </span><span>0</span><span>, gyroT = </span><span>0</span><span>;</span></div>
<div><span>double</span><span> accelX = </span><span>0</span><span>, accelY = </span><span>0</span><span>, accelZ = </span><span>0</span><span>, accelT = </span><span>0</span><span>;</span></div>
<div><span>double</span><span> compassX = </span><span>0</span><span>, compassY = </span><span>0</span><span>, compassZ = </span><span>0</span><span>, compassT = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- GPS FROM ADAFRUIT MODULE ON SERIAL1 (Pin 0 = RX) ----</span></div>
<div><span>char</span><span> </span><span>gpsBuffer</span><span>;</span></div>
<div><span>int</span><span> gpsBufferPos = </span><span>0</span><span>;</span></div>
<div><span>char</span><span> </span><span>gpsString</span><span> = </span><span>""</span><span>;</span></div>
<div><span>char</span><span> </span><span>gpsDate</span><span> = </span><span>"00/00/00"</span><span>;</span></div>
<div><span>char</span><span> </span><span>gpsTime</span><span> = </span><span>"00:00:00.000"</span><span>;</span></div>
<div><span>bool</span><span> gpsFix = </span><span>false</span><span>;</span></div>
<div><span>uint8_t</span><span> tsStatus = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- OUTPUT CONTROL ----</span></div>
<div><span>// Set to 1 to log every sample, 10 for 100Hz, 20 for 50Hz, etc.</span></div>
<div><span>const</span><span> </span><span>int</span><span> DOWNSAMPLE_FACTOR = </span><span>1</span><span>;</span><span> // 50 Hz output</span></div>
<div><span>int</span><span> downsampleCounter = </span><span>0</span><span>;</span></div>
<br />
<div><span>// How many minutes per file. Set to 10, 20, 60, etc.</span></div>
<div><span>const</span><span> </span><span>int</span><span> FILE_MINUTES = </span><span>10</span><span>;</span></div>
<br />
<div><span>// ---- LED INDICATOR ----</span></div>
<div><span>// Off = starting up</span></div>
<div><span>// Very slow blink (every 3 sec) = connected and logging</span></div>
<div><span>// Fast blink (4/sec) = connected but no data arriving</span></div>
<div><span>// Solid on = no SD card</span></div>
<div><span>// 3 quick flashes then pause = cannot connect to MFAM</span></div>
<div><span>const</span><span> </span><span>int</span><span> LED_PIN = </span><span>13</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> lastBlinkTime = </span><span>0</span><span>;</span></div>
<div><span>bool</span><span> ledState = </span><span>false</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> lastDataTime = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- FUNCTION PROTOTYPES ----</span></div>
<div><span>void</span><span> </span><span>createNewFile</span><span>()</span><span>;</span></div>
<div><span>void</span><span> </span><span>parsePacket</span><span>(</span><span>uint8_t*</span><span> </span><span>pkt)</span><span>;</span></div>
<div><span>void</span><span> </span><span>parseAuxChannels</span><span>(</span><span>uint8_t*</span><span> </span><span>sample</span><span>, </span><span>uint16_t</span><span> </span><span>frameID)</span><span>;</span></div>
<div><span>void</span><span> </span><span>readGPS</span><span>()</span><span>;</span></div>
<div><span>void</span><span> </span><span>parseGPRMC</span><span>(</span><span>char*</span><span> </span><span>sentence)</span><span>;</span></div>
<div><span>void</span><span> </span><span>writeSample</span><span>(</span><span>unsigned</span><span> </span><span>long</span><span> </span><span>timestamp</span><span>, </span><span>uint16_t</span><span> </span><span>fiducial</span><span>, </span><span>double</span><span> </span><span>mag1</span><span>, </span><span>uint16_t</span><span> </span><span>mag1s</span><span>,</span></div>
<div><span> </span><span>double</span><span> </span><span>mag2</span><span>, </span><span>uint16_t</span><span> </span><span>mag2s</span><span>, </span><span>uint16_t</span><span> </span><span>sysStatus)</span><span>;</span></div>
<div><span>int16_t</span><span> </span><span>toSigned16</span><span>(</span><span>uint16_t</span><span> </span><span>val)</span><span>;</span></div>
<br />
<div><span>void</span><span> </span><span>createNewFile</span><span>()</span><span> </span><span>{</span></div>
<div><span> </span><span>static</span><span> </span><span>int</span><span> fileNumber = </span><span>0</span><span>;</span></div>
<div><span> // On first call, find the next available file number</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>fileNumber == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>char</span><span> </span><span>testName</span><span>;</span></div>
<div><span> </span><span>for</span><span> </span><span>(</span><span>int</span><span> i = </span><span>1</span><span>; i &lt;= </span><span>99999</span><span>; i++</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>testName, sizeof</span><span>(</span><span>testName</span><span>)</span><span>, </span><span>"MFAM_%05d.txt"</span><span>, i</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>!</span><span>SD</span><span>.</span><span>exists</span><span>(</span><span>testName</span><span>))</span><span> </span><span>{</span></div>
<div><span> fileNumber = i - </span><span>1</span><span>;</span><span> // Will be incremented below</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> fileNumber++;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>filename, sizeof</span><span>(</span><span>filename</span><span>)</span><span>, </span><span>"MFAM_%05d.txt"</span><span>, fileNumber</span><span>)</span><span>;</span></div>
<br />
<div><span> logFile = </span><span>SD</span><span>.</span><span>open</span><span>(</span><span>filename, FILE_WRITE</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>logFile</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>println</span><span>(</span><span>"Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS"</span><span>)</span><span>;</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>flush</span><span>()</span><span>;</span></div>
<div><span> fileStartTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"Logging to: "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>filename</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"ERROR: Could not create "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>filename</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>setup</span><span>()</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>begin</span><span>(</span><span>115200</span><span>)</span><span>;</span></div>
<div><span> </span><span>delay</span><span>(</span><span>2000</span><span>)</span><span>;</span></div>
<br />
<div><span> // Start GPS serial port (Adafruit Ultimate GPS defaults to 9600 baud)</span></div>
<div><span> </span><span>Serial1</span><span>.</span><span>begin</span><span>(</span><span>9600</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>pinMode</span><span>(</span><span>LED_PIN, OUTPUT</span><span>)</span><span>;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, LOW</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>memset</span><span>(</span><span>gpsString, </span><span>0</span><span>, sizeof</span><span>(</span><span>gpsString</span><span>))</span><span>;</span></div>
<br />
<div><span> // Initialize SD card</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>SD</span><span>.</span><span>begin</span><span>(</span><span>SD_CHIP_SELECT</span><span>))</span><span> </span><span>{</span></div>
<div><span> sdReady = </span><span>true</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"SD card ready."</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"WARNING: No SD card found. Serial output only."</span><span>)</span><span>;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, HIGH</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // Initialize Ethernet</span></div>
<div><span> </span><span>Ethernet</span><span>.</span><span>begin</span><span>(</span><span>mac, ip</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>Ethernet</span><span>.</span><span>hardwareStatus</span><span>()</span><span> == EthernetNoHardware</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"ERROR: No Ethernet hardware found!"</span><span>)</span><span>;</span></div>
<div><span> </span><span>while</span><span> </span><span>(</span><span>true</span><span>)</span><span> </span><span>{}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"Teensy IP: "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>Ethernet</span><span>.</span><span>localIP</span><span>())</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"Connecting to MFAM at "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>mfamIP</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>":"</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>mfamPort</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>client</span><span>.</span><span>connect</span><span>(</span><span>mfamIP, mfamPort</span><span>))</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Connected to MFAM!"</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Connection failed!"</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Waiting for GPS fix..."</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>createNewFile</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS"</span><span>)</span><span>;</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>loop</span><span>()</span><span> </span><span>{</span></div>
<div><span> // Always read GPS data from Serial1</span></div>
<div><span> </span><span>readGPS</span><span>()</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>!</span><span>client</span><span>.</span><span>connected</span><span>())</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Disconnected. Reconnecting..."</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady &amp;&amp; logFile</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>flush</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>for</span><span> </span><span>(</span><span>int</span><span> i = </span><span>0</span><span>; i &lt; </span><span>3</span><span>; i++</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, HIGH</span><span>)</span><span>;</span></div>
<div><span> </span><span>delay</span><span>(</span><span>100</span><span>)</span><span>;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, LOW</span><span>)</span><span>;</span></div>
<div><span> </span><span>delay</span><span>(</span><span>100</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>delay</span><span>(</span><span>1400</span><span>)</span><span>;</span></div>
<div><span> </span><span>client</span><span>.</span><span>connect</span><span>(</span><span>mfamIP, mfamPort</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>client</span><span>.</span><span>connected</span><span>())</span><span> </span><span>{</span></div>
<div><span> lastDataTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>return</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>while</span><span> </span><span>(</span><span>client</span><span>.</span><span>available</span><span>())</span><span> </span><span>{</span></div>
<div><span> </span><span>buffer</span><span> = </span><span>client</span><span>.</span><span>read</span><span>()</span><span>;</span></div>
<div><span> bufferPos++;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>bufferPos &gt;= PACKET_SIZE</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>parsePacket</span><span>(</span><span>buffer</span><span>)</span><span>;</span></div>
<div><span> bufferPos = </span><span>0</span><span>;</span></div>
<div><span> lastDataTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // LED patterns</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>millis</span><span>()</span><span> - lastDataTime &gt; </span><span>3000</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>millis</span><span>()</span><span> - lastBlinkTime &gt; </span><span>125</span><span>)</span><span> </span><span>{</span></div>
<div><span> ledState = !ledState;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, ledState ? HIGH : LOW</span><span>)</span><span>;</span></div>
<div><span> lastBlinkTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>millis</span><span>()</span><span> - lastBlinkTime &gt; </span><span>1500</span><span>)</span><span> </span><span>{</span></div>
<div><span> ledState = !ledState;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, ledState ? HIGH : LOW</span><span>)</span><span>;</span></div>
<div><span> lastBlinkTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // New file every FILE_MINUTES minutes</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady &amp;&amp; logFile &amp;&amp; </span><span>(</span><span>millis</span><span>()</span><span> - fileStartTime &gt; </span><span>(</span><span>unsigned</span><span> </span><span>long</span><span>)</span><span>FILE_MINUTES * </span><span>60</span><span>UL * </span><span>1000</span><span>UL</span><span>))</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>close</span><span>()</span><span>;</span></div>
<div><span> </span><span>createNewFile</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>// ---- GPS READING FROM ADAFRUIT MODULE ON SERIAL1 ----</span></div>
<div><span>void</span><span> </span><span>readGPS</span><span>()</span><span> </span><span>{</span></div>
<div><span> </span><span>while</span><span> </span><span>(</span><span>Serial1</span><span>.</span><span>available</span><span>())</span><span> </span><span>{</span></div>
<div><span> </span><span>char</span><span> c = </span><span>Serial1</span><span>.</span><span>read</span><span>()</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>c == </span><span>'$'</span><span>)</span><span> </span><span>{</span></div>
<div><span> gpsBufferPos = </span><span>0</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>gpsBufferPos &lt; </span><span>(</span><span>int</span><span>)</span><span>sizeof</span><span>(</span><span>gpsBuffer</span><span>)</span><span> - </span><span>1</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>gpsBuffer</span><span> = c;</span></div>
<div><span> gpsBufferPos++;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>c == </span><span>'</span><span>\n</span><span>'</span><span> || c == </span><span>'</span><span>\r</span><span>'</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>gpsBuffer</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>strncmp</span><span>(</span><span>gpsBuffer, </span><span>"$GPRMC"</span><span>, </span><span>6</span><span>)</span><span> == </span><span>0</span><span> || </span><span>strncmp</span><span>(</span><span>gpsBuffer, </span><span>"$GNRMC"</span><span>, </span><span>6</span><span>)</span><span> == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> // Save full sentence for logging</span></div>
<div><span> </span><span>strncpy</span><span>(</span><span>gpsString, gpsBuffer, sizeof</span><span>(</span><span>gpsString</span><span>)</span><span> - </span><span>1</span><span>)</span><span>;</span></div>
<div><span> </span><span>gpsString</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<br />
<div><span> // Remove trailing newline/carriage return</span></div>
<div><span> </span><span>int</span><span> slen = </span><span>strlen</span><span>(</span><span>gpsString</span><span>)</span><span>;</span></div>
<div><span> </span><span>while</span><span> </span><span>(</span><span>slen &gt; </span><span>0</span><span> &amp;&amp; </span><span>(</span><span>gpsString</span><span> == </span><span>'</span><span>\n</span><span>'</span><span> || </span><span>gpsString</span><span> == </span><span>'</span><span>\r</span><span>'</span><span>))</span><span> </span><span>{</span></div>
<div><span> </span><span>gpsString</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<div><span> slen--;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>parseGPRMC</span><span>(</span><span>gpsBuffer</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> gpsBufferPos = </span><span>0</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>parseGPRMC</span><span>(</span><span>char*</span><span> </span><span>sentence)</span><span> </span><span>{</span></div>
<div><span> // $GPRMC,HHMMSS.sss,A,lat,N,lon,W,speed,course,DDMMYY,...</span></div>
<div><span> </span><span>char</span><span> </span><span>copy</span><span>;</span></div>
<div><span> </span><span>strncpy</span><span>(</span><span>copy, sentence, sizeof</span><span>(</span><span>copy</span><span>)</span><span> - </span><span>1</span><span>)</span><span>;</span></div>
<div><span> </span><span>copy</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<br />
<div><span> </span><span>char</span><span>* token = </span><span>strtok</span><span>(</span><span>copy, </span><span>","</span><span>)</span><span>;</span></div>
<div><span> </span><span>int</span><span> field = </span><span>0</span><span>;</span></div>
<br />
<div><span> </span><span>while</span><span> </span><span>(</span><span>token != </span><span>NULL</span><span> &amp;&amp; field &lt; </span><span>10</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>switch</span><span> </span><span>(</span><span>field</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>case</span><span> </span><span>1</span><span>:</span><span> // Time</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>strlen</span><span>(</span><span>token</span><span>)</span><span> &gt;= </span><span>6</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>gpsTime, sizeof</span><span>(</span><span>gpsTime</span><span>)</span><span>, </span><span>"%c%c:%c%c:%s"</span><span>,</span></div>
<div><span> </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, token + </span><span>4</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>2</span><span>:</span><span> // Fix status</span></div>
<div><span> gpsFix = </span><span>(</span><span>token</span><span> == </span><span>'A'</span><span>)</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>9</span><span>:</span><span> // Date</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>strlen</span><span>(</span><span>token</span><span>)</span><span> &gt;= </span><span>6</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>gpsDate, sizeof</span><span>(</span><span>gpsDate</span><span>)</span><span>, </span><span>"%c%c/%c%c/%c%c"</span><span>,</span></div>
<div><span> </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span></span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> token = </span><span>strtok</span><span>(</span><span>NULL</span><span>, </span><span>","</span><span>)</span><span>;</span></div>
<div><span> field++;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // Update GPS bits of tsStatus</span></div>
<div><span> tsStatus = </span><span>(</span><span>tsStatus &amp; 0x</span><span>0C</span><span>)</span><span>;</span><span> // Keep MFAM PPS bits (3,2)</span></div>
<div><span> tsStatus |= 0x</span><span>01</span><span>;</span><span> // Bit 0: RMC sentence received</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>gpsFix</span><span>)</span><span> </span><span>{</span></div>
<div><span> tsStatus |= 0x</span><span>02</span><span>;</span><span> // Bit 1: GPS fix valid</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>// ---- MFAM DATA PARSING ----</span></div>
<div><span>int16_t</span><span> </span><span>toSigned16</span><span>(</span><span>uint16_t</span><span> </span><span>val)</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>val &gt; </span><span>32767</span><span>)</span><span> </span><span>return</span><span> </span><span>(</span><span>int16_t</span><span>)(</span><span>val - </span><span>65536</span><span>)</span><span>;</span></div>
<div><span> </span><span>return</span><span> </span><span>(</span><span>int16_t</span><span>)</span><span>val;</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>parseAuxChannels</span><span>(</span><span>uint8_t*</span><span> </span><span>sample</span><span>, </span><span>uint16_t</span><span> </span><span>frameID)</span><span> </span><span>{</span></div>
<div><span> </span><span>uint8_t</span><span> auxID = </span><span>(</span><span>frameID &gt;&gt; </span><span>11</span><span>)</span><span> &amp; 0x</span><span>07</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> aux0 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> aux1 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> aux2 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> aux3 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>switch</span><span> </span><span>(</span><span>auxID</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>case</span><span> </span><span>1</span><span>:</span></div>
<div><span> compassX = </span><span>toSigned16</span><span>(</span><span>aux0</span><span>)</span><span> / </span><span>0.01333333</span><span>;</span></div>
<div><span> compassY = </span><span>toSigned16</span><span>(</span><span>aux1</span><span>)</span><span> / </span><span>0.01333333</span><span>;</span></div>
<div><span> compassZ = </span><span>toSigned16</span><span>(</span><span>aux2</span><span>)</span><span> / </span><span>0.01333333</span><span>;</span></div>
<div><span> compassT = </span><span>toSigned16</span><span>(</span><span>aux3</span><span>)</span><span> / </span><span>128.0</span><span> + </span><span>25.0</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>2</span><span>:</span></div>
<div><span> gyroX = </span><span>toSigned16</span><span>(</span><span>aux0</span><span>)</span><span> / </span><span>16.384</span><span>;</span></div>
<div><span> gyroY = </span><span>toSigned16</span><span>(</span><span>aux1</span><span>)</span><span> / </span><span>16.384</span><span>;</span></div>
<div><span> gyroZ = </span><span>toSigned16</span><span>(</span><span>aux2</span><span>)</span><span> / </span><span>16.384</span><span>;</span></div>
<div><span> gyroT = </span><span>toSigned16</span><span>(</span><span>aux3</span><span>)</span><span> / </span><span>512.0</span><span> + </span><span>23.0</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>4</span><span>:</span></div>
<div><span> accelX = </span><span>toSigned16</span><span>(</span><span>aux0</span><span>)</span><span> / </span><span>16384.0</span><span>;</span></div>
<div><span> accelY = </span><span>toSigned16</span><span>(</span><span>aux1</span><span>)</span><span> / </span><span>16384.0</span><span>;</span></div>
<div><span> accelZ = </span><span>toSigned16</span><span>(</span><span>aux2</span><span>)</span><span> / </span><span>16384.0</span><span>;</span></div>
<div><span> accelT = </span><span>toSigned16</span><span>(</span><span>aux3</span><span>)</span><span> / </span><span>512.0</span><span> + </span><span>23.0</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>default</span><span>:</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>writeSample</span><span>(</span><span>unsigned</span><span> </span><span>long</span><span> </span><span>timestamp</span><span>, </span><span>uint16_t</span><span> </span><span>fiducial</span><span>, </span><span>double</span><span> </span><span>mag1</span><span>, </span><span>uint16_t</span><span> </span><span>mag1s</span><span>,</span></div>
<div><span> </span><span>double</span><span> </span><span>mag2</span><span>, </span><span>uint16_t</span><span> </span><span>mag2s</span><span>, </span><span>uint16_t</span><span> </span><span>sysStatus)</span><span> </span><span>{</span></div>
<br />
<div><span> </span><span>char</span><span> </span><span>tsStr</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>tsStr, sizeof</span><span>(</span><span>tsStr</span><span>)</span><span>, </span><span>"%d%d%d%d%d%d%d%d"</span><span>,</span></div>
<div><span> </span><span>(</span><span>tsStatus &gt;&gt; </span><span>7</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>6</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>5</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>4</span><span>)</span><span> &amp; </span><span>1</span><span>,</span></div>
<div><span> </span><span>(</span><span>tsStatus &gt;&gt; </span><span>3</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>2</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>1</span><span>)</span><span> &amp; </span><span>1</span><span>, tsStatus &amp; </span><span>1</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>char</span><span> </span><span>sysHex</span><span>, </span><span>m1sHex</span><span>, </span><span>m2sHex</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>sysHex, sizeof</span><span>(</span><span>sysHex</span><span>)</span><span>, </span><span>"%04X"</span><span>, sysStatus</span><span>)</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>m1sHex, sizeof</span><span>(</span><span>m1sHex</span><span>)</span><span>, </span><span>"%04X"</span><span>, mag1s</span><span>)</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>m2sHex, sizeof</span><span>(</span><span>m2sHex</span><span>)</span><span>, </span><span>"%04X"</span><span>, mag2s</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>char</span><span> </span><span>line</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>line, sizeof</span><span>(</span><span>line</span><span>)</span><span>,</span></div>
<div><span> </span><span>"%10.4f,%10.4f,%4d,%s,%s,%s,%10.2f,%10.2f,%10.2f,%5.1f,%8.5f,%8.5f,%8.5f,%5.1f,%8.1f,%8.1f,%8.1f,%5.1f,%s,%s,%s,%s"</span><span>,</span></div>
<div><span> mag1, mag2, fiducial, sysHex, m1sHex, m2sHex,</span></div>
<div><span> gyroX, gyroY, gyroZ, gyroT,</span></div>
<div><span> accelX, accelY, accelZ, accelT,</span></div>
<div><span> compassX, compassY, compassZ, compassT,</span></div>
<div><span> gpsDate, gpsTime, tsStr, gpsString</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady &amp;&amp; logFile</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>println</span><span>(</span><span>line</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sampleCount % </span><span>1000</span><span> == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>flush</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>sampleCount % </span><span>500</span><span> == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>line</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>parsePacket</span><span>(</span><span>uint8_t*</span><span> </span><span>pkt)</span><span> </span><span>{</span></div>
<div><span> // Get PPS bits from MFAM system status</span></div>
<div><span> </span><span>uint16_t</span><span> firstSysStatus = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint8_t</span><span> mfamPPSbits = </span><span>(</span><span>firstSysStatus &gt;&gt; </span><span>12</span><span>)</span><span> &amp; 0x</span><span>0C</span><span>;</span></div>
<div><span> tsStatus = </span><span>(</span><span>tsStatus &amp; 0x</span><span>03</span><span>)</span><span> | mfamPPSbits;</span></div>
<br />
<div><span> </span><span>for</span><span> </span><span>(</span><span>int</span><span> i = </span><span>0</span><span>; i &lt; NUM_SAMPLES; i++</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>int</span><span> offset = HEADER_SIZE + </span><span>(</span><span>i * SAMPLE_SIZE</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> frameID = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> fiducial = frameID &amp; 0x</span><span>07FF</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> sysStatus = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>uint32_t</span><span> mag1raw = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span> |</span></div>
<div><span> </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>16</span><span>)</span><span> | </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>24</span><span>)</span><span>;</span></div>
<div><span> </span><span>double</span><span> mag1 = mag1raw * </span><span>0.05</span><span> / </span><span>1000.0</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> mag1status = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>uint32_t</span><span> mag2raw = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span> |</span></div>
<div><span> </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>16</span><span>)</span><span> | </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>24</span><span>)</span><span>;</span></div>
<div><span> </span><span>double</span><span> mag2 = mag2raw * </span><span>0.05</span><span> / </span><span>1000.0</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> mag2status = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>parseAuxChannels</span><span>(</span><span>pkt + offset, frameID</span><span>)</span><span>;</span></div>
<br />
<div><span> sampleCount++;</span></div>
<div><span> downsampleCounter++;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>downsampleCounter &gt;= DOWNSAMPLE_FACTOR</span><span>)</span><span> </span><span>{</span></div>
<div><span> downsampleCounter = </span><span>0</span><span>;</span></div>
<div><span> </span><span>writeSample</span><span>(</span><span>millis</span><span>()</span><span>, fiducial, mag1, mag1status, mag2, mag2status, sysStatus</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
</div>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Roi Granot</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/mfam/teensy-4-1-with-mfam/#post-1271</guid>
                    </item>
				                    <item>
                        <title>Survey Manager quits when exporting to Montaj/GDB format</title>
                        <link>https://www.geometrics.com/community/general-magnetometer/survey-manager-quits-when-exporting-to-montaj-gdb-format/#post-1270</link>
                        <pubDate>Wed, 17 Dec 2025 18:26:02 +0000</pubDate>
                        <description><![CDATA[Survey Manager 3.5.1433 and earlier versions may exit unexpectedly after the user has selected &quot;Export GDB&quot; to export magnetometer survey data to a Montaj-compatible database.[&quot;Export GDB&quot; i...]]></description>
                        <content:encoded><![CDATA[<p>Survey Manager 3.5.1433 and earlier versions may exit unexpectedly after the user has selected "Export GDB" to export magnetometer survey data to a Montaj-compatible database..</p>
<p>Survey Manager may exit without notice or it may show some information about the failure, including steps to open a service request with Seequent.</p>
<p>On systems with Montaj 2025.1 or earlier, this issue may be fixed by updating Montaj to the most recent version (2025.2 at the time of this post) and verifying that Survey Manager is at its most recent version (3.5.1433 at the time of this post).</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Magnetics SW</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/general-magnetometer/survey-manager-quits-when-exporting-to-montaj-gdb-format/#post-1270</guid>
                    </item>
				                    <item>
                        <title>RE: MagEditor instructional video is now online</title>
                        <link>https://www.geometrics.com/community/general-magnetometer/mageditor-instructional-video-is-now-online/#post-1269</link>
                        <pubDate>Tue, 04 Nov 2025 02:36:49 +0000</pubDate>
                        <description><![CDATA[@geophysicist_burak Can you please upload some sample csv files to the folder below so that we can look into it:
File Upload
Thanks!]]></description>
                        <content:encoded><![CDATA[<p>@geophysicist_burak Can you please upload some sample csv files to the folder below so that we can look into it:</p>
<p><a title="File Upload" href="https://app.box.com/f/09f4a675413b49d9b74a875b968034ef" target="_blank" rel="noopener">File Upload</a></p>
<p>Thanks!</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Rui Zhang</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/general-magnetometer/mageditor-instructional-video-is-now-online/#post-1269</guid>
                    </item>
				                    <item>
                        <title>RE: MagEditor CSV Import Problems</title>
                        <link>https://www.geometrics.com/community/general-magnetometer/mageditor-instructional-video-is-now-online/#post-1268</link>
                        <pubDate>Mon, 03 Nov 2025 22:01:46 +0000</pubDate>
                        <description><![CDATA[Hello, I wanted to try our MagEditor software, but it didn&#039;t accept any of the files I converted to 10 Hz, 20 Hz, 50 Hz, 100 Hz, and 1000 Hz CSV formats from Survey Manager. What&#039;s the reaso...]]></description>
                        <content:encoded><![CDATA[<p>Hello, I wanted to try our MagEditor software, but it didn't accept any of the files I converted to 10 Hz, 20 Hz, 50 Hz, 100 Hz, and 1000 Hz CSV formats from Survey Manager. What's the reason and how can I fix it? My operating system is Windows 11 Home Single, and my computer specifications are:<br />Processor: Intel(R) Core(TM) i9-14900HX (2.20 GHz)<br />Installed RAM: 32.0 GB (usable: 31.6 GB)<br />System type: 64-bit operating system, x64-based processor.</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Burak Genc</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/general-magnetometer/mageditor-instructional-video-is-now-online/#post-1268</guid>
                    </item>
				                    <item>
                        <title>Quickstart Guide Now Available</title>
                        <link>https://www.geometrics.com/community/magarrow-magarrow-hardware/quickstart-guide-now-available-2/#post-1267</link>
                        <pubDate>Wed, 29 Oct 2025 16:31:38 +0000</pubDate>
                        <description><![CDATA[Find the most recent version of the Quickstart Guide on the MagElement product page, or click the link here]]></description>
                        <content:encoded><![CDATA[Find the most recent version of the Quickstart Guide on the MagElement product page, or click the link <p><a href="https://www.geometrics.com/wp-content/uploads/2025/10/MagElement_Quickstart_Guide_RevA.pdf">here</a></p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Gretchen Schmauder</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magarrow-magarrow-hardware/quickstart-guide-now-available-2/#post-1267</guid>
                    </item>
							        </channel>
        </rss>
		