Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2 | Rev 9 | ||
|---|---|---|---|
| Line 15... | Line 15... | ||
| 15 | * the License. You may obtain a copy of the License at: |
15 | * the License. You may obtain a copy of the License at: |
| 16 | * www.st.com/SLA0044 |
16 | * www.st.com/SLA0044 |
| 17 | * |
17 | * |
| 18 | ****************************************************************************** |
18 | ****************************************************************************** |
| 19 | */ |
19 | */ |
| 20 | /* USER CODE END Header */ |
20 | /* USER CODE END Header */ |
| 21 | 21 | ||
| 22 | /* Includes ------------------------------------------------------------------*/ |
22 | /* Includes ------------------------------------------------------------------*/ |
| 23 | #include "stm32f1xx.h" |
23 | #include "stm32f1xx.h" |
| 24 | #include "stm32f1xx_hal.h" |
24 | #include "stm32f1xx_hal.h" |
| 25 | #include "usbd_def.h" |
25 | #include "usbd_def.h" |
| Line 56... | Line 56... | ||
| 56 | /* USER CODE BEGIN 1 */ |
56 | /* USER CODE BEGIN 1 */ |
| 57 | 57 | ||
| 58 | /* USER CODE END 1 */ |
58 | /* USER CODE END 1 */ |
| 59 | #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) |
59 | #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) |
| 60 | static void PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state); |
60 | static void PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state); |
| 61 | else |
61 | #else |
| 62 | void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state); |
62 | void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state); |
| 63 | #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ |
63 | #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ |
| 64 | 64 | ||
| 65 | /******************************************************************************* |
65 | /******************************************************************************* |
| 66 | LL Driver Callbacks (PCD -> USB Device Library) |
66 | LL Driver Callbacks (PCD -> USB Device Library) |
| Line 175... | Line 175... | ||
| 175 | #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) |
175 | #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) |
| 176 | static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
176 | static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
| 177 | #else |
177 | #else |
| 178 | void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
178 | void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) |
| 179 | #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ |
179 | #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */ |
| 180 | { |
180 | { |
| 181 | USBD_SpeedTypeDef speed = USBD_SPEED_FULL; |
181 | USBD_SpeedTypeDef speed = USBD_SPEED_FULL; |
| 182 | 182 | ||
| 183 | if ( hpcd->Init.speed != PCD_SPEED_FULL) |
183 | if ( hpcd->Init.speed != PCD_SPEED_FULL) |
| 184 | { |
184 | { |
| 185 | Error_Handler(); |
185 | Error_Handler(); |
| Line 356... | Line 356... | ||
| 356 | USBD_StatusTypeDef usb_status = USBD_OK; |
356 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 357 | 357 | ||
| 358 | hal_status = HAL_PCD_DeInit(pdev->pData); |
358 | hal_status = HAL_PCD_DeInit(pdev->pData); |
| 359 | 359 | ||
| 360 | usb_status = USBD_Get_USB_Status(hal_status); |
360 | usb_status = USBD_Get_USB_Status(hal_status); |
| 361 | 361 | ||
| 362 | return usb_status; |
362 | return usb_status; |
| 363 | } |
363 | } |
| 364 | 364 | ||
| 365 | /** |
365 | /** |
| 366 | * @brief Starts the low level portion of the device driver. |
366 | * @brief Starts the low level portion of the device driver. |
| 367 | * @param pdev: Device handle |
367 | * @param pdev: Device handle |
| Line 369... | Line 369... | ||
| 369 | */ |
369 | */ |
| 370 | USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) |
370 | USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev) |
| 371 | { |
371 | { |
| 372 | HAL_StatusTypeDef hal_status = HAL_OK; |
372 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 373 | USBD_StatusTypeDef usb_status = USBD_OK; |
373 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 374 | 374 | ||
| 375 | hal_status = HAL_PCD_Start(pdev->pData); |
375 | hal_status = HAL_PCD_Start(pdev->pData); |
| 376 | 376 | ||
| 377 | usb_status = USBD_Get_USB_Status(hal_status); |
377 | usb_status = USBD_Get_USB_Status(hal_status); |
| 378 | 378 | ||
| 379 | return usb_status; |
379 | return usb_status; |
| 380 | } |
380 | } |
| 381 | 381 | ||
| 382 | /** |
382 | /** |
| 383 | * @brief Stops the low level portion of the device driver. |
383 | * @brief Stops the low level portion of the device driver. |
| Line 390... | Line 390... | ||
| 390 | USBD_StatusTypeDef usb_status = USBD_OK; |
390 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 391 | 391 | ||
| 392 | hal_status = HAL_PCD_Stop(pdev->pData); |
392 | hal_status = HAL_PCD_Stop(pdev->pData); |
| 393 | 393 | ||
| 394 | usb_status = USBD_Get_USB_Status(hal_status); |
394 | usb_status = USBD_Get_USB_Status(hal_status); |
| 395 | 395 | ||
| 396 | return usb_status; |
396 | return usb_status; |
| 397 | } |
397 | } |
| 398 | 398 | ||
| 399 | /** |
399 | /** |
| 400 | * @brief Opens an endpoint of the low level driver. |
400 | * @brief Opens an endpoint of the low level driver. |
| Line 410... | Line 410... | ||
| 410 | USBD_StatusTypeDef usb_status = USBD_OK; |
410 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 411 | 411 | ||
| 412 | hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); |
412 | hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); |
| 413 | 413 | ||
| 414 | usb_status = USBD_Get_USB_Status(hal_status); |
414 | usb_status = USBD_Get_USB_Status(hal_status); |
| 415 | 415 | ||
| 416 | return usb_status; |
416 | return usb_status; |
| 417 | } |
417 | } |
| 418 | 418 | ||
| 419 | /** |
419 | /** |
| 420 | * @brief Closes an endpoint of the low level driver. |
420 | * @brief Closes an endpoint of the low level driver. |
| Line 424... | Line 424... | ||
| 424 | */ |
424 | */ |
| 425 | USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
425 | USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
| 426 | { |
426 | { |
| 427 | HAL_StatusTypeDef hal_status = HAL_OK; |
427 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 428 | USBD_StatusTypeDef usb_status = USBD_OK; |
428 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 429 | 429 | ||
| 430 | hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr); |
430 | hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr); |
| 431 | 431 | ||
| 432 | usb_status = USBD_Get_USB_Status(hal_status); |
432 | usb_status = USBD_Get_USB_Status(hal_status); |
| 433 | 433 | ||
| 434 | return usb_status; |
434 | return usb_status; |
| 435 | } |
435 | } |
| 436 | 436 | ||
| 437 | /** |
437 | /** |
| 438 | * @brief Flushes an endpoint of the Low Level Driver. |
438 | * @brief Flushes an endpoint of the Low Level Driver. |
| 439 | * @param pdev: Device handle |
439 | * @param pdev: Device handle |
| Line 442... | Line 442... | ||
| 442 | */ |
442 | */ |
| 443 | USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
443 | USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
| 444 | { |
444 | { |
| 445 | HAL_StatusTypeDef hal_status = HAL_OK; |
445 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 446 | USBD_StatusTypeDef usb_status = USBD_OK; |
446 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 447 | 447 | ||
| 448 | hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr); |
448 | hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr); |
| 449 | 449 | ||
| 450 | usb_status = USBD_Get_USB_Status(hal_status); |
450 | usb_status = USBD_Get_USB_Status(hal_status); |
| 451 | 451 | ||
| 452 | return usb_status; |
452 | return usb_status; |
| 453 | } |
453 | } |
| 454 | 454 | ||
| 455 | /** |
455 | /** |
| 456 | * @brief Sets a Stall condition on an endpoint of the Low Level Driver. |
456 | * @brief Sets a Stall condition on an endpoint of the Low Level Driver. |
| 457 | * @param pdev: Device handle |
457 | * @param pdev: Device handle |
| Line 460... | Line 460... | ||
| 460 | */ |
460 | */ |
| 461 | USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
461 | USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
| 462 | { |
462 | { |
| 463 | HAL_StatusTypeDef hal_status = HAL_OK; |
463 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 464 | USBD_StatusTypeDef usb_status = USBD_OK; |
464 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 465 | 465 | ||
| 466 | hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr); |
466 | hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr); |
| 467 | 467 | ||
| 468 | usb_status = USBD_Get_USB_Status(hal_status); |
468 | usb_status = USBD_Get_USB_Status(hal_status); |
| 469 | 469 | ||
| 470 | return usb_status; |
470 | return usb_status; |
| 471 | } |
471 | } |
| 472 | 472 | ||
| 473 | /** |
473 | /** |
| 474 | * @brief Clears a Stall condition on an endpoint of the Low Level Driver. |
474 | * @brief Clears a Stall condition on an endpoint of the Low Level Driver. |
| 475 | * @param pdev: Device handle |
475 | * @param pdev: Device handle |
| Line 478... | Line 478... | ||
| 478 | */ |
478 | */ |
| 479 | USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
479 | USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
| 480 | { |
480 | { |
| 481 | HAL_StatusTypeDef hal_status = HAL_OK; |
481 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 482 | USBD_StatusTypeDef usb_status = USBD_OK; |
482 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 483 | 483 | ||
| 484 | hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr); |
484 | hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr); |
| 485 | 485 | ||
| 486 | usb_status = USBD_Get_USB_Status(hal_status); |
486 | usb_status = USBD_Get_USB_Status(hal_status); |
| 487 | 487 | ||
| 488 | return usb_status; |
488 | return usb_status; |
| 489 | } |
489 | } |
| 490 | 490 | ||
| 491 | /** |
491 | /** |
| 492 | * @brief Returns Stall condition. |
492 | * @brief Returns Stall condition. |
| 493 | * @param pdev: Device handle |
493 | * @param pdev: Device handle |
| Line 495... | Line 495... | ||
| 495 | * @retval Stall (1: Yes, 0: No) |
495 | * @retval Stall (1: Yes, 0: No) |
| 496 | */ |
496 | */ |
| 497 | uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
497 | uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr) |
| 498 | { |
498 | { |
| 499 | PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData; |
499 | PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData; |
| 500 | 500 | ||
| 501 | if((ep_addr & 0x80) == 0x80) |
501 | if((ep_addr & 0x80) == 0x80) |
| 502 | { |
502 | { |
| 503 | return hpcd->IN_ep[ep_addr & 0x7F].is_stall; |
503 | return hpcd->IN_ep[ep_addr & 0x7F].is_stall; |
| 504 | } |
504 | } |
| 505 | else |
505 | else |
| 506 | { |
506 | { |
| 507 | return hpcd->OUT_ep[ep_addr & 0x7F].is_stall; |
507 | return hpcd->OUT_ep[ep_addr & 0x7F].is_stall; |
| 508 | } |
508 | } |
| 509 | } |
509 | } |
| 510 | 510 | ||
| 511 | /** |
511 | /** |
| 512 | * @brief Assigns a USB address to the device. |
512 | * @brief Assigns a USB address to the device. |
| Line 516... | Line 516... | ||
| 516 | */ |
516 | */ |
| 517 | USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) |
517 | USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr) |
| 518 | { |
518 | { |
| 519 | HAL_StatusTypeDef hal_status = HAL_OK; |
519 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 520 | USBD_StatusTypeDef usb_status = USBD_OK; |
520 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 521 | 521 | ||
| 522 | hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr); |
522 | hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr); |
| 523 | 523 | ||
| 524 | usb_status = USBD_Get_USB_Status(hal_status); |
524 | usb_status = USBD_Get_USB_Status(hal_status); |
| 525 | 525 | ||
| 526 | return usb_status; |
526 | return usb_status; |
| 527 | } |
527 | } |
| 528 | 528 | ||
| 529 | /** |
529 | /** |
| 530 | * @brief Transmits data over an endpoint. |
530 | * @brief Transmits data over an endpoint. |
| 531 | * @param pdev: Device handle |
531 | * @param pdev: Device handle |
| 532 | * @param ep_addr: Endpoint number |
532 | * @param ep_addr: Endpoint number |
| 533 | * @param pbuf: Pointer to data to be sent |
533 | * @param pbuf: Pointer to data to be sent |
| 534 | * @param size: Data size |
534 | * @param size: Data size |
| 535 | * @retval USBD status |
535 | * @retval USBD status |
| 536 | */ |
536 | */ |
| 537 | USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size) |
537 | USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size) |
| 538 | { |
538 | { |
| 539 | HAL_StatusTypeDef hal_status = HAL_OK; |
539 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 540 | USBD_StatusTypeDef usb_status = USBD_OK; |
540 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 541 | 541 | ||
| 542 | hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size); |
542 | hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size); |
| 543 | 543 | ||
| 544 | usb_status = USBD_Get_USB_Status(hal_status); |
544 | usb_status = USBD_Get_USB_Status(hal_status); |
| 545 | 545 | ||
| 546 | return usb_status; |
546 | return usb_status; |
| 547 | } |
547 | } |
| 548 | 548 | ||
| 549 | /** |
549 | /** |
| 550 | * @brief Prepares an endpoint for reception. |
550 | * @brief Prepares an endpoint for reception. |
| 551 | * @param pdev: Device handle |
551 | * @param pdev: Device handle |
| Line 558... | Line 558... | ||
| 558 | { |
558 | { |
| 559 | HAL_StatusTypeDef hal_status = HAL_OK; |
559 | HAL_StatusTypeDef hal_status = HAL_OK; |
| 560 | USBD_StatusTypeDef usb_status = USBD_OK; |
560 | USBD_StatusTypeDef usb_status = USBD_OK; |
| 561 | 561 | ||
| 562 | hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size); |
562 | hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size); |
| 563 | 563 | ||
| 564 | usb_status = USBD_Get_USB_Status(hal_status); |
564 | usb_status = USBD_Get_USB_Status(hal_status); |
| 565 | 565 | ||
| 566 | return usb_status; |
566 | return usb_status; |
| 567 | } |
567 | } |
| 568 | 568 | ||
| 569 | /** |
569 | /** |
| 570 | * @brief Returns the last transfered packet size. |
570 | * @brief Returns the last transfered packet size. |
| 571 | * @param pdev: Device handle |
571 | * @param pdev: Device handle |