Open FFBoard
Open source force feedback firmware
CANPort2B.h
Go to the documentation of this file.
1/*
2 * CANPort2B.h
3 *
4 * Created on: 21.09.2023
5 * Author: Yannick
6 */
7
8#ifndef CANPORT2B_H_
9#define CANPORT2B_H_
10#include "CAN.h"
11#include "CanHandler.h"
12
13#if defined(CANTYPE_2B)
14class CANPort;
15class CANPort_2B : public CANPort, public CommandHandler,public CanHandler{
16 enum class CanPort_commands : uint32_t {speed,send,len};
17public:
18 CANPort_2B(CAN_HandleTypeDef &hcan,const CANPortHardwareConfig& presets,const OutputPin* silentPin=nullptr,uint8_t instance = 0);
19 virtual ~CANPort_2B();
20
21 bool start();
22 bool stop();
23
24
25 bool sendMessage(CAN_tx_msg& msg);
26 bool sendMessage(CAN_msg_header_tx *pHeader, uint8_t aData[],uint32_t *pTxMailbox = nullptr);
27 void abortTxRequests();
28
29 int32_t addCanFilter(CAN_filter filter);
30 void removeCanFilter(uint8_t filterId);
31
32 void setSpeed(uint32_t speed);
33 void setSpeedPreset(uint8_t preset);
34 uint32_t getSpeed();
35 uint8_t getSpeedPreset();
36
37 void setSilentMode(bool silent);
38
39 static const uint8_t slaveFilterStart = 14;
40
41 void canTxCpltCallback(CANPort *port,uint32_t mailbox) override;
42 void canTxAbortCallback(CANPort *port,uint32_t mailbox) override;
43 void canErrorCallback(CANPort *port, uint32_t code) override;
44
45 // Config
46
47 CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies);
48 void registerCommands();
49 void saveFlash();
50 void restoreFlash();
52 const ClassIdentifier getInfo(){return this->info;}
53 const ClassType getClassType() override {return ClassType::Port;};
54 void* getHandle(){return this->hcan;}
55
56private:
57 uint8_t speedPreset = speedToPreset(500000); // default
58 CAN_HandleTypeDef *hcan = nullptr;
59 std::vector<CAN_FilterTypeDef> canFilters;
60 uint32_t txMailboxes = 0;
61
62
64 bool silent = true;
65 bool active = false;
66
67 uint32_t lastSentTime = 0;
68
69 static const uint32_t sendTimeout = 20;
70
71 CAN_TxHeaderTypeDef header = {0,0,0,CAN_RTR_DATA,8,(FunctionalState)0};
72 uint8_t nextLen = 8;
73
74};
75#endif
76
77#endif /* CANPORTFDCAN_H_ */
ClassType
Definition: ClassIDs.h:12
CommandStatus
CAN_TxHeaderTypeDef header
Definition: CANPort2B.h:71
void registerCommands()
Definition: CANPort2B.cpp:33
static const uint32_t sendTimeout
Definition: CANPort2B.h:69
virtual ~CANPort_2B()
Definition: CANPort2B.cpp:59
bool sendMessage(CAN_tx_msg &msg)
Definition: CANPort2B.cpp:176
const ClassType getClassType() override
Definition: CANPort2B.h:53
bool stop()
Definition: CANPort2B.cpp:114
bool start()
Definition: CANPort2B.cpp:99
uint32_t txMailboxes
Definition: CANPort2B.h:60
void canErrorCallback(CANPort *port, uint32_t code) override
Definition: CANPort2B.cpp:247
bool active
Definition: CANPort2B.h:65
const OutputPin * silentPin
Definition: CANPort2B.h:63
static const uint8_t slaveFilterStart
Definition: CANPort2B.h:39
CAN_HandleTypeDef * hcan
Definition: CANPort2B.h:58
void saveFlash()
Definition: CANPort2B.cpp:40
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
Definition: CANPort2B.cpp:334
void * getHandle()
Definition: CANPort2B.h:54
void restoreFlash()
Definition: CANPort2B.cpp:48
void setSpeedPreset(uint8_t preset)
Definition: CANPort2B.cpp:136
uint8_t nextLen
Definition: CANPort2B.h:72
std::vector< CAN_FilterTypeDef > canFilters
Definition: CANPort2B.h:59
int32_t addCanFilter(CAN_filter filter)
Definition: CANPort2B.cpp:262
void canTxAbortCallback(CANPort *port, uint32_t mailbox) override
Definition: CANPort2B.cpp:239
void setSilentMode(bool silent)
Definition: CANPort2B.cpp:165
uint8_t speedPreset
Definition: CANPort2B.h:57
static ClassIdentifier info
Definition: CANPort2B.h:51
uint32_t lastSentTime
Definition: CANPort2B.h:67
CanPort_commands
Definition: CANPort2B.h:16
uint32_t getSpeed()
Definition: CANPort2B.cpp:124
void setSpeed(uint32_t speed)
Definition: CANPort2B.cpp:155
uint8_t getSpeedPreset()
Definition: CANPort2B.cpp:128
bool silent
Definition: CANPort2B.h:64
void canTxCpltCallback(CANPort *port, uint32_t mailbox) override
Definition: CANPort2B.cpp:230
CANPort_2B(CAN_HandleTypeDef &hcan, const CANPortHardwareConfig &presets, const OutputPin *silentPin=nullptr, uint8_t instance=0)
Definition: CANPort2B.cpp:19
const ClassIdentifier getInfo()
Command handlers always have class infos. Works well with ChoosableClass.
Definition: CANPort2B.h:52
void removeCanFilter(uint8_t filterId)
Definition: CANPort2B.cpp:320
void abortTxRequests()
Definition: CANPort2B.cpp:180
Definition: CAN.h:119
virtual uint8_t speedToPreset(uint32_t speed)
Gets preset index for a speed.
Definition: CAN.h:197
const CANPortHardwareConfig & presets
CAN port presets for different speeds. Hardware dependent.
Definition: CAN.h:203
Definition: CAN.h:89