| // | |
| // KSPowerAssertion.h | |
| // Sandvox | |
| // | |
| // Created by Mike on 04/08/2012. | |
| // Copyright (c) 2012 Karelia Software. All rights reserved. | |
| // | |
| #import <Foundation/Foundation.h> | |
| #import <IOKit/pwr_mgt/IOPMLib.h> | |
| extern NSString *KSIOReturnErrorDomain; | |
| @interface KSPowerAssertion : NSObject | |
| { | |
| @private | |
| IOPMAssertionID _assertionID; | |
| } | |
| /** | |
| Creates a power assertion. | |
| @param type The type of power assertion to create, e.g. `kIOPMAssertionTypeNoIdleSleep`. | |
| @param name A string that describes the name of the caller and the activity being handled by this assertion (e.g. "Mail Compacting Mailboxes"). Name may be no longer than 128 characters. | |
| @param error Filled in with a `KSIOReturnErrorDomain` error, should creating the assertion fail. | |
| @result An object encapsulating the power assertion, or `nil` in the event of failure. | |
| */ | |
| - (id)initWithType:(CFStringRef)type name:(NSString *)name error:(NSError **)error __attribute((nonnull(1,2))); | |
| @end |
| // | |
| // KSPowerAssertion.m | |
| // Sandvox | |
| // | |
| // Created by Mike on 04/08/2012. | |
| // Copyright (c) 2012 Karelia Software. All rights reserved. | |
| // | |
| #import "KSPowerAssertion.h" | |
| NSString *KSIOReturnErrorDomain = @"com.apple.framework.IOKit.IOReturn"; | |
| @implementation KSPowerAssertion | |
| - (id)initWithType:(CFStringRef)type name:(NSString *)name error:(NSError **)error; | |
| { | |
| if (self = [self init]) | |
| { | |
| IOReturn result = IOPMAssertionCreateWithName(type, | |
| kIOPMAssertionLevelOn, | |
| (CFStringRef)name, | |
| &_assertionID); | |
| if (result != kIOReturnSuccess) | |
| { | |
| [self release]; self = nil; | |
| if (error) | |
| { | |
| *error = [NSError errorWithDomain:KSIOReturnErrorDomain code:result userInfo:nil]; | |
| } | |
| } | |
| } | |
| return self; | |
| } | |
| - (void)dealloc; | |
| { | |
| // It would be very very weird for cancellation to fail, so best bet seems to be to log it | |
| IOReturn released = IOPMAssertionRelease(_assertionID); | |
| if (released != kIOReturnSuccess) | |
| { | |
| NSLog(@"Re-enabling idle sleep failed: error %i", released); | |
| } | |
| [super dealloc]; | |
| } | |
| @end |
| Created by Mike Abdullah on 04/08/2012. | |
| Copyright © 2012 Karelia Software | |
| Permission is hereby granted, free of charge, to any person obtaining a copy | |
| of this software and associated documentation files (the "Software"), to deal | |
| in the Software without restriction, including without limitation the rights | |
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| copies of the Software, and to permit persons to whom the Software is | |
| furnished to do so, subject to the following conditions: | |
| The above copyright notice and this permission notice shall be included in | |
| all copies or substantial portions of the Software. | |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
| THE SOFTWARE. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment