@@ -304,11 +304,7 @@ DxlError Dynamixel::SetDxlReadItems(
304
304
305
305
DxlError Dynamixel::SetMultiDxlRead ()
306
306
{
307
- if (read_data_list_.size () < 2 ) {
308
- read_type_ = SYNC;
309
- } else {
310
- read_type_ = checkReadType ();
311
- }
307
+ read_type_ = checkReadType ();
312
308
313
309
fprintf (stderr, " Dynamixel Read Type : %s\n " , read_type_ ? " bulk read" : " sync read" );
314
310
if (read_type_ == SYNC) {
@@ -411,13 +407,10 @@ DxlError Dynamixel::SetDxlWriteItems(
411
407
412
408
return DxlError::OK;
413
409
}
410
+
414
411
DxlError Dynamixel::SetMultiDxlWrite ()
415
412
{
416
- if (write_data_list_.size () < 2 ) {
417
- write_type_ = SYNC;
418
- } else {
419
- write_type_ = checkWriteType ();
420
- }
413
+ write_type_ = checkWriteType ();
421
414
422
415
fprintf (stderr, " Dynamixel Write Type : %s\n " , write_type_ ? " bulk write" : " sync write" );
423
416
if (write_type_ == SYNC) {
@@ -447,12 +440,10 @@ DxlError Dynamixel::SetMultiDxlWrite()
447
440
}
448
441
449
442
if (write_type_ == SYNC) {
450
- SetSyncWriteItemAndHandler ();
443
+ return SetSyncWriteItemAndHandler ();
451
444
} else {
452
- SetBulkWriteItemAndHandler ();
445
+ return SetBulkWriteItemAndHandler ();
453
446
}
454
-
455
- return DxlError::OK;
456
447
}
457
448
458
449
DxlError Dynamixel::DynamixelEnable (std::vector<uint8_t > id_arr)
@@ -873,6 +864,12 @@ DxlError Dynamixel::WriteMultiDxlData()
873
864
874
865
bool Dynamixel::checkReadType ()
875
866
{
867
+ if (read_data_list_.size () == 1 ) {
868
+ if (CheckIndirectReadAvailable (read_data_list_.at (0 ).comm_id ) != DxlError::OK) {
869
+ return BULK;
870
+ }
871
+ }
872
+
876
873
for (size_t dxl_index = 1 ; dxl_index < read_data_list_.size (); dxl_index++) {
877
874
// Check if Indirect Data Read address and size are different
878
875
uint16_t indirect_addr[2 ]; // [i-1], [i]
@@ -919,6 +916,12 @@ bool Dynamixel::checkReadType()
919
916
920
917
bool Dynamixel::checkWriteType ()
921
918
{
919
+ if (write_data_list_.size () == 1 ) {
920
+ if (CheckIndirectWriteAvailable (write_data_list_.at (0 ).comm_id ) != DxlError::OK) {
921
+ return BULK;
922
+ }
923
+ }
924
+
922
925
for (size_t dxl_index = 1 ; dxl_index < write_data_list_.size (); dxl_index++) {
923
926
// Check if Indirect Data Write address and size are different
924
927
uint16_t indirect_addr[2 ]; // [i-1], [i]
0 commit comments