⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hid_mouse.c

📁 NXP LPC系列AMR7的开发程序源码(LCD
💻 C
字号:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2005
 *
 *    File name      : hid_mouse.c
 *    Description    : HID module
 *
 *    History :
 *    1. Date        : December 19, 2005
 *       Author      : Stanimir Bonev
 *       Description : Create
 *    2. Date        : January 30, 2007
 *       Author      : Stanimir Bonev
 *       Description : Add IN EP acknowledge callback function
 *
 *    $Revision: 1.0 $
 **************************************************************************/
#include "hid_mouse.h"

#pragma data_alignment=4
static MouseReport_t MouseReport;

volatile static Boolean HidData;

/*************************************************************************
 * Function Name: HidInit
 * Parameters: none
 *
 * Return: none
 *
 * Description: Init HID Mouse
 *
 *************************************************************************/
void HidInit (void)
{
  HidData = FALSE;
  MouseReport.Buttons = 0;
  MouseReport.X = 0;
  MouseReport.Y = 0;
  USB_UserFuncRegistering(UsbClassHidDescriptor,UsbUserGetDescriptor);
  USB_UserFuncRegistering(UsbClassHidRequest,UsbUserClass);
}

/*************************************************************************
 * Function Name: UsbClassHidConfigure
 * Parameters:  void * pArg
 *
 * Return: void *
 *
 * Description: USB Class HID configure
 *
 *************************************************************************/
void * UsbClassHidConfigure (void * pArg)
{
  if((Int32U)pArg == 0)
  {
    if(UsbCoreReq(UsbCoreReqConfiquration) != 0)
    {
      // disable all class EPs
      USB_RealizeEp((USB_Endpoint_t)ReportEp,0,0,0);
      USB_UserFuncRegistering(NULL,ReportEp);
    }
  }
  else
  {
    USB_UserFuncRegistering(UsbClassHidReportAkn,ReportEp);
    // Realize Class EPs
    USB_RealizeEp((USB_Endpoint_t)ReportEp,0,ReportEpMaxSize,1);
  }
  return(NULL);
}

/*************************************************************************
 * Function Name: UsbClassHidDescriptor
 * Parameters:  void * pArg
 *
 * Return: void *
 *
 * Description: Implement GET DESCRIPTOR
 *
 *************************************************************************/
void * UsbClassHidDescriptor (void * pArg)
{
UsbEpCtrl_t * UsbEp = (UsbEpCtrl_t *) pArg;
UsbSetupPacket_t * pData = (UsbSetupPacket_t *) UsbEp->pData;
  if (pData->wIndex.Word == 0)
  {
    switch (pData->wValue.Hi)
    {
    case Hid:
      UsbEp->Counter = SIZE_OF_HID_DESC;
      UsbEp->pData = (pInt8U)UsbHidDescriptor;
      return((void *)UsbPass);
    case HidReport:
      UsbEp->Counter = SIZE_OF_HID_MOUSE_DESC;
      UsbEp->pData = (pInt8U)mouseDescriptor;
      return((void *)UsbPass);
    }
  }
  return((void *)UsbFault);
}

/*************************************************************************
 * Function Name: UsbClassHidRequest
 * Parameters:  void * pArg
 *
 * Return: void *
 *
 * Description: Implement USB Class Hid requests
 *
 *************************************************************************/
void * UsbClassHidRequest (void * pArg)
{
UsbEpCtrl_t * UsbEp = (UsbEpCtrl_t *) pArg;
UsbSetupPacket_t *pData = (UsbSetupPacket_t *)UsbEp->pData;
  switch (pData->bRequest)
  {
  case HID_GET_REPORT:
    if((pData->wValue.Hi == 1) &&
       (pData->wIndex.Word == 1))
    {
      // Send report
      UsbEp->pData = (Int8U *)&MouseReport;
      UsbEp->Counter = ReportEpMaxSize;
      return((void *)UsbPass);
    }
    break;
  }
  return((void *)UsbFault);
}

/*************************************************************************
 * Function Name: UsbClassHidReportAkn
 * Parameters:  void * pArg
 *
 * Return: void *
 *
 * Description: USB HID report acknowledge
 *
 *************************************************************************/
void * UsbClassHidReportAkn (void * pArg)
{
  HidData = FALSE;
  return((void *)UsbPass);
}

/*************************************************************************
 * Function Name: HidSendReport
 * Parameters:  Int8U Buttons, Int8S X Int8S Y
 *
 * Return: Boolean
 *
 * Description: USB HID report send
 *
 *************************************************************************/
Boolean HidSendReport (Int8U Buttons, Int8S X, Int8S Y)
{
Int32U ReportEpSize;
Boolean Status = TRUE;
  MouseReport.Buttons = Buttons;
  MouseReport.X += X;
  MouseReport.Y += Y;
  if(!HidData)
  {
    HidData = TRUE;
    ReportEpSize = ReportEpMaxSize;
    Status = USB_EpWrite((USB_Endpoint_t)ReportEp,(unsigned char *)&MouseReport,&ReportEpSize) == USB_OK;
    MouseReport.X = MouseReport.Y = 0;
  }
  return (Status);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -