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

📄 ps2.h

📁 PS2和USB兼容的鼠标源代码
💻 H
字号:
/********************************************************************************/
/* filename: ps2.h                                                              */
/* version : v1.00                                                              */
/* created : hw-chen                                                            */
/* descript: 与PS2相关的数据信息                                                */
/********************************************************************************/
#ifndef __PS2_H__
#define __PS2_H__

/********************************************************************************/
/* PS2 commands                                                                 */
/********************************************************************************/
#define PS2_CMD_RESET				0xFF    //* 引起PS2进入RESET模式
#define PS2_CMD_RESEND				0xFE    //* 用于只是在接收中出现的错误键盘的响应就是重发送最后的扫描码或者命令回应给主机但
#define PS2_CMD_DEFAULT			    0xF6    //* 载入缺省的机打速率/延时
#define PS2_CMD_DISABLE				0xF5    //* PS2停止扫描,载入缺省值
#define PS2_CMD_ENABLE				0xF4    //* 用上一条命令禁止PS2后,重新使能键盘
#define PS2_CMD_SET_SAMPLE_RATE		0xF3    //* 主机在这条命令后,会发送一个字节的参数来定义机打速率和延时
#define PS2_CMD_READ_DEV_TYPE	    0xF2    //* PS2回应两个字节的设备ID
#define PS2_CMD_REMOTE_MODE		    0xF0    //* 主机在这个命令后,发送一个字节的参数是定PS2使用哪套扫描码集
#define PS2_CMD_SET_WRAP_MODE	    0xEE
#define PS2_CMD_RST_WRAP_MODE		0xEC
#define PS2_CMD_READ_DATA			0xEB
#define PS2_CMD_SET_STREAM_MODE		0xEA
#define PS2_CMD_STATUS_REQUEST		0xE9
#define PS2_CMD_SET_RESOLUTION		0xE8    //* 决定位移计数器增减数量的参数叫分辨率
#define PS2_CMD_SET_SCALING_2_1		0xE7    //* 设置缩放比例2:1
#define PS2_CMD_RST_SCALING		    0xE6    //* 复位缩放比例1:1

/********************************************************************************/
/* PS2 支持的采样率最大设置个数                                                 */
/********************************************************************************/
#define PS2_NUM_RATES               0x7

/********************************************************************************/
/* PS2 管脚定义                                                                 */
/********************************************************************************/
#define PS2_PORT                    P1DATA
#define PS2_SCLK_BIT			    0x01    //* P1_0 (D+)
#define PS2_DATA_BIT			    0x02    //* P1_1 (D-)
#define PS2_SCLK_MSK			    0xFE    //* B1111-1110
#define PS2_DATA_MSK			    0xFD    //* B1111-1101
#define PS2_SCLK                    0x01
#define PS2_DATA                    0x02
#define HOST_RTS                    ((PS2_PORT&(PS2_SCLK_BIT|PS2_DATA_BIT))==PS2_SCLK_BIT)
#define HOST_INHIBIT                ((PS2_PORT&(PS2_SCLK_BIT))==0x0)
#define relase_ps2_pins()           PS2_PORT|=0x3
#define PS2_CLK_H_DATA_H		    0x03    //* 0B0011
#define PS2_CLK_L_DATA_H			0x02    //* 0B0010
#define PS2_CLK_L_DATA_L			0x00    //* 0B0000
#define PS2_CLK_H_DATA_L			0x01    //* 0B0001
#define PS2_CLK_DATA_MSK		    0xFC    //* 0B1100

/********************************************************************************/
/* PS2 鼠标的分辨率和SCALE定义                                                  */
/********************************************************************************/
#define SC_1_1						0		//* scaling constants
#define SC_2_1						1
#define RES_1MM						0		//* resolution constants
#define RES_2MM						1
#define RES_4MM						2
#define RES_8MM						3
#define PS2_RESEND					0xFE	//* misc. responses to host
#define PS2_ACK						0xFA
#define PS2_ERROR					0xFC
#define RIGHT_BUTTON				1		//* button positions
#define LEFT_BUTTON					2
#define MIDDLE_BUTTON				4


/********************************************************************************/
/* 如果通过0xE7命令设置比例2:1,鼠标在发数据给主机前采用如下的算法运             */
/* 鼠标运动计数器   报告给主机的数据                                            */
/* 0                0                                                           */
/* 1                1                                                           */
/* 2                1                                                           */
/* 3                3                                                           */
/* 4                6                                                           */
/* 5                9                                                           */
/* N>5              2*N                                                         */
/********************************************************************************/


/********************************************************************************/
/* 定义PS2的发送缓冲区                                                          */
/********************************************************************************/
typedef struct
{   char ps2_buffer[10];                       //array of bytes
    char ps2_length;                           //initial length of message
    char ps2_xmit;                           //length of bytes remaining to send
}st_ps2_xmit;


/********************************************************************************/
/* PS2鼠标参数                                                                  */
/********************************************************************************/
typedef struct
{   char report_rate;       //* 采样频率
    char report_interval;   //* 采样时间间隔
    char scale;             //* 缺省情况下鼠标使用1:1比例,因此对报告的鼠标位移没有影响
    char stream;
    char resolution;
    char enable;
    char zmouse;
    char wrap;
}st_ps2_parameter;

extern st_ps2_parameter ps2_parameter;     //* mouse parameters
extern st_ps2_xmit      ps2_xmit;          //* transmit buffer
extern char ps2_last_valid_cmd;            //* PS2保存连续字节命令的上一个命令
extern char ps2_error_flag;                //* 出错统计

void ps2_rst_scaling(void);
void ps2_set_scaling(void);
void ps2_set_resolution_ack(void);
void ps2_status_request(void);
void ps2_set_stream_mode(void);
void ps2_packet_mouse_mdata(void);
void ps2_rst_wrap_mode(void);
void ps2_set_wrap_mode(void);
void ps2_set_remote_mode(void);
void ps2_read_device_type(void);
void ps2_set_sample_rate_ack(void);
void ps2_enable(void);
void ps2_disable(void);
void ps2_set_default_state(void);
void ps2_resend(void);
void ps2_reset(void);
char ps2_set_sample_rate(char rate);
char ps2_set_resolution(char bRes);
void ps2_rst_interval(void);
void ps2_main_process(void);
char ps2_recv_sbyte(void);
char ps2_put_hostbyte(unsigned char mdata);
void ps2_pro_bat(void);
void ps2_start(void);

#endif

⌨️ 快捷键说明

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