ProtocolDecodeBase.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // // ******************************************************************
  2. // // /\ /| @File ProtocolDecodeBase.cpp
  3. // // \ V/ @Brief
  4. // // | "") @Author lijinwen, ghz005@uni-trend.com.cn
  5. // // / | @Creation 2024-5-6
  6. // // / \\ @Modified 2024-5-13
  7. // // *(__\_\
  8. // // ******************************************************************
  9. #include "ProtocolDecodeBase.h"
  10. #include "DecodeParams.h"
  11. #include "QuantizeParams.h"
  12. #include "BaseHelper/Logger.h"
  13. #include "ProtocolUSB/UsbDecode.h"
  14. #include "ProtocolRS232/RS232Decode.h"
  15. namespace Protocol
  16. {
  17. /**
  18. * \brief
  19. */
  20. ProtocolDecodeBase::~ProtocolDecodeBase()
  21. {
  22. Cancel();
  23. }
  24. //解码过程
  25. void ProtocolDecodeBase::DecodeAsync(const DecodeParams* decodeParams)
  26. {
  27. canceled_ = false;
  28. //decode_thread_ = std::thread(&ProtocolBase::Decode, this, decode_params);
  29. // 使用 std::bind 来绑定 this 指针和成员函数指针
  30. decode_thread_ = std::thread([this, decodeParams] { Decode(decodeParams); });
  31. }
  32. //带整型的解码过程
  33. void ProtocolDecodeBase::QuantizeDecodeAsync(const QuantizeParams& decodeParams)
  34. {
  35. canceled_ = false;
  36. //decode_thread_ = std::thread(&ProtocolBase::Decode, this, decode_params);
  37. // 使用 std::bind 来绑定 this 指针和成员函数指针
  38. decode_thread_ = std::thread([this, decodeParams] { QuantizeDecode(decodeParams); });
  39. }
  40. void ProtocolDecodeBase::Cancel()
  41. {
  42. canceled_ = true;
  43. if (decode_thread_.joinable())
  44. {
  45. decode_thread_.join(); // 确保解码线程已经结束
  46. }
  47. }
  48. ProtocolStatus ProtocolDecodeBase::GetStatus() const
  49. {
  50. return status_;
  51. }
  52. DecodeResult* ProtocolDecodeBase::GetResult()
  53. {
  54. return nullptr;
  55. }
  56. void ProtocolDecodeBase::QuantizeDecode(const QuantizeParams& quantizeParams)
  57. {
  58. status_ = ProtocolStatus::QuantizeInProgress;
  59. // 默认实现,可以被子类覆盖
  60. if (canceled_)
  61. {
  62. status_ = ProtocolStatus::Canceled;
  63. return;
  64. }
  65. // 虚函数没有实际解码
  66. status_ = ProtocolStatus::Success; // 解码成功
  67. }
  68. void ProtocolDecodeBase::Decode(const DecodeParams* decodeParams)
  69. {
  70. status_ = ProtocolStatus::DecodeInProgress;
  71. // 默认实现,可以被子类覆盖
  72. if (canceled_)
  73. {
  74. status_ = ProtocolStatus::Canceled;
  75. return;
  76. }
  77. // 虚函数没有实际解码
  78. status_ = ProtocolStatus::Success; // 解码成功
  79. }
  80. }