Initial check-in
This commit is contained in:
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
###############################################################################
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior for command prompt diff.
|
||||||
|
#
|
||||||
|
# This is need for earlier builds of msysgit that does not have it on by
|
||||||
|
# default for csharp files.
|
||||||
|
# Note: This is only used by command line
|
||||||
|
###############################################################################
|
||||||
|
#*.cs diff=csharp
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set the merge driver for project and solution files
|
||||||
|
#
|
||||||
|
# Merging from the command prompt will add diff markers to the files if there
|
||||||
|
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||||
|
# the diff markers are never inserted). Diff markers may cause the following
|
||||||
|
# file extensions to fail to load in VS. An alternative would be to treat
|
||||||
|
# these files as binary and thus will always conflict and require user
|
||||||
|
# intervention with every merge. To do so, just uncomment the entries below
|
||||||
|
###############################################################################
|
||||||
|
#*.sln merge=binary
|
||||||
|
#*.csproj merge=binary
|
||||||
|
#*.vbproj merge=binary
|
||||||
|
#*.vcxproj merge=binary
|
||||||
|
#*.vcproj merge=binary
|
||||||
|
#*.dbproj merge=binary
|
||||||
|
#*.fsproj merge=binary
|
||||||
|
#*.lsproj merge=binary
|
||||||
|
#*.wixproj merge=binary
|
||||||
|
#*.modelproj merge=binary
|
||||||
|
#*.sqlproj merge=binary
|
||||||
|
#*.wwaproj merge=binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# behavior for image files
|
||||||
|
#
|
||||||
|
# image files are treated as binary by default.
|
||||||
|
###############################################################################
|
||||||
|
#*.jpg binary
|
||||||
|
#*.png binary
|
||||||
|
#*.gif binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# diff behavior for common document formats
|
||||||
|
#
|
||||||
|
# Convert binary document formats to text before diffing them. This feature
|
||||||
|
# is only available from the command line. Turn it on by uncommenting the
|
||||||
|
# entries below.
|
||||||
|
###############################################################################
|
||||||
|
#*.doc diff=astextplain
|
||||||
|
#*.DOC diff=astextplain
|
||||||
|
#*.docx diff=astextplain
|
||||||
|
#*.DOCX diff=astextplain
|
||||||
|
#*.dot diff=astextplain
|
||||||
|
#*.DOT diff=astextplain
|
||||||
|
#*.pdf diff=astextplain
|
||||||
|
#*.PDF diff=astextplain
|
||||||
|
#*.rtf diff=astextplain
|
||||||
|
#*.RTF diff=astextplain
|
||||||
368
.gitignore
vendored
368
.gitignore
vendored
@@ -1,15 +1,365 @@
|
|||||||
# ---> Linux
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
|
/HWIL_Assistant/src/CommonLib/
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Oo]ut/
|
||||||
|
[Ll]og/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_h.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.iobj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.ipdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
*~
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
# Including strong name files can present a security risk
|
||||||
.fuse_hidden*
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
# KDE directory preferences
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
.directory
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
# Linux trash folder which might appear on any partition or disk
|
# RIA/Silverlight projects
|
||||||
.Trash-*
|
Generated_Code/
|
||||||
|
|
||||||
# .nfs files are created when an open file is removed but is still being accessed
|
# Backup & report files from converting an old project file
|
||||||
.nfs*
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
|
|||||||
129
HWIL_Assistant/HWIL_Assistant_Linux.pro
Normal file
129
HWIL_Assistant/HWIL_Assistant_Linux.pro
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
QT += core gui
|
||||||
|
QT += network
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
CONFIG(debug, debug|release){
|
||||||
|
DESTDIR = build_x64_debug
|
||||||
|
} else {
|
||||||
|
DESTDIR = build_x64_release
|
||||||
|
}
|
||||||
|
|
||||||
|
OBJECTS_DIR = $${DESTDIR}/OBJ
|
||||||
|
MOC_DIR = $${DESTDIR}/MOC
|
||||||
|
RCC_DIR = $${DESTDIR}/RCC
|
||||||
|
UI_DIR = $${DESTDIR}/UI
|
||||||
|
|
||||||
|
TARGET = HWIL_Assistant
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
|
DEFINES += LINUX_PLATFORM
|
||||||
|
|
||||||
|
QT += testlib
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
src/Comm/UdpSocketMgr.cpp \
|
||||||
|
src/AutomationMessages/AreYouThereCmdMessage.cpp \
|
||||||
|
src/AutomationMessages/AreYouThereRspMessage.cpp \
|
||||||
|
src/AutomationMessages/AutomationMsgHandler.cpp \
|
||||||
|
src/AutomationMessages/AutomationMsgParser.cpp \
|
||||||
|
src/AutomationMessages/GenericRspMessage.cpp \
|
||||||
|
src/AutomationMessages/KwScenarioStartedMessage.cpp \
|
||||||
|
src/AutomationMessages/KwScenarioStoppedMessage.cpp \
|
||||||
|
src/AutomationMessages/Message.cpp \
|
||||||
|
src/AutomationMessages/MessageHeader.cpp \
|
||||||
|
src/AutomationMessages/WaitForLastTaskCompletionCmdMessage.cpp \
|
||||||
|
src/Comm/UdpSocket.cpp \
|
||||||
|
src/CommonLib/Exceptions/Exception.cpp \
|
||||||
|
src/CommonLib/Exceptions/TimeoutError.cpp \
|
||||||
|
src/CommonLib/Lib/Condition.cpp \
|
||||||
|
src/Common/Constants.cpp \
|
||||||
|
src/CommonLib/Lib/ErrorLog.cpp \
|
||||||
|
src/CommonLib/Lib/EventNames.cpp \
|
||||||
|
src/CommonLib/Lib/IniFile.cpp \
|
||||||
|
src/CommonLib/Lib/LockMutex.cpp \
|
||||||
|
src/CommonLib/Lib/Mutex.cpp \
|
||||||
|
src/CommonLib/Lib/OSObject.cpp \
|
||||||
|
src/CommonLib/Lib/Util/DateTimeUtil.cpp \
|
||||||
|
src/CommonLib/Lib/Util/FileSystemUtil.cpp \
|
||||||
|
src/CommonLib/Lib/Util/MiscUtil.cpp \
|
||||||
|
src/CommonLib/Lib/Util/StringUtil.cpp \
|
||||||
|
src/CommonLib/Proc/Proc.cpp \
|
||||||
|
src/CommonLib/Lib/Timestamp.cpp \
|
||||||
|
src/Common/Util.cpp \
|
||||||
|
src/CommonLib/Threading/Thread.cpp \
|
||||||
|
src/Config/ConfigFileManager.cpp \
|
||||||
|
src/LinuxProc.cpp \
|
||||||
|
src/Threads/FileTransferThread.cpp \
|
||||||
|
src/Threads/NetworkingThread.cpp \
|
||||||
|
src/Threads/RunAppThread.cpp \
|
||||||
|
src/UI/FileTransferDialog.cpp \
|
||||||
|
src/UI/MainWindow.cpp \
|
||||||
|
src/main.cpp \
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
src/Comm/UdpSocketMgr.hpp \
|
||||||
|
src/AutomationMessages/AreYouThereCmdMessage.hpp \
|
||||||
|
src/AutomationMessages/AreYouThereRspMessage.hpp \
|
||||||
|
src/AutomationMessages/AutomationMsgHandler.hpp \
|
||||||
|
src/AutomationMessages/AutomationMsgParser.hpp \
|
||||||
|
src/AutomationMessages/GenericRspMessage.hpp \
|
||||||
|
src/AutomationMessages/KwScenarioStartedMessage.hpp \
|
||||||
|
src/AutomationMessages/KwScenarioStoppedMessage.hpp \
|
||||||
|
src/AutomationMessages/Message.hpp \
|
||||||
|
src/AutomationMessages/MessageHeader.hpp \
|
||||||
|
src/AutomationMessages/MessageIDs.hpp \
|
||||||
|
src/AutomationMessages/WaitForLastTaskCompletionCmdMessage.hpp \
|
||||||
|
src/Comm/UdpSocket.hpp \
|
||||||
|
src/CommonLib/Exceptions/Exception.hpp \
|
||||||
|
src/CommonLib/Exceptions/TimeoutError.hpp \
|
||||||
|
src/CommonLib/Lib/Condition.hpp \
|
||||||
|
src/Common/Constants.hpp \
|
||||||
|
src/CommonLib/Lib/CustomDataTypes.hpp \
|
||||||
|
src/CommonLib/Lib/ErrorLog.hpp \
|
||||||
|
src/CommonLib/Lib/EventNames.hpp \
|
||||||
|
src/CommonLib/Lib/IniFile.hpp \
|
||||||
|
src/CommonLib/Lib/LockMutex.hpp \
|
||||||
|
src/CommonLib/Lib/Mutex.hpp \
|
||||||
|
src/CommonLib/Lib/OSObject.hpp \
|
||||||
|
src/CommonLib/Lib/Util/DateTimeUtil.hpp \
|
||||||
|
src/CommonLib/Lib/Util/FileSystemUtil.hpp \
|
||||||
|
src/CommonLib/Lib/Util/MiscUtil.hpp \
|
||||||
|
src/CommonLib/Lib/Util/StringUtil.hpp \
|
||||||
|
src/CommonLib/Proc/Proc.hpp \
|
||||||
|
src/CommonLib/Lib/Timestamp.hpp \
|
||||||
|
src/Common/Util.hpp \
|
||||||
|
src/CommonLib/Threading/Thread.hpp \
|
||||||
|
src/Config/ConfigFileManager.hpp \
|
||||||
|
src/LinuxProc.hpp \
|
||||||
|
src/Threads/FileTransferThread.hpp \
|
||||||
|
src/Threads/NetworkingThread.hpp \
|
||||||
|
src/Threads/RunAppThread.hpp \
|
||||||
|
src/UI/FileTransferDialog.hpp \
|
||||||
|
src/UI/MainWindow.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
src/UI/FileTransferDialog.ui \
|
||||||
|
src/UI/mainwindow.ui
|
||||||
|
|
||||||
|
INCLUDEPATH += src/ \
|
||||||
|
src/UI/ \
|
||||||
|
src/Computers/ \
|
||||||
|
src/Comm/ \
|
||||||
|
src/Config/ \
|
||||||
|
src/Threads/ \
|
||||||
|
src/CommonLib/Comm/ \
|
||||||
|
src/CommonLib/Exceptions/ \
|
||||||
|
src/CommonLib/Lib/ \
|
||||||
|
src/CommonLib/Lib/Util/ \
|
||||||
|
src/CommonLib/Proc/ \
|
||||||
|
src/CommonLib/Threading/ \
|
||||||
|
src/Common/ \
|
||||||
|
src/AutomationMessages/
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
|
DISTFILES += \
|
||||||
|
src/Config/config.ini
|
||||||
11
HWIL_Assistant/git_scripts/ignore_a_tracked_file.sh
Normal file
11
HWIL_Assistant/git_scripts/ignore_a_tracked_file.sh
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
length=${#1};
|
||||||
|
|
||||||
|
if [[ $length -eq 0 ]]
|
||||||
|
then
|
||||||
|
echo "Please specify a tracked file to ignore";
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
git update-index --skip-worktree $1
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
git ls-tree -r master --name-only
|
||||||
11
HWIL_Assistant/git_scripts/unignore_a_tracked_file.sh
Normal file
11
HWIL_Assistant/git_scripts/unignore_a_tracked_file.sh
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
length=${#1};
|
||||||
|
|
||||||
|
if [[ $length -eq 0 ]]
|
||||||
|
then
|
||||||
|
echo "Please specify a tracked file to ignore";
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
git update-index --no-skip-worktree $1
|
||||||
4
HWIL_Assistant/readme.txt
Normal file
4
HWIL_Assistant/readme.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Before building, go to project settings -> Build Settings and disable Shadow Build
|
||||||
|
Shadow Build will put all build output files in a location outside of project folder relative to home directory
|
||||||
|
|
||||||
|
This project is set to output files in the project folder so we can easily locate the files
|
||||||
106
HWIL_Assistant/src/AutomationMessages/AreYouThereCmdMessage.cpp
Normal file
106
HWIL_Assistant/src/AutomationMessages/AreYouThereCmdMessage.cpp
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
#include <sstream>
|
||||||
|
#include <string.h>
|
||||||
|
#include "AreYouThereCmdMessage.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "AreYouThereRspMessage.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDirIterator>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AreYouThereCmdMessage::AreYouThereCmdMessage():
|
||||||
|
Message(MessageIDs::ARE_YOU_THERE_CMD, "ARE_YOU_THERE_CMD")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AreYouThereCmdMessage::AreYouThereCmdMessage(const AreYouThereCmdMessage& copy) :
|
||||||
|
Message(copy)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AreYouThereCmdMessage::~AreYouThereCmdMessage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message* AreYouThereCmdMessage::cloneSelf()
|
||||||
|
{
|
||||||
|
AreYouThereCmdMessage* pMsg = new AreYouThereCmdMessage(*this);
|
||||||
|
return pMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AreYouThereCmdMessage::executeMessage()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Condition& commandExecutingEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTTION_IN_PROGRESS);
|
||||||
|
Condition& completeEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTION_COMPLETE);
|
||||||
|
|
||||||
|
completeEvent.reset();
|
||||||
|
if (commandExecutingEvent.timedWait(0,0)) // a command is current executing
|
||||||
|
{
|
||||||
|
completeEvent.wait(); // wait until current command finish executing
|
||||||
|
}
|
||||||
|
|
||||||
|
// signal this command is currently executing to prevent any other command from executing
|
||||||
|
commandExecutingEvent.signal();
|
||||||
|
|
||||||
|
AreYouThereRspMessage rsp(QCoreApplication::applicationFilePath().toStdString());
|
||||||
|
|
||||||
|
UdpSocketMgr::Instance().sendAMessage(rsp);
|
||||||
|
|
||||||
|
commandExecutingEvent.reset();
|
||||||
|
completeEvent.signal();
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AreYouThereCmdMessage::formatData(unsigned char* pData)
|
||||||
|
{
|
||||||
|
// Here's how the data is formatted
|
||||||
|
// each data item is preceded by a 4-byte header which tells us the size of the data item
|
||||||
|
// 1 data item will have [header][data]
|
||||||
|
// 2 data items will have [header][data][header][data]
|
||||||
|
unsigned int dataLen = 0;
|
||||||
|
|
||||||
|
// we want update total size of the entire message
|
||||||
|
m_header.setMessageLength(static_cast<unsigned short>(dataLen));
|
||||||
|
m_header.format(pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AreYouThereCmdMessage::parseData(const unsigned char*)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string AreYouThereCmdMessage::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << Message::toString() << ". No member data";
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
118
HWIL_Assistant/src/AutomationMessages/AreYouThereCmdMessage.hpp
Normal file
118
HWIL_Assistant/src/AutomationMessages/AreYouThereCmdMessage.hpp
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
class AreYouThereCmdMessage : public Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: AreYouThereCmdMessage
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
AreYouThereCmdMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: AreYouThereCmdMessage
|
||||||
|
//
|
||||||
|
// Purpose: copy constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
AreYouThereCmdMessage(const AreYouThereCmdMessage ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~AreYouThereCmdMessage
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual ~AreYouThereCmdMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ExecuteMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void executeMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ToString
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual std::string toString() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: CloneSelf
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual Message* cloneSelf();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: FormatData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void formatData(unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ParseData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void parseData(const unsigned char* pData);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
AreYouThereCmdMessage &operator=(const AreYouThereCmdMessage &rhs);
|
||||||
|
};
|
||||||
106
HWIL_Assistant/src/AutomationMessages/AreYouThereRspMessage.cpp
Normal file
106
HWIL_Assistant/src/AutomationMessages/AreYouThereRspMessage.cpp
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
#include <sstream>
|
||||||
|
#include <string.h>
|
||||||
|
#include "AreYouThereRspMessage.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
#include "MiscUtil.hpp"
|
||||||
|
#include "FileSystemUtil.hpp"
|
||||||
|
#include "Proc.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "GenericRspMessage.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "Proc.hpp"
|
||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
|
||||||
|
#include <QRegExp>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDirIterator>
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AreYouThereRspMessage::AreYouThereRspMessage(std::string appPath):
|
||||||
|
Message(MessageIDs::ARE_YOU_THERE_RSP, "ARE_YOU_THERE_RSP"),
|
||||||
|
m_appPath(appPath)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AreYouThereRspMessage::AreYouThereRspMessage(const AreYouThereRspMessage& copy) :
|
||||||
|
Message(copy),
|
||||||
|
m_appPath(copy.m_appPath)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AreYouThereRspMessage::~AreYouThereRspMessage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message* AreYouThereRspMessage::cloneSelf()
|
||||||
|
{
|
||||||
|
AreYouThereRspMessage* pMsg = new AreYouThereRspMessage(*this);
|
||||||
|
return pMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AreYouThereRspMessage::executeMessage()
|
||||||
|
{
|
||||||
|
std::map<std::string,std::string> users = Util::Misc::GetUsersOfRunningProcess(Util::FileSystem::ExtractFilename(m_appPath));
|
||||||
|
// an instance of the this app is already running, we want to quit this instance
|
||||||
|
throw Exception(Q_FUNC_INFO, "An instance of this application is already running by " + users.begin()->second + " (PID: " + users.begin()->first + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AreYouThereRspMessage::formatData(unsigned char* pData)
|
||||||
|
{
|
||||||
|
// Here's how the data is formatted
|
||||||
|
// each data item is preceded by a 4-byte header which tells us the size of the data item
|
||||||
|
// 1 data item will have [header][data]
|
||||||
|
// 2 data items will have [header][data][header][data]
|
||||||
|
unsigned int dataLen = 0;
|
||||||
|
const unsigned char* pTempDataStart = pData + getHeaderLength();
|
||||||
|
|
||||||
|
buildByteArray(&pTempDataStart, m_appPath.c_str(), m_appPath.length(), dataLen);
|
||||||
|
|
||||||
|
// we want update total size of the entire message
|
||||||
|
m_header.setMessageLength(static_cast<unsigned short>(dataLen));
|
||||||
|
m_header.format(pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AreYouThereRspMessage::parseData(const unsigned char* pData)
|
||||||
|
{
|
||||||
|
bool selfThrown = false;
|
||||||
|
const unsigned char* pTempDataStart = pData;
|
||||||
|
const unsigned char* pTempDataEnd = pData + m_header.getMessageLength() - m_header.getHeaderLength() - 1;
|
||||||
|
|
||||||
|
int sizeOfData = 0;
|
||||||
|
try {
|
||||||
|
sizeOfData = getNextDataItem(&pTempDataStart, pTempDataEnd, sizeOfData);
|
||||||
|
m_appPath = Util::Strings::ByteArrayToString(const_cast<unsigned char*>(pTempDataStart), sizeOfData);
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string AreYouThereRspMessage::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << Message::toString() << "AppPath: " << m_appPath;
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
120
HWIL_Assistant/src/AutomationMessages/AreYouThereRspMessage.hpp
Normal file
120
HWIL_Assistant/src/AutomationMessages/AreYouThereRspMessage.hpp
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
class AreYouThereRspMessage : public Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: AreYouThereRspMessage
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
AreYouThereRspMessage(std::string appPath = "");
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: AreYouThereRspMessage
|
||||||
|
//
|
||||||
|
// Purpose: copy constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
AreYouThereRspMessage(const AreYouThereRspMessage ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~AreYouThereRspMessage
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual ~AreYouThereRspMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ExecuteMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void executeMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ToString
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual std::string toString() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: CloneSelf
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual Message* cloneSelf();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: FormatData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void formatData(unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ParseData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void parseData(const unsigned char* pData);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
AreYouThereRspMessage &operator=(const AreYouThereRspMessage &rhs);
|
||||||
|
|
||||||
|
std::string m_appPath;
|
||||||
|
};
|
||||||
177
HWIL_Assistant/src/AutomationMessages/AutomationMsgHandler.cpp
Normal file
177
HWIL_Assistant/src/AutomationMessages/AutomationMsgHandler.cpp
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
#include <cerrno>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string.h>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
#include "AutomationMsgHandler.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "GenericRspMessage.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
|
||||||
|
#include "AreYouThereCmdMessage.hpp"
|
||||||
|
#include "WaitForLastTaskCompletionCmdMessage.hpp"
|
||||||
|
#include "KwScenarioStartedMessage.hpp"
|
||||||
|
#include "KwScenarioStoppedMessage.hpp"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AutomationMsgHandler::AutomationMsgHandler()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AutomationMsgHandler::~AutomationMsgHandler(){}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AutomationMsgHandler& AutomationMsgHandler::instance()
|
||||||
|
{
|
||||||
|
static AutomationMsgHandler handler;
|
||||||
|
return handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgHandler::handleMsg(const unsigned char* pData, const unsigned int& id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MessageIDs::MsgIds msgId = (MessageIDs::MsgIds)id;
|
||||||
|
|
||||||
|
if (msgId != MessageIDs::WAIT_FOR_COMPLETION_CMD)
|
||||||
|
WaitForLastTaskCompletionCmdMessage::s_commandCompletionSuccess = true;
|
||||||
|
|
||||||
|
if (msgId == MessageIDs::ARE_YOU_THERE_CMD)
|
||||||
|
{
|
||||||
|
handleAreYouThereMessage(pData);
|
||||||
|
}
|
||||||
|
else if (msgId == MessageIDs::SCENARIO_STARTED_CMD)
|
||||||
|
{
|
||||||
|
handleKwScenarioStartedCMessage(pData);
|
||||||
|
}
|
||||||
|
else if (msgId == MessageIDs::SCENARIO_STOPPED_CMD)
|
||||||
|
{
|
||||||
|
handleKwScenarioStoppedCMessage(pData);
|
||||||
|
}
|
||||||
|
else if (msgId == MessageIDs::WAIT_FOR_COMPLETION_CMD)
|
||||||
|
{
|
||||||
|
handleWaitForLastTaskCompletionMessage(pData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "unknown message id: " << id;
|
||||||
|
|
||||||
|
throw Exception (Q_FUNC_INFO, ss.str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTTION_IN_PROGRESS).reset();
|
||||||
|
LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTION_COMPLETE).signal();
|
||||||
|
|
||||||
|
WaitForLastTaskCompletionCmdMessage::s_commandCompletionSuccess = false;
|
||||||
|
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgHandler::handleAreYouThereMessage(const unsigned char* pData)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
AreYouThereCmdMessage cmd;
|
||||||
|
|
||||||
|
cmd.parse(pData);
|
||||||
|
|
||||||
|
if (LinuxProc::Instance().getConfig().getBool("GENERAL", "VERBOSE_LOGGING"))
|
||||||
|
ErrorLog::Instance().log(cmd.toString(), false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
cmd.executeMessage();
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgHandler::handleKwScenarioStartedCMessage(const unsigned char *pData)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
KwScenarioStartedMessage cmd;
|
||||||
|
|
||||||
|
cmd.parse(pData);
|
||||||
|
|
||||||
|
if (LinuxProc::Instance().getConfig().getBool("GENERAL", "VERBOSE_LOGGING"))
|
||||||
|
ErrorLog::Instance().log(cmd.toString(), false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
cmd.executeMessage();
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgHandler::handleKwScenarioStoppedCMessage(const unsigned char *pData)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
KwScenarioStoppedMessage cmd;
|
||||||
|
|
||||||
|
cmd.parse(pData);
|
||||||
|
|
||||||
|
if (LinuxProc::Instance().getConfig().getBool("GENERAL", "VERBOSE_LOGGING"))
|
||||||
|
ErrorLog::Instance().log(cmd.toString(), false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
cmd.executeMessage();
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgHandler::handleWaitForLastTaskCompletionMessage(const unsigned char* pData)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
WaitForLastTaskCompletionCmdMessage cmd;
|
||||||
|
|
||||||
|
cmd.parse(pData);
|
||||||
|
|
||||||
|
if (LinuxProc::Instance().getConfig().getBool("GENERAL", "VERBOSE_LOGGING"))
|
||||||
|
ErrorLog::Instance().log(cmd.toString(), false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
cmd.executeMessage();
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
114
HWIL_Assistant/src/AutomationMessages/AutomationMsgHandler.hpp
Normal file
114
HWIL_Assistant/src/AutomationMessages/AutomationMsgHandler.hpp
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class AutomationMsgHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: instance
|
||||||
|
//
|
||||||
|
// Purpose: singleton
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
static AutomationMsgHandler& instance();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~Proc
|
||||||
|
//
|
||||||
|
// Purpose: Destroyer
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
~AutomationMsgHandler();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: parseMsg
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void handleMsg(const unsigned char* pData, const unsigned int& id);
|
||||||
|
|
||||||
|
private:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: AutomationMsgHandler
|
||||||
|
//
|
||||||
|
// Purpose: Ctor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
AutomationMsgHandler();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: HandleMoveGutsVideosToSubFolderMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void handleAreYouThereMessage(const unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: HandleKwScenarioStartedCMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void handleKwScenarioStartedCMessage(const unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: HandleKwScenarioStoppedCMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void handleKwScenarioStoppedCMessage(const unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: HandleWaitForLastTaskCompletionMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void handleWaitForLastTaskCompletionMessage(const unsigned char* pData);
|
||||||
|
};
|
||||||
|
|
||||||
168
HWIL_Assistant/src/AutomationMessages/AutomationMsgParser.cpp
Normal file
168
HWIL_Assistant/src/AutomationMessages/AutomationMsgParser.cpp
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
#include <cerrno>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string.h>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
#include "AutomationMsgParser.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AutomationMsgParser::AutomationMsgParser()
|
||||||
|
{
|
||||||
|
gatherCmdMessageIds();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AutomationMsgParser::~AutomationMsgParser(){}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AutomationMsgParser& AutomationMsgParser::instance()
|
||||||
|
{
|
||||||
|
static AutomationMsgParser parser;
|
||||||
|
return parser;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgParser::gatherCmdMessageIds()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
msgIdsVec.push_back(MessageIDs::ARE_YOU_THERE_CMD);
|
||||||
|
msgIdsVec.push_back(MessageIDs::SCENARIO_STARTED_CMD);
|
||||||
|
msgIdsVec.push_back(MessageIDs::SCENARIO_STOPPED_CMD);
|
||||||
|
|
||||||
|
msgIdsVec.push_back(MessageIDs::WAIT_FOR_COMPLETION_CMD);
|
||||||
|
msgIdsVec.push_back(MessageIDs::GENERIC_RSP);
|
||||||
|
msgIdsVec.push_back(MessageIDs::ARE_YOU_THERE_RSP);
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgParser::parseMsg(unsigned char* pData, unsigned int numBytes, unsigned int* pMsgId)
|
||||||
|
{
|
||||||
|
bool selfThrown = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MessageHeader header;
|
||||||
|
|
||||||
|
if (numBytes < header.getHeaderLength())
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Number of bytes received: " << numBytes << ". Expected minimum: " << header.getHeaderLength();
|
||||||
|
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// check to see if we recognize the header
|
||||||
|
unsigned int msgId = 0;
|
||||||
|
unsigned int msgLen = 0;
|
||||||
|
|
||||||
|
memcpy(&msgId, &pData[0], 4);
|
||||||
|
memcpy(&msgLen, &pData[4], 4);
|
||||||
|
|
||||||
|
if (std::find(msgIdsVec.begin(), msgIdsVec.end(), msgId) == msgIdsVec.end())
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "unexpected msg id: " << msgId;
|
||||||
|
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( msgLen != numBytes)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Number of bytes received: " << numBytes << ". Expected only: " << msgLen;
|
||||||
|
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numBytes > header.getHeaderLength())
|
||||||
|
verifyDataFormat(pData, numBytes);
|
||||||
|
|
||||||
|
*pMsgId = msgId;
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void AutomationMsgParser::verifyDataFormat(unsigned char* pData, unsigned int numBytes)
|
||||||
|
{
|
||||||
|
MessageHeader header;
|
||||||
|
bool selfThrown = false;
|
||||||
|
unsigned char* pTempDataStart = pData + header.getHeaderLength();
|
||||||
|
unsigned char* pTempDataEnd = pData + numBytes - 1;
|
||||||
|
|
||||||
|
// data format is
|
||||||
|
// [data header - 4 bytes][data - variable size]
|
||||||
|
// [data header][data][data header][data][data header][data][data header][data]
|
||||||
|
const unsigned int DATA_HEADER_LENGTH = 4;
|
||||||
|
|
||||||
|
try {
|
||||||
|
std::stringstream ssError;
|
||||||
|
|
||||||
|
ssError << "Data structure is incorrect. Data: " << Util::Strings::ByteArrayToHexString(pData+header.getHeaderLength(), numBytes - header.getHeaderLength());
|
||||||
|
|
||||||
|
// want to make sure data size is at least 5 bytes
|
||||||
|
if (pTempDataStart+DATA_HEADER_LENGTH > pTempDataEnd)
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ssError.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
while (pTempDataStart < pTempDataEnd)
|
||||||
|
{
|
||||||
|
unsigned int dataSize = *(reinterpret_cast<unsigned int*>(pTempDataStart));
|
||||||
|
|
||||||
|
if (dataSize == 0)
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ssError.str());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pTempDataStart += DATA_HEADER_LENGTH + dataSize;
|
||||||
|
|
||||||
|
if (pTempDataStart-1 > pTempDataEnd)
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ssError.str());
|
||||||
|
}
|
||||||
|
else if (pTempDataStart-1 == pTempDataEnd)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class AutomationMsgParser
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: instance
|
||||||
|
//
|
||||||
|
// Purpose: singleton
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
static AutomationMsgParser& instance();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~Proc
|
||||||
|
//
|
||||||
|
// Purpose: Destroyer
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
~AutomationMsgParser();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: parseMsg
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void parseMsg(unsigned char* pData, unsigned int numBytes,unsigned int* pMsgId);
|
||||||
|
|
||||||
|
private:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: AutomationMsgParser
|
||||||
|
//
|
||||||
|
// Purpose: Ctor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
AutomationMsgParser();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: gatherCmdMessageIds
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void gatherCmdMessageIds();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: verifyDataFormat
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void verifyDataFormat(unsigned char* pData, unsigned int numBytes);
|
||||||
|
|
||||||
|
std::vector<MessageIDs::MsgIds> msgIdsVec;
|
||||||
|
};
|
||||||
|
|
||||||
103
HWIL_Assistant/src/AutomationMessages/GenericRspMessage.cpp
Normal file
103
HWIL_Assistant/src/AutomationMessages/GenericRspMessage.cpp
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
#include <sstream>
|
||||||
|
#include <string.h>
|
||||||
|
#include "GenericRspMessage.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
GenericRspMessage::GenericRspMessage(const bool& wasCommandSuccessful):
|
||||||
|
Message(MessageIDs::GENERIC_RSP, "GENERIC_RSP", sizeof(MessageStruct)),
|
||||||
|
m_messageStruct()
|
||||||
|
{
|
||||||
|
m_messageStruct.wasCommandSuccessful = static_cast<unsigned int>(wasCommandSuccessful);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
GenericRspMessage::GenericRspMessage(const GenericRspMessage& copy) :
|
||||||
|
Message(copy),
|
||||||
|
m_messageStruct(copy.m_messageStruct)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
GenericRspMessage::~GenericRspMessage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message* GenericRspMessage::cloneSelf()
|
||||||
|
{
|
||||||
|
GenericRspMessage* pMsg = new GenericRspMessage(*this);
|
||||||
|
return pMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void GenericRspMessage::executeMessage()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void GenericRspMessage::formatData(unsigned char* pData)
|
||||||
|
{
|
||||||
|
// Here's how the data is formatted
|
||||||
|
// each data item is preceded by a 4-byte header which tells us the size of the data item
|
||||||
|
// 1 data item will have [header][data]
|
||||||
|
// 2 data items will have [header][data][header][data]
|
||||||
|
unsigned int dataLen = 0;
|
||||||
|
const unsigned char* pTempDataStart = pData + getHeaderLength();
|
||||||
|
|
||||||
|
buildByteArray(&pTempDataStart, reinterpret_cast<char*>(&m_messageStruct.wasCommandSuccessful), sizeof(m_messageStruct.wasCommandSuccessful), dataLen);
|
||||||
|
|
||||||
|
// we want update total size of the entire message
|
||||||
|
m_header.setMessageLength(static_cast<unsigned short>(dataLen));
|
||||||
|
m_header.format(pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void GenericRspMessage::parseData(const unsigned char* pData)
|
||||||
|
{
|
||||||
|
bool selfThrown = false;
|
||||||
|
const unsigned char* pTempDataStart = pData;
|
||||||
|
const unsigned char* pTempDataEnd = pData + m_header.getMessageLength() - m_header.getHeaderLength() - 1;
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
int sizeOfData = 0;
|
||||||
|
try {
|
||||||
|
sizeOfData = getNextDataItem(&pTempDataStart, pTempDataEnd, sizeOfData);
|
||||||
|
// make sure byte number match between what we're expected and what we receive
|
||||||
|
compareByteNumber(sizeof(m_messageStruct.wasCommandSuccessful), sizeOfData);
|
||||||
|
memcpy(&m_messageStruct.wasCommandSuccessful, pTempDataStart, sizeOfData);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception & e) {
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string GenericRspMessage::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << Message::toString() << "wasCommandSuccessful: " << m_messageStruct.wasCommandSuccessful;
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
138
HWIL_Assistant/src/AutomationMessages/GenericRspMessage.hpp
Normal file
138
HWIL_Assistant/src/AutomationMessages/GenericRspMessage.hpp
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
class GenericRspMessage : public Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: GenericRspMessage
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
GenericRspMessage(const bool& wasCommandSuccessful);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: GenericRspMessage
|
||||||
|
//
|
||||||
|
// Purpose: copy constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
GenericRspMessage(const GenericRspMessage ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~GenericRspMessage
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual ~GenericRspMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: getSuccessfulFlag
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
bool getSuccessfulFlag(){return static_cast<bool>(m_messageStruct.wasCommandSuccessful);}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: executeMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void executeMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: toString
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual std::string toString() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: cloneSelf
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual Message* cloneSelf();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: formatData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void formatData(unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: parseData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void parseData(const unsigned char* pData);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
GenericRspMessage &operator=(const GenericRspMessage &rhs);
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
struct MessageStruct
|
||||||
|
{
|
||||||
|
unsigned int wasCommandSuccessful;
|
||||||
|
};
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
MessageStruct m_messageStruct;
|
||||||
|
};
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "KwScenarioStartedMessage.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "FileSystemUtil.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "GenericRspMessage.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "RunAppThread.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDirIterator>
|
||||||
|
|
||||||
|
Thread* KwScenarioStartedMessage::ms_runAppThread = 0;
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
KwScenarioStartedMessage::KwScenarioStartedMessage():
|
||||||
|
Message(MessageIDs::SCENARIO_STARTED_CMD, "SCENARIO_STARTED_CMD")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
KwScenarioStartedMessage::KwScenarioStartedMessage(const KwScenarioStartedMessage& copy) :
|
||||||
|
Message(copy)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
KwScenarioStartedMessage::~KwScenarioStartedMessage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message* KwScenarioStartedMessage::cloneSelf()
|
||||||
|
{
|
||||||
|
KwScenarioStartedMessage* pMsg = new KwScenarioStartedMessage(*this);
|
||||||
|
return pMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void KwScenarioStartedMessage::executeMessage()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Condition& commandExecutingEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTTION_IN_PROGRESS);
|
||||||
|
Condition& completeEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTION_COMPLETE);
|
||||||
|
|
||||||
|
completeEvent.reset();
|
||||||
|
if (commandExecutingEvent.timedWait(0,0)) // a command is current executing
|
||||||
|
{
|
||||||
|
completeEvent.wait(); // wait until current command finish executing
|
||||||
|
}
|
||||||
|
|
||||||
|
// signal this command is currently executing to prevent any other command from executing
|
||||||
|
commandExecutingEvent.signal();
|
||||||
|
|
||||||
|
GenericRspMessage rsp(true);
|
||||||
|
|
||||||
|
UdpSocketMgr::Instance().sendAMessage(rsp);
|
||||||
|
|
||||||
|
std::string appPath = "";
|
||||||
|
std::string threadName = "";
|
||||||
|
bool runApp = false;
|
||||||
|
if (LinuxProc::Instance().getComputerName() == Constants::ComputerHosts::SWDEV_PC)
|
||||||
|
{
|
||||||
|
threadName = "RunTelemetryThread";
|
||||||
|
appPath = LinuxProc::Instance().getConfig().getString(Constants::ConfigSectionNameMapping::sectionMap[LinuxProc::Instance().getComputerName()], "TELEMETRY_APP_PATH");
|
||||||
|
runApp = LinuxProc::Instance().getConfig().getBool(Constants::ConfigSectionNameMapping::sectionMap[LinuxProc::Instance().getComputerName()], "RUN_TELEMETRY");
|
||||||
|
}
|
||||||
|
else if (LinuxProc::Instance().getComputerName() == Constants::ComputerHosts::SIXDOF_PC)
|
||||||
|
{
|
||||||
|
threadName = "Run6DofThread";
|
||||||
|
appPath = LinuxProc::Instance().getConfig().getString(Constants::ConfigSectionNameMapping::sectionMap[LinuxProc::Instance().getComputerName()], "SIXDOF_APP_PATH");
|
||||||
|
runApp = LinuxProc::Instance().getConfig().getBool(Constants::ConfigSectionNameMapping::sectionMap[LinuxProc::Instance().getComputerName()], "RUN_SIXDOF");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (appPath.length() > 0 && runApp)
|
||||||
|
{
|
||||||
|
if (Util::FileSystem::FileExists(appPath))
|
||||||
|
{
|
||||||
|
std::string appName = Util::FileSystem::ExtractFilename(appPath);
|
||||||
|
Util::KillProcess(appName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ms_runAppThread == 0)
|
||||||
|
{
|
||||||
|
ms_runAppThread = new RunAppThread(threadName, appPath, true);
|
||||||
|
ms_runAppThread->create();
|
||||||
|
ms_runAppThread->resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
ms_runAppThread->startThread();
|
||||||
|
}
|
||||||
|
|
||||||
|
commandExecutingEvent.reset();
|
||||||
|
completeEvent.signal();
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void KwScenarioStartedMessage::formatData(unsigned char* pData)
|
||||||
|
{
|
||||||
|
// Here's how the data is formatted
|
||||||
|
// each data item is preceded by a 4-byte header which tells us the size of the data item
|
||||||
|
// 1 data item will have [header][data]
|
||||||
|
// 2 data items will have [header][data][header][data]
|
||||||
|
unsigned int dataLen = 0;
|
||||||
|
|
||||||
|
// we want update total size of the entire message
|
||||||
|
m_header.setMessageLength(static_cast<unsigned short>(dataLen));
|
||||||
|
m_header.format(pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void KwScenarioStartedMessage::parseData(const unsigned char*)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string KwScenarioStartedMessage::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << Message::toString() << ". No member data";
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
class Thread;
|
||||||
|
|
||||||
|
class KwScenarioStartedMessage : public Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: KwScenarioStarted
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
KwScenarioStartedMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: KwScenarioStarted
|
||||||
|
//
|
||||||
|
// Purpose: copy constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
KwScenarioStartedMessage(const KwScenarioStartedMessage ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~KwScenarioStarted
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual ~KwScenarioStartedMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ExecuteMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void executeMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ToString
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual std::string toString() const;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: getRunAppThread
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
static Thread* getRunAppThread(){return ms_runAppThread;}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: CloneSelf
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual Message* cloneSelf();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: FormatData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void formatData(unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ParseData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void parseData(const unsigned char*);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
KwScenarioStartedMessage &operator=(const KwScenarioStartedMessage &rhs);
|
||||||
|
|
||||||
|
static Thread* ms_runAppThread;
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,208 @@
|
|||||||
|
#include <sstream>
|
||||||
|
#include <string.h>
|
||||||
|
#include "KwScenarioStoppedMessage.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "FileSystemUtil.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "GenericRspMessage.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
#include "ConfigFileManager.hpp"
|
||||||
|
#include "FileTransferThread.hpp"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDirIterator>
|
||||||
|
#include <QRegularExpression>
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
KwScenarioStoppedMessage::KwScenarioStoppedMessage():
|
||||||
|
Message(MessageIDs::SCENARIO_STOPPED_CMD, "SCENARIO_STOPPED_CMD")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
KwScenarioStoppedMessage::KwScenarioStoppedMessage(const KwScenarioStoppedMessage& copy) :
|
||||||
|
Message(copy)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
KwScenarioStoppedMessage::~KwScenarioStoppedMessage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message* KwScenarioStoppedMessage::cloneSelf()
|
||||||
|
{
|
||||||
|
KwScenarioStoppedMessage* pMsg = new KwScenarioStoppedMessage(*this);
|
||||||
|
return pMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void KwScenarioStoppedMessage::executeMessage()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Condition& commandExecutingEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTTION_IN_PROGRESS);
|
||||||
|
Condition& completeEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTION_COMPLETE);
|
||||||
|
|
||||||
|
completeEvent.reset();
|
||||||
|
if (commandExecutingEvent.timedWait(0,0)) // a command is current executing
|
||||||
|
{
|
||||||
|
completeEvent.wait(); // wait until current command finish executing
|
||||||
|
}
|
||||||
|
|
||||||
|
// signal this command is currently executing to prevent any other command from executing
|
||||||
|
commandExecutingEvent.signal();
|
||||||
|
|
||||||
|
GenericRspMessage rsp(true);
|
||||||
|
|
||||||
|
UdpSocketMgr::Instance().sendAMessage(rsp);
|
||||||
|
|
||||||
|
std::string appPath = "";
|
||||||
|
if (LinuxProc::Instance().getComputerName() == Constants::ComputerHosts::SWDEV_PC)
|
||||||
|
{
|
||||||
|
appPath = LinuxProc::Instance().getConfig().getString(Constants::ConfigSectionNameMapping::sectionMap[LinuxProc::Instance().getComputerName()], "TELEMETRY_APP_PATH");
|
||||||
|
}
|
||||||
|
else if (LinuxProc::Instance().getComputerName() == Constants::ComputerHosts::SIXDOF_PC)
|
||||||
|
{
|
||||||
|
appPath = LinuxProc::Instance().getConfig().getString(Constants::ConfigSectionNameMapping::sectionMap[LinuxProc::Instance().getComputerName()], "SIXDOF_APP_PATH");
|
||||||
|
}
|
||||||
|
else if ((LinuxProc::Instance().getComputerName() == Constants::ComputerHosts::VIDEO_PC))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (appPath.length() > 0)
|
||||||
|
{
|
||||||
|
if (Util::FileSystem::FileExists(appPath))
|
||||||
|
{
|
||||||
|
std::string appName = Util::FileSystem::ExtractFilename(appPath);
|
||||||
|
|
||||||
|
Util::KillProcess(appName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gatherTestDataAndLogs())
|
||||||
|
{
|
||||||
|
m_testDataPath = Util::FileSystem::BuildPath(LinuxProc::Instance().getConfig().getString("GENERAL", "BASE_TEST_DATA_PATH"),m_testDataPath);
|
||||||
|
LinuxProc::Instance().getFileTransferThread()->setDestDir(m_testDataPath);
|
||||||
|
Condition& event = LinuxProc::Instance().getEvent(EventNames::START_FILE_TRANSFER);
|
||||||
|
event.signal();
|
||||||
|
}
|
||||||
|
|
||||||
|
commandExecutingEvent.reset();
|
||||||
|
completeEvent.signal();
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool KwScenarioStoppedMessage::gatherTestDataAndLogs()
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
std::vector<std::string> filesToBeTransferred;
|
||||||
|
std::map<std::string, ConfigFileManager::TestDataInfo, CustomDataTypes::ci_less> testDataMap = ConfigFileManager::Instance().getTestDataMap();
|
||||||
|
|
||||||
|
std::map<std::string, ConfigFileManager::TestDataInfo, CustomDataTypes::ci_less>::iterator it;
|
||||||
|
|
||||||
|
std::vector<std::string>::iterator it2;
|
||||||
|
|
||||||
|
int fileCreatedMinutesAgo = 5;
|
||||||
|
for (it = testDataMap.begin(); it != testDataMap.end(); it++)
|
||||||
|
{
|
||||||
|
std::vector<std::string> regexPatternVec = Util::Strings::StringSplit(it->second.fileRegexPatterns, ",", false);
|
||||||
|
|
||||||
|
QDir sourceDir(it->second.path.c_str());
|
||||||
|
QStringList tempList = Util::FileSystem::GetListOfFilesInADirectory(sourceDir, false);
|
||||||
|
|
||||||
|
for ( int i = 0; i < tempList.size(); i++ )
|
||||||
|
{
|
||||||
|
for (it2 = regexPatternVec.begin(); it2 != regexPatternVec.end(); it2++)
|
||||||
|
{
|
||||||
|
std::string regexPattern = Util::Strings::TrimSpaces(*it2);
|
||||||
|
QRegularExpression re(regexPattern.c_str(), QRegularExpression::CaseInsensitiveOption);
|
||||||
|
QRegularExpressionMatch match = re.match(tempList[i]);
|
||||||
|
|
||||||
|
if (match.hasMatch())
|
||||||
|
{
|
||||||
|
QFileInfo fi(tempList[i]);
|
||||||
|
if (fi.lastModified().secsTo(QDateTime::currentDateTime()) <= fileCreatedMinutesAgo * 60)
|
||||||
|
{
|
||||||
|
LinuxProc::Instance().getFileTransferThread()->addSourceFile(tempList[i].toStdString());
|
||||||
|
|
||||||
|
if (!success)
|
||||||
|
success = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void KwScenarioStoppedMessage::formatData(unsigned char* pData)
|
||||||
|
{
|
||||||
|
// Here's how the data is formatted
|
||||||
|
// each data item is preceded by a 4-byte header which tells us the size of the data item
|
||||||
|
// 1 data item will have [header][data]
|
||||||
|
// 2 data items will have [header][data][header][data]
|
||||||
|
unsigned int dataLen = 0;
|
||||||
|
const unsigned char* pTempDataStart = pData + getHeaderLength();
|
||||||
|
|
||||||
|
buildByteArray(&pTempDataStart, m_testDataPath.c_str(), m_testDataPath.length(), dataLen);
|
||||||
|
|
||||||
|
// we want update total size of the entire message
|
||||||
|
m_header.setMessageLength(static_cast<unsigned short>(dataLen));
|
||||||
|
m_header.format(pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void KwScenarioStoppedMessage::parseData(const unsigned char* pData)
|
||||||
|
{
|
||||||
|
const unsigned char* pTempDataStart = pData;
|
||||||
|
const unsigned char* pTempDataEnd = pData + m_header.getMessageLength() - m_header.getHeaderLength() - 1;
|
||||||
|
|
||||||
|
int sizeOfData = 0;
|
||||||
|
try {
|
||||||
|
sizeOfData = getNextDataItem(&pTempDataStart, pTempDataEnd, sizeOfData);
|
||||||
|
m_testDataPath = Util::Strings::ByteArrayToString(const_cast<unsigned char*>(pTempDataStart), sizeOfData);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception& e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string KwScenarioStoppedMessage::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << Message::toString() << ". testDataPath: " << m_testDataPath;
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
class KwScenarioStoppedMessage : public Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: KwScenarioStopped
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
KwScenarioStoppedMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: KwScenarioStopped
|
||||||
|
//
|
||||||
|
// Purpose: copy constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
KwScenarioStoppedMessage(const KwScenarioStoppedMessage ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~KwScenarioStopped
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual ~KwScenarioStoppedMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ExecuteMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void executeMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ToString
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual std::string toString() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: CloneSelf
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual Message* cloneSelf();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: FormatData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void formatData(unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ParseData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void parseData(const unsigned char*);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
KwScenarioStoppedMessage &operator=(const KwScenarioStoppedMessage &rhs);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: gatherTestDataAndLogs
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
bool gatherTestDataAndLogs();
|
||||||
|
|
||||||
|
std::string m_testDataPath;
|
||||||
|
|
||||||
|
};
|
||||||
175
HWIL_Assistant/src/AutomationMessages/Message.cpp
Normal file
175
HWIL_Assistant/src/AutomationMessages/Message.cpp
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message::Message(const MessageIDs::MsgIds& id,
|
||||||
|
const std::string& description,
|
||||||
|
const unsigned short& messageLen) :
|
||||||
|
m_header(id, messageLen),
|
||||||
|
m_description(description)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message::Message(const Message& copy) :
|
||||||
|
m_header(copy.m_header),
|
||||||
|
m_description(copy.m_description)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message::~Message()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message* Message::clone()
|
||||||
|
{
|
||||||
|
return cloneSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Message::format(unsigned char* pBuffer)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_header.format(pBuffer);
|
||||||
|
formatData(pBuffer);
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string Message::getDescription() const
|
||||||
|
{
|
||||||
|
return m_description;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Message::parse(const unsigned char* pData)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_header.parse(pData);
|
||||||
|
parseData(pData + getHeaderLength());
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Message::setMessageLength(const unsigned short& length)
|
||||||
|
{
|
||||||
|
m_header.setMessageLength(length);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string Message::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Message: " << getDescription() << ". " << m_header.toString();
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int Message::getNextDataItem(const unsigned char** pStartBuf, const unsigned char* pEndBuf, int& sizeOfPreviousData)
|
||||||
|
{
|
||||||
|
bool selfThrown = false;
|
||||||
|
int sizeOfDataHeader = 4;
|
||||||
|
int sizeOfData = 0;
|
||||||
|
std::stringstream ssError;
|
||||||
|
|
||||||
|
*pStartBuf += sizeOfPreviousData;
|
||||||
|
ssError << "Data structure is incorrect. Data: " << Util::Strings::ByteArrayToHexString(const_cast<unsigned char*>(*pStartBuf), pEndBuf - *pStartBuf + 1);
|
||||||
|
try {
|
||||||
|
// make sure 4 bytes of header information is present
|
||||||
|
if (*pStartBuf + sizeOfDataHeader > pEndBuf)
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ssError.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeOfData = *(*pStartBuf);
|
||||||
|
|
||||||
|
// we want to make sure the nth header and nth data information match
|
||||||
|
// header tells us how many bytes in the nth data item, and the bytes
|
||||||
|
// of data is present in the buffer
|
||||||
|
if (*pStartBuf + sizeOfDataHeader + sizeOfData -1 <= pEndBuf)
|
||||||
|
{
|
||||||
|
// points to the address of the nth data item
|
||||||
|
*pStartBuf += sizeOfDataHeader;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, ssError.str());
|
||||||
|
}
|
||||||
|
} catch (Exception& e) {
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sizeOfData;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Message::buildByteArray(const unsigned char** pStartBuf, const char* data, const int& sizeOfDataBytes, unsigned int& totalBytesInArray)
|
||||||
|
{
|
||||||
|
// copy the header information for this data item
|
||||||
|
memcpy(const_cast<unsigned char*>(*pStartBuf), &sizeOfDataBytes, sizeof(sizeOfDataBytes));
|
||||||
|
*pStartBuf += sizeof(sizeOfDataBytes);
|
||||||
|
totalBytesInArray += sizeof(sizeOfDataBytes);
|
||||||
|
|
||||||
|
// copy the data for this data item
|
||||||
|
memcpy(const_cast<unsigned char*>(*pStartBuf), data, sizeOfDataBytes);
|
||||||
|
*pStartBuf += sizeOfDataBytes;
|
||||||
|
totalBytesInArray += sizeOfDataBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Message::compareByteNumber(int expectedNumBytes, int actualNumbyte)
|
||||||
|
{
|
||||||
|
bool selfThrown = false;
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (expectedNumBytes != actualNumbyte)
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
|
||||||
|
ss << "Expected number of bytes received: " << expectedNumBytes << ". Actual number of bytes received: " << actualNumbyte;
|
||||||
|
throw Exception(Q_FUNC_INFO, ss.str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception & e) {
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
257
HWIL_Assistant/src/AutomationMessages/Message.hpp
Normal file
257
HWIL_Assistant/src/AutomationMessages/Message.hpp
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
class Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~Message()
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual ~Message();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Clone()
|
||||||
|
//
|
||||||
|
// Purpose: Get a copy of this object
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: a copy of this object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual Message* clone();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ExecuteMessage()
|
||||||
|
//
|
||||||
|
// Purpose: Executes this message
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void executeMessage() = 0;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Format()
|
||||||
|
//
|
||||||
|
// Purpose: Formats this message for sending
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: pBuffer - the buffer to put the formatting data in
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void format(unsigned char* pBuffer);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: GetDescription()
|
||||||
|
//
|
||||||
|
// Purpose: Getter for this objects description
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The description
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual std::string getDescription() const;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: GetMessageID()
|
||||||
|
//
|
||||||
|
// Purpose: Getter for this objects message id
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The id
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual MessageIDs::MsgIds getMessageID() { return m_header.getMessageId(); }
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: GetEntireMessageLength()
|
||||||
|
//
|
||||||
|
// Purpose: Getter for this objects message number of bytes, including the header
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The entire message number of bytes
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual unsigned int getEntireMessageLength() const { return m_header.getMessageLength();}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: GetHeaderLength()
|
||||||
|
//
|
||||||
|
// Purpose: Getter for this objects message number of header bytes
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The header number of bytes
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual unsigned short getHeaderLength() const { return m_header.getHeaderLength();}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Parse()
|
||||||
|
//
|
||||||
|
// Purpose: Takes an array of bytes and populates this object
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: The array of bytes
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: None
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void parse(const unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ToString()
|
||||||
|
//
|
||||||
|
// Purpose: Converts this object into a string
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: None
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The string form of this object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual std::string toString() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Constructor
|
||||||
|
//
|
||||||
|
// Purpose: The constructor for the childern to call
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: id - the message id
|
||||||
|
// description - the message description
|
||||||
|
// messageLen - the number of bytes in the message payload (not including the header)
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
Message(const MessageIDs::MsgIds& id,
|
||||||
|
const std::string& description,
|
||||||
|
const unsigned short& messageLen = 0);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Copy Constructor
|
||||||
|
//
|
||||||
|
// Purpose: Create a copy of this object
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: copy - the object to copy
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
Message(const Message ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: CloneSelf
|
||||||
|
//
|
||||||
|
// Purpose: Pure virtual function for children to implement.
|
||||||
|
// Create a clone of this object
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual Message* cloneSelf() = 0;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: FormatData
|
||||||
|
//
|
||||||
|
// Purpose: Pure virtual function for children to implement.
|
||||||
|
// Format the data
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: pData - the buffer to format to
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void formatData(unsigned char* pData) = 0;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ParseData
|
||||||
|
//
|
||||||
|
// Purpose: Pure virtual function for children to implement.
|
||||||
|
// Parse the data
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: pData - the buffer to parse from
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void parseData(const unsigned char* pData) = 0;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: SetMessageLength
|
||||||
|
//
|
||||||
|
// Purpose: Sets the message length of the payload of the message (not the header)
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: length - the number of bytes in the payload
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void setMessageLength(const unsigned short& length);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: getNextDataItem
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
// get the next data item
|
||||||
|
// data format:
|
||||||
|
// [data header][data][data header][data]...
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
int getNextDataItem(const unsigned char** pStartBuf, const unsigned char* pEndBuf, int& sizeOfPreviousData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: buildByteArray
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
// this will add to the byte array a data item
|
||||||
|
// data format:
|
||||||
|
// [data header][data]
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void buildByteArray(const unsigned char** pStartBuf, const char* data, const int& sizeOfDataBytes, unsigned int& totalBytesInArray);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: compareByteNumber
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void compareByteNumber(int expectedNumBytes, int actualNumbyte);
|
||||||
|
|
||||||
|
MessageHeader m_header;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
Message();
|
||||||
|
Message &operator=(const Message &rhs);
|
||||||
|
|
||||||
|
std::string m_description;
|
||||||
|
};
|
||||||
86
HWIL_Assistant/src/AutomationMessages/MessageHeader.cpp
Normal file
86
HWIL_Assistant/src/AutomationMessages/MessageHeader.cpp
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
#include <sstream>
|
||||||
|
#include <string.h>
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
MessageHeader::MessageHeader(const MessageIDs::MsgIds& id, const unsigned short& messageLen) :
|
||||||
|
m_headerStruct()
|
||||||
|
{
|
||||||
|
m_headerStruct.messageId = id;
|
||||||
|
m_headerStruct.messageLength = messageLen + getHeaderLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
MessageHeader::MessageHeader() :
|
||||||
|
m_headerStruct()
|
||||||
|
{
|
||||||
|
m_headerStruct.messageId = 0;
|
||||||
|
m_headerStruct.messageLength = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
MessageHeader::MessageHeader(const MessageHeader& copy) :
|
||||||
|
m_headerStruct(copy.m_headerStruct)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
MessageHeader::~MessageHeader()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void MessageHeader::format(unsigned char* pData)
|
||||||
|
{
|
||||||
|
memcpy(pData, &m_headerStruct, getHeaderLength());
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
MessageIDs::MsgIds MessageHeader::getMessageId()
|
||||||
|
{
|
||||||
|
return (MessageIDs::MsgIds)m_headerStruct.messageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
unsigned short MessageHeader::getHeaderLength() const
|
||||||
|
{
|
||||||
|
return sizeof(m_headerStruct);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
unsigned int MessageHeader::getMessageLength() const
|
||||||
|
{
|
||||||
|
return m_headerStruct.messageLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void MessageHeader::parse(const unsigned char* pData)
|
||||||
|
{
|
||||||
|
::memcpy(&m_headerStruct, pData, getHeaderLength());
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void MessageHeader::setMessageLength(const unsigned short& length)
|
||||||
|
{
|
||||||
|
m_headerStruct.messageLength = length + getHeaderLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string MessageHeader::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "msg id: 0x" << std::hex << std::uppercase << m_headerStruct.messageId << std::nouppercase << ". " << "msg len: " << std::dec << m_headerStruct.messageLength;
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
163
HWIL_Assistant/src/AutomationMessages/MessageHeader.hpp
Normal file
163
HWIL_Assistant/src/AutomationMessages/MessageHeader.hpp
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
|
||||||
|
class MessageHeader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: MessageHeader
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: id - the message id
|
||||||
|
// messageLen - the number of bytes of the entire message including the header
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
MessageHeader(const MessageIDs::MsgIds& id, const unsigned short& messageLen);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: MessageHeader
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
MessageHeader();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Copy Constructor
|
||||||
|
//
|
||||||
|
// Purpose: Create a copy of this object
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: copy - the object to copy
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
MessageHeader(const MessageHeader ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~MessageHeader()
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual ~MessageHeader();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Format()
|
||||||
|
//
|
||||||
|
// Purpose: Formats this message for sending
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: pBuffer - the buffer to put the formatting data in
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void format(unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: GetHeaderLength()
|
||||||
|
//
|
||||||
|
// Purpose: Get the number of bytes in the header
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: number of bytes in the header
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
unsigned short getHeaderLength() const;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: GetMessageLength()
|
||||||
|
//
|
||||||
|
// Purpose: Get the number of bytes in the entire message, including header
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: number of bytes in the message
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
unsigned int getMessageLength() const;
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: GetMessageId()
|
||||||
|
//
|
||||||
|
// Purpose: Get the message id
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: the message id
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
MessageIDs::MsgIds getMessageId();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Parse()
|
||||||
|
//
|
||||||
|
// Purpose: Takes an array of bytes and populates this object
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: The array of bytes
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: None
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void parse(const unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: SetMessageLength
|
||||||
|
//
|
||||||
|
// Purpose: Sets the message length of the payload of the message (not the header)
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: length - the number of bytes in the payload
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void setMessageLength(const unsigned short& length);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ToString()
|
||||||
|
//
|
||||||
|
// Purpose: Converts this object into a string
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: None
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: The string form of this object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
std::string toString() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
MessageHeader &operator=(const MessageHeader &rhs);
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
struct HeaderStruct
|
||||||
|
{
|
||||||
|
unsigned int messageId;
|
||||||
|
unsigned int messageLength;
|
||||||
|
};
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
HeaderStruct m_headerStruct;
|
||||||
|
};
|
||||||
33
HWIL_Assistant/src/AutomationMessages/MessageIDs.hpp
Normal file
33
HWIL_Assistant/src/AutomationMessages/MessageIDs.hpp
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
namespace MessageIDs
|
||||||
|
{
|
||||||
|
enum MsgIds
|
||||||
|
{
|
||||||
|
ARE_YOU_THERE_CMD = 0xCA001004,
|
||||||
|
SCENARIO_STARTED_CMD = 0xCA001005,
|
||||||
|
SCENARIO_STOPPED_CMD = 0xCA001006,
|
||||||
|
|
||||||
|
WAIT_FOR_COMPLETION_CMD = 0xCA002000,
|
||||||
|
|
||||||
|
GENERIC_RSP = 0xCA002001,
|
||||||
|
ARE_YOU_THERE_RSP = 0xCA002002
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
#include <sstream>
|
||||||
|
#include <string.h>
|
||||||
|
#include "WaitForLastTaskCompletionCmdMessage.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "GenericRspMessage.hpp"
|
||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
|
||||||
|
bool WaitForLastTaskCompletionCmdMessage::s_commandCompletionSuccess = true;
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
WaitForLastTaskCompletionCmdMessage::WaitForLastTaskCompletionCmdMessage():
|
||||||
|
Message(MessageIDs::WAIT_FOR_COMPLETION_CMD, "WAIT_FOR_COMPLETION_CMD")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
WaitForLastTaskCompletionCmdMessage::WaitForLastTaskCompletionCmdMessage(const WaitForLastTaskCompletionCmdMessage& copy) :
|
||||||
|
Message(copy)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
WaitForLastTaskCompletionCmdMessage::~WaitForLastTaskCompletionCmdMessage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Message* WaitForLastTaskCompletionCmdMessage::cloneSelf()
|
||||||
|
{
|
||||||
|
WaitForLastTaskCompletionCmdMessage* pMsg = new WaitForLastTaskCompletionCmdMessage(*this);
|
||||||
|
return pMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void WaitForLastTaskCompletionCmdMessage::executeMessage()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Condition& event = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTION_COMPLETE);
|
||||||
|
event.wait(false);
|
||||||
|
|
||||||
|
GenericRspMessage rsp(s_commandCompletionSuccess);
|
||||||
|
|
||||||
|
UdpSocketMgr::Instance().sendAMessage(rsp);
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void WaitForLastTaskCompletionCmdMessage::formatData(unsigned char*)
|
||||||
|
{
|
||||||
|
// no data to send
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void WaitForLastTaskCompletionCmdMessage::parseData(const unsigned char*)
|
||||||
|
{
|
||||||
|
// no data to process
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::string WaitForLastTaskCompletionCmdMessage::toString() const
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << "";
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "MessageIDs.hpp"
|
||||||
|
#include "MessageHeader.hpp"
|
||||||
|
|
||||||
|
class WaitForLastTaskCompletionCmdMessage : public Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: WaitForLastTaskCompletionCmdMessage
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
WaitForLastTaskCompletionCmdMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: WaitForLastTaskCompletionCmdMessage
|
||||||
|
//
|
||||||
|
// Purpose: copy constructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
WaitForLastTaskCompletionCmdMessage(const WaitForLastTaskCompletionCmdMessage ©);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~WaitForLastTaskCompletionCmdMessage
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual ~WaitForLastTaskCompletionCmdMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ExecuteMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void executeMessage();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ToString
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual std::string toString() const;
|
||||||
|
|
||||||
|
// indicate command executed successfully or not
|
||||||
|
static bool s_commandCompletionSuccess;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: CloneSelf
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual Message* cloneSelf();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: FormatData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void formatData(unsigned char* pData);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ParseData
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
virtual void parseData(const unsigned char* pData);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
WaitForLastTaskCompletionCmdMessage &operator=(const WaitForLastTaskCompletionCmdMessage &rhs);
|
||||||
|
};
|
||||||
201
HWIL_Assistant/src/Comm/UdpSocket.cpp
Normal file
201
HWIL_Assistant/src/Comm/UdpSocket.cpp
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
#include <cerrno>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string.h>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <QUdpSocket>
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
#include "UdpSocket.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "AutomationMsgParser.hpp"
|
||||||
|
#include "AutomationMsgHandler.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UdpSocket::UdpSocket(const int& localPort):
|
||||||
|
m_localPort(localPort),
|
||||||
|
m_sock(0)
|
||||||
|
{
|
||||||
|
bool selfThrown = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_sock = new QUdpSocket();
|
||||||
|
|
||||||
|
if (!m_sock->bind(QHostAddress::AnyIPv4, m_localPort))
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, "QUdpSocket.bind() fails");
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(m_sock, SIGNAL(readyRead()), this, SLOT(readCallBack()));
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UdpSocket::UdpSocket(const int& localPort, const int& remotePort, const std::string& remoteAddr):
|
||||||
|
m_localPort(localPort),
|
||||||
|
m_remotePort(remotePort),
|
||||||
|
m_remoteAddr(remoteAddr),
|
||||||
|
m_sock(0)
|
||||||
|
{
|
||||||
|
bool selfThrown = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_sock = new QUdpSocket();
|
||||||
|
|
||||||
|
if (!m_sock->bind(QHostAddress::AnyIPv4, m_localPort))
|
||||||
|
{
|
||||||
|
selfThrown = true;
|
||||||
|
throw Exception(Q_FUNC_INFO, "QUdpSocket.bind() fails");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
if (!selfThrown)
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UdpSocket::~UdpSocket()
|
||||||
|
{
|
||||||
|
if (m_sock != 0)
|
||||||
|
delete m_sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void UdpSocket::readCallBack()
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// when data comes in
|
||||||
|
QByteArray buffer;
|
||||||
|
buffer.resize(m_sock->pendingDatagramSize());
|
||||||
|
|
||||||
|
QHostAddress sender;
|
||||||
|
quint16 senderPort;
|
||||||
|
|
||||||
|
qint64 sizeRead = m_sock->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);
|
||||||
|
|
||||||
|
m_remoteAddr = sender.toString().toStdString();
|
||||||
|
m_remotePort = senderPort;
|
||||||
|
ss << "\nReceived command from: " << sender.toString().toStdString() << ", port: " << senderPort;
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(ss.str());
|
||||||
|
|
||||||
|
qDebug() << "Message from: " << sender.toString();
|
||||||
|
qDebug() << "Message port: " << senderPort;
|
||||||
|
|
||||||
|
qDebug() << "Message: " << QString::fromStdString(Util::Strings::ByteArrayToHexString(buffer));
|
||||||
|
|
||||||
|
qDebug() << "Number of bytes: " << sizeRead;
|
||||||
|
|
||||||
|
unsigned int msgId = 0;
|
||||||
|
try {
|
||||||
|
AutomationMsgParser::instance().parseMsg(reinterpret_cast<unsigned char*>(buffer.data()), static_cast<int>(sizeRead), &msgId);
|
||||||
|
|
||||||
|
AutomationMsgHandler::instance().handleMsg(reinterpret_cast<unsigned char*>(buffer.data()), msgId);
|
||||||
|
|
||||||
|
ss.str("");
|
||||||
|
ss << "\nProcess message " << std::hex << msgId << " successful";
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(ss.str());
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
|
||||||
|
ss.str("");
|
||||||
|
ss << "\nProcess ";
|
||||||
|
|
||||||
|
if (msgId > 0)
|
||||||
|
ss << "message " << std::hex << msgId;
|
||||||
|
else
|
||||||
|
ss << "command";
|
||||||
|
|
||||||
|
ss << " failed";
|
||||||
|
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(ss.str());
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
ErrorLog::Instance().log(e.getMessage(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
ss.str("");
|
||||||
|
ss << "\nWaiting for command...";
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void UdpSocket::read(unsigned char* dataBuf, int& dataSize)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// when data comes in
|
||||||
|
QByteArray buffer;
|
||||||
|
buffer.resize(m_sock->pendingDatagramSize());
|
||||||
|
|
||||||
|
QHostAddress sender;
|
||||||
|
quint16 senderPort;
|
||||||
|
|
||||||
|
if (buffer.size() > 0)
|
||||||
|
{
|
||||||
|
qint64 sizeRead = m_sock->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);
|
||||||
|
|
||||||
|
m_remoteAddr = sender.toString().toStdString();
|
||||||
|
m_remotePort = senderPort;
|
||||||
|
|
||||||
|
dataSize = sizeRead;
|
||||||
|
|
||||||
|
if (dataSize > 0)
|
||||||
|
memcpy(dataBuf, reinterpret_cast<unsigned char*>(buffer.data()), dataSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
|
||||||
|
ErrorLog::Instance().log(e.getMessage(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void UdpSocket::write(const unsigned char* pDataToWrite, const unsigned int& numBytesToWrite)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
QByteArray databuf;
|
||||||
|
databuf = QByteArray(reinterpret_cast<const char*>(pDataToWrite), numBytesToWrite);
|
||||||
|
|
||||||
|
QHostAddress remoteHost(m_remoteAddr.c_str());
|
||||||
|
m_sock->writeDatagram(databuf, remoteHost, m_remotePort);
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
97
HWIL_Assistant/src/Comm/UdpSocket.hpp
Normal file
97
HWIL_Assistant/src/Comm/UdpSocket.hpp
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class QUdpSocket;
|
||||||
|
|
||||||
|
class UdpSocket: public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: UdpSocket()
|
||||||
|
//
|
||||||
|
// Purpose: Constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: the object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
UdpSocket(const int& localPort);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: UdpSocket()
|
||||||
|
//
|
||||||
|
// Purpose: Constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: the object
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
UdpSocket(const int& localPort, const int& remotePort, const std::string& remoteAddr);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~UdpSocket
|
||||||
|
//
|
||||||
|
// Purpose: Destroyer
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
~UdpSocket();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Read
|
||||||
|
//
|
||||||
|
// Purpose: Read from the socket
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void read(unsigned char* dataBuf, int& dataSize);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Write
|
||||||
|
//
|
||||||
|
// Purpose: Write to the socket
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: number of bytes written
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void write(const unsigned char* pDataToWrite, const unsigned int& numBytesToWrite);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void readCallBack();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// dont allow
|
||||||
|
UdpSocket(const UdpSocket& rhs);
|
||||||
|
UdpSocket& operator=(const UdpSocket& rhs);
|
||||||
|
|
||||||
|
int m_localPort;
|
||||||
|
int m_remotePort;
|
||||||
|
std::string m_remoteAddr;
|
||||||
|
QUdpSocket *m_sock;
|
||||||
|
};
|
||||||
|
|
||||||
95
HWIL_Assistant/src/Comm/UdpSocketMgr.cpp
Normal file
95
HWIL_Assistant/src/Comm/UdpSocketMgr.cpp
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "UdpSocket.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "Message.hpp"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QDateTime>
|
||||||
|
#include <QRegularExpression>
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UdpSocketMgr& UdpSocketMgr::Instance()
|
||||||
|
{
|
||||||
|
static UdpSocketMgr proc;
|
||||||
|
return proc;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UdpSocketMgr::UdpSocketMgr():
|
||||||
|
m_udpSock(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void UdpSocketMgr::deleteSocket()
|
||||||
|
{
|
||||||
|
if (m_udpSock != 0)
|
||||||
|
{
|
||||||
|
delete m_udpSock;
|
||||||
|
m_udpSock = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UdpSocketMgr::~UdpSocketMgr()
|
||||||
|
{
|
||||||
|
if (m_udpSock != 0)
|
||||||
|
delete m_udpSock;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void UdpSocketMgr::setUpUdpSocket()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int localPort = LinuxProc::Instance().getConfig().getInt("GENERAL", "CMD_LOCAL_PORT");
|
||||||
|
|
||||||
|
m_udpSock = new UdpSocket(localPort);
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Setting up UDP socket, local port: " << localPort;
|
||||||
|
ss << "\n\nWaiting for command...";
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(ss.str());
|
||||||
|
|
||||||
|
} catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void UdpSocketMgr::sendAMessage(Message &msg)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// just need a buffer big enough for outgoing commands
|
||||||
|
const unsigned int BUF_SIZE = 1024;
|
||||||
|
|
||||||
|
unsigned char data[BUF_SIZE];
|
||||||
|
|
||||||
|
msg.format(data);
|
||||||
|
|
||||||
|
m_udpSock->write(data, msg.getEntireMessageLength());
|
||||||
|
|
||||||
|
} catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
100
HWIL_Assistant/src/Comm/UdpSocketMgr.hpp
Normal file
100
HWIL_Assistant/src/Comm/UdpSocketMgr.hpp
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#ifndef UDPSOCKETMGR_H
|
||||||
|
#define UDPSOCKETMGR_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class UdpSocket;
|
||||||
|
class Message;
|
||||||
|
|
||||||
|
class UdpSocketMgr : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: instance
|
||||||
|
//
|
||||||
|
// Purpose: singleton
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
static UdpSocketMgr& Instance();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~UdpSocketMgr
|
||||||
|
//
|
||||||
|
// Purpose: Destroyer
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
~UdpSocketMgr();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: sendAMessage
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void sendAMessage(Message& msg);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: deleteSocket
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void deleteSocket();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: setUpUdpSocket
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void setUpUdpSocket();
|
||||||
|
|
||||||
|
private:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: UdpSocketMgr
|
||||||
|
//
|
||||||
|
// Purpose: Ctor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
UdpSocketMgr();
|
||||||
|
|
||||||
|
UdpSocket* m_udpSock;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
3
HWIL_Assistant/src/Common/Constants.cpp
Normal file
3
HWIL_Assistant/src/Common/Constants.cpp
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#include "Constants.hpp"
|
||||||
|
|
||||||
|
std::map<Constants::ComputerHosts, std::string> Constants::ConfigSectionNameMapping::sectionMap = Constants::ConfigSectionNameMapping::createMap();
|
||||||
32
HWIL_Assistant/src/Common/Constants.hpp
Normal file
32
HWIL_Assistant/src/Common/Constants.hpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
namespace Constants
|
||||||
|
{
|
||||||
|
enum class ComputerHosts
|
||||||
|
{
|
||||||
|
VIDEO_PC,
|
||||||
|
SWDEV_PC,
|
||||||
|
SIXDOF_PC,
|
||||||
|
UNKNOWN_PC,
|
||||||
|
NUM_COMPUTER_HOSTS
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ConfigSectionNameMapping
|
||||||
|
{
|
||||||
|
static std::map<ComputerHosts, std::string> createMap()
|
||||||
|
{
|
||||||
|
std::map<ComputerHosts, std::string> map {
|
||||||
|
{ComputerHosts::VIDEO_PC, "VIDEO_COMPUTER"},
|
||||||
|
{ComputerHosts::SWDEV_PC, "SWDEV_COMPUTER"},
|
||||||
|
{ComputerHosts::SIXDOF_PC, "SIXDOF_COMPUTER"}
|
||||||
|
};
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::map<ComputerHosts, std::string> sectionMap;
|
||||||
|
};
|
||||||
|
}
|
||||||
159
HWIL_Assistant/src/Common/Util.cpp
Normal file
159
HWIL_Assistant/src/Common/Util.cpp
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <cmath>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <utime.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QRegularExpression>
|
||||||
|
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "MiscUtil.hpp"
|
||||||
|
#include "DateTimeUtil.hpp"
|
||||||
|
#include "FileSystemUtil.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "Timestamp.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Util::KillProcess(const std::string& processName, bool updateMainWindow)
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
bool processRunning = false;
|
||||||
|
std::string cmd = "";
|
||||||
|
|
||||||
|
for (int i=1; i<=6; i++)
|
||||||
|
{
|
||||||
|
std::map<std::string,std::string> processToUserMap = Util::Misc::GetUsersOfRunningProcess(processName);
|
||||||
|
|
||||||
|
if (processToUserMap.size() > 0)
|
||||||
|
{
|
||||||
|
processRunning = true;
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Sending KILL signal to process " << processName;
|
||||||
|
if (updateMainWindow)
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(ss.str());
|
||||||
|
else
|
||||||
|
ErrorLog::Instance().log(ss.str(), false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
// send KILL signal to telemetry app
|
||||||
|
if (i <= 3)
|
||||||
|
cmd = "kill -s INT "; // kill gracefully
|
||||||
|
else
|
||||||
|
cmd = "kill -9 "; // kill forcefully
|
||||||
|
|
||||||
|
cmd += processToUserMap.begin()->first;
|
||||||
|
system(cmd.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
success = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Util::DateTime::Sleep(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (processRunning)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Killing " << processName << " ";
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
ss << "successful";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ss << "failed";
|
||||||
|
|
||||||
|
if (updateMainWindow)
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(ss.str());
|
||||||
|
else
|
||||||
|
ErrorLog::Instance().log(ss.str(), false, ErrorLog::INFO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void Util::PerformLogCleanUp(std::string logPath, std::string fileNameRegexPattern)
|
||||||
|
{
|
||||||
|
QDir sourceDir(logPath.c_str());
|
||||||
|
QStringList tempList = Util::FileSystem::GetListOfFilesInADirectory(sourceDir, false);
|
||||||
|
QMap<qint64, QString> msecsToFileMap;
|
||||||
|
int maxConsecutiveFileRemovals = 10;
|
||||||
|
int consecutiveFileRemovalFails = 0;
|
||||||
|
|
||||||
|
for ( int i = 0; i < tempList.size(); i++ )
|
||||||
|
{
|
||||||
|
QRegularExpression re(fileNameRegexPattern.c_str(), QRegularExpression::CaseInsensitiveOption);
|
||||||
|
|
||||||
|
QRegularExpressionMatch match = re.match(tempList[i]);
|
||||||
|
|
||||||
|
if (match.hasMatch()) {
|
||||||
|
QFileInfo fi(tempList[i]);
|
||||||
|
|
||||||
|
if (fi.size() > 0)
|
||||||
|
{
|
||||||
|
msecsToFileMap[fi.lastModified().toMSecsSinceEpoch()] = tempList[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QFile file(tempList[i]);
|
||||||
|
if (!file.remove())
|
||||||
|
{
|
||||||
|
ErrorLog::Instance().log("Cannot remove file " + tempList[i].toStdString(), false, ErrorLog::ERROR);
|
||||||
|
consecutiveFileRemovalFails++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
consecutiveFileRemovalFails = 0;
|
||||||
|
|
||||||
|
if (consecutiveFileRemovalFails == maxConsecutiveFileRemovals)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
consecutiveFileRemovalFails = 0;
|
||||||
|
QDateTime now = QDateTime::currentDateTime();
|
||||||
|
// keep logs that were created in the last 7 days
|
||||||
|
qint64 numDaysToKeepLogs = 7;
|
||||||
|
int MAX_NUM_LOGS_TO_KEEP = 30;
|
||||||
|
|
||||||
|
for (auto it = msecsToFileMap.begin(); it != msecsToFileMap.end();)
|
||||||
|
{
|
||||||
|
QFileInfo fi(it.value());
|
||||||
|
if (msecsToFileMap.size() > MAX_NUM_LOGS_TO_KEEP || fi.lastModified().daysTo(now) > numDaysToKeepLogs)
|
||||||
|
{
|
||||||
|
QFile file(it.value());
|
||||||
|
if (!file.remove())
|
||||||
|
{
|
||||||
|
ErrorLog::Instance().log("Cannot remove file " + it.value().toStdString(), false, ErrorLog::ERROR);
|
||||||
|
consecutiveFileRemovalFails++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
consecutiveFileRemovalFails = 0;
|
||||||
|
|
||||||
|
it = msecsToFileMap.erase(it);
|
||||||
|
|
||||||
|
if (consecutiveFileRemovalFails == maxConsecutiveFileRemovals)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
52
HWIL_Assistant/src/Common/Util.hpp
Normal file
52
HWIL_Assistant/src/Common/Util.hpp
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDirIterator>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
|
#include "Timestamp.hpp"
|
||||||
|
|
||||||
|
namespace Util
|
||||||
|
{
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: KillProcess
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void KillProcess(const std::string& processName, bool updateMainWindow = true);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: KillProcess
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void PerformLogCleanUp(std::string logPath, std::string fileNameRegexPattern);
|
||||||
|
}
|
||||||
69
HWIL_Assistant/src/Config/ConfigFileManager.cpp
Normal file
69
HWIL_Assistant/src/Config/ConfigFileManager.cpp
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#include "ConfigFileManager.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
|
||||||
|
#include <QRegularExpression>
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ConfigFileManager& ConfigFileManager::Instance()
|
||||||
|
{
|
||||||
|
static ConfigFileManager confgMgr;
|
||||||
|
return confgMgr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ConfigFileManager::ConfigFileManager()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ConfigFileManager::~ConfigFileManager()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void ConfigFileManager::parseLogInfo(std::string sectionName)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
std::vector<std::string> iniKeys;
|
||||||
|
LinuxProc::Instance().getConfig().getKeys(sectionName, iniKeys);
|
||||||
|
|
||||||
|
std::vector<std::string>::iterator it;
|
||||||
|
for (it = iniKeys.begin(); it != iniKeys.end(); it++)
|
||||||
|
{
|
||||||
|
QRegularExpression re("^(test_data\\d+)[^\\d].+", QRegularExpression::CaseInsensitiveOption);
|
||||||
|
QRegularExpressionMatch match = re.match(std::string(*it).c_str());
|
||||||
|
if (match.hasMatch()) {
|
||||||
|
std::string uniqueKey = match.captured(1).toStdString();
|
||||||
|
if (m_testDataMap.find(uniqueKey) == m_testDataMap.end())
|
||||||
|
{
|
||||||
|
std::string key = uniqueKey + "_path";
|
||||||
|
|
||||||
|
TestDataInfo testData;
|
||||||
|
testData.path = LinuxProc::Instance().getConfig().getString(sectionName, key);
|
||||||
|
key = uniqueKey + "_FILE_REGEX_PATTERNS";
|
||||||
|
testData.fileRegexPatterns = LinuxProc::Instance().getConfig().getString(sectionName, key);
|
||||||
|
key = uniqueKey + "_TRANSFER_TYPE";
|
||||||
|
if (Util::Strings::StringsAreEqual(LinuxProc::Instance().getConfig().getString(sectionName, key), "move"))
|
||||||
|
{
|
||||||
|
testData.transferType = FileTransferType::MOVE;
|
||||||
|
}
|
||||||
|
key = uniqueKey + "_PERFORM_CLEAN_UP";
|
||||||
|
testData.performCleanUp = LinuxProc::Instance().getConfig().getBool(sectionName, key);
|
||||||
|
|
||||||
|
m_testDataMap[uniqueKey] = testData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
122
HWIL_Assistant/src/Config/ConfigFileManager.hpp
Normal file
122
HWIL_Assistant/src/Config/ConfigFileManager.hpp
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CustomDataTypes.hpp"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include<vector>
|
||||||
|
|
||||||
|
class ConfigFileManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum class FileTransferType
|
||||||
|
{
|
||||||
|
COPY,
|
||||||
|
MOVE
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TestDataInfo
|
||||||
|
{
|
||||||
|
std::string path;
|
||||||
|
std::string fileRegexPatterns;
|
||||||
|
FileTransferType transferType;
|
||||||
|
bool performCleanUp;
|
||||||
|
|
||||||
|
TestDataInfo():
|
||||||
|
path(),
|
||||||
|
fileRegexPatterns(),
|
||||||
|
transferType(FileTransferType::COPY),
|
||||||
|
performCleanUp(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static ConfigFileManager& Instance();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~ConfigFileManager()
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
~ConfigFileManager();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: parseLogInfo()
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void parseLogInfo(std::string sectionName);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: getLogMap()
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
std::map<std::string, TestDataInfo, CustomDataTypes::ci_less> getTestDataMap(){return m_testDataMap;}
|
||||||
|
|
||||||
|
private:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ConfigFileManager()
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
ConfigFileManager();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ConfigFileManager()
|
||||||
|
//
|
||||||
|
// Purpose: copy constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: const ConfigFileManager & - reference to ConfigFileManager obj
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
ConfigFileManager(const ConfigFileManager &rhs);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: operator&()
|
||||||
|
//
|
||||||
|
// Purpose: assignment operator
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: const ConfigFileManager & - reference to ConfigFileManager obj
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: reference to ConfigFileManager obj
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
ConfigFileManager &operator=(const ConfigFileManager &);
|
||||||
|
|
||||||
|
std::map<std::string, TestDataInfo, CustomDataTypes::ci_less> m_testDataMap;
|
||||||
|
};
|
||||||
68
HWIL_Assistant/src/Config/config.ini
Normal file
68
HWIL_Assistant/src/Config/config.ini
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
[GENERAL]
|
||||||
|
APP_SINGLETON_LOCAL_PORT = 44453
|
||||||
|
|
||||||
|
CMD_LOCAL_PORT = 44454
|
||||||
|
|
||||||
|
SHOW_MAIN_WINDOW = false
|
||||||
|
|
||||||
|
# true - log everything for debugging purposes
|
||||||
|
# false - minimum debugging
|
||||||
|
VERBOSE_LOGGING = TRUE
|
||||||
|
|
||||||
|
BASE_TEST_DATA_PATH = /duc_file_server/TestData/
|
||||||
|
|
||||||
|
[SWDEV_COMPUTER]
|
||||||
|
COMPUTER_NAME_REGEX_PATTERN = -swdev$
|
||||||
|
#COMPUTER_NAME_REGEX_PATTERN = -6700k$
|
||||||
|
SHOW_MAIN_WINDOW = true
|
||||||
|
RUN_TELEMETRY = true
|
||||||
|
#TELEMETRY_APP_PATH = /net/netapp01/vol/vol1/home/dle/Devshed/Development/Linux/Telemetry/tlm
|
||||||
|
TELEMETRY_APP_PATH = /duc_file_server/Programming/C_CPP/UdpServer/UdpServer/Debug/UdpServer
|
||||||
|
|
||||||
|
# If more than one host is moving data to main repository, only one computer should create the test folder while all other must wait
|
||||||
|
# until the folder is created
|
||||||
|
WAIT_TIME_BEFORE_CREATING_TEST_DATA_FOLDER = 3
|
||||||
|
|
||||||
|
TEST_DATA1_PATH = /duc_file_server/Programming/QTCreator/HWIL_Assistant/HWIL_Assistant/build_x64_debug/Output_Test
|
||||||
|
TEST_DATA1_FILE_REGEX_PATTERNS = _log\.txt
|
||||||
|
TEST_DATA1_TRANSFER_TYPE = move
|
||||||
|
TEST_DATA1_PERFORM_CLEAN_UP = true
|
||||||
|
|
||||||
|
#TEST_DATA2_PATH = /duc_file_server/Programming/QTCreator/HWIL_Assistant/HWIL_Assistant/build_x64_debug/Output_Test
|
||||||
|
#TEST_DATA2_FILE_REGEX_PATTERN = ^log*
|
||||||
|
#TEST_DATA2_TRANSFER_TYPE = move
|
||||||
|
#TEST_DATA2_PERFORM_CLEAN_UP = true
|
||||||
|
|
||||||
|
[SIXDOF_COMPUTER]
|
||||||
|
#COMPUTER_NAME_REGEX_PATTERN = -6dof$
|
||||||
|
COMPUTER_NAME_REGEX_PATTERN = -6700k$
|
||||||
|
SHOW_MAIN_WINDOW = true
|
||||||
|
|
||||||
|
RUN_HOSTBUS = true
|
||||||
|
HOSTBUS_APP_PATH = /duc_file_server/Programming/C_CPP/UdpServer/UdpServer/Debug/UdpServer
|
||||||
|
|
||||||
|
RUN_SIXDOF = true
|
||||||
|
SIXDOF_APP_PATH = /duc_file_server/Programming/C_CPP/UdpClient/UdpClient/Debug/UdpClient
|
||||||
|
|
||||||
|
# If more than one host is moving data to main repository, only one computer should create the test folder while all other must wait
|
||||||
|
# until the folder is created
|
||||||
|
WAIT_TIME_BEFORE_CREATING_TEST_DATA_FOLDER = 4
|
||||||
|
|
||||||
|
TEST_DATA1_PATH = /duc_file_server/Programming/QTCreator/HWIL_Assistant/HWIL_Assistant/build_x64_debug/Output_Test
|
||||||
|
TEST_DATA1_FILE_REGEX_PATTERNS = _log\.txt
|
||||||
|
TEST_DATA1_TRANSFER_TYPE = move
|
||||||
|
TEST_DATA1_PERFORM_CLEAN_UP = true
|
||||||
|
|
||||||
|
#TEST_DATA2_PATH = /duc_file_server/Programming/QTCreator/HWIL_Assistant/HWIL_Assistant/build_x64_debug/Output_Test
|
||||||
|
#TEST_DATA2_FILE_REGEX_PATTERN = ^log*
|
||||||
|
#TEST_DATA2_TRANSFER_TYPE = move
|
||||||
|
#TEST_DATA2_PERFORM_CLEAN_UP = true
|
||||||
|
|
||||||
|
[VIDEO_COMPUTER]
|
||||||
|
#COMPUTER_NAME_REGEX_PATTERN = -vcs$
|
||||||
|
COMPUTER_NAME_REGEX_PATTERN = -6700k$
|
||||||
|
SHOW_MAIN_WINDOW = true
|
||||||
|
|
||||||
|
# If more than one host is moving data to main repository, only one computer should create the test folder while all other must wait
|
||||||
|
# until the folder is created
|
||||||
|
WAIT_TIME_BEFORE_CREATING_TEST_DATA_FOLDER = 5
|
||||||
320
HWIL_Assistant/src/LinuxProc.cpp
Normal file
320
HWIL_Assistant/src/LinuxProc.cpp
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "FileTransferDialog.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
#include "Timestamp.hpp"
|
||||||
|
#include "FileSystemUtil.hpp"
|
||||||
|
#include "DateTimeUtil.hpp"
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
#include "MiscUtil.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "UdpSocket.hpp"
|
||||||
|
#include "Message.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "FileTransferThread.hpp"
|
||||||
|
#include "NetworkingThread.hpp"
|
||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
#include "ConfigFileManager.hpp"
|
||||||
|
#include "KwScenarioStartedMessage.hpp"
|
||||||
|
#include "AreYouThereCmdMessage.hpp"
|
||||||
|
#include "RunAppThread.hpp"
|
||||||
|
#include "AutomationMsgParser.hpp"
|
||||||
|
#include "AreYouThereRspMessage.hpp"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QDateTime>
|
||||||
|
#include <QRegularExpression>
|
||||||
|
#include <QMap>
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
LinuxProc& LinuxProc::Instance()
|
||||||
|
{
|
||||||
|
static LinuxProc proc;
|
||||||
|
return proc;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
LinuxProc::LinuxProc():
|
||||||
|
Proc(),
|
||||||
|
m_pMainWindow(0),
|
||||||
|
m_pFileTransferDialog(0),
|
||||||
|
m_iniFile(0),
|
||||||
|
m_eventMap(),
|
||||||
|
m_fileTransferThread(0),
|
||||||
|
m_networkingThread(0),
|
||||||
|
m_runHostBusThread(0),
|
||||||
|
m_computerName(Constants::ComputerHosts::UNKNOWN_PC)
|
||||||
|
{
|
||||||
|
// all singleton classes aka [class]::instance() need to be instantiated here as they create static variables
|
||||||
|
// they all should also be instantiated in one thread, preferable the main thread. Instantiating them in multiple
|
||||||
|
// threads will make it hard for us to synchronize their destructions, as static variables are destroyed in the order
|
||||||
|
// they were created per thread
|
||||||
|
|
||||||
|
// all static variables are destroyed in the reverse order they were created per thread
|
||||||
|
// so any static variables that are dependent upon need to be instantiated first so they will be destroyed last
|
||||||
|
// Proc is the last variable to be instantiated and the first static variable to be destroyed
|
||||||
|
// as it needs to coordinate the destruction of all variables created on the heap
|
||||||
|
try {
|
||||||
|
initEvents();
|
||||||
|
|
||||||
|
// at startup, there's no command executing, so we assume this event should be signaled
|
||||||
|
getEvent(EventNames::COMMAND_EXECUTION_COMPLETE).signal();
|
||||||
|
|
||||||
|
std::string exePath = Util::FileSystem::BuildPath(QCoreApplication::applicationDirPath().toStdString());
|
||||||
|
|
||||||
|
std::string configFilePath = Util::FileSystem::BuildPath(exePath,"config.ini");
|
||||||
|
|
||||||
|
m_iniFile = new IniFile(configFilePath);
|
||||||
|
|
||||||
|
testAppSingleton();
|
||||||
|
|
||||||
|
std::string logPath = Util::FileSystem::BuildPath(exePath,"Output");
|
||||||
|
|
||||||
|
Util::FileSystem::CreateDirectory(logPath);
|
||||||
|
|
||||||
|
Util::PerformLogCleanUp(logPath, "_log\\.txt");
|
||||||
|
|
||||||
|
Timestamp time;
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << time.GetCurrentDateTimeString(Timestamp::DateTimeFormat::YYYYMMDD) << "_" << Timestamp::GetCurrentDateTimeString(Timestamp::DateTimeFormat::HHMMSS, "_") << "_log.txt";
|
||||||
|
|
||||||
|
ErrorLog::Instance(Util::FileSystem::BuildPath(logPath,ss.str()));
|
||||||
|
|
||||||
|
ConfigFileManager::Instance();
|
||||||
|
|
||||||
|
UdpSocketMgr::Instance();
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
LinuxProc::~LinuxProc()
|
||||||
|
{
|
||||||
|
LinuxProc::Instance().getEvent(EventNames::GLOBAL_QUIT).signal();
|
||||||
|
|
||||||
|
if (m_networkingThread != 0)
|
||||||
|
{
|
||||||
|
m_networkingThread->quit();
|
||||||
|
m_networkingThread->wait();
|
||||||
|
delete m_networkingThread;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_fileTransferThread != 0)
|
||||||
|
{
|
||||||
|
m_fileTransferThread->quit();
|
||||||
|
m_fileTransferThread->waitForThreadToExit();
|
||||||
|
delete m_fileTransferThread;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KwScenarioStartedMessage::getRunAppThread() != 0)
|
||||||
|
{
|
||||||
|
KwScenarioStartedMessage::getRunAppThread()->quit();
|
||||||
|
KwScenarioStartedMessage::getRunAppThread()->waitForThreadToExit();
|
||||||
|
delete KwScenarioStartedMessage::getRunAppThread();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_runHostBusThread != 0)
|
||||||
|
{
|
||||||
|
m_runHostBusThread->quit();
|
||||||
|
m_runHostBusThread->waitForThreadToExit();
|
||||||
|
delete m_runHostBusThread;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pMainWindow != 0)
|
||||||
|
{
|
||||||
|
delete m_pMainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pFileTransferDialog != 0)
|
||||||
|
{
|
||||||
|
delete m_pFileTransferDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_iniFile != 0)
|
||||||
|
{
|
||||||
|
delete m_iniFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete events
|
||||||
|
std::map<std::string, Condition *>::iterator eventIt;
|
||||||
|
for (eventIt = m_eventMap.begin(); eventIt != m_eventMap.end(); ++eventIt)
|
||||||
|
{
|
||||||
|
//std::string name = eventIt->second->GetName();
|
||||||
|
delete eventIt->second;
|
||||||
|
eventIt->second = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void LinuxProc::initialize()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
m_pMainWindow = new MainWindow();
|
||||||
|
m_pFileTransferDialog = new FileTransferDialog();
|
||||||
|
m_pFileTransferDialog->setWindowFlags(Qt::CustomizeWindowHint);
|
||||||
|
|
||||||
|
m_networkingThread = new NetworkingThread();
|
||||||
|
m_networkingThread->start();
|
||||||
|
|
||||||
|
m_fileTransferThread = new FileTransferThread("FileTransferThread");
|
||||||
|
m_fileTransferThread->create();
|
||||||
|
m_fileTransferThread->resume();
|
||||||
|
|
||||||
|
bool showMainWindow = m_iniFile->getBool("GENERAL", "SHOW_MAIN_WINDOW");
|
||||||
|
|
||||||
|
if (showMainWindow)
|
||||||
|
m_pMainWindow->show();
|
||||||
|
|
||||||
|
std::string sectionName = "SWDEV_COMPUTER";
|
||||||
|
std::string key = "COMPUTER_NAME_REGEX_PATTERN";
|
||||||
|
std::string computerNamePattern = m_iniFile->getString(sectionName,key);
|
||||||
|
|
||||||
|
{
|
||||||
|
QRegularExpression re(computerNamePattern.c_str(), QRegularExpression::CaseInsensitiveOption);
|
||||||
|
QRegularExpressionMatch match = re.match(Util::Misc::GetComputerName().c_str());
|
||||||
|
if (match.hasMatch())
|
||||||
|
{
|
||||||
|
m_computerName = Constants::ComputerHosts::SWDEV_PC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_computerName == Constants::ComputerHosts::UNKNOWN_PC)
|
||||||
|
{
|
||||||
|
sectionName = "SIXDOF_COMPUTER";
|
||||||
|
|
||||||
|
computerNamePattern = m_iniFile->getString(sectionName,key);
|
||||||
|
|
||||||
|
{
|
||||||
|
QRegularExpression re(computerNamePattern.c_str(), QRegularExpression::CaseInsensitiveOption);
|
||||||
|
QRegularExpressionMatch match = re.match(Util::Misc::GetComputerName().c_str());
|
||||||
|
if (match.hasMatch())
|
||||||
|
{
|
||||||
|
m_computerName = Constants::ComputerHosts::SIXDOF_PC;
|
||||||
|
|
||||||
|
std::string appPath = getConfig().getString(Constants::ConfigSectionNameMapping::sectionMap[m_computerName], "HOSTBUS_APP_PATH");
|
||||||
|
bool runApp = getConfig().getBool(Constants::ConfigSectionNameMapping::sectionMap[m_computerName], "RUN_HOSTBUS");
|
||||||
|
|
||||||
|
if (runApp)
|
||||||
|
{
|
||||||
|
m_runHostBusThread = new RunAppThread("RunHostBusThread", appPath, false);
|
||||||
|
m_runHostBusThread->create();
|
||||||
|
m_runHostBusThread->resume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_computerName == Constants::ComputerHosts::UNKNOWN_PC)
|
||||||
|
{
|
||||||
|
sectionName = "VIDEO_COMPUTER";
|
||||||
|
computerNamePattern = m_iniFile->getString(sectionName,key);
|
||||||
|
|
||||||
|
{
|
||||||
|
QRegularExpression re(computerNamePattern.c_str(), QRegularExpression::CaseInsensitiveOption);
|
||||||
|
QRegularExpressionMatch match = re.match(Util::Misc::GetComputerName().c_str());
|
||||||
|
if (match.hasMatch())
|
||||||
|
{
|
||||||
|
m_computerName = Constants::ComputerHosts::VIDEO_PC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_computerName != Constants::ComputerHosts::UNKNOWN_PC)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
showMainWindow = m_iniFile->getBool(sectionName,"SHOW_MAIN_WINDOW");
|
||||||
|
if (showMainWindow)
|
||||||
|
m_pMainWindow->show();
|
||||||
|
}
|
||||||
|
catch (Exception&){}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pMainWindow->updateStatusBox("Host: " + Util::Misc::GetComputerName());
|
||||||
|
|
||||||
|
ConfigFileManager::Instance().parseLogInfo(Constants::ConfigSectionNameMapping::sectionMap[getComputerName()]);
|
||||||
|
|
||||||
|
std::map<std::string, ConfigFileManager::TestDataInfo, CustomDataTypes::ci_less> testDataMap = ConfigFileManager::Instance().getTestDataMap();
|
||||||
|
|
||||||
|
std::map<std::string, ConfigFileManager::TestDataInfo, CustomDataTypes::ci_less>::iterator it;
|
||||||
|
|
||||||
|
for (it = testDataMap.begin(); it != testDataMap.end(); it++)
|
||||||
|
{
|
||||||
|
if (it->second.performCleanUp)
|
||||||
|
{
|
||||||
|
Util::PerformLogCleanUp(it->second.path, it->second.fileRegexPatterns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception& e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void LinuxProc::testAppSingleton()
|
||||||
|
{
|
||||||
|
UdpSocket* udpSock = 0;
|
||||||
|
try {
|
||||||
|
int localPort = getConfig().getInt("GENERAL", "APP_SINGLETON_LOCAL_PORT");
|
||||||
|
int remotePort = getConfig().getInt("GENERAL", "CMD_LOCAL_PORT");
|
||||||
|
|
||||||
|
udpSock = new UdpSocket(localPort, remotePort, "localhost");
|
||||||
|
|
||||||
|
const unsigned int BUF_SIZE = 1024;
|
||||||
|
|
||||||
|
unsigned char data[BUF_SIZE];
|
||||||
|
|
||||||
|
AreYouThereCmdMessage msg;
|
||||||
|
msg.format(data);
|
||||||
|
|
||||||
|
udpSock->write(data, msg.getEntireMessageLength());
|
||||||
|
|
||||||
|
Util::DateTime::Sleep(1000);
|
||||||
|
unsigned char dataBuf[512];
|
||||||
|
int dataSize = 0;
|
||||||
|
udpSock->read(dataBuf, dataSize);
|
||||||
|
|
||||||
|
if (dataSize > 0)
|
||||||
|
{
|
||||||
|
unsigned int msgId = 0;
|
||||||
|
|
||||||
|
AutomationMsgParser::instance().parseMsg(dataBuf, dataSize, &msgId);
|
||||||
|
|
||||||
|
if (msgId == MessageIDs::ARE_YOU_THERE_RSP)
|
||||||
|
{
|
||||||
|
AreYouThereRspMessage cmd;
|
||||||
|
|
||||||
|
cmd.parse(dataBuf);
|
||||||
|
|
||||||
|
cmd.executeMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete udpSock;
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
if (udpSock != 0)
|
||||||
|
delete udpSock;
|
||||||
|
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
165
HWIL_Assistant/src/LinuxProc.hpp
Normal file
165
HWIL_Assistant/src/LinuxProc.hpp
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#ifndef LINUXPROC_H
|
||||||
|
#define LINUXPROC_H
|
||||||
|
|
||||||
|
#include "Proc.hpp"
|
||||||
|
#include "EventNames.hpp"
|
||||||
|
#include "Constants.hpp"
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class MainWindow;
|
||||||
|
class FileTransferDialog;
|
||||||
|
class IniFile;
|
||||||
|
class Message;
|
||||||
|
class Condition;
|
||||||
|
class NetworkingThread;
|
||||||
|
class FileTransferThread;
|
||||||
|
class ErrorLog;
|
||||||
|
class RunAppThread;
|
||||||
|
|
||||||
|
class LinuxProc : public QObject, public Proc
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: instance
|
||||||
|
//
|
||||||
|
// Purpose: singleton
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
static LinuxProc& Instance();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: ~LinuxProc
|
||||||
|
//
|
||||||
|
// Purpose: Destroyer
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
~LinuxProc();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: getConfig
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
IniFile& getConfig(){return *m_iniFile;};
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: getMainWindow
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
MainWindow& getMainWindow(){return *m_pMainWindow;};
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: getFileTransferDialog
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
FileTransferDialog& getFileTransferDialog(){return *m_pFileTransferDialog;};
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: getFileTransferThread
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
FileTransferThread* getFileTransferThread(){return m_fileTransferThread;};
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: getComputerName
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
Constants::ComputerHosts getComputerName(){return m_computerName;}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: initialize
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void initialize();
|
||||||
|
|
||||||
|
private:
|
||||||
|
//>---------------------------------------------------------------------------
|
||||||
|
// Function: Proc
|
||||||
|
//
|
||||||
|
// Purpose: Ctor
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Return Value:
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
LinuxProc();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: testAppSingleton()
|
||||||
|
//
|
||||||
|
// Purpose: Make sure only single instance of this app is running
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void testAppSingleton();
|
||||||
|
|
||||||
|
MainWindow* m_pMainWindow;
|
||||||
|
FileTransferDialog* m_pFileTransferDialog;
|
||||||
|
|
||||||
|
IniFile* m_iniFile;
|
||||||
|
std::map<std::string, Condition*> m_eventMap;
|
||||||
|
|
||||||
|
FileTransferThread* m_fileTransferThread;
|
||||||
|
NetworkingThread* m_networkingThread;
|
||||||
|
RunAppThread* m_runHostBusThread;
|
||||||
|
|
||||||
|
Constants::ComputerHosts m_computerName;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
10
HWIL_Assistant/src/Misc/GUTS_Assistant.desktop
Normal file
10
HWIL_Assistant/src/Misc/GUTS_Assistant.desktop
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=HWIL_Assistant
|
||||||
|
Exec=/Released/HWIL_Assistant/HWIL_Assistant
|
||||||
|
Icon=/Released/HWIL_Assistant/assistant.png
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
StartupNotify=true
|
||||||
|
Actions=new-window;new-private-window;
|
||||||
|
Name[en_US]=HWIL_Assistant
|
||||||
BIN
HWIL_Assistant/src/Misc/assistant.png
Normal file
BIN
HWIL_Assistant/src/Misc/assistant.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
319
HWIL_Assistant/src/Threads/FileTransferThread.cpp
Normal file
319
HWIL_Assistant/src/Threads/FileTransferThread.cpp
Normal file
@@ -0,0 +1,319 @@
|
|||||||
|
#include "FileTransferThread.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "FileTransferDialog.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "FileSystemUtil.hpp"
|
||||||
|
#include "DateTimeUtil.hpp"
|
||||||
|
#include "StringUtil.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "Timestamp.hpp"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <QDirIterator>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FileTransferThread::FileTransferThread(const std::string& name):
|
||||||
|
Thread(name),
|
||||||
|
m_shallWeQuit(false),
|
||||||
|
m_shallWeSuspend(false),
|
||||||
|
m_startCondition(name + "_START_EVENT"),
|
||||||
|
m_totalSizeInBytes(0),
|
||||||
|
numFilesCopySuccess(0),
|
||||||
|
numFilesCopyFail(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FileTransferThread::~FileTransferThread()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferThread::operator()()
|
||||||
|
{
|
||||||
|
ErrorLog::Instance().log(getName() + " started", false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Condition& startFileTransferEvent = LinuxProc::Instance().getEvent(EventNames::START_FILE_TRANSFER);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
startFileTransferEvent.wait();
|
||||||
|
|
||||||
|
if (ShallWeExit() == true)
|
||||||
|
break;
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().showWindow(true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
gatherInfo();
|
||||||
|
|
||||||
|
transferFiles();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
ErrorLog::Instance().log(e.getMessage(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Condition& commandExecutingEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTTION_IN_PROGRESS);
|
||||||
|
commandExecutingEvent.reset(); // we are not executing command
|
||||||
|
|
||||||
|
Condition& completeEvent = LinuxProc::Instance().getEvent(EventNames::COMMAND_EXECUTION_COMPLETE);
|
||||||
|
completeEvent.signal(); // we are done executing
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().showWindow(false);
|
||||||
|
|
||||||
|
m_sourceDirList.clear();
|
||||||
|
m_qFileList.clear();
|
||||||
|
m_fileList.clear();
|
||||||
|
|
||||||
|
if (ShallWeExit() == true)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ErrorLog::Instance().log(getName() + " exited", false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ErrorLog::Instance().log(getName() + " exited", false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
ErrorLog::Instance().log(e.getMessage(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferThread::gatherInfo()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileTransferInfo fileInfo;
|
||||||
|
for ( int i = 0; i < m_sourceDirList.size(); i++ )
|
||||||
|
{
|
||||||
|
QDir sourceDir(m_sourceDirList[i]);
|
||||||
|
QStringList fileList = Util::FileSystem::GetListOfFilesInADirectory(sourceDir, true);
|
||||||
|
|
||||||
|
fileInfo.baseSourceDir = m_sourceDirList[i].toStdString();
|
||||||
|
for ( int j = 0; j < fileList.size(); j++ )
|
||||||
|
{
|
||||||
|
fileInfo.sourceFile = fileList[j].toStdString();
|
||||||
|
m_qFileList.append(fileInfo);
|
||||||
|
|
||||||
|
QFileInfo fi(QString(fileInfo.sourceFile.c_str()));
|
||||||
|
|
||||||
|
m_totalSizeInBytes += fi.size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( int i = 0; i < m_fileList.size(); i++ )
|
||||||
|
{
|
||||||
|
fileInfo.baseSourceDir = Util::FileSystem::ExtractDirectory(m_fileList[i].toStdString());
|
||||||
|
fileInfo.sourceFile = m_fileList[i].toStdString();
|
||||||
|
m_qFileList.append(fileInfo);
|
||||||
|
|
||||||
|
QFileInfo fi(QString(fileInfo.sourceFile.c_str()));
|
||||||
|
|
||||||
|
m_totalSizeInBytes += fi.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Moving " << m_qFileList.size() << " items (" << Util::FileSystem::DescribeFileSize(m_totalSizeInBytes) << ")";
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().updateLabel(FileTransferDialog::HEADER_LBL, ss.str());
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferThread::transferFiles()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
numFilesCopySuccess = 0;
|
||||||
|
numFilesCopyFail = 0;
|
||||||
|
std::string destFile;
|
||||||
|
FileTransferInfo fileInfo;
|
||||||
|
|
||||||
|
int waitTimeBeforeCreatingTestFolder = LinuxProc::Instance().getConfig().getInt(Constants::ConfigSectionNameMapping::sectionMap[LinuxProc::Instance().getComputerName()], "WAIT_TIME_BEFORE_CREATING_TEST_DATA_FOLDER");
|
||||||
|
|
||||||
|
int timeElapse = 1;
|
||||||
|
while (!Util::FileSystem::DirExists(m_destDir))
|
||||||
|
{
|
||||||
|
if (timeElapse++ > waitTimeBeforeCreatingTestFolder)
|
||||||
|
{
|
||||||
|
Util::FileSystem::CreateDirectory(m_destDir);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Util::DateTime::Sleep(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().startTheTimer();
|
||||||
|
|
||||||
|
int itemsRemaining = m_qFileList.size();
|
||||||
|
int64_t tempTotalSizeInBytes = m_totalSizeInBytes;
|
||||||
|
for ( int i=0; i < m_qFileList.size(); i++ )
|
||||||
|
{
|
||||||
|
fileInfo = m_qFileList[i];
|
||||||
|
QFileInfo fi(fileInfo.sourceFile.c_str());
|
||||||
|
int64_t fileSize = fi.size();
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().updateLabel(FileTransferDialog::FILE_NAME_LBL, Util::Strings::ShortenStringToSize(fi.fileName().toStdString(),45) + " (" + Util::FileSystem::DescribeFileSize(fileSize) + ")");
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().updateLabel(FileTransferDialog::FROM_DIR_LBL, Util::Strings::ShortenStringToSize(Util::FileSystem::BuildPath(fi.absolutePath().toStdString(),""),50));
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().updateLabel(FileTransferDialog::ITEMS_REMAIN_LBL, QString::number(itemsRemaining).toStdString() + " (" + Util::FileSystem::DescribeFileSize(m_totalSizeInBytes) + ")");
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().updateLabel(FileTransferDialog::TO_DIR_LBL, Util::Strings::ShortenStringToSize(destFile,50));
|
||||||
|
|
||||||
|
destFile = Util::FileSystem::BuildPath(m_destDir, fi.fileName().toStdString());
|
||||||
|
|
||||||
|
QFile sourceFile(fileInfo.sourceFile.c_str());
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
if (fileSize > 0)
|
||||||
|
{
|
||||||
|
QDateTime modifiedDate = fi.lastModified();
|
||||||
|
QDateTime accessedDate = fi.lastRead();
|
||||||
|
|
||||||
|
// moving the file
|
||||||
|
bool success = sourceFile.rename(destFile.c_str());
|
||||||
|
|
||||||
|
ss << "Copying " << fi.fileName().toStdString() << " - ";
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
Util::FileSystem::ChangeFileDateTime(destFile, modifiedDate, accessedDate);
|
||||||
|
ss << "SUCCESS";
|
||||||
|
numFilesCopySuccess++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ss << "FAIL";
|
||||||
|
numFilesCopyFail++;
|
||||||
|
}
|
||||||
|
ss << "\n "
|
||||||
|
<< "From: " << Util::FileSystem::BuildPath(fi.absolutePath().toStdString(),"")
|
||||||
|
<< "\n "
|
||||||
|
<< "To: ";
|
||||||
|
|
||||||
|
QFileInfo fi2(destFile.c_str());
|
||||||
|
ss << Util::FileSystem::BuildPath(fi2.absolutePath().toStdString(),"");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
numFilesCopySuccess++;
|
||||||
|
QFile file(fileInfo.sourceFile.c_str());
|
||||||
|
// remove empty file
|
||||||
|
bool success = file.remove();
|
||||||
|
ss << "Removing " << fi.fileName().toStdString() << ", empty file - ";
|
||||||
|
if (success)
|
||||||
|
ss << "SUCCESS";
|
||||||
|
else
|
||||||
|
ss << "FAIL";
|
||||||
|
ss << "\n "
|
||||||
|
<< "From: " << Util::FileSystem::BuildPath(fi.absolutePath().toStdString(),"");
|
||||||
|
}
|
||||||
|
ss << "\n";
|
||||||
|
ErrorLog::Instance().log(ss.str(), false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
m_totalSizeInBytes -= fileSize;
|
||||||
|
itemsRemaining--;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinuxProc::Instance().getFileTransferDialog().stopTheTimer();
|
||||||
|
|
||||||
|
for ( int i=0; i < m_sourceDirList.size(); i++)
|
||||||
|
{
|
||||||
|
removeEmptyFolders(m_sourceDirList[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "************************************************************************************"
|
||||||
|
<< "\n"
|
||||||
|
<< " Summary:"
|
||||||
|
<< "\n"
|
||||||
|
<< " Total files: " << m_qFileList.size()
|
||||||
|
<< "\n"
|
||||||
|
<< " # files copied with success: " << numFilesCopySuccess
|
||||||
|
<< "\n"
|
||||||
|
<< " # files copied with failure: " << numFilesCopyFail
|
||||||
|
<< "\n"
|
||||||
|
<< " Total size of all files: " << Util::FileSystem::DescribeFileSize(tempTotalSizeInBytes)
|
||||||
|
<< "\n"
|
||||||
|
<< " Transfer time: " << Util::DateTime::DescribeTimeElapsed(LinuxProc::Instance().getFileTransferDialog().getElapsedTimeSec())
|
||||||
|
<< "\n";
|
||||||
|
if (LinuxProc::Instance().getFileTransferDialog().getElapsedTimeSec() > 0)
|
||||||
|
{
|
||||||
|
ss << " Estimated transfer speed: " << Util::FileSystem::DescribeFileSize(tempTotalSizeInBytes / LinuxProc::Instance().getFileTransferDialog().getElapsedTimeSec()) << " / s"
|
||||||
|
<< "\n";
|
||||||
|
}
|
||||||
|
ss << "************************************************************************************"
|
||||||
|
<< "\n";
|
||||||
|
ErrorLog::Instance().log(ss.str(), false, ErrorLog::INFO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferThread::removeEmptyFolders(QString topLevelDir)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
QDirIterator it(topLevelDir, QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
|
||||||
|
|
||||||
|
while(it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
removeEmptyFolders(it.filePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
QDir dir(topLevelDir);
|
||||||
|
dir.rmdir(dir.absolutePath());
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool FileTransferThread::ShallWeExit()
|
||||||
|
{
|
||||||
|
return m_shallWeQuit;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool FileTransferThread::ShallWeSuspend()
|
||||||
|
{
|
||||||
|
return m_shallWeSuspend;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferThread::quit()
|
||||||
|
{
|
||||||
|
m_shallWeQuit = true;
|
||||||
|
Condition& startFileTransferEvent = LinuxProc::Instance().getEvent(EventNames::START_FILE_TRANSFER);
|
||||||
|
startFileTransferEvent.signal();
|
||||||
|
}
|
||||||
207
HWIL_Assistant/src/Threads/FileTransferThread.hpp
Normal file
207
HWIL_Assistant/src/Threads/FileTransferThread.hpp
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#ifndef FILETRANSFERTHREAD_H
|
||||||
|
#define FILETRANSFERTHREAD_H
|
||||||
|
|
||||||
|
#include "Thread.hpp"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
|
class FileTransferThread : public Thread
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct FileTransferInfo {
|
||||||
|
std::string baseSourceDir;
|
||||||
|
std::string sourceFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: FileTransferThread
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
FileTransferThread(const std::string& name);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~FileTransferThread
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual ~FileTransferThread();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: operator
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void operator()();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: StartThread()
|
||||||
|
//
|
||||||
|
// Purpose: Commands the thread to run
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: nonestd
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void startThread(){m_startCondition.signal();}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: SuspendThread()
|
||||||
|
//
|
||||||
|
// Purpose: Commands the thread to pause its execution
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void suspendThread(){m_shallWeSuspend = true;}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Quit()
|
||||||
|
//
|
||||||
|
// Purpose: Command the thread to exit
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void quit();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: addSourceDir
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
// sourceDir -
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void addSourceDir(std::string sourceDir) {m_sourceDirList.append(sourceDir.c_str());}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: addSourceDir
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
// sourceDir -
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void addSourceFile(std::string sourceDir) {m_fileList.append(sourceDir.c_str());}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: setDestDir
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
// destDir -
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void setDestDir(std::string destDir) {m_destDir = destDir;};
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: setUut
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
// destDir -
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void setUut(std::string uut) {m_uut = uut;};
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
FileTransferThread();
|
||||||
|
FileTransferThread(const FileTransferThread ©);
|
||||||
|
FileTransferThread &operator=(const FileTransferThread &rhs);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: gatherInfo
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void gatherInfo();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: transferFiles
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void transferFiles();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: removeEmptyFolders
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void removeEmptyFolders(QString topLevelDir);
|
||||||
|
|
||||||
|
bool ShallWeSuspend();
|
||||||
|
bool ShallWeExit();
|
||||||
|
|
||||||
|
bool m_shallWeQuit;
|
||||||
|
bool m_shallWeSuspend;
|
||||||
|
Condition m_startCondition;
|
||||||
|
|
||||||
|
QStringList m_sourceDirList;
|
||||||
|
QStringList m_fileList;
|
||||||
|
std::string m_destDir;
|
||||||
|
std::string m_uut;
|
||||||
|
|
||||||
|
QList<FileTransferInfo> m_qFileList;
|
||||||
|
int64_t m_totalSizeInBytes;
|
||||||
|
int numFilesCopySuccess;
|
||||||
|
int numFilesCopyFail;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FILETRANSFERTHREAD_H
|
||||||
40
HWIL_Assistant/src/Threads/NetworkingThread.cpp
Normal file
40
HWIL_Assistant/src/Threads/NetworkingThread.cpp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#include "NetworkingThread.hpp"
|
||||||
|
#include "UdpSocketMgr.hpp"
|
||||||
|
#include "FileTransferDialog.hpp"
|
||||||
|
#include "Condition.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
#include "Proc.hpp"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
NetworkingThread::NetworkingThread()
|
||||||
|
{
|
||||||
|
// Setup callback for cleanup when it finishes
|
||||||
|
connect(this, SIGNAL(finished()),
|
||||||
|
this, SLOT(deleteLater()));
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkingThread::~NetworkingThread()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkingThread::run()
|
||||||
|
{
|
||||||
|
ErrorLog::Instance().log("NetworkingThread started", false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// signals and slots for this QUdpSocket object will be handled by this thread
|
||||||
|
UdpSocketMgr::Instance().setUpUdpSocket();
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
ErrorLog::Instance().log(e.getMessage(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
exec(); // run the event loop.
|
||||||
|
|
||||||
|
ErrorLog::Instance().log("NetworkingThread exited", false, ErrorLog::INFO);
|
||||||
|
}
|
||||||
63
HWIL_Assistant/src/Threads/NetworkingThread.hpp
Normal file
63
HWIL_Assistant/src/Threads/NetworkingThread.hpp
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#ifndef NETWORKINGTHREAD_H
|
||||||
|
#define NETWORKINGTHREAD_H
|
||||||
|
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
|
class MainWindow;
|
||||||
|
|
||||||
|
class NetworkingThread : public QThread
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: NetworkingThread
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
NetworkingThread();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~NetworkingThread
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
~NetworkingThread();
|
||||||
|
|
||||||
|
private:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: run
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void run();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
168
HWIL_Assistant/src/Threads/RunAppThread.cpp
Normal file
168
HWIL_Assistant/src/Threads/RunAppThread.cpp
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "qprocess.h"
|
||||||
|
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
#include "RunAppThread.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "FileSystemUtil.hpp"
|
||||||
|
#include "Util.hpp"
|
||||||
|
#include "IniFile.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
RunAppThread::RunAppThread(const std::string& name, const std::string& appPath, const bool& runAppInLoop) :
|
||||||
|
Thread(name),
|
||||||
|
m_shallWeQuit(false),
|
||||||
|
m_shallWeSuspend(false),
|
||||||
|
m_runAppInLoop(runAppInLoop),
|
||||||
|
m_appPath(appPath),
|
||||||
|
m_startCondition(name + "_START_EVENT")
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
throw Exception(Q_FUNC_INFO, "caught unknown error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
RunAppThread::~RunAppThread()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void RunAppThread::operator()()
|
||||||
|
{
|
||||||
|
ErrorLog::Instance().log(getName() + " started", false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (Util::FileSystem::FileExists(m_appPath))
|
||||||
|
{
|
||||||
|
if (m_runAppInLoop)
|
||||||
|
runAppInLoop();
|
||||||
|
else
|
||||||
|
runAppOnce();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw Exception(Q_FUNC_INFO,m_appPath + " does not exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
ErrorLog::Instance().log(getName() + " exited", false, ErrorLog::INFO);
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
ErrorLog::Instance().log(e.getMessage(), false);
|
||||||
|
ErrorLog::Instance().log(getName() + " exited", false, ErrorLog::INFO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void RunAppThread::runAppInLoop()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::string appName = Util::FileSystem::ExtractFilename(m_appPath);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
// wait here until command to start
|
||||||
|
m_startCondition.wait();
|
||||||
|
|
||||||
|
if (shallWeExit() == true)
|
||||||
|
break;
|
||||||
|
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox("Running " + appName);
|
||||||
|
|
||||||
|
chdir(Util::FileSystem::ExtractDirectory(m_appPath).c_str());
|
||||||
|
std::string cmd = "./" + appName;
|
||||||
|
system(cmd.c_str());
|
||||||
|
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(m_appPath + " has exited");
|
||||||
|
|
||||||
|
if (shallWeExit() == true)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void RunAppThread::runAppOnce()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::string appName = Util::FileSystem::ExtractFilename(m_appPath);
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox("Running " + appName);
|
||||||
|
|
||||||
|
chdir(Util::FileSystem::ExtractDirectory(m_appPath).c_str());
|
||||||
|
std::string cmd = "./" + appName;
|
||||||
|
system(cmd.c_str());
|
||||||
|
|
||||||
|
LinuxProc::Instance().getMainWindow().updateStatusBox(m_appPath + " has exited");
|
||||||
|
}
|
||||||
|
catch (Exception& e)
|
||||||
|
{
|
||||||
|
e.buildStackTrace(Q_FUNC_INFO);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void RunAppThread::quit()
|
||||||
|
{
|
||||||
|
if (m_runAppInLoop)
|
||||||
|
{
|
||||||
|
m_shallWeQuit = true;
|
||||||
|
startThread();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Util::KillProcess(Util::FileSystem::ExtractFilename(m_appPath), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool RunAppThread::shallWeExit()
|
||||||
|
{
|
||||||
|
return m_shallWeQuit;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool RunAppThread::shallWeSuspend()
|
||||||
|
{
|
||||||
|
return m_shallWeSuspend;
|
||||||
|
}
|
||||||
111
HWIL_Assistant/src/Threads/RunAppThread.hpp
Normal file
111
HWIL_Assistant/src/Threads/RunAppThread.hpp
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Thread.hpp"
|
||||||
|
|
||||||
|
class RunAppThread : public Thread
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Thread()
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: name - the name of this thread
|
||||||
|
// streamName - the hsdc stream name to read from
|
||||||
|
// pVideoFrameTableAllocated - the buffer to put the data we read into
|
||||||
|
// pProc - the process this thread is running under
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
RunAppThread(const std::string& threadName, const std::string& appPath, const bool& runAppInLoop);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~Thread()
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual ~RunAppThread();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: operator()()
|
||||||
|
//
|
||||||
|
// Purpose: where all the action is in the derived classes
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void operator()();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: StartThread()
|
||||||
|
//
|
||||||
|
// Purpose: Commands the thread to run
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: nonestd
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void startThread(){m_startCondition.signal();}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: SuspendThread()
|
||||||
|
//
|
||||||
|
// Purpose: Commands the thread to pause its execution
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void suspendThread(){m_shallWeSuspend = true;}
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: Quit()
|
||||||
|
//
|
||||||
|
// Purpose: Command the thread to exit
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments: none
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
virtual void quit();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// do not allow
|
||||||
|
RunAppThread();
|
||||||
|
RunAppThread(const RunAppThread ©);
|
||||||
|
RunAppThread &operator=(const RunAppThread &rhs);
|
||||||
|
|
||||||
|
bool shallWeSuspend();
|
||||||
|
bool shallWeExit();
|
||||||
|
|
||||||
|
void runAppInLoop();
|
||||||
|
void runAppOnce();
|
||||||
|
|
||||||
|
bool m_shallWeQuit;
|
||||||
|
bool m_shallWeSuspend;
|
||||||
|
bool m_runAppInLoop;
|
||||||
|
std::string m_appPath;
|
||||||
|
Condition m_startCondition;
|
||||||
|
};
|
||||||
133
HWIL_Assistant/src/UI/FileTransferDialog.cpp
Normal file
133
HWIL_Assistant/src/UI/FileTransferDialog.cpp
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
#include "FileTransferDialog.hpp"
|
||||||
|
#include "ui_FileTransferDialog.h"
|
||||||
|
#include "DateTimeUtil.hpp"
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FileTransferDialog::FileTransferDialog(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::FileTransferDialog),
|
||||||
|
m_timeElapsedSec(0)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
#ifndef LINUX_PLATFORM
|
||||||
|
QFont f( "Segoe UI", 12, QFont::Normal);
|
||||||
|
ui->Header->setFont( f);
|
||||||
|
ui->label1->setFont(f);
|
||||||
|
ui->label1_2->setFont(f);
|
||||||
|
ui->label1_3->setFont(f);
|
||||||
|
ui->label1_4->setFont(f);
|
||||||
|
ui->label1_5->setFont(f);
|
||||||
|
|
||||||
|
ui->FileName->setFont(f);
|
||||||
|
ui->From->setFont(f);
|
||||||
|
ui->To->setFont(f);
|
||||||
|
ui->ItemsRemain->setFont(f);
|
||||||
|
ui->TimeElapsed->setFont(f);
|
||||||
|
|
||||||
|
ui->label1_4->setGeometry(ui->label1_4->x(), ui->label1_4->y(), ui->label1_4->width() + 5, ui->label1_4->height());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
connect(this, SIGNAL(LabelChanged(int,QString)), this, SLOT(on_LabelChanged(int,QString)));
|
||||||
|
connect(this, SIGNAL(ShowWindowChanged(bool)), this, SLOT(on_ShowWindowChanged(bool)));
|
||||||
|
connect(this, SIGNAL(startTheTimerChanged()), this, SLOT(on_startTheTimer()));
|
||||||
|
connect(this, SIGNAL(stopTheTimerChanged()), this, SLOT(on_stopTheTimer()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FileTransferDialog::~FileTransferDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::updateLabel(LABEL label, std::string msg)
|
||||||
|
{
|
||||||
|
emit LabelChanged(label, msg.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::on_LabelChanged(int label, QString msg)
|
||||||
|
{
|
||||||
|
if (label == HEADER_LBL)
|
||||||
|
{
|
||||||
|
ui->Header->setText(msg);
|
||||||
|
}
|
||||||
|
else if (label == FILE_NAME_LBL)
|
||||||
|
{
|
||||||
|
ui->FileName->setText(msg);
|
||||||
|
}
|
||||||
|
else if (label == FROM_DIR_LBL)
|
||||||
|
{
|
||||||
|
ui->From->setText(msg);
|
||||||
|
}
|
||||||
|
else if (label == TO_DIR_LBL)
|
||||||
|
{
|
||||||
|
ui->To->setText(msg);
|
||||||
|
}
|
||||||
|
else if (label == ITEMS_REMAIN_LBL)
|
||||||
|
{
|
||||||
|
ui->ItemsRemain->setText(msg);
|
||||||
|
}
|
||||||
|
else if (label == TIME_ELAPSED)
|
||||||
|
{
|
||||||
|
ui->TimeElapsed->setText(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::showWindow(bool show)
|
||||||
|
{
|
||||||
|
emit ShowWindowChanged(show);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::on_ShowWindowChanged(bool show)
|
||||||
|
{
|
||||||
|
if (show)
|
||||||
|
this->show();
|
||||||
|
else
|
||||||
|
this->hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::on_startTheTimer()
|
||||||
|
{
|
||||||
|
m_timeElapsedSec = 0;
|
||||||
|
m_timerId = startTimer(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::on_stopTheTimer()
|
||||||
|
{
|
||||||
|
killTimer(m_timerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::timerEvent(QTimerEvent *)
|
||||||
|
{
|
||||||
|
ui->TimeElapsed->setText(Util::DateTime::DescribeTimeElapsed(m_timeElapsedSec++).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::startTheTimer()
|
||||||
|
{
|
||||||
|
emit startTheTimerChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FileTransferDialog::stopTheTimer()
|
||||||
|
{
|
||||||
|
emit stopTheTimerChanged();
|
||||||
|
}
|
||||||
188
HWIL_Assistant/src/UI/FileTransferDialog.hpp
Normal file
188
HWIL_Assistant/src/UI/FileTransferDialog.hpp
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
// UNCLASSIFIED
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||||
|
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||||
|
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||||
|
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||||
|
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||||
|
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||||
|
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||||
|
COMPANY.
|
||||||
|
|
||||||
|
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||||
|
GOVERNMENT.
|
||||||
|
|
||||||
|
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#ifndef FILETRANSFERDIALOG_HPP
|
||||||
|
#define FILETRANSFERDIALOG_HPP
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class FileTransferDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class FileTransferDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum LABEL
|
||||||
|
{
|
||||||
|
HEADER_LBL,
|
||||||
|
FILE_NAME_LBL,
|
||||||
|
FROM_DIR_LBL,
|
||||||
|
TO_DIR_LBL,
|
||||||
|
ITEMS_REMAIN_LBL,
|
||||||
|
TIME_ELAPSED
|
||||||
|
};
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: FileTransferDialog
|
||||||
|
//
|
||||||
|
// Purpose: constructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
explicit FileTransferDialog(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: ~FileTransferDialog
|
||||||
|
//
|
||||||
|
// Purpose: destructor
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
~FileTransferDialog();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: updateLabel
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void updateLabel(LABEL label, std::string msg);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: showWindow
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void showWindow(bool show);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: startTheTimer
|
||||||
|
//
|
||||||
|
// Purpose: wrapper to emit a signal
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void startTheTimer();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: stopTheTimer
|
||||||
|
//
|
||||||
|
// Purpose: wrapper to emit a signal
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void stopTheTimer();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: getElapsedTimeSec
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
int getElapsedTimeSec() {return m_timeElapsedSec;};
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: on_LabelChanged
|
||||||
|
//
|
||||||
|
// Purpose: change the text of a label
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void on_LabelChanged(int label, QString msg);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: on_ShowWindowChanged
|
||||||
|
//
|
||||||
|
// Purpose: show or hide this dialog
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void on_ShowWindowChanged(bool show);
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: on_startTheTimer
|
||||||
|
//
|
||||||
|
// Purpose: start the timer
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void on_startTheTimer();
|
||||||
|
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: on_stopTheTimer
|
||||||
|
//
|
||||||
|
// Purpose: stop the timer
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void on_stopTheTimer();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void LabelChanged(int label, QString msg);
|
||||||
|
void ShowWindowChanged(bool show);
|
||||||
|
|
||||||
|
void startTheTimerChanged();
|
||||||
|
void stopTheTimerChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
//>---------------------------------------------------------------------
|
||||||
|
// Function: timerEvent
|
||||||
|
//
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Arguments:
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// Return Value: none
|
||||||
|
//<---------------------------------------------------------------------
|
||||||
|
void timerEvent(QTimerEvent *event) override;
|
||||||
|
|
||||||
|
Ui::FileTransferDialog *ui;
|
||||||
|
|
||||||
|
int m_timerId;
|
||||||
|
int m_timeElapsedSec;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FILETRANSFERDIALOG_HPP
|
||||||
240
HWIL_Assistant/src/UI/FileTransferDialog.ui
Normal file
240
HWIL_Assistant/src/UI/FileTransferDialog.ui
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>FileTransferDialog</class>
|
||||||
|
<widget class="QDialog" name="FileTransferDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>555</width>
|
||||||
|
<height>244</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(255, 255, 255);</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="label1">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>13</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="FileName">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>54</y>
|
||||||
|
<width>401</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>processing</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="Header">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>6</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>551</width>
|
||||||
|
<height>41</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: qlineargradient(spread:pad, x1:1, y1:0.0340909, x2:0, y2:0.0113636, stop:0 rgba(0, 86, 255, 255), stop:1 rgba(255, 255, 255, 255));</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>processing... please wait</string>
|
||||||
|
</property>
|
||||||
|
<property name="margin">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label1_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>22</x>
|
||||||
|
<y>95</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>13</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>From</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label1_3">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>23</x>
|
||||||
|
<y>130</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>13</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>To</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label1_4">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>23</x>
|
||||||
|
<y>163</y>
|
||||||
|
<width>111</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Items Remaining</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label1_5">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>23</x>
|
||||||
|
<y>199</y>
|
||||||
|
<width>91</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::NoFrame</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Time Elasped</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="From">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>88</y>
|
||||||
|
<width>401</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>processing</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="To">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>125</y>
|
||||||
|
<width>401</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>processing</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="ItemsRemain">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>162</y>
|
||||||
|
<width>401</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>processing</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="TimeElapsed">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>197</y>
|
||||||
|
<width>401</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Sans Serif</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>processing</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
102
HWIL_Assistant/src/UI/MainWindow.cpp
Normal file
102
HWIL_Assistant/src/UI/MainWindow.cpp
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
#include "MainWindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QRect>
|
||||||
|
|
||||||
|
#include <QtTest/QTest>
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
|
: QMainWindow(parent),
|
||||||
|
ui(new Ui::MainWindow),
|
||||||
|
m_lastCursorPos(),
|
||||||
|
cursorXGoingEast(true),
|
||||||
|
cursorYGoingSouth(true)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
connect(this, SIGNAL(statusBoxChanged(QString)), this, SLOT(on_StatusBoxChanged(QString)));
|
||||||
|
|
||||||
|
timerId = startTimer(30000);
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
killTimer(timerId);
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::updateStatusBox(std::string msg) {
|
||||||
|
|
||||||
|
emit statusBoxChanged(msg.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_StatusBoxChanged(QString msg) {
|
||||||
|
|
||||||
|
ui->statusBox->appendPlainText(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::showEvent( QShowEvent* event )
|
||||||
|
{
|
||||||
|
QWidget::showEvent( event );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::timerEvent(QTimerEvent *)
|
||||||
|
{
|
||||||
|
QCursor cursor;
|
||||||
|
|
||||||
|
if (m_lastCursorPos.x() == cursor.pos().x() && m_lastCursorPos.y() == cursor.pos().y())
|
||||||
|
{
|
||||||
|
QScreen *screen = QGuiApplication::primaryScreen();
|
||||||
|
QRect screenGeometry = screen->geometry();
|
||||||
|
int height = screenGeometry.height();
|
||||||
|
int width = screenGeometry.width();
|
||||||
|
|
||||||
|
int newX = 0;
|
||||||
|
int newY = 0;
|
||||||
|
|
||||||
|
if (cursorXGoingEast)
|
||||||
|
newX = cursor.pos().x() + 50;
|
||||||
|
else
|
||||||
|
newX = cursor.pos().x() - 50;
|
||||||
|
|
||||||
|
if (cursorYGoingSouth)
|
||||||
|
newY = cursor.pos().y() + 50;
|
||||||
|
else
|
||||||
|
newY = cursor.pos().y() - 50;
|
||||||
|
|
||||||
|
|
||||||
|
if (newX > width)
|
||||||
|
{
|
||||||
|
newX = cursor.pos().x() - 50;
|
||||||
|
cursorXGoingEast = false;
|
||||||
|
}
|
||||||
|
else if (newX < 0)
|
||||||
|
{
|
||||||
|
newX = cursor.pos().x() + 50;
|
||||||
|
cursorXGoingEast = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newY > height)
|
||||||
|
{
|
||||||
|
newY = cursor.pos().y() - 50;
|
||||||
|
cursorYGoingSouth = false;
|
||||||
|
}
|
||||||
|
else if (newY < 0)
|
||||||
|
{
|
||||||
|
newY = cursor.pos().y() + 50;
|
||||||
|
cursorYGoingSouth = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_lastCursorPos.setX(newX);
|
||||||
|
m_lastCursorPos.setY(newY);
|
||||||
|
|
||||||
|
cursor.setPos(newX, newY);
|
||||||
|
|
||||||
|
QTest::mouseClick(this, Qt::RightButton, Qt::NoModifier, QPoint(newX, newY));
|
||||||
|
QTest::mouseClick(this, Qt::RightButton, Qt::NoModifier, QPoint(newX, newY));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_lastCursorPos = cursor.pos();
|
||||||
|
}
|
||||||
|
}
|
||||||
36
HWIL_Assistant/src/UI/MainWindow.h
Normal file
36
HWIL_Assistant/src/UI/MainWindow.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class MainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
void updateStatusBox(std::string msg);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void on_StatusBoxChanged(QString msg);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void statusBoxChanged(QString msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void showEvent( QShowEvent* event ) override;
|
||||||
|
void timerEvent(QTimerEvent *event) override;
|
||||||
|
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
int timerId;
|
||||||
|
QPoint m_lastCursorPos;
|
||||||
|
bool cursorXGoingEast;
|
||||||
|
bool cursorYGoingSouth;
|
||||||
|
};
|
||||||
|
#endif // MAINWINDOW_H
|
||||||
42
HWIL_Assistant/src/UI/mainwindow.ui
Normal file
42
HWIL_Assistant/src/UI/mainwindow.ui
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>858</width>
|
||||||
|
<height>694</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>HWIL Assistant</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<widget class="QPlainTextEdit" name="statusBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>841</width>
|
||||||
|
<height>631</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>858</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
43
HWIL_Assistant/src/main.cpp
Normal file
43
HWIL_Assistant/src/main.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#include "LinuxProc.hpp"
|
||||||
|
#include "Exception.hpp"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
#include "ErrorLog.hpp"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
|
||||||
|
try {
|
||||||
|
LinuxProc::Instance();
|
||||||
|
|
||||||
|
try {
|
||||||
|
LinuxProc::Instance().initialize();
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
MainWindow* pMainWindow = static_cast<MainWindow*>(&LinuxProc::Instance().getMainWindow());
|
||||||
|
|
||||||
|
if (pMainWindow != 0)
|
||||||
|
{
|
||||||
|
LinuxProc::Instance().getMainWindow().close();
|
||||||
|
}
|
||||||
|
ErrorLog::Instance().log(e.getMessage());
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this will loop indefinitely until we close the main GUI
|
||||||
|
ret = a.exec();
|
||||||
|
|
||||||
|
} catch (Exception& e) {
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setWindowTitle("Fatal Error");
|
||||||
|
msgBox.setText(e.getMessage(Exception::ERROR_MESSAGE_ONLY).c_str());
|
||||||
|
msgBox.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user