Prusa MINI Firmware overview
USBD_REQ_Exported_FunctionsPrototype
Collaboration diagram for USBD_REQ_Exported_FunctionsPrototype:

Functions

USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
 USBD_StdDevReq Handle standard usb device requests. More...
 
USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
 USBD_StdItfReq Handle standard usb interface requests. More...
 
USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
 USBD_StdEPReq Handle standard usb endpoint requests. More...
 
void USBD_CtlError (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
 USBD_CtlError Handle USB low level Error. More...
 
void USBD_ParseSetupRequest (USBD_SetupReqTypedef *req, uint8_t *pdata)
 USBD_ParseSetupRequest Copy buffer into setup structure. More...
 
void USBD_GetString (uint8_t *desc, uint8_t *unicode, uint16_t *len)
 USBD_GetString Convert Ascii string into unicode one. More...
 

Detailed Description

Function Documentation

◆ USBD_StdDevReq()

USBD_StatusTypeDef USBD_StdDevReq ( USBD_HandleTypeDef pdev,
USBD_SetupReqTypedef req 
)

USBD_StdDevReq Handle standard usb device requests.

Parameters
pdevdevice instance
requsb request
Return values
status
120 {
122 
123  switch (req->bRequest)
124  {
126 
127  USBD_GetDescriptor (pdev, req) ;
128  break;
129 
130  case USB_REQ_SET_ADDRESS:
131  USBD_SetAddress(pdev, req);
132  break;
133 
135  USBD_SetConfig (pdev , req);
136  break;
137 
139  USBD_GetConfig (pdev , req);
140  break;
141 
142  case USB_REQ_GET_STATUS:
143  USBD_GetStatus (pdev , req);
144  break;
145 
146 
147  case USB_REQ_SET_FEATURE:
148  USBD_SetFeature (pdev , req);
149  break;
150 
152  USBD_ClrFeature (pdev , req);
153  break;
154 
155  default:
156  USBD_CtlError(pdev , req);
157  break;
158  }
159 
160  return ret;
161 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ USBD_StdItfReq()

USBD_StatusTypeDef USBD_StdItfReq ( USBD_HandleTypeDef pdev,
USBD_SetupReqTypedef req 
)

USBD_StdItfReq Handle standard usb interface requests.

Parameters
pdevdevice instance
requsb request
Return values
status
171 {
173 
174  switch (pdev->dev_state)
175  {
177 
179  {
180  pdev->pClass->Setup (pdev, req);
181 
182  if((req->wLength == 0)&& (ret == USBD_OK))
183  {
184  USBD_CtlSendStatus(pdev);
185  }
186  }
187  else
188  {
189  USBD_CtlError(pdev , req);
190  }
191  break;
192 
193  default:
194  USBD_CtlError(pdev , req);
195  break;
196  }
197  return USBD_OK;
198 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ USBD_StdEPReq()

USBD_StatusTypeDef USBD_StdEPReq ( USBD_HandleTypeDef pdev,
USBD_SetupReqTypedef req 
)

USBD_StdEPReq Handle standard usb endpoint requests.

Parameters
pdevdevice instance
requsb request
Return values
status
208 {
209 
210  uint8_t ep_addr;
213  ep_addr = LOBYTE(req->wIndex);
214 
215  /* Check if it is a class request */
216  if ((req->bmRequest & 0x60) == 0x20)
217  {
218  pdev->pClass->Setup (pdev, req);
219 
220  return USBD_OK;
221  }
222 
223  switch (req->bRequest)
224  {
225 
226  case USB_REQ_SET_FEATURE :
227 
228  switch (pdev->dev_state)
229  {
231  if ((ep_addr != 0x00) && (ep_addr != 0x80))
232  {
233  USBD_LL_StallEP(pdev , ep_addr);
234  }
235  break;
236 
238  if (req->wValue == USB_FEATURE_EP_HALT)
239  {
240  if ((ep_addr != 0x00) && (ep_addr != 0x80))
241  {
242  USBD_LL_StallEP(pdev , ep_addr);
243 
244  }
245  }
246  pdev->pClass->Setup (pdev, req);
247  USBD_CtlSendStatus(pdev);
248 
249  break;
250 
251  default:
252  USBD_CtlError(pdev , req);
253  break;
254  }
255  break;
256 
257  case USB_REQ_CLEAR_FEATURE :
258 
259  switch (pdev->dev_state)
260  {
262  if ((ep_addr != 0x00) && (ep_addr != 0x80))
263  {
264  USBD_LL_StallEP(pdev , ep_addr);
265  }
266  break;
267 
269  if (req->wValue == USB_FEATURE_EP_HALT)
270  {
271  if ((ep_addr & 0x7F) != 0x00)
272  {
273  USBD_LL_ClearStallEP(pdev , ep_addr);
274  pdev->pClass->Setup (pdev, req);
275  }
276  USBD_CtlSendStatus(pdev);
277  }
278  break;
279 
280  default:
281  USBD_CtlError(pdev , req);
282  break;
283  }
284  break;
285 
286  case USB_REQ_GET_STATUS:
287  switch (pdev->dev_state)
288  {
290  if ((ep_addr & 0x7F) != 0x00)
291  {
292  USBD_LL_StallEP(pdev , ep_addr);
293  }
294  break;
295 
297  pep = ((ep_addr & 0x80) == 0x80) ? &pdev->ep_in[ep_addr & 0x7F]:\
298  &pdev->ep_out[ep_addr & 0x7F];
299  if(USBD_LL_IsStallEP(pdev, ep_addr))
300  {
301  pep->status = 0x0001;
302  }
303  else
304  {
305  pep->status = 0x0000;
306  }
307 
308  USBD_CtlSendData (pdev,
309  (uint8_t *)&pep->status,
310  2);
311  break;
312 
313  default:
314  USBD_CtlError(pdev , req);
315  break;
316  }
317  break;
318 
319  default:
320  break;
321  }
322  return ret;
323 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ USBD_CtlError()

void USBD_CtlError ( USBD_HandleTypeDef pdev,
USBD_SetupReqTypedef req 
)

USBD_CtlError Handle USB low level Error.

Parameters
pdevdevice instance
requsb request
Return values
None
718 {
719  USBD_LL_StallEP(pdev , 0x80);
720  USBD_LL_StallEP(pdev , 0);
721 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ USBD_ParseSetupRequest()

void USBD_ParseSetupRequest ( USBD_SetupReqTypedef req,
uint8_t pdata 
)

USBD_ParseSetupRequest Copy buffer into setup structure.

Parameters
pdevdevice instance
requsb request
Return values
None
699 {
700  req->bmRequest = *(uint8_t *) (pdata);
701  req->bRequest = *(uint8_t *) (pdata + 1);
702  req->wValue = SWAPBYTE (pdata + 2);
703  req->wIndex = SWAPBYTE (pdata + 4);
704  req->wLength = SWAPBYTE (pdata + 6);
705 
706 }
Here is the caller graph for this function:

◆ USBD_GetString()

void USBD_GetString ( uint8_t desc,
uint8_t unicode,
uint16_t *  len 
)

USBD_GetString Convert Ascii string into unicode one.

Parameters
desc: descriptor buffer
unicode: Formatted string buffer (unicode)
len: descriptor length
Return values
None
733 {
734  uint8_t idx = 0;
735 
736  if (desc != NULL)
737  {
738  *len = USBD_GetLen(desc) * 2 + 2;
739  unicode[idx++] = *len;
740  unicode[idx++] = USB_DESC_TYPE_STRING;
741 
742  while (*desc != '\0')
743  {
744  unicode[idx++] = *desc++;
745  unicode[idx++] = 0x00;
746  }
747  }
748 }
Here is the call graph for this function:
Here is the caller graph for this function:
USB_REQ_SET_ADDRESS
#define USB_REQ_SET_ADDRESS
Definition: usbd_def.h:86
USB_REQ_GET_STATUS
#define USB_REQ_GET_STATUS
Definition: usbd_def.h:83
USBD_STATE_ADDRESSED
#define USBD_STATE_ADDRESSED
Definition: usbd_def.h:119
USB_DESC_TYPE_STRING
#define USB_DESC_TYPE_STRING
Definition: usbd_def.h:97
USB_REQ_SET_CONFIGURATION
#define USB_REQ_SET_CONFIGURATION
Definition: usbd_def.h:90
USBD_EndpointTypeDef::status
uint32_t status
Definition: usbd_def.h:218
usb_setup_req::wLength
uint16_t wLength
Definition: usbd_def.h:155
USBD_STATE_CONFIGURED
#define USBD_STATE_CONFIGURED
Definition: usbd_def.h:120
LOBYTE
#define LOBYTE(x)
Definition: usbd_def.h:263
_Device_cb::Setup
uint8_t(* Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
Definition: usbd_def.h:165
_USBD_HandleTypeDef::pClass
USBD_ClassTypeDef * pClass
Definition: usbd_def.h:245
_USBD_HandleTypeDef::dev_state
uint8_t dev_state
Definition: usbd_def.h:236
USB_REQ_CLEAR_FEATURE
#define USB_REQ_CLEAR_FEATURE
Definition: usbd_def.h:84
_USBD_HandleTypeDef::ep_in
USBD_EndpointTypeDef ep_in[15]
Definition: usbd_def.h:232
USBD_LL_ClearStallEP
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
Clears a Stall condition on an endpoint of the Low Level Driver.
Definition: usbd_conf.c:548
usb_setup_req::bmRequest
uint8_t bmRequest
Definition: usbd_def.h:151
USB_REQ_GET_CONFIGURATION
#define USB_REQ_GET_CONFIGURATION
Definition: usbd_def.h:89
NULL
#define NULL
Definition: usbd_def.h:53
USBD_GetLen
static uint8_t USBD_GetLen(uint8_t *buf)
USBD_GetLen return the string length.
Definition: usbd_ctlreq.c:756
USB_REQ_GET_DESCRIPTOR
#define USB_REQ_GET_DESCRIPTOR
Definition: usbd_def.h:87
USBD_CtlSendData
USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev, uint8_t *buf, uint16_t len)
USBD_CtlSendData send data on the ctl pipe.
Definition: usbd_ioreq.c:95
USB_FEATURE_EP_HALT
#define USB_FEATURE_EP_HALT
Definition: usbd_def.h:107
USBD_LL_StallEP
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
Sets a Stall condition on an endpoint of the Low Level Driver.
Definition: usbd_conf.c:516
USBD_EndpointTypeDef
Definition: usbd_def.h:216
usb_setup_req::wIndex
uint16_t wIndex
Definition: usbd_def.h:154
USBD_GetConfig
static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_GetConfig Handle Get device configuration request.
Definition: usbd_ctlreq.c:568
SWAPBYTE
#define SWAPBYTE(addr)
Definition: usbd_def.h:260
USBD_SetFeature
static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_SetFeature Handle Set device feature request.
Definition: usbd_ctlreq.c:648
USBD_CtlError
void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_CtlError Handle USB low level Error.
Definition: usbd_ctlreq.c:716
uint8_t
const uint8_t[]
Definition: 404_html.c:3
USBD_SetConfig
static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_SetConfig Handle Set device configuration request.
Definition: usbd_ctlreq.c:491
USBD_GetStatus
static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_GetStatus Handle Get Status request.
Definition: usbd_ctlreq.c:608
usb_setup_req::wValue
uint16_t wValue
Definition: usbd_def.h:153
_USBD_HandleTypeDef::ep_out
USBD_EndpointTypeDef ep_out[15]
Definition: usbd_def.h:233
USBD_CtlSendStatus
USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
USBD_CtlSendStatus send zero lzngth packet on the ctl pipe.
Definition: usbd_ioreq.c:177
USB_REQ_SET_FEATURE
#define USB_REQ_SET_FEATURE
Definition: usbd_def.h:85
USBD_StatusTypeDef
USBD_StatusTypeDef
Definition: usbd_def.h:194
USBD_LL_IsStallEP
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
Returns Stall condition.
Definition: usbd_conf.c:580
usb_setup_req::bRequest
uint8_t bRequest
Definition: usbd_def.h:152
USBD_MAX_NUM_INTERFACES
#define USBD_MAX_NUM_INTERFACES
Definition: usbd_conf.h:95
USBD_ClrFeature
static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_ClrFeature Handle clear device feature request.
Definition: usbd_ctlreq.c:669
USBD_OK
Definition: usbd_def.h:195
USBD_GetDescriptor
static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_GetDescriptor Handle Get Descriptor requests.
Definition: usbd_ctlreq.c:331
USBD_SetAddress
static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_SetAddress Set device address.
Definition: usbd_ctlreq.c:449