Skip to content

Commit

Permalink
AddSensorMoveRequest to be sent to the pipette task
Browse files Browse the repository at this point in the history
  • Loading branch information
ahiuchingau committed Jan 25, 2024
1 parent 083a816 commit d65650f
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 4 deletions.
1 change: 1 addition & 0 deletions include/bootloader/core/ids.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ typedef enum {
can_messageid_execute_move_group_request = 0x18,
can_messageid_clear_all_move_groups_request = 0x19,
can_messageid_home_request = 0x20,
can_messageid_add_sensor_move_request = 0x23,
can_messageid_move_completed = 0x13,
can_messageid_motor_position_request = 0x12,
can_messageid_motor_position_response = 0x14,
Expand Down
1 change: 1 addition & 0 deletions include/can/core/ids.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ enum class MessageId {
execute_move_group_request = 0x18,
clear_all_move_groups_request = 0x19,
home_request = 0x20,
add_sensor_move_request = 0x23,
move_completed = 0x13,
motor_position_request = 0x12,
motor_position_response = 0x14,
Expand Down
2 changes: 1 addition & 1 deletion include/can/core/message_handlers/move_group.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class MoveGroupHandler {
using MessageType =
std::variant<std::monostate, AddLinearMoveRequest,
ClearAllMoveGroupsRequest, ExecuteMoveGroupRequest,
GetMoveGroupRequest, HomeRequest, StopRequest>;
GetMoveGroupRequest, HomeRequest, StopRequest, AddSensorMoveRequest>;
MoveGroupHandler(Client &task_client) : task_client{task_client} {}
MoveGroupHandler(const MoveGroupHandler &) = delete;
MoveGroupHandler(const MoveGroupHandler &&) = delete;
Expand Down
45 changes: 45 additions & 0 deletions include/can/core/messages.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1561,6 +1561,51 @@ struct GripperJawHoldoffResponse
-> bool = default;
};

struct AddSensorMoveRequest : BaseMessage<MessageId::add_sensor_move_request> {
uint32_t message_index;
uint8_t group_id;
uint8_t seq_id;
stepper_timer_ticks duration;
um_per_tick_sq acceleration;
mm_per_tick velocity;
uint8_t request_stop_condition;
can::ids::SensorId sensor_id{};

template <bit_utils::ByteIterator Input, typename Limit>
static auto parse(Input body, Limit limit) -> AddSensorMoveRequest {
uint8_t group_id = 0;
uint8_t seq_id = 0;
stepper_timer_ticks duration = 0;
um_per_tick_sq acceleration = 0;
mm_per_tick velocity = 0;
uint8_t request_stop_condition = 0;
uint32_t msg_ind = 0;
uint8_t sensor_id = 0;

body = bit_utils::bytes_to_int(body, limit, msg_ind);
body = bit_utils::bytes_to_int(body, limit, group_id);
body = bit_utils::bytes_to_int(body, limit, seq_id);
body = bit_utils::bytes_to_int(body, limit, duration);
body = bit_utils::bytes_to_int(body, limit, acceleration);
body = bit_utils::bytes_to_int(body, limit, velocity);
body = bit_utils::bytes_to_int(body, limit, request_stop_condition);
body = bit_utils::bytes_to_int(body, limit, sensor_id);
return AddSensorMoveRequest{
.message_index = msg_ind,
.group_id = group_id,
.seq_id = seq_id,
.duration = duration,
.acceleration = acceleration,
.velocity = velocity,
.request_stop_condition = request_stop_condition,
.sensor_id = static_cast<can::ids::SensorId>(sensor_id),
};
}

auto operator==(const AddSensorMoveRequest& other) const -> bool = default;
};


/**
* A variant of all message types we might send..
*/
Expand Down
2 changes: 1 addition & 1 deletion include/motor-control/core/tasks/messages.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ using MoveGroupTaskMessage =
can::messages::ClearAllMoveGroupsRequest,
can::messages::ExecuteMoveGroupRequest,
can::messages::GetMoveGroupRequest, can::messages::HomeRequest,
can::messages::StopRequest>;
can::messages::StopRequest, can::messages::AddSensorMoveRequest>;

using MoveStatusReporterTaskMessage = std::variant<
std::monostate, motor_messages::Ack, motor_messages::UpdatePositionResponse,
Expand Down
11 changes: 10 additions & 1 deletion include/motor-control/core/tasks/move_group_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ constexpr std::size_t max_moves_per_group = 12;
using MoveGroupType =
move_group::MoveGroupManager<max_groups, max_moves_per_group,
can::messages::AddLinearMoveRequest,
can::messages::HomeRequest>;
can::messages::HomeRequest,
can::messages::AddSensorMoveRequest>;

using TaskMessage = motor_control_task_messages::MoveGroupTaskMessage;

Expand Down Expand Up @@ -105,6 +106,12 @@ class MoveGroupMessageHandler {
mc_client.send_motion_controller_queue(m);
}

void handle(const can::messages::AddSensorMoveRequest& m) {
LOG("Received add sensor move request: groupid=%d, seqid=%d",
m.group_id, m.seq_id);
static_cast<void>(move_groups[m.group_id].set_move(m));
}

void visit_move(const std::monostate&) {}

void visit_move(const can::messages::AddLinearMoveRequest& m) {
Expand All @@ -115,6 +122,8 @@ class MoveGroupMessageHandler {
mc_client.send_motion_controller_queue(m);
}

void visit_move(const can::messages::AddSensorMoveRequest&) {}

MoveGroupType& move_groups;
MotionControllerClient& mc_client;
CanClient& can_client;
Expand Down
2 changes: 1 addition & 1 deletion include/pipettes/core/dispatch_builder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ using MoveGroupDispatchTarget = can::dispatch::DispatchParseTarget<
can::messages::AddLinearMoveRequest,
can::messages::ClearAllMoveGroupsRequest,
can::messages::ExecuteMoveGroupRequest, can::messages::GetMoveGroupRequest,
can::messages::HomeRequest, can::messages::StopRequest>;
can::messages::HomeRequest, can::messages::StopRequest, can::messages::AddSensorMoveRequest>;

using GearMoveGroupDispatchTarget = can::dispatch::DispatchParseTarget<
gear_move_group_handler::GearMoveGroupHandler<
Expand Down

0 comments on commit d65650f

Please sign in to comment.