diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b10b74 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Pods +xcuserdata diff --git a/CAM.xcodeproj/project.pbxproj b/CAM.xcodeproj/project.pbxproj index 1f581de..95e9400 100644 --- a/CAM.xcodeproj/project.pbxproj +++ b/CAM.xcodeproj/project.pbxproj @@ -7,20 +7,26 @@ objects = { /* Begin PBXBuildFile section */ + 4169D3350D8E5D3BD065F379 /* Pods_CAM.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A809B55DBAF81869F347309D /* Pods_CAM.framework */; }; C06C40B721F3EF68007BBCF4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06C40B621F3EF68007BBCF4 /* AppDelegate.swift */; }; - C06C40B921F3EF68007BBCF4 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06C40B821F3EF68007BBCF4 /* ViewController.swift */; }; C06C40BB21F3EF68007BBCF4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C06C40BA21F3EF68007BBCF4 /* Assets.xcassets */; }; C06C40BE21F3EF68007BBCF4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C06C40BC21F3EF68007BBCF4 /* Main.storyboard */; }; + C06C40C721F3EF72007BBCF4 /* CAMCtl.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06C40C621F3EF72007BBCF4 /* CAMCtl.swift */; }; + C06C40C921F3FCA4007BBCF4 /* Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06C40C821F3FCA4007BBCF4 /* Menu.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 0073583C8B7F232EA4951376 /* Pods-CAM.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CAM.release.xcconfig"; path = "Pods/Target Support Files/Pods-CAM/Pods-CAM.release.xcconfig"; sourceTree = ""; }; + 198C91DD12BC8ADF09BB8270 /* Pods-CAM.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CAM.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CAM/Pods-CAM.debug.xcconfig"; sourceTree = ""; }; + A809B55DBAF81869F347309D /* Pods_CAM.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CAM.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C06C40B321F3EF68007BBCF4 /* CAM.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CAM.app; sourceTree = BUILT_PRODUCTS_DIR; }; C06C40B621F3EF68007BBCF4 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - C06C40B821F3EF68007BBCF4 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; C06C40BA21F3EF68007BBCF4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; C06C40BD21F3EF68007BBCF4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; C06C40BF21F3EF68007BBCF4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C06C40C021F3EF68007BBCF4 /* CAM.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = CAM.entitlements; sourceTree = ""; }; + C06C40C621F3EF72007BBCF4 /* CAMCtl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CAMCtl.swift; sourceTree = ""; }; + C06C40C821F3FCA4007BBCF4 /* Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Menu.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -28,17 +34,37 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4169D3350D8E5D3BD065F379 /* Pods_CAM.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1972E8AD1216797E8985B14C /* Pods */ = { + isa = PBXGroup; + children = ( + 198C91DD12BC8ADF09BB8270 /* Pods-CAM.debug.xcconfig */, + 0073583C8B7F232EA4951376 /* Pods-CAM.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 8A94FD9040D5A471362D75CF /* Frameworks */ = { + isa = PBXGroup; + children = ( + A809B55DBAF81869F347309D /* Pods_CAM.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; C06C40AA21F3EF68007BBCF4 = { isa = PBXGroup; children = ( C06C40B521F3EF68007BBCF4 /* CAM */, C06C40B421F3EF68007BBCF4 /* Products */, + 1972E8AD1216797E8985B14C /* Pods */, + 8A94FD9040D5A471362D75CF /* Frameworks */, ); sourceTree = ""; }; @@ -54,11 +80,12 @@ isa = PBXGroup; children = ( C06C40B621F3EF68007BBCF4 /* AppDelegate.swift */, - C06C40B821F3EF68007BBCF4 /* ViewController.swift */, C06C40BA21F3EF68007BBCF4 /* Assets.xcassets */, C06C40BC21F3EF68007BBCF4 /* Main.storyboard */, C06C40BF21F3EF68007BBCF4 /* Info.plist */, C06C40C021F3EF68007BBCF4 /* CAM.entitlements */, + C06C40C621F3EF72007BBCF4 /* CAMCtl.swift */, + C06C40C821F3FCA4007BBCF4 /* Menu.swift */, ); path = CAM; sourceTree = ""; @@ -70,9 +97,11 @@ isa = PBXNativeTarget; buildConfigurationList = C06C40C321F3EF68007BBCF4 /* Build configuration list for PBXNativeTarget "CAM" */; buildPhases = ( + 70654876BC19C76F10A25B26 /* [CP] Check Pods Manifest.lock */, C06C40AF21F3EF68007BBCF4 /* Sources */, C06C40B021F3EF68007BBCF4 /* Frameworks */, C06C40B121F3EF68007BBCF4 /* Resources */, + 58EB4F4153468D111BACA1B5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -95,6 +124,11 @@ TargetAttributes = { C06C40B221F3EF68007BBCF4 = { CreatedOnToolsVersion = 10.1; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; }; }; }; @@ -128,12 +162,60 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 58EB4F4153468D111BACA1B5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-CAM/Pods-CAM-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/hidapi/hidapi.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hidapi.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CAM/Pods-CAM-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 70654876BC19C76F10A25B26 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-CAM-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ C06C40AF21F3EF68007BBCF4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C06C40B921F3EF68007BBCF4 /* ViewController.swift in Sources */, + C06C40C721F3EF72007BBCF4 /* CAMCtl.swift in Sources */, + C06C40C921F3FCA4007BBCF4 /* Menu.swift in Sources */, C06C40B721F3EF68007BBCF4 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -269,9 +351,11 @@ }; C06C40C421F3EF68007BBCF4 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 198C91DD12BC8ADF09BB8270 /* Pods-CAM.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = CAM/CAM.entitlements; + CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = DCFUXK7B3L; @@ -282,15 +366,18 @@ ); PRODUCT_BUNDLE_IDENTIFIER = me.gabrielrinaldi.CAM; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 4.2; }; name = Debug; }; C06C40C521F3EF68007BBCF4 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0073583C8B7F232EA4951376 /* Pods-CAM.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = CAM/CAM.entitlements; + CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = DCFUXK7B3L; @@ -301,6 +388,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = me.gabrielrinaldi.CAM; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 4.2; }; name = Release; diff --git a/CAM.xcworkspace/contents.xcworkspacedata b/CAM.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..a30c49b --- /dev/null +++ b/CAM.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/CAM.xcodeproj/xcuserdata/gabriel.xcuserdatad/xcschemes/xcschememanagement.plist b/CAM.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 55% rename from CAM.xcodeproj/xcuserdata/gabriel.xcuserdatad/xcschemes/xcschememanagement.plist rename to CAM.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist index e4bd255..18d9810 100644 --- a/CAM.xcodeproj/xcuserdata/gabriel.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/CAM.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -2,13 +2,7 @@ - SchemeUserState - - CAM.xcscheme_^#shared#^_ - - orderHint - 0 - - + IDEDidComputeMac32BitWarning + diff --git a/CAM/AppDelegate.swift b/CAM/AppDelegate.swift index 2e57902..572d62f 100644 --- a/CAM/AppDelegate.swift +++ b/CAM/AppDelegate.swift @@ -10,17 +10,20 @@ import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { - - - + private var camctl: CAMCtl? + private var menu: Menu? + func applicationDidFinishLaunching(_ aNotification: Notification) { - // Insert code here to initialize your application + self.camctl = CAMCtl() + + if let camctl = self.camctl { + self.menu = Menu(camctl: camctl) + } } func applicationWillTerminate(_ aNotification: Notification) { - // Insert code here to tear down your application + if let camctl = self.camctl { + camctl.unload() + } } - - } - diff --git a/CAM/Assets.xcassets/StatusBarButtonImage.imageset/Contents.json b/CAM/Assets.xcassets/StatusBarButtonImage.imageset/Contents.json new file mode 100644 index 0000000..4f5720b --- /dev/null +++ b/CAM/Assets.xcassets/StatusBarButtonImage.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "StatusBarButtonImage-1.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "StatusBarButtonImage.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/CAM/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage-1.png b/CAM/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage-1.png new file mode 100644 index 0000000..5eb78aa Binary files /dev/null and b/CAM/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage-1.png differ diff --git a/CAM/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage.png b/CAM/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage.png new file mode 100644 index 0000000..5eb78aa Binary files /dev/null and b/CAM/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage.png differ diff --git a/CAM/Base.lproj/Main.storyboard b/CAM/Base.lproj/Main.storyboard index 3d54684..594cc23 100644 --- a/CAM/Base.lproj/Main.storyboard +++ b/CAM/Base.lproj/Main.storyboard @@ -1,7 +1,8 @@ - - + + - + + @@ -673,45 +674,11 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CAM/CAM.entitlements b/CAM/CAM.entitlements index f2ef3ae..9c8ecca 100644 --- a/CAM/CAM.entitlements +++ b/CAM/CAM.entitlements @@ -2,9 +2,11 @@ - com.apple.security.app-sandbox - - com.apple.security.files.user-selected.read-only - + com.apple.security.app-sandbox + + com.apple.security.device.usb + + com.apple.security.files.user-selected.read-only + diff --git a/CAM/CAMCtl.swift b/CAM/CAMCtl.swift new file mode 100644 index 0000000..77438cb --- /dev/null +++ b/CAM/CAMCtl.swift @@ -0,0 +1,88 @@ +// +// CAMCtl.swift +// CAM +// +// Created by Gabriel Rinaldi on 1/19/19. +// Copyright © 2019 Gabriel Rinaldi. All rights reserved. +// + +import hidapi + +let BUF_LEN = 64 + +class CAMCtl { + private var handle: OpaquePointer? + private var buffer: [UInt8] + private var status: [String: Float]? + + init() { + hid_init() + + self.buffer = [UInt8](repeating: 0, count: BUF_LEN + 1) + self.handle = hid_open(0x1e71, 0x170e, nil) + + refreshStatus() + } + + func isLoaded() -> Bool { + return (self.handle != nil) + } + + func getStatus() -> [String: Float]? { + if !isLoaded() { + return nil + } + + refreshStatus() + + return status; + } + + func setFan(speed: Int) { + if !isLoaded() { + return + } + + hid_write(handle, [2, 77, 0, 0, UInt8(speed)], 5) + } + + func setPump(speed: Int) { + if !isLoaded() { + return + } + + hid_write(handle, [2, 77, 64, 0, UInt8(speed)], 5) + } + + private func refreshStatus() { + let rcount = hid_read(handle, &self.buffer, BUF_LEN) + + if (rcount < 0) { + self.status = nil + + return + } + + let temperature = Float(self.buffer[1]) + Float(self.buffer[2]) / 10 + let fan = Float(Int(self.buffer[3]) << 8 | Int(self.buffer[4])) + let pump = Float(Int(self.buffer[5]) << 8 | Int(self.buffer[6])) + + self.status = [ + "temperature" : temperature, + "fan": fan, + "pump": pump + ] + } + + func unload() { + if isLoaded() { + hid_close(handle) + } + + hid_exit() + } + + deinit { + unload() + } +} diff --git a/CAM/Info.plist b/CAM/Info.plist index a3f974d..7e95b79 100644 --- a/CAM/Info.plist +++ b/CAM/Info.plist @@ -17,11 +17,15 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 0.0.1 CFBundleVersion 1 + LSApplicationCategoryType + public.app-category.utilities LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) + LSUIElement + NSHumanReadableCopyright Copyright © 2019 Gabriel Rinaldi. All rights reserved. NSMainStoryboardFile diff --git a/CAM/Menu.swift b/CAM/Menu.swift new file mode 100644 index 0000000..a5e1ff5 --- /dev/null +++ b/CAM/Menu.swift @@ -0,0 +1,133 @@ +// +// Menu.swift +// CAM +// +// Created by Gabriel Rinaldi on 1/19/19. +// Copyright © 2019 Gabriel Rinaldi. All rights reserved. +// + +import Cocoa + +class Menu: NSObject, NSMenuDelegate { + private let camctl: CAMCtl + private let statusItem: NSStatusItem + private let menu: NSMenu + private var titleMenu: NSMenuItem + private var temperatureMenu: NSMenuItem + private var fanMenu: NSMenuItem + private var pumpMenu: NSMenuItem + private let disabledMenu: NSMenuItem + + init(camctl: CAMCtl) { + self.camctl = camctl + + self.statusItem = NSStatusBar.system.statusItem(withLength:NSStatusItem.squareLength) + if let statusItemButton = self.statusItem.button { + if let statusImage = NSImage(named: NSImage.Name("StatusBarButtonImage")) { + statusImage.size = NSMakeSize(18.0, 18.0) + statusItemButton.image = statusImage + } + } + + self.menu = NSMenu() + self.titleMenu = NSMenuItem(title: "NZXT Kraken X62", action: #selector(refresh), keyEquivalent: "r") + self.temperatureMenu = NSMenuItem() + self.temperatureMenu.title = "Loading..." + self.fanMenu = NSMenuItem(title: "Loading...", action: nil, keyEquivalent: "f") + self.pumpMenu = NSMenuItem(title: "Loading...", action: nil, keyEquivalent: "p") + self.disabledMenu = NSMenuItem(title: "No devices found", action: #selector(refresh), keyEquivalent: "r") + + super.init() + + constructMenu() + } + + func menuWillOpen(_ menu: NSMenu) { + refreshMenus() + } + + @objc func refresh() { + self.refreshMenus() + } + + @objc func setFan(_ sender: NSMenuItem) { + self.camctl.setFan(speed: sender.tag) + } + + @objc func setPump(_ sender: NSMenuItem) { + self.camctl.setPump(speed: sender.tag) + } + + private func refreshMenus() { + if self.camctl.isLoaded() { + if let status = self.camctl.getStatus() { + if let temperature = status["temperature"] { + self.temperatureMenu.title = "Temperature: \(temperature)ºC" + } else { + self.temperatureMenu.title = "Temperature: !" + } + + if let fan = status["fan"] { + self.fanMenu.title = "Fan: \(fan) RPM" + } else { + self.fanMenu.title = "Fan: !" + } + + if let pump = status["pump"] { + self.pumpMenu.title = "Pump: \(pump) RPM" + } else { + self.pumpMenu.title = "Pump: !" + } + } else { + self.temperatureMenu.title = "Temperature: !" + self.fanMenu.title = "Fan: !" + self.pumpMenu.title = "Pump: !" + } + } + } + + private func constructMenu() { + self.titleMenu.target = self + self.temperatureMenu.target = self + self.fanMenu.target = self + self.pumpMenu.target = self + + + let fanMenu = NSMenu() + for i in 3...10 { + let menuItem = NSMenuItem() + menuItem.title = "\(i * 10)%" + menuItem.target = self + menuItem.action = #selector(setFan(_:)) + menuItem.tag = i * 10 + fanMenu.addItem(menuItem) + } + self.fanMenu.submenu = fanMenu + + let pumpMenu = NSMenu() + for i in 3...10 { + let menuItem = NSMenuItem() + menuItem.title = "\(i * 10)%" + menuItem.target = self + menuItem.action = #selector(setPump(_:)) + menuItem.tag = i * 10 + pumpMenu.addItem(menuItem) + } + self.pumpMenu.submenu = pumpMenu + + if self.camctl.isLoaded() { + self.menu.addItem(self.titleMenu) + self.menu.addItem(self.temperatureMenu) + self.menu.addItem(self.fanMenu) + self.menu.addItem(self.pumpMenu) + } else { + self.menu.addItem(self.disabledMenu) + } + + self.menu.addItem(NSMenuItem.separator()) + self.menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q")) + + self.statusItem.menu = self.menu + self.menu.delegate = self + } +} diff --git a/CAM/ViewController.swift b/CAM/ViewController.swift deleted file mode 100644 index 27ac65d..0000000 --- a/CAM/ViewController.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// ViewController.swift -// CAM -// -// Created by Gabriel Rinaldi on 1/19/19. -// Copyright © 2019 Gabriel Rinaldi. All rights reserved. -// - -import Cocoa - -class ViewController: NSViewController { - - override func viewDidLoad() { - super.viewDidLoad() - - // Do any additional setup after loading the view. - } - - override var representedObject: Any? { - didSet { - // Update the view, if already loaded. - } - } - - -} - diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..a5263fd --- /dev/null +++ b/Podfile @@ -0,0 +1,7 @@ +platform :osx + +target 'CAM' do + use_frameworks! + + pod 'hidapi' +end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..d486754 --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,16 @@ +PODS: + - hidapi (1.0.0) + +DEPENDENCIES: + - hidapi + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - hidapi + +SPEC CHECKSUMS: + hidapi: 88dabef48766d02950b8a21ff018a9ff0c0fafc7 + +PODFILE CHECKSUM: f9fbc13ee2ad0d114120aba387bb9b25fc53f901 + +COCOAPODS: 1.5.3