libmcp2221을 사용해 보았습니다.
이 라이브러리를 Mac OS X에서 사용하려면 다음 HID 라이브러리가 필요합니다.
우선 mac/hid.c와 hidapi/hidapi.h가 있으면 좋은 것 같습니다.
libmcp2221 디렉토리에 파일을 복사하여 컴파일했는데 문제없이 컴파일을 통과했습니다.
이전에 만든 I2C 적외선 리모컨을 제어해 봅니다. examples/i2c/main.c를 조금 수정했습니다.
main.c
/*
* Project: MCP2221 HID Library
* Author: Zak Kemble, [email protected]
* Copyright: (C) 2015 by Zak Kemble
* License: GNU GPL v3 (see License.txt)
* Web: http://blog.zakkemble.co.uk/mcp2221-hid-library/
*/
#ifndef _WIN32
#define _BSD_SOURCE
#include <unistd.h>
#define Sleep(ms) usleep(ms * 1000)
#endif
#include <stdio.h>
#include "../libmcp2221/win/win.h"
#include "../libmcp2221/libmcp2221.h"
#include "../libmcp2221/hidapi.h"
int main(void)
{
puts("Starting!");
mcp2221_init();
// Get list of MCP2221s
printf("Looking for devices... ");
int count = mcp2221_find(MCP2221_DEFAULT_VID, MCP2221_DEFAULT_PID, NULL, NULL, NULL);
printf("found %d devices\n", count);
// Open whatever device was found first
printf("Opening device... ");
mcp2221_t* myDev = mcp2221_open();
if(!myDev)
{
mcp2221_exit();
puts("No MCP2221s found");
getchar();
return 0;
}
puts("done");
mcp2221_error res;
while(1)
{
Sleep(500);
uint8_t buff[2];
mcp2221_i2c_state_t state = MCP2221_I2C_IDLE;
// Stop any transfers
mcp2221_i2cState(myDev, &state);
if(state != MCP2221_I2C_IDLE)
mcp2221_i2cCancel(myDev);
// Set divider from 12MHz
mcp2221_i2cDivider(myDev, 26);
// Write IR Pattern
puts("Writing...");
uint8_t tmp[3];
// Sony CD Play
tmp[0] = 0x33;
tmp[1] = 0x4d;
tmp[2] = 0x10;
mcp2221_i2cWrite(myDev, 4, &tmp, 3, MCP2221_I2CRW_NORMAL);
puts("Write complete");
// Wait for completion
while(1)
{
if(mcp2221_i2cState(myDev, &state) != MCP2221_SUCCESS)
puts("ERROR");
printf("State: %hhu\n", state);
if(state == MCP2221_I2C_IDLE)
break;
}
break;
}
switch(res)
{
case MCP2221_SUCCESS:
puts("No error");
break;
case MCP2221_ERROR:
puts("General error");
break;
case MCP2221_INVALID_ARG:
puts("Invalid argument, probably null pointer");
break;
case MCP2221_ERROR_HID:
printf("USB HID Error: %ls\n", hid_error(myDev->handle));
break;
default:
printf("Unknown error %d\n", res);
break;
}
mcp2221_exit();
return 0;
}
아래에서 빌드합니다.
cc -o main hid.c libmcp2221.c main.c -framework IOKit -framework CoreFoundation
신호였습니다.
MCP2221은 시리얼에서도 사용할 수 있고 I2C에서도 사용할 수 있어 한 알로 두 번 맛있습니다.
이전에는 이런 종류는 FTDI의 칩이 편리했지만, 애플이 FTDI용의 마음대로 kext를 넣어 버려, 그대로는 BitBang을 사용할 수 없기 때문에, 이쪽이 좋을지도 모른다. 이것은 애플의 FTDI에 대한 괴롭힘이 아니다.
Reference
이 문제에 관하여(libmcp2221을 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamori813/items/e8fa21a6eddbf5595bfb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)