serialui.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. 
  2. #include <QThread>
  3. #include <QtDebug>
  4. #include <QSignalSpy>
  5. #include <QMutexLocker>
  6. #include "serialui.h"
  7. SerialUi::SerialUi(QObject *parent) : QObject(parent)
  8. {
  9. static QThread* thread = new QThread;
  10. mSerialPort = new SerialPort();
  11. mSerialPort->moveToThread(thread);
  12. //connect(this,&SerialUi::sendConnect,mSerialPort,&SerialPort::receiveConnect);
  13. connect(this,&SerialUi::sendWrite,mSerialPort,&SerialPort::receiveWrite);
  14. connect(this,&SerialUi::sendOnlyWrite,mSerialPort,&SerialPort::receiveOnlyWrite);
  15. connect(this,&SerialUi::sendClose,mSerialPort,&SerialPort::reveiveClose);
  16. connect(this,&SerialUi::sendInit,mSerialPort,&SerialPort::receiveInit);
  17. connect(mSerialPort,&SerialPort::sendPortStatus,this,&SerialUi::receivePortStatus);
  18. connect(mSerialPort,&SerialPort::sendCrcError,this,&SerialUi::receiveCrcError);
  19. connect(mSerialPort,&SerialPort::sendTimeout,this,&SerialUi::receiveTimeout);
  20. thread->start();
  21. emit sendInit();
  22. }
  23. void SerialUi::serialWrite(QByteArray sendData)
  24. {
  25. //qDebug() << QThread::currentThreadId() << "SerialUi";
  26. if(mSerialPort->getOpenStatus() == true)
  27. emit sendWrite(sendData);
  28. // QString s;
  29. // s += QString::number(0x10,16)+" ";
  30. // s += QString::number(0x11,16)+" ";
  31. // s += QString::number(0x12,16)+" ";
  32. // qDebug()<<s;
  33. //QByteArray::toHex ()
  34. }
  35. void SerialUi::onlyWrite(QByteArray sendData)
  36. {
  37. emit sendOnlyWrite(sendData);
  38. }
  39. void SerialUi::closeConnect()
  40. {
  41. emit sendClose();
  42. //mSerialPort->closeConnect();
  43. }
  44. QByteArray SerialUi::serialWriteReponse(QByteArray sendData)
  45. {
  46. QMutexLocker locker(&mutex);
  47. //qDebug() << __TIME__;
  48. //qDebug("serialWriteReponse enter addr:0x%x ", sendData.at(0));
  49. QByteArray data;
  50. if(mSerialPort->getOpenStatus() == false)
  51. return data;
  52. emit sendWrite(sendData);
  53. QSignalSpy spy(mSerialPort, SIGNAL(sendReceiveData()));
  54. bool ret = spy.wait(500);
  55. if(ret == true)
  56. data = mSerialPort->serialRead();
  57. //qDebug() << __TIME__;
  58. //qDebug("serialWriteReponse leave data.size: %d ", data.size());
  59. return data;
  60. }
  61. void SerialUi::receivePortStatus(bool status)
  62. {
  63. emit portStatusChange(status);
  64. }
  65. void SerialUi::receiveData(QByteArray data)
  66. {
  67. QList<int> rawData;
  68. rawData.clear();
  69. for(int i=0; i<data.length();i++){
  70. uint8_t value =data.at(i);
  71. rawData.append(value);
  72. }
  73. emit receiveRawDataChange(rawData);
  74. QString s;
  75. s.clear();
  76. for(int i=0; i<data.length();i++){
  77. uint8_t value =data.at(i);
  78. if(value < 0x10){
  79. s += "0"+QString::number(data.at(i),16)+" ";
  80. }
  81. else{
  82. s += QString::number(value,16)+" ";
  83. }
  84. }
  85. s.remove(s.length()-1,1);
  86. emit receiveDataChange(s);
  87. }
  88. void SerialUi::receiveCrcError()
  89. {
  90. emit checkError();
  91. }
  92. void SerialUi::receiveTimeout()
  93. {
  94. emit timeout();
  95. }
  96. bool SerialUi::serialConnect(QString port, QString baudrate, QString databits, QString parity, QString stopbits)
  97. {
  98. // emit sendConnect( port, baudrate, databits, parity, stopbits);
  99. bool ret = mSerialPort->serialConnect(port, baudrate, databits, parity, stopbits);
  100. // qDebug()<<ret;
  101. return ret;
  102. }