Save test files.
This commit is contained in:
		
							
								
								
									
										130
									
								
								master/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								master/main.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,130 @@ | ||||
| #include <QCoreApplication> | ||||
| #include <QApplication> | ||||
| #include <QDebug> | ||||
| #include <QTimer> | ||||
| #include <QFileInfo> | ||||
|  | ||||
| #ifdef __linux__ | ||||
| #include <stdlib.h> // system() | ||||
| #include <unistd.h> | ||||
| #endif | ||||
|  | ||||
| #include "message_handler.h" | ||||
| #include "plugins/interfaces.h" | ||||
|  | ||||
| #include <memory> | ||||
| #include <QSharedMemory> | ||||
| #include <QRunnable> | ||||
| #include <QThreadPool> | ||||
| #include <QDir> | ||||
| #include <QProcess> | ||||
| #include <QCommandLineParser> | ||||
| #include <QStandardPaths> | ||||
| #include <QMainWindow> | ||||
|  | ||||
| #include <QThread> | ||||
| #include <QtWidgets> | ||||
| #include <QScopedPointer> | ||||
|  | ||||
| #ifdef PTU5 | ||||
| #define SERIAL_PORT "ttymxc2" | ||||
| #else | ||||
| #define SERIAL_PORT "ttyUSB0" | ||||
| #endif | ||||
|  | ||||
|  | ||||
| QPluginLoader pluginLoader; | ||||
|  | ||||
| static hwinf *loadDCPlugin(QDir const &plugInDir, QString const &fname) { | ||||
|     hwinf *hw = nullptr; | ||||
|     if (plugInDir.exists()) { | ||||
|         QString pluginLibName(fname); | ||||
|         pluginLibName = plugInDir.absoluteFilePath(pluginLibName); | ||||
|         QFileInfo info(pluginLibName); | ||||
|         if (info.exists()) { | ||||
|             pluginLibName = plugInDir.absoluteFilePath(pluginLibName); | ||||
|             pluginLoader.setFileName(pluginLibName); | ||||
|             // static QPluginLoader pluginLoader(pluginLibName); | ||||
|             if (!pluginLoader.load()) { | ||||
|                 qCritical() << "in directory" << plugInDir.absolutePath(); | ||||
|                 qCritical() << "cannot load plugin" << pluginLoader.fileName(); | ||||
|                 qCritical() << pluginLoader.errorString(); | ||||
|                 exit(-1); | ||||
|             } | ||||
|             if (!pluginLoader.isLoaded()) { | ||||
|                 qCritical() << pluginLoader.errorString(); | ||||
|                 exit(-2); | ||||
|             } | ||||
|             QObject *plugin = pluginLoader.instance(); | ||||
|             if (!plugin) { | ||||
|                 qCritical() << "cannot start instance"; | ||||
|                 exit(-3); | ||||
|             } | ||||
|             if (! (hw = qobject_cast<hwinf *>(plugin))) { | ||||
|                 qCritical() << "cannot cast plugin" << plugin << "to hwinf"; | ||||
|                 exit(-4); | ||||
|             } | ||||
|         } else { | ||||
|             qCritical() << pluginLibName << "does not exist"; | ||||
|             exit(-5); | ||||
|         } | ||||
|     } else { | ||||
|         qCritical() << "plugins directory" << plugInDir.absolutePath() | ||||
|                     << "does not exist"; | ||||
|         exit(-6); | ||||
|     } | ||||
|     return hw; | ||||
| } | ||||
|  | ||||
| int main(int argc, char *argv[]) { | ||||
|  | ||||
|     QByteArray const value = qgetenv("LC_ALL"); | ||||
|     if (value != "C") { | ||||
|         qputenv("LC_ALL", "C"); | ||||
|     } | ||||
|  | ||||
|     openlog("DC-LIB-MASTER", LOG_PERROR | LOG_PID | LOG_CONS, LOG_USER); | ||||
|  | ||||
|     QApplication a(argc, argv); | ||||
|     QApplication::setApplicationName("dc-lib-master"); | ||||
|     QApplication::setApplicationVersion(APP_VERSION); | ||||
|  | ||||
|     if (!messageHandlerInstalled()) { // change internal qt-QDebug-handling | ||||
|         atbInstallMessageHandler(atbDebugOutput); | ||||
|         setDebugLevel(LOG_NOTICE); | ||||
|     } | ||||
|  | ||||
|     QCommandLineParser parser; | ||||
|     parser.setApplicationDescription("Master for loading dc-library."); | ||||
|     parser.addHelpOption(); | ||||
|     parser.addVersionOption(); | ||||
|  | ||||
|     QCommandLineOption pluginDirectoryOption(QStringList() << "plugin-directory" << "plugin-directory", | ||||
|         QCoreApplication::translate("main", "Where to find dc-plugin."), | ||||
|         QCoreApplication::translate("main", "directory")); | ||||
|     QString const pluginDefault = "/usr/lib"; | ||||
|     pluginDirectoryOption.setDefaultValue(pluginDefault); | ||||
|     parser.addOption(pluginDirectoryOption); | ||||
|  | ||||
|     QCommandLineOption pluginNameOption(QStringList() << "plugin-name" << "plugin-name", | ||||
|         QCoreApplication::translate("main", "Name of dc-plugin."), | ||||
|         QCoreApplication::translate("main", "directory")); | ||||
|     QString const pluginNameDefault = "libCAslave.so"; | ||||
|     pluginNameOption.setDefaultValue(pluginNameDefault); | ||||
|     parser.addOption(pluginNameOption); | ||||
|  | ||||
|     // Process the actual command line arguments given by the user | ||||
|     parser.process(a); | ||||
|     QString plugInDir = parser.value(pluginDirectoryOption); | ||||
|     QString plugInName = parser.value(pluginNameOption); | ||||
|  | ||||
|     QThread::currentThread()->setObjectName("main thread"); | ||||
|     qInfo() << "Main thread" << QThread::currentThreadId(); | ||||
|  | ||||
|     hwinf *hw = loadDCPlugin(QDir(plugInDir), plugInName); | ||||
|  | ||||
|     hw->dc_autoRequest(true); | ||||
|     hw->dc_openSerial(5, "115200", SERIAL_PORT, 1); | ||||
|  | ||||
|     return a.exec(); | ||||
| } | ||||
							
								
								
									
										97
									
								
								master/message_handler.cpp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										97
									
								
								master/message_handler.cpp
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| #include "message_handler.h" | ||||
|  | ||||
| #include <QDateTime> | ||||
| #include <cstring> | ||||
| #include <QString> | ||||
| #include <QFileInfo> | ||||
| #include <QMessageLogContext> | ||||
|  | ||||
|  | ||||
| static char const *DBG_NAME[] = { "DBG  ", "WARN ", "CRIT ", "FATAL", "INFO " }; | ||||
| static bool installedMsgHandler = false; | ||||
| static int debugLevel = LOG_NOTICE; | ||||
|  | ||||
| int getDebugLevel() { return debugLevel; } | ||||
| void setDebugLevel(int newDebugLevel) { | ||||
|     debugLevel = newDebugLevel; | ||||
| } | ||||
|  | ||||
| bool messageHandlerInstalled() { | ||||
|     return installedMsgHandler; | ||||
| } | ||||
|  | ||||
| QtMessageHandler atbInstallMessageHandler(QtMessageHandler handler) { | ||||
|     installedMsgHandler = (handler != 0); | ||||
|     static QtMessageHandler prevHandler = nullptr; | ||||
|     if (handler) { | ||||
|         prevHandler = qInstallMessageHandler(handler); | ||||
|         return prevHandler; | ||||
|     } else { | ||||
|         return qInstallMessageHandler(prevHandler); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// | ||||
| /// \brief Print message according to given debug level. | ||||
| /// | ||||
| /// \note Install this function using qInstallMsgHandler(). | ||||
| /// | ||||
| ///  int main(int argc, char **argv) { | ||||
| ///     installMsgHandler(atbDebugOutput); | ||||
| ///     QApplication app(argc, argv); | ||||
| ///     ... | ||||
| ///     return app.exec(); | ||||
| ///  } | ||||
| /// | ||||
| #if (QT_VERSION > QT_VERSION_CHECK(5, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) | ||||
| void atbDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { | ||||
|     Q_UNUSED(context); | ||||
|     QString const localMsg = QString(DBG_NAME[type]) + msg.toLocal8Bit(); | ||||
|  | ||||
|     switch (debugLevel) { | ||||
|         case LOG_DEBUG: { // debug-level message | ||||
|             syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|         } break; | ||||
|         case LOG_INFO: { // informational message | ||||
|             if (type != QtDebugMsg) { | ||||
|                 syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|             } | ||||
|         } break; | ||||
|         case LOG_NOTICE: { // normal, but significant, condition | ||||
|             if (type != QtDebugMsg) { | ||||
|                 syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|             } | ||||
|         } break; | ||||
|         case LOG_WARNING: { // warning conditions | ||||
|             if (type != QtInfoMsg && type != QtDebugMsg) { | ||||
|                 syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|             } | ||||
|         } break; | ||||
|         case LOG_ERR: { // error conditions | ||||
|             if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) { | ||||
|                 syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|             } | ||||
|         } break; | ||||
|         case LOG_CRIT: { // critical conditions | ||||
|             if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) { | ||||
|                 syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|             } | ||||
|         } break; | ||||
|         case LOG_ALERT: { // action must be taken immediately | ||||
|             if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) { | ||||
|                 syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|             } | ||||
|         } break; | ||||
|         case LOG_EMERG: { // system is unusable | ||||
|             if (type != QtInfoMsg && type != QtDebugMsg && type != QtWarningMsg) { | ||||
|                 syslog(LOG_DEBUG, "%s", localMsg.toStdString().c_str()); | ||||
|             } | ||||
|         } break; | ||||
|         default: { | ||||
|             //fprintf(stderr, "%s No ErrorLevel defined! %s\n", | ||||
|             //    datetime.toStdString().c_str(), msg.toStdString().c_str()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| #endif | ||||
|  | ||||
							
								
								
									
										23
									
								
								master/message_handler.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								master/message_handler.h
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| #ifndef MESSAGE_HANDLER_H_INCLUDED | ||||
| #define MESSAGE_HANDLER_H_INCLUDED | ||||
|  | ||||
| #include <QtGlobal> | ||||
| #ifdef __linux__ | ||||
| #include <syslog.h> | ||||
| #endif | ||||
|  | ||||
| int getDebugLevel(); | ||||
| void setDebugLevel(int newDebugLevel); | ||||
|  | ||||
| bool messageHandlerInstalled(); | ||||
| QtMessageHandler atbInstallMessageHandler(QtMessageHandler handler); | ||||
|  | ||||
| #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) | ||||
| // typedef void (*QtMessageHandler)(QtMsgType, const char *); | ||||
| void atbDebugOutput(QtMsgType type, const char *msg); | ||||
| #elif QT_VERSION < QT_VERSION_CHECK(6, 0, 0) | ||||
| // typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &); | ||||
| void atbDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg); | ||||
| #endif | ||||
|  | ||||
| #endif // MESSAGE_HANDLER_H_INCLUDED | ||||
							
								
								
									
										1683
									
								
								master/plugins/interfaces.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1683
									
								
								master/plugins/interfaces.h
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								slave/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								slave/main.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
| int main(int argc, char *argv[]) { | ||||
|     return 0; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user