linux usb driver xbox360(3)

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

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.