You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
4.3 KiB

6 years ago
#include "lattice_com_reign.h"
#include "ui_lattice_com_reign.h"
#include <QTime>
lattice_com_reign::lattice_com_reign(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::lattice_com_reign)
{
ui->setupUi(this);
log = "";
on_com_reflseh_clicked();
tmr.setInterval(100);
tmr.setSingleShot(false);
//tmr.setTimerType();
QObject::connect(&tmr, SIGNAL(timeout()), this, SLOT (com_data_received()));
//QObject::connect(&com, SIGNAL(readyRead()), this, SLOT (com_data_received()));
QWidget* widgets_unlocked[] = { ui->com_tx };
for (int i = 0; i < sizeof(widgets_unlocked)/sizeof(QWidget*); i++)
widgets_unlocked[i]->setEnabled(com.isOpen());
tmr.start(1);
}
lattice_com_reign::~lattice_com_reign()
{
delete ui;
}
void lattice_com_reign::on_com_reflseh_clicked()
{
com_list = QSerialPortInfo::availablePorts();
for (int i = 0; i < com_list.length(); i++) {
if (com_list.at(i).portName() == "ttyUSB0")
com_list.removeAt(i);
}
for (int i = 0; i < com_list.length(); i++)
ui->com_list->addItem(com_list.at(i).portName());
}
void lattice_com_reign::on_com_list_currentIndexChanged(int index)
{
ui->com_list->setToolTip(com_list.at(index).description());
}
void lattice_com_reign::on_connect_clicked()
{
QWidget* widgets_locked[] = { ui->com_list, ui->com_reflesh };
QWidget* widgets_unlocked[] = { ui->com_tx };
if (ui->connect->text() == "Connect") {
com.setPortName(com_list.at(ui->com_list->currentIndex()).portName());
if (com.open(QSerialPort::ReadWrite)) {
com.setParity(QSerialPort::NoParity);
com.setDataBits(QSerialPort::Data8);
com.setStopBits(QSerialPort::OneStop);
com.setFlowControl(QSerialPort::NoFlowControl);
com.setBaudRate(921600);
ui->connect->setText("Disconnect");
toLog ("COM " + com.portName() + " OPENED OK");
}
else
toLog ("COM " + com.portName() + " OPEN ERROR");
}
else {
com.close();
toLog ("COM " + com.portName() + " CLOSED");
ui->connect->setText("Connect");
}
for (int i = 0; i < sizeof(widgets_locked)/sizeof(QWidget*); i++)
widgets_locked[i]->setEnabled(!com.isOpen());
for (int i = 0; i < sizeof(widgets_unlocked)/sizeof(QWidget*); i++)
widgets_unlocked[i]->setEnabled(com.isOpen());
}
void lattice_com_reign::toLog(QString str)
{
log = QTime::currentTime().toString("HH:mm:ss") + "\t" + str + "\n" + log;
ui->log->setText("LOG\n\n" + log);
}
void lattice_com_reign::on_com_tx_clicked()
{
QByteArray a;
a.push_back(ui->byte_to_transmit->value());
com.write(a);
toLog ("BYTE " + QString::number(ui->byte_to_transmit->value(), 16) + " TX");
}
void lattice_com_reign::com_data_received()
{
ui->time->setText(QTime::currentTime().toString("HH:mm:ss"));
if (com.isOpen() == false)
return;
QByteArray bytes_read = com.readAll();
QString com_outs_now = "CTS ";/*
if (com.isRequestToSend()) com_outs_now = com_outs_now + "1, DTR ";
else com_outs_now = com_outs_now + "0, DTR ";
if (com.isDataTerminalReady()) com_outs_now = com_outs_now + "1";
else com_outs_now = com_outs_now + "0";*/
int pinout = com.pinoutSignals();
if (pinout & (QSerialPort::ClearToSendSignal)) com_outs_now = com_outs_now + "1, DSR ";
else com_outs_now = com_outs_now + "0, DSR ";
if (pinout & (QSerialPort::DataSetReadySignal)) com_outs_now = com_outs_now + "1, DCD ";
else com_outs_now = com_outs_now + "0, DCD ";
if (pinout & (QSerialPort::DataCarrierDetectSignal)) com_outs_now = com_outs_now + "1";
else com_outs_now = com_outs_now + "0";
if (com_outs_now != com_outs) {
com_outs = com_outs_now;
toLog(com_outs);
}
for (int i = 0; i < bytes_read.length(); i++)
toLog ("RECEIVED BYTE " + QString::number(((int)(bytes_read.at(i)) & 0xFF), 16) + ", PINOUT " + QString::number(pinout, 16));
}
void lattice_com_reign::on_clear_log_clicked()
{
log = "";
ui->log->setText("LOG\n\n" + log);
}