亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb_common.c

?? STM32F RFID通訊源代碼(支持雙向發送接收)
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2006
 *
 *    File name   : usb_common.c
 *    Description : USB common subroutines
 *
 *    History :
 *    1. Date        : August 25, 2006
 *       Author      : Stanimir Bonev
 *       Description : Create
 *    2. Date        : January 16, 2007
 *       Author      : Stanimir Bonev
 *       Description : Modify
 *      Add log messages
 *
 *    $Revision: 1.2.2.4 $
 **************************************************************************/

/*************************************************************************
 * Function Name: USB_UserFuncRegistered
 * Parameters: UserFunc_t UserFunc, UsbUserEvent_t UserFuncInd
 *
 * Return: UserFunc_t
 *
 * Description: Registered User callback function
 *
 *************************************************************************/
UserFunc_t USB_UserFuncRegistered (UserFunc_t UserFunc, UsbUserEvent_t UserFuncInd)
{
UserFunc_t PrevUserFunc = UsbUserFun[UserFuncInd];

  USB_T9M_TRACE_INFO("T9M USB_UserFuncRegistered() index - %d, address 0x%08x\n\r",
                     UserFuncInd,UserFunc);
  UsbUserFun[UserFuncInd] = (UserFunc_t) UserFunc;
  return (PrevUserFunc);
}

/*************************************************************************
 * Function Name: UsbCoreReq
 * Parameters:  UsbCoreReqType_t Type
 *
 * Return: Int32U
 *
 * Description: Return device states
 *
 *************************************************************************/
Int32U UsbCoreReq (UsbCoreReqType_t Type)
{
  switch(Type)
  {
  case UsbCoreReqDevState:
    return(UsbDevCtrl.State.DS);
  case UsbCoreReqDevSusState:
    return(UsbDevCtrl.State.Suspend);
  case UsbCoreReqConfiquration:
    return(UsbDevCtrl.Configuration);
  case UsbCoreReqInterface:
    return(UsbDevCtrl.Interface);
  case UsbCoreReqAlternateSetting:
    return(UsbDevCtrl.AlternateSetting);
  case UsbCoreReqDevOwnAddress:
    return(UsbDevCtrl.DevAdd);
  case UsbCoreReqWakeUpEnableStatus:
    return(UsbDevCtrl.Feature.RemoteWakeupEnable);
  case UsbCoreReqSelfPoweredStatus:
    return(UsbDevCtrl.Feature.SelfPowered);
  }
  return((Int32U) -1);
}

#if USB_REMOTE_WAKEUP != 0
/*************************************************************************
 * Function Name: UsbWakeUp
 * Parameters:  none
 *
 * Return: none
 *
 * Description: Wake-up device from suspend mode
 *
 *************************************************************************/
void UsbWakeUp (void)
{
  USB_T9M_TRACE_INFO("T9M UsbWakeUp()\n\r");
  if(UsbDevCtrl.Feature.RemoteWakeupEnable && UsbDevCtrl.State.Suspend)
  {
    USB_WakeUp();
  }
}
#endif // USB_REMOTE_WAKEUP != 0

/*************************************************************************
 * Function Name: UsbSetDevState
 * Parameters:  UsbT9DevState_t DevState
 *
 * Return: none
 *
 * Description: Set device state
 *
 *************************************************************************/
static
void UsbSetDevState (UsbT9DevState_t DevState)
{
  UsbDevCtrl.State.DS = DevState;
  USB_T9M_TRACE_INFO("T9M UsbSetDevState() state - %d\n\r",DevState);
  switch (DevState)
  {
  case UsbDevStatusAttached:
  case UsbDevStatusPowered:
  case UsbDevStatusDefault:
    USB_Configure(FALSE);
    USB_SetDefAdd();  // Set address 0
    UsbUserFun[UsbUserConfigure](NULL);
    UsbDevCtrl.DevAdd = UsbDevCtrl.Configuration = \
    UsbDevCtrl.AlternateSetting = UsbDevCtrl.Interface = 0;
    break;
  case UsbDevStatusAddress:
    USB_Configure(FALSE);
    UsbDevCtrl.Configuration = UsbDevCtrl.AlternateSetting =\
    UsbDevCtrl.Interface = 0;
    break;
  case UsbDevStatusConfigured:
    USB_Configure(TRUE);
    break;
  default:  // unknow state - disconnected or in process of a connection
    USB_Configure(FALSE);
    UsbUserFun[UsbUserConfigure](NULL);
    UsbDevCtrl.DevAdd = UsbDevCtrl.Configuration = \
    UsbDevCtrl.AlternateSetting = UsbDevCtrl.Interface = 0;
  }
}

/*************************************************************************
 * Function Name: UsbSetDevSuspend
 * Parameters:  none
 *
 * Return: UsbDevState_t
 *
 * Description: Set device suspend mode
 *
 *************************************************************************/
static void UsbSetDevSuspend (Boolean Suspend)
{
  UsbDevCtrl.State.Suspend = Suspend ? UsbDevStatusSuspend : UsbDevStatusNoSuspend;
}

/*************************************************************************
 * Function Name: UsbFindInterface
 * Parameters:  UsbStandardConfigurationDescriptor_t * pConfiguration
 *              Int32U Interface,Int32U AlternativeSetting
 *
 * Return: UsbCommStatus_t
 *
 * Description: Set Interface and  Alternative setting state
 *
 *************************************************************************/
static
UsbCommStatus_t UsbFindInterface (UsbStandardConfigurationDescriptor_t * pConfiguration,
                                  UsbDevCtrl_t * UsbDev)
{
UsbStandardInterfaceDescriptor_t *pData;
  // Find Interface
  for( pData = (UsbStandardInterfaceDescriptor_t *)pConfiguration;
      (Int8U*)pData < (Int8U *)pConfiguration + pConfiguration->wTotalLength;
       pData =(UsbStandardInterfaceDescriptor_t *)((Int8U *)pData + pData->bLength))
  {
    if((pData->bDescriptorType == UsbDescriptorInterface) &&
       (pData->bInterfaceNumber == UsbDev->Interface) &&
       (pData->bAlternateSetting == UsbDev->AlternateSetting))
    {
      return(UsbPass);
    }
  }
  USB_T9W_TRACE_INFO("T9W UsbFindInterface() can't find interface\n\r");
  return(UsbFault);
}

/*************************************************************************
 * Function Name: UsbFindConfiguration
 * Parameters:  Int32U
 *
 * Return: UsbStandardConfigurationDescriptor_t *
 *
 * Description: Return pointer to current configuration
 *
 *************************************************************************/
static
UsbStandardConfigurationDescriptor_t * UsbFindConfiguration(Int32U Configuration)
{
UsbStandardConfigurationDescriptor_t * pData =
 (UsbStandardConfigurationDescriptor_t *) &UsbStandardConfigurationDescriptor[0];
  while(pData->bLength)
  {
    if(pData->bDescriptorType == UsbDescriptorConfiguration)
    {
      if(pData->bConfigurationValue == Configuration)
      {
         return(pData);
      }
    }
    pData = (UsbStandardConfigurationDescriptor_t *)((Int8U *)pData + pData->bLength);
  }
  USB_T9W_TRACE_INFO("T9W UsbFindConfiguration() can't find configuration - %d\n\r",
                     Configuration);
  return(NULL);
}

/*************************************************************************
 * Function Name: UsbSetConfigurtonState
 * Parameters:  Int32U
 *
 * Return: UsbCommStatus_t
 *
 * Description: Set configuration state
 *
 *************************************************************************/
static inline
UsbCommStatus_t UsbSetConfigurtonState (Int32U Configuration)
{
  if(Configuration)
  {
    // Find configuration
    UsbStandardConfigurationDescriptor_t * pData = UsbFindConfiguration(Configuration);
    UsbDevCtrl_t UsbDevCtrlNew = UsbDevCtrl;

    if(pData == NULL)
    {
      return(UsbFault);
    }
    // Set Interface and Alternative Setting
    UsbDevCtrlNew.Configuration = Configuration;
    UsbDevCtrlNew.Interface = UsbDevCtrlNew.AlternateSetting = 0;
    UsbDevCtrlNew.Feature.RemoteWakeupEnable = 0;
    UsbDevCtrlNew.Feature.SelfPowered = pData->bmAttributes.SelfPowered?1:0;
    // Whether the interface exist into current configuration?
    if(UsbFindInterface(pData,&UsbDevCtrlNew) != UsbPass)
    {
      return(UsbFault);
    }
    // User function that realize EP and init buffers
    UsbUserFun[UsbUserConfigure]((void *)&UsbDevCtrlNew);
    UsbDevCtrl = UsbDevCtrlNew;
    UsbSetDevState(UsbDevStatusConfigured);
    USB_T9M_TRACE_INFO("T9M UsbSetConfigurtonState()\n\r"
                       "    Configuration - %d\n\r",
                       Configuration);
  }
  else
  {
    USB_T9M_TRACE_INFO("T9M UsbSetConfigurtonState()\n\r"
                       "    Configuration - %d\n\r",
                       Configuration);
    UsbUserFun[UsbUserConfigure](NULL);
    UsbSetDevState(UsbDevStatusAddress);
  }
  return(UsbPass);
}

/*************************************************************************
 * Function Name: UsbDevStatus
 * Parameters:  Int8U * pData, Int16U Index
 *
 * Return: UsbCommStatus_t
 *
 * Description: Usb Return device status
 *
 *************************************************************************/
static inline
UsbCommStatus_t UsbDevStatus(Int8U * pData, Int16U Index)
{
  if(Index == 0)
  {
    UsbEp0Ctrl.pData = pData;
    UsbEp0Ctrl.Counter = 2;
    *pData++ = UsbDevCtrl.Feature.Data;
    USB_T9M_TRACE_INFO("T9M UsbDevStatus() device status - %d\n\r",
                       UsbDevCtrl.Feature.Data);
    *pData   = 0;
    return(UsbPass);
  }
  USB_T9W_TRACE_INFO("T9W UsbDevStatus()\n\r"
                     "    Index (0==) - %d\n\r",Index);
  return(UsbFault);
}

/*************************************************************************
 * Function Name: UsbInterfaceStatus
 * Parameters:  Int8U * pData, Int16U Index
 *
 * Return: UsbCommStatus_t
 *
 * Description: USB Return interface status into pData
 *
 *************************************************************************/
static inline
UsbCommStatus_t UsbInterfaceStatus(Int8U * pData, Int16U Index)
{
  USB_T9M_TRACE_INFO("T9M UsbInterfaceStatus()\n\r");
  UsbEp0Ctrl.pData = pData;
  UsbEp0Ctrl.Counter = 2;
  *pData++ = 0;
  *pData   = 0;
  return(UsbPass);
}

/*************************************************************************
 * Function Name: UsbEpStatus
 * Parameters:  Int8U * pData, Int16U Index
 *
 * Return: UsbCommStatus_t
 *
 * Description: USB Return EP status into pData
 *
 *************************************************************************/
static inline
UsbCommStatus_t UsbEpStatus(Int8U * pData, Int16U Index)
{
  if((Index & 0x7F) > 16)
  {
    USB_T9W_TRACE_INFO("T9W UsbEpStatus()\n\r"
                       "    Index (16<) - %d\n\r",
                       Index);
    return(UsbFault);
  }
  UsbEp0Ctrl.pData = pData;
  UsbEp0Ctrl.Counter = 2;
  USB_GetStallEP(USB_EpLogToPhysAdd(Index),pData);
  USB_T9M_TRACE_INFO("T9M UsbEpStatus() stall - %d\n\r", *pData);
  *++pData = 0;
  return(UsbPass);
}

/*************************************************************************
 * Function Name: UsbGetStatus
 * Parameters:  none
 *
 * Return: none
 *
 * Description: USB Get status implement
 *
 *************************************************************************/
static inline
void UsbGetStatus (void)
{
  if((UsbDevCtrl.State.DS >= UsbDevStatusAddress) &&
     // Length must be 2
     (UsbEp0SetupPacket.wLength.Word == 2) &&
     // Direction of data from device
     (UsbEp0SetupPacket.mRequestType.Dir == 1) &&
     // wValue must be 0
     (UsbEp0SetupPacket.wValue.Word == 0) )
  {
    // This request is valid only for Address and Configured device's states
    switch(UsbEp0SetupPacket.mRequestType.Recipient)
    {
    case UsbRecipientDevice:
      if(UsbDevStatus(EpCtrlDataBuf,UsbEp0SetupPacket.wIndex.Word) == UsbPass)
      {
        UsbEp0Ctrl.EpStatus.Status = UsbDataPhase;
      }
      else
      {
        UsbEp0Ctrl.EpStatus.Status = UsbEpStall;
      }
      break;
    case UsbRecipientInterface:
      if(UsbInterfaceStatus(EpCtrlDataBuf,UsbEp0SetupPacket.wIndex.Word) == UsbPass)
      {
        UsbEp0Ctrl.EpStatus.Status = UsbDataPhase;
      }
      else
      {
        UsbEp0Ctrl.EpStatus.Status = UsbEpStall;
      }
      break;
    case UsbRecipientEndpoint:
      if(UsbEpStatus(EpCtrlDataBuf,UsbEp0SetupPacket.wIndex.Word) == UsbPass)
      {
        UsbEp0Ctrl.EpStatus.Status = UsbDataPhase;
      }
      else
      {
        UsbEp0Ctrl.EpStatus.Status = UsbEpStall;
      }
      break;
    default:
      USB_T9W_TRACE_INFO("T9W UsbGetStatus() unknow recipient\n\r");
      UsbEp0Ctrl.EpStatus.Status = UsbEpStall;
    }
  }
  else
  {
    USB_T9W_TRACE_INFO("T9W UsbGetStatus()\n\r"
                       "    State (4>=) - %d\n\r"
                       "    wLength.Word (2==) - %d\n\r"
                       "    mRequestType.Dir (1==) - %d\n\r"
                       "    wValue.Word (0==) - %d\n\r",
                       UsbDevCtrl.State.DS,UsbEp0SetupPacket.wLength.Word,
                       UsbEp0SetupPacket.mRequestType.Dir,UsbEp0SetupPacket.wValue.Word);
    UsbEp0Ctrl.EpStatus.Status = UsbEpStall;
  }
}

/*************************************************************************
 * Function Name: UsbClearFeature
 * Parameters:  Int16U Feature,Int16U Index
 *

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲小说春色综合另类电影| 国产黑丝在线一区二区三区| 国产精品一区二区三区网站| 色久优优欧美色久优优| 精品国产1区2区3区| 亚洲精品久久嫩草网站秘色| 精品一二三四区| 欧美性欧美巨大黑白大战| 日本一区二区在线不卡| 免费高清在线一区| 色婷婷亚洲婷婷| 中文字幕精品在线不卡| 裸体歌舞表演一区二区| 欧美吞精做爰啪啪高潮| 国产精品初高中害羞小美女文| 天涯成人国产亚洲精品一区av| 成人深夜在线观看| 久久综合成人精品亚洲另类欧美| 午夜精品久久久久久久久久| 99r国产精品| 国产精品久久午夜夜伦鲁鲁| 国产在线乱码一区二区三区| 欧美精品精品一区| 亚洲自拍偷拍图区| 在线看日韩精品电影| 亚洲日本在线天堂| 成人av网在线| 日本一区二区三区电影| 国产传媒日韩欧美成人| 久久久一区二区三区| 国产一区二区三区四区在线观看| 日韩欧美亚洲一区二区| 日韩激情中文字幕| 欧美一级精品在线| 久久99精品久久久久| 精品理论电影在线观看| 紧缚奴在线一区二区三区| 欧美tk—视频vk| 黑人精品欧美一区二区蜜桃| 精品免费视频一区二区| 国产资源精品在线观看| 亚洲另类在线一区| zzijzzij亚洲日本少妇熟睡| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 中文字幕一区二区5566日韩| 国产成人精品三级麻豆| 国产欧美一区二区精品仙草咪| 国产激情偷乱视频一区二区三区| 精品福利一二区| 国产69精品久久777的优势| 国产日产亚洲精品系列| 94-欧美-setu| 午夜视频在线观看一区| 日韩情涩欧美日韩视频| 国产成人av影院| 中文字幕在线不卡视频| 欧美在线免费视屏| 奇米影视在线99精品| 久久久www成人免费无遮挡大片| 岛国一区二区在线观看| 一级精品视频在线观看宜春院 | 麻豆专区一区二区三区四区五区| 日韩欧美另类在线| 大胆亚洲人体视频| 亚洲一卡二卡三卡四卡五卡| 欧美成人综合网站| 成人激情文学综合网| 亚洲aⅴ怡春院| 久久久激情视频| 在线观看日韩电影| 久久精品99国产国产精| 亚洲欧美成人一区二区三区| 4438亚洲最大| 99re热这里只有精品免费视频 | 欧美另类videos死尸| 国产一区二区三区在线观看免费视频| 日本怡春院一区二区| 久久久久久久精| 欧美日韩综合在线免费观看| 国产精品原创巨作av| 亚洲一区日韩精品中文字幕| 久久久国产午夜精品| 日本韩国欧美国产| 国产精品99久久久久久似苏梦涵 | 亚洲激情欧美激情| 久久色在线视频| 欧美精品成人一区二区三区四区| 国产精品一区二区视频| 丝袜美腿亚洲色图| 亚洲视频一二三| 久久亚洲免费视频| 欧美一级在线视频| 欧美三级电影一区| 99久久伊人网影院| 国产乱码一区二区三区| 天堂av在线一区| 伊人性伊人情综合网| 久久精品亚洲乱码伦伦中文| 欧美一区二区在线看| 欧美性猛交xxxx黑人交| 91在线一区二区三区| 国产成人自拍网| 国产在线播放一区二区三区| 日韩高清不卡在线| 性感美女极品91精品| 亚洲欧洲日韩在线| 国产精品日产欧美久久久久| 久久综合久久综合久久| 日韩久久久精品| 欧美电影免费观看高清完整版在线 | 91片在线免费观看| 成人免费视频视频| 国产成人精品www牛牛影视| 久久av资源站| 麻豆国产精品官网| 男男视频亚洲欧美| 青青青爽久久午夜综合久久午夜 | 亚洲成av人片一区二区三区| 亚洲久本草在线中文字幕| 国产精品不卡在线| 成人欧美一区二区三区小说| 日本强好片久久久久久aaa| 天天操天天干天天综合网| 天天综合色天天| 蜜臀va亚洲va欧美va天堂| 日本一不卡视频| 激情欧美一区二区三区在线观看| 青草av.久久免费一区| 美女精品一区二区| 国产毛片精品国产一区二区三区| 激情丁香综合五月| 国产成人精品免费在线| 成a人片国产精品| 日本黄色一区二区| 欧美精品99久久久**| 日韩欧美一级精品久久| 国产亚洲一二三区| 最新中文字幕一区二区三区| 一区二区三区在线视频播放| 亚洲线精品一区二区三区| 免费精品视频最新在线| 国产成人在线看| 色播五月激情综合网| 宅男在线国产精品| 国产亚洲综合在线| 亚洲免费色视频| 午夜欧美2019年伦理| 久久精品国产一区二区三区免费看| 韩国一区二区三区| 色综合天天综合色综合av| 欧美日韩1区2区| 国产三级欧美三级日产三级99| 亚洲视频一区在线| 美女www一区二区| 99精品欧美一区二区三区小说 | 日韩一区二区电影| 国产精品色哟哟| 日韩成人免费在线| 99久久精品国产毛片| 制服丝袜激情欧洲亚洲| 欧美韩国日本综合| 日本不卡一二三| 波多野结衣一区二区三区 | 精品91自产拍在线观看一区| 欧美aaa在线| 99精品久久只有精品| 欧美va日韩va| 亚洲一区欧美一区| 成人免费高清视频| 日韩无一区二区| 亚洲精品国产精品乱码不99| 韩国成人精品a∨在线观看| 91官网在线免费观看| 国产欧美日韩综合| 日本不卡一二三区黄网| 91在线观看美女| 国产亚洲欧美日韩在线一区| 日本系列欧美系列| 在线看日本不卡| 国产精品久久久久婷婷二区次| 免费高清成人在线| 欧美视频一区二区| 亚洲精品视频观看| 97久久精品人人爽人人爽蜜臀| 久久综合中文字幕| 久久电影国产免费久久电影| 欧美三级电影一区| 亚洲精品成人悠悠色影视| av网站免费线看精品| 久久久不卡网国产精品一区| 精品一区二区三区欧美| 7777精品伊人久久久大香线蕉超级流畅| 国产精品美女久久久久aⅴ国产馆| 激情成人午夜视频| 精品国产精品网麻豆系列| 免费观看久久久4p| 日韩一区二区免费视频| 亚洲大片精品永久免费| 色婷婷av一区二区三区gif| 中文字幕在线播放不卡一区|