Open FFBoard
Open source force feedback firmware
AxesManager.cpp
Go to the documentation of this file.
1/*
2 * AxesManager.cpp
3 *
4 * Created on: 30.01.21
5 * Author: Jon Lidgard
6 */
7
8#include <stdint.h>
9#include <string>
10#include "constants.h"
11#include "cmsis_os.h"
12#include "AxesManager.h"
13
14
15//ClassIdentifier AxesManager::info = {
16// .name = "NONE" ,
17// .id = 0,
18// .hidden = true
19//};
20//const ClassIdentifier AxesManager::getInfo(){
21// return info;
22//}
23
24AxesManager::AxesManager(volatile Control_t* control,std::shared_ptr<EffectsCalculator> calc) : control(control), effects_calc(calc) {
25 //this->restoreFlash();
26}
27
29 deleteAxes();
30}
31
33// for (auto axis : axes) {
34// delete axis;
35// }
36 axes.clear();
37 axis_count = 0;
38}
39
40
41
43 for (auto &axis: axes) {
44 axis->prepareForUpdate();
45 }
46 if(effects_calc != nullptr)
47 effects_calc->calculateEffects(axes);
48}
49
51 for (auto &axis: axes) {
52 axis->updateDriveTorque();
53 }
54}
55
56
57std::vector<int32_t>* AxesManager::getAxisValues(){
58 this->axisValues.clear(); // Empty axes
59 for (std::size_t i=0; i < axes.size(); i++) {
60 Encoder* enc = axes[i]->getEncoder();
61 if(enc && enc->getEncoderType() != EncoderType::NONE){ // If encoder not none type
62 this->axisValues.push_back(axes[i]->getLastScaledEnc());
63 //this->axisValues[i] = axes[i]->getLastScaledEnc();
64 }
65 }
66 return &this->axisValues;
67}
68
70 for (auto &axis : axes) {
71 axis->emergencyStop(reset);
72 }
73}
74
76
77bool AxesManager::validAxisRange(uint8_t val) {
78 return ((val>0) && (val<=MAX_AXIS));
79}
80
81bool AxesManager::setAxisCount(int8_t count) {
82 if (!this->validAxisRange(count)) {
83 return false; // invalid number of axis
84 }
85
86 while (count < axis_count) {
87 uint8_t pos = axis_count-1;
88 axes.erase(axes.begin()+pos);
89 axis_count--;
90 }
91 while (count > axis_count) {
92 axes.push_back( std::make_unique<Axis>('X'+axis_count, control) ); // Axis are indexed from 1-X to 3-Z
93 axis_count++;
94 }
95 control->update_disabled = false;
96
97 // Allocate axis value buffer
98 this->axisValues.reserve(axis_count);
99 //this->axisValues = std::vector<int32_t>(axis_count,0);
100
101 return true;
102}
103
105 for (auto &axis : axes) {
106 axis->usbSuspend();
107 }
108}
109
111 for (auto &axis : axes) {
112 axis->usbResume();
113 }
114}
115
117 for (auto &axis : axes) {
118 axis->setPos(0);
119 }
120}
void usbResume()
void updateTorque()
Definition: AxesManager.cpp:50
std::shared_ptr< EffectsCalculator > effects_calc
Definition: AxesManager.h:54
std::vector< std::unique_ptr< Axis > > axes
Definition: AxesManager.h:56
void emergencyStop(bool reset)
Definition: AxesManager.cpp:69
virtual ~AxesManager()
Definition: AxesManager.cpp:28
bool setAxisCount(int8_t count)
Definition: AxesManager.cpp:81
void deleteAxes()
Definition: AxesManager.cpp:32
std::vector< int32_t > axisValues
Definition: AxesManager.h:57
void usbSuspend()
volatile Control_t * control
Definition: AxesManager.h:51
AxesManager(volatile Control_t *control, std::shared_ptr< EffectsCalculator > calc)
Definition: AxesManager.cpp:24
void resetPosZero()
uint16_t axis_count
Definition: AxesManager.h:55
uint8_t getAxisCount()
Definition: AxesManager.cpp:75
std::vector< int32_t > * getAxisValues()
Definition: AxesManager.cpp:57
void update()
Definition: AxesManager.cpp:42
bool validAxisRange(uint8_t val)
Definition: AxesManager.cpp:77
virtual EncoderType getEncoderType()
Definition: Encoder.cpp:29
Definition: Axis.h:38
bool update_disabled
Definition: Axis.h:41