serialui.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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() << QThread::currentThreadId() << "SerialUi";
  48. QByteArray data;
  49. if(mSerialPort->getOpenStatus() == false)
  50. return data;
  51. emit sendWrite(sendData);
  52. QSignalSpy spy(mSerialPort, SIGNAL(sendReceiveData()));
  53. bool ret = spy.wait(500);
  54. if(ret == true)
  55. data = mSerialPort->serialRead();
  56. // emit sendWrite(sendStr);
  57. // //void sendReponse(QList<int> data);
  58. // QSignalSpy spy(mSerialWrite, SIGNAL(sendReponse()));
  59. // bool ret = spy.wait(800);
  60. // if(ret == true)
  61. // QList<int> data = mSerialWrite->readAll();
  62. return data;
  63. }
  64. void SerialUi::receivePortStatus(bool status)
  65. {
  66. emit portStatusChange(status);
  67. }
  68. void SerialUi::receiveData(QByteArray data)
  69. {
  70. QList<int> rawData;
  71. rawData.clear();
  72. for(int i=0; i<data.length();i++){
  73. uint8_t value =data.at(i);
  74. rawData.append(value);
  75. }
  76. emit receiveRawDataChange(rawData);
  77. QString s;
  78. s.clear();
  79. for(int i=0; i<data.length();i++){
  80. uint8_t value =data.at(i);
  81. if(value < 0x10){
  82. s += "0"+QString::number(data.at(i),16)+" ";
  83. }
  84. else{
  85. s += QString::number(value,16)+" ";
  86. }
  87. }
  88. s.remove(s.length()-1,1);
  89. emit receiveDataChange(s);
  90. }
  91. void SerialUi::receiveCrcError()
  92. {
  93. emit checkError();
  94. }
  95. void SerialUi::receiveTimeout()
  96. {
  97. emit timeout();
  98. }
  99. bool SerialUi::serialConnect(QString port, QString baudrate, QString databits, QString parity, QString stopbits)
  100. {
  101. // emit sendConnect( port, baudrate, databits, parity, stopbits);
  102. bool ret = mSerialPort->serialConnect(port, baudrate, databits, parity, stopbits);
  103. // qDebug()<<ret;
  104. return ret;
  105. }