Logger done for now, start on analysis tool

This commit is contained in:
Kilian Hofmann 2017-06-15 22:50:35 +02:00
parent 93cbf6d19a
commit 90a534f2a7
23 changed files with 1388 additions and 68 deletions

View File

@ -11,13 +11,15 @@
E2218CA91EF2D37B004298F6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E2218CA81EF2D37B004298F6 /* Assets.xcassets */; };
E2218CDE1EF2D461004298F6 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E2218CDC1EF2D461004298F6 /* MainMenu.xib */; };
E2218CDF1EF2D461004298F6 /* SettingsWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E2218CDD1EF2D461004298F6 /* SettingsWindowController.xib */; };
E2218CE31EF2D54A004298F6 /* buildnum.ver in Resources */ = {isa = PBXBuildFile; fileRef = E2218CE11EF2D54A004298F6 /* buildnum.ver */; };
E2218CE41EF2D54A004298F6 /* BumpBuildNumber.py in Resources */ = {isa = PBXBuildFile; fileRef = E2218CE21EF2D54A004298F6 /* BumpBuildNumber.py */; };
E2218D0D1EF2D68F004298F6 /* XMLDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = E2218D0A1EF2D68F004298F6 /* XMLDictionary.m */; };
E2218D111EF2D6F1004298F6 /* SettingsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2218D101EF2D6F1004298F6 /* SettingsWindowController.swift */; };
E2218D151EF2E470004298F6 /* ConnectionLossOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2218D141EF2E470004298F6 /* ConnectionLossOperation.swift */; };
E2218D171EF2E4EA004298F6 /* Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2218D161EF2E4EA004298F6 /* Shared.swift */; };
E2218D191EF2F0D8004298F6 /* FrequencyOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2218D181EF2F0D8004298F6 /* FrequencyOperation.swift */; };
E2218D241EF3267F004298F6 /* XMLDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = E2218D231EF3267F004298F6 /* XMLDictionary.m */; };
E2218D2C1EF3271F004298F6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2218D2B1EF3271F004298F6 /* AppDelegate.swift */; };
E2218D301EF3271F004298F6 /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2218D2F1EF3271F004298F6 /* Document.swift */; };
E2218D3B1EF32764004298F6 /* Graph.icns in Resources */ = {isa = PBXBuildFile; fileRef = E2218D3A1EF32764004298F6 /* Graph.icns */; };
E2218D4A1EF32917004298F6 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E2218D491EF32917004298F6 /* MainMenu.xib */; };
E2218D4C1EF329A6004298F6 /* GraphDetailsController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E2218D4B1EF329A6004298F6 /* GraphDetailsController.xib */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -28,6 +30,13 @@
remoteGlobalIDString = E2218CE51EF2D577004298F6;
remoteInfo = "Bump Logger4";
};
E2218D451EF32863004298F6 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = E2218C7A1EF2D2B5004298F6 /* Project object */;
proxyType = 1;
remoteGlobalIDString = E2218D3D1EF32803004298F6;
remoteInfo = "Bump Graphic Analysis 2";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
@ -39,13 +48,21 @@
E2218CDD1EF2D461004298F6 /* SettingsWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsWindowController.xib; sourceTree = "<group>"; };
E2218CE11EF2D54A004298F6 /* buildnum.ver */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buildnum.ver; sourceTree = "<group>"; };
E2218CE21EF2D54A004298F6 /* BumpBuildNumber.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = BumpBuildNumber.py; sourceTree = "<group>"; };
E2218D051EF2D68F004298F6 /* Logger4-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Logger4-Bridging-Header.h"; sourceTree = "<group>"; };
E2218D081EF2D68F004298F6 /* XMLDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLDictionary.h; sourceTree = "<group>"; };
E2218D0A1EF2D68F004298F6 /* XMLDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XMLDictionary.m; sourceTree = "<group>"; };
E2218D101EF2D6F1004298F6 /* SettingsWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsWindowController.swift; sourceTree = "<group>"; };
E2218D141EF2E470004298F6 /* ConnectionLossOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectionLossOperation.swift; sourceTree = "<group>"; };
E2218D161EF2E4EA004298F6 /* Shared.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Shared.swift; sourceTree = "<group>"; };
E2218D181EF2F0D8004298F6 /* FrequencyOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrequencyOperation.swift; sourceTree = "<group>"; };
E2218D211EF3267F004298F6 /* Logger4-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Logger4-Bridging-Header.h"; path = "Logger4/Logger4-Bridging-Header.h"; sourceTree = "<group>"; };
E2218D221EF3267F004298F6 /* XMLDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XMLDictionary.h; path = Logger4/XMLDictionary.h; sourceTree = "<group>"; };
E2218D231EF3267F004298F6 /* XMLDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XMLDictionary.m; path = Logger4/XMLDictionary.m; sourceTree = "<group>"; };
E2218D291EF3271F004298F6 /* Graphic Analysis 2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Graphic Analysis 2.app"; sourceTree = BUILT_PRODUCTS_DIR; };
E2218D2B1EF3271F004298F6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
E2218D2F1EF3271F004298F6 /* Document.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Document.swift; sourceTree = "<group>"; };
E2218D361EF3271F004298F6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E2218D3A1EF32764004298F6 /* Graph.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Graph.icns; sourceTree = "<group>"; };
E2218D411EF32843004298F6 /* buildnum.ver */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buildnum.ver; sourceTree = "<group>"; };
E2218D421EF32843004298F6 /* BumpBuildNumber.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = BumpBuildNumber.py; sourceTree = "<group>"; };
E2218D491EF32917004298F6 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
E2218D4B1EF329A6004298F6 /* GraphDetailsController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GraphDetailsController.xib; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -56,6 +73,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
E2218D261EF3271F004298F6 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@ -64,6 +88,7 @@
children = (
E2218CA71EF2D35B004298F6 /* Shared Resources */,
E2218C991EF2D345004298F6 /* Logger4 */,
E2218D2A1EF3271F004298F6 /* Graphic Analysis 2 */,
E2218C831EF2D2B5004298F6 /* Products */,
);
sourceTree = "<group>";
@ -72,6 +97,7 @@
isa = PBXGroup;
children = (
E2218C981EF2D345004298F6 /* Logger4.app */,
E2218D291EF3271F004298F6 /* Graphic Analysis 2.app */,
);
name = Products;
sourceTree = "<group>";
@ -79,8 +105,9 @@
E2218C991EF2D345004298F6 /* Logger4 */ = {
isa = PBXGroup;
children = (
E2218CEB1EF2D648004298F6 /* Swift */,
E2218D041EF2D67B004298F6 /* Obj-C */,
E2218CDA1EF2D43A004298F6 /* Support Files */,
E2218CEB1EF2D648004298F6 /* Swift */,
);
path = Logger4;
sourceTree = "<group>";
@ -89,7 +116,6 @@
isa = PBXGroup;
children = (
E2218CA81EF2D37B004298F6 /* Assets.xcassets */,
E2218D041EF2D67B004298F6 /* Obj-C */,
);
name = "Shared Resources";
sourceTree = "<group>";
@ -128,7 +154,6 @@
E2218D121EF2D754004298F6 /* Delegates */,
E2218D131EF2E443004298F6 /* Operations */,
E2218D0F1EF2D6E5004298F6 /* Views */,
E2218D161EF2E4EA004298F6 /* Shared.swift */,
);
name = Swift;
sourceTree = "<group>";
@ -136,11 +161,12 @@
E2218D041EF2D67B004298F6 /* Obj-C */ = {
isa = PBXGroup;
children = (
E2218D081EF2D68F004298F6 /* XMLDictionary.h */,
E2218D0A1EF2D68F004298F6 /* XMLDictionary.m */,
E2218D051EF2D68F004298F6 /* Logger4-Bridging-Header.h */,
E2218D211EF3267F004298F6 /* Logger4-Bridging-Header.h */,
E2218D221EF3267F004298F6 /* XMLDictionary.h */,
E2218D231EF3267F004298F6 /* XMLDictionary.m */,
);
name = "Obj-C";
path = ..;
sourceTree = "<group>";
};
E2218D0F1EF2D6E5004298F6 /* Views */ = {
@ -168,6 +194,77 @@
name = Operations;
sourceTree = "<group>";
};
E2218D2A1EF3271F004298F6 /* Graphic Analysis 2 */ = {
isa = PBXGroup;
children = (
E2218D4D1EF329AE004298F6 /* Swift */,
E2218D3C1EF327CA004298F6 /* Support Files */,
);
path = "Graphic Analysis 2";
sourceTree = "<group>";
};
E2218D3C1EF327CA004298F6 /* Support Files */ = {
isa = PBXGroup;
children = (
E2218D3A1EF32764004298F6 /* Graph.icns */,
E2218D361EF3271F004298F6 /* Info.plist */,
E2218D471EF328F3004298F6 /* Versioning */,
E2218D481EF328FC004298F6 /* UI */,
);
name = "Support Files";
sourceTree = "<group>";
};
E2218D471EF328F3004298F6 /* Versioning */ = {
isa = PBXGroup;
children = (
E2218D411EF32843004298F6 /* buildnum.ver */,
E2218D421EF32843004298F6 /* BumpBuildNumber.py */,
);
name = Versioning;
sourceTree = "<group>";
};
E2218D481EF328FC004298F6 /* UI */ = {
isa = PBXGroup;
children = (
E2218D4B1EF329A6004298F6 /* GraphDetailsController.xib */,
E2218D491EF32917004298F6 /* MainMenu.xib */,
);
name = UI;
sourceTree = "<group>";
};
E2218D4D1EF329AE004298F6 /* Swift */ = {
isa = PBXGroup;
children = (
E2218D4E1EF329B4004298F6 /* Delegate */,
E2218D4F1EF329C0004298F6 /* Operations */,
E2218D501EF329D0004298F6 /* Views */,
);
name = Swift;
sourceTree = "<group>";
};
E2218D4E1EF329B4004298F6 /* Delegate */ = {
isa = PBXGroup;
children = (
E2218D2B1EF3271F004298F6 /* AppDelegate.swift */,
);
name = Delegate;
sourceTree = "<group>";
};
E2218D4F1EF329C0004298F6 /* Operations */ = {
isa = PBXGroup;
children = (
);
name = Operations;
sourceTree = "<group>";
};
E2218D501EF329D0004298F6 /* Views */ = {
isa = PBXGroup;
children = (
E2218D2F1EF3271F004298F6 /* Document.swift */,
);
name = Views;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXLegacyTarget section */
@ -185,6 +282,20 @@
passBuildSettingsInEnvironment = 1;
productName = "Bump Logger4";
};
E2218D3D1EF32803004298F6 /* Bump Graphic Analysis 2 */ = {
isa = PBXLegacyTarget;
buildArgumentsString = "\"$PROJECT_DIR/Graphic Analysis 2/BumpBuildNumber.py\" \"$PROJECT_DIR/Graphic Analysis 2/buildnum.ver\" \"$PROJECT_DIR/Graphic Analysis 2/Info.plist\"";
buildConfigurationList = E2218D3E1EF32803004298F6 /* Build configuration list for PBXLegacyTarget "Bump Graphic Analysis 2" */;
buildPhases = (
);
buildToolPath = /usr/bin/python;
buildWorkingDirectory = "$PROJECT_DIR/Graphic Analysis 2";
dependencies = (
);
name = "Bump Graphic Analysis 2";
passBuildSettingsInEnvironment = 1;
productName = "Bump Graphic Analysis 2";
};
/* End PBXLegacyTarget section */
/* Begin PBXNativeTarget section */
@ -206,6 +317,24 @@
productReference = E2218C981EF2D345004298F6 /* Logger4.app */;
productType = "com.apple.product-type.application";
};
E2218D281EF3271F004298F6 /* Graphic Analysis 2 */ = {
isa = PBXNativeTarget;
buildConfigurationList = E2218D371EF3271F004298F6 /* Build configuration list for PBXNativeTarget "Graphic Analysis 2" */;
buildPhases = (
E2218D251EF3271F004298F6 /* Sources */,
E2218D261EF3271F004298F6 /* Frameworks */,
E2218D271EF3271F004298F6 /* Resources */,
);
buildRules = (
);
dependencies = (
E2218D461EF32863004298F6 /* PBXTargetDependency */,
);
name = "Graphic Analysis 2";
productName = "Graphic Analysis 2";
productReference = E2218D291EF3271F004298F6 /* Graphic Analysis 2.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@ -227,6 +356,16 @@
DevelopmentTeam = 795KPDV76S;
ProvisioningStyle = Automatic;
};
E2218D281EF3271F004298F6 = {
CreatedOnToolsVersion = 8.3.3;
DevelopmentTeam = 795KPDV76S;
ProvisioningStyle = Automatic;
};
E2218D3D1EF32803004298F6 = {
CreatedOnToolsVersion = 8.3.3;
DevelopmentTeam = 795KPDV76S;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = E2218C7D1EF2D2B5004298F6 /* Build configuration list for PBXProject "Docsis Toolkit" */;
@ -244,6 +383,8 @@
targets = (
E2218C971EF2D345004298F6 /* Logger4 */,
E2218CE51EF2D577004298F6 /* Bump Logger4 */,
E2218D281EF3271F004298F6 /* Graphic Analysis 2 */,
E2218D3D1EF32803004298F6 /* Bump Graphic Analysis 2 */,
);
};
/* End PBXProject section */
@ -256,8 +397,16 @@
E2218CA91EF2D37B004298F6 /* Assets.xcassets in Resources */,
E2218CDF1EF2D461004298F6 /* SettingsWindowController.xib in Resources */,
E2218CDE1EF2D461004298F6 /* MainMenu.xib in Resources */,
E2218CE31EF2D54A004298F6 /* buildnum.ver in Resources */,
E2218CE41EF2D54A004298F6 /* BumpBuildNumber.py in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
E2218D271EF3271F004298F6 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E2218D3B1EF32764004298F6 /* Graph.icns in Resources */,
E2218D4C1EF329A6004298F6 /* GraphDetailsController.xib in Resources */,
E2218D4A1EF32917004298F6 /* MainMenu.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -268,8 +417,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E2218D171EF2E4EA004298F6 /* Shared.swift in Sources */,
E2218D0D1EF2D68F004298F6 /* XMLDictionary.m in Sources */,
E2218D241EF3267F004298F6 /* XMLDictionary.m in Sources */,
E2218D111EF2D6F1004298F6 /* SettingsWindowController.swift in Sources */,
E2218D151EF2E470004298F6 /* ConnectionLossOperation.swift in Sources */,
E2218D191EF2F0D8004298F6 /* FrequencyOperation.swift in Sources */,
@ -277,6 +425,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
E2218D251EF3271F004298F6 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E2218D2C1EF3271F004298F6 /* AppDelegate.swift in Sources */,
E2218D301EF3271F004298F6 /* Document.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@ -285,6 +442,11 @@
target = E2218CE51EF2D577004298F6 /* Bump Logger4 */;
targetProxy = E2218CE91EF2D601004298F6 /* PBXContainerItemProxy */;
};
E2218D461EF32863004298F6 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = E2218D3D1EF32803004298F6 /* Bump Graphic Analysis 2 */;
targetProxy = E2218D451EF32863004298F6 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
@ -393,7 +555,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.weebly.alikja.Logger4;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Logger4-Bridging-Header.h";
SWIFT_OBJC_BRIDGING_HEADER = "Logger4/Logger4-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
@ -412,7 +574,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.weebly.alikja.Logger4;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Logger4-Bridging-Header.h";
SWIFT_OBJC_BRIDGING_HEADER = "Logger4/Logger4-Bridging-Header.h";
SWIFT_VERSION = 3.0;
};
name = Release;
@ -442,6 +604,63 @@
};
name = Release;
};
E2218D381EF3271F004298F6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-GA2";
CODE_SIGN_IDENTITY = "Mac Developer";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 795KPDV76S;
INFOPLIST_FILE = "Graphic Analysis 2/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.weebly.alikja.Graphic-Analysis-2";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
E2218D391EF3271F004298F6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-GA2";
CODE_SIGN_IDENTITY = "Mac Developer";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 795KPDV76S;
INFOPLIST_FILE = "Graphic Analysis 2/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.weebly.alikja.Graphic-Analysis-2";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 3.0;
};
name = Release;
};
E2218D3F1EF32803004298F6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEBUGGING_SYMBOLS = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 795KPDV76S;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
E2218D401EF32803004298F6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 795KPDV76S;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@ -470,6 +689,22 @@
);
defaultConfigurationIsVisible = 0;
};
E2218D371EF3271F004298F6 /* Build configuration list for PBXNativeTarget "Graphic Analysis 2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E2218D381EF3271F004298F6 /* Debug */,
E2218D391EF3271F004298F6 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
E2218D3E1EF32803004298F6 /* Build configuration list for PBXLegacyTarget "Bump Graphic Analysis 2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E2218D3F1EF32803004298F6 /* Debug */,
E2218D401EF32803004298F6 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = E2218C7A1EF2D2B5004298F6 /* Project object */;

View File

@ -42,11 +42,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/AppDelegate.swift"
timestampString = "519236096.282816"
timestampString = "519247235.495795"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "93"
endingLineNumber = "93"
startingLineNumber = "95"
endingLineNumber = "95"
landmarkName = "applicationDidFinishLaunching(_:)"
landmarkType = "7">
</BreakpointContent>
@ -74,14 +74,238 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/AppDelegate.swift"
timestampString = "519236096.282816"
timestampString = "519247235.495795"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "110"
endingLineNumber = "110"
startingLineNumber = "112"
endingLineNumber = "112"
landmarkName = "logFails(_:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249190.205931"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "248"
endingLineNumber = "248"
landmarkName = "logFreq(header:file:entry:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249109.034754"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "91"
endingLineNumber = "91"
landmarkName = "handleData(date:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249229.881623"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "71"
endingLineNumber = "71"
landmarkName = "handleData(date:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249232.640173"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "59"
endingLineNumber = "59"
landmarkName = "main()"
landmarkType = "7">
<Locations>
<Location
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "Logger4.FrequencyOperation.main () -&gt; ()"
moduleName = "Logger4"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/Kili2/Documents/XCODE/Docsis%20Toolkit/Logger4/FrequencyOperation.swift"
timestampString = "519249232.853113"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "59"
endingLineNumber = "59"
offsetFromSymbolStart = "6197">
</Location>
<Location
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "Logger4.FrequencyOperation.(main () -&gt; ()).(closure #2)"
moduleName = "Logger4"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/Kili2/Documents/XCODE/Docsis%20Toolkit/Logger4/FrequencyOperation.swift"
timestampString = "519249232.854686"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "60"
endingLineNumber = "60"
offsetFromSymbolStart = "39">
</Location>
</Locations>
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249239.550933"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "50"
endingLineNumber = "50"
landmarkName = "main()"
landmarkType = "7">
<Locations>
<Location
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "Logger4.FrequencyOperation.main () -&gt; ()"
moduleName = "Logger4"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/Kili2/Documents/XCODE/Docsis%20Toolkit/Logger4/FrequencyOperation.swift"
timestampString = "519249239.554294"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "51"
endingLineNumber = "51"
offsetFromSymbolStart = "5179">
</Location>
<Location
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "Logger4.FrequencyOperation.(main () -&gt; ()).(closure #1)"
moduleName = "Logger4"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/Kili2/Documents/XCODE/Docsis%20Toolkit/Logger4/FrequencyOperation.swift"
timestampString = "519249239.556289"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "52"
endingLineNumber = "52"
offsetFromSymbolStart = "39">
</Location>
</Locations>
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249240.56695"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "51"
endingLineNumber = "51"
landmarkName = "main()"
landmarkType = "7">
<Locations>
<Location
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "Logger4.FrequencyOperation.main () -&gt; ()"
moduleName = "Logger4"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/Kili2/Documents/XCODE/Docsis%20Toolkit/Logger4/FrequencyOperation.swift"
timestampString = "519249240.570672"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "51"
endingLineNumber = "51"
offsetFromSymbolStart = "5179">
</Location>
<Location
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "Logger4.FrequencyOperation.(main () -&gt; ()).(closure #1)"
moduleName = "Logger4"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/Kili2/Documents/XCODE/Docsis%20Toolkit/Logger4/FrequencyOperation.swift"
timestampString = "519249240.572832"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "52"
endingLineNumber = "52"
offsetFromSymbolStart = "39">
</Location>
</Locations>
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249250.964077"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "52"
endingLineNumber = "52"
landmarkName = "main()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Logger4/FrequencyOperation.swift"
timestampString = "519249254.139567"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "60"
endingLineNumber = "60"
landmarkName = "main()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0830"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E2218D281EF3271F004298F6"
BuildableName = "Graphic Analysis 2.app"
BlueprintName = "Graphic Analysis 2"
ReferencedContainer = "container:Docsis Toolkit.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E2218D281EF3271F004298F6"
BuildableName = "Graphic Analysis 2.app"
BlueprintName = "Graphic Analysis 2"
ReferencedContainer = "container:Docsis Toolkit.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E2218D281EF3271F004298F6"
BuildableName = "Graphic Analysis 2.app"
BlueprintName = "Graphic Analysis 2"
ReferencedContainer = "container:Docsis Toolkit.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E2218D281EF3271F004298F6"
BuildableName = "Graphic Analysis 2.app"
BlueprintName = "Graphic Analysis 2"
ReferencedContainer = "container:Docsis Toolkit.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -4,6 +4,11 @@
<dict>
<key>SchemeUserState</key>
<dict>
<key>Graphic Analysis 2.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
<key>Logger4.xcscheme</key>
<dict>
<key>orderHint</key>
@ -27,6 +32,16 @@
<key>primary</key>
<true/>
</dict>
<key>E2218D281EF3271F004298F6</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>E2218D3D1EF32803004298F6</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,26 @@
//
// AppDelegate.swift
// Graphic Analysis 2
//
// Created by Kilian Hofmann on 15.06.17.
// Copyright © 2017 Kilian Hofmann. All rights reserved.
//
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}

View File

@ -0,0 +1,111 @@
#!/usr/bin/env python
#
# Bump build number in Info.plist files if a source file have changed.
#
# usage: bump_buildnum.py buildnum.ver Info.plist [ ... Info.plist ]
#
# andy@trojanfoe.com, 2014.
#
import sys, os, subprocess, re
def read_verfile(name):
version = None
build = None
verfile = open(name, "r")
for line in verfile:
match = re.match(r"^version\s+(\S+)", line)
if match:
version = match.group(1).rstrip()
match = re.match(r"^build\s+(\S+)", line)
if match:
build = int(match.group(1).rstrip())
verfile.close()
return (version, build)
def write_verfile(name, version, build):
verfile = open(name, "w")
verfile.write("version {0}\n".format(version))
verfile.write("build {0}\n".format(build))
verfile.close()
return True
def set_plist_version(plistname, version, build):
if not os.path.exists(plistname):
print("{0} does not exist".format(plistname))
return False
plistbuddy = '/usr/libexec/Plistbuddy'
if not os.path.exists(plistbuddy):
print("{0} does not exist".format(plistbuddy))
return False
cmdline = [plistbuddy,
"-c", "Set CFBundleShortVersionString {0}".format(version),
"-c", "Set CFBundleVersion {0}".format(build),
plistname]
if subprocess.call(cmdline) != 0:
print("Failed to update {0}".format(plistname))
return False
print("Updated {0} with v{1} ({2})".format(plistname, version, build))
return True
def should_bump(vername, dirname):
verstat = os.stat(vername)
allnames = []
for dirname, dirnames, filenames in os.walk(dirname):
for filename in filenames:
allnames.append(os.path.join(dirname, filename))
for filename in allnames:
filestat = os.stat(filename)
if filestat.st_mtime > verstat.st_mtime:
print("{0} is newer than {1}".format(filename, vername))
return True
return False
def upver(vername):
(version, build) = read_verfile(vername)
if version == None or build == None:
print("Failed to read version/build from {0}".format(vername))
return False
# Bump the version number if any files in the same directory as the version file
# have changed, including sub-directories.
srcdir = os.path.dirname(vername)
bump = should_bump(vername, srcdir)
if bump:
build += 1
print("Incremented to build {0}".format(build))
write_verfile(vername, version, build)
print("Written {0}".format(vername))
else:
print("Staying at build {0}".format(build))
return (version, build)
if __name__ == "__main__":
if os.environ.has_key('ACTION') and os.environ['ACTION'] == 'clean':
print("{0}: Not running while cleaning".format(sys.argv[0]))
sys.exit(0)
if len(sys.argv) < 3:
print("Usage: {0} buildnum.ver Info.plist [... Info.plist]".format(sys.argv[0]))
sys.exit(1)
vername = sys.argv[1]
(version_orig, build_orig) = read_verfile(vername)
(version, build) = upver(vername)
if version == None or build == None:
sys.exit(2)
if (version_orig, build_orig) < (version, build):
for i in range(2, len(sys.argv)):
plistname = sys.argv[i]
set_plist_version(plistname, version, build)
sys.exit(0)

View File

@ -0,0 +1,44 @@
//
// Document.swift
// Graphic Analysis 2
//
// Created by Kilian Hofmann on 15.06.17.
// Copyright © 2017 Kilian Hofmann. All rights reserved.
//
import Cocoa
class Document: NSDocument {
override init() {
super.init()
// Add your subclass-specific initialization here.
}
override class func autosavesInPlace() -> Bool {
return true
}
override func makeWindowControllers() {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let windowController = storyboard.instantiateController(withIdentifier: "Document Window Controller") as! NSWindowController
self.addWindowController(windowController)
}
override func data(ofType typeName: String) throws -> Data {
// Insert code here to write your document to data of the specified type. If outError != nil, ensure that you create and set an appropriate error when returning nil.
// You can also choose to override fileWrapperOfType:error:, writeToURL:ofType:error:, or writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead.
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
override func read(from data: Data, ofType typeName: String) throws {
// Insert code here to read your document from the given data of the specified type. If outError != nil, ensure that you create and set an appropriate error when returning false.
// You can also choose to override readFromFileWrapper:ofType:error: or readFromURL:ofType:error: instead.
// If you override either of these, you should also override -isEntireFileLoaded to return false if the contents are lazily loaded.
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
}

Binary file not shown.

View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="12121" systemVersion="16G12b" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="12121"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="GraphDetailsController" customModule="Graphic_Analysis" customModuleProvider="target">
<connections>
<outlet property="freq" destination="l7u-Vy-iwa" id="cwp-LE-s9E"/>
<outlet property="power" destination="TXD-Ji-2X2" id="OzI-qa-t7f"/>
<outlet property="ranging" destination="Q4h-v5-Nwu" id="Wdl-ru-kuA"/>
<outlet property="snr" destination="7Zc-lS-tmW" id="8lV-5y-zvh"/>
<outlet property="time" destination="OJ8-uC-Y3l" id="gG1-Pf-LE2"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="258" height="162"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fVO-dW-v0J">
<rect key="frame" x="18" y="125" width="72" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Frequency:" id="tTx-Ii-q3Q">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Zc-lS-tmW">
<rect key="frame" x="129" y="75" width="111" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="33 dBmV" id="mAc-rH-21s">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lSs-3C-Wh6">
<rect key="frame" x="18" y="100" width="84" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Power Level: " id="yzi-sz-IPS">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c43-bY-Gpy">
<rect key="frame" x="18" y="75" width="107" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="SNR / Threshold:" id="hst-Bk-YtF">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TXD-Ji-2X2">
<rect key="frame" x="129" y="100" width="111" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="36 dBmV" id="sHM-Uk-gSL">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l7u-Vy-iwa">
<rect key="frame" x="129" y="125" width="111" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="58.6 MHZ" id="mjT-6Q-7bd">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IzL-lu-zBV">
<rect key="frame" x="18" y="50" width="76" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Timestamp:" id="YWT-IG-AmC">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OJ8-uC-Y3l">
<rect key="frame" x="129" y="50" width="111" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="00:00:00" id="xwJ-Dw-suj">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q4h-v5-Nwu">
<rect key="frame" x="129" y="25" width="111" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="retries_exceeded" id="OW0-D8-FzY">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="NO" translatesAutoresizingMaskIntoConstraints="NO" id="59B-IJ-gKQ">
<rect key="frame" x="18" y="25" width="100" height="17"/>
<constraints>
<constraint firstAttribute="width" constant="96" id="bh7-4s-7og"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Ranging Status:" id="nnW-k1-E1D">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="c43-bY-Gpy" firstAttribute="leading" secondItem="IzL-lu-zBV" secondAttribute="leading" id="0pl-Rv-rWS"/>
<constraint firstItem="lSs-3C-Wh6" firstAttribute="leading" secondItem="c43-bY-Gpy" secondAttribute="leading" id="2KT-kh-aq4"/>
<constraint firstItem="Q4h-v5-Nwu" firstAttribute="leading" secondItem="59B-IJ-gKQ" secondAttribute="trailing" constant="15" id="3UF-PM-YDZ"/>
<constraint firstItem="7Zc-lS-tmW" firstAttribute="leading" secondItem="c43-bY-Gpy" secondAttribute="trailing" constant="8" symbolic="YES" id="6am-Rt-HbZ"/>
<constraint firstItem="Q4h-v5-Nwu" firstAttribute="top" secondItem="OJ8-uC-Y3l" secondAttribute="bottom" constant="8" symbolic="YES" id="7X2-NE-2Ph"/>
<constraint firstItem="OJ8-uC-Y3l" firstAttribute="leading" secondItem="Q4h-v5-Nwu" secondAttribute="leading" id="7ZK-TD-vkR"/>
<constraint firstItem="TXD-Ji-2X2" firstAttribute="leading" secondItem="7Zc-lS-tmW" secondAttribute="leading" id="Aut-RG-maq"/>
<constraint firstItem="fVO-dW-v0J" firstAttribute="leading" secondItem="lSs-3C-Wh6" secondAttribute="leading" id="EVZ-jU-rAl"/>
<constraint firstItem="59B-IJ-gKQ" firstAttribute="leading" secondItem="IzL-lu-zBV" secondAttribute="leading" id="Ext-0L-rXN"/>
<constraint firstItem="OJ8-uC-Y3l" firstAttribute="trailing" secondItem="Q4h-v5-Nwu" secondAttribute="trailing" id="FRt-Vv-2ss"/>
<constraint firstItem="lSs-3C-Wh6" firstAttribute="top" secondItem="fVO-dW-v0J" secondAttribute="bottom" constant="8" symbolic="YES" id="JhZ-hu-rB2"/>
<constraint firstItem="c43-bY-Gpy" firstAttribute="baseline" secondItem="7Zc-lS-tmW" secondAttribute="baseline" id="Ons-ef-Yqx"/>
<constraint firstItem="c43-bY-Gpy" firstAttribute="top" secondItem="lSs-3C-Wh6" secondAttribute="bottom" constant="8" symbolic="YES" id="Pjl-r1-XRq"/>
<constraint firstItem="OJ8-uC-Y3l" firstAttribute="trailing" secondItem="l7u-Vy-iwa" secondAttribute="trailing" id="SYL-VZ-BBW"/>
<constraint firstItem="OJ8-uC-Y3l" firstAttribute="trailing" secondItem="TXD-Ji-2X2" secondAttribute="trailing" id="TLc-LW-px0"/>
<constraint firstItem="l7u-Vy-iwa" firstAttribute="leading" secondItem="TXD-Ji-2X2" secondAttribute="leading" id="XVZ-ID-4gx"/>
<constraint firstItem="fVO-dW-v0J" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="bHZ-p7-Hf5"/>
<constraint firstItem="59B-IJ-gKQ" firstAttribute="baseline" secondItem="Q4h-v5-Nwu" secondAttribute="baseline" id="bO7-7g-Z43"/>
<constraint firstItem="OJ8-uC-Y3l" firstAttribute="baseline" secondItem="IzL-lu-zBV" secondAttribute="baseline" id="ceG-PY-PqP"/>
<constraint firstItem="fVO-dW-v0J" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="hB1-UW-Ov6"/>
<constraint firstItem="IzL-lu-zBV" firstAttribute="top" secondItem="c43-bY-Gpy" secondAttribute="bottom" constant="8" symbolic="YES" id="i7D-jq-gFT"/>
<constraint firstItem="fVO-dW-v0J" firstAttribute="baseline" secondItem="l7u-Vy-iwa" secondAttribute="baseline" id="jQu-mQ-Uby"/>
<constraint firstAttribute="trailing" secondItem="Q4h-v5-Nwu" secondAttribute="trailing" constant="20" symbolic="YES" id="sjN-3T-nyG"/>
<constraint firstItem="OJ8-uC-Y3l" firstAttribute="leading" secondItem="7Zc-lS-tmW" secondAttribute="leading" id="spU-N5-Lh0"/>
<constraint firstItem="OJ8-uC-Y3l" firstAttribute="trailing" secondItem="7Zc-lS-tmW" secondAttribute="trailing" id="srp-nj-mFx"/>
<constraint firstItem="lSs-3C-Wh6" firstAttribute="baseline" secondItem="TXD-Ji-2X2" secondAttribute="baseline" id="ucu-so-Aw2"/>
</constraints>
<point key="canvasLocation" x="28" y="114"/>
</customView>
</objects>
</document>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>docsisplist2</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>Graph</string>
<key>CFBundleTypeName</key>
<string>Document</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>????</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>com.alikja.DocumentType.docsisplist2</string>
</array>
<key>LSTypeIsPackage</key>
<integer>1</integer>
<key>NSDocumentClass</key>
<string>$(PRODUCT_MODULE_NAME).Document</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>2.0</string>
<key>CFBundleVersion</key>
<string>2</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2017 Kilian Hofmann. All rights reserved.</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>com.apple.package</string>
</array>
<key>UTTypeDescription</key>
<string>DocumentType</string>
<key>UTTypeIconFile</key>
<string>Graph</string>
<key>UTTypeIdentifier</key>
<string>com.alikja.DocumentType.docsisplist2</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>docsisplist2</string>
</array>
</dict>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11185.3" systemVersion="16A320" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11185.3"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Graphic_Analysis" customModuleProvider="target"/>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
<items>
<menuItem title="Graphic Analysis" id="1Xt-HY-uBw">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Graphic Analysis" systemMenu="apple" id="uQy-DD-JDr">
<items>
<menuItem title="About Graphic Analysis" id="5kV-Vb-QxS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
<menuItem title="Hide Graphic Analysis" keyEquivalent="h" id="Olw-nP-bQN">
<connections>
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
</connections>
</menuItem>
<menuItem title="Show All" id="Kd2-mp-pUS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit Graphic Analysis" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="File" id="dMs-cI-mzQ">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="File" id="bib-Uj-vzu">
<items>
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
<connections>
<action selector="openDocument:" target="-1" id="bVn-NM-KNZ"/>
</connections>
</menuItem>
<menuItem title="Open Recent" id="tXI-mr-wws">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
<items>
<menuItem title="Clear Menu" id="vNY-rz-j42">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="clearRecentDocuments:" target="-1" id="Daa-9d-B3U"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
<connections>
<action selector="performClose:" target="-1" id="HmO-Ls-i7Q"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="aUF-d1-5bR">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
<connections>
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="R4o-n2-Eq4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</objects>
</document>

View File

@ -0,0 +1,2 @@
version 2.0
build 2

View File

@ -1,6 +0,0 @@
//
// Use this file to import your target's public headers that you would like to
// expose to Swift.
//
#import "XMLDictionary.h"

View File

@ -105,8 +105,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
// MARK: - Logging Functions
func logFreqs(_: Timer) {
// let frequencyOperation: FrequencyOperation = FrequencyOperation()
// OperationQueue.main.addOperation(frequencyOperation)
let frequencyOperation: FrequencyOperation = FrequencyOperation()
OperationQueue.main.addOperation(frequencyOperation)
}
func logFails(_: Timer) {

View File

@ -1,6 +1,6 @@
//
// ConnectionLossOperation.swift
// Docsis Toolkit
// Logger4
//
// Created by Kilian Hofmann on 15.06.17.
// Copyright © 2017 Kilian Hofmann. All rights reserved.
@ -44,7 +44,21 @@ class ConnectionLossOperation: Operation {
data, response, error in
if error != nil && data == nil && self.result2 {
log(entry, path: file)
let fileH: FileHandle? = FileHandle(forUpdatingAtPath: file)
if fileH == nil {
do{
try entry.write(toFile: file, atomically: true, encoding: .utf8)
}
catch {
NSLog("WRITE TO FILE FAILED\n");
}
} else {
fileH?.seekToEndOfFile();
let data = (entry as NSString).data(using: String.Encoding.utf8.rawValue)
fileH?.write(data!)
fileH?.closeFile()
}
self.result2 = false;
NSLog("Internet loss logged!")
}
@ -56,7 +70,20 @@ class ConnectionLossOperation: Operation {
data, response, error in
if error != nil && data == nil && self.result1 {
log(entry, path: file)
let fileH: FileHandle? = FileHandle(forUpdatingAtPath: file)
if fileH == nil {
do{
try entry.write(toFile: file, atomically: true, encoding: .utf8)
}
catch {
NSLog("WRITE TO FILE \(file) FAILED\n");
}
} else {
fileH?.seekToEndOfFile();
let data = (entry as NSString).data(using: String.Encoding.utf8.rawValue)
fileH?.write(data!)
fileH?.closeFile()
}
self.result1 = false;
NSLog("Internet loss logged!")
}

View File

@ -1,6 +1,6 @@
//
// FrequencyOperation.swift
// Docsis Toolkit
// Logger4
//
// Created by Kilian Hofmann on 15.06.17.
// Copyright © 2017 Kilian Hofmann. All rights reserved.
@ -17,6 +17,12 @@ class FrequencyOperation: Operation {
let modulationAdjust: NSDictionary = ["qpsk": "-1.18", "8qam": "-0.21", "16qam": "-0.21", "32qam" : "0", "64qam": "0", "128qam": "0.05"]
// XML Parser
let parser: XMLDictionaryParser = XMLDictionaryParser()
// Data handling
var downstream: Data?
var upstream: Data?
var upstreamBool: Bool = false
var downstreamBool: Bool = false
var dir: NSString = ""
override init() {
@ -30,7 +36,7 @@ class FrequencyOperation: Operation {
let fileManager: FileManager = FileManager.default
// Make all relevant directories if not present
pthread_mutex_lock(&((NSApp.delegate as! AppDelegate).lock))
let dir: NSString = NSString(format: "~/KDLog/%@.docsisplist2/%@/%@", start[2], start[1], start[0])
dir = NSString(format: "~/KDLog/%@.docsisplist2/%@/%@/", start[2], start[1], start[0])
do {
try fileManager.createDirectory(atPath: dir.expandingTildeInPath, withIntermediateDirectories: true, attributes: nil)
}
@ -38,5 +44,232 @@ class FrequencyOperation: Operation {
NSLog("ERROR ON SUBDIRECTORY CREATION: \(error.localizedDescription)")
}
pthread_mutex_unlock(&((NSApp.delegate as! AppDelegate).lock))
// URL Requests
let requestDownstream: URLRequest = URLRequest.init(url: URL.init(string: UserDefaults.standard.string(forKey: "downstream")!)!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 4)
let requestUpstream: URLRequest = URLRequest.init(url: URL.init(string: UserDefaults.standard.string(forKey: "upstream")!)!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 4)
// Tasks
let taskDownstream: URLSessionDataTask = (NSApp.delegate as! AppDelegate).urlSession.dataTask(with: requestDownstream){data, response, error in
pthread_mutex_lock(&(NSApp.delegate as! AppDelegate).lock)
self.downstream = data
self.downstreamBool = true
self.handleData(date: time)
pthread_mutex_unlock(&(NSApp.delegate as! AppDelegate).lock)
}
let taskUpstream: URLSessionDataTask = (NSApp.delegate as! AppDelegate).urlSession.dataTask(with: requestUpstream){data, response, error in
pthread_mutex_lock(&(NSApp.delegate as! AppDelegate).lock)
self.upstream = data
self.upstreamBool = true
self.handleData(date: time)
pthread_mutex_unlock(&(NSApp.delegate as! AppDelegate).lock)
}
// Start
taskUpstream.resume()
taskDownstream.resume()
}
func handleData(date: Date) {
// Both returned successfully
if upstream != nil && downstream != nil {
// Parse data
upstreamBool = false
downstreamBool = false
let dictionaryUpstream: Dictionary? = parser.dictionary(with: upstream)
let dictionaryDownstream: Dictionary? = parser.dictionary(with: downstream)
upstream = nil
downstream = nil
// Tracking padding adding
var filesModified: [String] = []
// Upstream is valid
if dictionaryUpstream != nil{
var entry: String = ""
var file: NSString = ""
// Grab channels
let channels: AnyObject = (dictionaryUpstream!["upstream_channel"]) as AnyObject
// We have multiple channels
if channels is [Dictionary<String,AnyObject>] {
// Simplify
let channels: [Dictionary<String,AnyObject>] = (channels as! [Dictionary<String,AnyObject>])
// Step through channels
for index in 0..<channels.count {
// Grab channel
let channel: Dictionary<String,AnyObject> = channels[index]
// We do not have an error
if channel["upstream_modulation"] != nil && (channel["frequency"] as! String) != "status_error" {
// Grab power rating in dBmV
let powerInt: Double? = Double(channel["power_level"] as! String)
// We have valid power rating
if powerInt != nil {
// Grab modulation data
let modulation: NSObject = ((channel["upstream_modulation"]!)["modulation"])! as! NSObject
// Grab power adjustment see DOCSIS 3.0 Specification for more Information)
var adjust: String = ""
if modulation.isKind(of: NSArray.self) {
adjust = modulationAdjust[(((modulation as! NSArray)[0] as! NSDictionary)["mod_type"]!) as! String]! as! String
} else{
adjust = modulationAdjust[((modulation as! NSDictionary)["mod_type"]!) as! String]! as! String
}
let adjustInt: Double = Double(adjust)!
// Add timestamp and power to file entry
entry = "\((NSApp.delegate as! AppDelegate).justTime.string(from: date));\(String(powerInt! + adjustInt));"
// Add threshold to file entry
switch channels.count {
case 2:
entry += "\(upstreamTwo[modulationAdjust.allKeys(for: adjust)[0] as! String]!)"
case 3:
entry += "\(upstreamThreeOrFour[modulationAdjust.allKeys(for: adjust)[0] as! String]!)"
case 4:
entry += "\(upstreamThreeOrFour[modulationAdjust.allKeys(for: adjust)[0] as! String]!)"
default:
entry += "NaN"
}
// Add ranging status
entry += ";\(channel["ranging_status"] as! String)\n"
// Add file name to path
file = dir.appending("Upstream \(channel["frequency"]!).csv") as NSString
// Track modification
filesModified.append("Upstream \(channel["frequency"]!).csv")
// Write to file
logFreq(header: ";Power Level;Threshold;Ranging Status\n", file: file, entry: entry)
}
}
}
}
// We have a single channel
else if channels is Dictionary<String,AnyObject> {
// Grab channel
let channel: Dictionary<String,AnyObject> = channels as! Dictionary<String,AnyObject>
// We do not have an error
if channel["upstream_modulation"] != nil && channel["frequency"] as! String != "status_error" {
// Grab power rating in dBmV
let powerInt: Double? = Double(channel["power_level"] as! String)
// We have valid power rating
if powerInt != nil {
// Grab modulation data
let modulation: NSObject = ((channel["upstream_modulation"]!)["modulation"])! as! NSObject
// Grab power adjustment see DOCSIS 3.0 Specification for more Information)
var adjust: String = ""
if modulation.isKind(of: NSArray.self) {
adjust = modulationAdjust[(((modulation as! NSArray)[0] as! NSDictionary)["mod_type"]!) as! String]! as! String
} else{
adjust = modulationAdjust[((modulation as! NSDictionary)["mod_type"]!) as! String]! as! String
}
let adjustInt: Double = Double(adjust)!
// Add data to entry
entry = "\((NSApp.delegate as! AppDelegate).justTime.string(from: date));\(String(powerInt! + adjustInt));\(upstreamOne[modulationAdjust.allKeys(for: adjust)[0] as! String]!);\(channel["ranging_status"] as! String)\n"
// Add file name to path
file = dir.appending("Upstream \(channel["frequency"]!).csv") as NSString
// Track modifiction
filesModified.append("Upstream \(channel["frequency"]!).csv")
// Write to file
logFreq(header: ";Power Level;Threshold;Ranging Status\n", file: file, entry: entry)
}
}
}
}
// Downstream is valid
if dictionaryDownstream != nil {
var entry: String = ""
var file: NSString = ""
// Grab channels
let channels: AnyObject = (dictionaryDownstream!["downstream_channel"]) as AnyObject
// We have multiple channels
if channels is [Dictionary<String,AnyObject>] {
// Simplify
let channels: [Dictionary<String, AnyObject>] = channels as! [Dictionary<String, AnyObject>]
// Step through channels
for index in 0..<channels.count {
// Grab channel
let channel: Dictionary<String,AnyObject> = channels[index]
// We do not have an error
if channel["frequency"] as! String != "status_error" {
// Add data to entry
entry = "\((NSApp.delegate as! AppDelegate).justTime.string(from: date));\(channel["power_level"]!);\(channel["snr"]!)\n"
// Add file name to path
file = dir.appending("Downstream \(channel["frequency"]!).csv") as NSString
// Tracking modification
filesModified.append("Downstream \(channel["frequency"]!).csv")
// Write to file
logFreq(header: ";Power;SNR\n", file: file, entry: entry)
}
}
}
// We have a single channel
else if channels is Dictionary<String,AnyObject> {
// Grab channel
let channel: Dictionary<String,AnyObject> = channels as! Dictionary<String,AnyObject>
// We do not have an error
if channel["frequency"] as! String != "status_error" {
// Add data to entry
entry = "\((NSApp.delegate as! AppDelegate).justTime.string(from: date));\(channel["power_level"]!);\(channel["snr"]!)\n"
// Add file name to path
file = dir.appending("Downstream \(channel["frequency"]!).csv") as NSString
// Tracking modification
filesModified.append("Downstream \(channel["frequency"]!).csv")
// Write to file
logFreq(header: ";Power;SNR\n", file: file, entry: entry)
}
}
// Update if not modified
let fileManager = FileManager.default
// Get all filenames in directory
let enumerator:FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: dir.expandingTildeInPath)!
// Step through files
for element in enumerator {
// Check if modified
if !filesModified.contains(element as! String) && (element as! String).contains(".csv") {
logDummie(dir: dir, element: element as! String, date: date)
}
}
}
// Update if both nil (no connection to modem possible)
else if (upstreamBool && downstreamBool) {
upstreamBool = false
downstreamBool = false
let fileManager = FileManager.default
// Get all filenames in directory
let enumerator:FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: dir.expandingTildeInPath)!
// Step through files
for element in enumerator {
logDummie(dir: dir, element: element as! String, date: date)
}
}
}
}
func logFreq(header: String, file: NSString, entry: String) {
let fileManager = FileManager.default
if !fileManager.fileExists(atPath: file.expandingTildeInPath) {
do {
try header.write(toFile: file.expandingTildeInPath, atomically: true, encoding: .utf8)
}
catch {
NSLog("WRITE TO FILE \(file.expandingTildeInPath) FAILED\n");
return
}
}
let fileH: FileHandle? = FileHandle(forUpdatingAtPath: file.expandingTildeInPath)
fileH?.seekToEndOfFile()
let data: Data = (entry as NSString).data(using: String.Encoding.utf8.rawValue)!
fileH?.write(data)
fileH?.closeFile()
}
func logDummie(dir: NSString, element: String, date: Date) {
// Get file
let file: FileHandle? = FileHandle(forUpdatingAtPath: dir.expandingTildeInPath.appending(element))
if file != nil {
// Write appropriate null entry to file
file?.seekToEndOfFile();
var data: Data?;
if element.contains("Upstream") {
data = ("\((NSApp.delegate as! AppDelegate).justTime.string(from: date));-;-;-\n" as NSString).data(using: String.Encoding.utf8.rawValue)
} else {
data = ("\((NSApp.delegate as! AppDelegate).justTime.string(from: date));-;-\n" as NSString).data(using: String.Encoding.utf8.rawValue)
}
file?.write(data!)
file?.closeFile()
}
}
}

View File

@ -17,7 +17,9 @@
<key>CFBundleShortVersionString</key>
<string>4.0</string>
<key>CFBundleVersion</key>
<string>13</string>
<string>26</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>LSUIElement</key>

View File

@ -0,0 +1,6 @@
//
// Use this file to import your target's public headers that you would like to
// expose to Swift.
//
#import "XMLDictionary.h"

View File

@ -1,6 +1,6 @@
//
// SettingsWindowController.swift
// Logger3
// Logger4
//
// Created by Kilian Hofmann on 15.08.16.
// Copyright © 2016 Kilian Hofmann. All rights reserved.

View File

@ -1,26 +0,0 @@
//
// Shared.swift
// Docsis Toolkit
//
// Created by Kilian Hofmann on 15.06.17.
// Copyright © 2017 Kilian Hofmann. All rights reserved.
//
import Cocoa
func log(_ entry: String, path: String) {
let file: FileHandle? = FileHandle(forUpdatingAtPath: path)
if file == nil {
do{
try (entry).write(toFile: path, atomically: true, encoding: String.Encoding.utf8)
}
catch {
NSLog("WRITE TO FILE FAILED\n");
}
} else {
file?.seekToEndOfFile();
let data = (entry as NSString).data(using: String.Encoding.utf8.rawValue)
file?.write(data!)
file?.closeFile()
}
}

View File

@ -1,2 +1,2 @@
version 4.0
build 13
build 26