Open FFBoard
Open source force feedback firmware
EncoderSSI.h
Go to the documentation of this file.
1/*
2 * EncoderSSI.h
3 *
4 * Created on: 22.02.23
5 * Author: Yannick
6 */
7
8#ifndef ENCODERSSI_H_
9#define ENCODERSSI_H_
10
11#include "cppmain.h"
12#include "constants.h"
13#include "ChoosableClass.h"
14#include "CommandHandler.h"
15#include "SPI.h"
16#include "Encoder.h"
17#include "cpp_target_config.h"
18#include <math.h>
19#include "PersistentStorage.h"
20#include "semaphore.hpp"
21#include "array"
22
23class EncoderSSI: public Encoder, public SPIDevice , public CommandHandler,public PersistentStorage {
24public:
25
28
29 EncoderSSI();
30 virtual ~EncoderSSI();
31
33 static bool isCreatable();
35 int32_t getPos();
36 int32_t getPosAbs();
37 void setPos(int32_t pos);
38 uint32_t getCpr();
39
40 void saveFlash(); // Write to flash here
41 void restoreFlash(); // Load from flash
42 std::string getHelpstring(){return "SPI SSI Encoder\n";}
43
45 enum class EncoderSSI_modes : uint8_t{rawmsb,AMT23}; // 15 max modes
46 static constexpr std::array<const char*,2> mode_names = {"Raw","AMT23"};
47
48 template<size_t N>
49 std::string printModes(const std::array<const char*,N>& names){
50 std::string reply;
51 for(uint8_t i = 0; i<names.size();i++){
52 reply+= std::string(names[i]) + ":" + std::to_string(i)+"\n";
53 }
54 return reply;
55 }
56
57 std::string printSpeeds();
58
59 CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies);
60
61 void registerCommands();
62 void configSPI();
63
64 void spiRxCompleted(SPIPort* port) override;
65 void beginSpiTransfer(SPIPort* port);
66 void endSpiTransfer(SPIPort* port);
68
69private:
70 int lenghtDataBit = 22;
71 int spiSpeed = 0;
72 uint32_t errors = 0;
74
75 uint32_t lastUpdateTick = 0;
76
77 int32_t pos = 0, posOffset = 0,lastPos = 0,newPos = 0;
78 int32_t mtpos = 0;
79
80 const static uint8_t bytes = 8;
81 uint8_t spi_buf[bytes] = {0};
82 uint8_t transferlen = bytes;
83
84 static bool inUse;
85
86 bool waitData = false;
87
88};
89
90#endif
CommandStatus
EncoderType
Definition: Encoder.h:27
int32_t pos
Definition: EncoderSSI.h:77
static bool inUse
Definition: EncoderSSI.h:84
EncoderSSI_modes mode
Definition: EncoderSSI.h:73
static ClassIdentifier info
Definition: EncoderSSI.h:26
int32_t getPos()
Definition: EncoderSSI.cpp:167
void restoreFlash()
Definition: EncoderSSI.cpp:41
static constexpr std::array< const char *, 2 > mode_names
Definition: EncoderSSI.h:46
void endSpiTransfer(SPIPort *port)
Definition: EncoderSSI.cpp:147
int32_t getPosAbs()
Definition: EncoderSSI.cpp:159
void setPos(int32_t pos)
Definition: EncoderSSI.cpp:171
bool updateFrame()
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
Definition: EncoderSSI.cpp:209
uint8_t transferlen
Definition: EncoderSSI.h:82
int32_t posOffset
Definition: EncoderSSI.h:77
uint32_t errors
Definition: EncoderSSI.h:72
int spiSpeed
Definition: EncoderSSI.h:71
int32_t mtpos
Definition: EncoderSSI.h:78
uint32_t lastUpdateTick
Definition: EncoderSSI.h:75
std::string printSpeeds()
Definition: EncoderSSI.cpp:199
void registerCommands()
Definition: EncoderSSI.cpp:182
std::string getHelpstring()
Definition: EncoderSSI.h:42
const ClassIdentifier getInfo()
Command handlers always have class infos. Works well with ChoosableClass.
Definition: EncoderSSI.cpp:17
bool waitData
Definition: EncoderSSI.h:86
static bool isCreatable()
Definition: EncoderSSI.cpp:92
uint8_t spi_buf[bytes]
Definition: EncoderSSI.h:81
void configSPI()
Definition: EncoderSSI.cpp:61
int32_t newPos
Definition: EncoderSSI.h:77
void setMode(EncoderSSI_modes mode)
Definition: EncoderSSI.cpp:190
EncoderSSI_commands
Definition: EncoderSSI.h:44
static const uint8_t bytes
Definition: EncoderSSI.h:80
std::string printModes(const std::array< const char *, N > &names)
Definition: EncoderSSI.h:49
int32_t lastPos
Definition: EncoderSSI.h:77
int lenghtDataBit
Definition: EncoderSSI.h:70
void beginSpiTransfer(SPIPort *port)
Definition: EncoderSSI.cpp:141
uint32_t getCpr()
Definition: EncoderSSI.cpp:178
void spiRxCompleted(SPIPort *port) override
Definition: EncoderSSI.cpp:96
void saveFlash()
Definition: EncoderSSI.cpp:52
EncoderType getEncoderType()
Definition: EncoderSSI.cpp:154
virtual ~EncoderSSI()
Definition: EncoderSSI.cpp:34
Definition: SPI.h:100
Definition: SPI.h:43