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

Committer:
JamieB
Date:
Thu Dec 15 06:05:30 2022 +0000
Revision:
85:0cc5931bb9ef
Parent:
80:0b7f1b85b626
Push to somewhere else due to merge issue

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndyA 3:14d241e29be3 1 #include "FIZReader.h"
AndyA 6:61274e214f46 2 #include "LTCApp.h"
JamieB 80:0b7f1b85b626 3 #include "cc.h"
JamieB 71:7305a35cee58 4 #include "mbed.h"
JamieB 80:0b7f1b85b626 5 #include <cstdint>
JamieB 80:0b7f1b85b626 6 #include <vector>
JamieB 80:0b7f1b85b626 7 #include <algorithm>
JamieB 80:0b7f1b85b626 8
AndyA 3:14d241e29be3 9 FIZReader::FIZReader(const PinName Tx, const PinName Rx) : _port(Tx,Rx)
AndyA 3:14d241e29be3 10 {
AndyA 3:14d241e29be3 11 _focus = 0;
AndyA 3:14d241e29be3 12 _iris = 0;
AndyA 3:14d241e29be3 13 _zoom = 0;
AndyA 3:14d241e29be3 14 newData = false;
AndyA 3:14d241e29be3 15 }
AndyA 3:14d241e29be3 16
AndyA 3:14d241e29be3 17 bool FIZReader::getMostRecent(uint32_t *focus, uint16_t *iris, uint16_t *zoom)
AndyA 3:14d241e29be3 18 {
AndyA 3:14d241e29be3 19 *focus = _focus;
AndyA 17:5ce3fe98e76d 20 *iris = _iris;
AndyA 3:14d241e29be3 21 *zoom = _zoom;
AndyA 3:14d241e29be3 22 bool wasNew = newData;
AndyA 3:14d241e29be3 23 newData = false;
AndyA 3:14d241e29be3 24 return wasNew;
AndyA 3:14d241e29be3 25 }
AndyA 3:14d241e29be3 26
JamieB 80:0b7f1b85b626 27 int FIZReader::hexValue(char ascii) {
JamieB 80:0b7f1b85b626 28 if (((ascii-'0') >= 0) && ((ascii-'0') <= 9))
JamieB 80:0b7f1b85b626 29 return ascii-'0';
JamieB 80:0b7f1b85b626 30 if (((ascii-'A') >= 0) && ((ascii-'A') <= 5))
JamieB 80:0b7f1b85b626 31 return ascii-'A'+10;
JamieB 80:0b7f1b85b626 32 if (((ascii-'a') >= 0) && ((ascii-'a') <= 5))
JamieB 80:0b7f1b85b626 33 return ascii-'a'+10;
JamieB 80:0b7f1b85b626 34 return 0;
JamieB 80:0b7f1b85b626 35 }
JamieB 80:0b7f1b85b626 36
JamieB 80:0b7f1b85b626 37 unsigned int FIZReader::getAbsoluteValue(unsigned int encoder_pos, vector<unsigned int> &encoder_range, vector<unsigned int> &absolute_range) {
JamieB 80:0b7f1b85b626 38 unsigned int result;
JamieB 80:0b7f1b85b626 39 if( encoder_pos <= encoder_range.front() ) return absolute_range.front();
JamieB 80:0b7f1b85b626 40 if( encoder_pos >= encoder_range.back()) return absolute_range.back();
JamieB 80:0b7f1b85b626 41
JamieB 80:0b7f1b85b626 42 int lower = encoder_range.size() -2;
JamieB 80:0b7f1b85b626 43 int upper = encoder_range.size() -1;
JamieB 80:0b7f1b85b626 44 for (int pos_pointer = 0; pos_pointer < encoder_range.size(); pos_pointer++) {
JamieB 80:0b7f1b85b626 45 if (encoder_pos < encoder_range[pos_pointer]) {
JamieB 80:0b7f1b85b626 46 lower = pos_pointer - 1;
JamieB 80:0b7f1b85b626 47 upper = pos_pointer;
JamieB 80:0b7f1b85b626 48 break;
JamieB 80:0b7f1b85b626 49 }
JamieB 80:0b7f1b85b626 50 }
JamieB 80:0b7f1b85b626 51
JamieB 80:0b7f1b85b626 52 // pos_upper = encoder_range[upper];
JamieB 80:0b7f1b85b626 53 // pos_lower = encoder_range[lower];
JamieB 80:0b7f1b85b626 54 // pos_value = encoder_pos;
JamieB 80:0b7f1b85b626 55
JamieB 80:0b7f1b85b626 56 result = absolute_range[lower]+(encoder_pos-encoder_range[lower])*(absolute_range[upper]-absolute_range[lower])/(encoder_range[upper]-encoder_range[lower]);
JamieB 80:0b7f1b85b626 57
JamieB 80:0b7f1b85b626 58 return result;
JamieB 80:0b7f1b85b626 59
JamieB 80:0b7f1b85b626 60 }
JamieB 80:0b7f1b85b626 61
JamieB 80:0b7f1b85b626 62 // vector<int>::iterator lb = lower_bound(encoder_range.begin(), encoder_range.end(), encoder_pos);
JamieB 80:0b7f1b85b626 63 // auto upper = lb++;
JamieB 80:0b7f1b85b626 64
JamieB 80:0b7f1b85b626 65 // if (lb == encoder_range.end())
JamieB 80:0b7f1b85b626 66 // --upper; // extrapolating above
JamieB 80:0b7f1b85b626 67 // else if (*lb == encoder_pos)
JamieB 80:0b7f1b85b626 68 // return absolute_range[*lb];
JamieB 80:0b7f1b85b626 69
JamieB 80:0b7f1b85b626 70 // int lower = upper? upper - 1: 1; // if upper is not zero, get value below, else flip and get the one above
JamieB 80:0b7f1b85b626 71
JamieB 80:0b7f1b85b626 72 // if(encoder_range[upper]<encoder_range[lower])
JamieB 80:0b7f1b85b626 73 // result = absolute_range[upper]+(encoder_pos-encoder_range[upper])*(absolute_range[lower]-absolute_range[upper])/(encoder_range[lower]-encoder_range[upper]);
JamieB 80:0b7f1b85b626 74 // else
JamieB 80:0b7f1b85b626 75 uint32_t FIZReader::getAbsoluteFocus(uint32_t encoder_pos) {
JamieB 80:0b7f1b85b626 76 if (UserSettings.focus_encoder_map.size())
JamieB 80:0b7f1b85b626 77 return (uint32_t) getAbsoluteValue(encoder_pos, UserSettings.focus_encoder_map, UserSettings.focus_absolute_map);
JamieB 80:0b7f1b85b626 78 else
JamieB 80:0b7f1b85b626 79 return encoder_pos;
JamieB 80:0b7f1b85b626 80 }
JamieB 80:0b7f1b85b626 81 uint16_t FIZReader::getAbsoluteIris(uint16_t encoder_pos) {
JamieB 80:0b7f1b85b626 82 if (UserSettings.iris_encoder_map.size())
JamieB 80:0b7f1b85b626 83 return (uint16_t) getAbsoluteValue(encoder_pos, UserSettings.iris_encoder_map, UserSettings.iris_absolute_map);
JamieB 80:0b7f1b85b626 84 else
JamieB 80:0b7f1b85b626 85 return encoder_pos;
JamieB 80:0b7f1b85b626 86 }
JamieB 80:0b7f1b85b626 87 uint16_t FIZReader::getAbsoluteZoom(uint16_t encoder_pos) {
JamieB 80:0b7f1b85b626 88 if (UserSettings.zoom_encoder_map.size()){
JamieB 80:0b7f1b85b626 89 return (uint16_t) getAbsoluteValue(encoder_pos, UserSettings.zoom_encoder_map, UserSettings.zoom_absolute_map);
JamieB 80:0b7f1b85b626 90 }
JamieB 80:0b7f1b85b626 91 else
JamieB 80:0b7f1b85b626 92 return encoder_pos;
JamieB 80:0b7f1b85b626 93 }
JamieB 80:0b7f1b85b626 94
JamieB 80:0b7f1b85b626 95