diff --git a/Docsis Toolkit.xcodeproj/xcuserdata/Kili2.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Docsis Toolkit.xcodeproj/xcuserdata/Kili2.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index 767be94..fe2b454 100644
--- a/Docsis Toolkit.xcodeproj/xcuserdata/Kili2.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/Docsis Toolkit.xcodeproj/xcuserdata/Kili2.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -2,22 +2,4 @@
-
-
-
-
-
-
diff --git a/FileOperations.swift b/FileOperations.swift
index 56916cc..2e66091 100644
--- a/FileOperations.swift
+++ b/FileOperations.swift
@@ -39,6 +39,7 @@ class FileOperations: NSObject {
let dataToWrite = encodeTimeStamp(stamp: data, threshold: "")
let file: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 3, alignedTo: 1)
file.storeBytes(of: dataToWrite, as: UInt32.self)
+ file.deallocate(bytes: 3, alignedTo: 1)
do {
let fileData: NSMutableData = try NSMutableData(contentsOf: URL(fileURLWithPath: path))
fileData.append(file, length: 3)
@@ -50,16 +51,17 @@ class FileOperations: NSObject {
}
}
- static func load(log Data: NSData) -> String? {
- var returnString: String? = ""
+ static func load(log Data: NSData) -> [String]? {
+ var returnString: [String] = []
var i: Int = 0
- while i < Data.length - 3 {
+ while i < Data.length {
let data: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 3, alignedTo: 1)
Data.getBytes(data, range: NSRange(location: i, length: 3))
- returnString?.append("\(decodeTimestamp(stamp: data.load(as: UInt32.self)).0)\n")
+ returnString.append("\(decodeTimestamp(stamp: data.load(as: UInt32.self)).0)\n")
+ data.deallocate(bytes: 3, alignedTo: 1)
i += 3
}
- if returnString != "" {
+ if returnString.count > 0 {
return returnString
}
return nil
@@ -117,4 +119,115 @@ class FileOperations: NSObject {
}
// MARK: - Frequency loading (decoding)
+
+ static func loadUpstream(log data: NSData) -> [String]? {
+ var variableAdjust: Int = 0
+ var returnString: [String] = []
+
+ while variableAdjust < data.length {
+ // 1 for size
+ // 3 for time and threshold
+ // 4 for Power
+ // var String
+
+ let decodedSize: UInt8 = data.bytes.load(fromByteOffset: variableAdjust, as: UInt8.self)
+ variableAdjust += 1
+
+ let retTimePtr: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 3, alignedTo: 1)
+ data.getBytes(retTimePtr, range: NSRange(location: variableAdjust, length: 3))
+ variableAdjust += 3
+ let encodedTime: UInt32 = retTimePtr.load(as: UInt32.self)
+ retTimePtr.deallocate(bytes: 3, alignedTo: 1)
+
+ let decodedTimeStamp = decodeTimestamp(stamp: encodedTime).0
+ let decodedThreshold = decodeTimestamp(stamp: encodedTime).1
+
+ let retPwrPtr: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 4, alignedTo: 1)
+ data.getBytes(retPwrPtr, range: NSRange(location: variableAdjust, length: 4))
+ var decodedPower: Any = retPwrPtr.load(as: Int32.self)
+ retPwrPtr.deallocate(bytes: 4, alignedTo: 1)
+ if decodedPower as! Int32 == Int32.min {
+ decodedPower = "-"
+ }
+ variableAdjust += 4
+
+ let retStringPtr: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: Int(decodedSize), alignedTo: 1)
+ data.getBytes(retStringPtr, range: NSRange(location: variableAdjust, length: Int(decodedSize)))
+ var retString: String = String(cString: retStringPtr.assumingMemoryBound(to: UInt8.self))
+ retStringPtr.deallocate(bytes: Int(decodedSize), alignedTo: 1)
+ retString = retString.substring(to: retString.index(retString.startIndex, offsetBy: Int(decodedSize)))
+ variableAdjust += Int(decodedSize)
+
+ guard decodedPower is Int32 else {
+ returnString.append("\(decodedTimeStamp);\(decodedPower as! String);\(decodedThreshold);\(retString)")
+ continue
+ }
+ returnString.append("\(decodedTimeStamp);\((Double(decodedPower as! Int32) / 100.0));\(decodedThreshold);\(retString)")
+ }
+ if returnString.count > 0 {
+ return returnString
+ }
+ return nil
+ }
+
+ static func loadDownstream(log data: NSData) -> [String]? {
+ var variableAdjust: Int = 0
+ var returnString: [String] = []
+
+ while variableAdjust < data.length {
+ // 3 for time
+ // 4 for Power
+ // 1 for SNR
+
+ let retTimePtr: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 3, alignedTo: 1)
+ data.getBytes(retTimePtr, range: NSRange(location: variableAdjust, length: 3))
+ variableAdjust += 3
+ let encodedTime: UInt32 = retTimePtr.load(as: UInt32.self)
+
+ let decodedTimeStamp = decodeTimestamp(stamp: encodedTime).0
+
+ let retPwrPtr: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 4, alignedTo: 1)
+ data.getBytes(retPwrPtr, range: NSRange(location: variableAdjust, length: 4))
+ var decodedPower: Any = retPwrPtr.load(as: Int32.self)
+ retPwrPtr.deallocate(bytes: 4, alignedTo: 1)
+ if decodedPower as! Int32 == Int32.min {
+ decodedPower = "-"
+ }
+ variableAdjust += 4
+
+ var decodedSNR: Any = data.bytes.load(fromByteOffset: variableAdjust, as: UInt8.self)
+ if decodedSNR as! UInt8 == UInt8.max {
+ decodedSNR = "-"
+ }
+ variableAdjust += 1
+
+ var entry: String = ""
+
+ guard decodedPower is Int32 else {
+ entry.append("\(decodedTimeStamp);\(decodedPower as! String);")
+ guard decodedSNR is UInt8 else {
+ entry.append("\(decodedSNR as! String)")
+ returnString.append(entry)
+ continue
+ }
+ entry.append("\(decodedSNR as! UInt8)")
+ returnString.append(entry)
+ continue
+ }
+ entry.append("\(decodedTimeStamp);\((Double(decodedPower as! Int32) / 100.0));")
+
+ guard decodedSNR is UInt8 else {
+ entry.append("\(decodedSNR as! String)")
+ returnString.append(entry)
+ continue
+ }
+ entry.append("\(decodedSNR as! UInt8)")
+
+ returnString.append(entry)
+ }
+ if returnString.count > 0 {
+ return returnString
+ }
+ return nil
+ }
}
diff --git a/Graphic Analysis 2/AppDelegate.swift b/Graphic Analysis 2/AppDelegate.swift
index cc7aacb..929d8e5 100644
--- a/Graphic Analysis 2/AppDelegate.swift
+++ b/Graphic Analysis 2/AppDelegate.swift
@@ -16,6 +16,15 @@ class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
pthread_mutex_init(&((NSApp.delegate as! AppDelegate).lock), nil)
+
+ /* TESTBED
+ do {
+ let data: NSData = try NSData(contentsOfFile: "/Users/kili2/Desktop/2017.docsisplist2/06/20/Downstream 666000000.hex")
+ print(FileOperations.loadDownstream(log: data))
+ } catch _ {
+ exit(-1)
+ }
+ **/
}
func applicationWillTerminate(_ aNotification: Notification) {
diff --git a/Graphic Analysis 2/CollectionViewMonth.swift b/Graphic Analysis 2/CollectionViewMonth.swift
index e085c59..5ea4cbb 100644
--- a/Graphic Analysis 2/CollectionViewMonth.swift
+++ b/Graphic Analysis 2/CollectionViewMonth.swift
@@ -87,7 +87,7 @@ extension CollectionViewMonth: NSCollectionViewDataSource {
/*
guard var logA = String(data: log.regularFileContents!, encoding: .utf8)?.components(separatedBy: "\n") else { return }
*/
- guard var logA = FileOperations.load(log: log.regularFileContents! as NSData)?.components(separatedBy: "\n") else { return }
+ guard var logA = FileOperations.load(log: log.regularFileContents! as NSData) else { return }
logA.removeLast()
item2.distribution = logA
OperationQueue.main.addOperation {
diff --git a/Graphic Analysis 2/Info.plist b/Graphic Analysis 2/Info.plist
index 55189b7..849eb1b 100644
--- a/Graphic Analysis 2/Info.plist
+++ b/Graphic Analysis 2/Info.plist
@@ -44,7 +44,7 @@
CFBundleShortVersionString
2.1
CFBundleVersion
- 418
+ 424
LSApplicationCategoryType
public.app-category.utilities
LSMinimumSystemVersion
diff --git a/Graphic Analysis 2/buildnum.ver b/Graphic Analysis 2/buildnum.ver
index 2e22ddb..b610306 100644
--- a/Graphic Analysis 2/buildnum.ver
+++ b/Graphic Analysis 2/buildnum.ver
@@ -1,2 +1,2 @@
version 2.1
-build 418
+build 424