#include <base/x_uimsgboxok.h>
#include "mguangyingpinwidget.h"
#include "ui_mguangyingpinwidget.h"
#include <QDateTime>
#include "globaldefine.h"
mGuangYingPinWidget::mGuangYingPinWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::mGuangYingPinWidget)
{
    setAutoFillBackground(true);
    QPalette pal;
    pal.setBrush(QPalette::Window, QColor(0xeeeeee));
    setPalette(pal);

    ui->setupUi(this);
    ui->pushButton1->setProperty("ssType", "progManageTool");
    ui->pushButton2->setProperty("ssType", "progManageTool");
    ui->pushButton3->setProperty("ssType", "progManageTool");
    ui->pushButton4->setProperty("ssType", "progManageTool");
    ui->pushButton5->setProperty("ssType", "progManageTool");
    ui->pushButton6->setProperty("ssType", "progManageTool");
    ui->pushButton7->setProperty("ssType", "progManageTool");
    ui->pushButton8->setProperty("ssType", "progManageTool");
    ui->pushButton9->setProperty("ssType", "progManageTool");
    ui->pushButton10->setProperty("ssType", "progManageTool");
    ui->pushButton11->setProperty("ssType", "progManageTool");
    ui->pushButton12->setProperty("ssType", "progManageTool");
    ui->pushButton13->setProperty("ssType", "progManageTool");
    ui->pushButton14->setProperty("ssType", "progManageTool");
    ui->pushButton15->setProperty("ssType", "progManageTool");
    ui->pushButton16->setProperty("ssType", "progManageTool");
    ui->pushButton17->setProperty("ssType", "progManageTool");
    ui->pushButton18->setProperty("ssType", "progManageTool");
    ui->pushButton19->setProperty("ssType", "progManageTool");
    ui->pushButton20->setProperty("ssType", "progManageTool");

    ui->pushButtonSend->setProperty("ssType", "progManageTool");
    ui->pushButtonPrevious->setProperty("ssType", "progManageTool");
    ui->pushButtonPrevious->setIcon(QIcon(":/res/previous.png"));
    ui->pushButtonNext->setProperty("ssType", "progManageTool");
    ui->pushButtonNext->setIcon(QIcon(":/res/next.png"));
    ui->pushButtonLoop->setProperty("ssType", "progManageTool");
    ui->pushButtonLoop->setIcon(QIcon(":/res/loop.png"));
    ui->pushButtonMainOpen->setProperty("ssType", "progManageTool");
    ui->pushButtonAuxOpen->setProperty("ssType", "progManageTool");
    ui->pushButtonBrightnessSet->setProperty("ssType", "progManageTool");
    ui->pushButtonScreenOn->setProperty("ssType", "progManageTool");
    ui->pushButtonScreenOff->setProperty("ssType", "progManageTool");
    ui->pushButtonRefresh->setProperty("ssType", "progManageTool");
    ui->pushButtonClearLog->setProperty("ssType", "progManageTool");
    m_recvNum = 0;
    m_sendNum = 0;
    sPortThread = new TA_SerialThread;
    sPortThread->SearchPort();

    for(uint8_t i = 0;i < sPortThread->portCnt;i++)
    {
        ui->comboBox_SPortName->addItem(sPortThread->m_arrSerial[i].portName());
        ui->comboBox_SPortNameAux->addItem(sPortThread->m_arrSerial[i].portName());
    }

    //0:1200 1:2400 2:4800 3:9600 4:19200 5:38400 6:57600 7:115200
    if(ui->comboBox_SPortName->count()>=1)
    {
        ui->comboBox_SPortBaud->setCurrentIndex(3);
        //0:5 1:6 2:7 3:8
        ui->comboBox_SPortDataBit->setCurrentIndex(3);
        //0:no p 2:e p 3:o p 4:s p 5:m p
        ui->comboBox_SPortOEBit->setCurrentIndex(0);
        //0:1 1:2 2:1.5
        ui->comboBox_SPortStopBit->setCurrentIndex(0);

        ui->graphicsView_ComStatus->setStyleSheet("background-color: rgb(255, 0, 0);");
        ui->label_ComStatus->setText(tr("State:Off"));

        ui->comboBox_SPortBaudAux->setCurrentIndex(3);
        ui->comboBox_SPortDataBitAux->setCurrentIndex(3);
        ui->comboBox_SPortOEBitAux->setCurrentIndex(0);
        ui->comboBox_SPortStopBitAux->setCurrentIndex(0);
        ui->graphicsView_ComStatusAux->setStyleSheet("background-color: rgb(255, 0, 0);");
        ui->label_ComStatusAux->setText(tr("State:Off"));
        if(ui->comboBox_SPortName->count()>1)
        {
            ui->comboBox_SPortNameAux->setCurrentIndex(1);
        }
    }
    ui->lineEdit_ResendTimes->setValidator(new QIntValidator(1,1000,this));
    ui->lineEdit_DelayMill->setValidator(new QIntValidator(1,1000,this));


    connect(ui->pushButtonMainOpen, SIGNAL(clicked(bool)), this, SLOT(MWOnoffPort()));
    connect(ui->pushButtonAuxOpen, SIGNAL(clicked(bool)), this, SLOT(MWOnoffPortAux()));
    connect(ui->pushButton1, SIGNAL(clicked()), this, SLOT(OnAnsyProgram1()));
    connect(ui->pushButton2, SIGNAL(clicked()), this, SLOT(OnAnsyProgram2()));
    connect(ui->pushButton3, SIGNAL(clicked()), this, SLOT(OnAnsyProgram3()));
    connect(ui->pushButton4, SIGNAL(clicked()), this, SLOT(OnAnsyProgram4()));
    connect(ui->pushButton5, SIGNAL(clicked()), this, SLOT(OnAnsyProgram5()));
    connect(ui->pushButton6, SIGNAL(clicked()), this, SLOT(OnAnsyProgram6()));
    connect(ui->pushButton7, SIGNAL(clicked()), this, SLOT(OnAnsyProgram7()));
    connect(ui->pushButton8, SIGNAL(clicked()), this, SLOT(OnAnsyProgram8()));
    connect(ui->pushButton9, SIGNAL(clicked()), this, SLOT(OnAnsyProgram9()));
    connect(ui->pushButton10, SIGNAL(clicked()), this, SLOT(OnAnsyProgram10()));
    connect(ui->pushButton11, SIGNAL(clicked()), this, SLOT(OnAnsyProgram11()));
    connect(ui->pushButton12, SIGNAL(clicked()), this, SLOT(OnAnsyProgram12()));
    connect(ui->pushButton13, SIGNAL(clicked()), this, SLOT(OnAnsyProgram13()));
    connect(ui->pushButton14, SIGNAL(clicked()), this, SLOT(OnAnsyProgram14()));
    connect(ui->pushButton15, SIGNAL(clicked()), this, SLOT(OnAnsyProgram15()));
    connect(ui->pushButton16, SIGNAL(clicked()), this, SLOT(OnAnsyProgram16()));
    connect(ui->pushButton17, SIGNAL(clicked()), this, SLOT(OnAnsyProgram17()));
    connect(ui->pushButton18, SIGNAL(clicked()), this, SLOT(OnAnsyProgram18()));
    connect(ui->pushButton19, SIGNAL(clicked()), this, SLOT(OnAnsyProgram19()));
    connect(ui->pushButton20, SIGNAL(clicked()), this, SLOT(OnAnsyProgram20()));
    connect(ui->pushButtonClearLog, SIGNAL(clicked()), this, SLOT(OnClearLog()));
    connect(ui->pushButtonSend, SIGNAL(clicked()), this, SLOT(OnAnsyProgramCustom()));
    connect(ui->pushButtonNext, SIGNAL(clicked()), this, SLOT(OnAnsyProgramNext()));
    connect(ui->pushButtonPrevious, SIGNAL(clicked()), this, SLOT(OnAnsyProgramPrevious()));
    connect(ui->pushButtonLoop, SIGNAL(clicked()), this, SLOT(OnAnsyProgramLoop()));
    connect(ui->pushButtonBrightnessSet, SIGNAL(clicked()), this, SLOT(OnBrightnessSet()));
    connect(ui->pushButtonScreenOn, SIGNAL(clicked()), this, SLOT(OnScreenOn()));
    connect(ui->pushButtonScreenOff, SIGNAL(clicked()), this, SLOT(OnScreenOff()));
    connect(ui->spinBox_ProgramIndex, SIGNAL(valueChanged(int)), this, SLOT(OnAnsyProgramCustomByChanged(int)));
    connect(ui->spinBox_BrightnessValue, SIGNAL(valueChanged(int)), this, SLOT(OnBrightnessSetByChanged(int)));
    connect(ui->pushButtonRefresh, SIGNAL(clicked()), this, SLOT(OnRefresh()));
}

mGuangYingPinWidget::~mGuangYingPinWidget(){
    delete ui;
}

void mGuangYingPinWidget::changeEvent(QEvent *event) {
    QWidget::changeEvent(event);
    if(event->type() == QEvent::LanguageChange) transUi();
}
void mGuangYingPinWidget::transUi() {
    ui->pushButtonSend->setText(tr("Send"));
    ui->pushButtonMainOpen->setText(tr("Open"));
    ui->pushButtonAuxOpen->setText(tr("Open"));
    ui->pushButtonBrightnessSet->setText(tr("Set"));
    ui->pushButtonScreenOn->setText(tr("Screen On"));
    ui->pushButtonScreenOff->setText(tr("Screen Off"));
    ui->pushButtonRefresh->setText(tr("Refresh"));
    ui->groupBoxMain->setTitle(tr("Main"));
    ui->groupBoxAux->setTitle(tr("Auxiliary"));
    ui->groupBoxParam->setTitle(tr("Param configuration"));
    ui->label_PortName->setText(tr("PortName"));
    ui->label_BaudRate->setText(tr("BaudRate"));
    ui->label_DataBit->setText(tr("DataBit"));
    ui->label_OEBit->setText(tr("OEBit"));
    ui->label_StopBit->setText(tr("StopBit"));
    ui->label_PortNameAux->setText(tr("PortName"));
    ui->label_BaudRateAux->setText(tr("BaudRate"));
    ui->label_DataBitAux->setText(tr("DataBit"));
    ui->label_OEBitAux->setText(tr("OEBit"));
    ui->label_StopBitAux->setText(tr("StopBit"));

    ui->label_ResendTimes->setText(tr("Resend times"));
    ui->label_DelayMill->setText(tr("Delay millsecond"));
    ui->label_ProgramNum->setText(tr("Program number"));
    ui->label_BrightNess->setText(tr("Brightness"));
    ui->label_ComStatus->setText(tr("State:Off"));
    ui->label_ComStatusAux->setText(tr("State:Off"));
    ui->pushButtonClearLog->setText(tr("Clear"));
    ui->checkBoxDebug->setText(tr("Debug"));
    ui->groupBox_Network->setTitle(tr("Network"));
    ui->groupBox_com->setTitle(tr("Com"));
}

void mGuangYingPinWidget::OnAnsyProgram1(void)
{
    MACRO_ANSY_PROGRAM(1)
}
void mGuangYingPinWidget::OnAnsyProgram2(void)
{
    MACRO_ANSY_PROGRAM(2)

}void mGuangYingPinWidget::OnAnsyProgram3(void)
{
    MACRO_ANSY_PROGRAM(3)
}void mGuangYingPinWidget::OnAnsyProgram4(void)
{
    MACRO_ANSY_PROGRAM(4)
}void mGuangYingPinWidget::OnAnsyProgram5(void)
{
    MACRO_ANSY_PROGRAM(5)
}void mGuangYingPinWidget::OnAnsyProgram6(void)
{
    MACRO_ANSY_PROGRAM(6)
}void mGuangYingPinWidget::OnAnsyProgram7(void)
{
    MACRO_ANSY_PROGRAM(7)
}void mGuangYingPinWidget::OnAnsyProgram8(void)
{
    MACRO_ANSY_PROGRAM(8)
}void mGuangYingPinWidget::OnAnsyProgram9(void)
{
    MACRO_ANSY_PROGRAM(9)
}void mGuangYingPinWidget::OnAnsyProgram10(void)
{
    MACRO_ANSY_PROGRAM(10)
}void mGuangYingPinWidget::OnAnsyProgram11(void)
{
    MACRO_ANSY_PROGRAM(11)
}void mGuangYingPinWidget::OnAnsyProgram12(void)
{
    MACRO_ANSY_PROGRAM(12)
}void mGuangYingPinWidget::OnAnsyProgram13(void)
{
    MACRO_ANSY_PROGRAM(13)
}void mGuangYingPinWidget::OnAnsyProgram14(void)
{
    MACRO_ANSY_PROGRAM(14)
}void mGuangYingPinWidget::OnAnsyProgram15(void)
{
    MACRO_ANSY_PROGRAM(15)
}void mGuangYingPinWidget::OnAnsyProgram16(void)
{
    MACRO_ANSY_PROGRAM(16)
}void mGuangYingPinWidget::OnAnsyProgram17(void)
{
    MACRO_ANSY_PROGRAM(17)
}void mGuangYingPinWidget::OnAnsyProgram18(void)
{
    MACRO_ANSY_PROGRAM(18)
}void mGuangYingPinWidget::OnAnsyProgram19(void)
{
    MACRO_ANSY_PROGRAM(19)
}
void mGuangYingPinWidget::OnAnsyProgram20(void)
{
    MACRO_ANSY_PROGRAM(20)
}
void mGuangYingPinWidget::OnClearLog(void)
{
    ui->textEditReadBuf->clear();
}
void mGuangYingPinWidget::OnAnsyProgramCustom(void)
{
    int itemp=ui->spinBox_ProgramIndex->value();
    MACRO_ANSY_PROGRAM(itemp)

    if(ui->checkBoxDebug->isChecked())
    {
        ui->textEditReadBuf->append("OnAnsyProgramCustom");
    }
}
void mGuangYingPinWidget::OnAnsyProgramCustomByChanged(int icurIndex)
{
    MACRO_ANSY_PROGRAM(icurIndex)
}
void mGuangYingPinWidget::OnBrightnessSetByChanged(int icurValue)
{
    if(ui->pushButtonMainOpen->text()==tr("Close"))
        Set_Brightness_buf_and_send(ui->comboBox_SPortName->currentIndex(),icurValue);
    if(ui->pushButtonAuxOpen->text()==tr("Close"))
        Set_Brightness_buf_and_send(ui->comboBox_SPortNameAux->currentIndex(),icurValue);
 }

void mGuangYingPinWidget::OnAnsyProgramNext(void)
{
    ui->spinBox_ProgramIndex->setValue(ui->spinBox_ProgramIndex->value()+1);
    OnAnsyProgramCustom();
//    int itemp=ui->spinBox_ProgramIndex->value();
//     MACRO_ANSY_PROGRAM(itemp)
//      if(ui->pushButtonMainOpen->text()==tr("Close"))
//           NextProgram_buf_and_send(ui->comboBox_SPortName->currentIndex());
//      if(ui->pushButtonAuxOpen->text()==tr("Close"))
//           NextProgram_buf_and_send(ui->comboBox_SPortNameAux->currentIndex());

}
void mGuangYingPinWidget::OnAnsyProgramPrevious(void)
{
    ui->spinBox_ProgramIndex->setValue(ui->spinBox_ProgramIndex->value()-1);
    OnAnsyProgramCustom();
//    int itemp=ui->spinBox_ProgramIndex->value();
//     MACRO_ANSY_PROGRAM(itemp)
}
void mGuangYingPinWidget::OnAnsyProgramLoop(void)
{
     MACRO_ANSY_PROGRAM(0)
}
void mGuangYingPinWidget::OnBrightnessSet(void)
{
    if(ui->groupBox_com->isChecked())
    {
        if(ui->pushButtonMainOpen->text()==tr("Close"))
            Set_Brightness_buf_and_send(ui->comboBox_SPortName->currentIndex(),ui->spinBox_BrightnessValue->value());
        if(ui->pushButtonAuxOpen->text()==tr("Close"))
            Set_Brightness_buf_and_send(ui->comboBox_SPortNameAux->currentIndex(),ui->spinBox_BrightnessValue->value());
    }

    if(ui->groupBox_Network->isChecked())
    {
        Set_Brightness_buf_and_send_by_udp(ui->spinBox_BrightnessValue->value());
    }
}
void mGuangYingPinWidget::OnScreenOn(void)
{
    if(ui->groupBox_com->isChecked())
    {
        if(ui->pushButtonMainOpen->text()==tr("Close"))
            Screen_OnOff_buf_and_send(ui->comboBox_SPortName->currentIndex(),0x11);
        if(ui->pushButtonAuxOpen->text()==tr("Close"))
            Screen_OnOff_buf_and_send(ui->comboBox_SPortNameAux->currentIndex(),0x11);
    }
    if(ui->groupBox_Network->isChecked())
    {
        Screen_OnOff_buf_and_send_by_udp(0x11);
    }
}
void mGuangYingPinWidget::OnScreenOff(void)
{
    if(ui->groupBox_com->isChecked())
    {
        if(ui->pushButtonMainOpen->text()==tr("Close"))
            Screen_OnOff_buf_and_send(ui->comboBox_SPortName->currentIndex(),0x10);
        if(ui->pushButtonAuxOpen->text()==tr("Close"))
            Screen_OnOff_buf_and_send(ui->comboBox_SPortNameAux->currentIndex(),0x10);
    }
    if(ui->groupBox_Network->isChecked())
    {
        Screen_OnOff_buf_and_send_by_udp(0x10);

    }
}
void mGuangYingPinWidget::OnRefresh()
{
    bool resetAllComboxFlag=true;
    if(ui->comboBox_SPortName->count()>0)
        resetAllComboxFlag=false;
//    ui->comboBox_SPortName->clear();
//    ui->comboBox_SPortNameAux->clear();

    sPortThread->SearchPort();
//    for (int m=0;m<sPortThread->portCnt;m++) {

//    }


    for(uint8_t i = 0;i < sPortThread->portCnt;i++)
    {
        bool iHaveFlag=false;
        for(int j=0;j<ui->comboBox_SPortName->count();j++)
        {
            if(ui->comboBox_SPortName->itemText(j)==sPortThread->m_arrSerial[i].portName())
            {
                iHaveFlag=true;
                break;
            }
        }
        if(iHaveFlag==false)
        {
            ui->comboBox_SPortName->addItem(sPortThread->m_arrSerial[i].portName());
        }
        bool iHaveAuxFlag=false;
        for(int jj=0;jj<ui->comboBox_SPortNameAux->count();jj++)
        {
            if(ui->comboBox_SPortNameAux->itemText(jj)==sPortThread->m_arrSerial[i].portName())
            {
                iHaveAuxFlag=true;
                break;
            }
        }
        if(iHaveAuxFlag==false)
        {
            ui->comboBox_SPortNameAux->addItem(sPortThread->m_arrSerial[i].portName());
            if(ui->comboBox_SPortNameAux->count()>1&&ui->pushButtonAuxOpen->text()==tr("Open"))
            {
                ui->comboBox_SPortNameAux->setCurrentIndex(i);
            }

        }
//                    ui->comboBox_SPortName->addItem(sPortThread->m_arrSerial[i].portName());
//                    ui->comboBox_SPortNameAux->addItem(sPortThread->m_arrSerial[i].portName());
    }

    if(resetAllComboxFlag)
    {
        //0:1200 1:2400 2:4800 3:9600 4:19200 5:38400 6:57600 7:115200
        if(ui->comboBox_SPortName->count()>=1)
        {
            ui->comboBox_SPortBaud->setCurrentIndex(3);
            //0:5 1:6 2:7 3:8
            ui->comboBox_SPortDataBit->setCurrentIndex(3);
            //0:no p 2:e p 3:o p 4:s p 5:m p
            ui->comboBox_SPortOEBit->setCurrentIndex(0);
            //0:1 1:2 2:1.5
            ui->comboBox_SPortStopBit->setCurrentIndex(0);

            ui->graphicsView_ComStatus->setStyleSheet("background-color: rgb(255, 0, 0);");
            ui->label_ComStatus->setText(tr("State:Off"));

            ui->comboBox_SPortBaudAux->setCurrentIndex(3);
            ui->comboBox_SPortDataBitAux->setCurrentIndex(3);
            ui->comboBox_SPortOEBitAux->setCurrentIndex(0);
            ui->comboBox_SPortStopBitAux->setCurrentIndex(0);
            ui->graphicsView_ComStatusAux->setStyleSheet("background-color: rgb(255, 0, 0);");
            ui->label_ComStatusAux->setText(tr("State:Off"));
            if(ui->comboBox_SPortName->count()>1)
            {
                ui->comboBox_SPortNameAux->setCurrentIndex(1);
            }
        }

    }

}
void mGuangYingPinWidget::MWOnoffPort(void)
{
    uint8_t comIndex = ui->comboBox_SPortName->currentIndex();

    if(ui->pushButtonMainOpen->text()==tr("Open"))
    {
        sPortThread->InitPortName(comIndex,ui->comboBox_SPortName->currentText());
        sPortThread->InitPortBaudRate(comIndex,ui->comboBox_SPortBaud->currentText().toInt());

        //qDebug()<<ui->comboBox_SPortDataBit->currentIndex();
        switch(ui->comboBox_SPortDataBit->currentIndex())
        {
            case 0: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data5); break;//0:5
            case 1: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data6); break;//1:6
            case 2: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data7); break;//2:7
            case 3: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data8); break;//3:8
            default: break;
        }

        switch(ui->comboBox_SPortStopBit->currentIndex())
        {
            case 0:sPortThread->InitPortStopBits(comIndex,QSerialPort::OneStop);break;
            case 1:sPortThread->InitPortStopBits(comIndex,QSerialPort::TwoStop);break;
            case 2:sPortThread->InitPortStopBits(comIndex,QSerialPort::OneAndHalfStop);break;
            default: break;
        }

        switch(ui->comboBox_SPortOEBit->currentIndex())
        {
            case 0:sPortThread->InitPortParity(comIndex,QSerialPort::NoParity);break;
            case 1:sPortThread->InitPortParity(comIndex,QSerialPort::EvenParity);break;
            case 2:sPortThread->InitPortParity(comIndex,QSerialPort::OddParity);break;
            case 3:sPortThread->InitPortParity(comIndex,QSerialPort::SpaceParity);break;
            case 4:sPortThread->InitPortParity(comIndex,QSerialPort::MarkParity);break;
            default: break;
        }
        if(sPortThread->OpenPort(comIndex))
        {
            connect(&(sPortThread->m_arrSerial[comIndex]), SIGNAL(readyRead()), this, SLOT(MWReadData()));

            //参数设置禁止
            ui->comboBox_SPortName->setEnabled(false);
            ui->comboBox_SPortBaud->setEnabled(false);
            ui->comboBox_SPortDataBit->setEnabled(false);
            ui->comboBox_SPortOEBit->setEnabled(false);
            ui->comboBox_SPortStopBit->setEnabled(false);
            ui->pushButtonMainOpen->setText(tr("Close"));
            //发送设置使能
            ui->graphicsView_ComStatus->setStyleSheet("background-color: rgb(0, 255, 0);");
            ui->label_ComStatus->setText(tr("State:On"));
        }
        else {
            X_UIMsgBoxOk *pDlg=new X_UIMsgBoxOk(tr("Tip"),tr("OpenPort COM failed"),this,1);
            pDlg->exec();
        }


    }
    else
    {
        sPortThread->ClosePort(comIndex);
        //参数设置使能
        ui->comboBox_SPortName->setEnabled(true);
        ui->comboBox_SPortBaud->setEnabled(true);
        ui->comboBox_SPortDataBit->setEnabled(true);
        ui->comboBox_SPortOEBit->setEnabled(true);
        ui->comboBox_SPortStopBit->setEnabled(true);
        ui->pushButtonMainOpen->setText(tr("Open"));
        //发送设置禁止
        ui->graphicsView_ComStatus->setStyleSheet("background-color: rgb(255, 0, 0);");
        ui->label_ComStatus->setText(tr("State:Off"));
    }
}
void mGuangYingPinWidget::MWOnoffPortAux(void)
{
    uint8_t comIndex = ui->comboBox_SPortNameAux->currentIndex();

    if(ui->pushButtonAuxOpen->text()==tr("Open"))
    {
        sPortThread->InitPortName(comIndex,ui->comboBox_SPortNameAux->currentText());
        sPortThread->InitPortBaudRate(comIndex,ui->comboBox_SPortBaudAux->currentText().toInt());

        //qDebug()<<ui->comboBox_SPortDataBit->currentIndex();
        switch(ui->comboBox_SPortDataBitAux->currentIndex())
        {
            case 0: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data5); break;//0:5
            case 1: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data6); break;//1:6
            case 2: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data7); break;//2:7
            case 3: sPortThread->InitPortDataBits(comIndex,QSerialPort::Data8); break;//3:8
            default: break;
        }

        switch(ui->comboBox_SPortStopBitAux->currentIndex())
        {
            case 0:sPortThread->InitPortStopBits(comIndex,QSerialPort::OneStop);break;
            case 1:sPortThread->InitPortStopBits(comIndex,QSerialPort::TwoStop);break;
            case 2:sPortThread->InitPortStopBits(comIndex,QSerialPort::OneAndHalfStop);break;
            default: break;
        }

        switch(ui->comboBox_SPortOEBitAux->currentIndex())
        {
            case 0:sPortThread->InitPortParity(comIndex,QSerialPort::NoParity);break;
            case 1:sPortThread->InitPortParity(comIndex,QSerialPort::EvenParity);break;
            case 2:sPortThread->InitPortParity(comIndex,QSerialPort::OddParity);break;
            case 3:sPortThread->InitPortParity(comIndex,QSerialPort::SpaceParity);break;
            case 4:sPortThread->InitPortParity(comIndex,QSerialPort::MarkParity);break;
            default: break;
        }
        if(sPortThread->OpenPort(comIndex))
        {
            connect(&(sPortThread->m_arrSerial[comIndex]), SIGNAL(readyRead()), this, SLOT(MWReadDataAux()));

            //参数设置禁止
            ui->comboBox_SPortNameAux->setEnabled(false);
            ui->comboBox_SPortBaudAux->setEnabled(false);
            ui->comboBox_SPortDataBitAux->setEnabled(false);
            ui->comboBox_SPortOEBitAux->setEnabled(false);
            ui->comboBox_SPortStopBitAux->setEnabled(false);
            ui->pushButtonAuxOpen->setText(tr("Close"));
            //发送设置使能
            ui->graphicsView_ComStatusAux->setStyleSheet("background-color: rgb(0, 255, 0);");
            ui->label_ComStatusAux->setText(tr("State:On"));

        }
        else {
            X_UIMsgBoxOk *pDlg=new X_UIMsgBoxOk(tr("Tip"),tr("OpenPort COM failed"),this,1);
            pDlg->exec();

        }

    }
    else
    {
        sPortThread->ClosePort(comIndex);
        //参数设置使能
        ui->comboBox_SPortNameAux->setEnabled(true);
        ui->comboBox_SPortBaudAux->setEnabled(true);
        ui->comboBox_SPortDataBitAux->setEnabled(true);
        ui->comboBox_SPortOEBitAux->setEnabled(true);
        ui->comboBox_SPortStopBitAux->setEnabled(true);
        ui->pushButtonAuxOpen->setText(tr("Open"));
        //发送设置禁止
        ui->graphicsView_ComStatusAux->setStyleSheet("background-color: rgb(255, 0, 0);");
        ui->label_ComStatusAux->setText(tr("State:Off"));
    }
}
void mGuangYingPinWidget::Set_program_buf_and_send(int iComIndex,int iProgramIndex)
{
    unsigned char uctemp[3]={0};
    uctemp[0]=0x30+iProgramIndex;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    unsigned short iDelayTimes=m_uiResendTimes*m_uimillisecond;
    qint64  dwStart;
    qint64  dwStop;
    dwStart = QDateTime::currentMSecsSinceEpoch();
    dwStop=dwStart;
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
        int itiaozheng=dwStop-dwStart-m_uimillisecond;//时间发送间隔和参数发送间隔的差异
        if(itiaozheng<0)
            itiaozheng=0;
        unsigned short itemp=(iDelayTimes-i*m_uimillisecond)-itiaozheng;//补充差异,比如实际用了110毫秒,参数100毫秒,则发送过去的协议数据应该是让控制卡减少延时,所以在延时值上再减去补差
        if(itemp<0)
            itemp=0;
        dwStart=dwStop;
        memcpy(&uctemp[1],(unsigned char *)&itemp,2*sizeof(unsigned char));
            MWSendCmd(iComIndex,0x42,uctemp,3,g_iCountCmd);


        int itempDelay=0;
        if(itiaozheng>0)
            itempDelay=m_uimillisecond-itiaozheng;
        else
            itempDelay=m_uimillisecond;
        mymidelay(itempDelay);
        dwStop = QDateTime::currentMSecsSinceEpoch();
        if(ui->checkBoxDebug->isChecked())
        {
             ui->textEditReadBuf->append("dwStart="+QString::number(dwStart)+",dwStop="+QString::number(dwStop)+",dwStop-dwStart="+QString::number(dwStop-dwStart)+",Delay="+QString::number(itempDelay)+",buf delay value="+QString::number(itemp)+"\r\n");
        }
    }
    g_iCountCmd++;

}
void mGuangYingPinWidget::Set_program_buf_and_send_by_udp(int iProgramIndex)
{
    unsigned char uctemp[3]={0};
    uctemp[0]=0x30+iProgramIndex;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    unsigned short iDelayTimes=m_uiResendTimes*m_uimillisecond;
    qint64 dwStart;
    qint64 dwStop;
    dwStart = QDateTime::currentMSecsSinceEpoch();
    dwStop=dwStart;
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
        int itiaozheng=dwStop-dwStart-m_uimillisecond;//时间发送间隔和参数发送间隔的差异
        if(itiaozheng<0)
            itiaozheng=0;
        unsigned short itemp=(iDelayTimes-i*m_uimillisecond)-itiaozheng;//补充差异,比如实际用了110毫秒,参数100毫秒,则发送过去的协议数据应该是让控制卡减少延时,所以在延时值上再减去补差
        if(itemp<0)
            itemp=0;
        dwStart=dwStop;
        memcpy(&uctemp[1],(unsigned char *)&itemp,2*sizeof(unsigned char));
            MWSendCmdByUdp(0x42,uctemp,3,g_iCountCmd);


        int itempDelay=0;
        if(itiaozheng>0)
            itempDelay=m_uimillisecond-itiaozheng;
        else
            itempDelay=m_uimillisecond;
        mymidelay(itempDelay);
        dwStop = QDateTime::currentMSecsSinceEpoch();
        if(ui->checkBoxDebug->isChecked())
        {
             ui->textEditReadBuf->append("dwStart="+QString::number(dwStart)+",dwStop="+QString::number(dwStop)+",dwStop-dwStart="+QString::number(dwStop-dwStart)+",Delay="+QString::number(itempDelay)+",buf delay value="+QString::number(itemp)+"\r\n");
        }
    }
    g_iCountCmd++;

}
void mGuangYingPinWidget::Set_Brightness_buf_and_send(int iComIndex,int iBrightnessValue)
{
    unsigned char uctemp[2]={0};
    uctemp[0]=0xF1;
    uctemp[1]=iBrightnessValue;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
        MWSendCmd(iComIndex,0x42,uctemp,2,g_iCountCmd);
        if(ui->checkBoxDebug->isChecked())
        {
             ui->textEditReadBuf->append("SetBrightNess="+QString::number(iBrightnessValue));
        }
        mymidelay(m_uimillisecond);
    }
}
void mGuangYingPinWidget::Set_Brightness_buf_and_send_by_udp(int iBrightnessValue)
{
    unsigned char uctemp[2]={0};
    uctemp[0]=0xF1;
    uctemp[1]=iBrightnessValue;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
        MWSendCmdByUdp(0x42,uctemp,2,g_iCountCmd);
        if(ui->checkBoxDebug->isChecked())
        {
             ui->textEditReadBuf->append("SetBrightNess="+QString::number(iBrightnessValue));
        }
        mymidelay(m_uimillisecond);
    }
}
void mGuangYingPinWidget::Screen_OnOff_buf_and_send(int iComIndex,int iScreenOnOff)
{
    unsigned char uctemp[3]={0};
    uctemp[0]=iScreenOnOff;
    uctemp[1]=0;
    uctemp[2]=0;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
        MWSendCmd(iComIndex,0x42,uctemp,3,g_iCountCmd);
        if(ui->checkBoxDebug->isChecked())
        {
            if(iScreenOnOff==0x11)
                ui->textEditReadBuf->append("Screen On");
            else
                ui->textEditReadBuf->append("Screen Off");
        }
        mymidelay(m_uimillisecond);
    }
}
void mGuangYingPinWidget::Screen_OnOff_buf_and_send_by_udp(int iScreenOnOff)
{
    unsigned char uctemp[3]={0};
    uctemp[0]=iScreenOnOff;
    uctemp[1]=0;
    uctemp[2]=0;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
       MWSendCmdByUdp(0x42,uctemp,3,g_iCountCmd);
        if(ui->checkBoxDebug->isChecked())
        {
            if(iScreenOnOff==0x11)
                ui->textEditReadBuf->append("Screen On");
            else
                ui->textEditReadBuf->append("Screen Off");
        }
        mymidelay(m_uimillisecond);
    }
}
void mGuangYingPinWidget::NextProgram_buf_and_send(int iComIndex)
{
    unsigned char uctemp[1]={0};
    uctemp[0]=0xF3;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
        MWSendCmd(iComIndex,0x42,uctemp,1,g_iCountCmd);
        if(ui->checkBoxDebug->isChecked())
        {
                ui->textEditReadBuf->append("Next Program");
        }
        mymidelay(m_uimillisecond);
    }
}
void mGuangYingPinWidget::NextProgram_buf_and_send_by_udp()
{
    unsigned char uctemp[1]={0};
    uctemp[0]=0xF3;
    int m_uiResendTimes=ui->lineEdit_ResendTimes->text().toInt();
    int m_uimillisecond=ui->lineEdit_DelayMill->text().toInt();
    for(int i=0;i<(int)m_uiResendTimes;i++)
    {
        MWSendCmdByUdp(0x42,uctemp,1,g_iCountCmd);
        if(ui->checkBoxDebug->isChecked())
        {
                ui->textEditReadBuf->append("Next Program");
        }
        mymidelay(m_uimillisecond);
    }
}
void mGuangYingPinWidget::mymidelay(int imlsec)
{
    qint64 dwStart, dwStop;
    dwStart = QDateTime::currentMSecsSinceEpoch();
    do{
        dwStop = QDateTime::currentMSecsSinceEpoch();
    } while(dwStop-imlsec<dwStart);
}

void mGuangYingPinWidget::MWSendCmdByUdp(unsigned char cmd,unsigned char *pUcValue,unsigned int iLength,int iCountCmd)
{
    ST_ANSY_PROGRAM_PACKET tempStreadPakcet;
    tempStreadPakcet.SyncHead[0]=0x7e;
    tempStreadPakcet.SyncHead[1]=0x7e;
    tempStreadPakcet.SyncHead[2]=0x55;
    tempStreadPakcet.ucCommType=cmd;
    tempStreadPakcet.iBaoLiu=iCountCmd;
    tempStreadPakcet.iLength=iLength;
    memcpy(tempStreadPakcet.pDataBuffer,pUcValue,iLength);
    tempStreadPakcet.pDataBuffer[tempStreadPakcet.iLength]=GetCheckCodeIn8(&tempStreadPakcet.ucCommType,tempStreadPakcet.iLength+sizeof(tempStreadPakcet.iBaoLiu)+sizeof(tempStreadPakcet.ucCommType)+sizeof(tempStreadPakcet.iLength));
    int iLenPacket=3*sizeof(unsigned char)+sizeof(char)+sizeof(int)+sizeof(int)+tempStreadPakcet.iLength+sizeof(char);/////除正文外的协议结构大小;
    QByteArray databuf = QByteArray(reinterpret_cast<char*>(&tempStreadPakcet), iLenPacket);
    //sPortThread->SendDataBuf(iComIndex,databuf);


    QList<QNetworkInterface> networkinterfaces = QNetworkInterface::allInterfaces();
    foreach (QNetworkInterface interfaces, networkinterfaces) //networkinterfaces负责提供主机的IP地址和网络接口的列表
    {
        foreach (QNetworkAddressEntry entry, interfaces.addressEntries())//QNetworkAddressEntry存储了一个IP地址,子网掩码和广播地址
        {
            QHostAddress broadcastAddress("255.255.255.255");
            entry.setBroadcast(QHostAddress::Broadcast);
            QUdpSocket *tempUdpSocket= new QUdpSocket(this);
            if(!tempUdpSocket->bind(entry.ip()))
                break;
            int iSendLength=tempUdpSocket->writeDatagram((char *)&tempStreadPakcet,iLenPacket,broadcastAddress,31296);
            if(iSendLength != iLenPacket) {
                char *aa=reinterpret_cast<char*>(&tempStreadPakcet);
                tempUdpSocket->writeDatagram(&aa[iSendLength],iLenPacket-iSendLength,broadcastAddress,31296);
            }
            delete tempUdpSocket;
        }
    }
    if(ui->checkBoxDebug->isChecked()) {
        ui->textEditReadBuf->append("udp:"+tr(databuf.toHex()));
    }
}
void mGuangYingPinWidget::MWSendCmd(uint8_t iComIndex,unsigned char cmd,unsigned char *pUcValue,unsigned int iLength,int iCountCmd)
{
    ST_ANSY_PROGRAM_PACKET tempStreadPakcet;
    tempStreadPakcet.SyncHead[0]=0x7e;
    tempStreadPakcet.SyncHead[1]=0x7e;
    tempStreadPakcet.SyncHead[2]=0x55;
    tempStreadPakcet.ucCommType=cmd;
    tempStreadPakcet.iBaoLiu=iCountCmd;
    tempStreadPakcet.iLength=iLength;
    memcpy(tempStreadPakcet.pDataBuffer,pUcValue,iLength);
    tempStreadPakcet.pDataBuffer[tempStreadPakcet.iLength]=GetCheckCodeIn8(&tempStreadPakcet.ucCommType,tempStreadPakcet.iLength+sizeof(tempStreadPakcet.iBaoLiu)+sizeof(tempStreadPakcet.ucCommType)+sizeof(tempStreadPakcet.iLength));
    int iLenPacket=3*sizeof(unsigned char)+sizeof(char)+sizeof(int)+sizeof(int)+tempStreadPakcet.iLength+sizeof(char);/////除正文外的协议结构大小;
    QByteArray databuf = QByteArray(reinterpret_cast<char*>(&tempStreadPakcet), iLenPacket);
    sPortThread->SendDataBuf(iComIndex,databuf);
    if(ui->checkBoxDebug->isChecked())
    {
         ui->textEditReadBuf->append("com:"+tr(databuf.toHex()));
    }
//sPortThread->SendDataBuf(ui->comboBox_SPortName->currentIndex(),ui->textEdit->toPlainText().toLatin1());
//   m_sendNum +=  (ui->textEdit->toPlainText().toLatin1()).length();
//   MWRSNumDisplay();
}

void mGuangYingPinWidget::MWReadData(void)
{
    QByteArray buf;
    buf = sPortThread->GetDataBuf(ui->comboBox_SPortName->currentIndex());
    if(!buf.isEmpty())
    {
        QString str = tr(buf.toHex());
        if(ui->checkBoxDebug->isChecked())
        {
            ui->textEditReadBuf->moveCursor(QTextCursor::End);
               ui->textEditReadBuf->insertPlainText(str);
        }
        MWRSNumDisplay();
    }
    buf.clear();
}
void mGuangYingPinWidget::MWReadDataAux(void)
{
    QByteArray buf;
    buf = sPortThread->GetDataBuf(ui->comboBox_SPortNameAux->currentIndex());
    if(!buf.isEmpty())
    {
        QString str = tr(buf.toHex());
        if(ui->checkBoxDebug->isChecked())
        {
            ui->textEditReadBuf->moveCursor(QTextCursor::End);
               ui->textEditReadBuf->insertPlainText(str);
        }
        MWRSNumDisplay();
    }
    buf.clear();
}
QString mGuangYingPinWidget::ByteArrayToHexString(QByteArray &ba)
{
    QDataStream out(&ba,QIODevice::ReadWrite);   //将str的数据 读到out里面去
    QString buf;
    while(!out.atEnd())
    {
        qint8 outChar = 0;
        out >> outChar;   //每次一个字节的填充到 outchar
        QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0')).toUpper() + QString(" ");   //2 字符宽度
        buf += str;
    }
    return buf;
}
void mGuangYingPinWidget::MWClearRecv(void)
{
//    ui->textBrowser->clear();
//    m_recvNum = 0;
//    m_sendNum = 0;
//    MWRSNumDisplay();
}

void mGuangYingPinWidget::MWRSNumDisplay(void)
{
//    ui->label_RecvNum->setText(tr("已接收:") + QString::number(m_recvNum,10));
//    ui->label_SendNum->setText(tr("已发送:") + QString::number(m_sendNum,10));
}