📄 ps2.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 + -