2020-04-27 16:15:39 +12:00
|
|
|
#include "stopmotionserial.h"
|
|
|
|
#include "stopmotion.h"
|
|
|
|
#include <QSerialPort>
|
|
|
|
#include <QSerialPortInfo>
|
|
|
|
//=============================================================================
|
|
|
|
//=============================================================================
|
|
|
|
|
2020-04-27 16:19:06 +12:00
|
|
|
StopMotionSerial::StopMotionSerial() { m_serialPort = new QSerialPort(this); }
|
2020-04-27 16:15:39 +12:00
|
|
|
StopMotionSerial::~StopMotionSerial() {}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------
|
|
|
|
|
|
|
|
QStringList StopMotionSerial::getAvailableSerialPorts() {
|
2020-04-27 16:19:06 +12:00
|
|
|
QList<QSerialPortInfo> list = QSerialPortInfo::availablePorts();
|
|
|
|
QStringList ports;
|
|
|
|
ports.push_back(tr("No Device"));
|
|
|
|
int size = list.size();
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
std::string desc = list.at(i).description().toStdString();
|
|
|
|
std::string port = list.at(i).portName().toStdString();
|
|
|
|
std::string maker = list.at(i).manufacturer().toStdString();
|
|
|
|
ports.push_back(list.at(i).portName());
|
|
|
|
if (list.at(i).hasProductIdentifier()) {
|
|
|
|
std::string id =
|
|
|
|
QString::number(list.at(i).productIdentifier()).toStdString();
|
|
|
|
}
|
|
|
|
if (list.at(i).hasVendorIdentifier()) {
|
|
|
|
std::string id =
|
|
|
|
QString::number(list.at(i).vendorIdentifier()).toStdString();
|
2020-04-27 16:15:39 +12:00
|
|
|
}
|
2020-04-27 16:19:06 +12:00
|
|
|
}
|
|
|
|
return ports;
|
2020-04-27 16:15:39 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------
|
|
|
|
|
|
|
|
bool StopMotionSerial::setSerialPort(QString port) {
|
2020-04-27 16:19:06 +12:00
|
|
|
if (m_serialPort->isOpen()) m_serialPort->close();
|
|
|
|
QList<QSerialPortInfo> list = QSerialPortInfo::availablePorts();
|
|
|
|
QStringList ports;
|
|
|
|
bool success = false;
|
|
|
|
int size = list.size();
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
if (port == list.at(i).portName()) {
|
|
|
|
m_serialPort->setPort(list.at(i));
|
2020-04-27 16:15:39 +12:00
|
|
|
}
|
2020-04-27 16:19:06 +12:00
|
|
|
}
|
|
|
|
// m_serialPort->setBaudRate(9600);
|
|
|
|
bool connected = m_serialPort->open(QIODevice::ReadWrite);
|
|
|
|
if (connected) {
|
|
|
|
success = m_serialPort->setBaudRate(QSerialPort::Baud9600) &
|
|
|
|
m_serialPort->setParity(QSerialPort::NoParity) &
|
|
|
|
m_serialPort->setDataBits(QSerialPort::Data8) &
|
|
|
|
m_serialPort->setStopBits(QSerialPort::OneStop) &
|
|
|
|
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
|
|
|
|
std::string fNumber =
|
|
|
|
std::to_string(StopMotion::instance()->getXSheetFrameNumber());
|
|
|
|
char const* fNumberChar = fNumber.c_str();
|
|
|
|
m_serialPort->write(fNumberChar);
|
|
|
|
m_serialPort->waitForBytesWritten(10);
|
|
|
|
QByteArray DataReceive = m_serialPort->readLine();
|
|
|
|
while (m_serialPort->waitForReadyRead(30)) {
|
|
|
|
DataReceive += m_serialPort->readLine();
|
2020-04-27 16:15:39 +12:00
|
|
|
}
|
2020-04-27 16:19:06 +12:00
|
|
|
QByteArray response = DataReceive;
|
|
|
|
QString s(response);
|
|
|
|
std::string text = response.toStdString();
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
return success;
|
2020-04-27 16:15:39 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------
|
|
|
|
|
|
|
|
void StopMotionSerial::sendSerialData() {
|
2020-04-27 16:19:06 +12:00
|
|
|
if (m_serialPort->isOpen()) {
|
|
|
|
std::string fNumber =
|
|
|
|
std::to_string(StopMotion::instance()->getXSheetFrameNumber());
|
|
|
|
char const* fNumberChar = fNumber.c_str();
|
|
|
|
m_serialPort->write(fNumberChar);
|
|
|
|
m_serialPort->waitForBytesWritten(10);
|
|
|
|
QByteArray DataReceive = m_serialPort->readLine();
|
|
|
|
while (m_serialPort->waitForReadyRead(30)) {
|
|
|
|
DataReceive += m_serialPort->readLine();
|
2020-04-27 16:15:39 +12:00
|
|
|
}
|
2020-04-27 16:19:06 +12:00
|
|
|
QByteArray response = DataReceive;
|
|
|
|
QString s(response);
|
|
|
|
std::string text = response.toStdString();
|
|
|
|
}
|
2020-04-27 16:15:39 +12:00
|
|
|
|
2020-04-27 16:19:06 +12:00
|
|
|
// for not data sending is not implemented yet, just the frame number.
|
|
|
|
// These lines are here to be a reference for using column data as movement.
|
|
|
|
// TDoubleParam *param =
|
|
|
|
// TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getParam(TStageObject::T_X);
|
|
|
|
// double value =
|
|
|
|
// TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getParam(TStageObject::T_X,
|
|
|
|
// m_xSheetFrameNumber - 1);
|
|
|
|
// QString isCam =
|
|
|
|
// TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getId().isCamera()
|
|
|
|
// ? "yep" : "nope";
|
|
|
|
// std::string name =
|
|
|
|
// TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getName();
|
|
|
|
// TMeasure *measure =param->getMeasure();
|
|
|
|
// const TUnit *unit = measure->getCurrentUnit();
|
|
|
|
// double newValue = unit->convertTo(value);
|
2020-04-27 16:15:39 +12:00
|
|
|
}
|