I messed up the merge, so pushing it over to another repo so I don't lose it. Will tidy up and remove later

Dependencies:   BufferedSerial FatFileSystemCpp mbed

Revision:
85:0cc5931bb9ef
Parent:
80:0b7f1b85b626
--- a/FIZ_readers/FIZReader.cpp	Thu Dec 15 05:53:28 2022 +0000
+++ b/FIZ_readers/FIZReader.cpp	Thu Dec 15 06:05:30 2022 +0000
@@ -1,6 +1,11 @@
 #include "FIZReader.h"
 #include "LTCApp.h"
+#include "cc.h"
 #include "mbed.h"
+#include <cstdint>
+#include <vector>
+#include <algorithm>
+
 FIZReader::FIZReader(const PinName Tx, const PinName Rx) : _port(Tx,Rx)
 {
     _focus = 0;
@@ -19,12 +24,72 @@
     return wasNew;
 }
 
-    int FIZReader::hexValue(char ascii) {
-        if (((ascii-'0') >= 0) && ((ascii-'0') <= 9))
-            return ascii-'0';
-        if (((ascii-'A') >= 0) && ((ascii-'A') <= 5))
-            return ascii-'A'+10;
-        if (((ascii-'a') >= 0) && ((ascii-'a') <= 5))
-            return ascii-'a'+10;
-        return 0;
-    }   
\ No newline at end of file
+int FIZReader::hexValue(char ascii) {
+    if (((ascii-'0') >= 0) && ((ascii-'0') <= 9))
+        return ascii-'0';
+    if (((ascii-'A') >= 0) && ((ascii-'A') <= 5))
+        return ascii-'A'+10;
+    if (((ascii-'a') >= 0) && ((ascii-'a') <= 5))
+        return ascii-'a'+10;
+    return 0;
+}
+
+unsigned int FIZReader::getAbsoluteValue(unsigned int encoder_pos, vector<unsigned int> &encoder_range, vector<unsigned int> &absolute_range) {
+    unsigned int result;
+    if( encoder_pos <= encoder_range.front() )   return absolute_range.front();
+    if( encoder_pos >= encoder_range.back())  return absolute_range.back();
+
+    int lower = encoder_range.size() -2;
+    int upper = encoder_range.size() -1;
+    for (int pos_pointer = 0; pos_pointer < encoder_range.size(); pos_pointer++) {
+        if (encoder_pos < encoder_range[pos_pointer]) {
+            lower = pos_pointer - 1;
+            upper = pos_pointer;
+            break;
+        }
+    }
+
+    // pos_upper = encoder_range[upper];
+    // pos_lower = encoder_range[lower];
+    // pos_value = encoder_pos;
+
+    result = absolute_range[lower]+(encoder_pos-encoder_range[lower])*(absolute_range[upper]-absolute_range[lower])/(encoder_range[upper]-encoder_range[lower]);
+
+    return result;
+
+}
+
+    // vector<int>::iterator lb = lower_bound(encoder_range.begin(), encoder_range.end(), encoder_pos);
+    // auto upper = lb++;
+    
+    // if (lb == encoder_range.end())
+    //     --upper;  // extrapolating above
+    // else if (*lb == encoder_pos)
+    //     return absolute_range[*lb];
+
+    // int lower = upper? upper - 1: 1; // if upper is not zero, get value below, else flip and get the one above
+
+    // if(encoder_range[upper]<encoder_range[lower]) 
+    //     result = absolute_range[upper]+(encoder_pos-encoder_range[upper])*(absolute_range[lower]-absolute_range[upper])/(encoder_range[lower]-encoder_range[upper]);
+    // else 
+uint32_t FIZReader::getAbsoluteFocus(uint32_t encoder_pos) {
+    if (UserSettings.focus_encoder_map.size())
+        return (uint32_t) getAbsoluteValue(encoder_pos, UserSettings.focus_encoder_map, UserSettings.focus_absolute_map);
+    else 
+        return encoder_pos;
+}
+uint16_t FIZReader::getAbsoluteIris(uint16_t encoder_pos) {
+    if (UserSettings.iris_encoder_map.size())
+        return (uint16_t) getAbsoluteValue(encoder_pos, UserSettings.iris_encoder_map, UserSettings.iris_absolute_map);
+    else 
+        return encoder_pos;
+}
+uint16_t FIZReader::getAbsoluteZoom(uint16_t encoder_pos) {
+    if (UserSettings.zoom_encoder_map.size()){
+        return (uint16_t) getAbsoluteValue(encoder_pos, UserSettings.zoom_encoder_map, UserSettings.zoom_absolute_map);
+    }
+    else 
+        return encoder_pos;
+}
+
+