1/*
2cc idtest.c -o /tmp/idtest -Wall -framework IOKit -framework CoreFoundation
3 */
4
5#include <assert.h>
6#include <CoreFoundation/CoreFoundation.h>
7#include <IOKit/IOKitLib.h>
8#include <IOKit/IOKitKeys.h>
9
10int main(int argc, char **argv)
11{
12    io_registry_entry_t    service;
13    io_connect_t           connect;
14    SInt32                 id1, id2, id3;
15    kern_return_t          status;
16
17    service = IORegistryEntryFromPath(kIOMasterPortDefault,
18                                    kIOServicePlane ":/IOResources/IODisplayWrangler");
19    assert(service);
20    if (service)
21    {
22        status = IOServiceOpen(service, mach_task_self(), 0, &connect);
23        IOObjectRelease(service);
24        assert(kIOReturnSuccess == status);
25
26    }
27
28    enum { kAlloc, kFree };
29enum {
30    kIOAccelSpecificID          = 0x00000001
31};
32
33
34    status = IOConnectMethodScalarIScalarO(connect, kAlloc, 2, 1, kNilOptions, 0, &id1);
35    assert(kIOReturnSuccess == status);
36    printf("ID: %x\n", id1);
37    status = IOConnectMethodScalarIScalarO(connect, kFree, 2, 0, kNilOptions, id1);
38    assert(kIOReturnSuccess == status);
39    status = IOConnectMethodScalarIScalarO(connect, kAlloc, 2, 1, kNilOptions, 0, &id1);
40    assert(kIOReturnSuccess == status);
41    printf("ID: %x\n", id1);
42
43
44    status = IOConnectMethodScalarIScalarO(connect, kAlloc, 2, 1, kIOAccelSpecificID, 53, &id2);
45    assert(kIOReturnSuccess == status);
46    printf("ID: %x\n", id2);
47
48
49    status = IOConnectMethodScalarIScalarO(connect, kFree, 2, 0, kNilOptions, id1);
50    assert(kIOReturnSuccess == status);
51    printf("free ID: %d\n", id1);
52
53    status = IOConnectMethodScalarIScalarO(connect, kFree, 2, 0, kNilOptions, id2);
54    assert(kIOReturnSuccess == status);
55    printf("free ID: %d\n", id2);
56
57    exit(0);
58}
59
60
61