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
FIZ_readers/FIZReader.cpp@85:0cc5931bb9ef, 21 months ago (annotated)
- 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?
User | Revision | Line number | New 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 |