@@ -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
136136bool TrajectoryPointInterface::writeTrajectoryPoint (const vector6d_t * positions, const float acceleration,
0 commit comments