16 .
name =
"TMC Debug Bridge" ,
17 .id=CLSID_MAIN_TMCDBG,
27 for(uint8_t i = 0; i < len ;i++){
51 replies.emplace_back(
drv->getTorque());
64 replies.emplace_back(
drv->getPos());
66 drv->setTargetPos(cmd.
val);
74 drv->setOpenLoopSpeedAccel(cmd.
val,100);
76 drv->runOpenLoop(cmd.
adr,0,cmd.
val,10,
true);
84 drv->setOpenLoopSpeedAccel(cmd.
val,100);
86 drv->runOpenLoop(cmd.
adr,0,cmd.
val,10,
false);
94 replies.emplace_back(
drv->getVelocity());
96 drv->setTargetVelocity(cmd.
val);
104 replies.emplace_back((uint8_t)
drv->getMotionMode());
109 replies.emplace_back(
"stop=0,torque=1,velocity=2,position=3,prbsflux=4,prbstorque=5,prbsvelocity=6,uqudext=8,encminimove=9");
115 replies.emplace_back(
drv->readReg(cmd.
val));
134 std::vector<uint8_t> dat;
135 dat.assign(Buf,Buf+*Len);
136 if(*Len == 9 && *Buf == 1){
140 uint8_t cmd = dat[1];
141 uint8_t addr = dat[2];
143 if(dat[dat.size()-1] !=
crc){
150 uint8_t rpl[4] = {2,1,0x64,0x94};
152 uint32_t bufI =
drv->readReg(addr);
155 std::vector<uint8_t> rx_data;
157 rx_data.insert(rx_data.begin(), &rpl[0],&rpl[4]);
158 rx_data.insert(rx_data.end(),buf, buf+4);
159 rx_data.push_back(
checksum(&rx_data,8));
160 sendCdc((
char*)rx_data.data(), 9);
162 }
else if(cmd == 146){
166 drv->writeReg(addr,__REV(ndat));
167 std::vector<uint8_t> repl({2,1,0x64,0x92,dat[3],dat[4],dat[5],dat[6]});
169 sendCdc((
char*)repl.data(), 9);
170 }
else if(cmd == 143){
171 std::vector<uint8_t> repl(8,0);
173 repl.assign({2,1,40,0x8f,0,0,0,2});
175 repl.assign({2,1,40,0x8f,2,6,2,2});
178 sendCdc((
char*)repl.data(), 9);
180 std::vector<uint8_t> repl({2,1,64,0x0A,0,0,0,0});
187 sendCdc((
char*)repl.data(), 9);
188 }
else if(cmd == 0x0F){
189 std::vector<uint8_t> repl({2,1,64,0x0F,0,0,0,0});
193 repl[6] = (v>>8) & 0xff;
196 sendCdc((
char*)repl.data(), 9);
197 }
else if(cmd == 0x88){
198 char version[9] = {2,
'0',
'0',
'1',
'5',
'V',
'3',
'0',
'7'};
203 uint32_t tmpVal = (uint8_t) version[1] -
'0';
204 std::vector<uint8_t> repl = {2,0x01,0x64,0x88,0x00,0,0,0};
206 tmpVal += (uint8_t) version[2] -
'0';
210 tmpVal = (uint8_t) version[3] -
'0';
212 tmpVal += (uint8_t) version[4] -
'0';
216 repl[6] = (uint8_t) version[6] -
'0';
219 tmpVal = (uint8_t) version[7] -
'0';
221 tmpVal += (uint8_t) version[8] -
'0';
224 sendCdc((
char*)repl.data(), 9);
241 this->
drv = std::make_unique<TMC_1>();
250 drv->enablePin.set();
255 HAL_GPIO_WritePin(DRV_ENABLE_GPIO_Port,DRV_ENABLE_Pin,GPIO_PIN_RESET);
uint32_t tud_cdc_n_write(uint8_t itf, void const *buffer, uint32_t bufsize)
static TU_ATTR_ALWAYS_INLINE uint32_t tud_cdc_write_flush(void)
void registerCommand(const char *cmd, const ID cmdid, const char *help=nullptr, uint32_t flags=0)
virtual void cdcRcv(char *Buf, uint32_t *Len)
virtual ~TMCDebugBridge()
const ClassIdentifier getInfo()
uint8_t checksum(std::vector< uint8_t > *buffer, uint8_t len)
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
static void sendCdc(char *dat, uint32_t len)
const TMC4671Limits tmclimits
void cdcRcv(char *Buf, uint32_t *Len)
std::unique_ptr< TMC4671 > drv
static ClassIdentifier info
static void * memcpy(void *dst, const void *src, size_t n)