Skip to content

Instantly share code, notes, and snippets.

@atr000
Created May 26, 2010 23:30
Show Gist options
  • Save atr000/415222 to your computer and use it in GitHub Desktop.
Save atr000/415222 to your computer and use it in GitHub Desktop.
/*
* Copyright (c), MM Weiss
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the MM Weiss nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* battery.c
*
*/
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/pwr_mgt/IOPMLib.h>
#include <IOKit/pwr_mgt/IOPM.h>
#include <IOKit/ps/IOPSKeys.h>
#include <IOKit/ps/IOPowerSources.h>
int main(void)
{
int i, b;
CFIndex cnt;
CFArrayRef psl;
CFDictionaryRef d;
CFTypeRef w, psi, v;
psi = IOPSCopyPowerSourcesInfo();
psl = IOPSCopyPowerSourcesList(psi);
#if 0
CFShow(IOPSCopyPowerSourcesInfo());
#endif
if(0 < (cnt = CFArrayGetCount(psl)))
{
b = 0;
for(i = 0; i < cnt; i++)
{
w = CFArrayGetValueAtIndex(psl, i);
d = IOPSGetPowerSourceDescription(psi, w);
if(d != nil) {
v = CFDictionaryGetValue(d, CFSTR("Current Capacity"));
if(v != nil) {
if(!CFNumberGetValue(v, kCFNumberSInt32Type, &b)) { b = 100; } break;
}
}
}
printf("b = %d / 100\n", b);
if(psl)
CFRelease(psl);
if(psi)
CFRelease(psi);
} else {
puts("Power Sources Info is empty");
}
return EXIT_SUCCESS;
}
/* EOF */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment