Здравствуйте!
подскажите пожалуйста, как правильно выцепить данные из USB запроса
сейчас у меня сделано так:
CODE
static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev,
USBD_SetupReqTypedef *req)
{
USBD_CDC_HandleTypeDef *hcdc = pdev->pClassData;
switch (req->bmRequest & USB_REQ_TYPE_MASK)
{
// case USB_REQ_TYPE_CLASS :
case USB_REQ_TYPE_VENDOR :
if (req->wLength)
{
if (req->bmRequest & 0x80)
{//если надо отправить служебные данные на комп
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
(uint8_t *)hcdc->data,
req->wLength);
USBD_CtlSendData (pdev,
(uint8_t *)hcdc->data,
req->wLength);
}
else
{//принять запрос с данными
hcdc->CmdOpCode = req->bRequest;
hcdc->CmdLength = req->wLength;
USBD_CtlPrepareRx (pdev,
(uint8_t *)hcdc->data,
req->wLength);//прием данных
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
(uint8_t *)hcdc->data,
req->wLength);
USBD_CtlSendStatus(pdev);
}
break;
}
else
{
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
/*NULL*/ (uint8_t *)hcdc->data,
/*0*/req->wLength);
USBD_CtlSendStatus(pdev);
}
}
return USBD_OK;
}
Код
static int8_t CDC_Control_HS (uint8_t cmd, uint8_t* pbuf, uint16_t length)
{
/* USER CODE BEGIN 11 */
switch (cmd)
{
case USB_REQ_VENDOR /*CDC_SEND_ENCAPSULATED_COMMAND*/:
for (uint8_t i=0; i < length; i++)
{
Array_test[i] = pbuf[i];
}
if ((Array_test[0]==1) && (Array_test[1]==3) && (Array_test[2]==5) && (Array_test[3]==7) && (Array_test[4]== 9))
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET);
}
break;
}
}
в итоге при первом запросе данных нет (вернее есть, но они нулевые), при последующих запросах приходят верные данные. что я делаю не так?
Сообщение отредактировал Atlantis- - Oct 16 2014, 09:14