123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #include "uart.h"
- #include "maindlg.h"
- #include "includes.h"
- Uart::Uart(QObject *parent)
- : QObject{parent}
- {
- m_pMainDlg = static_cast<MainDlg*>(parent);
- init();
- }
- Uart::~Uart(){
- if(m_pSerialPort != NULL){
- delete m_pSerialPort;
- m_pSerialPort = NULL;
- }
- }
- void Uart::init(){
- m_pSerialPort = new QSerialPort();
- connect(this, &Uart::SignalSendDataToMainDlg, m_pMainDlg, &MainDlg::slotReceiveDataFromUart);
- }
- quint8 Uart::GetUartNameList(QList<QString> *pstrUartNameList, quint8 *pbyLen){
- QList<QSerialPortInfo> uartList;
- quint8 byLen = 0;
- QString strUartName = "";
-
- uartList = QSerialPortInfo::availablePorts();
- byLen = uartList.size();
- if(byLen > 0){
- for(quint8 i = 0; i < byLen; i++){
- strUartName = uartList[i].portName();
- pstrUartNameList->append(strUartName);
- }
- }else{
- QMessageBox::information(m_pMainDlg, "提示", "本机暂无串口可用");
- return 0;
- }
- *pbyLen = byLen;
- return 1;
- }
- quint8 Uart::OpenUart(QString strUartName){
-
- m_pSerialPort->setBaudRate(QSerialPort::Baud115200);
- m_pSerialPort->setDataBits(QSerialPort::Data8);
- m_pSerialPort->setStopBits(QSerialPort::OneStop);
- m_pSerialPort->setParity(QSerialPort::NoParity);
- m_pSerialPort->setPortName(strUartName);
- m_pSerialPort->setReadBufferSize(1024);
-
- m_pSerialPort->open(QIODeviceBase::ReadWrite);
- if(m_pSerialPort->isOpen()){
-
- connect(m_pSerialPort, &QSerialPort::readyRead, this, &Uart::slotReceiveData);
- }else{
- QMessageBox::critical(m_pMainDlg, "提示", "打开串口失败");
- return 0;
- }
- return 1;
- }
- void Uart::CloseUart(){
- m_pSerialPort->close();
- }
- void Uart::slotReceiveData(){
- QByteArray dataList;
- quint16 wLen = 0;
- dataList = m_pSerialPort->readAll();
- wLen = dataList.size();
- if(wLen){
- emit SignalSendDataToMainDlg(dataList, wLen);
- }
- }
- qint64 Uart::SendData(QByteArray dataList) {
- quint16 wListLen = dataList.size();
- qint64 bytesSent = 0;
- bool result = false;
- if (m_pSerialPort->isOpen()) {
- for (quint8 i = 0; i < 3; i++) {
- bytesSent = m_pSerialPort->write(dataList);
- if ((bytesSent == wListLen) && (bytesSent != -1)) {
- result = m_pSerialPort->waitForBytesWritten(2000);
- if (result) {
- break;
- } else {
- bytesSent = -1;
- }
- } else {
- QThread::sleep(1);
- }
- }
- if(!result){
- QMessageBox::critical(m_pMainDlg, "提示", "发送数据到串口失败");
- bytesSent = -1;
- }
- } else {
- QMessageBox::information(m_pMainDlg, "提示", "请先打开串口");
- bytesSent = -1;
- }
- return bytesSent;
- }
|