From 6840c1091628c4e8967ff203aaecf05a1e674865 Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Wed, 2 Sep 2020 13:01:06 +0200
Subject: [PATCH] The loop functions return 0xFF to indicate the packet has to
 be relayed (not processed or broadcast ID)

---
 dynamixel_base/src/dynamixel_slave_device.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/dynamixel_base/src/dynamixel_slave_device.c b/dynamixel_base/src/dynamixel_slave_device.c
index 3d792dc..68c1222 100644
--- a/dynamixel_base/src/dynamixel_slave_device.c
+++ b/dynamixel_base/src/dynamixel_slave_device.c
@@ -98,6 +98,8 @@ unsigned char dyn_v1_slave_loop(TDynamixelSlaveDevice *device,unsigned char *rx_
                              (*error)=DYN_INST_ERROR;
                            }
                          }
+                         else if(id==DYN_BROADCAST_ID)
+                           send_status=0xFF;
                          break;
           case DYN_WRITE: (*length)=dyn_get_write_data(rx_buffer,data);
                           (*error)=device->on_write(dyn_get_write_address(rx_buffer),*length,data);
@@ -108,6 +110,8 @@ unsigned char dyn_v1_slave_loop(TDynamixelSlaveDevice *device,unsigned char *rx_
                             if((*error)!=DYN_NO_ERROR)
                               (*error)=DYN_INST_ERROR;
                           }
+                          else if(id==DYN_BROADCAST_ID)
+                            send_status=0xFF;
                           break;
           case DYN_REG_WRITE: device->reg_length=dyn_get_reg_write_data(rx_buffer,device->reg_buffer);
                               device->reg_address=dyn_get_reg_write_address(rx_buffer);
@@ -199,6 +203,8 @@ unsigned char dyn_v1_slave_loop(TDynamixelSlaveDevice *device,unsigned char *rx_
           }
         }
       }
+      else
+        send_status=0xFF;
     }
   }
   
@@ -242,6 +248,8 @@ unsigned char dyn_v2_slave_loop(TDynamixelSlaveDevice *device,unsigned char *rx_
                              (*error)=DYN_INST_ERROR;
                            }
                          }
+                         else if(id==DYN_BROADCAST_ID)
+                           send_status=0xFF;
                          break;
           case DYN_WRITE: (*length)=dyn2_get_write_data(rx_buffer,data);
                           (*error)=device->on_write(dyn2_get_write_address(rx_buffer),*length,data);
@@ -252,6 +260,8 @@ unsigned char dyn_v2_slave_loop(TDynamixelSlaveDevice *device,unsigned char *rx_
                             if((*error)!=DYN_NO_ERROR)
                               (*error)=DYN_INST_ERROR;
                           }
+                          else if(id==DYN_BROADCAST_ID)
+                            send_status=0xFF;
                           break;
           case DYN_REG_WRITE: device->reg_length=dyn2_get_reg_write_data(rx_buffer,device->reg_buffer);
                               device->reg_address=dyn2_get_reg_write_address(rx_buffer);
@@ -376,6 +386,8 @@ unsigned char dyn_v2_slave_loop(TDynamixelSlaveDevice *device,unsigned char *rx_
           }
         }
       }
+      else
+        send_status=0xFF;
     }
   }
 
-- 
GitLab