📄 usb_func.c
字号:
/******************** (C) COPYRIGHT 2005 STMicroelectronics ********************
* File Name : usb_func.c
* Author : MCD Application Team
* Date First Issued :
* Description :
*
********************************************************************************
* History:
* 08/26/2005 : First Version
*******************************************************************************/
#include "usb_func.h"
#include "USB_lib.h"
#include "USB_conf.h"
#include "USB_prop.h"
#include "USB_pwr.h"
#include "usb_func.h"
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
#define NO_KEY 5
#define USR_TO_PMA 0
#define PMA_TO_USR 1
/*******************************************************************************
* Function Name : gInit
* Description : Hardware initialisation
* Input : None
* Output : None
* Return value : None
*******************************************************************************/
void gInit(void)
{
wInterrupt_Mask = IMR_MSK;
} /* gInit */
/*
BYTE Keys_Read(void)
{
if (GPIO_BitRead(GPIO0,10)) return LEFT;
if (GPIO_BitRead(GPIO0,13)) return RIGHT;
if (GPIO_BitRead(GPIO1,14)) return UP;
if (GPIO_BitRead(GPIO0,8)) return DOWN;
} */
BYTE Keys_Read(void)
{
if (GPIO_BitRead(GPIO1,9)==0) return UP;
if (GPIO_BitRead(GPIO1,10)==0) return DOWN;
if (GPIO_BitRead(GPIO1,14)==0) return LEFT;
if (GPIO_BitRead(GPIO1,15)==0) return RIGHT;
else return NO_KEY;
}
/*******************************************************************************
* Function Name : CopyBuffer
* Description : Transfers a packet of data from/to PMA to/from user memory
* Input 1 : iTrDirection: USR_TO_PMA or PMA_TO_USR
* Input 2 : EpNum: endpoint number
* Input 3 : Usr_buffer: a pointer to user memory
* Input 4 : Nbytes: number of bytes to transfer
* Output : None
* Return value : None
*******************************************************************************/
void CopyBuffer(int iTrDirection, BYTE EpNum, BYTE *Usr_buffer, int Nbytes)
{
DWORD *pTxBuff;
WORD wTra;
BYTE *pbTra;
int i;
if (iTrDirection == USR_TO_PMA)
{
pTxBuff = (DWORD *)(PMAAddr + (BYTE *)(GetEPTxAddr(EpNum)*2));
for(i = 0; i < Nbytes;)
{
pbTra = (BYTE *)&wTra;
*pbTra++ = *Usr_buffer++;
i++;
if (i < Nbytes) /* check for ODD transfers */
*pbTra = *Usr_buffer++;
else
*pbTra = 0;
*pTxBuff++ = wTra;
i++;
}
}
}
void Mouse_Send(BYTE Keys)
{
BYTE Mouse_Buffer[3] = {0,0,0};
char X = 0, Y = 0;
switch (Keys)
{
case LEFT:
X -= 5;
break;
case RIGHT:
X += 5;
break;
case UP:
Y -= 5;
break;
case DOWN:
Y += 5;
break;
default:
return;
}
/* prepare buffer to send */
Mouse_Buffer[1] = X;
Mouse_Buffer[2] = Y;
CopyBuffer(USR_TO_PMA, INT_ENDP, Mouse_Buffer, 3);
/* enable endpoint for transmission */
SetEPTxAddr(INT_ENDP, ENDP1_TXADDR);
SetEPTxCount(INT_ENDP, 4);
SetEPTxValid(INT_ENDP);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -