File indexing completed on 2024-05-12 04:41:10
0001 /* AtCore KDE Libary for 3D Printers 0002 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0003 SPDX-FileCopyrightText: 2016-2018 Chris Rizzitello <rizzitello@kde.org> 0004 SPDX-FileCopyrightText: 2016 Tomaz Canabrava <tcanabrava@kde.org> 0005 SPDX-FileCopyrightText: 2016-2018 Patrick José Pereira <patrickjp@kde.org> 0006 SPDX-FileCopyrightText: 2017 Lays Rodrigues <lays.rodrigues@kde.org> 0007 */ 0008 0009 #include "grblplugin.h" 0010 #include <QLoggingCategory> 0011 #include <QRegularExpressionMatch> 0012 #include <QString> 0013 0014 Q_LOGGING_CATEGORY(GRBL_PLUGIN, "org.kde.atelier.core.firmware.grbl") 0015 0016 QString GrblPlugin::name() const 0017 { 0018 return QStringLiteral("Grbl"); 0019 } 0020 0021 GrblPlugin::GrblPlugin() 0022 { 0023 qCDebug(GRBL_PLUGIN) << GrblPlugin::name() << " plugin loaded!"; 0024 } 0025 0026 bool GrblPlugin::isSdSupported() const 0027 { 0028 return false; 0029 } 0030 0031 void GrblPlugin::validateCommand(const QString &lastMessage) 0032 { 0033 if (lastMessage.contains(QStringLiteral("ok"))) { 0034 Q_EMIT readyForCommand(); 0035 } 0036 } 0037 0038 QByteArray GrblPlugin::translate(const QString &command) 0039 { 0040 QString temp = command; 0041 // Match all G and M commands followed by one or more digits up to and include the space, 0042 // if thats followed by a letter capture any non G or M starting text 0043 // else just grab the digits that follow. 0044 // ex: G28 X Y M1 would capture "G28 X Y" and "M1" 0045 static const auto regEx = QRegularExpression(QStringLiteral("[GM]\\d+.(?(?=\\D)[^GM]+|\\d+)?")); 0046 0047 QRegularExpressionMatch secondCommand = regEx.match(temp, 1); 0048 0049 if (secondCommand.hasMatch()) { 0050 QRegularExpressionMatchIterator commandMatch = regEx.globalMatch(temp); 0051 temp.clear(); 0052 while (commandMatch.hasNext()) { 0053 QRegularExpressionMatch t = commandMatch.next(); 0054 temp.append(t.captured().simplified()); 0055 if (commandMatch.hasNext()) { 0056 temp.append(QStringLiteral("\r\n")); 0057 } 0058 } 0059 } 0060 return temp.toLocal8Bit(); 0061 }