#include "taserialthread.h"
#include <QDebug>
TA_SerialThread::TA_SerialThread()
{
    portCnt = 0;
    portNewCnt=0;
    m_arrSerial = new QSerialPort[10];
    m_arrNewSerial=new QSerialPortInfo[10];
}

TA_SerialThread::~TA_SerialThread()
{

}

void TA_SerialThread::run()
{

}

void TA_SerialThread::SearchPort(void) {
    portNewCnt=0;
    //查找可用的串口
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
        if(portNewCnt > 9) break;
        m_arrNewSerial[portNewCnt]=info;
        portNewCnt++;
    }

    for (int i=0;i<portNewCnt;i++) {
        bool iHaveFlag=false;
        for(int j=0;j<portCnt;j++)
        {
            if(m_arrSerial[j].portName()==m_arrNewSerial[i].portName())
            {
                iHaveFlag=true;
                break;
            }
        }
        if(!iHaveFlag) {
            m_arrSerial[portCnt].setPort(m_arrNewSerial[i]);
            portCnt++;
        }
    }
}

void TA_SerialThread::InitPortName(uint8_t portIndex,const QString &portName)
{
    if(portIndex < portCnt)
        m_arrSerial[portIndex].setPortName(portName);//const QString &name
    else
       qDebug()<<"OpenPort port index is out of range!";
}

void TA_SerialThread::InitPortBaudRate(uint8_t portIndex,qint32 baudRate)
{
    if(portIndex < portCnt)
        m_arrSerial[portIndex].setBaudRate(baudRate);//BaudRate baudRate
    else
       qDebug()<<"OpenPort port index is out of range!";
}

void TA_SerialThread::InitPortDataBits(uint8_t portIndex,QSerialPort::DataBits dataBits)
{
    if(portIndex < portCnt)
        m_arrSerial[portIndex].setDataBits(dataBits);//DataBits dataBits
    else
       qDebug()<<"OpenPort port index is out of range!";
}

void TA_SerialThread::InitPortParity(uint8_t portIndex,QSerialPort::Parity parity)
{
    if(portIndex < portCnt)
        m_arrSerial[portIndex].setParity(parity);//Parity parity
    else
       qDebug()<<"OpenPort port index is out of range!";
}

void TA_SerialThread::InitPortStopBits(uint8_t portIndex,QSerialPort::StopBits stopBits)
{
    if(portIndex < portCnt)
    {
        m_arrSerial[portIndex].setStopBits(stopBits);//StopBits stopBits
        m_arrSerial[portIndex].setFlowControl(QSerialPort::NoFlowControl);
    }
    else
       qDebug()<<"OpenPort port index is out of range!";
}

bool TA_SerialThread::OpenPort(uint8_t portIndex)
{
    bool result=false;
    if(portIndex < portCnt)
        result=m_arrSerial[portIndex].open(QIODevice::ReadWrite);
    else
        qDebug()<<"OpenPort port index is out of range!";
    return result;
}

void TA_SerialThread::ClosePort(uint8_t portIndex)
{
    if(portIndex < portCnt)
    {
        //关闭串口
        m_arrSerial[portIndex].clear();
        m_arrSerial[portIndex].close();
        //m_arrSerial[portIndex].deleteLater();
    }
    else
        qDebug()<<"OpenPort port index is out of range!";
}

void TA_SerialThread::SendDataBuf(uint8_t portIndex,const QByteArray &str)
{
    if(portIndex < portCnt)
    {
        m_arrSerial[portIndex].write(str);
        qDebug()<<str;
    }
    else
        qDebug()<<"SendDataBuf port index is out of range!";
}

QByteArray TA_SerialThread::GetDataBuf(uint8_t portIndex) {
    if(portIndex < portCnt) return m_arrSerial[portIndex].readAll();
    else {
        qDebug()<<"GetDataBuf port index is out of range!";
        return nullptr;
    }
}