assictscalet2000.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "assictscalet2000.h"
  2. #include <QList>
  3. #include "globalinfo.h"
  4. AssicTScaleT2000::AssicTScaleT2000()
  5. {
  6. }
  7. AssicTScaleT2000::~AssicTScaleT2000()
  8. {
  9. }
  10. bool AssicTScaleT2000::needSend()
  11. {
  12. return false;
  13. }
  14. QByteArray AssicTScaleT2000::sendData()
  15. {
  16. return QByteArray();
  17. }
  18. void AssicTScaleT2000::handle(QByteArray &data)
  19. {
  20. int newstart = 0;
  21. int scan = m_inbuffer.size();
  22. m_inbuffer.append(data);
  23. while (newstart < m_inbuffer.size()) {
  24. int start = newstart;
  25. int end = m_inbuffer.indexOf('\n', scan);
  26. if (end < 0) {
  27. m_inbuffer.remove(0, start);
  28. return;
  29. }
  30. newstart = end + 1;
  31. scan = newstart;
  32. if (end == start)
  33. continue;
  34. if (m_inbuffer.at(end - 1) == '\r') {
  35. --end;
  36. if (end == start)
  37. continue;
  38. }
  39. QByteArray line(m_inbuffer.constData() + start, end - start);
  40. readData(line);
  41. }
  42. m_inbuffer.clear();
  43. }
  44. void AssicTScaleT2000::readData(QByteArray & data)
  45. {
  46. QList<QByteArray> list = data.split(',');
  47. auto buff = list.last();
  48. const char * from = buff.constData();
  49. const char *to = from + buff.size();
  50. const char *inner;
  51. // Token is a sequence of numbers.
  52. for (inner = from; inner != to; ++inner)
  53. if (*inner != '.' && (*inner < '0' || *inner > '9'))
  54. break;
  55. if (from != inner) {
  56. double token = QByteArray(from, inner - from).toDouble();
  57. scaledata _scaledata;
  58. _scaledata.gross_widget = token;
  59. GlobalInfo::this_()->SetScaleData(_scaledata);
  60. }
  61. }