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 }