Skip to content

Commit 820bd44

Browse files
committed
feat: Enhance data handling in SetDxlValueToSyncWrite and SetDxlValueToBulkWrite for varying item sizes
1 parent 39ec66e commit 820bd44

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/dynamixel/dynamixel.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1834,6 +1834,20 @@ DxlError Dynamixel::SetDxlValueToSyncWrite()
18341834
int16_t goal_current = dxl_info_.ConvertEffortToCurrent(ID, data);
18351835
param_write_value[added_byte + 0] = DXL_LOBYTE(goal_current);
18361836
param_write_value[added_byte + 1] = DXL_HIBYTE(goal_current);
1837+
} else {
1838+
if (indirect_info_write_[comm_id].item_size.at(item_index) == 4) {
1839+
int32_t value = static_cast<int32_t>(data);
1840+
param_write_value[added_byte + 0] = DXL_LOBYTE(DXL_LOWORD(value));
1841+
param_write_value[added_byte + 1] = DXL_HIBYTE(DXL_LOWORD(value));
1842+
param_write_value[added_byte + 2] = DXL_LOBYTE(DXL_HIWORD(value));
1843+
param_write_value[added_byte + 3] = DXL_HIBYTE(DXL_HIWORD(value));
1844+
} else if (indirect_info_write_[comm_id].item_size.at(item_index) == 2) {
1845+
int16_t value = static_cast<int16_t>(data);
1846+
param_write_value[added_byte + 0] = DXL_LOBYTE(value);
1847+
param_write_value[added_byte + 1] = DXL_HIBYTE(value);
1848+
} else if (indirect_info_write_[comm_id].item_size.at(item_index) == 1) {
1849+
param_write_value[added_byte] = static_cast<uint8_t>(data);
1850+
}
18371851
}
18381852
added_byte += indirect_info_write_[comm_id].item_size.at(item_index);
18391853
}
@@ -2053,6 +2067,20 @@ DxlError Dynamixel::SetDxlValueToBulkWrite()
20532067
int16_t goal_current = dxl_info_.ConvertEffortToCurrent(ID, data);
20542068
param_write_value[added_byte + 0] = DXL_LOBYTE(goal_current);
20552069
param_write_value[added_byte + 1] = DXL_HIBYTE(goal_current);
2070+
} else {
2071+
if (indirect_info_write_[comm_id].item_size.at(item_index) == 4) {
2072+
int32_t value = static_cast<int32_t>(data);
2073+
param_write_value[added_byte + 0] = DXL_LOBYTE(DXL_LOWORD(value));
2074+
param_write_value[added_byte + 1] = DXL_HIBYTE(DXL_LOWORD(value));
2075+
param_write_value[added_byte + 2] = DXL_LOBYTE(DXL_HIWORD(value));
2076+
param_write_value[added_byte + 3] = DXL_HIBYTE(DXL_HIWORD(value));
2077+
} else if (indirect_info_write_[comm_id].item_size.at(item_index) == 2) {
2078+
int16_t value = static_cast<int16_t>(data);
2079+
param_write_value[added_byte + 0] = DXL_LOBYTE(value);
2080+
param_write_value[added_byte + 1] = DXL_HIBYTE(value);
2081+
} else if (indirect_info_write_[comm_id].item_size.at(item_index) == 1) {
2082+
param_write_value[added_byte] = static_cast<uint8_t>(data);
2083+
}
20562084
}
20572085
added_byte += indirect_info_write_[comm_id].item_size.at(item_index);
20582086
}

0 commit comments

Comments
 (0)