usbDescrCopyLib.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbDescrCopyLib.c - USB descriptor copy utility functions */
  2. /* Copyright 2000 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01c,18sep01,wef  merge from wrs.tor2_0.usb1_1-f for veloce
  7. 01b,25jul01,wef fixed spr 69287
  8. 01a,05apr00,wef First -removed these functions from usbLib.c to decouple host
  9.      peripheral stack interdependency.
  10. */
  11. /*
  12. DESCRIPTION
  13. This modules contains miscellaneous functions which may be used by the
  14. USB driver (USBD), USB HCD (USB Host Controller Driver), USB HCD (USB Target
  15. Controller Driver) or by USBD clients.
  16. */
  17. /* includes */
  18. #include "usb/usbPlatform.h"
  19. #include "usb/usb.h"     /* Basic USB definitions */
  20. #include "string.h"
  21. #include "usb/usbDescrCopyLib.h"
  22. /* functions */
  23. /***************************************************************************
  24. *
  25. * usbDescrCopy32 - copies descriptor to a buffer
  26. *
  27. * This function is the same as usbDescrCopy() except that <bfrLen> and
  28. * <pActLen> refer to UINT32 quantities.
  29. *
  30. * RETURNS: N/A
  31. */
  32. VOID usbDescrCopy32
  33.     (
  34.     pUINT8 pBfr,     /* destination buffer */
  35.     pVOID pDescr,     /* source buffer */
  36.     UINT32 bfrLen,     /* dest len */
  37.     pUINT32 pActLen     /* actual length copied */
  38.     )
  39.     {
  40.     pUSB_DESCR_HDR pHdr = (pUSB_DESCR_HDR) pDescr;
  41.     bfrLen = min (bfrLen, pHdr->length);
  42.     memcpy ((char *) pBfr, (char *) pDescr, (int) bfrLen);
  43.     if (pActLen != NULL)
  44. *pActLen = bfrLen;
  45.     }
  46. /***************************************************************************
  47. *
  48. * usbDescrCopy - copies descriptor to a buffer
  49. *
  50. * Copies the USB descriptor at <pDescr> to the <pBfr> of length <bfrLen>.
  51. * Returns the actual number of bytes copied - which is the shorter of 
  52. * the <pDescr> or <bfrLen> - in <pActLen> if <pActLen> is non-NULL.
  53. *
  54. * RETURNS: N/A
  55. */
  56. VOID usbDescrCopy
  57.     (
  58.     pUINT8 pBfr,     /* destination buffer */
  59.     pVOID pDescr,     /* source buffer */
  60.     UINT16 bfrLen,     /* dest len */
  61.     pUINT16 pActLen     /* actual length copied */
  62.     )
  63.     {
  64.     UINT32 actLen;
  65.     usbDescrCopy32 (pBfr, pDescr, (UINT32) bfrLen, &actLen);
  66.     if (pActLen != NULL)
  67. *pActLen = (UINT16) actLen;
  68.     }
  69. /***************************************************************************
  70. *
  71. * usbDescrStrCopy32 - copies an ASCII string to a string descriptor
  72. *
  73. * This function is the same as usbDescrStrCopy() except that <bfrLen> and
  74. * <pActLen> refer to UINT32 quantities.
  75. *
  76. * RETURNS: N/A
  77. */
  78. VOID usbDescrStrCopy32
  79.     (
  80.     pUINT8 pBfr,     /* destination buffer */
  81.     char *pStr,      /* source buffer */
  82.     UINT32 bfrLen,     /* dest len */
  83.     pUINT32 pActLen     /* actual length copied */
  84.     )
  85.     {
  86.     UINT8 bfr [USB_MAX_DESCR_LEN];
  87.     pUSB_STRING_DESCR pString = (pUSB_STRING_DESCR) bfr;
  88.     UINT32 i;
  89.     
  90.     pString->length = USB_DESCR_HDR_LEN + strlen (pStr) * 2;
  91.     pString->descriptorType = USB_DESCR_STRING;
  92.     for (i = 0; i < strlen (pStr); i++)
  93. {
  94. pString->string [i*2] = pStr [i];
  95. pString->string [i*2 + 1] = 0;
  96. }
  97.     usbDescrCopy32 (pBfr, pString, bfrLen, pActLen);
  98.     }
  99. /***************************************************************************
  100. *
  101. * usbDescrStrCopy - copies an ASCII string to a string descriptor
  102. *
  103. * This function constructs a properly formatted USB string descriptor
  104. * in <pBfr>.  The ASCII string <pStr> is copied to <pBfr> as a UNICODE
  105. * string - as required by the USB spec.  The actual length of the 
  106. * resulting descriptor is returned in <pActLen> if <pActLen> is non-NULL.
  107. *
  108. * NOTE: The complete length of the string descriptor can be calculated
  109. * as 2 * strlen (pStr) + 2.  The <pActLen> will be the shorter of <bfrLen>
  110. * or this value.
  111. *
  112. * RETURNS: N/A
  113. */
  114. VOID usbDescrStrCopy
  115.     (
  116.     pUINT8 pBfr,     /* destination buffer */
  117.     char *pStr,      /* source buffer */
  118.     UINT16 bfrLen,     /* dest len */
  119.     pUINT16 pActLen     /* actual length copied */
  120.     )
  121.     {
  122.     UINT32 actLen;
  123.     usbDescrStrCopy32 (pBfr, pStr, (UINT32) bfrLen, &actLen);
  124.     if (pActLen != NULL)
  125. *pActLen = (UINT16) actLen;
  126.     }
  127. /* End of file. */