From 85bdd6588b1be964a5fbaabf59c8ff90c2fbdcd0 Mon Sep 17 00:00:00 2001 From: Sergi Hernandez Juan <shernand@iri.upc.edu> Date: Wed, 10 Jul 2024 18:03:56 +0200 Subject: [PATCH] Solved a bug in the slave input state machine to process the incomming data. --- src/dynamixel_slave.cpp | 13 ++++++++----- src/dynamixelserver.cpp | 6 +++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/dynamixel_slave.cpp b/src/dynamixel_slave.cpp index 59fa467..e9bc724 100644 --- a/src/dynamixel_slave.cpp +++ b/src/dynamixel_slave.cpp @@ -88,9 +88,9 @@ void *CDynamixelSlave::process_packets_thread(void *params) else slave->num_bytes--; break; - case 2: if(data[i]==0xFD)// version 2 header + case 2: if(slave->dyn_ver==dyn_version2)// the module is configured for version 2 { - if(slave->dyn_ver==dyn_version2)// the module is configured for version 2 + if(data[i]==0xFD)// version 2 header { slave->packet[slave->num_bytes]=data[i]; slave->num_bytes++; @@ -98,10 +98,13 @@ void *CDynamixelSlave::process_packets_thread(void *params) else slave->num_bytes=0;// ignore packet and restart synchronization } - else if(data[i]!=0xFF) + else { - slave->packet[slave->num_bytes]=data[i]; - slave->num_bytes++; + if(data[i]!=0xFF) + { + slave->packet[slave->num_bytes]=data[i]; + slave->num_bytes++; + } } break; case 3: slave->packet[slave->num_bytes]=data[i]; diff --git a/src/dynamixelserver.cpp b/src/dynamixelserver.cpp index f8ea023..91a0de4 100644 --- a/src/dynamixelserver.cpp +++ b/src/dynamixelserver.cpp @@ -467,9 +467,9 @@ void CDynamixelServer::receive_sync_bulk_status_packets_v2(std::vector<unsigned } else need_data=true; - } - if(length!=-1 && num>=length) - { + } + if(length!=-1 && num>=length) + { // check the checksum crc=this->compute_checksum_v2(&data_int[read],length-2); if((crc%256)!=data_int[read+length-2] || (crc/256)!=data_int[read+length-1]) -- GitLab