Skip to content

Commit d129cf8

Browse files
committed
Use an std::array instead of a raw buffer
This should help changing specific fields in the future.
1 parent 20daecd commit d129cf8

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/control/trajectory_point_interface.cpp

+17-17
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ bool TrajectoryPointInterface::writeMotionPrimitive(const std::shared_ptr<contro
6565
{
6666
return false;
6767
}
68-
uint8_t buffer[sizeof(int32_t) * MESSAGE_LENGTH];
69-
uint8_t* b_pos = buffer;
68+
std::array<int32_t, MESSAGE_LENGTH> buffer;
7069

7170
vector6d_t positions;
7271

@@ -85,7 +84,7 @@ bool TrajectoryPointInterface::writeMotionPrimitive(const std::shared_ptr<contro
8584
movel_primitive->target_pose.rx, movel_primitive->target_pose.ry, movel_primitive->target_pose.rz };
8685
break;
8786
}
88-
case urcl::control::MotionType::MOVEP:
87+
case MotionType::MOVEP:
8988
{
9089
auto movep_primitive = std::static_pointer_cast<control::MovePPrimitive>(primitive);
9190
positions = { movep_primitive->target_pose.x, movep_primitive->target_pose.y, movep_primitive->target_pose.z,
@@ -96,41 +95,42 @@ bool TrajectoryPointInterface::writeMotionPrimitive(const std::shared_ptr<contro
9695
throw UnsupportedMotionType();
9796
}
9897

98+
size_t index = 0;
9999
for (auto const& pos : positions)
100100
{
101101
int32_t val = static_cast<int32_t>(round(pos * MULT_JOINTSTATE));
102-
val = htobe32(val);
103-
b_pos += append(b_pos, val);
102+
buffer[index] = htobe32(val);
103+
index++;
104104
}
105105
for (size_t i = 0; i < positions.size(); ++i)
106106
{
107107
int32_t val = static_cast<int32_t>(round(primitive->velocity * MULT_JOINTSTATE));
108-
val = htobe32(val);
109-
b_pos += append(b_pos, val);
108+
buffer[index] = htobe32(val);
109+
index++;
110110
}
111111
for (size_t i = 0; i < positions.size(); ++i)
112112
{
113113
int32_t val = static_cast<int32_t>(round(primitive->acceleration * MULT_JOINTSTATE));
114-
val = htobe32(val);
115-
b_pos += append(b_pos, val);
114+
buffer[index] = htobe32(val);
115+
index++;
116116
}
117117

118118
int32_t val = static_cast<int32_t>(round(primitive->duration.count() * MULT_TIME));
119-
val = htobe32(val);
120-
b_pos += append(b_pos, val);
119+
buffer[index] = htobe32(val);
120+
index++;
121121

122122
val = static_cast<int32_t>(round(primitive->blend_radius * MULT_TIME));
123-
val = htobe32(val);
124-
b_pos += append(b_pos, val);
123+
buffer[index] = htobe32(val);
124+
index++;
125125

126126
val = static_cast<int32_t>(primitive->type);
127-
128-
val = htobe32(val);
129-
b_pos += append(b_pos, val);
127+
buffer[index] = htobe32(val);
128+
index++;
130129

131130
size_t written;
132131

133-
return server_.write(client_fd_, buffer, sizeof(buffer), written);
132+
// We stored the data in a int32_t vector, but write needs a uint8_t buffer
133+
return server_.write(client_fd_, (uint8_t*)buffer.data(), buffer.size() * sizeof(int32_t), written);
134134
}
135135

136136
bool TrajectoryPointInterface::writeTrajectoryPoint(const vector6d_t* positions, const float acceleration,

0 commit comments

Comments
 (0)