在Mac OS X上的IOKit中进行i2c通信

时间:2012-07-19 13:12:31

标签: c++ macos iokit i2c

我正在尝试使用MacOS X函数IOI2CSendRequest与ddc / ci上的显示进行通信。 如果我只是发送“设置”命令,如设置亮度,所有工作。我看到显示接收命令,因为显示改变亮度。

但是当我试图接收来自显示屏的回复时,我会收到一些垃圾。使用IOI2CSendRequest发送和接收回复的正确方法是什么?

这是我目前的代码:

memset(&request, 0, sizeof (request));
request.commFlags = 0;
request.sendAddress = addr << 1;
request.sendTransactionType =  kIOI2CSimpleTransactionType;
request.sendBuffer = (vm_address_t) package;
request.sendBytes = i;
request.replyAddress = (addr << 1) + 1;

request.replyTransactionType = kIOI2CNoTransactionType;
request.replyBuffer = NULL;
request.replyBytes = 0;

kr = IOI2CSendRequest(Display_, kNilOptions, &request);



mysleep(1000);
memset(&request, 0, sizeof (request));
request.commFlags = 0;
request.sendAddress = addr << 1;
request.sendTransactionType =  kIOI2CNoTransactionType;
request.sendBuffer = (vm_address_t)package;
request.sendBytes = 0;
request.replyAddress =  (addr << 1) + 1;
request.replyTransactionType = kIOI2CSimpleTransactionType;
request.replyBuffer = (vm_address_t) buf;
request.replyBytes = 127;   

memset(buf, 0, request.replyBytes);

kr = IOI2CSendRequest(Display_, kNilOptions, &request);

kr和request.result都等于kIOReturnSuccess,但buf中没有有效数据。 发送命令为“51 82 01 10 AC”,其中AC为校验和。

操作系统是10.6.8(雪豹)

知道这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:4)

小心Mac OS更新。 此代码适用于Mac OS 10.8.3和10.7.4,但不适用于10.7.5和10.8.2。