📄 sandrivermouse.c
字号:
// file: SanDriverMouse.c
// by : Sanicle
// ver : 2005.04.02
// from: http://3mn.net
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "2410lib.h"
#include "Drivers\SanDriverMouse.h"
int mouseIntCount;
int mouseStatus;
int mouseMoveX;
int mouseMoveY;
int mouseX;
int mouseY;
int mouseRButtonDown;
int mouseLButtonDown;
void mouseInit()
{
int i;
rUFCON1 = 0x0; // FIFO disable
rUMCON1 = 0x0; // AFC disable
rULCON1 = 0x6; // Normal,No parity,2 stop,7 bits
rUCON1 = 0x245;
rUBRDIV1=( (int)(PCLK/16./MOUSE_BAUD_RATE) -1 );
for(i=0;i<100;i++);
// Vars Initialize
mouseMoveX=mouseMoveY=mouseX=mouseY=mouseIntCount=0;
mouseRButtonDown=mouseLButtonDown=0;
// Enable Uart1 (Mouse)
BIT_CLR(rINTMSK, BIT_UART1);
ClearPending(BIT_UART1);
rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_ERR1);
rINTSUBMSK=~(BIT_SUB_RXD1|BIT_SUB_ERR1);
}
void __irq MouseInterrupt()
{
// Clear int pending
ClearPending(BIT_UART1);
rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_ERR1);
switch(mouseIntCount) // Which byte in package
{
case 0:
// Get Mouse Status
mouseStatus=UartMouse_RecvByte();
break;
case 1:
// Whether buttons down or not
if((mouseStatus&0x10)==0)mouseRButtonDown=0;
else mouseRButtonDown=1;
if((mouseStatus&0x20)==0)mouseLButtonDown=0;
else mouseLButtonDown=1;
if((mouseStatus&0x40)==0)
{
mouseInit();
return;
}
break;
case 2:
mouseMoveX=UartMouse_RecvByte();
// Move X position
if((mouseStatus&0x3)==0x0)mouseX+=mouseMoveX;
if((mouseStatus&0x3)==0x1)mouseX+=(mouseMoveX+64);
if((mouseStatus&0x3)==0x3)mouseX-=(64-mouseMoveX);
if((mouseStatus&0x3)==0x2)mouseX-=(128-mouseMoveX);
break;
case 3:
// Data check
if(mouseMoveX!=UartMouse_RecvByte())
{
mouseInit();
return;
}
break;
case 4:
mouseMoveY=UartMouse_RecvByte();
// Move Y position
if((mouseStatus&0xc)==0x0)mouseY+=mouseMoveY;
if((mouseStatus&0xc)==0x4)mouseY+=(mouseMoveY+64);
if((mouseStatus&0xc)==0xc)mouseY-=(64-mouseMoveY);
if((mouseStatus&0xc)==0x8)mouseY-=(128-mouseMoveY);
break;
case 5:
// Data check
if(mouseMoveY!=UartMouse_RecvByte())
{
mouseInit();
return;
}
// Test code here:
Uart_SendDWORD(mouseX, NULL);
Uart_SendDWORD(mouseY, NULL);
Uart_SendDWORD(mouseLButtonDown, TRUE);
break;
}
// Prepare next byte
mouseIntCount++;
if(mouseIntCount==6)
{
mouseIntCount=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -