这里先做一些基本功能配置的设定。
一、按键功能
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组合键时每个按键功能;灯效、自定义按键灯则根据需求定义。