Open FFBoard
Open source force feedback firmware
Loading...
Searching...
No Matches
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
26 static ClassIdentifier info;
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
CommandHandler(const char *clsname, uint16_t clsid, uint8_t instance=0)
Encoder()
Definition Encoder.cpp:18
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:12
int32_t getPos()
void restoreFlash()
static constexpr std::array< const char *, 2 > mode_names
Definition EncoderSSI.h:46
void endSpiTransfer(SPIPort *port)
int32_t getPosAbs()
void setPos(int32_t pos)
bool updateFrame()
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
uint8_t transferlen
Definition EncoderSSI.h:82
int32_t posOffset
Definition EncoderSSI.h:77
uint32_t errors
Definition EncoderSSI.h:72
int32_t mtpos
Definition EncoderSSI.h:78
uint32_t lastUpdateTick
Definition EncoderSSI.h:75
std::string printSpeeds()
void registerCommands()
std::string getHelpstring()
Definition EncoderSSI.h:42
const ClassIdentifier getInfo()
bool waitData
Definition EncoderSSI.h:86
static bool isCreatable()
uint8_t spi_buf[bytes]
Definition EncoderSSI.h:81
void configSPI()
int32_t newPos
Definition EncoderSSI.h:77
void setMode(EncoderSSI_modes mode)
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)
uint32_t getCpr()
void spiRxCompleted(SPIPort *port) override
void saveFlash()
EncoderType getEncoderType()
virtual ~EncoderSSI()
SPIDevice(SPIPort &port, OutputPin csPin)
Definition SPI.cpp:332
Definition SPI.h:43