Связь i2c в IOKit на Mac OS X

Я пытаюсь связаться с дисплеем через ddc/ci с помощью функции MacOS X IOI2CSendRequest. Все работает, если я просто посылаю команду "установить", как установить яркость. Я вижу, что дисплей получает команду, потому что дисплей меняет яркость.

Но когда я пытаюсь получить ответ от дисплея, я получаю мусор. Как правильно отправить и получить ответ с 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 (Snow Leopard)

Есть идеи, что не так в этом коде?

1 ответ

Будьте осторожны с обновлениями Mac OS. Этот код прекрасно работает в Mac OS 10.8.3 и 10.7.4, но не работает в 10.7.5 и 10.8.2.

Другие вопросы по тегам