四、基本功能设定

这里先做一些基本功能配置的设定。

一、按键功能

1、功能用途

设定按键有以下功能:

1、禁用功能:禁用该按键;

2、标准键盘功能: 标准USB键盘键值

3、自定义键盘功能:组合键或单个按键

4、多媒体功能:如音量+、音量-、静音等功能;

5、鼠标按键功能:左、右、中、后退、前进键;

6、系统操控功能:如休眠关机等

7、宏:执行宏定义功能;

8、非PC类功能自定义:如切换蓝牙、2.4G、USB;切换灯效、调节亮度、调节速度等;

2、功能码

定义一个按键有3个字节的信息包:

第1字节:功能用途,序号0-8依次代表上述功能用途;

第2-3字节:功能码,根据不同功能用途填写如下信息:

       1、禁用功能:忽略;

       2、出厂键盘功能:第1字节为usb键值;忽略第2字节;

3、自定义键盘功能:第1字节代表特殊按键:Bit0-Bit7依次为:左Ctrl、左Shift、左Alt、左GUI、右Ctrl、右Shift、右Alt、右GUI;第2字节代表其它键值,以USB官方文档键值为准。

4、多媒体功能:功能码,以USB官方文档为准,此处为小端模式,即低位在前高位在后

5、鼠标功能:功能类型定义在第2字节,由功能类型查询第1字节具体功能:

⑴ 鼠标按键功能:Bit0-Bit7依次为左、右、中、后退、前进;

⑵ 纵向滚轮功能:0-向上滚动、1-向下滚动

⑶ 横向滚轮功能:0-向左滚动、1-向右滚动

6、系统操控功能:Bit0-Bit2依次分别为:关机、睡眠、唤醒,忽略第2字节;

7、宏:第1字节为宏文件编号,第2字节为循环次数;

8、非PC功能:自行定义;

typedef enum
{
	KeyFn_DisableBtn,	//禁用按键,此时忽略功能码
	KeyFn_StdKeyboard,	//标准按键,Byte0=usb键值
	KeyFn_CustomKeyboard,//自定义按键,功能码Byte0=特殊按键(bit顺序参考STDKEY_REPORT),Byte1=usb键值
	KeyFn_Consumer,	//多媒体,功能码Byte0=usb多媒体值低位 Byte1=usb多媒体值高位
	KeyFn_MouseBtn, //鼠标按键
	KeyFn_SysCtrl,	//系统控制,功能码Byte0=按键状态(bit顺序参考SYSCTRL_REPORT),Byte1忽略
	KeyFn_PlayMacro,//宏,功能码Byte0=起始地址 Byte1=长度
	KeyFn_Custom,	//程序自定义功能,功能码Byte0=功能编号(参考FNCUSTOM_CODE),Byte1忽略
}key_usagepage_t;

typedef struct
{
	u8 usagePage;	//参考key_usagepage_t
	u8 usage[2];	//功能码
	
}KEYFNINFO_S;

二、灯效

灯效可设置的参数有:亮度、速度、方向、预设颜色、自定义颜色

typedef struct
{
	u8 Lumin; //亮度
	u8 Speed; //速度
	u8 Dir;	//方向
	u8 Preset; //预设颜色

	u8 Hue; //自定义h
	u8 Sat; //自定义s
	u8 Val;
}LEDINFO_STRUCT;

其中预设颜色是用于键盘出厂做好的预设颜色编号,如果这个变量为0XFF的时候取的就是用户自定义的颜色,此时读取的是Hue、Sat、Val,其余值就是预设编号;这里我的灯效的色彩模型用的是hsv,所以自定义颜色就是Hue、Sat、Val;

三、自定义按键灯

这个是用来定义每个按键的灯,这个相对简单,就是每个按键有3个字节的数组,分别代表了r、g、b;

四、宏定义

定义有以下功能用途,可自行扩展:

1、保留,无用途

2、键盘按键按下;

3、键盘按键释放;

4、鼠标按键按下;

5、鼠标按键释放;

6、鼠标X轴偏移;

7、鼠标Y轴偏移;

对用途进行编号:0~6

定义一个宏信息包有5字节

第1字节:功能用途编号(0-6)

第2~3字节:功能码:

1、键盘按键,填入键值,填入第2个字节

2、鼠标按键:Bit0-Bit4依次为: 左、右、中、后退、前进,填入第2个字节

3、鼠标X、Y轴偏移:-32768~32767,填入第2~3字节,低位在前高位在后

第3-4字节:延时时间,单位毫秒。

typedef enum
{
	Macro_Empty,
	Macro_KeyboardPress,
	Macro_KeyboardRelease,
	Macro_MouseBtnPress,
	Macro_MouseBtnRelease,
	Macro_MouseMoveX,
	Macro_MouseMoveY,
}macro_usagepage_t;

typedef struct
{
	u8 usagePage;//参考macro_usagepage_t
	u8 usage[2];	//功能码
	u16 delayTime; //延时
}KEYMACRO_S;

总结

上述这些功能都是要存储到Flash或EEPROM里的,按键就包括两个表,一个是普通状态下的每个按键功能,一个是Fn组合键时每个按键功能;灯效、自定义按键灯则根据需求定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值