how to detemine the "request" parameter in function usbd_set

I am trying to write a class drive so I studied the ddk docs and the sample
codes.However,i just cant understand how to determine the value of request
in function usbd_setup_vendor
the prototype is:
int usbd_setup_vendor( struct usbd_urb *urb,
_uint32 flags, _uint16 request,
_uint16 rtype, _uint16 value,
_uint16 index, void *addr,
_uint32 len );

in sample code prn.c,it is called for 3 times:

  1. usbd_setup_vendor( urb, URB_DIR_IN, 0, USB_TYPE_CLASS |
    USB_RECIPIENT_INTERFACE, 0, 0, buffer, length );
  2. usbd_setup_vendor( urb, URB_DIR_OUT, PRN_SOFT_RESET /=2/,
    ( ( prn->bcdUSB & 0x10 ) ? USB_RECIPIENT_INTERFACE :
  3. usbd_setup_vendor( urb, URB_DIR_IN, 1, USB_TYPE_CLASS |
    USB_RECIPIENT_INTERFACE, 0, 0, buffer, 1 );

As I can’t find other sample source codes, could anyone kindly tell me how
to make the decision? Thanks very much.