20AnalogAxisProcessing::AnalogAxisProcessing(
const uint32_t axisAmount,
AnalogSource* analogSource,
CommandHandler* cmdHandler,
bool allowFilters,
bool allowAutoscale,
bool allowRawValues,
bool allowManualScale) : axisAmount(axisAmount),analogSource(analogSource), modes({allowFilters,allowAutoscale,allowRawValues,allowManualScale}){
22 if(allowAutoscale || allowManualScale){
23 minMaxVals.resize(axisAmount);
27 filters = std::vector<Biquad>(axisAmount);
30 cmdHandler->registerCommand(
"filter", AnalogAxisProcessing_commands::filter,
"Enable lowpass filters",CMDFLAG_GET|CMDFLAG_SET);
33 conf.filtersEnabled =
false;
39 cmdHandler->registerCommand(
"autocal", AnalogAxisProcessing_commands::autoscale,
"Autoranging",CMDFLAG_GET|CMDFLAG_SET);
41 conf.autorange =
false;
45 cmdHandler->registerCommand(
"values", AnalogAxisProcessing_commands::values,
"Analog output values",CMDFLAG_GET);
48 cmdHandler->registerCommand(
"rawval", AnalogAxisProcessing_commands::rawvalues,
"All raw values",CMDFLAG_GET);
50 if(allowManualScale && cmdHandler){
51 cmdHandler->registerCommand(
"min", AnalogAxisProcessing_commands::min,
"Min value limit (adr=chan)",CMDFLAG_GETADR|CMDFLAG_SETADR);
52 cmdHandler->registerCommand(
"max", AnalogAxisProcessing_commands::max,
"Max value limit (adr=chan)",CMDFLAG_GETADR|CMDFLAG_SETADR);
93 for(uint32_t i = 0 ; i < std::min<uint32_t>(this->
axisAmount , buf.size()) ; i++){
115 if(range > 1 && range <= 0xffff && !
conf.
raw){
118 val = val - ((scaler*(float)
minMaxVals[i].min) + 0x7fff);
121 val =
clip(val,-0x7fff,0x7fff);
138 for(int32_t val : *axes){
139 replies.emplace_back(val);
150 replies.emplace_back(val);
161 for(uint8_t i = 0 ; i<
minMaxVals.size() ; i++){
void registerCommands(CommandHandler *cmdhandler)
AnalogProcessingConfig conf
std::vector< int32_t > rawValues
std::vector< MinMaxPair > minMaxVals
const uint32_t waitFilterSamples
const uint32_t axisAmount
AnalogAxisProcessing(const uint32_t axisAmount, AnalogSource *analogSource, CommandHandler *cmdHandler=nullptr, bool allowFilters=true, bool allowAutoscale=true, bool allowRawValues=false, bool allowManualScale=false)
void processAxes(std::vector< int32_t > &buf)
static AnalogProcessingConfig decodeAnalogProcessingConfFromInt(uint16_t val)
AnalogProcessingConfig & getAnalogProcessingConfig()
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
AnalogSource * analogSource
static uint16_t encodeAnalogProcessingConfToInt(AnalogProcessingConfig &conf)
std::vector< Biquad > filters
virtual ~AnalogAxisProcessing()
const struct AnalogAxisProcessing::AnalogProcessingMode modes
AnalogAxisProcessing_commands
void setAnalogProcessingConfig(AnalogProcessingConfig conf)
virtual std::vector< int32_t > * getAxes()
static CommandStatus handleGetSet(const ParsedCommand &cmd, std::vector< CommandReply > &replies, TVal &value)