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