logserialport.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "logserialport.h"
  2. #include <QCoreApplication>
  3. #include <QByteArray>
  4. #include <pqQtlib/utils/pqutilsfunc.h>
  5. #include <pqQtlib/utils/pqendian.h>
  6. #ifdef _MSC_VER
  7. #pragma execution_character_set("utf-8")
  8. #endif
  9. LogSerialPort::LogSerialPort()
  10. {
  11. buchang = 0;
  12. min = 0;
  13. max = 999;
  14. ret = QByteArray::fromHex("010300000006C5C8");
  15. }
  16. LogSerialPort::~LogSerialPort()
  17. {
  18. }
  19. float LogSerialPort::toFloat(const QByteArray & ray){
  20. char ch[4] = {0};
  21. ch[0] = ray.at(2);
  22. ch[1] = ray.at(3);
  23. ch[2] = ray.at(0);
  24. ch[3] = ray.at(1);
  25. float value = qFromLittleEndian<float>(reinterpret_cast<EndianPointType *>(&ch[0]));
  26. return value;
  27. }
  28. bool LogSerialPort::needSend()
  29. {
  30. return true;
  31. }
  32. QByteArray LogSerialPort::sendData()
  33. {
  34. return ret;
  35. }
  36. void LogSerialPort::handle(QByteArray & data)
  37. {
  38. doHandle(data);
  39. }
  40. void LogSerialPort::doHandle(const QByteArray & data)
  41. {
  42. if(data.at(1) != 0x03) return;
  43. int l = data.length() - 2;
  44. QByteArray td = data.right(2);
  45. int crcc = static_cast<uchar>(td.at(1));
  46. crcc = crcc << 8;
  47. crcc = crcc | static_cast<uchar>(td.at(0));
  48. int scrc = PQ::CRC(data, l);
  49. if(scrc != crcc) {
  50. qDebug()<< " RTC CRC erro : should be : " << scrc << " rev is : " << crcc << "\n"
  51. << "data is : " << data.toHex();
  52. return;
  53. }
  54. QByteArray dt;
  55. dt = data.mid(5,4);
  56. if(dt.isEmpty()) return;
  57. needReply = true;
  58. float v = toFloat(dt);
  59. double rv = v + buchang;
  60. if(rv > max){
  61. rv = max;
  62. }
  63. if(rv < min){
  64. rv = min;
  65. }
  66. GlobalInfo::this_()->currentWidght = rv;
  67. }