It works for me to invoke usb_hid_init twice with difffer interface description like this.
ret = usb_hid_init(g_hUsb,
(USB_INTERFACE_DESCRIPTOR *) &USB_FsConfigDescriptor[sizeof(USB_CONFIGURATION_DESCRIPTOR)],
&usb_param.mem_base,
&usb_param.mem_size);
ret = usb_hid_btn_init(g_hUsb,
&USB_FsConfigDescriptor[sizeof(USB_CONFIGURATION_DESCRIPTOR) + USB_INTERFACE_DESC_SIZE + HID_DESC_SIZE + 2*USB_ENDPOINT_DESC_SIZE ],
&usb_param.mem_base,
&usb_param.mem_size);
Thanks
Sam