init
This commit is contained in:
120
utils/color.go
Normal file
120
utils/color.go
Normal file
@@ -0,0 +1,120 @@
|
||||
package utils
|
||||
|
||||
import "fmt"
|
||||
|
||||
// PRESET_COLORS 预设颜色
|
||||
var PRESET_COLORS = []struct {
|
||||
Name string
|
||||
R, G, B byte
|
||||
}{
|
||||
{"红色", 0xFF, 0x00, 0x00},
|
||||
{"绿色", 0x00, 0xFF, 0x00},
|
||||
{"蓝色", 0x00, 0x00, 0xFF},
|
||||
{"白色", 0xFF, 0xFF, 0xFF},
|
||||
{"黄色", 0xFF, 0xFF, 0x00},
|
||||
{"橙色", 0xFF, 0xA5, 0x00},
|
||||
{"紫色", 0x80, 0x00, 0x80},
|
||||
|
||||
//{"熄灭", 0x00, 0x00, 0x00},
|
||||
}
|
||||
|
||||
// 雷蛇绿 (标志性的 Razer Green)
|
||||
//razerGreen := []byte{0x00, 0xFF, 0x00} // 或者稍微深一点的 0x44, 0xFF, 0x00
|
||||
|
||||
// 熄灭 (关闭灯光)
|
||||
//off := []byte{0x00, 0x00, 0x00}
|
||||
|
||||
//// SetStaticColor 设置常亮颜色
|
||||
//func (rd *RazerDevice) SetStaticColor(color []byte) {
|
||||
// args := buildArguments(KBD_EFFECT_STATIC, KBD_BACKLIGHT_LED, color)
|
||||
// // 3. 构建 90 字节报告 (Class 0x0F, ID 0x02)
|
||||
// report, err := constructRazerReport(rd.TransactionID, KBD_CMD_CLASS, KBD_CMD_ID, KBD_DATA_SIZE, args)
|
||||
// if err != nil {
|
||||
// fmt.Println("报告构造失败:", err.Error())
|
||||
// return
|
||||
// }
|
||||
// if rd.SendReportToDevice(report) {
|
||||
// fmt.Println("设置常亮颜色成功")
|
||||
// return
|
||||
// }
|
||||
// fmt.Println("设置常亮颜色失败")
|
||||
//}
|
||||
|
||||
// SetStaticColor 设置常亮颜色
|
||||
func (rd *RazerDevice) SetStaticColor(color []byte) {
|
||||
// 关键修改:在颜色 [R, G, B] 前面补上开关位 0x01
|
||||
// 这样 buildArguments 拼接后的第 6 位就是 0x01,后面跟着 RGB
|
||||
staticParams := append([]byte{0x01}, color...)
|
||||
|
||||
args := buildArguments(KBD_EFFECT_STATIC, KBD_BACKLIGHT_LED, staticParams)
|
||||
|
||||
// 3. 构建 90 字节报告 (注意:KBD_DATA_SIZE 对于常亮通常是 9)
|
||||
report, err := constructRazerReport(rd.TransactionID, KBD_CMD_CLASS, KBD_CMD_ID, KBD_DATA_SIZE, args)
|
||||
if err != nil {
|
||||
fmt.Println("报告构造失败:", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if rd.SendReportToDevice(report) {
|
||||
fmt.Println("设置常亮颜色成功")
|
||||
return
|
||||
}
|
||||
fmt.Println("设置常亮颜色失败")
|
||||
}
|
||||
|
||||
// SetOffLightsColor 设置常亮颜色
|
||||
func (rd *RazerDevice) SetOffLightsColor(color []byte) {
|
||||
// 关键修改:在颜色 [R, G, B] 前面补上开关位 0x01
|
||||
// 这样 buildArguments 拼接后的第 6 位就是 0x01,后面跟着 RGB
|
||||
staticParams := append([]byte{0x01}, color...)
|
||||
|
||||
args := buildArguments(KBD_EFFECT_STATIC, KBD_BACKLIGHT_LED, staticParams)
|
||||
|
||||
// 3. 构建 90 字节报告 (注意:KBD_DATA_SIZE 对于常亮通常是 9)
|
||||
report, err := constructRazerReport(rd.TransactionID, KBD_CMD_CLASS, KBD_CMD_ID, KBD_DATA_SIZE, args)
|
||||
if err != nil {
|
||||
fmt.Println("报告构造失败:", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if rd.SendReportToDevice(report) {
|
||||
fmt.Println("设置常亮颜色成功")
|
||||
return
|
||||
}
|
||||
fmt.Println("设置常亮颜色失败")
|
||||
}
|
||||
|
||||
// SetBreathingColor 设置双色呼吸
|
||||
func (rd *RazerDevice) SetBreathingColor() {
|
||||
// 1. 定义呼吸子模式
|
||||
subMode := byte(0x02) // 0x02 为双色切换呼吸
|
||||
rgb1 := []byte{0xFF, 0x00, 0x00} // 颜色1: 红色
|
||||
rgb2 := []byte{0x00, 0x00, 0xFF} // 颜色2: 蓝色
|
||||
speed := byte(0x01) // 速度: 1(快) - 3(慢), 200可能过大,建议先用1测试
|
||||
|
||||
// 2. 构造参数包 (总长 8 字节)
|
||||
// 结构: [SubMode, R1, G1, B1, R2, G2, B2, Speed]
|
||||
breathingParams := append([]byte{subMode}, append(rgb1, append(rgb2, speed)...)...)
|
||||
|
||||
// 3. 调用新版 buildArguments (内部不再强制加 0x01)
|
||||
args := buildArguments(KBD_EFFECT_BREATHING, KBD_BACKLIGHT_LED, breathingParams)
|
||||
|
||||
// 4. 重要:计算正确的数据长度 (Data Size)
|
||||
// 5字节(prefix) + 8字节(breathingParams) = 13字节
|
||||
breathingDataSize := byte(13)
|
||||
|
||||
// 5. 构建 90 字节报告
|
||||
// 注意:这里传入的是自定义的 breathingDataSize 而不是全局固定的 KBD_DATA_SIZE
|
||||
report, err := constructRazerReport(rd.TransactionID, KBD_CMD_CLASS, KBD_CMD_ID, breathingDataSize, args)
|
||||
if err != nil {
|
||||
fmt.Println("报告构造失败:", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 6. 发送指令
|
||||
if rd.SendReportToDevice(report) {
|
||||
fmt.Println("设置双色呼吸成功")
|
||||
} else {
|
||||
fmt.Println("设置双色呼吸失败")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user