diff --git a/dynamixel_base/src/dynamixel_slave.c b/dynamixel_base/src/dynamixel_slave.c index a08f9b063ef5bcf7173cb8a218865c8f3e611b0a..84aaeaeabccf810a950c7e9488d07a76d042f302 100644 --- a/dynamixel_base/src/dynamixel_slave.c +++ b/dynamixel_base/src/dynamixel_slave.c @@ -169,13 +169,19 @@ void dyn_slave_loop(TDynamixelSlave *slave) if(send_status==0x01) dyn_slave_send_status_packet(slave,slave->slave_devices[i]->address,error,length,data,slave->slave_devices[i]->return_delay); } - if(slave->on_relay(slave->version,slave->rx_buffer,slave->tx_buffer)==DYN_SUCCESS) - { - // set the tx mode, if necessary - slave->set_tx_mode(); - // start transmission by DMA - comm_send_dma(slave->comm_dev,slave->tx_buffer,dyn_get_length(slave->tx_buffer)+4); - } + if(send_status==0xFF)// packet has not been processed + { + if(slave->on_relay(slave->version,slave->rx_buffer,slave->tx_buffer)==DYN_SUCCESS) + { + // set the tx mode, if necessary + slave->set_tx_mode(); + // start transmission by DMA + if(slave->version==DYN_VER1) + comm_send_dma(slave->comm_dev,slave->tx_buffer,dyn_get_length(slave->tx_buffer)+4); + else + comm_send_dma(slave->comm_dev,slave->tx_buffer,dyn2_get_length(slave->tx_buffer)+7); + } + } } else {