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
CommandHandler(const char *clsname, uint16_t clsid, uint8_t instance=0)
static ClassIdentifier info
static bool isCreatable()
const ClassIdentifier getInfo()
static bool isCreatable()
const ClassIdentifier getInfo()
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
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()
static struct @024127060247016123033304002117326322243354210111 data