DIOS.Dev.DME.NormalDME.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #pragma once
  2. #include "DIOS.Dev.DME.Mould.hpp"
  3. #include "IODeviceWithSCF.tlh"
  4. #include "IODeviceWithSCF.tli"
  5. #include "DIOS.Dev.MSGMould.hpp"
  6. #include "DIOS.Dev.IODevice.Detail.hpp"
  7. #include "DeliverModule.h"
  8. #include <queue>
  9. #include <thread> // ÓÃÓÚ std::this_thread::sleep_for
  10. #include <chrono> // ÓÃÓÚ std::chrono::milliseconds
  11. #ifdef DIOSDMENormalDME_EXPORTS
  12. #define _DIOSDMENormalDME_API __declspec(dllexport)
  13. #else
  14. #define _DIOSDEVDMEDEMO_API __declspec(dllimport) DME
  15. #endif
  16. namespace DIOS::Dev::Detail::DME
  17. {
  18. static const int TIMEOUTVALUE = 100;
  19. typedef struct tagNormalDMECommand
  20. {
  21. UINT8 nFrameHeader1;
  22. UINT8 nFrameHeader2;
  23. UINT8 nCommand;
  24. UINT8 nData;
  25. UINT8 nCheckSum;
  26. UINT8 nEndFlag;
  27. }NormalDMECOMMAND;
  28. //-----------------------------------------------------------------------------
  29. // DMEDevice
  30. //-----------------------------------------------------------------------------
  31. namespace nDev = DIOS::Dev;
  32. class _DIOSDMENormalDME_API DMENormalDMEDevice : public IODeviceWithSCF <IODeviceDetail>, public DMEMould
  33. {
  34. using super = IODeviceWithSCF <IODeviceDetail>;
  35. using superGen = DMEMould;
  36. public:
  37. DMENormalDMEDevice(std::shared_ptr <IOEventCenter> center, nsSCF::SCF SCF, string configfile);
  38. ~DMENormalDMEDevice();
  39. void Register();
  40. virtual std::string GetGUID() const override;
  41. virtual RET_STATUS FetchDistance() override;
  42. virtual RET_STATUS SetCalibrateValue(int pParams) override;
  43. virtual RET_STATUS SetMeasurementInterval(int pParams) override;
  44. virtual RET_STATUS SetStartEndPoints(int pParams) override;
  45. virtual RET_STATUS SetRange(int pParams) override;
  46. virtual RET_STATUS SetFrequency(int pParams) override;
  47. virtual RET_STATUS SetResolution(int pParams) override;
  48. virtual RET_STATUS SetLaserState(int pParams) override;
  49. virtual RET_STATUS ShutDown();
  50. bool isChecksumValid(const char* package, size_t length);
  51. void SendNextCommand();
  52. void OnCallBack(const char* strPackage, DWORD Length);
  53. int m_nCalibrateValue;
  54. int m_nMeasurementInterval;
  55. int m_nPosition;
  56. int m_nRange;
  57. int m_nFrequency;
  58. int m_nResolution;
  59. int m_nMeasureSID;
  60. int m_nMeasureAngle;
  61. private:
  62. RET_STATUS HWSend(const char* strCommand,int length,int nTimeOut = TIMEOUTVALUE);
  63. RET_STATUS SetCommand(std::string &str);
  64. std::unique_ptr<nsDetail::MSGUnit> m_MSGUnit;
  65. NormalDMECOMMAND m_Command;
  66. std::queue<std::string> commandQueue;
  67. ResDataObject m_DMEConfig; //driver's config file.
  68. private:
  69. void FireNotify(std::string key, std::string context);
  70. };
  71. }
  72. //-----------------------------------------------------------------------------
  73. // DMEDriver
  74. //-----------------------------------------------------------------------------
  75. namespace DIOS::Dev::Detail::DME
  76. {
  77. class _DIOSDMENormalDME_API DMENormalDMEDriver : public IODriverWithSCF <DriverMould>
  78. {
  79. using super = IODriverWithSCF <DriverMould>;
  80. public:
  81. DMENormalDMEDriver();
  82. virtual ~DMENormalDMEDriver();
  83. public:
  84. virtual void Prepare() override;
  85. virtual bool DATA_ACTION Connect() override;
  86. virtual void Disconnect() override;
  87. virtual bool isConnected() const override;
  88. virtual void Dequeue(const char* Packet, DWORD Length) override;
  89. virtual void FireNotify(int code, std::string key, std::string content) override;
  90. virtual auto CreateDevice(int index)->std::unique_ptr <IODevice> override;
  91. virtual std::string DriverProbe() override;
  92. virtual std::string GetResource() override;
  93. virtual std::string DeviceProbe() override;
  94. private:
  95. static PACKET_RET callbackPackageProcess(const char* RecData, DWORD nLength, DWORD& PacketLength);
  96. DMENormalDMEDevice* m_pDevice{ nullptr };
  97. };
  98. }