implement bulk and interrupt transfer