You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.1 KiB
C++
123 lines
4.1 KiB
C++
#ifndef FAST_DDS_GENERATED__PUBLISHERAPP_HPP
|
|
#define FAST_DDS_GENERATED__PUBLISHERAPP_HPP
|
|
|
|
#include <condition_variable>
|
|
#include <vector>
|
|
|
|
#include <fastdds/dds/domain/DomainParticipant.hpp>
|
|
#include <fastdds/dds/domain/DomainParticipantFactory.hpp>
|
|
#include <fastdds/dds/publisher/DataWriterListener.hpp>
|
|
#include <fastdds/dds/subscriber/DataReaderListener.hpp>
|
|
#include <fastdds/dds/topic/TypeSupport.hpp>
|
|
|
|
#include "MsgHandler.hpp"
|
|
|
|
class PublisherApp : public eprosima::fastdds::dds::DataWriterListener,public eprosima::fastdds::dds::DataReaderListener
|
|
{
|
|
public:
|
|
|
|
PublisherApp(
|
|
const int& domain_id);
|
|
|
|
~PublisherApp();
|
|
|
|
//! Publisher matched method
|
|
void on_publication_matched(
|
|
eprosima::fastdds::dds::DataWriter* writer,
|
|
const eprosima::fastdds::dds::PublicationMatchedStatus& info) override;
|
|
|
|
//! Run publisher
|
|
void run(std::shared_ptr<MsgHandler> handler);
|
|
|
|
//! Trigger the end of execution
|
|
void stop();
|
|
|
|
void on_data_available(eprosima::fastdds::dds::DataReader* reader) override;
|
|
void on_subscription_matched(eprosima::fastdds::dds::DataReader* reader,const eprosima::fastdds::dds::SubscriptionMatchedStatus& info) override;
|
|
|
|
void PublishSummaryUpdate(const std::string& cardId, float weightTon);
|
|
//void CheckAndPublishSummary();
|
|
void CheckAndPublishSummary(std::shared_ptr<MsgHandler> handler);
|
|
void RestoreAutoFind();
|
|
|
|
private:
|
|
|
|
//! Return the current state of execution
|
|
bool is_stopped();
|
|
|
|
bool is_infrared_blocked(); // ← 新增这一行
|
|
bool has_pending_send(); // ← 新增这一行(可选,统一判断)
|
|
|
|
std::shared_ptr<eprosima::fastdds::dds::DomainParticipantFactory> factory_;
|
|
eprosima::fastdds::dds::DomainParticipant* participant_;
|
|
eprosima::fastdds::dds::Publisher* publisher_;
|
|
eprosima::fastdds::dds::Topic* topic_;
|
|
eprosima::fastdds::dds::DataWriter* writer_;
|
|
eprosima::fastdds::dds::TypeSupport type_;
|
|
std::condition_variable cv_;
|
|
int32_t matched_;
|
|
std::mutex mutex_;
|
|
const uint32_t period_ms_ = 100;
|
|
uint16_t samples_sent_;
|
|
std::atomic<bool> stop_;
|
|
|
|
|
|
// ── SummaryUpdate 发布者 ──
|
|
eprosima::fastdds::dds::Publisher* summary_publisher_;
|
|
eprosima::fastdds::dds::Topic* summary_topic_;
|
|
eprosima::fastdds::dds::DataWriter* summary_writer_;
|
|
eprosima::fastdds::dds::TypeSupport summary_type_;
|
|
|
|
// ── ScaleInfo 订阅者 ──
|
|
eprosima::fastdds::dds::Subscriber* scale_subscriber_;
|
|
eprosima::fastdds::dds::Topic* scale_topic_;
|
|
eprosima::fastdds::dds::DataReader* scale_reader_;
|
|
eprosima::fastdds::dds::TypeSupport scale_type_;
|
|
|
|
|
|
// ── 新增:等待重量用的状态变量 ──
|
|
float stable_weight_ = 0.0f;
|
|
bool has_weight_ = false;
|
|
float default_weight_ = 0.0f; // 默认重量(当没有稳定重量时使用)
|
|
|
|
|
|
|
|
// ── InfraredUpdate 订阅者 ──
|
|
eprosima::fastdds::dds::Subscriber* infrared_subscriber_;
|
|
eprosima::fastdds::dds::Topic* infrared_topic_;
|
|
eprosima::fastdds::dds::DataReader* infrared_reader_;
|
|
eprosima::fastdds::dds::TypeSupport infrared_type_;
|
|
|
|
// ── 最新红外状态缓存 ──
|
|
bool front_blocked_ = false; // 前红外当前是否被遮挡
|
|
bool back_blocked_ = false; // 后红外当前是否被遮挡
|
|
std::mutex infrared_mtx_;
|
|
|
|
|
|
// ── 用于在 on_data_available 里区分 reader 的 topic ── ← 新增
|
|
std::mutex reader_topic_mtx_;
|
|
std::string scale_topic_name_;
|
|
std::string infrared_topic_name_;
|
|
|
|
|
|
bool write_test_done_ = false; // 写卡测试是否完成
|
|
bool write_test_started_ = false; // 是否已经开始写卡测试
|
|
|
|
bool write_read_pending_ = false; // 写入完成后,等待再次刷卡验证的标志
|
|
|
|
|
|
// 新增:保留历史重量帧(跨循环累积)
|
|
std::vector<float> recentValues_;
|
|
const size_t MAX_RECENT_FRAMES_ = 10;
|
|
|
|
|
|
// 用于 SummaryUpdate 发布
|
|
bool summary_pending_;
|
|
std::string pending_card_id_;
|
|
std::mutex summary_mtx_;
|
|
std::condition_variable summary_cv_;
|
|
|
|
};
|
|
|
|
#endif // FAST_DDS_GENERATED__PUBLISHERAPP_HPP
|