IDA 사용하기
고유한 번호를 부여하기 위하여 define_ida, ida_simple_get, ida_simple_remove 형식으로 사용한다.
//사용할 구조체 선언.
struct usb_xpad{
struct input_dev *dev; /* input device interface */
...
int pad_nr; // order
};
...
static DEFINE_IDA(xpad_pad_seq);
static int xpad_led_probe(struct usb_xpad *xpad)
{
//ida 할당
//pad_nr을 계속 증가..
//led가 몇번에 연결되어 있는지 알 수 있음.
//0~0x8,000,000 - 1까지 증가
xpad->pad_nr = ida_simple_get(&xpad_pad_seq, 0, 0, GFP_KERNEL);
if (xpad->pad_nr < 0){
retval = xpad->pad_nr;
goto free_mem;
}
free_mem:
kfree(led);
return retval;
}
xbox 360 패드가 4개 램프를 가지고 있다. 플레이어에 따라 램프를 달리 켜줘야 하는데, xpad->pad_nr을 ida 번호를 부여하여 4로 나눈 나머지에 2를 더했다. 5번째 패드를 붙여도 불을 것 같지만 xpad_led5이런 식으로 추가될 듯 하다. 플레이어 1과 같은 램프가 켜질 듯 하다.
메모리가 부족하면 ida를 할당하지 못한다. xpad.c를 보면 다시 해제 하도록 했다.
led+숫자로 등록하여 usb_unregister로 led 디바이스를 해제하면 된다. 이제 xbox 컨트롤러를 입력으로 사용하는 방법으로 넘어가도 된다.