isight光センサーの使用に関する公開ドキュメントはないことを認識していますが、ShadowBook (ここに表示)などのプログラムは明るさデータにアクセスでき、誰かが同様の結果を達成できたかどうかを単に疑問に思っていました。このセンサーにアクセスする方法を知っていますか?ありがとう!
1 に答える
IOKit ライブラリから、IOService を使用して光センサーにアクセスできます。光センサーの名前は「AppleLMUController」です。これが良い例です:光センサー. 簡単に言えば、次のようにサービスを取得します。io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController"));
次に、次を使用してサービスに接続します。
io_connect_t port = 0;
IOServiceOpen(service, mach_task_self(), 0, &port);
以下を使用して光レベルを取得します。とは、IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right);
センサーの光レベルを保持する整数です。多くの IOService メソッドは、メソッドが失敗しない限り、を保持する変数を返すことに注意してください。また、必ず次を使用してサービス オブジェクトを解放してください。left
right
kern_return_t
KERN_SUCCESS
IOObjectRelease(service);
編集:考え直して、IOConnectMethodScalarIScalarO()
非推奨のようです。代わりに、次を使用します。
uint32_t outputs = 2;
uint64_t values[outputs];
IOConnectCallMethod(port, 0, nil, 0, nil, 0, values , &outputs, nil, 0);
左と右の値はそれぞれ と に格納されvalues[0]
ますvalues[1]
。すべての MacBook がこのように動作するわけではないことに注意してください。私の 2010 年半ばの 15 インチ プロでは、光センサーが iSight カメラにあるため、両方の値が同じです。