GlobalInfo.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #ifndef GLOBALINFO_H
  2. #define GLOBALINFO_H
  3. #include <mutex>
  4. #include <vector>
  5. #include <QRect>
  6. #include <QColor>
  7. /* 示波器通道 */
  8. enum class OscChannel
  9. {
  10. CH_A = 0,
  11. CH_B,
  12. };
  13. /* 示波器通道耦合方式 */
  14. enum class OscChannelCoupling
  15. {
  16. AC = 0,
  17. DC,
  18. };
  19. /* 示波器采样率,目前就只要这些 */
  20. enum class OscSampleRate
  21. {
  22. SR_49KHZ = 0,
  23. SR_96KHZ,
  24. SR_781KHZ,
  25. SR_12_5MHZ,
  26. SR_100MHZ,
  27. };
  28. /* 示波器通道的输入档位 */
  29. enum class OscChannelRange
  30. {
  31. CR_100MV = 0,
  32. CR_250MV,
  33. CR_500MV,
  34. CR_1V,
  35. CR_2V5,
  36. CR_5V,
  37. CR_8V,
  38. };
  39. /* 触发方式 */
  40. enum class OscTriggerMode
  41. {
  42. TM_RISE = 0, /* 上升沿触发 */
  43. TM_DOWN, /* 下降沿触发 */
  44. TM_DOUBLE, /* 双边沿触发 */
  45. };
  46. /* 触发灵敏度 */
  47. enum class OscTriggerSensitivity
  48. {
  49. TS_LOW = 0, /* 低灵敏度 */
  50. TS_HIGH, /* 高灵敏度 */
  51. };
  52. struct EyeDataT
  53. {
  54. bool isEyeData;
  55. unsigned char value;
  56. EyeDataT() : isEyeData(false), value(0) {}
  57. EyeDataT(bool isOpen, unsigned char val) : isEyeData(isOpen), value(val) {}
  58. EyeDataT& operator=(const EyeDataT& data)
  59. {
  60. isEyeData = data.isEyeData;
  61. value = data.value;
  62. return *this;
  63. }
  64. };
  65. /* 眼图数据点 */
  66. struct EyeDataSample
  67. {
  68. int x; /* X坐标? */
  69. int y; /* Y坐标? */
  70. double fCnt; /* 颜色深浅? */
  71. int Cnt; /* */
  72. unsigned char data;
  73. EyeDataSample() : x(0), y(0), fCnt(0.0), Cnt(0), data(0) {}
  74. EyeDataSample(int x, int y, double fCnt, int Cnt, unsigned char data)
  75. : x(x), y(y), fCnt(fCnt), Cnt(Cnt), data(data) {}
  76. EyeDataSample& operator=(const EyeDataSample& data)
  77. {
  78. x = data.x;
  79. y = data.y;
  80. fCnt = data.fCnt;
  81. Cnt = data.Cnt;
  82. this->data = data.data;
  83. return *this;
  84. }
  85. };
  86. /* 类型重命名 */
  87. using Vec2D = std::vector<std::vector<EyeDataSample>>;
  88. /**
  89. * @brief 眼图数据
  90. *
  91. */
  92. class EyeDataMatrix
  93. {
  94. public:
  95. EyeDataMatrix();
  96. ~EyeDataMatrix() {}
  97. Vec2D dataMatrix;
  98. // EyeDataSample dataMatrix[1000][256];
  99. std::mutex mutexEyeData;
  100. void addData(int x, int y);
  101. void eyeStatisticalWeight();
  102. void eyeLessenTheBurden();
  103. std::shared_ptr<Vec2D> eyeZoomOut();
  104. private:
  105. double eyenWeightCoefficient = 0.99;
  106. bool eyeIsLessenTheBurden = true;
  107. double eyenWeightCoefficientMIN = 1E-06;
  108. };
  109. extern EyeDataMatrix g_eyeDataMatrix;
  110. /**
  111. * @brief 绘制到窗口的眼图数据
  112. * 总共有1000 * 245个数据点充满屏幕,每个数据点是个矩形
  113. * 每个数据点的颜色深浅由fCnt决定,该点的数据越多,像素颜色越深
  114. *
  115. */
  116. struct EyeMapDataSample
  117. {
  118. bool isDraw; /* 是否绘制 */
  119. int x;
  120. int y;
  121. int Count; /* 像素点的个数(颜色深度),这里限制为799,不知道为什么 */
  122. unsigned char data; /* 数据值 */
  123. QRect rect; /* 像素点的矩形区域 */
  124. QColor color; /* 颜色 */
  125. EyeMapDataSample() : isDraw(false), x(0), y(0), Count(0), data(0), color(255, 255, 255) {}
  126. EyeMapDataSample(EyeDataSample& data) : isDraw(false), x(data.x), y(data.y), Count(data.Cnt), data(data.data) {}
  127. EyeMapDataSample& operator=(const EyeMapDataSample& data) {
  128. x = data.x;
  129. y = data.y;
  130. Count = data.Count;
  131. isDraw = data.isDraw;
  132. rect = data.rect;
  133. return *this;
  134. }
  135. };
  136. using Vec2DMap = std::vector<std::vector<EyeMapDataSample>>;
  137. /**
  138. * @brief 眼图数据矩阵
  139. *
  140. */
  141. class EyeMapMatrix
  142. {
  143. public:
  144. EyeMapMatrix() : dataMatrix(1000, std::vector<EyeMapDataSample>(256)) {}
  145. ~EyeMapMatrix() {}
  146. Vec2DMap dataMatrix;
  147. std::mutex mutexEyeData;
  148. /* 初始化数据点 */
  149. void initEyeMapData(int width, int height);
  150. /* 拷贝数据到数组中 */
  151. void copyDataMatrix(Vec2D& data);
  152. /* 将Count数值与颜色对应 */
  153. void addColorBySample();
  154. };
  155. extern EyeMapMatrix g_eyeMapMatrix;
  156. #endif /* GLOBALINFO_H */