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 컨트롤러를 입력으로 사용하는 방법으로 넘어가도 된다.