Skip to content

Commit a8d0012

Browse files
committed
add SignalRGB support
1 parent c856ed2 commit a8d0012

File tree

2 files changed

+153
-0
lines changed

2 files changed

+153
-0
lines changed

3.Software/HelloWord_plugin.js

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
2+
3+
export function Name() { return "HellowWord Keyboard"; }
4+
export function VendorId() { return 0x1001; }
5+
export function ProductId() { return 0xF103; }
6+
export function Publisher() { return "HellowWord"; }
7+
export function Size() { return [17, 8]; }
8+
export function DefaultPosition(){return [75, 55]; }
9+
export function DefaultScale(){return 18.8}
10+
export function ControllableParameters() {
11+
return [
12+
{"property":"shutdownColor", "group":"lighting", "label":"Shutdown Color", "min":"0", "max":"360", "type":"color", "default":"009bde"},
13+
{"property":"LightingMode", "group":"lighting", "label":"Lighting Mode", "type":"combobox", "values":["Canvas", "Forced"], "default":"Canvas"},
14+
{"property":"forcedColor", "group":"lighting", "label":"Forced Color", "min":"0", "max":"360", "type":"color", "default":"009bde"},
15+
];
16+
}
17+
export function Initialize() {
18+
device.log("初始化")
19+
}
20+
21+
const vKeys =
22+
[
23+
13,12,11,10,9,8,7,6,5,4,3,2,1,0, // 14
24+
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,26, 27, 28,
25+
43,42,41,40,39,38,37,36,35,34,33,32,31,30,29, // 15
26+
//29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,40, 41, 42, 43, // 14
27+
44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,55, 56, 57,
28+
71,70,69,68,67,66,65,64,63,62,61,60,59,58, // 14
29+
//58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, // 14
30+
72, 73, 74, 75, 76, 77, 78, 79, 80, 81, //10
31+
82, 83, 84,
32+
//100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85 //背部16个灯
33+
];
34+
35+
36+
//LED对应Key的位置共82,还有19个为背景灯和三个指示灯
37+
var vLedNames = [
38+
//"Pasue","f12","f11","f10","f9","f8","f7","f6","f5","f4","f3","f2","f1","esc",
39+
"Esc", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "Pasue",
40+
"~","1","2","3","4","5","6","7","8","9","0","-","=","backspace","Insert",
41+
"TAB", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "LEFT_U_BRACE", "RIGHT_U_BRACE", "BACKSLASH", "DELETE",
42+
"CAP_LOCK", "A","S","D","F","G","H","J","K","L","SEMI_COLON", "QUOTE", "ENTER", "PAGE_UP",
43+
"LEFT_SHIFT", "Z","X","C","V","B","N","M","COMMA", "PERIOD", "SLASH", "RIGHT_SHIFT", "UP_ARROW", "PAGE_DOWN",
44+
"LEFT_CTRL", "LEFT_GUI", "LEFT_ALT", "SPACE", "RIGHT_ALT", "FN", "RIGHT_CTRL", "LEFT_ARROW", "DOWN_ARROW", "RIGHT_ARROW",
45+
"Front1","Front2","Front3",
46+
//"back1","back2","back3","back4","back5","back6","back7","back8","back9","back10","back11","back12","back13","back14","back15","back16",
47+
]
48+
//上位机矩阵LED对应坐标点
49+
var vLedPositions = [
50+
//键盘的82个灯
51+
[0,0],[1,0],[2,0],[3,0],[4,0],[5,0],[6,0],[7,0],[8,0],[9,0],[10,0],[11,0], [12,0], [13,0], //14
52+
//[13,0],[12,0],[11,0],[10,0],[9,0],[8,0],[7,0],[6,0],[5,0],[4,0],[3,0],[2,0], [1,0], [0,0], //14
53+
[0,1],[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[11,1], [12,1], [13,1], [14,1], //15
54+
[0,2],[1,2],[2,2],[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],[9,2],[10,2],[11,2], [12,2], [13,2], [14,2] ,//15
55+
[0,3],[1,3],[2,3],[3,3],[4,3],[5,3],[6,3],[7,3],[8,3],[9,3],[10,3],[11,3], [12,3], [13,3], //14
56+
[0,4],[1,4],[2,4],[3,4],[4,4],[5,4],[6,4],[7,4],[8,4],[9,4],[10,4],[11,4], [12,4], [13,4], //14
57+
[0,5],[1,5],[2,5],[3,5],[4,5],[5,5],[6,5],[7,5],[8,5],[9,5], [10,5],[11,5],[12,5], //13 指示灯 3个
58+
//背部16个灯
59+
//[0,6],[1,6],[2,6],[3,6],[4,6],[5,6],[6,6],[7,6],[8,6],[8,6],[10,6],[11,6], [12,6], [13,6], [14,6] ,[15,6],//16
60+
]
61+
62+
63+
export function LedNames() {
64+
return vLedNames;
65+
}
66+
67+
export function LedPositions() {
68+
return vLedPositions;
69+
}
70+
71+
export function Render() {
72+
sendColors();
73+
}
74+
75+
export function Shutdown() {
76+
let packet = [];
77+
packet[0x00] = 0x02;//reportid
78+
packet[0x01] = 0xBD;//控制命令:关闭软件控制
79+
packet[0x02] = 0;//第几包数据,共6包,120个灯
80+
packet[0x03] = 1;//保留字节
81+
device.write(packet,32);
82+
}
83+
/**
84+
The three above examples are each suitable for a different packet structure.
85+
The sendZone function is good for devices that use a separate packet for each LED.
86+
The sendPacket function is more suitable for devices that send multiple LEDs in a row within a single packet.
87+
The sendColors function is suitable for devices that have multiple LEDs in a packet,
88+
but they are not one directly after the other. In our case, we are going to use the sendColors function.
89+
* @param {*} zone
90+
* @param {*} shutdown
91+
*/
92+
93+
94+
function sendColors(shutdown = false){
95+
96+
const RGBData = new Array(110*3).fill(0);
97+
for(let led_idx = 0; led_idx < vKeys.length; led_idx++) {
98+
let iX = vLedPositions[led_idx][0];
99+
let iY = vLedPositions[led_idx][1];
100+
var col;
101+
102+
if(shutdown){
103+
col = hexToRgb(shutdownColor);
104+
}else if (LightingMode === "Forced") {
105+
col = hexToRgb(forcedColor);
106+
device.log("Forced:"+col)
107+
}else{
108+
col = device.color(iX, iY);
109+
}
110+
let iLedIdx = vKeys[led_idx] * 3;
111+
RGBData[iLedIdx] = col[0];
112+
RGBData[iLedIdx + 1] = col[1];
113+
RGBData[iLedIdx + 2] = col[2];
114+
}
115+
116+
//总共110灯珠,每次传输10个
117+
for(let ledPage = 0; ledPage < 12; ledPage++)
118+
{
119+
let packet = [];
120+
packet[0x00] = 0x02;//reportid,不占用实际字节,由于是多id设备,必须占用
121+
packet[0x01] = 0xac;//控制命令
122+
packet[0x02] = ledPage;//包页码
123+
//3个字节对应一个rgb灯,一个包传10个,占用30字节
124+
packet = packet.concat(RGBData.splice(0, 30));
125+
device.write(packet,33);
126+
}
127+
}
128+
129+
130+
function hexToRgb(hex) {
131+
let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
132+
let colors = [];
133+
colors[0] = parseInt(result[1], 16);
134+
colors[1] = parseInt(result[2], 16);
135+
colors[2] = parseInt(result[3], 16);
136+
137+
return colors;
138+
}
139+
140+
export function Validate(endpoint) {
141+
return endpoint.interface === -1 && endpoint.usage === 0xc00 && endpoint.usage_page === 0xffc0;
142+
}
143+
144+
export function Image() {
145+
return "";
146+
}

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
## 1. 项目说明
2828

2929
### 1.0 更新说明:
30+
**23.2.20更新**
31+
* 修改`CUSTOM_HID_EPOUT_ADDR = 2`,HID_RxCpltCallback位置变更到CUSTOM_HID_OutEvent_FS中(原来的位置可能导致while循环内无法发送report)。
32+
33+
> * main里面增加了RGB控制相关代码,可以通过HID协议发送数据包来控制键盘RGB效果
34+
> * 已对接SignalRGB,Software中添加SignalRGB插件
35+
> * report包大小33字节,前三个字节依次为reportid(本项目为2)、控制命令(0xAC(上位机控制),0xBD(关闭上位机控制),report包次序(一个包最多传10个RGB值,需要多个包拼接,从0计算);后30字节为RGB值。
36+
3037

3138
**22.8.31更新:**
3239

0 commit comments

Comments
 (0)