mouse.c
上传用户:yyyd609
上传日期:2022-07-18
资源大小:183k
文件大小:4k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
  2. * File Name          : mouse.c
  3. * Author             : MCD Application Team
  4. * Date First Issued  : 27/10/2003
  5. * Description        : USB Mouse demo main file
  6. ********************************************************************************/
  7. #include "mouse.h"
  8. #include "71x_lib.h"
  9. #include "USB_lib.h"
  10. #include "USB_conf.h"
  11. #include "USB_prop.h"
  12. #include "USB_pwr.h"
  13. // directions of transfer for CopyBuffer
  14. #define USR_TO_PMA 0
  15. #define PMA_TO_USR 1
  16. extern BOOL fCellSuspended;
  17. /*******************************************************************************
  18. * Function Name : gInit
  19. * Description   : Hardware initialisation
  20. * Input         : None
  21. * Output        : None
  22. * Return value  : None
  23. *******************************************************************************/
  24. void gInit(void)
  25. {
  26.   wInterrupt_Mask = IMR_MSK;
  27. } /* gInit */
  28. /*******************************************************************************
  29. * Function Name : CopyBuffer
  30. * Description   : Transfers a packet of data from/to PMA to/from user memory
  31. * Input 1       : iTrDirection: USR_TO_PMA or PMA_TO_USR
  32. * Input 2       : EpNum: endpoint number
  33. * Input 3       : Usr_buffer: a pointer to user memory
  34. * Input 4       : Nbytes: number of bytes to transfer
  35. * Output        : None
  36. * Return value  : None
  37. *******************************************************************************/
  38. void CopyBuffer(int iTrDirection, BYTE EpNum, BYTE *Usr_buffer, int Nbytes)
  39. {
  40.   DWORD *pTxBuff;
  41.   WORD wTra;
  42.   BYTE *pbTra;
  43.   int i;
  44.   if (iTrDirection == USR_TO_PMA)
  45.   {
  46.     pTxBuff = (DWORD *)(PMAAddr + (BYTE *)(GetEPTxAddr(EpNum)*2));
  47.     for(i = 0; i < Nbytes;)
  48.     {
  49.     pbTra = (BYTE *)&wTra;
  50.     *pbTra++ = *Usr_buffer++;
  51.     i++;
  52.     if (i < Nbytes) /* check for ODD transfers */
  53.     *pbTra = *Usr_buffer++;
  54.     else
  55.     *pbTra = 0;
  56.     *pTxBuff++ = wTra;
  57.     i++;
  58. }
  59.   }
  60. } /* CopyBuffer */
  61. /*******************************************************************************
  62. * Function Name : Mouse_Send
  63. * Description   : Decodes commands arriving from serial and
  64. *                 prepares buffer to be sent containing mouse event infos
  65. * Input 1       : deltaX: cursor delta X
  66. * Input 2       : deltaY: cursor delta Y
  67. * Input 3       : buttons: mouse buttons status
  68. * Output        : None
  69. * Return value  : None
  70. *******************************************************************************/
  71. void Mouse_Send(int deltaX, int deltaY, int buttons)
  72. {
  73. BYTE Mouse_Buffer[3];
  74. /* prepare buffer to send */
  75. Mouse_Buffer[0] = buttons;
  76. Mouse_Buffer[1] = deltaX;
  77. Mouse_Buffer[2] = deltaY;
  78. CopyBuffer(USR_TO_PMA, ENDP1, Mouse_Buffer, 3);
  79. /* enable endpoint for transmission */
  80. SetEPTxAddr(ENDP1, ENDP1_TXADDR);
  81. SetEPTxCount(ENDP1, 4);
  82. SetEPTxValid(ENDP1);
  83. } /* Mouse_Send */
  84. /*******************************************************************************
  85. * Function Name : Keys_Read
  86. * Description   : Checks if a new character from terminal has arrived
  87. * Input 1       : deltaX: cursor delta X
  88. * Input 2       : deltaY: cursor delta Y
  89. * Input 3       : buttons: mouse buttons status
  90. * Output        : None
  91. * Return value  : None
  92. *******************************************************************************/
  93. void Mouse_Action(int deltaX, int deltaY, int buttons)
  94. {
  95. if (fCellSuspended)
  96. Resume(RESUME_INTERNAL); // remote wake-up
  97. else
  98. Mouse_Send(deltaX, deltaY, buttons);
  99. }
  100. void Mouse_Init(void)
  101. {
  102. XTI_Init();
  103. GPIO_Config(GPIO2, 1<<8, GPIO_INOUT_WP);
  104. XTI_LineModeConfig(XTI_Line2, XTI_FallingEdge);
  105. XTI_LineConfig(XTI_Line2, ENABLE);
  106. XTI_ModeConfig(XTI_Interrupt, ENABLE);
  107. EIC_IRQChannelPriorityConfig(XTI_IRQChannel, 1);
  108. EIC_IRQChannelConfig(XTI_IRQChannel, ENABLE);
  109. gInit();  /* init hardware */
  110. USB_Init();
  111. }