#include <IOKit/pwr_mgt/IOPMLib.h>
#ifndef kIOPMAssertionUserIsActive
/* この文字列定数は IOMPLib.h には定義されていないが (他の定数 kIOPMAssertion* は定義されているのに)、
caffeinate(8) はこの値で IOPMAssertionCreateWithDescription 関数を呼び出しているようだ。*/
#define kIOPMAssertionUserIsActive CFSTR("UserIsActive")
#endif
void AwakeFromDisplaySleep()
{
CFTimeInterval timeout = 5; /* magic number: caffeinate(8) は -u オプションが渡された場合この値を使うようだ */
IOPMAssertionID id = 0;
IOPMAssertionCreateWithDescription(
kIOPMAssertionUserIsActive,
CFSTR("TODO: name"), /* 適当に設定する */
CFSTR("TODO: details"), /* 適当に設定する */
CFSTR("TODO: human readable reason"), /* 適当に設定する */
CFSTR("/System/Library/CoreServices/powerd.bundle"),
timeout,
kIOPMAssertionTimeoutActionRelease,
&id);
}