using Flyshot.Core.Domain;
namespace Flyshot.Runtime.Common;
///
/// 定义控制器运行时的最小状态与执行契约,供兼容层在不关心底层 Socket 细节的情况下调度轨迹。
///
public interface IControllerRuntime
{
///
/// 重置当前机器人模型并清空控制器运行时状态。
///
/// 当前机器人配置。
/// 兼容层传入的机器人名称。
void ResetRobot(RobotProfile robot, string robotName);
///
/// 建立到控制器 IP 的连接。
///
/// 控制器 IP。
void Connect(string robotIp);
///
/// 断开当前控制器连接。
///
void Disconnect();
///
/// 使能机器人并记录底层缓冲区大小。
///
/// 运行时缓冲区大小。
void EnableRobot(int bufferSize);
///
/// 关闭机器人使能。
///
void DisableRobot();
///
/// 停止当前运动。
///
void StopMove();
///
/// 获取当前速度倍率。
///
/// 速度倍率。
double GetSpeedRatio();
///
/// 设置当前速度倍率。
///
/// 目标速度倍率。
void SetSpeedRatio(double ratio);
///
/// 获取当前 TCP 坐标。
///
/// TCP 三维坐标。
IReadOnlyList GetTcp();
///
/// 设置当前 TCP 坐标。
///
/// TCP X。
/// TCP Y。
/// TCP Z。
void SetTcp(double x, double y, double z);
///
/// 读取指定 IO 端口。
///
/// IO 端口。
/// IO 类型。
/// IO 当前值。
bool GetIo(int port, string ioType);
///
/// 写入指定 IO 端口。
///
/// IO 端口。
/// 目标 IO 值。
/// IO 类型。
void SetIo(int port, bool value, string ioType);
///
/// 获取当前关节位置。
///
/// 当前关节位置。
IReadOnlyList GetJointPositions();
///
/// 获取当前末端位姿。
///
/// 当前末端位姿。
IReadOnlyList GetPose();
///
/// 获取当前运行时状态快照。
///
/// 控制器状态快照。
ControllerStateSnapshot GetSnapshot();
///
/// 执行一条已经完成规划的轨迹,并更新最终关节位置。
///
/// 规划结果。
/// 轨迹执行结束后的关节位置。
void ExecuteTrajectory(TrajectoryResult result, IReadOnlyList finalJointPositions);
///
/// 执行一条已经完成规划的直角坐标轨迹,并更新最终 TCP 位姿。
///
/// 规划结果,必须包含稠密直角坐标轨迹。
/// 轨迹执行结束后的 [x,y,z,w,p,r] 位姿。
void ExecuteCartesianTrajectory(TrajectoryResult result, IReadOnlyList finalPose);
}