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
- Committer:
- JamieB
- Date:
- 21 months ago
- Revision:
- 85:0cc5931bb9ef
- Parent:
- 80:0b7f1b85b626
File content as of revision 85:0cc5931bb9ef:
#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; _iris = 0; _zoom = 0; newData = false; } bool FIZReader::getMostRecent(uint32_t *focus, uint16_t *iris, uint16_t *zoom) { *focus = _focus; *iris = _iris; *zoom = _zoom; bool wasNew = newData; newData = false; 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; } 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; }