GrabBag/App/TireHolePose/TireHolePoseApp/Presenter/Inc/TireHolePoseTCPProtocol.h

54 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QObject>
#include <QString>
#include <functional>
#include <memory>
#include "IVrConfig.h"
#include "RobotPose6D.h"
using DetectionTriggerCallback = std::function<void(int cameraIndex, const RobotPose6D& robotPose)>;
/**
* @brief TireHolePose TCP 文本协议PIMPL 模式)
*
* 眼在手外(Eye-to-Hand)模式:相机固定,无需机械臂位姿。
*
* 协议格式:
* - 请求: D1 触发相机1的轮胎检测
* - 响应: count_X1_Y1_Z1_A1_B1_C1_X2_Y2_Z2_A2_B2_C2_...
* (count 个目标,每个 6 个浮点XYZ + 姿态 A/B/C)
*
* 内部持有 IYTCPServer 生命周期与行缓冲,通过回调驱动 QObject 信号。
*/
class TireHolePoseTCPProtocol : public QObject
{
Q_OBJECT
public:
explicit TireHolePoseTCPProtocol(QObject* parent = nullptr);
~TireHolePoseTCPProtocol();
bool StartServer(uint16_t port);
void StopServer();
bool IsConnected() const;
void SetDetectionTriggerCallback(DetectionTriggerCallback callback);
void SendResult(const QString& resultText);
signals:
void ConnectionChanged(bool connected);
void DataReceived(const QString& data);
void DetectionTriggered(int cameraIndex, const RobotPose6D& robotPose);
private slots:
void OnNewConnection();
void OnDisconnected();
void OnReadyRead(const QByteArray& data);
private:
void ProcessCommand(const QString& command);
class Impl;
std::unique_ptr<Impl> m_pImpl;
};