static int usb_control_request_dispatch(usbd_device *usbd_dev, struct usb_setup_data *req) { int i, result = 0; struct user_control_callback *cb = usbd_dev->user_control_callback; /* Call user command hook function. */ for (i = 0; i < MAX_USER_CONTROL_CALLBACK; i++) { if (cb[i].cb == NULL) { break; } if ((req->bmRequestType & cb[i].type_mask) == cb[i].type) { result = cb[i].cb(usbd_dev, req, &(usbd_dev->control_state.ctrl_buf), &(usbd_dev->control_state.ctrl_len), &(usbd_dev->control_state.complete)); if (result == USBD_REQ_HANDLED || result == USBD_REQ_NOTSUPP) { return result; } } } /* Try standard request if not already handled. */ return _usbd_standard_request(usbd_dev, req, &(usbd_dev->control_state.ctrl_buf), &(usbd_dev->control_state.ctrl_len)); }
static int usb_control_request_dispatch(struct usb_setup_data *req) { int i, result = 0; struct user_control_callback *cb = _usbd_device.user_control_callback; /* Call user command hook function. */ for (i = 0; i < MAX_USER_CONTROL_CALLBACK; i++) { if (cb[i].cb == NULL) break; if ((req->bmRequestType & cb[i].type_mask) == cb[i].type) { result = cb[i].cb(req, &control_state.ctrl_buf, &control_state.ctrl_len, &control_state.complete); if (result) return result; } } /* Try standard request if not already handled. */ return _usbd_standard_request(req, &control_state.ctrl_buf, &control_state.ctrl_len); }