8#include "target_constants.h"
21 .
name =
"Simplemotion 1" ,
26 .
name =
"Simplemotion 2" ,
39 UART_InitTypeDef uartconf;
40 uartconf.BaudRate = 460800;
41 uartconf.WordLength = UART_WORDLENGTH_8B;
42 uartconf.StopBits = UART_STOPBITS_1;
43 uartconf.Parity = UART_PARITY_NONE;
44 uartconf.Mode = UART_MODE_TX_RX;
45 uartconf.HwFlowCtl = UART_HWCONTROL_NONE;
46 uartconf.OverSampling = UART_OVERSAMPLING_8;
107 return static_cast<Encoder*
>(
this);
204 this->
cpr = tcpr*256;
227 std::array<MotorSimplemotion_param,1> paramIds = {paramId};
228 std::array<uint32_t*,1> replies = {reply_p};
233 std::array<std::pair<MotorSimplemotion_param,int32_t>,1> paramIds = {std::make_pair(paramId,value)};
234 std::array<uint32_t*,1> replies = {reply_p};
251 return ((int16_t)torque_u * 1000) / 560;
265 if(abs(diff) > 0x7fff){
281 if(!(value & (1 << 12))){
332 uint8_t len = 4 - ((uint8_t)type & 0x3);
333 buf[0] = (((uint8_t)type) & 0x3) << (6);
335 for(uint8_t b = 0;b<len;b++){
336 buf[b] |= (
data >> (8 * (len-1-b))) & 0xff;
371 char byte1 =
rxbuf[0];
395 uint8_t len =
rxbuf[1];
418 uint8_t subpacketlen = 4 - ((
data[i] >> 6) & 0x3);
419 uint32_t val = (
data[i] & 0x3f) << ((subpacketlen-1)*8);
420 for(uint8_t b = 1;b < subpacketlen;b++){
421 uint32_t data_t = (uint32_t)
data[i+b];
422 val |= data_t << ((subpacketlen-1-b)*8);
500 replies.emplace_back(
status);
512 replies.emplace_back((int32_t)t);
516 replies.emplace_back((int32_t)t);
void makeCrcTable(std::array< T, LEN > &table, const T crcpoly, const uint8_t bits, const bool refin=false, const bool refout=false)
uint16_t calculateCrc16_8_rev(std::array< uint16_t, 256 > &crctable, uint8_t *buf, uint16_t len, uint16_t crc=0)
uint8_t calculateCrc8(std::array< uint8_t, 256 > &crctable, uint8_t *buf, uint16_t len, uint8_t crc=0)
std::array< uint8_t, 256 > MotorSimplemotion::tableCRC8 __attribute__((section(".ccmram")))
void registerCommand(const char *cmd, const ID cmdid, const char *help=nullptr, uint32_t flags=0)
static void addError(const Error &error)
static ClassIdentifier info
static ClassIdentifier info
MotorSimplemotion_commands
static const uint8_t SMCMD_INSTANT_CMD_RET
void startMotor() override
volatile uint32_t lastUpdateTime
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
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
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)
Encoder * getEncoder() override
MotorSimplemotion(uint8_t instance)
uint32_t getCpr() override
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
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)
bool giveSemaphore(bool txsem=true)
bool takeSemaphore(bool txsem=true, uint32_t blocktime=portMAX_DELAY)
bool transmit_IT(const char *txbuf, uint16_t size)
bool reconfigurePort(UART_InitTypeDef &config)
static void * memcpy(void *dst, const void *src, size_t n)