Subversion Repositories DashDisplay

Rev

Rev 56 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 56 Rev 61
Line 287... Line 287...
287
  *          @arg @ref HAL_PCD_MSPINIT_CB_ID MspDeInit callback ID
287
  *          @arg @ref HAL_PCD_MSPINIT_CB_ID MspDeInit callback ID
288
  *          @arg @ref HAL_PCD_MSPDEINIT_CB_ID MspDeInit callback ID
288
  *          @arg @ref HAL_PCD_MSPDEINIT_CB_ID MspDeInit callback ID
289
  * @param  pCallback pointer to the Callback function
289
  * @param  pCallback pointer to the Callback function
290
  * @retval HAL status
290
  * @retval HAL status
291
  */
291
  */
292
HAL_StatusTypeDef HAL_PCD_RegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID, pPCD_CallbackTypeDef pCallback)
292
HAL_StatusTypeDef HAL_PCD_RegisterCallback(PCD_HandleTypeDef *hpcd,
-
 
293
                                           HAL_PCD_CallbackIDTypeDef CallbackID,
-
 
294
                                           pPCD_CallbackTypeDef pCallback)
293
{
295
{
294
  HAL_StatusTypeDef status = HAL_OK;
296
  HAL_StatusTypeDef status = HAL_OK;
295
 
297
 
296
  if (pCallback == NULL)
298
  if (pCallback == NULL)
297
  {
299
  {
Line 497... Line 499...
497
  *         To be used instead of the weak HAL_PCD_DataOutStageCallback() predefined callback
499
  *         To be used instead of the weak HAL_PCD_DataOutStageCallback() predefined callback
498
  * @param  hpcd PCD handle
500
  * @param  hpcd PCD handle
499
  * @param  pCallback pointer to the USB PCD Data OUT Stage Callback function
501
  * @param  pCallback pointer to the USB PCD Data OUT Stage Callback function
500
  * @retval HAL status
502
  * @retval HAL status
501
  */
503
  */
502
HAL_StatusTypeDef HAL_PCD_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd, pPCD_DataOutStageCallbackTypeDef pCallback)
504
HAL_StatusTypeDef HAL_PCD_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd,
-
 
505
                                                       pPCD_DataOutStageCallbackTypeDef pCallback)
503
{
506
{
504
  HAL_StatusTypeDef status = HAL_OK;
507
  HAL_StatusTypeDef status = HAL_OK;
505
 
508
 
506
  if (pCallback == NULL)
509
  if (pCallback == NULL)
507
  {
510
  {
Line 570... Line 573...
570
  *         To be used instead of the weak HAL_PCD_DataInStageCallback() predefined callback
573
  *         To be used instead of the weak HAL_PCD_DataInStageCallback() predefined callback
571
  * @param  hpcd PCD handle
574
  * @param  hpcd PCD handle
572
  * @param  pCallback pointer to the USB PCD Data IN Stage Callback function
575
  * @param  pCallback pointer to the USB PCD Data IN Stage Callback function
573
  * @retval HAL status
576
  * @retval HAL status
574
  */
577
  */
575
HAL_StatusTypeDef HAL_PCD_RegisterDataInStageCallback(PCD_HandleTypeDef *hpcd, pPCD_DataInStageCallbackTypeDef pCallback)
578
HAL_StatusTypeDef HAL_PCD_RegisterDataInStageCallback(PCD_HandleTypeDef *hpcd,
-
 
579
                                                      pPCD_DataInStageCallbackTypeDef pCallback)
576
{
580
{
577
  HAL_StatusTypeDef status = HAL_OK;
581
  HAL_StatusTypeDef status = HAL_OK;
578
 
582
 
579
  if (pCallback == NULL)
583
  if (pCallback == NULL)
580
  {
584
  {
Line 643... Line 647...
643
  *         To be used instead of the weak HAL_PCD_ISOOUTIncompleteCallback() predefined callback
647
  *         To be used instead of the weak HAL_PCD_ISOOUTIncompleteCallback() predefined callback
644
  * @param  hpcd PCD handle
648
  * @param  hpcd PCD handle
645
  * @param  pCallback pointer to the USB PCD Iso OUT incomplete Callback function
649
  * @param  pCallback pointer to the USB PCD Iso OUT incomplete Callback function
646
  * @retval HAL status
650
  * @retval HAL status
647
  */
651
  */
648
HAL_StatusTypeDef HAL_PCD_RegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd, pPCD_IsoOutIncpltCallbackTypeDef pCallback)
652
HAL_StatusTypeDef HAL_PCD_RegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd,
-
 
653
                                                       pPCD_IsoOutIncpltCallbackTypeDef pCallback)
649
{
654
{
650
  HAL_StatusTypeDef status = HAL_OK;
655
  HAL_StatusTypeDef status = HAL_OK;
651
 
656
 
652
  if (pCallback == NULL)
657
  if (pCallback == NULL)
653
  {
658
  {
Line 679... Line 684...
679
  return status;
684
  return status;
680
}
685
}
681
 
686
 
682
/**
687
/**
683
  * @brief  Unregister the USB PCD Iso OUT incomplete Callback
688
  * @brief  Unregister the USB PCD Iso OUT incomplete Callback
-
 
689
  *         USB PCD Iso OUT incomplete Callback is redirected
684
  *         USB PCD Iso OUT incomplete Callback is redirected to the weak HAL_PCD_ISOOUTIncompleteCallback() predefined callback
690
  *         to the weak HAL_PCD_ISOOUTIncompleteCallback() predefined callback
685
  * @param  hpcd PCD handle
691
  * @param  hpcd PCD handle
686
  * @retval HAL status
692
  * @retval HAL status
687
  */
693
  */
688
HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd)
694
HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd)
689
{
695
{
Line 716... Line 722...
716
  *         To be used instead of the weak HAL_PCD_ISOINIncompleteCallback() predefined callback
722
  *         To be used instead of the weak HAL_PCD_ISOINIncompleteCallback() predefined callback
717
  * @param  hpcd PCD handle
723
  * @param  hpcd PCD handle
718
  * @param  pCallback pointer to the USB PCD Iso IN incomplete Callback function
724
  * @param  pCallback pointer to the USB PCD Iso IN incomplete Callback function
719
  * @retval HAL status
725
  * @retval HAL status
720
  */
726
  */
721
HAL_StatusTypeDef HAL_PCD_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd, pPCD_IsoInIncpltCallbackTypeDef pCallback)
727
HAL_StatusTypeDef HAL_PCD_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd,
-
 
728
                                                      pPCD_IsoInIncpltCallbackTypeDef pCallback)
722
{
729
{
723
  HAL_StatusTypeDef status = HAL_OK;
730
  HAL_StatusTypeDef status = HAL_OK;
724
 
731
 
725
  if (pCallback == NULL)
732
  if (pCallback == NULL)
726
  {
733
  {
Line 752... Line 759...
752
  return status;
759
  return status;
753
}
760
}
754
 
761
 
755
/**
762
/**
756
  * @brief  Unregister the USB PCD Iso IN incomplete Callback
763
  * @brief  Unregister the USB PCD Iso IN incomplete Callback
-
 
764
  *         USB PCD Iso IN incomplete Callback is redirected
757
  *         USB PCD Iso IN incomplete Callback is redirected to the weak HAL_PCD_ISOINIncompleteCallback() predefined callback
765
  *         to the weak HAL_PCD_ISOINIncompleteCallback() predefined callback
758
  * @param  hpcd PCD handle
766
  * @param  hpcd PCD handle
759
  * @retval HAL status
767
  * @retval HAL status
760
  */
768
  */
761
HAL_StatusTypeDef HAL_PCD_UnRegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd)
769
HAL_StatusTypeDef HAL_PCD_UnRegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd)
762
{
770
{
Line 1187... Line 1195...
1187
  * @param  ep_addr endpoint address
1195
  * @param  ep_addr endpoint address
1188
  * @param  ep_mps endpoint max packet size
1196
  * @param  ep_mps endpoint max packet size
1189
  * @param  ep_type endpoint type
1197
  * @param  ep_type endpoint type
1190
  * @retval HAL status
1198
  * @retval HAL status
1191
  */
1199
  */
1192
HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type)
1200
HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr,
-
 
1201
                                  uint16_t ep_mps, uint8_t ep_type)
1193
{
1202
{
1194
  HAL_StatusTypeDef  ret = HAL_OK;
1203
  HAL_StatusTypeDef  ret = HAL_OK;
1195
  PCD_EPTypeDef *ep;
1204
  PCD_EPTypeDef *ep;
1196
 
1205
 
1197
  if ((ep_addr & 0x80U) == 0x80U)
1206
  if ((ep_addr & 0x80U) == 0x80U)
Line 1364... Line 1373...
1364
  ep->num = ep_addr & EP_ADDR_MSK;
1373
  ep->num = ep_addr & EP_ADDR_MSK;
1365
 
1374
 
1366
  __HAL_LOCK(hpcd);
1375
  __HAL_LOCK(hpcd);
1367
 
1376
 
1368
  (void)USB_EPSetStall(hpcd->Instance, ep);
1377
  (void)USB_EPSetStall(hpcd->Instance, ep);
1369
  if ((ep_addr & EP_ADDR_MSK) == 0U)
-
 
1370
  {
-
 
1371
    (void)USB_EP0_OutStart(hpcd->Instance, (uint8_t *)hpcd->Setup);
-
 
1372
  }
1378
 
1373
  __HAL_UNLOCK(hpcd);
1379
  __HAL_UNLOCK(hpcd);
1374
 
1380
 
1375
  return HAL_OK;
1381
  return HAL_OK;
1376
}
1382
}
1377
 
1383
 
Line 1502... Line 1508...
1502
 
1508
 
1503
  /* stay in loop while pending interrupts */
1509
  /* stay in loop while pending interrupts */
1504
  while ((hpcd->Instance->ISTR & USB_ISTR_CTR) != 0U)
1510
  while ((hpcd->Instance->ISTR & USB_ISTR_CTR) != 0U)
1505
  {
1511
  {
1506
    wIstr = hpcd->Instance->ISTR;
1512
    wIstr = hpcd->Instance->ISTR;
-
 
1513
 
1507
    /* extract highest priority endpoint number */
1514
    /* extract highest priority endpoint number */
1508
    epindex = (uint8_t)(wIstr & USB_ISTR_EP_ID);
1515
    epindex = (uint8_t)(wIstr & USB_ISTR_EP_ID);
1509
 
1516
 
1510
    if (epindex == 0U)
1517
    if (epindex == 0U)
1511
    {
1518
    {
Line 1584... Line 1591...
1584
#else
1591
#else
1585
            HAL_PCD_DataOutStageCallback(hpcd, 0U);
1592
            HAL_PCD_DataOutStageCallback(hpcd, 0U);
1586
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
1593
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
1587
          }
1594
          }
1588
 
1595
 
-
 
1596
          if ((PCD_GET_ENDPOINT(hpcd->Instance, PCD_ENDP0) & USB_EP_SETUP) == 0U)
-
 
1597
          {
1589
          PCD_SET_EP_RX_CNT(hpcd->Instance, PCD_ENDP0, ep->maxpacket);
1598
            PCD_SET_EP_RX_CNT(hpcd->Instance, PCD_ENDP0, ep->maxpacket);
1590
          PCD_SET_EP_RX_STATUS(hpcd->Instance, PCD_ENDP0, USB_EP_RX_VALID);
1599
            PCD_SET_EP_RX_STATUS(hpcd->Instance, PCD_ENDP0, USB_EP_RX_VALID);
-
 
1600
          }
1591
        }
1601
        }
1592
      }
1602
      }
1593
    }
1603
    }
1594
    else
1604
    else
1595
    {
1605
    {
Line 1672... Line 1682...
1672
        ep = &hpcd->IN_ep[epindex];
1682
        ep = &hpcd->IN_ep[epindex];
1673
 
1683
 
1674
        /* clear int flag */
1684
        /* clear int flag */
1675
        PCD_CLEAR_TX_EP_CTR(hpcd->Instance, epindex);
1685
        PCD_CLEAR_TX_EP_CTR(hpcd->Instance, epindex);
1676
 
1686
 
1677
        /* Manage all non bulk transaction or Bulk Single Buffer Transaction */
1687
        /* Manage all non bulk/isoc transaction Bulk Single Buffer Transaction */
1678
        if ((ep->type != EP_TYPE_BULK) ||
1688
        if ((ep->type == EP_TYPE_INTR) || (ep->type == EP_TYPE_CTRL) ||
1679
            ((ep->type == EP_TYPE_BULK) && ((wEPVal & USB_EP_KIND) == 0U)))
1689
           ((ep->type == EP_TYPE_BULK) && ((wEPVal & USB_EP_KIND) == 0U)))
1680
        {
1690
        {
1681
          /* multi-packet on the NON control IN endpoint */
1691
          /* multi-packet on the NON control IN endpoint */
1682
          TxByteNbre = (uint16_t)PCD_GET_EP_TX_CNT(hpcd->Instance, ep->num);
1692
          TxByteNbre = (uint16_t)PCD_GET_EP_TX_CNT(hpcd->Instance, ep->num);
1683
 
1693
 
1684
          if (ep->xfer_len > TxByteNbre)
1694
          if (ep->xfer_len > TxByteNbre)
Line 1706... Line 1716...
1706
            ep->xfer_buff += TxByteNbre;
1716
            ep->xfer_buff += TxByteNbre;
1707
            ep->xfer_count += TxByteNbre;
1717
            ep->xfer_count += TxByteNbre;
1708
            (void)USB_EPStartXfer(hpcd->Instance, ep);
1718
            (void)USB_EPStartXfer(hpcd->Instance, ep);
1709
          }
1719
          }
1710
        }
1720
        }
1711
        /* bulk in double buffer enable in case of transferLen> Ep_Mps */
1721
        /* Double Buffer Iso/bulk IN (bulk transfer Len > Ep_Mps) */
1712
        else
1722
        else
1713
        {
1723
        {
1714
          (void)HAL_PCD_EP_DB_Transmit(hpcd, ep, wEPVal);
1724
          (void)HAL_PCD_EP_DB_Transmit(hpcd, ep, wEPVal);
1715
        }
1725
        }
1716
      }
1726
      }
Line 1830... Line 1840...
1830
      ep->xfer_len = 0U;
1840
      ep->xfer_len = 0U;
1831
    }
1841
    }
1832
    /* Transfer is completed */
1842
    /* Transfer is completed */
1833
    if (ep->xfer_len == 0U)
1843
    if (ep->xfer_len == 0U)
1834
    {
1844
    {
-
 
1845
      PCD_SET_EP_DBUF0_CNT(hpcd->Instance, ep->num, ep->is_in, 0U);
-
 
1846
      PCD_SET_EP_DBUF1_CNT(hpcd->Instance, ep->num, ep->is_in, 0U);
-
 
1847
 
1835
      /* TX COMPLETE */
1848
      /* TX COMPLETE */
1836
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1849
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1837
      hpcd->DataInStageCallback(hpcd, ep->num);
1850
      hpcd->DataInStageCallback(hpcd, ep->num);
1838
#else
1851
#else
1839
      HAL_PCD_DataInStageCallback(hpcd, ep->num);
1852
      HAL_PCD_DataInStageCallback(hpcd, ep->num);
Line 1900... Line 1913...
1900
    }
1913
    }
1901
 
1914
 
1902
    /* Transfer is completed */
1915
    /* Transfer is completed */
1903
    if (ep->xfer_len == 0U)
1916
    if (ep->xfer_len == 0U)
1904
    {
1917
    {
-
 
1918
      PCD_SET_EP_DBUF0_CNT(hpcd->Instance, ep->num, ep->is_in, 0U);
-
 
1919
      PCD_SET_EP_DBUF1_CNT(hpcd->Instance, ep->num, ep->is_in, 0U);
-
 
1920
 
1905
      /* TX COMPLETE */
1921
      /* TX COMPLETE */
1906
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1922
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1907
      hpcd->DataInStageCallback(hpcd, ep->num);
1923
      hpcd->DataInStageCallback(hpcd, ep->num);
1908
#else
1924
#else
1909
      HAL_PCD_DataInStageCallback(hpcd, ep->num);
1925
      HAL_PCD_DataInStageCallback(hpcd, ep->num);
1910
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
1926
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
1911
 
1927
 
1912
      /*need to Free USB Buff*/
1928
      /* need to Free USB Buff */
1913
      if ((wEPVal & USB_EP_DTOG_RX) == 0U)
1929
      if ((wEPVal & USB_EP_DTOG_RX) == 0U)
1914
      {
1930
      {
1915
        PCD_FreeUserBuffer(hpcd->Instance, ep->num, 1U);
1931
        PCD_FreeUserBuffer(hpcd->Instance, ep->num, 1U);
1916
      }
1932
      }
1917
    }
1933
    }