8#ifndef USEREXTENSIONS_SRC_MOTORSIMPLEMOTION_H_
9#define USEREXTENSIONS_SRC_MOTORSIMPLEMOTION_H_
35 FBD = 493,
FBR = 565,
ControlMode = 559,
Voltage = 900,
Torque = 901,
systemcontrol = 554,
status = 553,
CB1 = 2533,
cumstat = 13,
faults = 552,
devtype = 6020
74 uint32_t
getCpr()
override;
172 template<
size_t params,
size_t replynum>
175 uint8_t subpacketbuf[lengthSpecified ? (4-((uint8_t)replylen & 0x3)+7) * params : 5*params] = {0};
176 uint8_t requestlen = 0;
187 if(!
sendCommand(subpacketbuf,requestlen,this->address)){
191 uint32_t mstart = HAL_GetTick();
193 while((HAL_GetTick()-mstart) < timeout_ms &&
waitingReply){
207 for(uint8_t i = 0;i<replynum ; i++){
218 template<
size_t params,
size_t replynum>
221 uint8_t packetlen = 4-((uint8_t)type & 0x3);
222 uint8_t subpacketbuf[(packetlen + 2)*params] = {0};
223 uint8_t requestlen = 0;
225 for(std::pair<MotorSimplemotion_param,int32_t> param : paramIds_value){
227 requestlen+=
queueCommand(subpacketbuf+requestlen, type, (uint32_t)param.second);
230 if(!
sendCommand(subpacketbuf,requestlen,this->address)){
233 uint32_t mstart = HAL_GetTick();
235 while((HAL_GetTick()-mstart) < timeout_ms &&
waitingReply){
247 for(uint8_t i = 0;i<replynum ; i++){
@ externalConfigurationError
static ClassIdentifier info
static bool isCreatable()
const ClassIdentifier getInfo()
Command handlers always have class infos. Works well with ChoosableClass.
static bool isCreatable()
const ClassIdentifier getInfo()
Command handlers always have class infos. Works well with ChoosableClass.
static ClassIdentifier info
MotorSimplemotion_commands
static const uint8_t SMCMD_INSTANT_CMD_RET
void startMotor() override
volatile uint32_t lastUpdateTime
static const uint8_t TXBUF_SIZE
static bool crcTableInitialized
void turn(int16_t power) override
volatile bool uartErrorOccured
EncoderType getEncoderType() override
volatile bool waitingReply
void startUartTransfer(UARTPort *port, bool transmit)
volatile uint32_t lastSentTime
static uint16_t calculateCrc16rev(std::array< uint16_t, 256 > &crctable, uint8_t *buf, uint16_t len, uint16_t crc)
const OutputPin & writeEnablePin
volatile uint32_t crcerrors
bool prepareUartTransmit()
volatile uint32_t uarterrors
static const uint32_t uartErrorTimeout
volatile uint32_t lastStatusTime
void stopMotor() override
MotorSimplemotion_FBR encodertype
static const uint16_t crcpoly16
volatile uint8_t replyidx
static const uint8_t SMCMD_INSTANT_CMD
static const uint8_t crc8init
static std::array< uint8_t, 256 > tableCRC8
static const uint8_t SMPCMD_SETPARAMADDR
volatile uint32_t replyvalues[REPLYBUF_SIZE]
static const uint8_t SMCMD_FAST_UPDATE_CYCLE
volatile char rxbuf[RXBUF_SIZE]
void updateStatus(uint16_t value)
uint8_t queueCommand(uint8_t *buf, MotorSimplemotion_cmdtypes type, uint32_t data)
volatile uint32_t lastTimeByteReceived
bool writeParameter(std::array< std::pair< MotorSimplemotion_param, int32_t >, params > paramIds_value, std::array< uint32_t *, replynum > replies, MotorSimplemotion_cmdtypes type, uint32_t timeout_ms=uartErrorTimeout)
void sendFastUpdate(uint16_t val1, uint16_t val2=0)
static std::array< uint16_t, 256 > tableCRC16
bool readParameter(std::array< MotorSimplemotion_param, params > paramIds, std::array< uint32_t *, replynum > replies, MotorSimplemotion_cmdtypes replylen=MotorSimplemotion_cmdtypes::none, uint32_t timeout_ms=uartErrorTimeout)
bool read1Parameter(MotorSimplemotion_param paramId, uint32_t *reply_p, MotorSimplemotion_cmdtypes replylen=MotorSimplemotion_cmdtypes::none)
static const uint8_t SMCMD_FAST_UPDATE_CYCLE_RET
virtual ~MotorSimplemotion()
static const uint8_t RXBUF_SIZE
void updatePosition(uint16_t value)
const ClassIdentifier getInfo()=0
Command handlers always have class infos. Works well with ChoosableClass.
struct MotorSimplemotion::Sm2FastUpdate __attribute__((packed))
Encoder * getEncoder() override
MotorSimplemotion(uint8_t instance)
uint32_t getCpr() override
bool hasIntegratedEncoder()
bool sendCommand(uint8_t *buf, uint8_t len, uint8_t adr)
void endUartTransfer(UARTPort *port, bool transmit)
static const uint8_t crcpoly
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies) override
int32_t getPos() override
static const uint8_t SMP_FAST_UPDATE_CYCLE_FORMAT
volatile bool waitingFastUpdate
void setPos(int32_t pos) override
MotorSimplemotion_cmdtypes
static const uint8_t REPLYBUF_SIZE
bool set1Parameter(MotorSimplemotion_param paramId, int32_t value, uint32_t *reply_p=nullptr)
std::string getHelpstring()