Compare commits
1621 commits
8451b93500
...
d198f10073
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d198f10073 | ||
|
|
b113fd8cbc | ||
|
|
1836b5e417 | ||
|
|
d5f9411ecb | ||
|
|
9ad0fa26bf | ||
|
|
6a4550c6f0 | ||
|
|
cc3414408f | ||
|
|
fd8101b0c3 | ||
|
|
18f484c274 | ||
|
|
221f5007ab | ||
|
|
fbb7d16039 | ||
|
|
ca84bad1fc | ||
|
|
be9fe7bb2d | ||
|
|
e21d29fa27 | ||
|
|
febdd2ad5e | ||
|
|
503ad36256 | ||
|
|
1be1656ce8 | ||
|
|
cd6831ccbe | ||
|
|
676547b8b0 | ||
|
|
c82a6052a2 | ||
|
|
a0726dc065 | ||
|
|
86fbdfa6e7 | ||
|
|
0eb082f21b | ||
|
|
714736bf73 | ||
|
|
079e344c5a | ||
|
|
c2e0bd496f | ||
|
|
f1a050a503 | ||
|
|
bf24ab3d53 | ||
|
|
5190274004 | ||
|
|
5db766cfa0 | ||
|
|
ddc8bc5885 | ||
|
|
4036a9e414 | ||
|
|
fa74b64d6d | ||
|
|
59c2ca2052 | ||
|
|
a528db1604 | ||
|
|
72a5afc910 | ||
|
|
974f7d1e26 | ||
|
|
2a6ad477e6 | ||
|
|
ce64dbc686 | ||
|
|
eb199dae67 | ||
|
|
ad9fd08a08 | ||
|
|
86b2ced685 | ||
|
|
4e96056ac4 | ||
|
|
84c24e70c0 | ||
|
|
d069947252 | ||
|
|
550503d757 | ||
|
|
ef6241fe38 | ||
|
|
fcce668d66 | ||
|
|
1bd9215a72 | ||
|
|
840512751c | ||
|
|
517287117b | ||
|
|
46d935c1a4 | ||
|
|
9680d072fa | ||
|
|
06413f2877 | ||
|
|
ce86faabfe | ||
|
|
2134323bf8 | ||
|
|
67e08d3415 | ||
|
|
f8d3c7a838 | ||
|
|
2c630a5218 | ||
|
|
e418aa7f95 | ||
|
|
3ab1519e25 | ||
|
|
d8c40cab6d | ||
|
|
f0e9650085 | ||
|
|
a34d796059 | ||
|
|
9470cb69fd | ||
|
|
520b83a226 | ||
|
|
85af2e1ed7 | ||
|
|
f420e9bbbe | ||
|
|
82cb9fb7d0 | ||
|
|
719d7b8801 | ||
|
|
b13ca818bb | ||
|
|
2dd013a0a0 | ||
|
|
49e4f00aff | ||
|
|
4c018421a2 | ||
|
|
a2826ec865 | ||
|
|
c256b6246a | ||
|
|
f9bfb951ca | ||
|
|
8c63eeea47 | ||
|
|
b136e7739a | ||
|
|
2967ccb1cb | ||
|
|
03d5dd6008 | ||
|
|
89d1ee2483 | ||
|
|
c313b19fc5 | ||
|
|
2a6856a5d2 | ||
|
|
f3c7a213b1 | ||
|
|
f6ddf5676a | ||
|
|
b331fbcd4d | ||
|
|
41eec46fa7 | ||
|
|
0eb34eec25 | ||
|
|
a1f144daf2 | ||
|
|
ca73941e5d | ||
|
|
0bdf600409 | ||
|
|
d5f8e2cac9 | ||
|
|
20f3e5db0b | ||
|
|
d412ef5e17 | ||
|
|
0269cdd068 | ||
|
|
12f90a67f9 | ||
|
|
ca554d9ef6 | ||
|
|
0c0ffe7f5c | ||
|
|
0eee6044b2 | ||
|
|
da21f992c5 | ||
|
|
6c8a46cc7d | ||
|
|
aa31e21868 | ||
|
|
ee66121364 | ||
|
|
327edf2a6b | ||
|
|
2535ac3edf | ||
|
|
df56b42e62 | ||
|
|
bed69130fd | ||
|
|
f54460fd2e | ||
|
|
2bde9b287f | ||
|
|
c8abbc6054 | ||
|
|
cba7c016d3 | ||
|
|
7d0db424ec | ||
|
|
6f9e164874 | ||
|
|
2927135cdd | ||
|
|
0afcdbd0ca | ||
|
|
8813c9936d | ||
|
|
abe7068197 | ||
|
|
d7f0872690 | ||
|
|
df75659778 | ||
|
|
c32663bb32 | ||
|
|
c94eed432d | ||
|
|
a73a879238 | ||
|
|
a8500a2a8a | ||
|
|
718962c188 | ||
|
|
e6190ec275 | ||
|
|
13e8f70438 | ||
|
|
ea206235c5 | ||
|
|
dc0103a155 | ||
|
|
31ec06b576 | ||
|
|
17a58b4c22 | ||
|
|
56564092bc | ||
|
|
2b546fce9f | ||
|
|
69a065eeed | ||
|
|
a7c01e039d | ||
|
|
4639833bdb | ||
|
|
bf6fe2b4fb | ||
|
|
04d2ebacca | ||
|
|
e44fd9ed78 | ||
|
|
526d35edfe | ||
|
|
2ec68c29de | ||
|
|
c761661386 | ||
|
|
142e7fcc02 | ||
|
|
e928111c00 | ||
|
|
0665ded648 | ||
|
|
b9a8a62e38 | ||
|
|
74bbaaf643 | ||
|
|
5799ea8160 | ||
|
|
3dc2453deb | ||
|
|
d2b3965bc2 | ||
|
|
e4da571d6b | ||
|
|
5e45480a0e | ||
|
|
90c1e10cc5 | ||
|
|
0255b09e0e | ||
|
|
bd21325d04 | ||
|
|
9bc2a6fa2b | ||
|
|
cb3f0fdcbd | ||
|
|
b8628bb495 | ||
|
|
9c26f79ca6 | ||
|
|
30f9b84d5f | ||
|
|
1318d23401 | ||
|
|
9fb71a30ec | ||
|
|
abd34f1810 | ||
|
|
6a472437bb | ||
|
|
43b97bca75 | ||
|
|
a667bd456c | ||
|
|
c6de7cf784 | ||
|
|
59deaad070 | ||
|
|
7709799bc2 | ||
|
|
d59138363e | ||
|
|
faaf2009b6 | ||
|
|
66c9691c87 | ||
|
|
73d09e7c1c | ||
|
|
3a508e71aa | ||
|
|
a1d7a76349 | ||
|
|
5ea65eda5a | ||
|
|
29347b9b4d | ||
|
|
a06d528d3b | ||
|
|
ac0fd4b3fc | ||
|
|
47783feecb | ||
|
|
fad8955397 | ||
|
|
d0bcf06e5f | ||
|
|
fed03f88c8 | ||
|
|
b6afcc222a | ||
|
|
4bcc33569a | ||
|
|
46a79c6bb5 | ||
|
|
25d45fd9db | ||
|
|
c5795492e1 | ||
|
|
e86d9f9241 | ||
|
|
3db4ea30a3 | ||
|
|
a3acd6bda5 | ||
|
|
12a3b1f83e | ||
|
|
cf2df815e3 | ||
|
|
f03e4fd049 | ||
|
|
75bf674537 | ||
|
|
c3b1b16d11 | ||
|
|
d8b9159125 | ||
|
|
a30617d971 | ||
|
|
c7d824fbf3 | ||
|
|
2335259dd6 | ||
|
|
64686c92cd | ||
|
|
3cbc4e5570 | ||
|
|
d3f49c72e1 | ||
|
|
f460a6573c | ||
|
|
26a0b88937 | ||
|
|
a3ca8a721d | ||
|
|
bdaebe1218 | ||
|
|
f76dbb08cc | ||
|
|
5ac2ece8b4 | ||
|
|
37cd743315 | ||
|
|
c0c772b11b | ||
|
|
ccc78c3516 | ||
|
|
09b7aab886 | ||
|
|
ce3eac9d8a | ||
|
|
a762d00aa8 | ||
|
|
e5b3c12814 | ||
|
|
df73d0263a | ||
|
|
2affb6d1e7 | ||
|
|
4cc6a28e73 | ||
|
|
89881bfd7e | ||
|
|
458e30e2be | ||
|
|
5aaadf4e5a | ||
|
|
c750158286 | ||
|
|
80dee91ab9 | ||
|
|
0cfe5ae0bb | ||
|
|
b6d4ded29a | ||
|
|
6d981e21ff | ||
|
|
38afb8b8eb | ||
|
|
6efb172fb2 | ||
|
|
3332835417 | ||
|
|
ec34b23688 | ||
|
|
e4c43548eb | ||
|
|
fc6306f44a | ||
|
|
520b2450e3 | ||
|
|
c96119a9fd | ||
|
|
5242b3cb03 | ||
|
|
21cb086b87 | ||
|
|
c4d0d38e69 | ||
|
|
eecdd4befc | ||
|
|
804490399f | ||
|
|
47bb1c0b37 | ||
|
|
064bae7b87 | ||
|
|
ebfbb4b56f | ||
|
|
35203da9c3 | ||
|
|
b4dff4dd0c | ||
|
|
68fc171a31 | ||
|
|
fb1c20ed30 | ||
|
|
a31c4f5254 | ||
|
|
570cc16c98 | ||
|
|
d796fcba8f | ||
|
|
ad7a6e60f2 | ||
|
|
7c02075ba6 | ||
|
|
a83165f112 | ||
|
|
8ad90314fd | ||
|
|
e2db20b1f3 | ||
|
|
2e26a7f82d | ||
|
|
313fda32c0 | ||
|
|
28c0bd8592 | ||
|
|
e87d20b08d | ||
|
|
ce32b88010 | ||
|
|
9f82afa485 | ||
|
|
5589aad730 | ||
|
|
5f8b044577 | ||
|
|
924f5af2ed | ||
|
|
a5acd5f322 | ||
|
|
dff4cc6cbf | ||
|
|
4532f98a94 | ||
|
|
c09d41bd40 | ||
|
|
fc26902d1d | ||
|
|
a427bfe1e1 | ||
|
|
5b1b9b011a | ||
|
|
97ea56e777 | ||
|
|
91a40ab079 | ||
|
|
4ea1d9a1f4 | ||
|
|
33dc2f41a9 | ||
|
|
6793d4a3a0 | ||
|
|
4c6bf55c8a | ||
|
|
a977cadfda | ||
|
|
381069afc7 | ||
|
|
3c14af4a28 | ||
|
|
c3476be9e4 | ||
|
|
519cdb642c | ||
|
|
2c1e23fdbd | ||
|
|
7f865d73f0 | ||
|
|
d98db1587b | ||
|
|
34ff3aa99a | ||
|
|
7177a534b9 | ||
|
|
3e7ad705bb | ||
|
|
ac1503d246 | ||
|
|
26732ed42c | ||
|
|
0a3a1e627c | ||
|
|
a4476055ec | ||
|
|
a3afb8dcd8 | ||
|
|
ca900540b4 | ||
|
|
45631aa850 | ||
|
|
d6a4f315fb | ||
|
|
af5f66bc9e | ||
|
|
6e685be02d | ||
|
|
95b029d49d | ||
|
|
20f6565f44 | ||
|
|
d296f770b6 | ||
|
|
bbe79420b1 | ||
|
|
6aa5d71ba7 | ||
|
|
b83cc7fecd | ||
|
|
77728fd425 | ||
|
|
478cf4e9da | ||
|
|
425a92521f | ||
|
|
92d8240384 | ||
|
|
138d991cf2 | ||
|
|
ac13b614d6 | ||
|
|
fd4403ec68 | ||
|
|
ce62d9998e | ||
|
|
aa66814c43 | ||
|
|
14d0388a65 | ||
|
|
c1d0553866 | ||
|
|
6a80f24962 | ||
|
|
ef5bab4ff7 | ||
|
|
ce5d390a38 | ||
|
|
a2315a45ff | ||
|
|
a722a59288 | ||
|
|
90508f7f1b | ||
|
|
dd034cbfa6 | ||
|
|
12d4ab4213 | ||
|
|
bb3d322048 | ||
|
|
2c4b159901 | ||
|
|
9e6a2eb94c | ||
|
|
4e5fd41be7 | ||
|
|
c02da4066c | ||
|
|
10797f049c | ||
|
|
489d05a13f | ||
|
|
a24a497759 | ||
|
|
45af044cd8 | ||
|
|
49aafb263f | ||
|
|
6401cf1da2 | ||
|
|
1f6be26489 | ||
|
|
c623194948 | ||
|
|
a2330fea6a | ||
|
|
acca2baa57 | ||
|
|
e856422674 | ||
|
|
8088f81eff | ||
|
|
c5d5209154 | ||
|
|
ff392ba61d | ||
|
|
3ecd1eaaf1 | ||
|
|
fbf1e957a2 | ||
|
|
a7de887036 | ||
|
|
9314bd23a2 | ||
|
|
685b6c36ac | ||
|
|
d8b60fbc7c | ||
|
|
74446a3c67 | ||
|
|
e0f40c52fe | ||
|
|
28e97cf2d9 | ||
|
|
ef344506b7 | ||
|
|
ce3ef333b7 | ||
|
|
33ea73aac2 | ||
|
|
a6094c26b1 | ||
|
|
8175a273d0 | ||
|
|
7a3e8f7e52 | ||
|
|
9786ba8f24 | ||
|
|
ed014ec73e | ||
|
|
9fb4314964 | ||
|
|
2157644ab1 | ||
|
|
598066bfe4 | ||
|
|
b6c08ef38e | ||
|
|
f4b242328d | ||
|
|
84af91da9e | ||
|
|
3ce3447b65 | ||
|
|
e91b5434fa | ||
|
|
3e32a5b36c | ||
|
|
3226cda0ea | ||
|
|
280646e231 | ||
|
|
52b23717e3 | ||
|
|
c450d0a6ba | ||
|
|
3405fbb0eb | ||
|
|
55b737c51c | ||
|
|
860a978676 | ||
|
|
d677f1e5e4 | ||
|
|
6b84edb4fd | ||
|
|
1fbacdea37 | ||
|
|
d3859ff200 | ||
|
|
6091a16074 | ||
|
|
b3dd0590cd | ||
|
|
f6e17542f3 | ||
|
|
bf4f5480be | ||
|
|
22f2c28a27 | ||
|
|
c57d58d49b | ||
|
|
75899a01a0 | ||
|
|
015b28c7d1 | ||
|
|
b7c8d63505 | ||
|
|
1809c752ae | ||
|
|
ce2dc2a042 | ||
|
|
8292575663 | ||
|
|
0d6ae64b24 | ||
|
|
bb6f8e2ddd | ||
|
|
d1cdea47c7 | ||
|
|
093ac9f37d | ||
|
|
f8b8da47a3 | ||
|
|
14d3c68145 | ||
|
|
02af851705 | ||
|
|
ba0b44f12e | ||
|
|
4b0110b33b | ||
|
|
4b26a579f2 | ||
|
|
311712bf92 | ||
|
|
9a5bff7a35 | ||
|
|
7b72d11c97 | ||
|
|
85625a37b2 | ||
|
|
e88f9a1f75 | ||
|
|
b3dfd3b4b0 | ||
|
|
5e08608c56 | ||
|
|
8fbde8073d | ||
|
|
bb79fbfc07 | ||
|
|
1967ec9526 | ||
|
|
012cb5e62d | ||
|
|
e634a77860 | ||
|
|
1d9779d80e | ||
|
|
65615e2bcf | ||
|
|
27cac898b0 | ||
|
|
f627dfc2cd | ||
|
|
11d6b19cde | ||
|
|
032b6c6300 | ||
|
|
e1a821f3c9 | ||
|
|
aca9d27808 | ||
|
|
3eb14e411d | ||
|
|
9dff3873ca | ||
|
|
ec4973bd74 | ||
|
|
6b54f62ad7 | ||
|
|
f65f486c5d | ||
|
|
8509f377df | ||
|
|
36889aafc1 | ||
|
|
1f1ae20812 | ||
|
|
6934bbf802 | ||
|
|
e39fafc64f | ||
|
|
58c609674d | ||
|
|
2471511668 | ||
|
|
9e0eb9f1a4 | ||
|
|
18ac1aae7e | ||
|
|
a199464b4b | ||
|
|
7c46002ce0 | ||
|
|
5160ecd9ff | ||
|
|
08d00ffedc | ||
|
|
efb0dd607b | ||
|
|
0d16514899 | ||
|
|
041c7600b7 | ||
|
|
47c6305f77 | ||
|
|
f0025e817b | ||
|
|
45d716d652 | ||
|
|
220f1e6d1f | ||
|
|
1eb8ac2e19 | ||
|
|
13e496ff2f | ||
|
|
0b685dbc86 | ||
|
|
7d37ec60b9 | ||
|
|
27a37f65ea | ||
|
|
3d62c5d452 | ||
|
|
8f67c22a4a | ||
|
|
fc310dc440 | ||
|
|
43ab975ec1 | ||
|
|
03190ff0fd | ||
|
|
894d792e23 | ||
|
|
fc65a01a60 | ||
|
|
54802fdd4b | ||
|
|
23dbabacc6 | ||
|
|
bc1e8c25ce | ||
|
|
90b21fd977 | ||
|
|
a18ef1ad3a | ||
|
|
116a031c6d | ||
|
|
6ac3fae951 | ||
|
|
29e384af98 | ||
|
|
219b8909ed | ||
|
|
a04fe26014 | ||
|
|
236e67e46b | ||
|
|
8305572613 | ||
|
|
9ced0a9225 | ||
|
|
51031cc1fe | ||
|
|
e2ddc03dfe | ||
|
|
253bf9c077 | ||
|
|
d9d3bc2b6c | ||
|
|
633662037a | ||
|
|
ce65818060 | ||
|
|
815924b9ac | ||
|
|
b64b856dfd | ||
|
|
1b9ce719f8 | ||
|
|
f8cc8a38c7 | ||
|
|
8126fbc4a3 | ||
|
|
66487422ab | ||
|
|
39d7ce6a50 | ||
|
|
5db2c3af8c | ||
|
|
e0a78f753d | ||
|
|
f3c3a9cd44 | ||
|
|
ae248d6d32 | ||
|
|
7f04d34179 | ||
|
|
77fd471915 | ||
|
|
67a0f031a7 | ||
|
|
50f4bb5e5a | ||
|
|
17ad77f07a | ||
|
|
6f55f0e0c0 | ||
|
|
567ad09506 | ||
|
|
b8bfd1dddc | ||
|
|
cc26827c57 | ||
|
|
698ababc6d | ||
|
|
12dd340912 | ||
|
|
44c839c116 | ||
|
|
d424b1f2b4 | ||
|
|
ff2188ba45 | ||
|
|
1c42cdc928 | ||
|
|
3e1a0ff5a3 | ||
|
|
59e303c882 | ||
|
|
f8e04f5f0f | ||
|
|
1cc41bb4cd | ||
|
|
990f89b94f | ||
|
|
648c0fce92 | ||
|
|
014ae33f0b | ||
|
|
d8d7c37cf1 | ||
|
|
471f9d3e2e | ||
|
|
3117dd0885 | ||
|
|
034a8858c5 | ||
|
|
309d25e047 | ||
|
|
accdcf1bea | ||
|
|
3336817c9a | ||
|
|
e570ae2b3f | ||
|
|
b30992bf28 | ||
|
|
6ff4919d75 | ||
|
|
210f7c4993 | ||
|
|
d1f90e134f | ||
|
|
20ae2d3662 | ||
|
|
d2a9fb7c3c | ||
|
|
c91e1dcdd9 | ||
|
|
b2ea4212fd | ||
|
|
49036313d0 | ||
|
|
8142fade24 | ||
|
|
02db89f7fc | ||
|
|
7b454ce5f4 | ||
|
|
366adce39e | ||
|
|
3546788c44 | ||
|
|
427e9d0209 | ||
|
|
8d8199a6b3 | ||
|
|
c3e352d252 | ||
|
|
510528ed7b | ||
|
|
db19bcd712 | ||
|
|
914cf1b3ff | ||
|
|
7085106b45 | ||
|
|
a2867e151d | ||
|
|
560ff5ab33 | ||
|
|
38732a8fb4 | ||
|
|
2652e92461 | ||
|
|
f1965b4650 | ||
|
|
2a9b7c8115 | ||
|
|
1bfd0fbd1f | ||
|
|
ac9f5bed50 | ||
|
|
c2215cbe11 | ||
|
|
241b977904 | ||
|
|
ae94ce1252 | ||
|
|
48f0084a9f | ||
|
|
b1d5e83adc | ||
|
|
3d171c222b | ||
|
|
fe240190b3 | ||
|
|
82b56e3de7 | ||
|
|
9d229e2a0c | ||
|
|
89e74e6268 | ||
|
|
47f391a3a6 | ||
|
|
80ac9b3f0d | ||
|
|
bd3cc94212 | ||
|
|
7d96b27f28 | ||
|
|
a8cbf4f52f | ||
|
|
f1948dc3a6 | ||
|
|
75bebb0a4b | ||
|
|
9afc7285b5 | ||
|
|
1586812112 | ||
|
|
cbfb8afa0c | ||
|
|
9dafb5cb7f | ||
|
|
4df90b1b96 | ||
|
|
f1da4a3b2f | ||
|
|
39c968ff2a | ||
|
|
b0c3856ab4 | ||
|
|
9d3956c168 | ||
|
|
d0397bc23a | ||
|
|
7eb83f1a60 | ||
|
|
b4ee1f0fb8 | ||
|
|
ac802b1aa8 | ||
|
|
51e38ade01 | ||
|
|
b213d3f37c | ||
|
|
b0ba64f178 | ||
|
|
69512cbf70 | ||
|
|
b7a3de0f10 | ||
|
|
540f785e90 | ||
|
|
01d9655781 | ||
|
|
224d75e0e8 | ||
|
|
b68dacec62 | ||
|
|
f45e61d651 | ||
|
|
c734e6f929 | ||
|
|
0539e3faeb | ||
|
|
43021f9a15 | ||
|
|
e81e294479 | ||
|
|
378f0af781 | ||
|
|
8eba52ec30 | ||
|
|
777725c083 | ||
|
|
5b7cdf786b | ||
|
|
330f6d6014 | ||
|
|
7a69aef99b | ||
|
|
9e5bbc7598 | ||
|
|
986b21e02b | ||
|
|
2a8fdc486b | ||
|
|
fa6a516543 | ||
|
|
d627c91a4a | ||
|
|
1368f83d77 | ||
|
|
ab7e281c1c | ||
|
|
fc3e95e16a | ||
|
|
a61703da50 | ||
|
|
da13a0b3fe | ||
|
|
8b9f128881 | ||
|
|
43bd3774e8 | ||
|
|
b138405740 | ||
|
|
c45e743d87 | ||
|
|
5cfa0668b9 | ||
|
|
69f03e0e24 | ||
|
|
4d4dc7aaee | ||
|
|
2e199593e9 | ||
|
|
8565a3ddee | ||
|
|
24fc6bd749 | ||
|
|
90a0e5fac7 | ||
|
|
a3ca22e6a1 | ||
|
|
fc3116e596 | ||
|
|
19a69f4139 | ||
|
|
bdfd2a3290 | ||
|
|
d7e467a37f | ||
|
|
7dcdef28c8 | ||
|
|
300abac9a8 | ||
|
|
b3b9ebb3b7 | ||
|
|
d5ef41bb80 | ||
|
|
f802547e7b | ||
|
|
a7cdbb3844 | ||
|
|
b171906162 | ||
|
|
98eab49e99 | ||
|
|
e53e903b5e | ||
|
|
8a36717842 | ||
|
|
d612b8b8de | ||
|
|
2c952a54d2 | ||
|
|
7e96e0efa5 | ||
|
|
c4384f2a47 | ||
|
|
98b2c20d54 | ||
|
|
ac8158ba9c | ||
|
|
d45d2bf7fc | ||
|
|
175ebb61de | ||
|
|
8c642ac923 | ||
|
|
8248509377 | ||
|
|
77dbb4becf | ||
|
|
8c874181c0 | ||
|
|
c84932df46 | ||
|
|
1342adefe4 | ||
|
|
cc21027db2 | ||
|
|
bf630245d0 | ||
|
|
062ecf69f0 | ||
|
|
bb5d93ddf6 | ||
|
|
e565120d29 | ||
|
|
e0cffcfb3a | ||
|
|
f115d2cbd9 | ||
|
|
ae826f2fd0 | ||
|
|
a675825224 | ||
|
|
6d00a7fb23 | ||
|
|
4a74103e70 | ||
|
|
4fcf0d01a2 | ||
|
|
67def7465c | ||
|
|
8fa92a0789 | ||
|
|
406350f5f5 | ||
|
|
11bdaaa2fc | ||
|
|
c23bbbd32a | ||
|
|
a6df80f87e | ||
|
|
f2c99f22a8 | ||
|
|
511c266178 | ||
|
|
c6fe58e635 | ||
|
|
641c917605 | ||
|
|
ea7f86b32a | ||
|
|
4b2781404a | ||
|
|
d86f59cf17 | ||
|
|
3a1dd871ff | ||
|
|
c4ecf3ebcd | ||
|
|
428355761e | ||
|
|
a18211cc57 | ||
|
|
9caa009eb3 | ||
|
|
38818f7d88 | ||
|
|
20e4d18cb4 | ||
|
|
62b6e7175f | ||
|
|
cffac6c255 | ||
|
|
66a1496f18 | ||
|
|
7f90c69eb0 | ||
|
|
1b26908104 | ||
|
|
c1149da754 | ||
|
|
bb1ae9cf2e | ||
|
|
8cbdb0a236 | ||
|
|
6c729ff60f | ||
|
|
9281f8ed5c | ||
|
|
d6cac9cb27 | ||
|
|
0743bc49b3 | ||
|
|
1e3b6cae47 | ||
|
|
5f1b3ba939 | ||
|
|
8bf07f490e | ||
|
|
b45b24b922 | ||
|
|
d554a18e8a | ||
|
|
14f65a5728 | ||
|
|
67b5803e63 | ||
|
|
2054cb566d | ||
|
|
d3f30f3dc8 | ||
|
|
6e66c6ff5e | ||
|
|
52a7412918 | ||
|
|
b88107664a | ||
|
|
83150696bf | ||
|
|
15f7ba8b12 | ||
|
|
fed58b3dc1 | ||
|
|
448e019702 | ||
|
|
c7b6d18832 | ||
|
|
243ce886e1 | ||
|
|
31b752feed | ||
|
|
dd91984b70 | ||
|
|
bd9b41e544 | ||
|
|
26e0cc545e | ||
|
|
27128373e2 | ||
|
|
d778d470b1 | ||
|
|
c35fd68c99 | ||
|
|
37a702416f | ||
|
|
5a12e77b19 | ||
|
|
2f3017fdfc | ||
|
|
e8bf3c35dc | ||
|
|
fb2b0aa8e1 | ||
|
|
ffeaa033bc | ||
|
|
e10b05654b | ||
|
|
c6e315ff2a | ||
|
|
68709e91f9 | ||
|
|
47af83e194 | ||
|
|
91e8fade99 | ||
|
|
c38e011924 | ||
|
|
e84a9b5327 | ||
|
|
5ebd95b72a | ||
|
|
e7d10a8582 | ||
|
|
8a272c07b7 | ||
|
|
445c8eade1 | ||
|
|
da0f93e8b5 | ||
|
|
29c77edd37 | ||
|
|
dae9cd2c3a | ||
|
|
d8de91255f | ||
|
|
ee9e1fbd2a | ||
|
|
d03701c58d | ||
|
|
806ababa05 | ||
|
|
800c439431 | ||
|
|
cfd62f2b0f | ||
|
|
d834b18a16 | ||
|
|
698ae9debc | ||
|
|
3da13705af | ||
|
|
5bcc105cd9 | ||
|
|
4aac04280c | ||
|
|
2e64a82caa | ||
|
|
6157668057 | ||
|
|
4bae567c4c | ||
|
|
1e9e790c71 | ||
|
|
4bc14630e9 | ||
|
|
b398dcdcf9 | ||
|
|
bdad1df3d7 | ||
|
|
af3dc18841 | ||
|
|
66109be668 | ||
|
|
6140849e28 | ||
|
|
bd689ee6d7 | ||
|
|
5c26a864f0 | ||
|
|
3edaa65d1d | ||
|
|
38f8fcc3f3 | ||
|
|
de2c58739b | ||
|
|
c071da54ca | ||
|
|
6eac59cea4 | ||
|
|
36a9991d59 | ||
|
|
a5f1372537 | ||
|
|
894380a5d4 | ||
|
|
f95bd77366 | ||
|
|
f1a85915f9 | ||
|
|
1ef8af75ae | ||
|
|
edab781d44 | ||
|
|
1e4f8fdd5b | ||
|
|
c8c632cddd | ||
|
|
f167877a00 | ||
|
|
03a5b11d09 | ||
|
|
1089a29af0 | ||
|
|
e8c9f149a1 | ||
|
|
a1cffba1bf | ||
|
|
848e96f64b | ||
|
|
9be9e34be1 | ||
|
|
fc18e404ce | ||
|
|
398afc721e | ||
|
|
3b61a47ec2 | ||
|
|
6548dea9c4 | ||
|
|
6f7f6d3fe7 | ||
|
|
792a14cf3b | ||
|
|
9d9c6aa5c8 | ||
|
|
d3993bf9df | ||
|
|
b98081771c | ||
|
|
deffa35975 | ||
|
|
bf7f043e4f | ||
|
|
24c6bb2f5f | ||
|
|
9b79a2263a | ||
|
|
0b05f93eee | ||
|
|
4cdee33ae4 | ||
|
|
0027936b1d | ||
|
|
28f7e09558 | ||
|
|
dab4a95dc5 | ||
|
|
c42a5ef9f5 | ||
|
|
ebf5dbedb6 | ||
|
|
5bda1dc79f | ||
|
|
aec411e721 | ||
|
|
34957180be | ||
|
|
aae377a555 | ||
|
|
1ba692a0ea | ||
|
|
c392e2c6ca | ||
|
|
ebcc0deac1 | ||
|
|
643c81e9db | ||
|
|
d3747a2465 | ||
|
|
09bdffab54 | ||
|
|
656d3a40c8 | ||
|
|
749c4d0f37 | ||
|
|
b258f9a683 | ||
|
|
733d7fb0e5 | ||
|
|
a87bd8197c | ||
|
|
3e75452ec8 | ||
|
|
d94a496808 | ||
|
|
773a59cf2e | ||
|
|
4ef2917cf4 | ||
|
|
102dccee72 | ||
|
|
8c2ff38d8d | ||
|
|
8f7e4963de | ||
|
|
10e6e8c91f | ||
|
|
d2be38c992 | ||
|
|
3a62cc8379 | ||
|
|
bbe97538d8 | ||
|
|
05637ba93d | ||
|
|
f825e476b9 | ||
|
|
32d9211e7d | ||
|
|
9f09c7b503 | ||
|
|
b12c27c21e | ||
|
|
0f0f3885aa | ||
|
|
7c1d096d46 | ||
|
|
27342c71ac | ||
|
|
a410c3b350 | ||
|
|
71b27d37a4 | ||
|
|
67dadcbefb | ||
|
|
43de81819b | ||
|
|
d1be4288d3 | ||
|
|
9065cac1fd | ||
|
|
b834cd108d | ||
|
|
97eace697a | ||
|
|
a9406804db | ||
|
|
93f1a18b52 | ||
|
|
b824dbb9db | ||
|
|
2219c7529d | ||
|
|
5ff7bfc168 | ||
|
|
31656bda27 | ||
|
|
ab0dfb0f6a | ||
|
|
3b9aa16ce6 | ||
|
|
d5b682e8b3 | ||
|
|
91adb32c5b | ||
|
|
384fdb2376 | ||
|
|
a44460b48e | ||
|
|
c3dccb071e | ||
|
|
840bf4189a | ||
|
|
aeca035fa3 | ||
|
|
091c4e46f5 | ||
|
|
61c3fc7975 | ||
|
|
fd0ad07a96 | ||
|
|
bb34aba76e | ||
|
|
2225ca0ec4 | ||
|
|
2805476fb8 | ||
|
|
564d817b1c | ||
|
|
8b9a5b460f | ||
|
|
b0d2954a56 | ||
|
|
2ce0163eca | ||
|
|
073203d3b5 | ||
|
|
e2ec7c818e | ||
|
|
b5638eee12 | ||
|
|
61802ed664 | ||
|
|
69f8f644e6 | ||
|
|
fdd04a1511 | ||
|
|
068761872e | ||
|
|
b4d15b9545 | ||
|
|
366fda30f5 | ||
|
|
5dc31a81a0 | ||
|
|
e2126b9d29 | ||
|
|
a2fb9a00fe | ||
|
|
e7240ecca0 | ||
|
|
99c1aa0c26 | ||
|
|
44268596b3 | ||
|
|
64a0d2c061 | ||
|
|
215ae6118a | ||
|
|
f4ff81bd45 | ||
|
|
e42cefdf09 | ||
|
|
4d8466cd60 | ||
|
|
c87efc5d67 | ||
|
|
a970cd9a23 | ||
|
|
94d7703e9e | ||
|
|
2ec4183789 | ||
|
|
a36162a971 | ||
|
|
ef48039a1b | ||
|
|
c366de98e7 | ||
|
|
6fdcca3ca1 | ||
|
|
9c7aad8259 | ||
|
|
a4a457ad5c | ||
|
|
6d0c990834 | ||
|
|
5948da2372 | ||
|
|
dec9081be2 | ||
|
|
ac1c823ca1 | ||
|
|
05d707b8d4 | ||
|
|
b8ca869b19 | ||
|
|
79527ef39a | ||
|
|
3717c752c4 | ||
|
|
7d9279abad | ||
|
|
0709b0768f | ||
|
|
dac57f5a13 | ||
|
|
ea19efd490 | ||
|
|
ad9b1fb61a | ||
|
|
3d93134e86 | ||
|
|
545cb4c9e1 | ||
|
|
1772f5036e | ||
|
|
0856701f90 | ||
|
|
7e501b3a98 | ||
|
|
eca69360e1 | ||
|
|
1b4598576d | ||
|
|
91b7c649c9 | ||
|
|
474b33fef4 | ||
|
|
52eda68a4e | ||
|
|
e2a0032657 | ||
|
|
535e0f177d | ||
|
|
5295132f37 | ||
|
|
da6067d708 | ||
|
|
30869378a4 | ||
|
|
026740eb9a | ||
|
|
88bd7433e2 | ||
|
|
209b62bccc | ||
|
|
4090d556aa | ||
|
|
e99192895b | ||
|
|
a8781ba96b | ||
|
|
8c1a9cd0c7 | ||
|
|
032e3c82d5 | ||
|
|
fa35a490e1 | ||
|
|
f127ae9e41 | ||
|
|
afab4a9447 | ||
|
|
486ecedc12 | ||
|
|
cb8ea601cf | ||
|
|
005212b463 | ||
|
|
d37068b65d | ||
|
|
9699cd60ac | ||
|
|
44aaf3a131 | ||
|
|
260044df0c | ||
|
|
88493da3ab | ||
|
|
0c22a29130 | ||
|
|
06c4d8a66e | ||
|
|
e9b3507526 | ||
|
|
949991f608 | ||
|
|
b9402d8e94 | ||
|
|
a5da1adf09 | ||
|
|
1c10a37ec5 | ||
|
|
222a27ed9e | ||
|
|
ccfb6c9f16 | ||
|
|
8aeab21ba3 | ||
|
|
4156b193b2 | ||
|
|
f8fd3138ef | ||
|
|
b03edcb869 | ||
|
|
d7c3fd1fb1 | ||
|
|
f93baffae6 | ||
|
|
6928c50f48 | ||
|
|
9284ec7360 | ||
|
|
53ff1a628b | ||
|
|
813fcec591 | ||
|
|
a367c0023f | ||
|
|
e33dc2290b | ||
|
|
d9ed4df0bf | ||
|
|
f6259a3139 | ||
|
|
fff639ddd5 | ||
|
|
3ed0bb6918 | ||
|
|
c88eb992f5 | ||
|
|
78c91eb7bf | ||
|
|
e964a874bc | ||
|
|
e300b48f5b | ||
|
|
ef9170ac9a | ||
|
|
27c798fb22 | ||
|
|
e2f08351a0 | ||
|
|
68b8024c84 | ||
|
|
7a2ae83cd0 | ||
|
|
7eaae7cf7d | ||
|
|
494769177f | ||
|
|
0289f0b2d4 | ||
|
|
ce1cdf62aa | ||
|
|
b62c7fb432 | ||
|
|
db8932749e | ||
|
|
5bfa134414 | ||
|
|
82a23344f8 | ||
|
|
80b5072754 | ||
|
|
5df9dcdf9c | ||
|
|
d1a638e6f0 | ||
|
|
d7ffb9e13f | ||
|
|
d1673b3304 | ||
|
|
e3348ea3e6 | ||
|
|
066d48e22f | ||
|
|
796fadd3bc | ||
|
|
0227864ae3 | ||
|
|
15c3d8591c | ||
|
|
72507ea108 | ||
|
|
89c11b5eeb | ||
|
|
ec8921381f | ||
|
|
5e9a180c79 | ||
|
|
49b6ba0303 | ||
|
|
7e0c9cf3e3 | ||
|
|
90d92ddbd5 | ||
|
|
ff404bfd99 | ||
|
|
0934020873 | ||
|
|
a3ded7574c | ||
|
|
410423fdc1 | ||
|
|
51f162bd37 | ||
|
|
9360466b6f | ||
|
|
9e98983c75 | ||
|
|
6aa6f6e456 | ||
|
|
3ab8f00af9 | ||
|
|
f1f1ea37a2 | ||
|
|
90744b58dd | ||
|
|
edb6a8aed0 | ||
|
|
357b236fae | ||
|
|
4cd754530e | ||
|
|
0139b47d85 | ||
|
|
339c146c67 | ||
|
|
940e14c07a | ||
|
|
b3379e8ef3 | ||
|
|
86010b3e8e | ||
|
|
ae7caf002b | ||
|
|
bba59be497 | ||
|
|
b84de85891 | ||
|
|
ea9369f799 | ||
|
|
a0adf9f47d | ||
|
|
481cc6f1bf | ||
|
|
d637d0f850 | ||
|
|
7d1106171c | ||
|
|
3147da5c73 | ||
|
|
a4a3a7b970 | ||
|
|
34ce3b928b | ||
|
|
7c1cb2e4e0 | ||
|
|
d2d342ade7 | ||
|
|
16bc33c18a | ||
|
|
cc5aaadf08 | ||
|
|
a7d7a35b93 | ||
|
|
d9b88ae1b9 | ||
|
|
8bf11c6270 | ||
|
|
dde3e454e7 | ||
|
|
314319c36a | ||
|
|
c48206dade | ||
|
|
5c9951af47 | ||
|
|
bd5473663b | ||
|
|
3cf1f58f30 | ||
|
|
f9c17c75c5 | ||
|
|
2fd4cfb2a8 | ||
|
|
59d1c07075 | ||
|
|
a87803ff26 | ||
|
|
281d3d8c62 | ||
|
|
aac70462c5 | ||
|
|
35b6fd8c28 | ||
|
|
853f12e9c1 | ||
|
|
e4eaef00ca | ||
|
|
1d2a57b8e0 | ||
|
|
e0fa66a82a | ||
|
|
a862af2c80 | ||
|
|
ffe99f0310 | ||
|
|
1d766d4a10 | ||
|
|
a7e76b5869 | ||
|
|
1526cbec6c | ||
|
|
9df2289bf4 | ||
|
|
feefc79757 | ||
|
|
75f895799c | ||
|
|
67f7c40fa5 | ||
|
|
803d1681c4 | ||
|
|
9c19195625 | ||
|
|
eb5c9d91d3 | ||
|
|
1c32d819eb | ||
|
|
f95cfc9aeb | ||
|
|
aa4f58694b | ||
|
|
e924257ddd | ||
|
|
ec59cc59b0 | ||
|
|
281b02b049 | ||
|
|
a9ddbf1b95 | ||
|
|
d15ce7d7ab | ||
|
|
651adb61d6 | ||
|
|
bb488b2a55 | ||
|
|
aa4483183c | ||
|
|
b06ce22abb | ||
|
|
3c08177b58 | ||
|
|
0760e13808 | ||
|
|
94ccb0a3ba | ||
|
|
6e9fd99e0e | ||
|
|
a0c975f186 | ||
|
|
56d26fa3cf | ||
|
|
7a6f86966f | ||
|
|
d995593e76 | ||
|
|
433ac0b8ce | ||
|
|
6c30e92b21 | ||
|
|
52423a325e | ||
|
|
523b01054a | ||
|
|
baa6c1a2e4 | ||
|
|
841b85a589 | ||
|
|
8d14059d2e | ||
|
|
cdcbf5209c | ||
|
|
86784b983c | ||
|
|
3806a8ae04 | ||
|
|
edbcc38518 | ||
|
|
58f9943151 | ||
|
|
be6e890402 | ||
|
|
de17f6b7cb | ||
|
|
cb41353622 | ||
|
|
e8264ae616 | ||
|
|
4723c64666 | ||
|
|
f6e42f0c6d | ||
|
|
47a81009c8 | ||
|
|
a460e01718 | ||
|
|
5f79126313 | ||
|
|
8b0b5bc526 | ||
|
|
fae1e8e9eb | ||
|
|
56753a5821 | ||
|
|
beac78dcb6 | ||
|
|
680821f164 | ||
|
|
13ba7b19ea | ||
|
|
84077e9dc2 | ||
|
|
1f3bcaf52a | ||
|
|
056485fabf | ||
|
|
b43f31ebfb | ||
|
|
1975c63b71 | ||
|
|
c4917d30b0 | ||
|
|
540eaa5366 | ||
|
|
11bb1dcedb | ||
|
|
b3ad41a572 | ||
|
|
d9671e50ad | ||
|
|
40e1d7f0bc | ||
|
|
080e40c4d4 | ||
|
|
af830e5b21 | ||
|
|
acff88590c | ||
|
|
4aa92c6272 | ||
|
|
de7d0a4c76 | ||
|
|
75d77ea608 | ||
|
|
d19df6d931 | ||
|
|
6a8b5ecfa9 | ||
|
|
e27c7e8d64 | ||
|
|
cee3be9113 | ||
|
|
0b78dd3d86 | ||
|
|
e22267fbeb | ||
|
|
c8bafd10aa | ||
|
|
e086085375 | ||
|
|
efd26d4e49 | ||
|
|
3debbc36dd | ||
|
|
b0bb6e7b1b | ||
|
|
019b049d06 | ||
|
|
1b0d915a63 | ||
|
|
2c3e102772 | ||
|
|
502f23e102 | ||
|
|
cd5b8e08c7 | ||
|
|
8650ec51ae | ||
|
|
b93e6be0b0 | ||
|
|
211497193d | ||
|
|
794f6a81e9 | ||
|
|
df379e680f | ||
|
|
1bdc8dfa7a | ||
|
|
a6c3bdd4f1 | ||
|
|
19e5626d50 | ||
|
|
9f98e8767c | ||
|
|
d5590ed427 | ||
|
|
50ec1095c1 | ||
|
|
9b1ea375b8 | ||
|
|
d9866e3bd4 | ||
|
|
8a77fe5525 | ||
|
|
a51febd0f7 | ||
|
|
acc85f8891 | ||
|
|
d8f3baf8e8 | ||
|
|
4f870489ad | ||
|
|
d78b8d5d40 | ||
|
|
89fd45f1ac | ||
|
|
66a53cde3d | ||
|
|
e4fb4f53ae | ||
|
|
1630d50e72 | ||
|
|
0231a27861 | ||
|
|
1eb2a68a16 | ||
|
|
e9d7b6b103 | ||
|
|
1e53aae676 | ||
|
|
da8469f478 | ||
|
|
fc97d6130b | ||
|
|
889110961a | ||
|
|
02d3b27073 | ||
|
|
88929f9e4c | ||
|
|
93573a93ca | ||
|
|
08304c5474 | ||
|
|
c60539cb62 | ||
|
|
6aa6e5a972 | ||
|
|
30acbb10f7 | ||
|
|
b87bf14fd5 | ||
|
|
1bbfded78a | ||
|
|
ff2957ec80 | ||
|
|
e11046d076 | ||
|
|
da80b12fda | ||
|
|
2b23841ec2 | ||
|
|
4f951c13c6 | ||
|
|
a7c400bc65 | ||
|
|
a3066db16c | ||
|
|
200b8e3a24 | ||
|
|
b12cd438cd | ||
|
|
f38b7485f7 | ||
|
|
1ca946f3eb | ||
|
|
6c4d901cb9 | ||
|
|
30ab1bfadd | ||
|
|
ad6e83885e | ||
|
|
7ae3ee5e72 | ||
|
|
95d9998398 | ||
|
|
9c2d30bbbd | ||
|
|
b6d5c64c5b | ||
|
|
89645dff38 | ||
|
|
d52ad02c5c | ||
|
|
ba57bad361 | ||
|
|
d3c81d3306 | ||
|
|
f39409b7aa | ||
|
|
f229c93fd4 | ||
|
|
fb963f4ab2 | ||
|
|
06ca1448d1 | ||
|
|
aa2c557045 | ||
|
|
42542b6b67 | ||
|
|
31e72737c5 | ||
|
|
2c9e96c854 | ||
|
|
2f80548303 | ||
|
|
fe87c25c16 | ||
|
|
bdf6b763ba | ||
|
|
cafca16c81 | ||
|
|
90a828e7a9 | ||
|
|
23d9a26ced | ||
|
|
116cbb1707 | ||
|
|
7b2534a3a5 | ||
|
|
1087ef12eb | ||
|
|
568da43bb6 | ||
|
|
6243a66b0b | ||
|
|
7d3c02c0c5 | ||
|
|
f54d118399 | ||
|
|
4c33eb057f | ||
|
|
42627120e3 | ||
|
|
53f589fa37 | ||
|
|
ddcc4a8119 | ||
|
|
89983dcdd1 | ||
|
|
cf4fd16b09 | ||
|
|
9215ae0514 | ||
|
|
94684a0a78 | ||
|
|
1c62c26cac | ||
|
|
2316ec4add | ||
|
|
824231f6f3 | ||
|
|
a1e1dffe81 | ||
|
|
d89eb06cb1 | ||
|
|
6378f65ed1 | ||
|
|
525fff5d0f | ||
|
|
b68692baa2 | ||
|
|
5532e2e290 | ||
|
|
5586206f46 | ||
|
|
6e93a25930 | ||
|
|
1150e04983 | ||
|
|
04846c8ba1 | ||
|
|
3c35965ca9 | ||
|
|
1405ecfd53 | ||
|
|
87c3de9316 | ||
|
|
efdf3d42be | ||
|
|
3bc169e4f6 | ||
|
|
dfde4880c9 | ||
|
|
80f033d76e | ||
|
|
82fae96dcf | ||
|
|
e52adedf2d | ||
|
|
98248e87d2 | ||
|
|
fb7193a31f | ||
|
|
6dadd3cef6 | ||
|
|
025ecf98b5 | ||
|
|
a1d17a1d49 | ||
|
|
49afa5620f | ||
|
|
a89bdba58f | ||
|
|
5c41810a4a | ||
|
|
04410b6611 | ||
|
|
beec2c76c9 | ||
|
|
e508f3f4fa | ||
|
|
ac0f6f1043 | ||
|
|
61e7664657 | ||
|
|
2dd17eba30 | ||
|
|
2fe78ddd98 | ||
|
|
7d63846c49 | ||
|
|
7300f4facd | ||
|
|
dba3e4d42c | ||
|
|
c1680e9936 | ||
|
|
ac73ccb45a | ||
|
|
2ad7e505fc | ||
|
|
300dcd14bf | ||
|
|
ca13118b25 | ||
|
|
8b90c249fb | ||
|
|
2319f0c4c2 | ||
|
|
09c413f7c8 | ||
|
|
d4cb016541 | ||
|
|
f60e2ca75f | ||
|
|
c6aee96049 | ||
|
|
b95789a5b5 | ||
|
|
a8e8dd77e3 | ||
|
|
5c318e5bb7 | ||
|
|
d2b4ff1c56 | ||
|
|
f4220dffb7 | ||
|
|
548988cbef | ||
|
|
cfd35e797c | ||
|
|
85da26f809 | ||
|
|
9304b94865 | ||
|
|
e472bd0620 | ||
|
|
80ed45b161 | ||
|
|
4134de5daf | ||
|
|
f5baa2e13b | ||
|
|
1385a39379 | ||
|
|
f29c6a66d9 | ||
|
|
785a19de53 | ||
|
|
0024062e9a | ||
|
|
e18b3c6b30 | ||
|
|
ff40af1e0d | ||
|
|
c67920353e | ||
|
|
00e9fcc535 | ||
|
|
e47a4ec98e | ||
|
|
740fdd7aa0 | ||
|
|
7c0364ffa3 | ||
|
|
f856480077 | ||
|
|
6a944b311a | ||
|
|
ced8924ab0 | ||
|
|
d2706e5f90 | ||
|
|
9506bcb2bb | ||
|
|
cc376b71c8 | ||
|
|
350863e3b8 | ||
|
|
78a47be4ae | ||
|
|
bfb3052255 | ||
|
|
2dfde7e8cd | ||
|
|
a13a528117 | ||
|
|
0eda5279b2 | ||
|
|
e4fa1013f5 | ||
|
|
249aa81423 | ||
|
|
c623e0416e | ||
|
|
5f538260a2 | ||
|
|
479dbe979d | ||
|
|
3636f1e40b | ||
|
|
af049e234f | ||
|
|
9d3c96a43c | ||
|
|
c1d3e91c32 | ||
|
|
ce3c30f443 | ||
|
|
567a91323a | ||
|
|
ba9d89ff87 | ||
|
|
bbb0410ad6 | ||
|
|
83e304b80e | ||
|
|
2ec52b68ba | ||
|
|
9436b55556 | ||
|
|
adc62c3da8 | ||
|
|
cee841f3ba | ||
|
|
e1ce61778c | ||
|
|
3839a4857d | ||
|
|
a0c529ed59 | ||
|
|
e5c76f1a3a | ||
|
|
bc66bfb442 | ||
|
|
ca054abbcf | ||
|
|
4b6f62ade8 | ||
|
|
0178b77ce1 | ||
|
|
c3ddc32cef | ||
|
|
6c279ea830 | ||
|
|
994016738e | ||
|
|
b79cf82d96 | ||
|
|
ccec0828f9 | ||
|
|
16938483a1 | ||
|
|
de2b60b0bd | ||
|
|
a489cd5458 | ||
|
|
5d101b8207 | ||
|
|
33e9d8e0e1 | ||
|
|
f5bbd49e78 | ||
|
|
477fabd381 | ||
|
|
aa665a67bc | ||
|
|
5b1fa93460 | ||
|
|
f6fd4e9d6c | ||
|
|
c54a268e19 | ||
|
|
46095ce609 | ||
|
|
bdfcef8dc1 | ||
|
|
28947ac0dd | ||
|
|
c28c15a7fb | ||
|
|
3ab12a45b8 | ||
|
|
dbbb7126ad | ||
|
|
93fc20de36 | ||
|
|
869e9cb0fc | ||
|
|
252e067271 | ||
|
|
730f83a97f | ||
|
|
965048ad9c | ||
|
|
1a68abc8a0 | ||
|
|
acf12dfd5e | ||
|
|
c9db576d32 | ||
|
|
67fbdceb92 | ||
|
|
db50b1f568 | ||
|
|
2d990ca037 | ||
|
|
82203b23d9 | ||
|
|
9166ceb9b6 | ||
|
|
2325833c01 | ||
|
|
f8a837f106 | ||
|
|
b05f954d35 | ||
|
|
6b4442ce39 | ||
|
|
9ff2b1f379 | ||
|
|
ff95fcfa88 | ||
|
|
fcccb11990 | ||
|
|
1deae16211 | ||
|
|
e59f2841a8 | ||
|
|
04f7fd7a7e | ||
|
|
7650ec67ba | ||
|
|
6efc7ff294 | ||
|
|
1f4e214e5a | ||
|
|
a35616326c | ||
|
|
28bf11d119 | ||
|
|
88b4810c3f | ||
|
|
c6a454ffc6 | ||
|
|
2eb43fa445 | ||
|
|
6d562d8d37 | ||
|
|
9daac7c0df | ||
|
|
9300cd3c25 | ||
|
|
978b6f8d1c | ||
|
|
d178612f27 | ||
|
|
85bfe32c0d | ||
|
|
413cd55d8d | ||
|
|
d214ccba67 | ||
|
|
acaf1c2fed | ||
|
|
0a2d86b561 | ||
|
|
b9f8243904 | ||
|
|
672150aea2 | ||
|
|
d1a4ead83e | ||
|
|
53ed66c8b8 | ||
|
|
53ccbd6211 | ||
|
|
9ffd853ae4 | ||
|
|
4d992b2226 | ||
|
|
a5b4938bbb | ||
|
|
94d9204177 | ||
|
|
8bf0ab45a1 | ||
|
|
5cb0e54443 | ||
|
|
8716760e7e | ||
|
|
d886f61de9 | ||
|
|
3c89fa8859 | ||
|
|
38b787dbc1 | ||
|
|
68a3cc43d9 | ||
|
|
999bb03a45 | ||
|
|
65a3fb9589 | ||
|
|
39673d419a | ||
|
|
977f68c65c | ||
|
|
a989166cdc | ||
|
|
fd3434b833 | ||
|
|
5e3dc69b26 | ||
|
|
f06e1bbe1a | ||
|
|
f672397563 | ||
|
|
c5c5bf519b | ||
|
|
a689db4d3d | ||
|
|
44610cf326 | ||
|
|
65e7edc452 | ||
|
|
dbeabe613d | ||
|
|
12e7127422 | ||
|
|
ba9ff4fcd6 | ||
|
|
9c601bde44 | ||
|
|
fda419faca | ||
|
|
7067bb774f | ||
|
|
26e584860e | ||
|
|
b1957d6c1d | ||
|
|
64c7d858bf | ||
|
|
d47be6b3b4 | ||
|
|
558cce3002 | ||
|
|
7d637a502d | ||
|
|
95c3212a83 | ||
|
|
f5feb6a31d | ||
|
|
759be39fc7 | ||
|
|
ce4dd7ff87 | ||
|
|
e8324892df | ||
|
|
ad9e50c9d3 | ||
|
|
42731a992e | ||
|
|
d4b2d3c381 | ||
|
|
dfff062bc6 | ||
|
|
cd4004dce2 | ||
|
|
9ac44192bc | ||
|
|
a7920c01d7 | ||
|
|
56da121746 | ||
|
|
679e69be89 | ||
|
|
c8c5f77595 | ||
|
|
5ce430c062 | ||
|
|
a1ee0d39b8 | ||
|
|
48f78f18d4 | ||
|
|
b91fb9c322 | ||
|
|
de08b82ebe | ||
|
|
6308e06586 | ||
|
|
f34f8e1bb6 | ||
|
|
00c92d74a7 | ||
|
|
306b1ddcb3 | ||
|
|
33db866d04 | ||
|
|
7827a184f7 | ||
|
|
af73e63d7a | ||
|
|
d0b76760f4 | ||
|
|
d7c8ac2f8d | ||
|
|
f3d9877598 | ||
|
|
8d19ceff95 | ||
|
|
f76e8f65a5 | ||
|
|
447ed4cef7 | ||
|
|
8955d69a11 | ||
|
|
f7eb61614e | ||
|
|
9e75a68008 | ||
|
|
0b787ebb3c | ||
|
|
1b7cff78eb | ||
|
|
6e0358d6ea | ||
|
|
9f653577cd | ||
|
|
362a31abbd | ||
|
|
d7ed55b264 | ||
|
|
af53230244 | ||
|
|
16b5768736 | ||
|
|
caf26cc315 | ||
|
|
2f0d722b83 | ||
|
|
fc14cf102f | ||
|
|
4c7f92b491 | ||
|
|
f8c20128ef | ||
|
|
41b7dc3102 | ||
|
|
c6408eb752 | ||
|
|
12166cbe93 | ||
|
|
0c6944bb8d | ||
|
|
22b8cdbe01 | ||
|
|
0f41d7443a | ||
|
|
46a8c06bfe | ||
|
|
e83ca276c0 | ||
|
|
e2874a64a1 | ||
|
|
39d4afac20 | ||
|
|
86ba18595f | ||
|
|
3c7a24c4c1 | ||
|
|
ddc2b7f5e8 | ||
|
|
8addcde754 | ||
|
|
85d6225a7c | ||
|
|
0cebf42857 | ||
|
|
340083bc33 | ||
|
|
30b12c67b2 | ||
|
|
3199f33efb | ||
|
|
af673e7ec0 | ||
|
|
d16ec6f0b1 | ||
|
|
2799e9435d | ||
|
|
53d2321698 | ||
|
|
4e14f0359d | ||
|
|
fa52f4d7e0 | ||
|
|
0279aafb97 | ||
|
|
1996d34650 | ||
|
|
ccb20f3930 | ||
|
|
3d8c11ea88 | ||
|
|
197d19a070 | ||
|
|
4d73e0264a | ||
|
|
a30323f22f | ||
|
|
e55da57f46 | ||
|
|
479b8e8ea4 | ||
|
|
1fbbbb00ba | ||
|
|
a934c4c034 | ||
|
|
49a6905ab5 | ||
|
|
f5dc4a62c4 | ||
|
|
10e53074b2 | ||
|
|
96dd52a5e9 | ||
|
|
a42b55f391 | ||
|
|
7471dad28f | ||
|
|
824cd7e3fa | ||
|
|
b452110b43 | ||
|
|
21092ef7e0 | ||
|
|
d6bccc42e4 | ||
|
|
a909818406 | ||
|
|
1d30f2674a | ||
|
|
74e1df4cd1 | ||
|
|
f3e5757295 | ||
|
|
4c5f5c408f | ||
|
|
348d2d8241 | ||
|
|
16f471db69 | ||
|
|
879153d478 | ||
|
|
962d2e8449 | ||
|
|
de0437e164 | ||
|
|
479c2b2dae | ||
|
|
6c8da3a04f | ||
|
|
6b9aef10a9 | ||
|
|
0969b5d24e | ||
|
|
9df7023b73 | ||
|
|
c98464d9df | ||
|
|
f3763a1b5c | ||
|
|
eaff85af92 | ||
|
|
756ceb2471 | ||
|
|
100e954cef | ||
|
|
839701fcf8 | ||
|
|
e4c0979951 | ||
|
|
16b4235758 | ||
|
|
e6b16ff7c4 | ||
|
|
de21aca3ef | ||
|
|
2777c05907 | ||
|
|
a276ceedb3 | ||
|
|
2082283646 | ||
|
|
593506219c | ||
|
|
4fbcf883fe | ||
|
|
64c2cc579f | ||
|
|
c3b7d4ac1d | ||
|
|
7fc3e297f1 | ||
|
|
72ebc26baa | ||
|
|
cd000218b1 | ||
|
|
4835739198 | ||
|
|
0057df0efb | ||
|
|
b7747a37d1 | ||
|
|
888b292d73 | ||
|
|
9c01593ba8 | ||
|
|
9cf453008d | ||
|
|
f6e0996250 | ||
|
|
deeb8a84b7 | ||
|
|
92992c0a9b | ||
|
|
652d1f606e | ||
|
|
35c5d99a80 | ||
|
|
653f025635 | ||
|
|
606355955d | ||
|
|
a98b0c1b62 | ||
|
|
5dd9459561 | ||
|
|
4dae7b6b85 | ||
|
|
5caf1e1b85 | ||
|
|
125b1ab134 | ||
|
|
9d962ded6a | ||
|
|
f414029910 | ||
|
|
3629ba1f09 | ||
|
|
3678262404 | ||
|
|
16d8c8e962 | ||
|
|
51712f08b5 | ||
|
|
0714920a9a | ||
|
|
edea9f6bec | ||
|
|
65fc57cb69 | ||
|
|
1480b23838 | ||
|
|
7b38a6a8d6 | ||
|
|
0b776269ea | ||
|
|
14c74248dd | ||
|
|
3ee6af0dfd | ||
|
|
9fab4110d7 | ||
|
|
9c2a648d09 | ||
|
|
c44d87e24d |
3650 changed files with 221318 additions and 466821 deletions
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
|
|
@ -1,6 +1,6 @@
|
|||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
github: CalcProgrammer1
|
||||
patreon: CalcProgrammer1
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
|
|
|
|||
21
.github/workflows/issue_opened.yml
vendored
Normal file
21
.github/workflows/issue_opened.yml
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
name: Issue Opened
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened,reopened]
|
||||
|
||||
jobs:
|
||||
issue_greeting:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
steps:
|
||||
- name: Greeting
|
||||
run: gh issue comment "$NUMBER" --body "$BODY"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GH_REPO: ${{ github.repository }}
|
||||
NUMBER: ${{ github.event.issue.number }}
|
||||
BODY: >
|
||||
This Github repo is a mirror of the main repository on Gitlab.
|
||||
For any new issue please refer to https://gitlab.com/CalcProgrammer1/OpenRGB/-/issues
|
||||
21
.github/workflows/pr_opened.yml
vendored
Normal file
21
.github/workflows/pr_opened.yml
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
name: PR Opened
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened,reopened]
|
||||
|
||||
jobs:
|
||||
pr_greeting:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Greeting
|
||||
run: gh pr comment "$NUMBER" --body "$BODY"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GH_REPO: ${{ github.repository }}
|
||||
NUMBER: ${{ github.event.pull_request.number }}
|
||||
BODY: >
|
||||
This Github repo is a mirror of the main repository on Gitlab.
|
||||
Please fork https://gitlab.com/CalcProgrammer1/OpenRGB/ and raise the appropriate merge request on Gitlab.
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -28,6 +28,7 @@ Build/
|
|||
.qmake.stash
|
||||
.vscode
|
||||
.vs
|
||||
.idea
|
||||
|
||||
# Generic Files
|
||||
.DS_Store
|
||||
|
|
|
|||
823
.gitlab-ci.yml
823
.gitlab-ci.yml
|
|
@ -7,6 +7,22 @@
|
|||
#-----------------------------------------------------------------------#
|
||||
# OpenRGB GitLab CI Configuration #
|
||||
#-----------------------------------------------------------------------#
|
||||
.fork_local_runner_rules:
|
||||
rules:
|
||||
- if: $CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB" || $CI_PIPELINE_SOURCE == "push"
|
||||
when: on_success
|
||||
|
||||
.fork_gitlab_runner_rules:
|
||||
rules:
|
||||
- if: $CI_PROJECT_PATH != "CalcProgrammer1/OpenRGB" && $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
.upstream_rules:
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- !reference [.fork_gitlab_runner_rules, rules]
|
||||
|
||||
.shared_windows_runners:
|
||||
tags:
|
||||
|
|
@ -17,22 +33,22 @@
|
|||
stages:
|
||||
- build
|
||||
- test
|
||||
- deploy
|
||||
|
||||
variables:
|
||||
GIT_DEPTH: 0
|
||||
|
||||
before_script:
|
||||
- echo "started by ${GITLAB_USER_NAME}"
|
||||
|
||||
#reusable templates
|
||||
.ccache_init: &ccache_init
|
||||
before_script:
|
||||
- export QT_SELECT=qt5
|
||||
- export APPIMAGE_EXTRACT_AND_RUN=1
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Supported Devices Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Supported Devices":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bullseye-64
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-amd64
|
||||
tags:
|
||||
- linux
|
||||
- amd64
|
||||
stage: build
|
||||
script:
|
||||
- qmake
|
||||
|
|
@ -42,217 +58,142 @@ before_script:
|
|||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Supported_Devices_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- ./*.md
|
||||
- Supported Devices.csv
|
||||
exclude:
|
||||
- README.md
|
||||
- CONTRIBUTING.md
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
- !reference [.upstream_rules, rules]
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (AppImage) 32-bit Build Target #
|
||||
# OpenRGB Common Appimage Build Steps #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 32 AppImage":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bullseye-32
|
||||
.hidden_appimage_script: &appimage_script_steps
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-${TGT_ARCH}
|
||||
tags:
|
||||
- linux
|
||||
- ${TGT_ARCH}
|
||||
stage: build
|
||||
script:
|
||||
- export $(dpkg-architecture)
|
||||
- ./scripts/build-appimage.sh
|
||||
- ./scripts/build-appimage.sh ${TGT_QT}
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_32_${CI_COMMIT_SHORT_SHA}"
|
||||
name: "${CI_PROJECT_NAME}_Linux_${TGT_NAME}_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- OpenRGB-i386.AppImage
|
||||
- OpenRGB-${TGT_PATH}.AppImage
|
||||
- 60-openrgb.rules
|
||||
- README.md
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
- !reference [.upstream_rules, rules]
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (AppImage) 64-bit Build Target #
|
||||
# Linux (AppImage) i386 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 64 AppImage":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bullseye-64
|
||||
stage: build
|
||||
script:
|
||||
- export $(dpkg-architecture)
|
||||
- ./scripts/build-appimage.sh
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_64_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- OpenRGB-x86_64.AppImage
|
||||
- 60-openrgb.rules
|
||||
- README.md
|
||||
expire_in: 30 days
|
||||
"Linux i386 AppImage":
|
||||
variables:
|
||||
TGT_ARCH: "i386"
|
||||
TGT_QT: ""
|
||||
TGT_NAME: "${TGT_ARCH}"
|
||||
TGT_PATH: "${TGT_ARCH}"
|
||||
<<: *appimage_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Buster (Legacy) 32-bit Build Target #
|
||||
# Linux (AppImage) Qt6 i386 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 32 .deb (Debian Buster)":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:buster-32
|
||||
stage: build
|
||||
script:
|
||||
- ./scripts/build-package-files.sh debian/changelog
|
||||
- dpkg-architecture -l
|
||||
- dpkg-buildpackage --target-arch i386 -us -B
|
||||
- rm -v ../openrgb-dbgsym*.*deb
|
||||
- mv -v ../openrgb*.deb ./
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_32_deb_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- openrgb*.deb
|
||||
exclude:
|
||||
- openrgb-dbgsym*.*deb
|
||||
expire_in: 30 days
|
||||
"Linux i386 AppImage Qt6":
|
||||
variables:
|
||||
TGT_ARCH: "i386"
|
||||
TGT_QT: "qt6"
|
||||
TGT_NAME: "${TGT_ARCH}_${TGT_QT^}"
|
||||
TGT_PATH: "${TGT_ARCH}"
|
||||
<<: *appimage_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (AppImage) amd64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux amd64 AppImage":
|
||||
variables:
|
||||
TGT_ARCH: "amd64"
|
||||
TGT_QT: ""
|
||||
TGT_NAME: "${TGT_ARCH}"
|
||||
TGT_PATH: "x86_64"
|
||||
<<: *appimage_script_steps
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Buster (Legacy) 64-bit Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 64 .deb (Debian Buster)":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:buster-64
|
||||
stage: build
|
||||
script:
|
||||
- ./scripts/build-package-files.sh debian/changelog
|
||||
- dpkg-architecture -l
|
||||
- dpkg-buildpackage -us -B
|
||||
- rm -v ../openrgb-dbgsym*.*deb
|
||||
- mv -v ../openrgb*.deb ./
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_64_deb_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- openrgb*.deb
|
||||
exclude:
|
||||
- openrgb-dbgsym*.*deb
|
||||
expire_in: 30 days
|
||||
- !reference [.fork_local_runner_rules, rules]
|
||||
|
||||
"Linux amd64 AppImage (gitlab.com runner)":
|
||||
extends: "Linux amd64 AppImage"
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
- !reference [.fork_gitlab_runner_rules, rules]
|
||||
tags:
|
||||
- "saas-linux-small-amd64"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Bullseye 32-bit Build Target #
|
||||
# Linux (AppImage) Qt6 amd64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 32 .deb (Debian Bullseye)":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bullseye-32
|
||||
stage: build
|
||||
script:
|
||||
- ./scripts/build-package-files.sh debian/changelog
|
||||
- dpkg-architecture -l
|
||||
- dpkg-buildpackage --target-arch i386 -us -B
|
||||
- rm -v ../openrgb-dbgsym*.*deb
|
||||
- mv -v ../openrgb*.deb ./
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_32_deb_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- openrgb*.deb
|
||||
exclude:
|
||||
- openrgb-dbgsym*.*deb
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Bullseye 64-bit Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 64 .deb (Debian Bullseye)":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bullseye-64
|
||||
stage: build
|
||||
script:
|
||||
- ./scripts/build-package-files.sh debian/changelog
|
||||
- dpkg-architecture -l
|
||||
- dpkg-buildpackage -us -B
|
||||
- rm -v ../openrgb-dbgsym*.*deb
|
||||
- mv -v ../openrgb*.deb ./
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_64_deb_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- openrgb*.deb
|
||||
exclude:
|
||||
- openrgb-dbgsym*.*deb
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Bookworm 32-bit Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 32 .deb (Debian Bookworm)":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-32
|
||||
stage: build
|
||||
script:
|
||||
- ./scripts/build-package-files.sh debian/changelog
|
||||
- dpkg-architecture -l
|
||||
- dpkg-buildpackage --target-arch i386 -us -B
|
||||
- rm -v ../openrgb-dbgsym*.deb
|
||||
- mv -v ../openrgb*.deb ./
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_32_deb_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- openrgb*.deb
|
||||
exclude:
|
||||
- openrgb-dbgsym*.deb
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Bookworm 64-bit Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 64 .deb (Debian Bookworm)":
|
||||
<<: *ccache_init
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-64
|
||||
"Linux amd64 AppImage Qt6":
|
||||
variables:
|
||||
TGT_ARCH: "amd64"
|
||||
TGT_QT: "qt6"
|
||||
TGT_NAME: "${TGT_ARCH}_${TGT_QT^}"
|
||||
TGT_PATH: "x86_64"
|
||||
<<: *appimage_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (AppImage) armhf Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux armhf AppImage":
|
||||
variables:
|
||||
TGT_ARCH: "armhf"
|
||||
TGT_QT: ""
|
||||
TGT_NAME: "${TGT_ARCH}"
|
||||
TGT_PATH: "${TGT_ARCH}"
|
||||
<<: *appimage_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (AppImage) Qt6 armhf Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux armhf AppImage Qt6":
|
||||
variables:
|
||||
TGT_ARCH: "armhf"
|
||||
TGT_QT: "qt6"
|
||||
TGT_NAME: "${TGT_ARCH}_${TGT_QT^}"
|
||||
TGT_PATH: "${TGT_ARCH}"
|
||||
<<: *appimage_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (AppImage) arm64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux arm64 AppImage":
|
||||
variables:
|
||||
TGT_ARCH: "arm64"
|
||||
TGT_QT: ""
|
||||
TGT_NAME: "${TGT_ARCH}"
|
||||
TGT_PATH: "${TGT_ARCH}"
|
||||
<<: *appimage_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (AppImage) Qt6 arm64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux arm64 AppImage Qt6":
|
||||
variables:
|
||||
TGT_ARCH: "arm64"
|
||||
TGT_QT: "qt6"
|
||||
TGT_NAME: "${TGT_ARCH}_${TGT_QT^}"
|
||||
TGT_PATH: "${TGT_ARCH}"
|
||||
<<: *appimage_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# OpenRGB Common Debian Build Steps #
|
||||
#-----------------------------------------------------------------------#
|
||||
.hidden_deb_script: &debian_script_steps
|
||||
stage: build
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:$TGT_DEB-$TGT_ARCH
|
||||
tags:
|
||||
- linux
|
||||
- $TGT_ARCH
|
||||
script:
|
||||
- ./scripts/build-package-files.sh debian/changelog
|
||||
- dpkg-architecture -l
|
||||
|
|
@ -261,36 +202,100 @@ before_script:
|
|||
- mv -v ../openrgb*.deb ./
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_64_deb_${CI_COMMIT_SHORT_SHA}"
|
||||
name: "${CI_PROJECT_NAME}_Linux_${TGT_ARCH}_deb_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- openrgb*.deb
|
||||
exclude:
|
||||
- openrgb-dbgsym*.deb
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
- !reference [.upstream_rules, rules]
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.rpm, f35) 64-bit Build Target #
|
||||
# Linux (.deb) Debian Bookworm i386 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 64 f35 rpm":
|
||||
image: fedora:35
|
||||
"Linux i386 .deb (Debian Bookworm)":
|
||||
variables:
|
||||
TGT_ARCH: "i386"
|
||||
TGT_DEB: "bookworm"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Trixie i386 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux i386 .deb (Debian Trixie)":
|
||||
variables:
|
||||
TGT_ARCH: "i386"
|
||||
TGT_DEB: "trixie"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Bookworm amd64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux amd64 .deb (Debian Bookworm)":
|
||||
variables:
|
||||
TGT_ARCH: "amd64"
|
||||
TGT_DEB: "bookworm"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Trixie amd64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux amd64 .deb (Debian Trixie)":
|
||||
variables:
|
||||
TGT_ARCH: "amd64"
|
||||
TGT_DEB: "trixie"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Bookworm armhf Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux armhf .deb (Debian Bookworm)":
|
||||
variables:
|
||||
TGT_ARCH: "armhf"
|
||||
TGT_DEB: "bookworm"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Trixie armhf Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux armhf .deb (Debian Trixie)":
|
||||
variables:
|
||||
TGT_ARCH: "armhf"
|
||||
TGT_DEB: "trixie"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Bookworm arm64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux arm64 .deb (Debian Bookworm)":
|
||||
variables:
|
||||
TGT_ARCH: "arm64"
|
||||
TGT_DEB: "bookworm"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.deb) Debian Trixie arm64 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux arm64 .deb (Debian Trixie)":
|
||||
variables:
|
||||
TGT_ARCH: "arm64"
|
||||
TGT_DEB: "trixie"
|
||||
<<: *debian_script_steps
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.rpm, F40) 64-bit Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 64 F40 rpm":
|
||||
image: fedora:40
|
||||
stage: build
|
||||
script:
|
||||
- dnf install rpmdevtools dnf-plugins-core -y
|
||||
- dnf install rpmdevtools dnf-plugins-core libcurl-devel qt5-qtbase-devel git -y
|
||||
- rpmdev-setuptree
|
||||
- ./scripts/build-package-files.sh fedora/OpenRGB.spec
|
||||
- ls /root/
|
||||
- cp fedora/OpenRGB.spec /root/rpmbuild/SPECS
|
||||
- cp ../OpenRGB /root/rpmbuild/SOURCES/ -r
|
||||
- cd /root/rpmbuild/SOURCES
|
||||
- tar -cf OpenRGB.tar.gz OpenRGB/
|
||||
- cd ..
|
||||
- cp -rp . /root/rpmbuild/SOURCES/OpenRGB
|
||||
- cd /root/rpmbuild
|
||||
- dnf builddep SPECS/OpenRGB.spec -y
|
||||
- rpmbuild -ba SPECS/OpenRGB.spec
|
||||
- cd RPMS/x86_64/
|
||||
|
|
@ -304,115 +309,12 @@ before_script:
|
|||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
- !reference [.upstream_rules, rules]
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Linux (.rpm, f36) 64-bit Build Target #
|
||||
# Debian i386 Bookworm test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Linux 64 f36 rpm":
|
||||
image: fedora:36
|
||||
stage: build
|
||||
script:
|
||||
- dnf install rpmdevtools dnf-plugins-core libcurl-devel qt5-qtbase-devel -y
|
||||
- rpmdev-setuptree
|
||||
- ./scripts/build-package-files.sh fedora/OpenRGB.spec
|
||||
- ls /root/
|
||||
- cp fedora/OpenRGB.spec /root/rpmbuild/SPECS
|
||||
- cp ../OpenRGB /root/rpmbuild/SOURCES/ -r
|
||||
- cd /root/rpmbuild/SOURCES
|
||||
- tar -cf OpenRGB.tar.gz OpenRGB/
|
||||
- cd ..
|
||||
- dnf builddep SPECS/OpenRGB.spec -y
|
||||
- rpmbuild -ba SPECS/OpenRGB.spec
|
||||
- cd RPMS/x86_64/
|
||||
- mv openrgb*.rpm ${CI_PROJECT_DIR}/
|
||||
- cd ${CI_PROJECT_DIR}
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Linux_64_rpm_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- openrgb*.rpm
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Debian 32 Buster test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Debian 32 Buster":
|
||||
image: i386/debian:buster
|
||||
stage: test
|
||||
script:
|
||||
- apt update
|
||||
- DEBIAN_FRONTEND=noninteractive apt install -yq --no-install-recommends ./openrgb*i386.deb
|
||||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 32 .deb (Debian Buster)"
|
||||
needs:
|
||||
- "Linux 32 .deb (Debian Buster)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Debian 64 Buster test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Debian 64 Buster":
|
||||
image: amd64/debian:buster
|
||||
stage: test
|
||||
script:
|
||||
- apt update
|
||||
- DEBIAN_FRONTEND=noninteractive apt install -yq --no-install-recommends ./openrgb*amd64.deb
|
||||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 64 .deb (Debian Buster)"
|
||||
needs:
|
||||
- "Linux 64 .deb (Debian Buster)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Debian 32 Bullseye test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Debian 32 Bullseye":
|
||||
image: i386/debian:bullseye
|
||||
stage: test
|
||||
script:
|
||||
- apt update
|
||||
- DEBIAN_FRONTEND=noninteractive apt install -yq --no-install-recommends ./openrgb*i386.deb
|
||||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 32 .deb (Debian Bullseye)"
|
||||
needs:
|
||||
- "Linux 32 .deb (Debian Bullseye)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Debian 64 Bullseye test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Debian 64 Bullseye":
|
||||
image: amd64/debian:bullseye
|
||||
stage: test
|
||||
script:
|
||||
- apt update
|
||||
- DEBIAN_FRONTEND=noninteractive apt install -yq --no-install-recommends ./openrgb*amd64.deb
|
||||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 64 .deb (Debian Bullseye)"
|
||||
needs:
|
||||
- "Linux 64 .deb (Debian Bullseye)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Debian 32 Bookworm test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Debian 32 Bookworm":
|
||||
"Debian i386 Bookworm":
|
||||
image: i386/debian:bookworm
|
||||
stage: test
|
||||
script:
|
||||
|
|
@ -421,14 +323,14 @@ before_script:
|
|||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 32 .deb (Debian Bookworm)"
|
||||
- "Linux i386 .deb (Debian Bookworm)"
|
||||
needs:
|
||||
- "Linux 32 .deb (Debian Bookworm)"
|
||||
- "Linux i386 .deb (Debian Bookworm)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Debian 64 Bookworm test #
|
||||
# Debian amd64 Bookworm test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Debian 64 Bookworm":
|
||||
"Debian amd64 Bookworm":
|
||||
image: amd64/debian:bookworm
|
||||
stage: test
|
||||
script:
|
||||
|
|
@ -437,30 +339,14 @@ before_script:
|
|||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 64 .deb (Debian Bookworm)"
|
||||
- "Linux amd64 .deb (Debian Bookworm)"
|
||||
needs:
|
||||
- "Linux 64 .deb (Debian Bookworm)"
|
||||
- "Linux amd64 .deb (Debian Bookworm)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Ubuntu 64 20.04LTS test #
|
||||
# Ubuntu amd64 22.04 test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Ubuntu 64 20.04LTS":
|
||||
image: ubuntu:focal
|
||||
stage: test
|
||||
script:
|
||||
- apt update
|
||||
- DEBIAN_FRONTEND=noninteractive apt install -yq --no-install-recommends ./openrgb*amd64.deb
|
||||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 64 .deb (Debian Buster)"
|
||||
needs:
|
||||
- "Linux 64 .deb (Debian Buster)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Ubuntu 64 22.04 test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Ubuntu 64 22.04LTS":
|
||||
"Ubuntu amd64 22.04LTS":
|
||||
image: ubuntu:jammy
|
||||
stage: test
|
||||
script:
|
||||
|
|
@ -469,39 +355,40 @@ before_script:
|
|||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux 64 .deb (Debian Bookworm)"
|
||||
- "Linux amd64 .deb (Debian Bookworm)"
|
||||
needs:
|
||||
- "Linux 64 .deb (Debian Bookworm)"
|
||||
- "Linux amd64 .deb (Debian Bookworm)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Fedora 64 v35 test #
|
||||
# Ubuntu amd64 24.04 test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Fedora 64 v35":
|
||||
image: fedora:35
|
||||
"Ubuntu amd64 24.04LTS":
|
||||
image: ubuntu:noble
|
||||
stage: test
|
||||
script:
|
||||
- apt update
|
||||
- DEBIAN_FRONTEND=noninteractive apt install -yq --no-install-recommends ./openrgb*amd64.deb
|
||||
- openrgb --version
|
||||
- apt remove -y openrgb
|
||||
dependencies:
|
||||
- "Linux amd64 .deb (Debian Bookworm)"
|
||||
needs:
|
||||
- "Linux amd64 .deb (Debian Bookworm)"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Fedora 64 v40 test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Fedora 64 v40":
|
||||
image: fedora:40
|
||||
stage: test
|
||||
script:
|
||||
- yum -y localinstall ./openrgb*64.rpm
|
||||
- openrgb --version
|
||||
- yum -y remove openrgb
|
||||
dependencies:
|
||||
- "Linux 64 f35 rpm"
|
||||
- "Linux 64 F40 rpm"
|
||||
needs:
|
||||
- "Linux 64 f35 rpm"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Fedora 64 v36 test #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Fedora 64 v36":
|
||||
image: fedora:36
|
||||
stage: test
|
||||
script:
|
||||
- yum -y localinstall ./openrgb*64.rpm
|
||||
- openrgb --version
|
||||
- yum -y remove openrgb
|
||||
dependencies:
|
||||
- "Linux 64 f36 rpm"
|
||||
needs:
|
||||
- "Linux 64 f36 rpm"
|
||||
- "Linux 64 F40 rpm"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Windows (32-bit) Build Target #
|
||||
|
|
@ -511,61 +398,7 @@ before_script:
|
|||
- .shared_windows_runners
|
||||
stage: build
|
||||
script:
|
||||
- $esc = "$([char]27)"
|
||||
- $count = 0
|
||||
- function _unix_tmsec_ { [int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalSeconds }
|
||||
- function _fold_start_ { param( [string]$TEXT_TAG ) $t=_unix_tmsec_; $global:count += 1; Write-Host -NoNewLine "`r`n`r`nsection_start:${t}:sect_${count}`r${esc}[0K${esc}[33m${TEXT_TAG}${esc}[39m`r`n"; }
|
||||
- function _fold_final_ { $t=_unix_tmsec_; Write-Host -NoNewLine "`r`n`r`nsection_end:${t}:sect_${count}`r${esc}[0K`r`n" ; }
|
||||
|
||||
|
||||
- _fold_start_ 'configuring the msvc environment variables'
|
||||
- Push-Location "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Auxiliary/Build"
|
||||
- '& cmd.exe /C "vcvarsall.bat x86 & set" | Foreach-Object { if ($_ -match "(.*?)=(.*)") { Set-Item -force -path "Env:\$($matches[1])" -value "$($matches[2])" } }'
|
||||
- Pop-Location
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'downloading precompiled versions of qtbase, qttools (for windeployqt) and jom (for a more parallel nmake)'
|
||||
- mkdir _qt
|
||||
- mkdir _qt_download
|
||||
- Push-Location _qt_download
|
||||
- curl.exe -LJ -o qt-base.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610076/download'
|
||||
- curl.exe -LJ -o qt-tools.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610097/download'
|
||||
- curl.exe -LJ -o qt-jom.zip 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610138/download'
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'extracting the downloaded qt binaries'
|
||||
- 7z x qt-base.7z '-o../_qt' -y
|
||||
- 7z x qt-tools.7z '-o../_qt' -y
|
||||
- 7z x qt-jom.zip '-o../_qt' -y
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'turn the qt install from enterprise to foss; remove the licensing checks'
|
||||
- ${qconfig-pri-folder} = '..\_qt\5.15.0\msvc2019\mkspecs\qconfig.pri'
|
||||
- (Get-Content ${qconfig-pri-folder}).replace('QT_EDITION = Enterprise', 'QT_EDITION = OpenSource') | Set-Content ${qconfig-pri-folder}
|
||||
- (Get-Content ${qconfig-pri-folder}).replace('QT_LICHECK = licheck.exe', '') | Set-Content ${qconfig-pri-folder}
|
||||
- Pop-Location
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'run qmake and generate the msvc nmake makefile'
|
||||
- mkdir _build; cd _build
|
||||
- ..\_qt\5.15.0\msvc2019\bin\qmake ..\OpenRGB.pro
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'start the actual build with jom instead of nmake; for speed'
|
||||
- ..\_qt\jom
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'run windeployqt to automatically copy the needed dll files'
|
||||
- ..\_qt\5.15.0\msvc2019\bin\windeployqt --no-angle --no-translations --no-opengl-sw --no-system-d3d-compiler --no-compiler-runtime --no-webkit2 .\release\
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'Moving results for upload'
|
||||
- mv release ../'OpenRGB Windows 32-bit'
|
||||
- _fold_final_
|
||||
# cache:
|
||||
# key: same-key
|
||||
# paths:
|
||||
# - C:\vcpkg\installed\
|
||||
- scripts\build-windows.bat 5.15.0 2019 32
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Windows_32_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
|
|
@ -575,75 +408,37 @@ before_script:
|
|||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "CalcProgrammer1/OpenRGB"'
|
||||
when: on_success
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
- !reference [.upstream_rules, rules]
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Windows (64-bit) Build Target #
|
||||
# Windows (32-bit) Qt6 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Windows 64":
|
||||
"Windows 32 Qt6":
|
||||
extends:
|
||||
- .shared_windows_runners
|
||||
stage: build
|
||||
script:
|
||||
- $esc = "$([char]27)"
|
||||
- $count = 0
|
||||
- function _unix_tmsec_ { [int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalSeconds }
|
||||
- function _fold_start_ { param( [string]$TEXT_TAG ) $t=_unix_tmsec_; $global:count += 1; Write-Host -NoNewLine "`r`n`r`nsection_start:${t}:sect_${count}`r${esc}[0K${esc}[33m${TEXT_TAG}${esc}[39m`r`n"; }
|
||||
- function _fold_final_ { $t=_unix_tmsec_; Write-Host -NoNewLine "`r`n`r`nsection_end:${t}:sect_${count}`r${esc}[0K`r`n" ; }
|
||||
- scripts\build-windows.bat 6.8.3 2022 32
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Windows_32_Qt6_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- 'OpenRGB Windows 32-bit'
|
||||
exclude:
|
||||
- 'OpenRGB Windows 32-bit\*.qm'
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- !reference [.upstream_rules, rules]
|
||||
|
||||
- _fold_start_ 'configuring the msvc environment variables'
|
||||
- Push-Location "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Auxiliary/Build"
|
||||
- '& cmd.exe /C "vcvarsall.bat x64 & set" | Foreach-Object { if ($_ -match "(.*?)=(.*)") { Set-Item -force -path "Env:\$($matches[1])" -value "$($matches[2])" } }'
|
||||
- Pop-Location
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'downloading precompiled versions of qtbase, qttools (for windeployqt) and jom (for a more parallel nmake)'
|
||||
- mkdir _qt
|
||||
- mkdir _qt_download
|
||||
- Push-Location _qt_download
|
||||
- curl.exe -LJ -o qt-base.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610116/download'
|
||||
- curl.exe -LJ -o qt-tools.7z 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610131/download'
|
||||
- curl.exe -LJ -o qt-jom.zip 'https://gitlab.com/OpenRGBDevelopers/openrgb-linux-ci-deb-builder/-/package_files/55610138/download'
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'extracting the downloaded qt binaries'
|
||||
- 7z x qt-base.7z '-o../_qt' -y
|
||||
- 7z x qt-tools.7z '-o../_qt' -y
|
||||
- 7z x qt-jom.zip '-o../_qt' -y
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'turn the qt install from enterprise to foss; remove the licensing checks'
|
||||
- ${qconfig-pri-folder} = '..\_qt\5.15.0\msvc2019_64\mkspecs\qconfig.pri'
|
||||
- (Get-Content ${qconfig-pri-folder}).replace('QT_EDITION = Enterprise', 'QT_EDITION = OpenSource') | Set-Content ${qconfig-pri-folder}
|
||||
- (Get-Content ${qconfig-pri-folder}).replace('QT_LICHECK = licheck.exe', '') | Set-Content ${qconfig-pri-folder}
|
||||
- Pop-Location
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'run qmake and generate the msvc nmake makefile'
|
||||
- mkdir _build; cd _build
|
||||
- ..\_qt\5.15.0\msvc2019_64\bin\qmake ..\OpenRGB.pro
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'start the actual build with jom instead of nmake; for speed'
|
||||
- ..\_qt\jom
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'run windeployqt to automatically copy the needed dll files'
|
||||
- ..\_qt\5.15.0\msvc2019_64\bin\windeployqt --no-angle --no-translations --no-opengl-sw --no-system-d3d-compiler --no-compiler-runtime --no-webkit2 .\release\
|
||||
- _fold_final_
|
||||
|
||||
- _fold_start_ 'Moving results for upload'
|
||||
- mv release ../'OpenRGB Windows 64-bit'
|
||||
- _fold_final_
|
||||
# cache:
|
||||
# key: same-key
|
||||
# paths:
|
||||
# - C:\vcpkg\installed\
|
||||
#-----------------------------------------------------------------------#
|
||||
# Windows (64-bit) Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Windows 64 Base":
|
||||
extends:
|
||||
- .shared_windows_runners
|
||||
stage: build
|
||||
script:
|
||||
- scripts\build-windows.bat 5.15.0 2019 64
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Windows_64_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
|
|
@ -652,6 +447,67 @@ before_script:
|
|||
- 'OpenRGB Windows 64-bit\*.qm'
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push"
|
||||
when: never
|
||||
|
||||
|
||||
"Windows 64":
|
||||
extends: "Windows 64 Base"
|
||||
rules:
|
||||
- !reference [.fork_local_runner_rules, rules]
|
||||
|
||||
"Windows 64 (gitlab.com runner)":
|
||||
extends: "Windows 64 Base"
|
||||
before_script:
|
||||
- git clone https://gitlab.com/OpenRGBDevelopers/OpenRGB-Qt-Packages
|
||||
- cd OpenRGB-Qt-Packages
|
||||
- .\install-chocolatey.bat
|
||||
- cd ..
|
||||
rules:
|
||||
- !reference [.fork_gitlab_runner_rules, rules]
|
||||
tags:
|
||||
- "saas-windows-medium-amd64"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Windows (64-bit) Qt6 Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Windows 64 Qt6 Base":
|
||||
extends:
|
||||
- .shared_windows_runners
|
||||
stage: build
|
||||
script:
|
||||
- scripts\build-windows.bat 6.8.3 2022 64
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Windows_64_Qt6_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- 'OpenRGB Windows 64-bit'
|
||||
exclude:
|
||||
- 'OpenRGB Windows 64-bit\*.qm'
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push"
|
||||
when: never
|
||||
|
||||
|
||||
"Windows 64 Qt6":
|
||||
extends: "Windows 64 Qt6 Base"
|
||||
rules:
|
||||
- !reference [.fork_local_runner_rules, rules]
|
||||
|
||||
"Windows 64 Qt6 (gitlab.com runner)":
|
||||
extends: "Windows 64 Qt6 Base"
|
||||
before_script:
|
||||
- git clone https://gitlab.com/OpenRGBDevelopers/OpenRGB-Qt-Packages
|
||||
- cd OpenRGB-Qt-Packages
|
||||
- .\install-chocolatey.bat
|
||||
- cd ..
|
||||
rules:
|
||||
- !reference [.fork_gitlab_runner_rules, rules]
|
||||
tags:
|
||||
- "saas-windows-medium-amd64"
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# MacOS Build Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
|
|
@ -704,3 +560,30 @@ before_script:
|
|||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
#-----------------------------------------------------------------------#
|
||||
# Windows (64-bit) MSI Target #
|
||||
#-----------------------------------------------------------------------#
|
||||
"Windows 64 MSI":
|
||||
image: registry.gitlab.com/openrgbdevelopers/openrgb-linux-ci-deb-builder:bookworm-i386
|
||||
stage: deploy
|
||||
tags:
|
||||
- linux
|
||||
- i386
|
||||
script:
|
||||
- ls -la
|
||||
- ls -la "OpenRGB Windows 64-bit/"
|
||||
- ./scripts/build-msi.sh
|
||||
dependencies:
|
||||
- "Windows 64"
|
||||
needs:
|
||||
- "Windows 64"
|
||||
|
||||
artifacts:
|
||||
name: "${CI_PROJECT_NAME}_Windows_64_msi_${CI_COMMIT_SHORT_SHA}"
|
||||
paths:
|
||||
- OpenRGB_Windows_64.msi
|
||||
expire_in: 30 days
|
||||
|
||||
rules:
|
||||
- !reference [.upstream_rules, rules]
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ CODEOWNERS @Calcprogrammer1
|
|||
/Controllers/EVGAGP102GPUController/
|
||||
/Controllers/EVGAPascalGPUController/
|
||||
/Controllers/EVGATuringGPUController/ @TheRogueZeta
|
||||
/Controllers/EVGASMBusController/ @balika011
|
||||
/Controllers/EVGAUSBController/ @Dr_No
|
||||
/Controllers/EVisionKeyboardController/
|
||||
/Controllers/EspurnaController/
|
||||
|
|
@ -74,7 +75,6 @@ CODEOWNERS @Calcprogrammer1
|
|||
/Controllers/NZXTHue2Controller/
|
||||
/Controllers/NZXTHuePlusController/
|
||||
/Controllers/NZXTKrakenController/
|
||||
/Controllers/OpenRazerController/
|
||||
/Controllers/PNYGPUController/
|
||||
/Controllers/PatriotViperController/
|
||||
/Controllers/PhilipsHueController/
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ Please add a link to the manufacturer's product page beneath this line
|
|||
~"DeviceType::IDK" <!-- I Don't know -->
|
||||
~"DeviceType::USB" <!-- The device connects to an internal header or external usb port -->
|
||||
~"DeviceType::GPU::AMD" <!-- The device is an AMD GPU -->
|
||||
~"DeviceType::GPU::NVidia" <!-- The device is a NVidia GPU -->
|
||||
~"DeviceType::GPU::NVidia" <!-- The device is a Nvidia GPU -->
|
||||
~"DeviceType::SMBus" <!-- The device is connected to the SMBus eg. RAM -->
|
||||
~"DeviceType::WMI" <!-- The device is controlled thru Windows Management Instrumentation -->
|
||||
~"DeviceType::WMI" <!-- The device is controlled through Windows Management Instrumentation -->
|
||||
|
||||
<!-- Please delete any lines that are not relevant -->
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ Please put "Initial commit for" name of the product, including manufacturer abov
|
|||
<!-- For admin purposes: Please leave this section as is -->
|
||||
|
||||
# Checklist for Accepting a Merge Request for a New Device
|
||||
- [ ] The source branch of the merge request is not protected (`master` is protected by default when creating a fork, so it is recommended to not use it as your source).
|
||||
- [ ] The `New Device` issue raised for this device is linked to this MR with a keyword `Closes / Resolves / Implements`
|
||||
- [ ] There is a device protocol page in the [Developer Wiki](https://gitlab.com/OpenRGBDevelopers/OpenRGB-Wiki) or there is enough information / captures in the `New Device` issue to provide ongoing support.
|
||||
- [ ] The code to be merged follows the style guide and change requirements as [documented in the contributing guide](https://gitlab.com/CalcProgrammer1/OpenRGB/-/blob/master/CONTRIBUTING.md).
|
||||
|
|
|
|||
|
|
@ -1,17 +1,20 @@
|
|||
#include "AutoStart-FreeBSD.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AutoStart-FreeBSD.cpp |
|
||||
| |
|
||||
| Autostart implementation for FreeBSD |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <limits.h>
|
||||
#include <unistd.h>
|
||||
#include <sstream>
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| FreeBSD AutoStart Implementation |
|
||||
| Public Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
#include "AutoStart-FreeBSD.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
|
||||
AutoStart::AutoStart(std::string name)
|
||||
{
|
||||
|
|
@ -23,21 +26,21 @@ bool AutoStart::DisableAutoStart()
|
|||
std::error_code autostart_file_remove_errcode;
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
/*---------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*-------------------------------------------------*/
|
||||
if(!filesystem::exists(autostart_file))
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
/*---------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*-------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
success = filesystem::remove(autostart_file, autostart_file_remove_errcode);
|
||||
|
|
@ -50,7 +53,7 @@ bool AutoStart::DisableAutoStart()
|
|||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return(success);
|
||||
|
|
@ -60,39 +63,38 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
{
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
std::ofstream autostart_file_stream(autostart_file, std::ios::out | std::ios::trunc);
|
||||
|
||||
/*---------------------------------------------*\
|
||||
| Error out if the file could not be opened |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Error out if the file could not be opened |
|
||||
\*-------------------------------------------------*/
|
||||
if(!autostart_file_stream)
|
||||
{
|
||||
LOG_ERROR("Could not open %s for writing.", autostart_file.c_str());
|
||||
LOG_ERROR("[AutoStart] Could not open %s for writing.", autostart_file.c_str());
|
||||
success = false;
|
||||
}
|
||||
/*---------------------------------------------*\
|
||||
| Otherwise, write the file |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Otherwise, write the file |
|
||||
\*-------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
//autostart_file_stream << desktop_file;
|
||||
autostart_file_stream.close();
|
||||
success = !autostart_file_stream.fail();
|
||||
|
||||
if (!success)
|
||||
{
|
||||
LOG_ERROR("An error occurred writing the auto start file.");
|
||||
LOG_ERROR("[AutoStart] An error occurred writing the auto start file.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return(success);
|
||||
|
|
@ -100,9 +102,9 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
|
||||
bool AutoStart::IsAutoStartEnabled()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
return(filesystem::exists(autostart_file));
|
||||
|
|
@ -115,9 +117,9 @@ bool AutoStart::IsAutoStartEnabled()
|
|||
|
||||
std::string AutoStart::GetExePath()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-----------------------------------------------------*/
|
||||
char exepath[ PATH_MAX ];
|
||||
|
||||
ssize_t count = readlink("/proc/self/exe", exepath, PATH_MAX);
|
||||
|
|
@ -131,16 +133,16 @@ void AutoStart::InitAutoStart(std::string name)
|
|||
|
||||
autostart_name = name;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Get home and config paths |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Get home and config paths |
|
||||
\*-----------------------------------------------------*/
|
||||
const char *xdg_config_home = getenv("XDG_CONFIG_HOME");
|
||||
const char *home = getenv("HOME");
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Determine where the autostart .desktop files are |
|
||||
| kept |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Determine where the autostart .desktop files are |
|
||||
| kept |
|
||||
\*-----------------------------------------------------*/
|
||||
if(xdg_config_home != NULL)
|
||||
{
|
||||
autostart_dir = xdg_config_home;
|
||||
|
|
@ -152,9 +154,9 @@ void AutoStart::InitAutoStart(std::string name)
|
|||
autostart_dir = autostart_dir + "/.config/autostart/";
|
||||
}
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_dir != "")
|
||||
{
|
||||
std::error_code ec;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AutoStart-FreeBSD.h |
|
||||
| |
|
||||
| Autostart implementation for FreeBSD |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,20 @@
|
|||
#include "AutoStart-Linux.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AutoStart-Linux.cpp |
|
||||
| |
|
||||
| Autostart implementation for Linux |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <unistd.h>
|
||||
#include <linux/limits.h>
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Linux AutoStart Implementation |
|
||||
| Public Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
#include "AutoStart-Linux.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
|
||||
AutoStart::AutoStart(std::string name)
|
||||
{
|
||||
|
|
@ -22,21 +26,21 @@ bool AutoStart::DisableAutoStart()
|
|||
std::error_code autostart_file_remove_errcode;
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
/*---------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*-------------------------------------------------*/
|
||||
if(!filesystem::exists(autostart_file))
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
/*---------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*-------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
success = filesystem::remove(autostart_file, autostart_file_remove_errcode);
|
||||
|
|
@ -49,7 +53,7 @@ bool AutoStart::DisableAutoStart()
|
|||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return(success);
|
||||
|
|
@ -59,25 +63,25 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
{
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
std::string desktop_file = GenerateDesktopFile(autostart_info);
|
||||
std::ofstream autostart_file_stream(autostart_file, std::ios::out | std::ios::trunc);
|
||||
|
||||
/*---------------------------------------------*\
|
||||
| Error out if the file could not be opened |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Error out if the file could not be opened |
|
||||
\*-------------------------------------------------*/
|
||||
if(!autostart_file_stream)
|
||||
{
|
||||
LOG_ERROR("Could not open %s for writing.", autostart_file.c_str());
|
||||
LOG_ERROR("[AutoStart] Could not open %s for writing.", autostart_file.c_str());
|
||||
success = false;
|
||||
}
|
||||
/*---------------------------------------------*\
|
||||
| Otherwise, write the file |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Otherwise, write the file |
|
||||
\*-------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
autostart_file_stream << desktop_file;
|
||||
|
|
@ -86,13 +90,13 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
|
||||
if (!success)
|
||||
{
|
||||
LOG_ERROR("An error occurred writing the auto start file.");
|
||||
LOG_ERROR("[AutoStart] An error occurred writing the auto start file.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return(success);
|
||||
|
|
@ -100,9 +104,9 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
|
||||
bool AutoStart::IsAutoStartEnabled()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
return(filesystem::exists(autostart_file));
|
||||
|
|
@ -115,27 +119,27 @@ bool AutoStart::IsAutoStartEnabled()
|
|||
|
||||
std::string AutoStart::GetExePath()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-----------------------------------------------------*/
|
||||
char exepath[ PATH_MAX ];
|
||||
|
||||
ssize_t count = readlink("/proc/self/exe", exepath, PATH_MAX);
|
||||
|
||||
|
||||
return(std::string(exepath, (count > 0) ? count : 0));
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Linux AutoStart Implementation |
|
||||
| Private Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| Linux AutoStart Implementation |
|
||||
| Private Methods |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
std::string AutoStart::GenerateDesktopFile(AutoStartInfo autostart_info)
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Generate a .desktop file from the AutoStart |
|
||||
| parameters |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Generate a .desktop file from the AutoStart |
|
||||
| parameters |
|
||||
\*-----------------------------------------------------*/
|
||||
std::stringstream fileContents;
|
||||
|
||||
fileContents << "[Desktop Entry]" << std::endl;
|
||||
|
|
@ -147,9 +151,9 @@ std::string AutoStart::GenerateDesktopFile(AutoStartInfo autostart_info)
|
|||
fileContents << "Terminal=false" << std::endl;
|
||||
fileContents << "Type=Application" << std::endl;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Add the executable path and arguments |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Add the executable path and arguments |
|
||||
\*-----------------------------------------------------*/
|
||||
fileContents << "Exec=" << autostart_info.path;
|
||||
|
||||
if (autostart_info.args != "")
|
||||
|
|
@ -158,7 +162,7 @@ std::string AutoStart::GenerateDesktopFile(AutoStartInfo autostart_info)
|
|||
}
|
||||
|
||||
fileContents << std::endl;
|
||||
|
||||
|
||||
return(fileContents.str());
|
||||
}
|
||||
|
||||
|
|
@ -168,16 +172,16 @@ void AutoStart::InitAutoStart(std::string name)
|
|||
|
||||
autostart_name = name;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Get home and config paths |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Get home and config paths |
|
||||
\*-----------------------------------------------------*/
|
||||
const char *xdg_config_home = getenv("XDG_CONFIG_HOME");
|
||||
const char *home = getenv("HOME");
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Determine where the autostart .desktop files are |
|
||||
| kept |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Determine where the autostart .desktop files are |
|
||||
| kept |
|
||||
\*-----------------------------------------------------*/
|
||||
if(xdg_config_home != NULL)
|
||||
{
|
||||
autostart_dir = xdg_config_home;
|
||||
|
|
@ -189,15 +193,15 @@ void AutoStart::InitAutoStart(std::string name)
|
|||
autostart_dir = autostart_dir + "/.config/autostart/";
|
||||
}
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_dir != "")
|
||||
{
|
||||
std::error_code ec;
|
||||
|
||||
bool success = true;
|
||||
|
||||
|
||||
if(!filesystem::exists(autostart_dir))
|
||||
{
|
||||
success = filesystem::create_directories(autostart_dir, ec);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AutoStart-Linux.h |
|
||||
| |
|
||||
| Autostart implementation for Linux |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
|
|
|||
|
|
@ -1,18 +1,20 @@
|
|||
#include "AutoStart-MacOS.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AutoStart-MacOS.cpp |
|
||||
| |
|
||||
| Autostart implementation for MacOS |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <mach-o/dyld.h>
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| MacOS AutoStart Implementation |
|
||||
| Public Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
#include "AutoStart-MacOS.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
|
||||
AutoStart::AutoStart(std::string name)
|
||||
{
|
||||
|
|
@ -24,21 +26,21 @@ bool AutoStart::DisableAutoStart()
|
|||
std::error_code autostart_file_remove_errcode;
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
/*---------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*-------------------------------------------------*/
|
||||
if(!filesystem::exists(autostart_file))
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
/*---------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*-------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
success = filesystem::remove(autostart_file, autostart_file_remove_errcode);
|
||||
|
|
@ -51,7 +53,7 @@ bool AutoStart::DisableAutoStart()
|
|||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return(success);
|
||||
|
|
@ -61,25 +63,25 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
{
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
std::string desktop_file = GenerateLaunchAgentFile(autostart_info);
|
||||
std::ofstream autostart_file_stream(autostart_file, std::ios::out | std::ios::trunc);
|
||||
|
||||
/*---------------------------------------------*\
|
||||
| Error out if the file could not be opened |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Error out if the file could not be opened |
|
||||
\*-------------------------------------------------*/
|
||||
if(!autostart_file_stream)
|
||||
{
|
||||
LOG_ERROR("Could not open %s for writing.", autostart_file.c_str());
|
||||
LOG_ERROR("[AutoStart] Could not open %s for writing.", autostart_file.c_str());
|
||||
success = false;
|
||||
}
|
||||
/*---------------------------------------------*\
|
||||
| Otherwise, write the file |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Otherwise, write the file |
|
||||
\*-------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
autostart_file_stream << desktop_file;
|
||||
|
|
@ -88,13 +90,13 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
|
||||
if (!success)
|
||||
{
|
||||
LOG_ERROR("An error occurred writing the auto start file.");
|
||||
LOG_ERROR("[AutoStart] An error occurred writing the auto start file.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return(success);
|
||||
|
|
@ -102,9 +104,9 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
|
||||
bool AutoStart::IsAutoStartEnabled()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
return(filesystem::exists(autostart_file));
|
||||
|
|
@ -117,9 +119,9 @@ bool AutoStart::IsAutoStartEnabled()
|
|||
|
||||
std::string AutoStart::GetExePath()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-----------------------------------------------------*/
|
||||
char exepath[ PATH_MAX ];
|
||||
uint32_t exesize = PATH_MAX;
|
||||
|
||||
|
|
@ -130,17 +132,17 @@ std::string AutoStart::GetExePath()
|
|||
return("");
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| MacOS AutoStart Implementation |
|
||||
| Private Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| MacOS AutoStart Implementation |
|
||||
| Private Methods |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
std::string AutoStart::GenerateLaunchAgentFile(AutoStartInfo autostart_info)
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Generate a .plist file from the AutoStart |
|
||||
| parameters |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Generate a .plist file from the AutoStart |
|
||||
| parameters |
|
||||
\*-----------------------------------------------------*/
|
||||
std::stringstream fileContents;
|
||||
|
||||
fileContents << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl;
|
||||
|
|
@ -152,7 +154,7 @@ std::string AutoStart::GenerateLaunchAgentFile(AutoStartInfo autostart_info)
|
|||
fileContents << " <key>ProgramArguments</key>" << std::endl;
|
||||
fileContents << " <array>" << std::endl;
|
||||
fileContents << " <string>" << autostart_info.path << "</string>" << std::endl;
|
||||
|
||||
|
||||
if(autostart_info.args != "")
|
||||
{
|
||||
std::istringstream arg_parser(autostart_info.args);
|
||||
|
|
@ -163,12 +165,12 @@ std::string AutoStart::GenerateLaunchAgentFile(AutoStartInfo autostart_info)
|
|||
fileContents << " <string>" << arg << "</string>" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fileContents << " </array>" << std::endl;
|
||||
fileContents << " <key>RunAtLoad</key><true/>" << std::endl;
|
||||
fileContents << "</dict>" << std::endl;
|
||||
fileContents << "</plist>" << std::endl;
|
||||
|
||||
|
||||
return(fileContents.str());
|
||||
}
|
||||
|
||||
|
|
@ -178,22 +180,22 @@ void AutoStart::InitAutoStart(std::string name)
|
|||
|
||||
autostart_name = name;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Determine where the autostart .desktop files are |
|
||||
| kept |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Determine where the autostart .desktop files are |
|
||||
| kept |
|
||||
\*-----------------------------------------------------*/
|
||||
autostart_dir = getenv("HOME");
|
||||
autostart_dir = autostart_dir + "/Library/LaunchAgents/";
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_dir != "")
|
||||
{
|
||||
std::error_code ec;
|
||||
|
||||
bool success = true;
|
||||
|
||||
|
||||
if(!filesystem::exists(autostart_dir))
|
||||
{
|
||||
success = filesystem::create_directories(autostart_dir, ec);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AutoStart-MacOS.h |
|
||||
| |
|
||||
| Autostart implementation for MacOS |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,19 @@
|
|||
#include "AutoStart-Windows.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AutoStart-Windows.cpp |
|
||||
| |
|
||||
| Autostart implementation for Windows |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
#include "windows.h"
|
||||
#include <shlobj.h>
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Windows AutoStart Implementation |
|
||||
| Public Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
#include "AutoStart-Windows.h"
|
||||
#include "LogManager.h"
|
||||
#include "filesystem.h"
|
||||
#include "windows.h"
|
||||
|
||||
AutoStart::AutoStart(std::string name)
|
||||
{
|
||||
|
|
@ -23,34 +25,34 @@ bool AutoStart::DisableAutoStart()
|
|||
std::error_code autostart_file_remove_errcode;
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
/*---------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| If file doesn't exist, disable is successful |
|
||||
\*-------------------------------------------------*/
|
||||
if(!filesystem::exists(autostart_file))
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
/*---------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Otherwise, delete the file |
|
||||
\*-------------------------------------------------*/
|
||||
else
|
||||
{
|
||||
success = filesystem::remove(autostart_file, autostart_file_remove_errcode);
|
||||
|
||||
|
||||
if(!success)
|
||||
{
|
||||
LOG_ERROR("An error occurred removing the auto start file.");
|
||||
LOG_ERROR("[AutoStart] An error occurred removing the auto start file.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return(success);
|
||||
|
|
@ -60,9 +62,9 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
{
|
||||
bool success = false;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
bool weInitialised = false;
|
||||
|
|
@ -77,9 +79,9 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
|
||||
result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_ALL, IID_IShellLinkW, (void**)&shellLink);
|
||||
|
||||
/*---------------------------------------------*\
|
||||
| If not initialized, initialize |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| If not initialized, initialize |
|
||||
\*-------------------------------------------------*/
|
||||
if(result == CO_E_NOTINITIALIZED)
|
||||
{
|
||||
weInitialised = true;
|
||||
|
|
@ -87,21 +89,21 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_ALL, IID_IShellLinkW, (void**)&shellLink);
|
||||
}
|
||||
|
||||
/*---------------------------------------------*\
|
||||
| If successfully initialized, save a shortcut |
|
||||
| from the AutoStart parameters |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| If successfully initialized, save a shortcut |
|
||||
| from the AutoStart parameters |
|
||||
\*-------------------------------------------------*/
|
||||
if(SUCCEEDED(result))
|
||||
{
|
||||
shellLink->SetPath(exepathw.c_str());
|
||||
shellLink->SetArguments(argumentsw.c_str());
|
||||
shellLink->SetDescription(descriptionw.c_str());
|
||||
shellLink->SetIconLocation(iconw.c_str(), 0);
|
||||
|
||||
|
||||
IPersistFile* persistFile;
|
||||
|
||||
|
||||
result = shellLink->QueryInterface(IID_IPersistFile, (void**)&persistFile);
|
||||
|
||||
|
||||
if(SUCCEEDED(result))
|
||||
{
|
||||
result = persistFile->Save(startupfilepathw.c_str(), TRUE);
|
||||
|
|
@ -112,9 +114,9 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
shellLink->Release();
|
||||
}
|
||||
|
||||
/*---------------------------------------------*\
|
||||
| Uninitialize when done |
|
||||
\*---------------------------------------------*/
|
||||
/*-------------------------------------------------*\
|
||||
| Uninitialize when done |
|
||||
\*-------------------------------------------------*/
|
||||
if(weInitialised)
|
||||
{
|
||||
CoUninitialize();
|
||||
|
|
@ -122,7 +124,7 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR("Could not establish correct autostart file path.");
|
||||
LOG_ERROR("[AutoStart] Could not establish correct autostart file path.");
|
||||
}
|
||||
|
||||
return success;
|
||||
|
|
@ -130,9 +132,9 @@ bool AutoStart::EnableAutoStart(AutoStartInfo autostart_info)
|
|||
|
||||
bool AutoStart::IsAutoStartEnabled()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the filename is valid |
|
||||
\*-----------------------------------------------------*/
|
||||
if(autostart_file != "")
|
||||
{
|
||||
return(filesystem::exists(autostart_file));
|
||||
|
|
@ -145,20 +147,20 @@ bool AutoStart::IsAutoStartEnabled()
|
|||
|
||||
std::string AutoStart::GetExePath()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Create the OpenRGB executable path |
|
||||
\*-----------------------------------------------------*/
|
||||
char exepath[MAX_PATH] = "";
|
||||
|
||||
DWORD count = GetModuleFileNameA(NULL, exepath, MAX_PATH);
|
||||
|
||||
|
||||
return(std::string(exepath, (count > 0) ? count : 0));
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Windows AutoStart Implementation |
|
||||
| Private Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| Windows AutoStart Implementation |
|
||||
| Private Methods |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
void AutoStart::InitAutoStart(std::string name)
|
||||
{
|
||||
|
|
@ -166,9 +168,9 @@ void AutoStart::InitAutoStart(std::string name)
|
|||
|
||||
autostart_name = name;
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Get startup applications path |
|
||||
\*-------------------------------------------------*/
|
||||
/*-----------------------------------------------------*\
|
||||
| Get startup applications path |
|
||||
\*-----------------------------------------------------*/
|
||||
HRESULT result = SHGetFolderPathA(NULL, CSIDL_PROGRAMS, NULL, 0, startMenuPath);
|
||||
|
||||
if(SUCCEEDED(result))
|
||||
|
|
@ -183,10 +185,10 @@ void AutoStart::InitAutoStart(std::string name)
|
|||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Convert an UTF8 string to a wide Unicode String |
|
||||
| (from wmi.cpp) |
|
||||
\*-----------------------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| Convert an UTF8 string to a wide Unicode String |
|
||||
| (from wmi.cpp) |
|
||||
\*---------------------------------------------------------*/
|
||||
std::wstring AutoStart::utf8_decode(const std::string& str)
|
||||
{
|
||||
if(str.empty())
|
||||
|
|
@ -197,8 +199,8 @@ std::wstring AutoStart::utf8_decode(const std::string& str)
|
|||
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int) str.size(), nullptr, 0);
|
||||
|
||||
std::wstring wstrTo(size_needed, 0);
|
||||
|
||||
|
||||
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int) str.size(), &wstrTo[0], size_needed);
|
||||
|
||||
|
||||
return(wstrTo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AutoStart-Windows.h |
|
||||
| |
|
||||
| Autostart implementation for Windows |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
#include "AutoStart.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AutoStart.cpp |
|
||||
| |
|
||||
| Autostart common implementation |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Common AutoStart Implementation |
|
||||
| Public Methods |
|
||||
\*-----------------------------------------------------*/
|
||||
#include "AutoStart.h"
|
||||
|
||||
std::string AutoStartInterface::GetAutoStartFile()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AutoStart.h |
|
||||
| |
|
||||
| Autostart common implementation |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ To create a merge request, log into GitLab and fork the OpenRGB project. Push y
|
|||
* Mark your merge request as a draft (start title with "Draft:") until it has been tested and verified working.
|
||||
* Follow the Style Guidelines below when making your code changes.
|
||||
* Avoid using `git merge` when updating your fork. The OpenRGB project uses a linear git history, meaning all changes are rebased onto the tip of master. By using `git rebase` to update your fork, you will make it easier to accept merge requests.
|
||||
* Do not submit a merge request using your fork's `master` branch as the source. The `master` branch is protected by default when creating a fork and I cannot manually rebase a protected branch before merging. If you submit a merge request with a protected `master` branch as the source, it may not get merged until you unprotect it.
|
||||
|
||||
### Pipelines, Shared Runners and Quotas
|
||||
|
||||
|
|
@ -66,3 +67,8 @@ OpenRGB is written in C++, uses the Qt framework for UI, and uses the QMake buil
|
|||
| This is a comment |
|
||||
\*_-------------------------------*/
|
||||
```
|
||||
|
||||
## Translating
|
||||
|
||||
Translation files are located in [`OpenRGB/qt/i18n/`](https://gitlab.com/CalcProgrammer1/OpenRGB/-/tree/master/qt/i18n), where languages are formatted using ISO 639-1 format: `OpenRGB_xx_XX.ts` — `xx_XX` representing the language code.
|
||||
In order to translate a file, you need to [fork](https://gitlab.com/CalcProgrammer1/OpenRGB/-/forks/new) the project, create a new file for your language with `lupdate` (or edit an exisiting one), edit the file with `qtlinguist`, commit, push, and create a merge request.
|
||||
|
|
|
|||
9
Colors.h
9
Colors.h
|
|
@ -1,3 +1,12 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| Colors.h |
|
||||
| |
|
||||
| List of named color constants |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#ifndef COLORS_H
|
||||
#define COLORS_H
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,26 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| A4TechDetector.cpp |
|
||||
| |
|
||||
| Detector for A4Tech Devices |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| Mohammed Julfikar Ali Mahbub (o-julfikar) 01 Apr 2024 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| OpenRGB includes |
|
||||
\*-----------------------------------------------------*/
|
||||
#include <hidapi/hidapi.h>
|
||||
#include <hidapi.h>
|
||||
#include "Detector.h"
|
||||
#include "LogManager.h"
|
||||
#include "RGBController.h"
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| A4 Tech specific includes |
|
||||
\*-----------------------------------------------------*/
|
||||
#include "RGBController_BloodyMouse.h"
|
||||
#include "RGBController_BloodyB820R.h"
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| A4 Tech USB vendor ID |
|
||||
|
|
@ -22,13 +33,29 @@ void DetectA4TechMouseControllers(hid_device_info* info, const std::string& name
|
|||
|
||||
if(dev)
|
||||
{
|
||||
BloodyMouseController* controller = new BloodyMouseController(dev, info->path, info->product_id);
|
||||
BloodyMouseController* controller = new BloodyMouseController(dev, info->path, info->product_id, name);
|
||||
RGBController_BloodyMouse* rgb_controller = new RGBController_BloodyMouse(controller);
|
||||
rgb_controller->name = name;
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody W60 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W60_PRO_PID, 2, 0xFF33, 0x0529);
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody MP 50RS", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_MP_50RS_PID, 2, 0xFFF2, 0x6009);
|
||||
void DetectBloodyB820R(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
BloodyB820RController* controller = new BloodyB820RController(dev, info->path, name);
|
||||
RGBController_BloodyB820R* rgb_controller = new RGBController_BloodyB820R(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody W60 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W60_PRO_PID, 2, 0xFF33, 0x0529);
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody W70 Max", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W70_MAX_PID, 2, 0xFF33, 0x0518);
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody W90 Max", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W90_MAX_PID, 2, 0xFF33, 0x053D);
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody W90 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W90_PRO_PID, 2, 0xFF33, 0x054D);
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody MP 50RS", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_MP_50RS_PID, 2, 0xFFF2, 0x6009);
|
||||
REGISTER_HID_DETECTOR_IPU("Bloody B820R", DetectBloodyB820R, A4_TECH_VID, BLOODY_B820R_PID, 2, 0xFF52, 0x0210);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,110 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| BloodyB820RController.cpp |
|
||||
| |
|
||||
| Driver for A4Tech Bloody B820R Keyboard |
|
||||
| |
|
||||
| Mohammed Julfikar Ali Mahbub (o-julfikar) 01 Apr 2024 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "BloodyB820RController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
/*-------------------------------------------------------------------------------------*\
|
||||
| The controller for this device should pass a packet of 64 bytes where the subsequent |
|
||||
| two packets are for RED, GREEN, and BLUE respectively. The first 6 bytes are control |
|
||||
| or information bytes and colors bytes starts from index 6. Moreover, the first pack- |
|
||||
| et of each RGB contains color for 58 keys and the rest (104 - 58 == 46) are send on |
|
||||
| the second packet. |
|
||||
\*-------------------------------------------------------------------------------------*/
|
||||
|
||||
BloodyB820RController::BloodyB820RController(hid_device* dev_handle, const char* path, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
|
||||
SendControlPacket(BLOODY_B820R_GAIN_CONTROL);
|
||||
}
|
||||
|
||||
BloodyB820RController::~BloodyB820RController()
|
||||
{
|
||||
SendControlPacket(BLOODY_B820R_RELEASE_CONTROL);
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
std::string BloodyB820RController::GetSerial()
|
||||
{
|
||||
wchar_t serial_string[HID_MAX_STR];
|
||||
int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR);
|
||||
|
||||
if(ret != 0)
|
||||
{
|
||||
return("");
|
||||
}
|
||||
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
std::string BloodyB820RController::GetLocation()
|
||||
{
|
||||
return("HID: " + location);
|
||||
}
|
||||
|
||||
std::string BloodyB820RController::GetName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
void BloodyB820RController::SendControlPacket(uint8_t data)
|
||||
{
|
||||
uint8_t buffer[BLOODY_B820R_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
|
||||
buffer[BLOODY_B820R_MODE_BYTE] = 0;
|
||||
buffer[BLOODY_B820R_DATA_BYTE] = data;
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
}
|
||||
|
||||
void BloodyB820RController::SetLEDDirect(std::vector<RGBColor> colors)
|
||||
{
|
||||
|
||||
uint8_t r1_buffer[BLOODY_B820R_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x07, 0x00, 0x00 };
|
||||
uint8_t r2_buffer[BLOODY_B820R_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x08, 0x00, 0x00 };
|
||||
uint8_t g1_buffer[BLOODY_B820R_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x09, 0x00, 0x00 };
|
||||
uint8_t g2_buffer[BLOODY_B820R_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x0A, 0x00, 0x00 };
|
||||
uint8_t b1_buffer[BLOODY_B820R_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x0B, 0x00, 0x00 };
|
||||
uint8_t b2_buffer[BLOODY_B820R_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x0C, 0x00, 0x00 };
|
||||
|
||||
/*-----------------------------------------------------------------*\
|
||||
| Set up Direct packet |
|
||||
| packet_map is the index of the Key from full_matrix_map and |
|
||||
| the value is the position in the direct packet buffer |
|
||||
\*-----------------------------------------------------------------*/
|
||||
for(size_t i = 0; i < colors.size(); i++)
|
||||
{
|
||||
RGBColor color = colors[i];
|
||||
uint8_t offset = BLOODY_B820R_RGB_OFFSET;
|
||||
uint8_t buffer_idx = offset + i % BLOODY_B820R_RGB_BUFFER_SIZE;
|
||||
uint8_t* buffers[2][3] =
|
||||
{
|
||||
{r1_buffer, g1_buffer, b1_buffer},
|
||||
{r2_buffer, g2_buffer, b2_buffer}
|
||||
};
|
||||
|
||||
buffers[i >= BLOODY_B820R_RGB_BUFFER_SIZE][0][buffer_idx] = RGBGetRValue(color);
|
||||
buffers[i >= BLOODY_B820R_RGB_BUFFER_SIZE][1][buffer_idx] = RGBGetGValue(color);
|
||||
buffers[i >= BLOODY_B820R_RGB_BUFFER_SIZE][2][buffer_idx] = RGBGetBValue(color);
|
||||
}
|
||||
|
||||
hid_send_feature_report(dev, r1_buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
hid_send_feature_report(dev, r2_buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
hid_send_feature_report(dev, g1_buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
hid_send_feature_report(dev, g2_buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
hid_send_feature_report(dev, b1_buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
hid_send_feature_report(dev, b2_buffer, BLOODY_B820R_PACKET_SIZE);
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| BloodyB820RController.h |
|
||||
| |
|
||||
| Driver for A4Tech Bloody B820R Keyboard |
|
||||
| |
|
||||
| Mohammed Julfikar Ali Mahbub (o-julfikar) 01 Apr 2024 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
#define HID_MAX_STR 255
|
||||
|
||||
#define BLOODY_B820R_RGB_BUFFER_SIZE 58
|
||||
#define BLOODY_B820R_RGB_OFFSET 6
|
||||
#define BLOODY_B820R_PACKET_SIZE 64
|
||||
#define BLOODY_B820R_KEYCOUNT 104
|
||||
#define BLOODY_B820R_MODE_BYTE 3
|
||||
#define BLOODY_B820R_DATA_BYTE 8
|
||||
#define BLOODY_B820R_GAIN_CONTROL 0x01
|
||||
#define BLOODY_B820R_RELEASE_CONTROL 0x00
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Bloody B820R product ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define BLOODY_B820R_PID 0xFA10
|
||||
|
||||
enum
|
||||
{
|
||||
BLOODY_B820R_MODE_DIRECT = 0x01, // Direct LED control - Independently set LEDs in zone
|
||||
};
|
||||
|
||||
class BloodyB820RController
|
||||
{
|
||||
public:
|
||||
BloodyB820RController(hid_device* dev_handle, const char* path, std::string dev_name);
|
||||
~BloodyB820RController();
|
||||
|
||||
std::string GetSerial();
|
||||
std::string GetLocation();
|
||||
std::string GetName();
|
||||
|
||||
void SetLEDDirect(std::vector<RGBColor> colors);
|
||||
void SendControlPacket(uint8_t data);
|
||||
private:
|
||||
std::string location;
|
||||
std::string name;
|
||||
hid_device* dev;
|
||||
};
|
||||
|
|
@ -0,0 +1,253 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_BloodyB820R.cpp |
|
||||
| |
|
||||
| RGBController for A4Tech Bloody B820R Keyboard |
|
||||
| |
|
||||
| Mohammed Julfikar Ali Mahbub (o-julfikar) 01 Apr 2024 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBControllerKeyNames.h"
|
||||
#include "RGBController_BloodyB820R.h"
|
||||
|
||||
//0xFFFFFFFF indicates an unused entry in matrix
|
||||
#define NA 0xFFFFFFFF
|
||||
|
||||
static unsigned int matrix_map[6][21] =
|
||||
{
|
||||
{0, NA, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, NA, NA, NA, NA, 13, 14, 15},
|
||||
{16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36},
|
||||
{37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57},
|
||||
{58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, NA, NA, NA, NA, 71, 72, 73, NA},
|
||||
{74, NA, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, NA, NA, 86, NA, 87, 88, 89, 90},
|
||||
{91, 92, 93, 94, NA, NA, NA, NA, NA, NA, 95, 96, 97, 98, 99, 100, 101, 102, NA, 103, NA},
|
||||
};
|
||||
|
||||
static const char *led_names[] =
|
||||
{
|
||||
KEY_EN_ESCAPE, //00
|
||||
KEY_EN_F1,
|
||||
KEY_EN_F2,
|
||||
KEY_EN_F3,
|
||||
KEY_EN_F4,
|
||||
KEY_EN_F5,
|
||||
KEY_EN_F6,
|
||||
KEY_EN_F7,
|
||||
KEY_EN_F8,
|
||||
KEY_EN_F9,
|
||||
KEY_EN_F10,
|
||||
KEY_EN_F11,
|
||||
KEY_EN_F12,
|
||||
KEY_EN_PRINT_SCREEN,
|
||||
KEY_EN_SCROLL_LOCK,
|
||||
KEY_EN_PAUSE_BREAK,
|
||||
|
||||
KEY_EN_BACK_TICK, //10
|
||||
KEY_EN_1,
|
||||
KEY_EN_2,
|
||||
KEY_EN_3,
|
||||
KEY_EN_4,
|
||||
KEY_EN_5,
|
||||
KEY_EN_6,
|
||||
KEY_EN_7,
|
||||
KEY_EN_8,
|
||||
KEY_EN_9,
|
||||
KEY_EN_0,
|
||||
KEY_EN_MINUS,
|
||||
KEY_EN_EQUALS,
|
||||
KEY_EN_BACKSPACE,
|
||||
KEY_EN_INSERT,
|
||||
KEY_EN_HOME,
|
||||
KEY_EN_PAGE_UP,
|
||||
KEY_EN_NUMPAD_LOCK,
|
||||
KEY_EN_NUMPAD_DIVIDE,
|
||||
KEY_EN_NUMPAD_TIMES,
|
||||
KEY_EN_NUMPAD_MINUS,
|
||||
|
||||
KEY_EN_TAB, //20
|
||||
KEY_EN_Q,
|
||||
KEY_EN_W,
|
||||
KEY_EN_E,
|
||||
KEY_EN_R,
|
||||
KEY_EN_T,
|
||||
KEY_EN_Y,
|
||||
KEY_EN_U,
|
||||
KEY_EN_I,
|
||||
KEY_EN_O,
|
||||
KEY_EN_P,
|
||||
KEY_EN_LEFT_BRACKET,
|
||||
KEY_EN_RIGHT_BRACKET,
|
||||
KEY_EN_ANSI_BACK_SLASH,
|
||||
KEY_EN_DELETE,
|
||||
KEY_EN_END,
|
||||
KEY_EN_PAGE_DOWN,
|
||||
KEY_EN_NUMPAD_7,
|
||||
KEY_EN_NUMPAD_8,
|
||||
KEY_EN_NUMPAD_9,
|
||||
KEY_EN_NUMPAD_PLUS,
|
||||
|
||||
KEY_EN_CAPS_LOCK, //30
|
||||
KEY_EN_A,
|
||||
KEY_EN_S,
|
||||
KEY_EN_D,
|
||||
KEY_EN_F,
|
||||
KEY_EN_G,
|
||||
KEY_EN_H,
|
||||
KEY_EN_J,
|
||||
KEY_EN_K,
|
||||
KEY_EN_L,
|
||||
KEY_EN_SEMICOLON,
|
||||
KEY_EN_QUOTE,
|
||||
KEY_EN_ANSI_ENTER,
|
||||
KEY_EN_NUMPAD_4,
|
||||
KEY_EN_NUMPAD_5,
|
||||
KEY_EN_NUMPAD_6,
|
||||
|
||||
KEY_EN_LEFT_SHIFT, //40
|
||||
KEY_EN_Z,
|
||||
KEY_EN_X,
|
||||
KEY_EN_C,
|
||||
KEY_EN_V,
|
||||
KEY_EN_B,
|
||||
KEY_EN_N,
|
||||
KEY_EN_M,
|
||||
KEY_EN_COMMA,
|
||||
KEY_EN_PERIOD,
|
||||
KEY_EN_FORWARD_SLASH,
|
||||
KEY_EN_RIGHT_SHIFT,
|
||||
KEY_EN_UP_ARROW,
|
||||
KEY_EN_NUMPAD_1,
|
||||
KEY_EN_NUMPAD_2,
|
||||
KEY_EN_NUMPAD_3,
|
||||
KEY_EN_NUMPAD_ENTER,
|
||||
|
||||
KEY_EN_LEFT_CONTROL, //50
|
||||
KEY_EN_LEFT_WINDOWS,
|
||||
KEY_EN_LEFT_ALT,
|
||||
KEY_EN_SPACE,
|
||||
KEY_EN_RIGHT_ALT,
|
||||
KEY_EN_RIGHT_FUNCTION,
|
||||
KEY_EN_MENU,
|
||||
KEY_EN_RIGHT_CONTROL,
|
||||
KEY_EN_LEFT_ARROW,
|
||||
KEY_EN_DOWN_ARROW,
|
||||
KEY_EN_RIGHT_ARROW,
|
||||
KEY_EN_NUMPAD_0,
|
||||
KEY_EN_NUMPAD_PERIOD
|
||||
};
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name A4Tech Bloody B820R
|
||||
@category Keyboard
|
||||
@type USB
|
||||
@save :x:
|
||||
@direct :white_check_mark:
|
||||
@effects :x:
|
||||
@detectors DetectBloodyB820R
|
||||
@comment The A4Tech Bloody B820R keyboard controller currently
|
||||
supports the full size (ANSI layout).
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_BloodyB820R::RGBController_BloodyB820R(BloodyB820RController *controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = controller->GetName();
|
||||
vendor = "A4Tech";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "A4Tech Bloody Keyboard";
|
||||
serial = controller->GetSerial();
|
||||
location = controller->GetLocation();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = BLOODY_B820R_MODE_DIRECT;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
SetupZones();
|
||||
}
|
||||
|
||||
RGBController_BloodyB820R::~RGBController_BloodyB820R()
|
||||
{
|
||||
delete controller;
|
||||
}
|
||||
|
||||
void RGBController_BloodyB820R::SetupZones()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Create the Keyboard zone and add the matrix map |
|
||||
\*-------------------------------------------------*/
|
||||
zone KB_zone;
|
||||
KB_zone.name = ZONE_EN_KEYBOARD;
|
||||
KB_zone.type = ZONE_TYPE_MATRIX;
|
||||
KB_zone.leds_min = BLOODY_B820R_KEYCOUNT;
|
||||
KB_zone.leds_max = BLOODY_B820R_KEYCOUNT;
|
||||
KB_zone.leds_count = BLOODY_B820R_KEYCOUNT;
|
||||
|
||||
KB_zone.matrix_map = new matrix_map_type;
|
||||
KB_zone.matrix_map->height = 6;
|
||||
KB_zone.matrix_map->width = 21;
|
||||
KB_zone.matrix_map->map = (unsigned int *)&matrix_map;
|
||||
zones.push_back(KB_zone);
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| Clear any existing color/LED configuration |
|
||||
\*-------------------------------------------------*/
|
||||
leds.clear();
|
||||
colors.clear();
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Set up zones |
|
||||
\*---------------------------------------------------------*/
|
||||
for(unsigned int led_index = 0; led_index < BLOODY_B820R_KEYCOUNT; led_index++)
|
||||
{
|
||||
led new_led;
|
||||
new_led.name = led_names[led_index];
|
||||
new_led.value = led_index;
|
||||
leds.push_back(new_led);
|
||||
}
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_BloodyB820R::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
|
||||
void RGBController_BloodyB820R::DeviceUpdateLEDs()
|
||||
{
|
||||
controller->SetLEDDirect(colors);
|
||||
}
|
||||
|
||||
void RGBController_BloodyB820R::UpdateZoneLEDs(int zone)
|
||||
{
|
||||
std::vector<RGBColor> colour;
|
||||
|
||||
for(size_t i = 0; i < zones[zone].leds_count; i++)
|
||||
{
|
||||
colour.push_back(zones[zone].colors[i]);
|
||||
}
|
||||
|
||||
controller->SetLEDDirect(colour);
|
||||
}
|
||||
|
||||
void RGBController_BloodyB820R::UpdateSingleLED(int led)
|
||||
{
|
||||
std::vector<RGBColor> colour;
|
||||
colour.push_back(colors[led]);
|
||||
|
||||
controller->SetLEDDirect(colour);
|
||||
}
|
||||
|
||||
void RGBController_BloodyB820R::DeviceUpdateMode()
|
||||
{
|
||||
/* This device does not support modes yet */
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_BloodyB820R.h |
|
||||
| |
|
||||
| RGBController for A4Tech Bloody B820R Keyboard |
|
||||
| |
|
||||
| Mohammed Julfikar Ali Mahbub (o-julfikar) 01 Apr 2024 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "RGBController.h"
|
||||
#include "BloodyB820RController.h"
|
||||
|
||||
class RGBController_BloodyB820R : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_BloodyB820R(BloodyB820RController* controller_ptr);
|
||||
~RGBController_BloodyB820R();
|
||||
|
||||
void SetupZones();
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
BloodyB820RController* controller;
|
||||
};
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
/*---------------------------------------------------------------------*\
|
||||
| BloodyMouseController.cpp |
|
||||
| |
|
||||
| Driver for BloodyMouse USB Controller |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
#include "BloodyMouseController.h"
|
||||
|
||||
BloodyMouseController::BloodyMouseController(hid_device* dev_handle, const char* path, uint16_t product_id)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
pid = product_id;
|
||||
|
||||
InitDevice();
|
||||
}
|
||||
|
||||
BloodyMouseController::~BloodyMouseController()
|
||||
{
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
uint16_t BloodyMouseController::GetPid()
|
||||
{
|
||||
return pid;
|
||||
}
|
||||
|
||||
std::string BloodyMouseController::GetSerial()
|
||||
{
|
||||
const uint8_t sz = HID_MAX_STR;
|
||||
wchar_t tmp[sz];
|
||||
|
||||
int ret = hid_get_serial_number_string(dev, tmp, sz);
|
||||
|
||||
if (ret != 0)
|
||||
{
|
||||
LOG_DEBUG("[BloodyMouse] Get HID Serial string failed");
|
||||
return("");
|
||||
}
|
||||
|
||||
std::wstring w_tmp = std::wstring(tmp);
|
||||
std::string serial = std::string(w_tmp.begin(), w_tmp.end());
|
||||
|
||||
return serial;
|
||||
}
|
||||
|
||||
std::string BloodyMouseController::GetLocation()
|
||||
{
|
||||
return("HID: " + location);
|
||||
}
|
||||
|
||||
void BloodyMouseController::InitDevice()
|
||||
{
|
||||
uint8_t buffer[BLOODYMOUSE_WRITE_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODYMOUSE_WRITE_PACKET_SIZE);
|
||||
|
||||
buffer[BLOODYMOUSE_MODE_BYTE] = 0;
|
||||
buffer[BLOODYMOUSE_DATA_BYTE] = 1;
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODYMOUSE_WRITE_PACKET_SIZE);
|
||||
}
|
||||
|
||||
void BloodyMouseController::SetLedsDirect(std::vector<RGBColor> colors)
|
||||
{
|
||||
uint8_t buffer[BLOODYMOUSE_WRITE_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
for(uint8_t i = 0; i < colors.size(); i++)
|
||||
{
|
||||
uint8_t offset = 3 * (colors[i] >> 24) + BLOODYMOUSE_DATA_BYTE;
|
||||
|
||||
buffer[offset] = RGBGetRValue(colors[i]);
|
||||
buffer[offset + 1] = RGBGetGValue(colors[i]);
|
||||
buffer[offset + 2] = RGBGetBValue(colors[i]);
|
||||
}
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODYMOUSE_WRITE_PACKET_SIZE);
|
||||
}
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
/*---------------------------------------------------------------------*\
|
||||
| BloodyMouseController.h |
|
||||
| |
|
||||
| Driver for BloodyMouse USB Controller |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
#include <string>
|
||||
#include <hidapi/hidapi.h>
|
||||
#include "LogManager.h"
|
||||
#include "RGBController.h"
|
||||
|
||||
#pragma once
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Mouse product IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define BLOODY_W60_PRO_PID 0x37EA
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Mousemat product IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define BLOODY_MP_50RS_PID 0xFA60
|
||||
|
||||
#define HID_MAX_STR 255
|
||||
#define BLOODYMOUSE_WRITE_PACKET_SIZE 64
|
||||
|
||||
#define BLOODYMOUSE_BRIGHTNESS_MIN 0
|
||||
#define BLOODYMOUSE_BRIGHTNESS_MAX 255
|
||||
|
||||
enum
|
||||
{
|
||||
BLOODYMOUSE_MODE_DIRECT = 0x01, //Direct Led Control - Independently set LEDs in zone
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BLOODYMOUSE_REPORT_BYTE = 1,
|
||||
BLOODYMOUSE_COMMAND_BYTE = 2,
|
||||
BLOODYMOUSE_MODE_BYTE = 3,
|
||||
BLOODYMOUSE_DATA_BYTE = 8,
|
||||
};
|
||||
|
||||
class BloodyMouseController
|
||||
{
|
||||
public:
|
||||
BloodyMouseController(hid_device* dev_handle, const char* path, uint16_t product_id);
|
||||
~BloodyMouseController();
|
||||
|
||||
uint16_t GetPid();
|
||||
std::string GetSerial();
|
||||
std::string GetLocation();
|
||||
|
||||
void SetLedsDirect(std::vector<RGBColor> colors);
|
||||
private:
|
||||
uint16_t pid;
|
||||
std::string location;
|
||||
hid_device* dev;
|
||||
|
||||
void InitDevice();
|
||||
};
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| BloodyMouseController.cpp |
|
||||
| |
|
||||
| Driver for A4Tech Bloody Mouse |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "BloodyMouseController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
BloodyMouseController::BloodyMouseController(hid_device* dev_handle, const char* path, uint16_t product_id, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
pid = product_id;
|
||||
name = dev_name;
|
||||
|
||||
InitDevice();
|
||||
}
|
||||
|
||||
BloodyMouseController::~BloodyMouseController()
|
||||
{
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
uint16_t BloodyMouseController::GetPid()
|
||||
{
|
||||
return(pid);
|
||||
}
|
||||
|
||||
std::string BloodyMouseController::GetSerial()
|
||||
{
|
||||
wchar_t serial_string[HID_MAX_STR];
|
||||
int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR);
|
||||
|
||||
if(ret != 0)
|
||||
{
|
||||
return("");
|
||||
}
|
||||
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
std::string BloodyMouseController::GetLocation()
|
||||
{
|
||||
return("HID: " + location);
|
||||
}
|
||||
|
||||
std::string BloodyMouseController::GetName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
void BloodyMouseController::InitDevice()
|
||||
{
|
||||
uint8_t buffer[BLOODYMOUSE_WRITE_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODYMOUSE_WRITE_PACKET_SIZE);
|
||||
|
||||
buffer[BLOODYMOUSE_MODE_BYTE] = 0;
|
||||
buffer[BLOODYMOUSE_DATA_BYTE] = 1;
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODYMOUSE_WRITE_PACKET_SIZE);
|
||||
}
|
||||
|
||||
void BloodyMouseController::SetLedsDirect(std::vector<RGBColor> colors)
|
||||
{
|
||||
uint8_t buffer[BLOODYMOUSE_WRITE_PACKET_SIZE] = { 0x07, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
for(uint8_t i = 0; i < colors.size(); i++)
|
||||
{
|
||||
uint8_t offset = 3 * (colors[i] >> 24) + BLOODYMOUSE_DATA_BYTE;
|
||||
|
||||
buffer[offset] = RGBGetRValue(colors[i]);
|
||||
buffer[offset + 1] = RGBGetGValue(colors[i]);
|
||||
buffer[offset + 2] = RGBGetBValue(colors[i]);
|
||||
}
|
||||
|
||||
hid_send_feature_report(dev, buffer, BLOODYMOUSE_WRITE_PACKET_SIZE);
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| BloodyMouseController.h |
|
||||
| |
|
||||
| Driver for A4Tech Bloody Mouse |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Mouse product IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define BLOODY_W60_PRO_PID 0x37EA
|
||||
#define BLOODY_W70_MAX_PID 0x79EF
|
||||
#define BLOODY_W90_MAX_PID 0x3666
|
||||
#define BLOODY_W90_PRO_PID 0x39B6
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Mousemat product IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define BLOODY_MP_50RS_PID 0xFA60
|
||||
|
||||
#define HID_MAX_STR 255
|
||||
#define BLOODYMOUSE_WRITE_PACKET_SIZE 64
|
||||
|
||||
#define BLOODYMOUSE_BRIGHTNESS_MIN 0
|
||||
#define BLOODYMOUSE_BRIGHTNESS_MAX 255
|
||||
|
||||
enum
|
||||
{
|
||||
BLOODYMOUSE_MODE_DIRECT = 0x01, //Direct Led Control - Independently set LEDs in zone
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BLOODYMOUSE_REPORT_BYTE = 1,
|
||||
BLOODYMOUSE_COMMAND_BYTE = 2,
|
||||
BLOODYMOUSE_MODE_BYTE = 3,
|
||||
BLOODYMOUSE_DATA_BYTE = 8,
|
||||
};
|
||||
|
||||
class BloodyMouseController
|
||||
{
|
||||
public:
|
||||
BloodyMouseController(hid_device* dev_handle, const char* path, uint16_t product_id, std::string dev_name);
|
||||
~BloodyMouseController();
|
||||
|
||||
uint16_t GetPid();
|
||||
std::string GetSerial();
|
||||
std::string GetLocation();
|
||||
std::string GetName();
|
||||
|
||||
void SetLedsDirect(std::vector<RGBColor> colors);
|
||||
|
||||
private:
|
||||
uint16_t pid;
|
||||
std::string location;
|
||||
std::string name;
|
||||
hid_device* dev;
|
||||
|
||||
void InitDevice();
|
||||
};
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
/*---------------------------------------------------------------------*\
|
||||
| RGBController_BloodyMouse.cpp |
|
||||
| |
|
||||
| Driver for BloodyMouse USB Controller |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
\*---------------------------------------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_BloodyMouse.cpp |
|
||||
| |
|
||||
| RGBController for A4Tech Bloody Mouse |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_BloodyMouse.h"
|
||||
|
||||
|
|
@ -25,6 +27,19 @@ static const mouse_layout w60_pro
|
|||
}
|
||||
};
|
||||
|
||||
static const mouse_layout w90_max
|
||||
{
|
||||
{
|
||||
"Scroll Wheel", { 14 }
|
||||
},
|
||||
{
|
||||
"Logo", { 7 }
|
||||
},
|
||||
{
|
||||
"Rear", { 13, 12, 11, 10, 9, 8, 6, 5, 4, 3, 2, 1, 0 }
|
||||
}
|
||||
};
|
||||
|
||||
static const mouse_layout mp_50rs
|
||||
{
|
||||
{
|
||||
|
|
@ -56,7 +71,7 @@ RGBController_BloodyMouse::RGBController_BloodyMouse(BloodyMouseController *cont
|
|||
type = DEVICE_TYPE_MOUSE;
|
||||
}
|
||||
|
||||
name = "BloodyMouse";
|
||||
name = controller->GetName();
|
||||
vendor = "Bloody";
|
||||
description = "Controller compatible with the Bloody W60 Pro and MP 50RS";
|
||||
serial = controller->GetSerial();
|
||||
|
|
@ -89,11 +104,17 @@ void RGBController_BloodyMouse::SetupZones()
|
|||
| Select layout from PID |
|
||||
\*-------------------------------------------------*/
|
||||
mouse_layout layout;
|
||||
|
||||
switch(controller->GetPid())
|
||||
{
|
||||
case BLOODY_W60_PRO_PID:
|
||||
layout = w60_pro;
|
||||
break;
|
||||
case BLOODY_W70_MAX_PID:
|
||||
case BLOODY_W90_MAX_PID:
|
||||
case BLOODY_W90_PRO_PID:
|
||||
layout = w90_max;
|
||||
break;
|
||||
case BLOODY_MP_50RS_PID:
|
||||
layout = mp_50rs;
|
||||
break;
|
||||
|
|
@ -109,7 +130,7 @@ void RGBController_BloodyMouse::SetupZones()
|
|||
|
||||
zone new_zone;
|
||||
new_zone.name = mz.name;
|
||||
new_zone.leds_min = mz.zone_leds.size();
|
||||
new_zone.leds_min = (unsigned int)mz.zone_leds.size();
|
||||
new_zone.leds_max = new_zone.leds_min;
|
||||
new_zone.leds_count = new_zone.leds_min;
|
||||
new_zone.type = bool_single ? ZONE_TYPE_SINGLE : ZONE_TYPE_LINEAR;
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_BloodyMouse.h |
|
||||
| |
|
||||
| RGBController for A4Tech Bloody Mouse |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "RGBController.h"
|
||||
#include "BloodyMouseController.h"
|
||||
|
||||
struct mouse_zone
|
||||
{
|
||||
std::string name;
|
||||
std::vector<uint8_t> zone_leds;
|
||||
};
|
||||
|
||||
typedef std::vector<mouse_zone> mouse_layout;
|
||||
|
||||
class RGBController_BloodyMouse : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_BloodyMouse(BloodyMouseController* controller_ptr);
|
||||
~RGBController_BloodyMouse();
|
||||
|
||||
void SetupZones();
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
BloodyMouseController* controller;
|
||||
};
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
/*---------------------------------------------------------------------*\
|
||||
| RGBController_BloodyMouse.h |
|
||||
| |
|
||||
| Driver for BloodyMouse USB Controller |
|
||||
| |
|
||||
| Chris M (Dr_No) 30 Jun 2022 |
|
||||
| |
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include "LogManager.h"
|
||||
#include "RGBController.h"
|
||||
#include "BloodyMouseController.h"
|
||||
|
||||
struct mouse_zone
|
||||
{
|
||||
std::string name;
|
||||
std::vector<uint8_t> zone_leds;
|
||||
};
|
||||
|
||||
typedef std::vector<mouse_zone> mouse_layout;
|
||||
|
||||
class RGBController_BloodyMouse : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_BloodyMouse(BloodyMouseController* controller_ptr);
|
||||
~RGBController_BloodyMouse();
|
||||
|
||||
void SetupZones();
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
BloodyMouseController* controller;
|
||||
};
|
||||
195
Controllers/AMBXController/AMBXController.cpp
Normal file
195
Controllers/AMBXController/AMBXController.cpp
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AMBXController.cpp |
|
||||
| |
|
||||
| Driver for Philips amBX Gaming lights |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "AMBXController.h"
|
||||
#include "LogManager.h"
|
||||
#include "StringUtils.h"
|
||||
#include <cstring>
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
|
||||
AMBXController::AMBXController(const char* path)
|
||||
{
|
||||
initialized = false;
|
||||
usb_context = nullptr;
|
||||
dev_handle = nullptr;
|
||||
|
||||
location = "USB: ";
|
||||
location += path;
|
||||
|
||||
// Initialize libusb in this instance
|
||||
if(libusb_init(&usb_context) < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the device list
|
||||
libusb_device** device_list;
|
||||
ssize_t device_count = libusb_get_device_list(usb_context, &device_list);
|
||||
|
||||
if(device_count < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(ssize_t i = 0; i < device_count; i++)
|
||||
{
|
||||
libusb_device* device = device_list[i];
|
||||
struct libusb_device_descriptor desc;
|
||||
|
||||
if(libusb_get_device_descriptor(device, &desc) != LIBUSB_SUCCESS)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(desc.idVendor == AMBX_VID && desc.idProduct == AMBX_PID)
|
||||
{
|
||||
uint8_t bus = libusb_get_bus_number(device);
|
||||
uint8_t address = libusb_get_device_address(device);
|
||||
|
||||
char current_path[32];
|
||||
snprintf(current_path, sizeof(current_path), "%d-%d", bus, address);
|
||||
|
||||
if(strcmp(path, current_path) == 0)
|
||||
{
|
||||
// Try to open this device
|
||||
if(libusb_open(device, &dev_handle) != LIBUSB_SUCCESS)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Try to detach the kernel driver if attached
|
||||
if(libusb_kernel_driver_active(dev_handle, 0))
|
||||
{
|
||||
libusb_detach_kernel_driver(dev_handle, 0);
|
||||
}
|
||||
|
||||
// Set auto-detach for Windows compatibility
|
||||
libusb_set_auto_detach_kernel_driver(dev_handle, 1);
|
||||
|
||||
// Claim the interface
|
||||
if(libusb_claim_interface(dev_handle, 0) != LIBUSB_SUCCESS)
|
||||
{
|
||||
libusb_close(dev_handle);
|
||||
dev_handle = nullptr;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get string descriptor for serial number if available
|
||||
if(desc.iSerialNumber != 0)
|
||||
{
|
||||
unsigned char serial_str[256];
|
||||
int serial_result = libusb_get_string_descriptor_ascii(dev_handle, desc.iSerialNumber,
|
||||
serial_str, sizeof(serial_str));
|
||||
if(serial_result > 0)
|
||||
{
|
||||
serial = std::string(reinterpret_cast<char*>(serial_str), serial_result);
|
||||
}
|
||||
}
|
||||
|
||||
// Successfully opened and claimed the device
|
||||
initialized = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
libusb_free_device_list(device_list, 1);
|
||||
}
|
||||
|
||||
AMBXController::~AMBXController()
|
||||
{
|
||||
if(initialized)
|
||||
{
|
||||
// Turn off all lights before closing
|
||||
unsigned int led_ids[5] =
|
||||
{
|
||||
AMBX_LIGHT_LEFT,
|
||||
AMBX_LIGHT_RIGHT,
|
||||
AMBX_LIGHT_WALL_LEFT,
|
||||
AMBX_LIGHT_WALL_CENTER,
|
||||
AMBX_LIGHT_WALL_RIGHT
|
||||
};
|
||||
|
||||
RGBColor colors[5] = { 0, 0, 0, 0, 0 };
|
||||
SetLEDColors(led_ids, colors, 5);
|
||||
}
|
||||
|
||||
if(dev_handle != nullptr)
|
||||
{
|
||||
// Release the interface
|
||||
libusb_release_interface(dev_handle, 0);
|
||||
|
||||
// Close the device
|
||||
libusb_close(dev_handle);
|
||||
dev_handle = nullptr;
|
||||
}
|
||||
|
||||
if(usb_context != nullptr)
|
||||
{
|
||||
libusb_exit(usb_context);
|
||||
usb_context = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
std::string AMBXController::GetDeviceLocation()
|
||||
{
|
||||
return location;
|
||||
}
|
||||
|
||||
std::string AMBXController::GetSerialString()
|
||||
{
|
||||
return serial;
|
||||
}
|
||||
|
||||
bool AMBXController::IsInitialized()
|
||||
{
|
||||
return initialized;
|
||||
}
|
||||
|
||||
void AMBXController::SendPacket(unsigned char* packet, unsigned int size)
|
||||
{
|
||||
if(!initialized || dev_handle == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int actual_length = 0;
|
||||
libusb_interrupt_transfer(dev_handle, AMBX_ENDPOINT_OUT, packet, size, &actual_length, 100);
|
||||
}
|
||||
|
||||
void AMBXController::SetLEDColor(unsigned int led, RGBColor color)
|
||||
{
|
||||
if(!initialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned char color_buf[6] =
|
||||
{
|
||||
AMBX_PACKET_HEADER,
|
||||
static_cast<unsigned char>(led),
|
||||
AMBX_SET_COLOR,
|
||||
(unsigned char)RGBGetRValue(color),
|
||||
(unsigned char)RGBGetGValue(color),
|
||||
(unsigned char)RGBGetBValue(color)
|
||||
};
|
||||
|
||||
SendPacket(color_buf, 6);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
||||
}
|
||||
|
||||
void AMBXController::SetLEDColors(unsigned int* leds, RGBColor* colors, unsigned int count)
|
||||
{
|
||||
for(unsigned int i = 0; i < count; i++)
|
||||
{
|
||||
SetLEDColor(leds[i], colors[i]);
|
||||
}
|
||||
}
|
||||
57
Controllers/AMBXController/AMBXController.h
Normal file
57
Controllers/AMBXController/AMBXController.h
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AMBXController.h |
|
||||
| |
|
||||
| Driver for Philips amBX Gaming lights |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include <string>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "dependencies/libusb-1.0.27/include/libusb.h"
|
||||
#else
|
||||
#include <libusb.h>
|
||||
#endif
|
||||
|
||||
#define AMBX_VID 0x0471
|
||||
#define AMBX_PID 0x083F
|
||||
#define AMBX_ENDPOINT_OUT 0x02
|
||||
#define AMBX_PACKET_HEADER 0xA1
|
||||
#define AMBX_SET_COLOR 0x03
|
||||
|
||||
enum
|
||||
{
|
||||
AMBX_LIGHT_LEFT = 0x0B,
|
||||
AMBX_LIGHT_RIGHT = 0x1B,
|
||||
AMBX_LIGHT_WALL_LEFT = 0x2B,
|
||||
AMBX_LIGHT_WALL_CENTER = 0x3B,
|
||||
AMBX_LIGHT_WALL_RIGHT = 0x4B
|
||||
};
|
||||
|
||||
class AMBXController
|
||||
{
|
||||
public:
|
||||
AMBXController(const char* path);
|
||||
~AMBXController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetSerialString();
|
||||
|
||||
bool IsInitialized();
|
||||
void SetLEDColor(unsigned int led, RGBColor color);
|
||||
void SetLEDColors(unsigned int* leds, RGBColor* colors, unsigned int count);
|
||||
|
||||
private:
|
||||
libusb_context* usb_context;
|
||||
libusb_device_handle* dev_handle;
|
||||
std::string location;
|
||||
std::string serial;
|
||||
bool initialized;
|
||||
|
||||
void SendPacket(unsigned char* packet, unsigned int size);
|
||||
};
|
||||
83
Controllers/AMBXController/AMBXControllerDetect.cpp
Normal file
83
Controllers/AMBXController/AMBXControllerDetect.cpp
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AMBXControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for Philips amBX Gaming lights |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AMBXController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_AMBX.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "dependencies/libusb-1.0.27/include/libusb.h"
|
||||
#else
|
||||
#include <libusb.h>
|
||||
#endif
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
* DetectAMBXControllers *
|
||||
* *
|
||||
* Detect Philips amBX Gaming devices *
|
||||
* *
|
||||
\******************************************************************************************/
|
||||
|
||||
void DetectAMBXControllers()
|
||||
{
|
||||
libusb_context* ctx = NULL;
|
||||
|
||||
if(libusb_init(&ctx) < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
libusb_device** devs;
|
||||
ssize_t num_devs = libusb_get_device_list(ctx, &devs);
|
||||
|
||||
if(num_devs <= 0)
|
||||
{
|
||||
libusb_exit(ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
for(ssize_t i = 0; i < num_devs; i++)
|
||||
{
|
||||
libusb_device* dev = devs[i];
|
||||
libusb_device_descriptor desc;
|
||||
|
||||
if(libusb_get_device_descriptor(dev, &desc) != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(desc.idVendor == AMBX_VID && desc.idProduct == AMBX_PID)
|
||||
{
|
||||
uint8_t bus = libusb_get_bus_number(dev);
|
||||
uint8_t address = libusb_get_device_address(dev);
|
||||
char device_path[32];
|
||||
snprintf(device_path, sizeof(device_path), "%d-%d", bus, address);
|
||||
|
||||
// Use the AMBXController to handle opening and initializing
|
||||
AMBXController* controller = new AMBXController(device_path);
|
||||
|
||||
if(controller->IsInitialized())
|
||||
{
|
||||
RGBController_AMBX* rgb_controller = new RGBController_AMBX(controller);
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
else
|
||||
{
|
||||
delete controller;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
libusb_free_device_list(devs, 1);
|
||||
libusb_exit(ctx);
|
||||
}
|
||||
|
||||
REGISTER_DETECTOR("Philips amBX", DetectAMBXControllers);
|
||||
179
Controllers/AMBXController/RGBController_AMBX.cpp
Normal file
179
Controllers/AMBXController/RGBController_AMBX.cpp
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_AMBX.cpp |
|
||||
| |
|
||||
| RGB Controller for Philips amBX Gaming lights |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_AMBX.h"
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name Philips amBX
|
||||
@category Accessory
|
||||
@type USB
|
||||
@save :x:
|
||||
@direct :white_check_mark:
|
||||
@effects :x:
|
||||
@detectors DetectAMBXControllers
|
||||
@comment The Philips amBX Gaming lights system includes left and right
|
||||
lights and a wall-washer bar with three zones.
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_AMBX::RGBController_AMBX(AMBXController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "Philips amBX";
|
||||
vendor = "Philips";
|
||||
type = DEVICE_TYPE_ACCESSORY;
|
||||
description = "Philips amBX Gaming Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = 0;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
SetupZones();
|
||||
}
|
||||
|
||||
RGBController_AMBX::~RGBController_AMBX()
|
||||
{
|
||||
delete controller;
|
||||
}
|
||||
|
||||
void RGBController_AMBX::SetupZones()
|
||||
{
|
||||
// Set up zones
|
||||
zone side_lights_zone;
|
||||
side_lights_zone.name = "Side Lights";
|
||||
side_lights_zone.type = ZONE_TYPE_LINEAR;
|
||||
side_lights_zone.leds_min = 2;
|
||||
side_lights_zone.leds_max = 2;
|
||||
side_lights_zone.leds_count = 2;
|
||||
side_lights_zone.matrix_map = NULL;
|
||||
zones.push_back(side_lights_zone);
|
||||
|
||||
zone wallwasher_zone;
|
||||
wallwasher_zone.name = "Wallwasher";
|
||||
wallwasher_zone.type = ZONE_TYPE_LINEAR;
|
||||
wallwasher_zone.leds_min = 3;
|
||||
wallwasher_zone.leds_max = 3;
|
||||
wallwasher_zone.leds_count = 3;
|
||||
wallwasher_zone.matrix_map = NULL;
|
||||
zones.push_back(wallwasher_zone);
|
||||
|
||||
// Set up LEDs
|
||||
led left_light;
|
||||
left_light.name = "Left";
|
||||
left_light.value = AMBX_LIGHT_LEFT;
|
||||
leds.push_back(left_light);
|
||||
|
||||
led right_light;
|
||||
right_light.name = "Right";
|
||||
right_light.value = AMBX_LIGHT_RIGHT;
|
||||
leds.push_back(right_light);
|
||||
|
||||
led wall_left;
|
||||
wall_left.name = "Wall Left";
|
||||
wall_left.value = AMBX_LIGHT_WALL_LEFT;
|
||||
leds.push_back(wall_left);
|
||||
|
||||
led wall_center;
|
||||
wall_center.name = "Wall Center";
|
||||
wall_center.value = AMBX_LIGHT_WALL_CENTER;
|
||||
leds.push_back(wall_center);
|
||||
|
||||
led wall_right;
|
||||
wall_right.name = "Wall Right";
|
||||
wall_right.value = AMBX_LIGHT_WALL_RIGHT;
|
||||
leds.push_back(wall_right);
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_AMBX::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
// This device does not support resizing zones
|
||||
}
|
||||
|
||||
void RGBController_AMBX::DeviceUpdateLEDs()
|
||||
{
|
||||
if(!controller->IsInitialized())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int led_values[5];
|
||||
RGBColor led_colors[5];
|
||||
|
||||
for(unsigned int led_idx = 0; led_idx < leds.size(); led_idx++)
|
||||
{
|
||||
led_values[led_idx] = leds[led_idx].value;
|
||||
led_colors[led_idx] = colors[led_idx];
|
||||
}
|
||||
|
||||
controller->SetLEDColors(led_values, led_colors, static_cast<unsigned int>(leds.size()));
|
||||
}
|
||||
|
||||
void RGBController_AMBX::UpdateZoneLEDs(int zone)
|
||||
{
|
||||
if(!controller->IsInitialized())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int start_idx = 0;
|
||||
unsigned int zone_size = 0;
|
||||
|
||||
// Calculate start index and size
|
||||
for(unsigned int z_idx = 0; z_idx < zones.size(); z_idx++)
|
||||
{
|
||||
if(z_idx == (unsigned int)zone)
|
||||
{
|
||||
zone_size = zones[z_idx].leds_count;
|
||||
break;
|
||||
}
|
||||
|
||||
start_idx += zones[z_idx].leds_count;
|
||||
}
|
||||
|
||||
unsigned int led_values[5];
|
||||
RGBColor led_colors[5];
|
||||
|
||||
for(unsigned int led_idx = 0; led_idx < zone_size; led_idx++)
|
||||
{
|
||||
unsigned int current_idx = start_idx + led_idx;
|
||||
led_values[led_idx] = leds[current_idx].value;
|
||||
led_colors[led_idx] = colors[current_idx];
|
||||
}
|
||||
|
||||
controller->SetLEDColors(led_values, led_colors, zone_size);
|
||||
}
|
||||
|
||||
void RGBController_AMBX::UpdateSingleLED(int led)
|
||||
{
|
||||
if(!controller->IsInitialized())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int led_value = leds[led].value;
|
||||
RGBColor color = colors[led];
|
||||
controller->SetLEDColor(led_value, color);
|
||||
}
|
||||
|
||||
void RGBController_AMBX::DeviceUpdateMode()
|
||||
{
|
||||
if(!controller->IsInitialized())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
32
Controllers/AMBXController/RGBController_AMBX.h
Normal file
32
Controllers/AMBXController/RGBController_AMBX.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_AMBX.h |
|
||||
| |
|
||||
| RGB Controller for Philips amBX Gaming lights |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "AMBXController.h"
|
||||
|
||||
class RGBController_AMBX : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_AMBX(AMBXController* controller_ptr);
|
||||
~RGBController_AMBX();
|
||||
|
||||
void SetupZones();
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
AMBXController* controller;
|
||||
};
|
||||
|
|
@ -1,21 +1,24 @@
|
|||
/*-----------------------------------------*\
|
||||
| AMDWraithPrismController.h |
|
||||
| |
|
||||
| Driver for AMD Wraith Prism RGB lighting |
|
||||
| controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/6/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| AMDWraithPrismController.cpp |
|
||||
| |
|
||||
| Driver for AMD Wraith Prism |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 06 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "AMDWraithPrismController.h"
|
||||
#include <cstring>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "AMDWraithPrismController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
AMDWraithPrismController::AMDWraithPrismController(hid_device* dev_handle, const char* path)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
|
||||
current_fan_mode = AMD_WRAITH_PRISM_FAN_LOGO_MODE_STATIC;
|
||||
current_fan_speed = 0xFF;
|
||||
|
|
@ -53,10 +56,7 @@ std::string AMDWraithPrismController::GetSerialString()
|
|||
return("");
|
||||
}
|
||||
|
||||
std::wstring return_wstring = serial_string;
|
||||
std::string return_string(return_wstring.begin(), return_wstring.end());
|
||||
|
||||
return(return_string);
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
std::string AMDWraithPrismController::GetFirmwareVersionString()
|
||||
|
|
|
|||
|
|
@ -1,19 +1,20 @@
|
|||
/*-----------------------------------------*\
|
||||
| AMDWraithPrismController.h |
|
||||
| |
|
||||
| Definitions and types for AMD Wraith |
|
||||
| Prism lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/6/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include <string>
|
||||
#include <hidapi/hidapi.h>
|
||||
|
||||
#include "RGBController.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AMDWraithPrismController.h |
|
||||
| |
|
||||
| Driver for AMD Wraith Prism |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 06 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
#define AMD_WRAITH_PRISM_FAN_BRIGHTNESS_DEFAULT_MAX 0xFF
|
||||
#define AMD_WRAITH_PRISM_FAN_BRIGHTNESS_CYCLE_MAX 0x7F
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,28 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AMDWraithPrismControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for AMD Wraith Prism |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 06 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <hidapi.h>
|
||||
#include "Detector.h"
|
||||
#include "AMDWraithPrismController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_AMDWraithPrism.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
|
||||
#define AMD_WRAITH_PRISM_VID 0x2516
|
||||
#define AMD_WRAITH_PRISM_PID 0x0051
|
||||
/*---------------------------------------------------------*\
|
||||
| AMD Wraith Prism vendor ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define AMD_WRAITH_PRISM_VID 0x2516
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| AMD Wraith Prism product ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define AMD_WRAITH_PRISM_PID 0x0051
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
|
|
@ -18,11 +35,12 @@
|
|||
void DetectAMDWraithPrismControllers(hid_device_info* info, const std::string&)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
if( dev )
|
||||
|
||||
if(dev)
|
||||
{
|
||||
AMDWraithPrismController* controller = new AMDWraithPrismController(dev, info->path);
|
||||
RGBController_AMDWraithPrism* rgb_controller = new RGBController_AMDWraithPrism(controller);
|
||||
// Constructor sets the name
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AMDWraithPrism.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for AMD Wraith |
|
||||
| Prism |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/25/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AMDWraithPrism.cpp |
|
||||
| |
|
||||
| RGBController for AMD Wraith Prism |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 25 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_AMDWraithPrism.h"
|
||||
|
||||
|
|
@ -25,14 +27,14 @@
|
|||
|
||||
RGBController_AMDWraithPrism::RGBController_AMDWraithPrism(AMDWraithPrismController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "AMD Wraith Prism";
|
||||
vendor = "Cooler Master";
|
||||
type = DEVICE_TYPE_COOLER;
|
||||
description = "AMD Wraith Prism Device";
|
||||
version = controller->GetFirmwareVersionString();
|
||||
location = controller->GetLocationString();
|
||||
name = "AMD Wraith Prism";
|
||||
vendor = "Cooler Master";
|
||||
type = DEVICE_TYPE_COOLER;
|
||||
description = "AMD Wraith Prism Device";
|
||||
version = controller->GetFirmwareVersionString();
|
||||
location = controller->GetLocationString();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
|
|
@ -138,8 +140,8 @@ void RGBController_AMDWraithPrism::SetupZones()
|
|||
/*---------------------------------------------------------*\
|
||||
| LED maps |
|
||||
\*---------------------------------------------------------*/
|
||||
const unsigned int logo_leds[1] = { 0x00 };
|
||||
const unsigned int fan_leds[1] = { 0x01 };
|
||||
const unsigned int logo_leds[1] = { 0x00 };
|
||||
const unsigned int fan_leds[1] = { 0x01 };
|
||||
const unsigned int ring_leds[14] = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x10, 0x0F,
|
||||
0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09 };
|
||||
|
||||
|
|
@ -179,24 +181,24 @@ void RGBController_AMDWraithPrism::SetupZones()
|
|||
for(unsigned int led_idx = 0; led_idx < 1; led_idx++)
|
||||
{
|
||||
led logo_led;
|
||||
logo_led.name = "Logo LED";
|
||||
logo_led.value = logo_leds[led_idx];
|
||||
logo_led.name = "Logo LED";
|
||||
logo_led.value = logo_leds[led_idx];
|
||||
leds.push_back(logo_led);
|
||||
}
|
||||
|
||||
for(unsigned int led_idx = 0; led_idx < 1; led_idx++)
|
||||
{
|
||||
led fan_led;
|
||||
fan_led.name = "Fan LED";
|
||||
fan_led.value = fan_leds[led_idx];
|
||||
fan_led.name = "Fan LED";
|
||||
fan_led.value = fan_leds[led_idx];
|
||||
leds.push_back(fan_led);
|
||||
}
|
||||
|
||||
for(unsigned int led_idx = 0; led_idx < 14; led_idx++)
|
||||
{
|
||||
led ring_led;
|
||||
ring_led.name = "Ring LED";
|
||||
ring_led.value = ring_leds[led_idx];
|
||||
ring_led.name = "Ring LED";
|
||||
ring_led.value = ring_leds[led_idx];
|
||||
leds.push_back(ring_led);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,16 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AMDWraithPrism.h |
|
||||
| |
|
||||
| Generic RGB Interface for AMD Wraith |
|
||||
| Prism |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/25/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AMDWraithPrism.h |
|
||||
| |
|
||||
| RGBController for AMD Wraith Prism |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 25 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "AMDWraithPrismController.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,27 @@
|
|||
/*-----------------------------------------*\
|
||||
| AOCKeyboardController.cpp |
|
||||
| |
|
||||
| Driver for AOC Keyboard lighting |
|
||||
| controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 5/10/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| AOCKeyboardController.cpp |
|
||||
| |
|
||||
| Driver for AOC keyboard |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 10 May 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "AOCKeyboardController.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <chrono>
|
||||
#include <cstring>
|
||||
#include <thread>
|
||||
#include "AOCKeyboardController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
AOCKeyboardController::AOCKeyboardController(hid_device* dev_handle, const char* path)
|
||||
AOCKeyboardController::AOCKeyboardController(hid_device* dev_handle, const char* path, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
}
|
||||
|
||||
AOCKeyboardController::~AOCKeyboardController()
|
||||
|
|
@ -31,6 +34,11 @@ std::string AOCKeyboardController::GetDeviceLocation()
|
|||
return("HID " + location);
|
||||
}
|
||||
|
||||
std::string AOCKeyboardController::GetDeviceName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
std::string AOCKeyboardController::GetSerialString()
|
||||
{
|
||||
wchar_t serial_string[128];
|
||||
|
|
@ -41,10 +49,7 @@ std::string AOCKeyboardController::GetSerialString()
|
|||
return("");
|
||||
}
|
||||
|
||||
std::wstring return_wstring = serial_string;
|
||||
std::string return_string(return_wstring.begin(), return_wstring.end());
|
||||
|
||||
return(return_string);
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
void AOCKeyboardController::SetLightingConfig
|
||||
|
|
|
|||
|
|
@ -1,18 +1,20 @@
|
|||
/*-----------------------------------------*\
|
||||
| AOCKeyboardController.h |
|
||||
| |
|
||||
| Definitions and types for AOC keyboard |
|
||||
| lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 5/10/2023 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| AOCKeyboardController.h |
|
||||
| |
|
||||
| Driver for AOC keyboard |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 10 May 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*-----------------------------------------*\
|
||||
| AOC Keyboard Modes |
|
||||
\*-----------------------------------------*/
|
||||
|
|
@ -62,10 +64,11 @@ enum
|
|||
class AOCKeyboardController
|
||||
{
|
||||
public:
|
||||
AOCKeyboardController(hid_device* dev_handle, const char* path);
|
||||
AOCKeyboardController(hid_device* dev_handle, const char* path, std::string dev_name);
|
||||
~AOCKeyboardController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
std::string GetSerialString();
|
||||
|
||||
void SetLightingConfig
|
||||
|
|
@ -86,6 +89,7 @@ public:
|
|||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string name;
|
||||
|
||||
void SendStartPacket();
|
||||
void SendEndPacket();
|
||||
|
|
|
|||
|
|
@ -1,13 +1,24 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AOCKeyboardControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for AOC keyboard |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 10 May 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AOCKeyboardController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_AOCKeyboard.h"
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| AOC Mousemat IDs |
|
||||
| AOC Keyboard IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define AOC_VID 0x3938
|
||||
#define AOC_GK500_PID 0x1178
|
||||
#define AOC_GK500_PID_2 0x1229
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
|
|
@ -23,12 +34,12 @@ void DetectAOCKeyboardControllers(hid_device_info* info, const std::string& name
|
|||
|
||||
if(dev)
|
||||
{
|
||||
AOCKeyboardController* controller = new AOCKeyboardController(dev, info->path);
|
||||
AOCKeyboardController* controller = new AOCKeyboardController(dev, info->path, name);
|
||||
RGBController_AOCKeyboard* rgb_controller = new RGBController_AOCKeyboard(controller);
|
||||
rgb_controller->name = name;
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR_PU("AOC GK500", DetectAOCKeyboardControllers, AOC_VID, AOC_GK500_PID, 0xFF19, 0xFF19);
|
||||
REGISTER_HID_DETECTOR_PU("AOC GK500", DetectAOCKeyboardControllers, AOC_VID, AOC_GK500_PID_2, 0xFF19, 0xFF19);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AOCKeyboard.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for AOC keyboard |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 5/10/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AOCKeyboard.cpp |
|
||||
| |
|
||||
| RGBController for AOC keyboard |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 10 May 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_AOCKeyboard.h"
|
||||
#include "KeyboardLayoutManager.h"
|
||||
|
|
@ -32,10 +35,10 @@ layout_values aoc_keyboard_offset_values =
|
|||
75, 76, 91, 62, 48, 64, 50, 65, 66, 67, 97, 68, 84, 70, 59, 74, 89, 58, 73, 88, 103,
|
||||
/* TAB Q W E R T Y U I O P [ ] \ DEL END PGDN NP7 NP8 NP9 NP+ */
|
||||
60, 61, 47, 78, 33, 49, 35, 80, 51, 52, 53, 69, 99, 25, 44, 29, 14, 43, 28, 13, 102,
|
||||
/* CPLK A S D F G H J K L ; " ENTR NP4 NP5 NP6 */
|
||||
45, 46, 32, 93, 18, 34, 20, 95, 36, 37, 38, 54, 10, 57, 72, 87,
|
||||
/* LSFT Z X C V B N M , . / RSFT ARWU NP1 NP2 NP3 NPEN */
|
||||
30, 31, 17, 2, 3, 19, 5, 6, 21, 22, 23, 39, 11, 42, 27, 12, 101,
|
||||
/* CPLK A S D F G H J K L ; " # ENTR NP4 NP5 NP6 */
|
||||
45, 46, 32, 93, 18, 34, 20, 95, 36, 37, 38, 54, 0, 10, 57, 72, 87,
|
||||
/* LSFT \ Z X C V B N M , . / RSFT ARWU NP1 NP2 NP3 NPEN */
|
||||
30, 0, 31, 17, 2, 3, 19, 5, 6, 21, 22, 23, 39, 11, 42, 27, 12, 101,
|
||||
/* LCTL LWIN LALT SPC RALT RFNC RMNU RCTL ARWL ARWD ARWR NP0 NP. */
|
||||
15, 0, 1, 4, 7, 8, 24, 9, 26, 41, 56, 71, 86
|
||||
},
|
||||
|
|
@ -47,14 +50,14 @@ layout_values aoc_keyboard_offset_values =
|
|||
|
||||
RGBController_AOCKeyboard::RGBController_AOCKeyboard(AOCKeyboardController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "AOC Keyboard Device";
|
||||
vendor = "AOC";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "AOC Keyboard Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "AOC";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "AOC Keyboard Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
|
||||
mode Static;
|
||||
Static.name = "Static";
|
||||
|
|
@ -288,7 +291,7 @@ void RGBController_AOCKeyboard::SetupZones()
|
|||
| Create LEDs for the Matrix zone |
|
||||
| Place keys in the layout to populate the matrix |
|
||||
\*---------------------------------------------------------*/
|
||||
for(size_t led_idx = 0; led_idx < new_zone.leds_count; led_idx++)
|
||||
for(unsigned int led_idx = 0; led_idx < new_zone.leds_count; led_idx++)
|
||||
{
|
||||
led new_led;
|
||||
|
||||
|
|
@ -299,8 +302,6 @@ void RGBController_AOCKeyboard::SetupZones()
|
|||
|
||||
zones.push_back(new_zone);
|
||||
|
||||
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AOCKeyboard.h |
|
||||
| |
|
||||
| Generic RGB Interface for AOC keyboard |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 5/10/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AOCKeyboard.h |
|
||||
| |
|
||||
| RGBController for AOC keyboard |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 10 May 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,23 @@
|
|||
/*-----------------------------------------*\
|
||||
| AOCMouseController.cpp |
|
||||
| |
|
||||
| Driver for AOC Mouse lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/20/2023 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "AOCMouseController.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AOCMouseController.cpp |
|
||||
| |
|
||||
| Driver for AOC mouse |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 20 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <cstring>
|
||||
#include "AOCMouseController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
AOCMouseController::AOCMouseController(hid_device* dev_handle, const char* path)
|
||||
AOCMouseController::AOCMouseController(hid_device* dev_handle, const char* path, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
}
|
||||
|
||||
AOCMouseController::~AOCMouseController()
|
||||
|
|
@ -26,6 +30,11 @@ std::string AOCMouseController::GetDeviceLocation()
|
|||
return("HID " + location);
|
||||
}
|
||||
|
||||
std::string AOCMouseController::GetDeviceName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
std::string AOCMouseController::GetSerialString()
|
||||
{
|
||||
wchar_t serial_string[128];
|
||||
|
|
@ -36,10 +45,7 @@ std::string AOCMouseController::GetSerialString()
|
|||
return("");
|
||||
}
|
||||
|
||||
std::wstring return_wstring = serial_string;
|
||||
std::string return_string(return_wstring.begin(), return_wstring.end());
|
||||
|
||||
return(return_string);
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------*\
|
||||
|
|
|
|||
|
|
@ -1,18 +1,20 @@
|
|||
/*-----------------------------------------*\
|
||||
| AOCMouseController.h |
|
||||
| |
|
||||
| Definitions and types for AOC mouse |
|
||||
| lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/20/2023 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| AOCMouseController.h |
|
||||
| |
|
||||
| Driver for AOC mouse |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 20 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*-----------------------------------------*\
|
||||
| AOC Mousemat Modes |
|
||||
| Note: The 0x80 bit is the random flag |
|
||||
|
|
@ -54,10 +56,11 @@ enum
|
|||
class AOCMouseController
|
||||
{
|
||||
public:
|
||||
AOCMouseController(hid_device* dev_handle, const char* path);
|
||||
AOCMouseController(hid_device* dev_handle, const char* path, std::string dev_name);
|
||||
~AOCMouseController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
std::string GetSerialString();
|
||||
|
||||
void SendDirect
|
||||
|
|
@ -77,4 +80,5 @@ public:
|
|||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string name;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,10 +1,20 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AOCMouseControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for AOC mouse |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 20 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AOCMouseController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_AOCMouse.h"
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| AOC Mousemat IDs |
|
||||
| AOC Mouse IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define AOC_VID 0x3938
|
||||
#define AOC_GM500_PID 0x1179
|
||||
|
|
@ -23,9 +33,8 @@ void DetectAOCMouseControllers(hid_device_info* info, const std::string& name)
|
|||
|
||||
if(dev)
|
||||
{
|
||||
AOCMouseController* controller = new AOCMouseController(dev, info->path);
|
||||
AOCMouseController* controller = new AOCMouseController(dev, info->path, name);
|
||||
RGBController_AOCMouse* rgb_controller = new RGBController_AOCMouse(controller);
|
||||
rgb_controller->name = name;
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AOCMouse.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for AOC mouse |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/20/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AOCMouse.cpp |
|
||||
| |
|
||||
| RGBController for AOC mouse |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 20 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_AOCMouse.h"
|
||||
|
||||
|
|
@ -21,14 +24,14 @@
|
|||
|
||||
RGBController_AOCMouse::RGBController_AOCMouse(AOCMouseController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "AOC Mouse Device";
|
||||
vendor = "AOC";
|
||||
type = DEVICE_TYPE_MOUSE;
|
||||
description = "AOC Mouse Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "AOC";
|
||||
type = DEVICE_TYPE_MOUSE;
|
||||
description = "AOC Mouse Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AOCMouse.h |
|
||||
| |
|
||||
| Generic RGB Interface for AOC mouse |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/20/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AOCMouse.h |
|
||||
| |
|
||||
| RGBController for AOC mouse |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 20 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,23 @@
|
|||
/*-----------------------------------------*\
|
||||
| AOCMousematController.cpp |
|
||||
| |
|
||||
| Driver for AOC Mousemat lighting |
|
||||
| controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/15/2023 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "AOCMousematController.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| AOCMousematController.cpp |
|
||||
| |
|
||||
| Driver for AOC mousemat |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <cstring>
|
||||
#include "AOCMousematController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
AOCMousematController::AOCMousematController(hid_device* dev_handle, const char* path)
|
||||
AOCMousematController::AOCMousematController(hid_device* dev_handle, const char* path, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
}
|
||||
|
||||
AOCMousematController::~AOCMousematController()
|
||||
|
|
@ -27,6 +30,11 @@ std::string AOCMousematController::GetDeviceLocation()
|
|||
return("HID " + location);
|
||||
}
|
||||
|
||||
std::string AOCMousematController::GetDeviceName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
std::string AOCMousematController::GetSerialString()
|
||||
{
|
||||
wchar_t serial_string[128];
|
||||
|
|
@ -37,10 +45,7 @@ std::string AOCMousematController::GetSerialString()
|
|||
return("");
|
||||
}
|
||||
|
||||
std::wstring return_wstring = serial_string;
|
||||
std::string return_string(return_wstring.begin(), return_wstring.end());
|
||||
|
||||
return(return_string);
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------*\
|
||||
|
|
|
|||
|
|
@ -1,18 +1,20 @@
|
|||
/*-----------------------------------------*\
|
||||
| AOCMousematController.h |
|
||||
| |
|
||||
| Definitions and types for AOC mousemat |
|
||||
| lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/15/2023 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| AOCMousematController.h |
|
||||
| |
|
||||
| Driver for AOC mousemat |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*-----------------------------------------*\
|
||||
| AOC Mousemat Modes |
|
||||
| Note: The 0x80 bit is the random flag |
|
||||
|
|
@ -53,10 +55,11 @@ enum
|
|||
class AOCMousematController
|
||||
{
|
||||
public:
|
||||
AOCMousematController(hid_device* dev_handle, const char* path);
|
||||
AOCMousematController(hid_device* dev_handle, const char* path, std::string dev_name);
|
||||
~AOCMousematController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
std::string GetSerialString();
|
||||
|
||||
void SendDirect
|
||||
|
|
@ -76,4 +79,5 @@ public:
|
|||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string name;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,16 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AOCMousematControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for AOC mousemat |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AOCMousematController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_AOCMousemat.h"
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
|
|
@ -23,12 +33,11 @@ void DetectAOCMousematControllers(hid_device_info* info, const std::string& name
|
|||
|
||||
if(dev)
|
||||
{
|
||||
AOCMousematController* controller = new AOCMousematController(dev, info->path);
|
||||
AOCMousematController* controller = new AOCMousematController(dev, info->path, name);
|
||||
RGBController_AOCMousemat* rgb_controller = new RGBController_AOCMousemat(controller);
|
||||
rgb_controller->name = name;
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR_IPU("AOC AGON AMM700", DetectAOCMousematControllers, AOC_VID, AOC_AMM700_PID, 1, 0xFF19, 0xFF19);
|
||||
REGISTER_HID_DETECTOR_IPU("AOC AGON AMM700", DetectAOCMousematControllers, AOC_VID, AOC_AMM700_PID, 1, 0xFF19, 0xFF19);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AOCMousemat.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for AOC mousemat |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/15/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AOCMousemat.cpp |
|
||||
| |
|
||||
| RGBController for AOC mousemat |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_AOCMousemat.h"
|
||||
|
||||
|
|
@ -21,14 +24,14 @@
|
|||
|
||||
RGBController_AOCMousemat::RGBController_AOCMousemat(AOCMousematController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "AOC Mousemat Device";
|
||||
vendor = "AOC";
|
||||
type = DEVICE_TYPE_MOUSEMAT;
|
||||
description = "AOC Mousemat Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "AOC";
|
||||
type = DEVICE_TYPE_MOUSEMAT;
|
||||
description = "AOC Mousemat Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AOCMousemat.h |
|
||||
| |
|
||||
| Generic RGB Interface for AOC mousemat |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 4/15/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AOCMousemat.h |
|
||||
| |
|
||||
| RGBController for AOC mousemat |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Apr 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,22 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockPolychromeUSBController.cpp |
|
||||
| |
|
||||
| Driver for ASRock Polychrome USB |
|
||||
| lighting controller |
|
||||
| |
|
||||
| Ed Kambulow (dredvard) 12/20/2020 |
|
||||
| Shady Nawara (ShadyNawara) 01/16/2023 |
|
||||
\*-----------------------------------------*/
|
||||
#include <cstring>
|
||||
#include <stdio.h>
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockPolychromeUSBController.cpp |
|
||||
| |
|
||||
| Driver for ASRock Polychrome USB motherboards |
|
||||
| |
|
||||
| Ed Kambulow (dredvard) 20 Dec 2020 |
|
||||
| Shady Nawara (ShadyNawara) 16 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <cstring>
|
||||
#include "RGBController.h"
|
||||
#include "ResourceManager.h"
|
||||
#include "SettingsManager.h"
|
||||
#include "StringUtils.h"
|
||||
#include "ASRockPolychromeUSBController.h"
|
||||
#include "dependencies/dmiinfo.h"
|
||||
#include "dmiinfo.h"
|
||||
|
||||
#define POLYCHROME_USB_READ_ZONE_CONFIG 0x11
|
||||
#define POLYCHROME_USB_READ_HEADER 0x14
|
||||
|
|
@ -54,7 +57,7 @@ PolychromeUSBController::~PolychromeUSBController()
|
|||
|
||||
unsigned int PolychromeUSBController::GetChannelCount()
|
||||
{
|
||||
return(device_info.size());
|
||||
return((unsigned int)device_info.size());
|
||||
}
|
||||
|
||||
std::string PolychromeUSBController::GetDeviceLocation()
|
||||
|
|
@ -77,10 +80,7 @@ std::string PolychromeUSBController::GetSerialString()
|
|||
return("");
|
||||
}
|
||||
|
||||
std::wstring return_wstring = serial_string;
|
||||
std::string return_string(return_wstring.begin(), return_wstring.end());
|
||||
|
||||
return(return_string);
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
void PolychromeUSBController::SetDeviceInfo()
|
||||
|
|
@ -380,7 +380,7 @@ void PolychromeUSBController::WriteRGSwap
|
|||
bool chnl8
|
||||
)
|
||||
{
|
||||
unsigned char rgconfig[1] = {static_cast<unsigned char>(((chnl8 << 7) | (pcb << 6) | (io << 5) | (pch << 4) | (ahdr1 << 3) | (ahdr0 << 2) | (hdr1 << 1) | hdr0))};
|
||||
unsigned char rgconfig[1] = {static_cast<unsigned char>((((unsigned char)chnl8 << 7) | ((unsigned char)pcb << 6) | ((unsigned char)io << 5) | ((unsigned char)pch << 4) | ((unsigned char)ahdr1 << 3) | ((unsigned char)ahdr0 << 2) | ((unsigned char)hdr1 << 1) | (unsigned char)hdr0))};
|
||||
WriteHeader(POLYCHROME_USB_RGSWAP_CFG, rgconfig, 1);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,21 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockPolychromeUSBController.h |
|
||||
| |
|
||||
| Driver for ASRock Polychrome USB |
|
||||
| lighting controller |
|
||||
| |
|
||||
| Ed Kambulow (dredvard) 12/20/2020 |
|
||||
| Shady Nawara (ShadyNawara) 01/16/2023 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockPolychromeUSBController.h |
|
||||
| |
|
||||
| Driver for ASRock Polychrome USB motherboards |
|
||||
| |
|
||||
| Ed Kambulow (dredvard) 20 Dec 2020 |
|
||||
| Shady Nawara (ShadyNawara) 16 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*\
|
||||
| Definitions for Polychrome USB |
|
||||
\*----------------------------------------------------------------------------------------------*/
|
||||
|
|
@ -154,12 +156,11 @@ protected:
|
|||
);
|
||||
|
||||
private:
|
||||
unsigned int led_count;
|
||||
std::string device_name;
|
||||
unsigned char configtable[12];
|
||||
bool rgswapconfig[8] = { 0 };
|
||||
|
||||
void SetDeviceInfo();
|
||||
void SetDeviceInfo();
|
||||
void ReadConfigTables();
|
||||
void Commit();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,13 +1,19 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| ASRockPolychromeUSBControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for ASRock Polychrome USB motherboards |
|
||||
| |
|
||||
| Ed Kambulow (dredvard) 20 Dec 2020 |
|
||||
| Shady Nawara (ShadyNawara) 16 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <hidapi.h>
|
||||
#include "Detector.h"
|
||||
#include "ASRockPolychromeUSBController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_ASRockPolychromeUSB.h"
|
||||
#include "i2c_smbus.h"
|
||||
#include "pci_ids.h"
|
||||
#include <vector>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <hidapi/hidapi.h>
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRock vendor ID |
|
||||
|
|
@ -32,5 +38,5 @@ void DetectPolychromeUSBControllers(hid_device_info* info, const std::string& /*
|
|||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR("ASRock Polychrome USB", DetectPolychromeUSBControllers, ASROCK_VID, ASROCK_MOTHERBOARD_1_PID);
|
||||
REGISTER_HID_DETECTOR("ASRock Deskmini Addressable LED Strip", DetectPolychromeUSBControllers, ASROCK_VID, ASROCK_DESKMINI_ADDRESSABLE_LED_STRIP_PID);
|
||||
REGISTER_HID_DETECTOR("ASRock Polychrome USB", DetectPolychromeUSBControllers, ASROCK_VID, ASROCK_MOTHERBOARD_1_PID);
|
||||
REGISTER_HID_DETECTOR("ASRock Deskmini Addressable LED Strip", DetectPolychromeUSBControllers, ASROCK_VID, ASROCK_DESKMINI_ADDRESSABLE_LED_STRIP_PID);
|
||||
|
|
|
|||
|
|
@ -1,15 +1,17 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromeUSB.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock Polychrome USB Driver |
|
||||
| |
|
||||
| Ed Kambulow (Dredvard) 12/26/2020 |
|
||||
| Shady Nawara (ShadyNawara) 01/16/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRockPolychromeUSB.cpp |
|
||||
| |
|
||||
| RGBController for ASRock Polychrome USB motherboards |
|
||||
| |
|
||||
| Ed Kambulow (dredvard) 20 Dec 2020 |
|
||||
| Shady Nawara (ShadyNawara) 16 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_ASRockPolychromeUSB.h"
|
||||
#include <string.h>
|
||||
#include "RGBController_ASRockPolychromeUSB.h"
|
||||
|
||||
#define ASROCK_USB_MAX_ZONES 8
|
||||
#define ASROCK_ADDRESSABLE_MAX_LEDS 100
|
||||
|
|
@ -293,7 +295,7 @@ void RGBController_PolychromeUSB::DeviceUpdateLEDs()
|
|||
set_mode = active_mode;
|
||||
}
|
||||
|
||||
controller->WriteZone(zone_idx, set_mode, zones_info[zone_idx].speed, zones[zone_idx].colors[0], false);
|
||||
controller->WriteZone((unsigned char)zone_idx, set_mode, zones_info[zone_idx].speed, zones[zone_idx].colors[0], false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromeUSB.h |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock Polychrome USB Driver |
|
||||
| |
|
||||
| Ed Kambulow (Dredvard) 12/26/2020 |
|
||||
| Shady Nawara (ShadyNawara) 01/16/2023 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRockPolychromeUSB.h |
|
||||
| |
|
||||
| RGBController for ASRock Polychrome USB motherboards |
|
||||
| |
|
||||
| Ed Kambulow (dredvard) 20 Dec 2020 |
|
||||
| Shady Nawara (ShadyNawara) 16 Jan 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
|
@ -29,7 +31,6 @@ public:
|
|||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
bool initializedMode;
|
||||
PolychromeUSBController* controller;
|
||||
std::vector<PolychromeZoneInfo> zones_info;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,17 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockPolychromeSMBusController.cpp |
|
||||
| |
|
||||
| Driver for for ASRock ASR LED and |
|
||||
| Polychrome RGB lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/14/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockASRRGBSMBusController.cpp |
|
||||
| |
|
||||
| Driver for SMBus ASRock ASR RGB motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 14 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "ASRockASRRGBSMBusController.h"
|
||||
#include <cstring>
|
||||
#include "dependencies/dmiinfo.h"
|
||||
#include "dmiinfo.h"
|
||||
#include "LogManager.h"
|
||||
|
||||
#define ASROCK_ZONE_LED_COUNT_MESSAGE_EN "[%s] Zone %i LED count: %02d"
|
||||
|
|
@ -64,7 +66,7 @@ void ASRockASRRGBSMBusController::SetColorsAndSpeed(uint8_t led, uint8_t red, ui
|
|||
{
|
||||
uint8_t color_speed_pkt[4] = { red, green, blue, active_speed };
|
||||
uint8_t select_led_pkt[1] = { led };
|
||||
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Select LED |
|
||||
\*-----------------------------------------------------*/
|
||||
|
|
@ -1,18 +1,19 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockASRRGBSMBusController.h |
|
||||
| |
|
||||
| Definitions and types for ASRock |
|
||||
| ASR LED and Polychrome RGB lighting |
|
||||
| controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/13/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "i2c_smbus.h"
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockASRRGBSMBusController.h |
|
||||
| |
|
||||
| Driver for SMBus ASRock ASR RGB motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 13 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "i2c_smbus.h"
|
||||
|
||||
typedef uint8_t polychrome_dev_id;
|
||||
|
||||
#define ASROCK_ASR_CONTROLLER_NAME "ASRock ASR RGB SMBus Controller"
|
||||
|
|
@ -63,7 +64,7 @@ public:
|
|||
uint8_t GetMode();
|
||||
void SetColorsAndSpeed(uint8_t led, uint8_t red, uint8_t green, uint8_t blue);
|
||||
void SetMode(uint8_t zone, uint8_t mode, uint8_t speed);
|
||||
|
||||
|
||||
uint16_t fw_version;
|
||||
|
||||
private:
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromeSMBus.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock ASR LED and Polychrome RGB Driver |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/15/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRRGBSMBus.cpp |
|
||||
| |
|
||||
| RGBController for SMBus ASRock ASR LED motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_ASRockASRRGBSMBus.h"
|
||||
|
||||
|
|
@ -167,7 +169,7 @@ void RGBController_ASRockASRRGBSMBus::ResizeZone(int /*zone*/, int /*new_size*/)
|
|||
|
||||
void RGBController_ASRockASRRGBSMBus::DeviceUpdateLEDs()
|
||||
{
|
||||
for (std::size_t led = 0; led < colors.size(); led++)
|
||||
for(unsigned int led = 0; led < colors.size(); led++)
|
||||
{
|
||||
UpdateSingleLED(led);
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRRGBSMBus.h |
|
||||
| |
|
||||
| RGBController for SMBus ASRock ASR RGB motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "ASRockASRRGBSMBusController.h"
|
||||
|
||||
class RGBController_ASRockASRRGBSMBus : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_ASRockASRRGBSMBus(ASRockASRRGBSMBusController* controller_ptr);
|
||||
~RGBController_ASRockASRRGBSMBus();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
ASRockASRRGBSMBusController* controller;
|
||||
};
|
||||
|
|
@ -1,15 +1,17 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockPolychromeV1SMBusController.cpp |
|
||||
| |
|
||||
| Driver for for ASRock ASR LED and |
|
||||
| Polychrome RGB lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/14/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockPolychromeV1SMBusController.cpp |
|
||||
| |
|
||||
| Driver for SMBus ASRock Polychrome V1 motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 14 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "ASRockPolychromeV1SMBusController.h"
|
||||
#include <cstring>
|
||||
#include "dependencies/dmiinfo.h"
|
||||
#include "ASRockPolychromeV1SMBusController.h"
|
||||
#include "dmiinfo.h"
|
||||
#include "LogManager.h"
|
||||
|
||||
#define ASROCK_ZONE_LED_COUNT_MESSAGE_EN "[%s] Zone %i LED count: %02d"
|
||||
|
|
@ -1,19 +1,20 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockPolychromeV1SMBusController.h |
|
||||
| |
|
||||
| Definitions and types for ASRock |
|
||||
| ASR LED and Polychrome RGB lighting |
|
||||
| controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/13/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "i2c_smbus.h"
|
||||
#include "RGBController.h"
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockPolychromeV1SMBusController.h |
|
||||
| |
|
||||
| Driver for SMBus ASRock Polychrome V1 motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 13 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "i2c_smbus.h"
|
||||
#include "RGBController.h"
|
||||
|
||||
typedef uint8_t polychrome_dev_id;
|
||||
|
||||
#define ASROCK_V1_CONTROLLER_NAME "ASRock Polychrome v1 SMBus Controller"
|
||||
|
|
@ -1,11 +1,14 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromeSMBus.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock ASR LED and Polychrome RGB Driver |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/15/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRockPolychromeV1SMBus.cpp |
|
||||
| |
|
||||
| RGBController for SMBus ASRock Polychrome V1 |
|
||||
| motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "LogManager.h"
|
||||
#include "RGBController_ASRockPolychromeV1SMBus.h"
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRockPolychromeV1SMBus.h |
|
||||
| |
|
||||
| RGBController for SMBus ASRock Polychrome V1 |
|
||||
| motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "ASRockPolychromeV1SMBusController.h"
|
||||
|
||||
class RGBController_ASRockPolychromeV1SMBus : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_ASRockPolychromeV1SMBus(ASRockPolychromeV1SMBusController* controller_ptr);
|
||||
~RGBController_ASRockPolychromeV1SMBus();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
ASRockPolychromeV1SMBusController* controller;
|
||||
uint8_t getModeIndex(uint8_t mode_value);
|
||||
std::vector<uint8_t> zoneIndexMap;
|
||||
};
|
||||
|
|
@ -1,15 +1,17 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockPolychromeV2SMBusController.cpp |
|
||||
| |
|
||||
| Driver for for ASRock ASR LED and |
|
||||
| Polychrome RGB lighting controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/14/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockPolychromeV2SMBusController.cpp |
|
||||
| |
|
||||
| Driver for SMBus ASRock Polychrome V2 motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 14 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "ASRockPolychromeV2SMBusController.h"
|
||||
#include <cstring>
|
||||
#include "dependencies/dmiinfo.h"
|
||||
#include "ASRockPolychromeV2SMBusController.h"
|
||||
#include "dmiinfo.h"
|
||||
#include "LogManager.h"
|
||||
|
||||
#define ASROCK_ZONE_LED_COUNT_MESSAGE_EN "[%s] Zone %i LED count: %02d"
|
||||
|
|
@ -1,18 +1,19 @@
|
|||
/*-----------------------------------------*\
|
||||
| ASRockPolychromeSMBusController.h |
|
||||
| |
|
||||
| Definitions and types for ASRock |
|
||||
| ASR LED and Polychrome RGB lighting |
|
||||
| controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/13/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "i2c_smbus.h"
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| ASRockPolychromeV2SMBusController.h |
|
||||
| |
|
||||
| Driver for SMBus ASRock Polychrome V2 motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 13 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "i2c_smbus.h"
|
||||
|
||||
typedef uint8_t polychrome_dev_id;
|
||||
|
||||
#define ASROCK_V2_CONTROLLER_NAME "ASRock Polychrome v2 SMBus Controller"
|
||||
|
|
@ -132,7 +133,7 @@ public:
|
|||
|
||||
uint8_t zone_led_count[6];
|
||||
uint16_t fw_version;
|
||||
|
||||
|
||||
private:
|
||||
std::string device_name;
|
||||
uint8_t active_zone;
|
||||
|
|
@ -1,11 +1,14 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromeV2SMBus.cpp|
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock ASR LED and Polychrome RGB Driver |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/15/2019 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRockPolychromeV2SMBus.cpp |
|
||||
| |
|
||||
| RGBController for SMBus ASRock Polychrome V2 |
|
||||
| motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_ASRockPolychromeV2SMBus.h"
|
||||
|
||||
|
|
@ -287,7 +290,7 @@ void RGBController_ASRockPolychromeV2SMBus::ResizeZone(int /*zone*/, int /*new_s
|
|||
|
||||
void RGBController_ASRockPolychromeV2SMBus::DeviceUpdateLEDs()
|
||||
{
|
||||
for (std::size_t led = 0; led < colors.size(); led++)
|
||||
for(unsigned int led = 0; led < colors.size(); led++)
|
||||
{
|
||||
UpdateSingleLED(led);
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_ASRockPolychromeV2SMBus.h |
|
||||
| |
|
||||
| RGBController for SMBus ASRock Polychrome V2 |
|
||||
| motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 15 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "ASRockPolychromeV2SMBusController.h"
|
||||
|
||||
class RGBController_ASRockPolychromeV2SMBus : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_ASRockPolychromeV2SMBus(ASRockPolychromeV2SMBusController* controller_ptr);
|
||||
~RGBController_ASRockPolychromeV2SMBus();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
ASRockPolychromeV2SMBusController* controller;
|
||||
};
|
||||
|
|
@ -1,17 +1,26 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| ASRockSMBusControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for SMBus ASRock ASR RGB and Polychrome |
|
||||
| motherboards |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 14 Dec 2019 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <vector>
|
||||
#include "Detector.h"
|
||||
#include "ASRockASRRGBSMBusController.h"
|
||||
#include "ASRockPolychromeV1SMBusController.h"
|
||||
#include "ASRockPolychromeV2SMBusController.h"
|
||||
#include "LogManager.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_ASRockASRRGBSMBus.h"
|
||||
#include "RGBController_ASRockPolychromeV1SMBus.h"
|
||||
#include "RGBController_ASRockPolychromeV2SMBus.h"
|
||||
#include "i2c_smbus.h"
|
||||
#include "pci_ids.h"
|
||||
#include <vector>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*******************************************************************************************\
|
||||
* *
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromeSMBus.h |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock ASR LED and Polychrome RGB Driver |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/15/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "ASRockASRRGBSMBusController.h"
|
||||
|
||||
class RGBController_ASRockASRRGBSMBus : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_ASRockASRRGBSMBus(ASRockASRRGBSMBusController* controller_ptr);
|
||||
~RGBController_ASRockASRRGBSMBus();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
ASRockASRRGBSMBusController* controller;
|
||||
};
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromeV1SMBus.h |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock ASR LED and Polychrome RGB Driver |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/15/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "ASRockPolychromeV1SMBusController.h"
|
||||
|
||||
class RGBController_ASRockPolychromeV1SMBus : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_ASRockPolychromeV1SMBus(ASRockPolychromeV1SMBusController* controller_ptr);
|
||||
~RGBController_ASRockPolychromeV1SMBus();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
ASRockPolychromeV1SMBusController* controller;
|
||||
uint8_t getModeIndex(uint8_t mode_value);
|
||||
std::vector<uint8_t> zoneIndexMap;
|
||||
};
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_ASRockPolychromev2SMBus.h |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| ASRock ASR LED and Polychrome RGB Driver |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 12/15/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "ASRockPolychromeV2SMBusController.h"
|
||||
|
||||
class RGBController_ASRockPolychromeV2SMBus : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_ASRockPolychromeV2SMBus(ASRockPolychromeV2SMBusController* controller_ptr);
|
||||
~RGBController_ASRockPolychromeV2SMBus();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
ASRockPolychromeV2SMBusController* controller;
|
||||
};
|
||||
|
|
@ -1,13 +1,14 @@
|
|||
/*-----------------------------------------*\
|
||||
| AlienwareController.cpp |
|
||||
| |
|
||||
| Driver for Alienware lighting controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 4/21/2021 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareController.cpp |
|
||||
| |
|
||||
| Driver for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 21 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareController.h"
|
||||
#include <cstring>
|
||||
#include <cstdint>
|
||||
#include <map>
|
||||
|
|
@ -15,6 +16,10 @@
|
|||
#include <chrono>
|
||||
#include <algorithm>
|
||||
#include <sstream>
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareController.h"
|
||||
#include "LogManager.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
typedef uint32_t alienware_platform_id;
|
||||
|
||||
|
|
@ -24,8 +29,11 @@ typedef uint32_t alienware_platform_id;
|
|||
\*---------------------------------------------------------*/
|
||||
static const std::map<alienware_platform_id, uint8_t> zone_quirks_table =
|
||||
{
|
||||
{ 0x0C01, 4 }, // Dell G5 SE 5505
|
||||
{ 0x0A01, 16 } // Dell G7 15 7500
|
||||
{ 0x0C01, 4 }, // Dell G5 SE 5505
|
||||
{ 0x0A01, 16 }, // Dell G7 15 7500
|
||||
{ 0x0E03, 4 }, // Dell G15 5511
|
||||
{ 0x0E0A, 4 } // Dell G15 5530
|
||||
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
|
|
@ -39,7 +47,9 @@ static const std::map<alienware_platform_id, std::vector<const char*>> zone_name
|
|||
"Light Bar 1", "Light Bar 2", "Light Bar 3",
|
||||
"Light Bar 4", "Light Bar 5", "Light Bar 6",
|
||||
"Light Bar 7", "Light Bar 8", "Light Bar 9",
|
||||
"Light Bar 10", "Light Bar 11", "Light Bar 12" } }
|
||||
"Light Bar 10", "Light Bar 11", "Light Bar 12" } },
|
||||
{ 0x0E03, { "Left", "Middle", "Right", "Numpad" } },
|
||||
{ 0x0E0A, { "Left", "Middle", "Right", "Numpad" } }
|
||||
};
|
||||
|
||||
static void SendHIDReport(hid_device *dev, const unsigned char* usb_buf, size_t usb_buf_size)
|
||||
|
|
@ -80,9 +90,7 @@ AlienwareController::AlienwareController(hid_device* dev_handle, const hid_devic
|
|||
/*-----------------------------------------------------*\
|
||||
| Get serial number |
|
||||
\*-----------------------------------------------------*/
|
||||
std::wstring tmp_serial_number;
|
||||
tmp_serial_number = info.serial_number;
|
||||
serial_number = std::string(tmp_serial_number.begin(), tmp_serial_number.end());
|
||||
serial_number = StringUtils::wstring_to_string(info.serial_number);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Get zone information by checking firmware |
|
||||
|
|
@ -91,6 +99,11 @@ AlienwareController::AlienwareController(hid_device* dev_handle, const hid_devic
|
|||
report = Report(ALIENWARE_COMMAND_REPORT_CONFIG);
|
||||
alienware_platform_id platform_id = report.data[4] << 8 | report.data[5];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the device reports the wrong number of zones |
|
||||
\*-----------------------------------------------------*/
|
||||
unsigned number_of_zones = zone_quirks_table.count(platform_id) ? zone_quirks_table.at(platform_id) : report.data[6];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Get firmware version |
|
||||
\*-----------------------------------------------------*/
|
||||
|
|
@ -101,11 +114,6 @@ AlienwareController::AlienwareController(hid_device* dev_handle, const hid_devic
|
|||
fw_string << static_cast<unsigned>(report.data[4]) << '.' << static_cast<unsigned>(report.data[5]) << '.' << static_cast<unsigned>(report.data[6]);
|
||||
version = fw_string.str();
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Check if the device reports the wrong number of zones |
|
||||
\*-----------------------------------------------------*/
|
||||
unsigned number_of_zones = zone_quirks_table.count(platform_id) ? zone_quirks_table.at(platform_id) : report.data[6];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Initialize Alienware zones |
|
||||
\*-----------------------------------------------------*/
|
||||
|
|
@ -113,10 +121,13 @@ AlienwareController::AlienwareController(hid_device* dev_handle, const hid_devic
|
|||
|
||||
if(zone_names_table.count(platform_id))
|
||||
{
|
||||
LOG_INFO("[%s] Known platform: %8X, Number of zones: %d", ALIENWARE_CONTROLLER_NAME, platform_id, number_of_zones);
|
||||
zone_names = zone_names_table.at(platform_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_WARNING("[%s] Unknown platform: %8X, Number of zones: %d", ALIENWARE_CONTROLLER_NAME, platform_id, number_of_zones);
|
||||
|
||||
/*-------------------------------------------------*\
|
||||
| If this is an unknown controller, set the name of |
|
||||
| all regions to "Unknown" |
|
||||
|
|
@ -160,7 +171,7 @@ AlienwareController::~AlienwareController()
|
|||
|
||||
unsigned int AlienwareController::GetZoneCount()
|
||||
{
|
||||
return(zones.size());
|
||||
return((unsigned int)zones.size());
|
||||
}
|
||||
|
||||
std::vector<const char*> AlienwareController::GetZoneNames()
|
||||
|
|
@ -265,7 +276,7 @@ bool AlienwareController::Dim(std::vector<uint8_t> zones, double percent)
|
|||
/*-----------------------------------------------------*\
|
||||
| Set up message packet with leading 00, per hidapi |
|
||||
\*-----------------------------------------------------*/
|
||||
uint16_t num_zones = zones.size();
|
||||
uint16_t num_zones = (uint16_t)zones.size();
|
||||
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x03;
|
||||
|
|
@ -369,7 +380,7 @@ bool AlienwareController::SelectZones(const std::vector<uint8_t>& zones)
|
|||
/*-----------------------------------------------------*\
|
||||
| Set up message packet with leading 00, per hidapi |
|
||||
\*-----------------------------------------------------*/
|
||||
uint16_t num_zones = zones.size();
|
||||
uint16_t num_zones = (uint16_t)zones.size();
|
||||
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x03;
|
||||
|
|
@ -508,7 +519,7 @@ bool AlienwareController::SetColorDirect(RGBColor color, std::vector<uint8_t> zo
|
|||
/*-----------------------------------------------------*\
|
||||
| Set up message packet with leading 00, per hidapi |
|
||||
\*-----------------------------------------------------*/
|
||||
uint16_t num_zones = zones.size();
|
||||
uint16_t num_zones = (uint16_t)zones.size();
|
||||
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x03;
|
||||
|
|
@ -644,7 +655,7 @@ void AlienwareController::UpdateDim()
|
|||
|
||||
for(size_t i = 0; i < zones.size(); i++)
|
||||
{
|
||||
dim_zone_map[zones[i].dim].emplace_back(i);
|
||||
dim_zone_map[zones[i].dim].emplace_back((uint8_t)i);
|
||||
}
|
||||
|
||||
for(std::pair<const uint8_t, std::vector<uint8_t>> &pair : dim_zone_map)
|
||||
|
|
@ -671,7 +682,7 @@ bool AlienwareController::UpdateDirect()
|
|||
|
||||
for(size_t i = 0; i < zones.size(); i++)
|
||||
{
|
||||
color_zone_map[zones[i].color[0]].emplace_back(i);
|
||||
color_zone_map[zones[i].color[0]].emplace_back((uint8_t)i);
|
||||
}
|
||||
|
||||
for(std::pair<const RGBColor, std::vector<uint8_t>> &pair : color_zone_map)
|
||||
|
|
|
|||
|
|
@ -1,25 +1,27 @@
|
|||
/*-----------------------------------------*\
|
||||
| AlienwareController.h |
|
||||
| |
|
||||
| Driver for Dell Alienware RGB USB |
|
||||
| controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 4/19/2021 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
#include <string>
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareController.h |
|
||||
| |
|
||||
| Driver for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*\
|
||||
| Definitions for Alienware Controller |
|
||||
\*----------------------------------------------------------------------------------------------*/
|
||||
|
||||
#define ALIENWARE_REPORT_SIZE 33
|
||||
#define HIDAPI_ALIENWARE_REPORT_SIZE (ALIENWARE_REPORT_SIZE + 1)
|
||||
|
||||
#define ALIENWARE_CONTROLLER_NAME "AlienWare Controller"
|
||||
enum
|
||||
{
|
||||
ALIENWARE_COMMAND_REPORT = 0x20, /* Set report type to get */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,14 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AlienwareController.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_Alienware.h"
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
|
|
@ -11,7 +19,8 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| Alienware product ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define ALIENWARE_G_SERIES_PID 0x0550
|
||||
#define ALIENWARE_G_SERIES_PID1 0x0550
|
||||
#define ALIENWARE_G_SERIES_PID2 0x0551
|
||||
|
||||
void DetectAlienwareControllers(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
|
|
@ -26,4 +35,5 @@ void DetectAlienwareControllers(hid_device_info* info, const std::string& name)
|
|||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID);
|
||||
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID1);
|
||||
REGISTER_HID_DETECTOR("Dell G Series LED Controller", DetectAlienwareControllers, ALIENWARE_VID, ALIENWARE_G_SERIES_PID2);
|
||||
|
|
|
|||
|
|
@ -1,16 +1,17 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_Alienware.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| Alienware USB Driver |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 4/19/2021 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController_Alienware.h"
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_Alienware.cpp |
|
||||
| |
|
||||
| RGBController for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include "RGBController_Alienware.h"
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name Alienware
|
||||
|
|
@ -213,7 +214,7 @@ void RGBController_Alienware::DeviceUpdateMode()
|
|||
/*-----------------------------------------------------*\
|
||||
| Setup state per zone |
|
||||
\*-----------------------------------------------------*/
|
||||
for(std::size_t zone_idx = 0; zone_idx < zones.size(); zone_idx++)
|
||||
for(uint8_t zone_idx = 0; zone_idx < zones.size(); zone_idx++)
|
||||
{
|
||||
zone current_zone = zones[zone_idx];
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,20 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_Alienware.h |
|
||||
| |
|
||||
| Generic RGB Interface for OpenRGB |
|
||||
| Alienware RGB USB Driver |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 4/19/2021 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_Alienware.h |
|
||||
| |
|
||||
| RGBController for Dell Alienware RGB USB controller |
|
||||
| |
|
||||
| Gabriel Marcano (gemarcano) 19 Apr 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <chrono>
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareController.h"
|
||||
|
||||
#include <chrono>
|
||||
|
||||
class RGBController_Alienware : public RGBController
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,453 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareAW410KController.cpp |
|
||||
| |
|
||||
| Driver for Alienware AW410K keyboard |
|
||||
| |
|
||||
| based on AW510K controller by Mohamad Sallal (msallal) |
|
||||
| Dominik Mikolajczyk (dmiko) 23 Oct 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <cstring>
|
||||
#include "AlienwareAW410KController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
AlienwareAW410KController::AlienwareAW410KController(hid_device* dev_handle, const char* path, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
|
||||
SendCommit();
|
||||
}
|
||||
|
||||
AlienwareAW410KController::~AlienwareAW410KController()
|
||||
{
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
std::string AlienwareAW410KController::GetDeviceLocation()
|
||||
{
|
||||
return("HID: " + location);
|
||||
}
|
||||
|
||||
std::string AlienwareAW410KController::GetDeviceName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
std::string AlienwareAW410KController::GetSerialString()
|
||||
{
|
||||
wchar_t serial_string[128];
|
||||
int ret = hid_get_serial_number_string(dev, serial_string, 128);
|
||||
|
||||
if(ret != 0)
|
||||
{
|
||||
return("");
|
||||
}
|
||||
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::SendCommit()
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Commit packet |
|
||||
\*-----------------------------------------------------*/
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x05;
|
||||
usb_buf[0x02] = 0x01;
|
||||
usb_buf[0x0A] = 0x10;
|
||||
usb_buf[0x0B] = 0x0A;
|
||||
usb_buf[0x0C] = 0x01;
|
||||
usb_buf[0x0D] = 0x02;
|
||||
usb_buf[0x0E] = 0x01;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 20 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::SendfeatureReport
|
||||
(
|
||||
unsigned char first_byte,
|
||||
unsigned char second_byte,
|
||||
unsigned char third_byte,
|
||||
unsigned char forth_byte
|
||||
)
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Feature report packet |
|
||||
\*-----------------------------------------------------*/
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = first_byte;
|
||||
usb_buf[0x02] = second_byte;
|
||||
usb_buf[0x03] = third_byte;
|
||||
usb_buf[0x04] = forth_byte;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send Feature report packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_send_feature_report(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 10 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::SendEdit()
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Edit packet |
|
||||
\*-----------------------------------------------------*/
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x01;
|
||||
usb_buf[0x02] = 0x00;
|
||||
usb_buf[0x03] = 0x01;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 2 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::SendInitialize()
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Commit packet |
|
||||
\*-----------------------------------------------------*/
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x0E;
|
||||
usb_buf[0x02] = 0x01;
|
||||
usb_buf[0x03] = 0x00;
|
||||
usb_buf[0x04] = 0x01;
|
||||
usb_buf[0x05] = 0xAD;
|
||||
usb_buf[0x06] = 0x80;
|
||||
usb_buf[0x07] = 0x10;
|
||||
usb_buf[0x08] = 0xA5;
|
||||
usb_buf[0x0A] = 0x0A;
|
||||
usb_buf[0x12] = 0x01;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 2 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::SetDirect
|
||||
(
|
||||
unsigned char /*zone*/,
|
||||
unsigned char r,
|
||||
unsigned char g,
|
||||
unsigned char b
|
||||
)
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Lighting Control packet |
|
||||
\*-----------------------------------------------------*/
|
||||
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x05;
|
||||
usb_buf[0x02] = 0x01;
|
||||
usb_buf[0x03] = 0x01;
|
||||
usb_buf[0x04] = r;
|
||||
usb_buf[0x05] = g;
|
||||
usb_buf[0x06] = b;
|
||||
usb_buf[0x0B] = 0x0A;
|
||||
usb_buf[0x0D] = 0x01;
|
||||
usb_buf[0x0E] = 0x01;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 2 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::SendDirectOn
|
||||
(
|
||||
std::vector<SelectedButtons> &frame_data
|
||||
)
|
||||
{
|
||||
SendfeatureReport(0x0E, (unsigned char)frame_data.size(), 0x00, 0x01);
|
||||
|
||||
/*-----------------------------------------------*\
|
||||
| To Guarantee the data are always %4 =0 append |
|
||||
| zeros at end of last packet |
|
||||
\*-----------------------------------------------*/
|
||||
for(unsigned int i = 0; i < (frame_data.size() % 4); i++)
|
||||
{
|
||||
SelectedButtons key;
|
||||
key.idx = 0x00;
|
||||
key.red = 0x00;
|
||||
key.green = 0x00;
|
||||
key.blue = 0x00;
|
||||
|
||||
frame_data.push_back(key);
|
||||
}
|
||||
|
||||
unsigned char usb_buf[65];
|
||||
unsigned int frame_idx = 0;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, 65);
|
||||
|
||||
for(unsigned int packet_idx = 0; packet_idx < frame_data.size(); packet_idx++)
|
||||
{
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x0E;
|
||||
usb_buf[0x02] = 0x01;
|
||||
usb_buf[0x03] = 0x00;
|
||||
usb_buf[0x04] = ++frame_idx;
|
||||
usb_buf[0x05] = frame_data[packet_idx].idx;
|
||||
usb_buf[0x06] = 0x81;
|
||||
usb_buf[0x07] = 0x00;
|
||||
usb_buf[0x08] = 0xA5;
|
||||
usb_buf[0x0A] = 0x0A;
|
||||
usb_buf[0x0B] = frame_data[packet_idx].red;
|
||||
usb_buf[0x0C] = frame_data[packet_idx].green;
|
||||
usb_buf[0x0D] = frame_data[packet_idx].blue;
|
||||
usb_buf[0x12] = 0x01;
|
||||
|
||||
usb_buf[0x14] = frame_data[++packet_idx].idx;
|
||||
usb_buf[0x15] = 0x81;
|
||||
usb_buf[0x16] = 0x00;
|
||||
usb_buf[0x17] = 0xA5;
|
||||
usb_buf[0x19] = 0x0A;
|
||||
usb_buf[0x1A] = frame_data[packet_idx].red;
|
||||
usb_buf[0x1B] = frame_data[packet_idx].green;
|
||||
usb_buf[0x1C] = frame_data[packet_idx].blue;
|
||||
usb_buf[0x21] = 0x01;
|
||||
|
||||
usb_buf[0x23] = frame_data[++packet_idx].idx;
|
||||
usb_buf[0x24] = 0x81;
|
||||
usb_buf[0x25] = 0x00;
|
||||
usb_buf[0x26] = 0xA5;
|
||||
usb_buf[0x28] = 0x0A;
|
||||
usb_buf[0x29] = frame_data[packet_idx].red;
|
||||
usb_buf[0x2A] = frame_data[packet_idx].green;
|
||||
usb_buf[0x2B] = frame_data[packet_idx].blue;
|
||||
usb_buf[0x30] = 0x01;
|
||||
|
||||
usb_buf[0x32] = frame_data[++packet_idx].idx;
|
||||
usb_buf[0x33] = 0x81;
|
||||
usb_buf[0x34] = 0x00;
|
||||
usb_buf[0x35] = 0xA5;
|
||||
usb_buf[0x37] = 0x0A;
|
||||
usb_buf[0x38] = frame_data[packet_idx].red;
|
||||
usb_buf[0x39] = frame_data[packet_idx].green;
|
||||
usb_buf[0x3A] = frame_data[packet_idx].blue;
|
||||
usb_buf[0x3F] = 0x01;
|
||||
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AlienwareAW410KController::SetMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
unsigned char green,
|
||||
unsigned char blue
|
||||
)
|
||||
{
|
||||
SendMode(ALIENWARE_AW410K_ZONE_MODE_KEYBOARD, mode, speed, direction, colorMode, red, green, blue);
|
||||
SendCommit();
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::UpdateSingleLED
|
||||
(
|
||||
unsigned char led,
|
||||
unsigned char red,
|
||||
unsigned char green,
|
||||
unsigned char blue
|
||||
)
|
||||
{
|
||||
SendfeatureReport(0x0E, 0x01, 0x00, 0x01);
|
||||
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Single LED packet |
|
||||
\*-----------------------------------------------------*/
|
||||
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x0E;
|
||||
usb_buf[0x02] = 0x01;
|
||||
usb_buf[0x03] = 0x00;
|
||||
usb_buf[0x04] = 0x01;
|
||||
usb_buf[0x05] = led;
|
||||
usb_buf[0x06] = 0x81;
|
||||
usb_buf[0x07] = 0x00;
|
||||
usb_buf[0x08] = 0xA5;
|
||||
usb_buf[0x09] = 0x00;
|
||||
usb_buf[0x0A] = 0x0A;
|
||||
usb_buf[0x0B] = red;
|
||||
usb_buf[0x0C] = green;
|
||||
usb_buf[0x0D] = blue;
|
||||
usb_buf[0x12] = 0x01;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 20 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||
|
||||
}
|
||||
void AlienwareAW410KController::SendMode
|
||||
(
|
||||
unsigned char /*zone*/,
|
||||
unsigned char mode,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
unsigned char green,
|
||||
unsigned char blue
|
||||
)
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Mode Control packet |
|
||||
\*-----------------------------------------------------*/
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x05;
|
||||
usb_buf[0x02] = 0x01;
|
||||
usb_buf[0x03] = mode;
|
||||
usb_buf[0x04] = red;
|
||||
usb_buf[0x05] = green;
|
||||
usb_buf[0x06] = blue;
|
||||
usb_buf[0x0A] = speed;
|
||||
usb_buf[0x0B] = 0x0A;
|
||||
usb_buf[0x0D] = 0x01;
|
||||
usb_buf[0x0E] = colorMode;
|
||||
usb_buf[0x0F] = direction;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, usb_buf, 65);
|
||||
}
|
||||
|
||||
void AlienwareAW410KController::SetMorphMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned char speed,
|
||||
unsigned char red1,
|
||||
unsigned char green1,
|
||||
unsigned char blue1,
|
||||
unsigned char red2,
|
||||
unsigned char green2,
|
||||
unsigned char blue2
|
||||
)
|
||||
{
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
\*-----------------------------------------------------*/
|
||||
memset(usb_buf, 0x00, sizeof(usb_buf));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Set up Morph Mode packet |
|
||||
\*-----------------------------------------------------*/
|
||||
usb_buf[0x00] = 0x00;
|
||||
usb_buf[0x01] = 0x05;
|
||||
usb_buf[0x02] = 0x01;
|
||||
usb_buf[0x03] = mode;
|
||||
usb_buf[0x04] = red1;
|
||||
usb_buf[0x05] = green1;
|
||||
usb_buf[0x06] = blue1;
|
||||
usb_buf[0x07] = red2;
|
||||
usb_buf[0x08] = green2;
|
||||
usb_buf[0x09] = blue2;
|
||||
usb_buf[0x0E] = 0x02;
|
||||
usb_buf[0x0A] = speed;
|
||||
usb_buf[0x0B] = 0x0A;
|
||||
usb_buf[0x0D] = 0x01;
|
||||
usb_buf[0x0E] = ALIENWARE_AW410K_TWO_USER_DEFINED_COLOR_MODE;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, usb_buf, 65);
|
||||
}
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareAW410KController.h |
|
||||
| |
|
||||
| Driver for Alienware AW410K keyboard |
|
||||
| |
|
||||
| based on AW510K controller by Mohamad Sallal (msallal) |
|
||||
| Dominik Mikolajczyk (dmiko) 23 Oct 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_AW410K_ZONE_MODE_KEYBOARD = 0x01,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD = 0x01,
|
||||
ALIENWARE_AW410K_ZONE_DIRECT_MEDIA = 0x02,
|
||||
ALIENWARE_AW410K_ZONE_DIRECT_INDICATORS = 0x40,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_AW410K_MODE_OFF = 0x00,
|
||||
ALIENWARE_AW410K_MODE_DIRECT = 0x01,
|
||||
ALIENWARE_AW410K_MODE_PULSE = 0x02,
|
||||
ALIENWARE_AW410K_MODE_MORPH = 0x03,
|
||||
ALIENWARE_AW410K_MODE_BREATHING = 0x07,
|
||||
ALIENWARE_AW410K_MODE_SPECTRUM = 0x08,
|
||||
ALIENWARE_AW410K_MODE_SINGLE_WAVE = 0x0F,
|
||||
ALIENWARE_AW410K_MODE_RAINBOW_WAVE = 0x10,
|
||||
ALIENWARE_AW410K_MODE_SCANNER = 0x11,
|
||||
ALIENWARE_AW410K_MODE_STATIC = 0x13,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_AW410K_SPEED_SLOWEST = 0x2D, /* Slowest speed */
|
||||
ALIENWARE_AW410K_SPEED_NORMAL = 0x19, /* Normal speed */
|
||||
ALIENWARE_AW410K_SPEED_FASTEST = 0x0A, /* Fastest speed */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_AW410K_DIRECTION_LEFT_TO_RIGHT = 0x01,
|
||||
ALIENWARE_AW410K_DIRECTION_RIGHT_TO_LEFT = 0x02,
|
||||
ALIENWARE_AW410K_DIRECTION_TOP_TO_BOTTOM = 0x03,
|
||||
ALIENWARE_AW410K_DIRECTION_BOTTOM_TO_TOP = 0x04,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_AW410K_SINGLE_COLOR_MODE = 0x01,
|
||||
ALIENWARE_AW410K_TWO_USER_DEFINED_COLOR_MODE= 0x02,
|
||||
ALIENWARE_AW410K_RANBOW_COLOR_MODE = 0x03,
|
||||
};
|
||||
|
||||
struct SelectedButtons
|
||||
{
|
||||
unsigned char idx;
|
||||
unsigned char red;
|
||||
unsigned char green;
|
||||
unsigned char blue;
|
||||
};
|
||||
|
||||
class AlienwareAW410KController
|
||||
{
|
||||
public:
|
||||
AlienwareAW410KController(hid_device* dev_handle, const char* path, std::string dev_name);
|
||||
~AlienwareAW410KController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
std::string GetSerialString();
|
||||
|
||||
void SendInitialize();
|
||||
void SendCommit();
|
||||
void SendfeatureReport
|
||||
(
|
||||
unsigned char first_byte,
|
||||
unsigned char second_byte,
|
||||
unsigned char third_byte,
|
||||
unsigned char forth_byte
|
||||
);
|
||||
|
||||
void SendEdit();
|
||||
|
||||
void SetDirect
|
||||
(
|
||||
unsigned char zone,
|
||||
unsigned char r,
|
||||
unsigned char g,
|
||||
unsigned char b
|
||||
);
|
||||
|
||||
void SendDirectOn
|
||||
(
|
||||
std::vector<SelectedButtons> &frame_data
|
||||
);
|
||||
|
||||
void SetMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
unsigned char green,
|
||||
unsigned char blue
|
||||
);
|
||||
|
||||
void SetMorphMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned char speed,
|
||||
unsigned char red1,
|
||||
unsigned char green1,
|
||||
unsigned char blue1,
|
||||
unsigned char red2,
|
||||
unsigned char green2,
|
||||
unsigned char blue2
|
||||
);
|
||||
|
||||
void UpdateSingleLED
|
||||
(
|
||||
unsigned char led,
|
||||
unsigned char red,
|
||||
unsigned char green,
|
||||
unsigned char blue
|
||||
);
|
||||
|
||||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string name;
|
||||
|
||||
void SendMode
|
||||
(
|
||||
unsigned char zone,
|
||||
unsigned char mode,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
unsigned char green,
|
||||
unsigned char blue
|
||||
);
|
||||
};
|
||||
|
|
@ -0,0 +1,482 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_AlienwareAW410K.cpp |
|
||||
| |
|
||||
| RGBController for Alienware AW410K keyboard |
|
||||
| |
|
||||
| based on AW510K controller by Mohamad Sallal (msallal) |
|
||||
| Dominik Mikolajczyk (dmiko) 23 Oct 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <iterator>
|
||||
#include "RGBControllerKeyNames.h"
|
||||
#include "RGBController_AlienwareAW410K.h"
|
||||
|
||||
//0xFFFFFFFF indicates an unused entry in matrix
|
||||
#define NA 0xFFFFFFFF
|
||||
|
||||
int GetAW410K_WaveDirection(int input);
|
||||
|
||||
static unsigned int matrix_map[6][24] =
|
||||
{ { 0, NA, 1, 2, 3, 4, NA, 5, 6, 7, 8, 9, 10, 11, 12, NA, 13, 14, 15, NA, NA, 16, 17, 18 },
|
||||
{ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, NA, NA, 33, 34, 35, NA, 36, 37, 38, 39 },
|
||||
{ 40, NA, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, NA, 54, 55, 56, NA, 57, 58, 59, 60 },
|
||||
{ 61, NA, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, NA, 73, NA, NA, NA, NA, NA, 74, 75, 76, NA },
|
||||
{ 77, NA, NA, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, NA, NA, NA, 89, NA, NA, 90, 91, 92, 93 },
|
||||
{ 94, NA, 95, 96, NA, NA, NA, 97, NA, NA, NA, 98, 99, 100, 101, NA, 102, 103, 104, NA, 105, NA, 106, NA }};
|
||||
|
||||
static const char* zone_names[] =
|
||||
{
|
||||
"AW410K",
|
||||
};
|
||||
|
||||
static zone_type zone_types[] =
|
||||
{
|
||||
ZONE_TYPE_MATRIX,
|
||||
};
|
||||
|
||||
static const unsigned int zone_sizes[] =
|
||||
{
|
||||
107,
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char * name;
|
||||
const unsigned char zone;
|
||||
const unsigned char idx;
|
||||
} aw410k_led_type;
|
||||
|
||||
static const aw410k_led_type led_names[] =
|
||||
{
|
||||
/* Key Label Zone, Index */
|
||||
{ KEY_EN_ESCAPE, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xB0 },
|
||||
{ KEY_EN_F1, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x98 },
|
||||
{ KEY_EN_F2, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x90 },
|
||||
{ KEY_EN_F3, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x88 },
|
||||
{ KEY_EN_F4, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x80 },
|
||||
{ KEY_EN_F5, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x70 },
|
||||
{ KEY_EN_F6, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x68 },
|
||||
{ KEY_EN_F7, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x60 },
|
||||
{ KEY_EN_F8, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x58 },
|
||||
{ KEY_EN_F9, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x50 },
|
||||
{ KEY_EN_F10, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x48 },
|
||||
{ KEY_EN_F11, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x40 },
|
||||
{ KEY_EN_F12, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x38 },
|
||||
{ KEY_EN_PRINT_SCREEN, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x30 },
|
||||
{ KEY_EN_SCROLL_LOCK, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x28 },
|
||||
{ KEY_EN_PAUSE_BREAK, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x20 },
|
||||
{ KEY_EN_MEDIA_MUTE, ALIENWARE_AW410K_ZONE_DIRECT_MEDIA, 0x18 },
|
||||
{ KEY_EN_MEDIA_VOLUME_DOWN, ALIENWARE_AW410K_ZONE_DIRECT_MEDIA, 0x10 },
|
||||
{ KEY_EN_MEDIA_VOLUME_UP, ALIENWARE_AW410K_ZONE_DIRECT_MEDIA, 0x08 },
|
||||
{ KEY_EN_BACK_TICK, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xB1 },
|
||||
{ KEY_EN_1, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xA1 },
|
||||
{ KEY_EN_2, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x99 },
|
||||
{ KEY_EN_3, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x91 },
|
||||
{ KEY_EN_4, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x89 },
|
||||
{ KEY_EN_5, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x81 },
|
||||
{ KEY_EN_6, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x79 },
|
||||
{ KEY_EN_7, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x71 },
|
||||
{ KEY_EN_8, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x69 },
|
||||
{ KEY_EN_9, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x61 },
|
||||
{ KEY_EN_0, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x59 },
|
||||
{ KEY_EN_MINUS, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x51 },
|
||||
{ KEY_EN_EQUALS, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x49 },
|
||||
{ KEY_EN_BACKSPACE, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x39 },
|
||||
{ KEY_EN_INSERT, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x31 },
|
||||
{ KEY_EN_HOME, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x29 },
|
||||
{ KEY_EN_PAGE_UP, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x21 },
|
||||
{ KEY_EN_NUMPAD_LOCK, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x19 },
|
||||
{ KEY_EN_NUMPAD_DIVIDE, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x11 },
|
||||
{ KEY_EN_NUMPAD_TIMES, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x09 },
|
||||
{ KEY_EN_NUMPAD_MINUS, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x01 },
|
||||
{ KEY_EN_TAB, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xB2 },
|
||||
{ KEY_EN_Q, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xA2 },
|
||||
{ KEY_EN_W, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x9A },
|
||||
{ KEY_EN_E, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x92 },
|
||||
{ KEY_EN_R, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x8A },
|
||||
{ KEY_EN_T, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x82 },
|
||||
{ KEY_EN_Y, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x7A },
|
||||
{ KEY_EN_U, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x72 },
|
||||
{ KEY_EN_I, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x6A },
|
||||
{ KEY_EN_O, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x62 },
|
||||
{ KEY_EN_P, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x5A },
|
||||
{ KEY_EN_LEFT_BRACKET, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x52 },
|
||||
{ KEY_EN_RIGHT_BRACKET, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x4A },
|
||||
{ KEY_EN_ANSI_BACK_SLASH, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x42 },
|
||||
{ KEY_EN_DELETE, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x32 },
|
||||
{ KEY_EN_END, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x2A },
|
||||
{ KEY_EN_PAGE_DOWN, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x22 },
|
||||
{ KEY_EN_NUMPAD_7, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x1A },
|
||||
{ KEY_EN_NUMPAD_8, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x12 },
|
||||
{ KEY_EN_NUMPAD_9, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x0A },
|
||||
{ KEY_EN_NUMPAD_PLUS, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x03 },
|
||||
{ KEY_EN_CAPS_LOCK, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xB3 },
|
||||
{ KEY_EN_A, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xA3 },
|
||||
{ KEY_EN_S, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x9B },
|
||||
{ KEY_EN_D, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x93 },
|
||||
{ KEY_EN_F, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x8B },
|
||||
{ KEY_EN_G, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x83 },
|
||||
{ KEY_EN_H, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x7B },
|
||||
{ KEY_EN_J, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x73 },
|
||||
{ KEY_EN_K, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x6B },
|
||||
{ KEY_EN_L, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x63 },
|
||||
{ KEY_EN_SEMICOLON, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x5B },
|
||||
{ KEY_EN_QUOTE, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x53 },
|
||||
{ KEY_EN_ANSI_ENTER, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x43 },
|
||||
{ KEY_EN_NUMPAD_4, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x1B },
|
||||
{ KEY_EN_NUMPAD_5, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x13 },
|
||||
{ KEY_EN_NUMPAD_6, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x0B },
|
||||
{ KEY_EN_LEFT_SHIFT, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xB4 },
|
||||
{ KEY_EN_Z, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xA4 },
|
||||
{ KEY_EN_X, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x9C },
|
||||
{ KEY_EN_C, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x94 },
|
||||
{ KEY_EN_V, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x8C },
|
||||
{ KEY_EN_B, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x84 },
|
||||
{ KEY_EN_N, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x7C },
|
||||
{ KEY_EN_M, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x74 },
|
||||
{ KEY_EN_COMMA, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x6C },
|
||||
{ KEY_EN_PERIOD, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x64 },
|
||||
{ KEY_EN_FORWARD_SLASH, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x5C },
|
||||
{ KEY_EN_RIGHT_SHIFT, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x4C },
|
||||
{ KEY_EN_UP_ARROW, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x2C },
|
||||
{ KEY_EN_NUMPAD_1, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x1C },
|
||||
{ KEY_EN_NUMPAD_2, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x14 },
|
||||
{ KEY_EN_NUMPAD_3, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x0C },
|
||||
{ KEY_EN_NUMPAD_ENTER, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x05 },
|
||||
{ KEY_EN_LEFT_CONTROL, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xB5 },
|
||||
{ KEY_EN_LEFT_WINDOWS, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xAD },
|
||||
{ KEY_EN_LEFT_ALT, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0xA5 },
|
||||
{ KEY_EN_SPACE, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x85 },
|
||||
{ KEY_EN_RIGHT_ALT, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x65 },
|
||||
{ KEY_EN_RIGHT_FUNCTION, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x5D },
|
||||
{ KEY_EN_MENU, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x55 },
|
||||
{ KEY_EN_RIGHT_CONTROL, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x4D },
|
||||
{ KEY_EN_LEFT_ARROW, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x35 },
|
||||
{ KEY_EN_DOWN_ARROW, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x2D },
|
||||
{ KEY_EN_RIGHT_ARROW, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x25 },
|
||||
{ KEY_EN_NUMPAD_0, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x1D },
|
||||
{ KEY_EN_NUMPAD_PERIOD, ALIENWARE_AW410K_ZONE_DIRECT_KEYBOARD, 0x0D }
|
||||
};
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name Alienware AW410 Keyboard
|
||||
@category Keyboard
|
||||
@type USB
|
||||
@save :x:
|
||||
@direct :white_check_mark:
|
||||
@effects :white_check_mark:
|
||||
@detectors DetectAlienwareAW410KControllers
|
||||
@comment
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_AlienwareAW410K::RGBController_AlienwareAW410K(AlienwareAW410KController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "Alienware";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "Alienware AW410K Keyboard Device";
|
||||
location = controller->GetDeviceLocation();
|
||||
serial = controller->GetSerialString();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.value = ALIENWARE_AW410K_MODE_DIRECT;
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
mode Static;
|
||||
Static.name = "Static";
|
||||
Static.value = ALIENWARE_AW410K_MODE_STATIC;
|
||||
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
|
||||
Static.colors_min = 1;
|
||||
Static.colors_max = 1;
|
||||
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Static.colors.resize(1);
|
||||
modes.push_back(Static);
|
||||
|
||||
mode Pulse;
|
||||
Pulse.name = "Pulse";
|
||||
Pulse.value = ALIENWARE_AW410K_MODE_PULSE;
|
||||
Pulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
|
||||
Pulse.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Pulse.speed_min = ALIENWARE_AW410K_SPEED_SLOWEST;
|
||||
Pulse.speed_max = ALIENWARE_AW410K_SPEED_NORMAL;
|
||||
Pulse.speed = ALIENWARE_AW410K_SPEED_NORMAL;
|
||||
Pulse.colors_min = 1;
|
||||
Pulse.colors_max = 1;
|
||||
Pulse.colors.resize(1);
|
||||
modes.push_back(Pulse);
|
||||
|
||||
mode Morph;
|
||||
Morph.name = "Morph";
|
||||
Morph.value = ALIENWARE_AW410K_MODE_MORPH;
|
||||
Morph.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR;
|
||||
Morph.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Morph.speed_min = ALIENWARE_AW410K_SPEED_SLOWEST;
|
||||
Morph.speed_max = ALIENWARE_AW410K_SPEED_NORMAL;
|
||||
Morph.speed = ALIENWARE_AW410K_SPEED_NORMAL;
|
||||
Morph.colors_min = 2;
|
||||
Morph.colors_max = 2;
|
||||
Morph.colors.resize(2);
|
||||
modes.push_back(Morph);
|
||||
|
||||
mode Breathing;
|
||||
Breathing.name = "Breathing";
|
||||
Breathing.value = ALIENWARE_AW410K_MODE_BREATHING;
|
||||
Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED;
|
||||
Breathing.colors_min = 1;
|
||||
Breathing.colors_max = 1;
|
||||
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Breathing.colors.resize(1);
|
||||
Breathing.speed_min = ALIENWARE_AW410K_SPEED_SLOWEST;
|
||||
Breathing.speed_max = ALIENWARE_AW410K_SPEED_FASTEST;
|
||||
Breathing.speed = ALIENWARE_AW410K_SPEED_NORMAL;
|
||||
modes.push_back(Breathing);
|
||||
|
||||
mode SingleWave;
|
||||
SingleWave.name = "Single Wave";
|
||||
SingleWave.value = ALIENWARE_AW410K_MODE_SINGLE_WAVE;
|
||||
SingleWave.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD;
|
||||
SingleWave.speed_min = ALIENWARE_AW410K_SPEED_SLOWEST;
|
||||
SingleWave.speed_max = ALIENWARE_AW410K_SPEED_FASTEST;
|
||||
SingleWave.speed = ALIENWARE_AW410K_SPEED_NORMAL;
|
||||
SingleWave.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
SingleWave.colors_min = 1;
|
||||
SingleWave.colors_max = 1;
|
||||
SingleWave.colors.resize(1);
|
||||
modes.push_back(SingleWave);
|
||||
|
||||
mode RainbowWave;
|
||||
RainbowWave.name = "Rainbow Wave";
|
||||
RainbowWave.value = ALIENWARE_AW410K_MODE_RAINBOW_WAVE;
|
||||
RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD;
|
||||
RainbowWave.speed_min = ALIENWARE_AW410K_SPEED_SLOWEST;
|
||||
RainbowWave.speed_max = ALIENWARE_AW410K_SPEED_FASTEST;
|
||||
RainbowWave.speed = ALIENWARE_AW410K_SPEED_NORMAL;
|
||||
RainbowWave.colors_min = 1;
|
||||
RainbowWave.colors_max = 1;
|
||||
RainbowWave.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
RainbowWave.colors.resize(1);
|
||||
modes.push_back(RainbowWave);
|
||||
|
||||
mode Off;
|
||||
Off.name = "Off";
|
||||
Off.value = ALIENWARE_AW410K_MODE_OFF;
|
||||
Off.flags = 0;
|
||||
Off.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Off);
|
||||
|
||||
SetupZones();
|
||||
std::copy(colors.begin(), colors.end(),std::back_inserter(current_colors));
|
||||
}
|
||||
|
||||
RGBController_AlienwareAW410K::~RGBController_AlienwareAW410K()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Delete the matrix map |
|
||||
\*---------------------------------------------------------*/
|
||||
for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++)
|
||||
{
|
||||
if(zones[zone_index].matrix_map != NULL)
|
||||
{
|
||||
delete zones[zone_index].matrix_map;
|
||||
}
|
||||
}
|
||||
|
||||
delete controller;
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW410K::SetupZones()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| Set up zones |
|
||||
\*---------------------------------------------------------*/
|
||||
unsigned int total_led_count = 0;
|
||||
|
||||
for(unsigned int zone_idx = 0; zone_idx < 1; zone_idx++)
|
||||
{
|
||||
zone new_zone;
|
||||
new_zone.name = zone_names[zone_idx];
|
||||
new_zone.type = zone_types[zone_idx];
|
||||
new_zone.leds_min = zone_sizes[zone_idx];
|
||||
new_zone.leds_max = zone_sizes[zone_idx];
|
||||
new_zone.leds_count = zone_sizes[zone_idx];
|
||||
|
||||
if(zone_types[zone_idx] == ZONE_TYPE_MATRIX)
|
||||
{
|
||||
new_zone.matrix_map = new matrix_map_type;
|
||||
new_zone.matrix_map->height = 6;
|
||||
new_zone.matrix_map->width = 24;
|
||||
new_zone.matrix_map->map = (unsigned int *)&matrix_map;
|
||||
}
|
||||
else
|
||||
{
|
||||
new_zone.matrix_map = NULL;
|
||||
}
|
||||
|
||||
zones.push_back(new_zone);
|
||||
|
||||
total_led_count += zone_sizes[zone_idx];
|
||||
}
|
||||
|
||||
for(unsigned int led_idx = 0; led_idx < total_led_count; led_idx++)
|
||||
{
|
||||
led new_led;
|
||||
new_led.name = led_names[led_idx].name;
|
||||
new_led.value = led_names[led_idx].idx;
|
||||
leds.push_back(new_led);
|
||||
}
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW410K::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW410K::DeviceUpdateLEDs()
|
||||
{
|
||||
std::vector<SelectedButtons> frame_buf_keys;
|
||||
std::vector<RGBColor> new_colors;
|
||||
|
||||
std::copy(colors.begin(), colors.end(),std::back_inserter(new_colors));
|
||||
|
||||
for(std::size_t led_idx = 0; led_idx < leds.size(); led_idx++)
|
||||
{
|
||||
SelectedButtons key;
|
||||
|
||||
key.idx = (unsigned char)leds[led_idx].value;
|
||||
key.red = RGBGetRValue(colors[led_idx]);
|
||||
key.green = RGBGetGValue(colors[led_idx]);
|
||||
key.blue = RGBGetBValue(colors[led_idx]);
|
||||
|
||||
frame_buf_keys.push_back(key);
|
||||
}
|
||||
|
||||
controller->SendInitialize();
|
||||
controller->SendfeatureReport(0x05, 0x01, 0x51, 0x00);
|
||||
controller->SendCommit();
|
||||
|
||||
if(frame_buf_keys.size() > 0)
|
||||
{
|
||||
controller->SendDirectOn(frame_buf_keys);
|
||||
}
|
||||
|
||||
std::copy(new_colors.begin(), new_colors.end(),current_colors.begin());
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW410K::UpdateZoneLEDs(int zone)
|
||||
{
|
||||
controller->SetDirect((unsigned char) zone, RGBGetRValue(zones[zone].colors[0]), RGBGetGValue(zones[zone].colors[0]), RGBGetBValue(zones[zone].colors[0]));
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW410K::UpdateSingleLED(int led)
|
||||
{
|
||||
controller->UpdateSingleLED(leds[led].value, RGBGetRValue(colors[led]), RGBGetGValue(colors[led]), RGBGetBValue(colors[led]));
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW410K::DeviceUpdateMode()
|
||||
{
|
||||
if(active_mode == 0xFFFF)
|
||||
{
|
||||
UpdateLEDs();
|
||||
return;
|
||||
}
|
||||
|
||||
controller->SendfeatureReport(0x05, 0x01, 0x51, 0x00);
|
||||
unsigned char red = 0;
|
||||
unsigned char grn = 0;
|
||||
unsigned char blu = 0;
|
||||
|
||||
if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC)
|
||||
{
|
||||
red = RGBGetRValue(modes[active_mode].colors[0]);
|
||||
grn = RGBGetGValue(modes[active_mode].colors[0]);
|
||||
blu = RGBGetBValue(modes[active_mode].colors[0]);
|
||||
}
|
||||
|
||||
switch(modes[active_mode].value)
|
||||
{
|
||||
case ALIENWARE_AW410K_MODE_DIRECT:
|
||||
/*-------------------------------------------------------------*\
|
||||
| Load LEDs again in case of profile load etc. |
|
||||
\*-------------------------------------------------------------*/
|
||||
DeviceUpdateLEDs();
|
||||
break;
|
||||
case ALIENWARE_AW410K_MODE_MORPH:
|
||||
/*-------------------------------------------------------------*\
|
||||
| In case of morph it requires two colors (color1 and color2) |
|
||||
\*-------------------------------------------------------------*/
|
||||
{
|
||||
unsigned char red2 = RGBGetRValue(modes[active_mode].colors[1]);
|
||||
unsigned char grn2 = RGBGetGValue(modes[active_mode].colors[1]);
|
||||
unsigned char blu2 = RGBGetBValue(modes[active_mode].colors[1]);
|
||||
|
||||
controller->SetMorphMode(modes[active_mode].value, modes[active_mode].speed, red, grn, blu, red2, grn2, blu2);
|
||||
}
|
||||
break;
|
||||
|
||||
case ALIENWARE_AW410K_MODE_SPECTRUM:
|
||||
/*-------------------------------------------------------------*\
|
||||
| Spectrum only set mode, speed and colorMode |
|
||||
\*-------------------------------------------------------------*/
|
||||
controller->SetMode(modes[active_mode].value, modes[active_mode].speed, 0x00, ALIENWARE_AW410K_RANBOW_COLOR_MODE, 0x00, 0x00, 0x00);
|
||||
break;
|
||||
|
||||
case ALIENWARE_AW410K_MODE_SINGLE_WAVE:
|
||||
/*-------------------------------------------------------------*\
|
||||
| Wave only set mode, speed, direction and colorMode |
|
||||
\*-------------------------------------------------------------*/
|
||||
{
|
||||
int waveDirection = GetAW410K_WaveDirection(modes[active_mode].direction);
|
||||
controller->SetMode(modes[active_mode].value, modes[active_mode].speed, waveDirection, ALIENWARE_AW410K_SINGLE_COLOR_MODE, red, grn, blu);
|
||||
}
|
||||
break;
|
||||
|
||||
case ALIENWARE_AW410K_MODE_RAINBOW_WAVE:
|
||||
/*-------------------------------------------------------------*\
|
||||
| Wave only set mode, speed, direction and colorMode |
|
||||
\*-------------------------------------------------------------*/
|
||||
{
|
||||
int waveDirection = GetAW410K_WaveDirection(modes[active_mode].direction);
|
||||
controller->SetMode(modes[active_mode].value, modes[active_mode].speed, waveDirection, ALIENWARE_AW410K_RANBOW_COLOR_MODE, 0x00, 0x00, 0x00);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
controller->SetMode(modes[active_mode].value, modes[active_mode].speed, 0x00, ALIENWARE_AW410K_SINGLE_COLOR_MODE, red, grn, blu);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int GetAW410K_WaveDirection(int input)
|
||||
{
|
||||
switch(input)
|
||||
{
|
||||
case MODE_DIRECTION_LEFT:
|
||||
return(ALIENWARE_AW410K_DIRECTION_RIGHT_TO_LEFT);
|
||||
|
||||
case MODE_DIRECTION_RIGHT:
|
||||
return(ALIENWARE_AW410K_DIRECTION_LEFT_TO_RIGHT);
|
||||
|
||||
case MODE_DIRECTION_UP:
|
||||
return(ALIENWARE_AW410K_DIRECTION_BOTTOM_TO_TOP);
|
||||
|
||||
case MODE_DIRECTION_DOWN:
|
||||
return(ALIENWARE_AW410K_DIRECTION_TOP_TO_BOTTOM);
|
||||
|
||||
default:
|
||||
return(ALIENWARE_AW410K_DIRECTION_RIGHT_TO_LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_AlienwareAW410K.h |
|
||||
| |
|
||||
| RGBController for Alienware AW410K keyboard |
|
||||
| |
|
||||
| based on AW510K controller by Mohamad Sallal (msallal) |
|
||||
| Dominik Mikolajczyk (dmiko) 23 Oct 2023 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareAW410KController.h"
|
||||
|
||||
class RGBController_AlienwareAW410K : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_AlienwareAW410K(AlienwareAW410KController* controller_ptr);
|
||||
~RGBController_AlienwareAW410K();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
AlienwareAW410KController* controller;
|
||||
std::vector<RGBColor> current_colors;
|
||||
};
|
||||
|
|
@ -1,19 +1,23 @@
|
|||
/*-----------------------------------------*\
|
||||
| AlienwareAW510KController.cpp |
|
||||
| |
|
||||
| Driver for Alienware AW510K |
|
||||
| keyboard light controller |
|
||||
| |
|
||||
| Mohamad Sallal - msallal 05/22/2021 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareAW510KController.cpp |
|
||||
| |
|
||||
| Driver for Alienware AW510K keyboard |
|
||||
| |
|
||||
| Mohamad Sallal (msallal) 22 May 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "AlienwareAW510KController.h"
|
||||
#include <cstring>
|
||||
#include "AlienwareAW510KController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
AlienwareAW510KController::AlienwareAW510KController(hid_device* dev_handle, const char* path)
|
||||
AlienwareAW510KController::AlienwareAW510KController(hid_device* dev_handle, const char* path, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
|
||||
SendCommit();
|
||||
}
|
||||
|
|
@ -28,20 +32,27 @@ std::string AlienwareAW510KController::GetDeviceLocation()
|
|||
return("HID: " + location);
|
||||
}
|
||||
|
||||
std::string AlienwareAW510KController::GetDeviceName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
std::string AlienwareAW510KController::GetSerialString()
|
||||
{
|
||||
wchar_t serial_string[128];
|
||||
hid_get_serial_number_string(dev, serial_string, 128);
|
||||
int ret = hid_get_serial_number_string(dev, serial_string, 128);
|
||||
|
||||
std::wstring return_wstring = serial_string;
|
||||
std::string return_string(return_wstring.begin(), return_wstring.end());
|
||||
if(ret != 0)
|
||||
{
|
||||
return("");
|
||||
}
|
||||
|
||||
return(return_string);
|
||||
return(StringUtils::wstring_to_string(serial_string));
|
||||
}
|
||||
|
||||
void AlienwareAW510KController::SendCommit()
|
||||
{
|
||||
char usb_buf[65];
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -63,7 +74,7 @@ void AlienwareAW510KController::SendCommit()
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 20 milliseconds |
|
||||
|
|
@ -71,7 +82,6 @@ void AlienwareAW510KController::SendCommit()
|
|||
std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||
}
|
||||
|
||||
|
||||
void AlienwareAW510KController::SendfeatureReport
|
||||
(
|
||||
unsigned char first_byte,
|
||||
|
|
@ -80,7 +90,7 @@ void AlienwareAW510KController::SendfeatureReport
|
|||
unsigned char forth_byte
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -99,7 +109,7 @@ void AlienwareAW510KController::SendfeatureReport
|
|||
/*-----------------------------------------------------*\
|
||||
| Send Feature report packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_send_feature_report(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_send_feature_report(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 10 milliseconds |
|
||||
|
|
@ -109,7 +119,7 @@ void AlienwareAW510KController::SendfeatureReport
|
|||
|
||||
void AlienwareAW510KController::SendEdit()
|
||||
{
|
||||
char usb_buf[65];
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -127,7 +137,7 @@ void AlienwareAW510KController::SendEdit()
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 2 milliseconds |
|
||||
|
|
@ -137,7 +147,7 @@ void AlienwareAW510KController::SendEdit()
|
|||
|
||||
void AlienwareAW510KController::SendInitialize()
|
||||
{
|
||||
char usb_buf[65];
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -162,7 +172,7 @@ void AlienwareAW510KController::SendInitialize()
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 2 milliseconds |
|
||||
|
|
@ -216,7 +226,7 @@ void AlienwareAW510KController::SendDirectOn
|
|||
std::vector<SelectedKeys> &frame_data
|
||||
)
|
||||
{
|
||||
SendfeatureReport(0x0E, frame_data.size(), 0x00, 0x01);
|
||||
SendfeatureReport(0x0E, (unsigned char)frame_data.size(), 0x00, 0x01);
|
||||
|
||||
/*-----------------------------------------------*\
|
||||
| To Guarantee the data are always %4 =0 append |
|
||||
|
|
@ -296,7 +306,7 @@ void AlienwareAW510KController::SendDirectOn
|
|||
void AlienwareAW510KController::SetMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned short speed,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
|
|
@ -318,7 +328,7 @@ void AlienwareAW510KController::UpdateSingleLED
|
|||
{
|
||||
SendfeatureReport(0x0E, 0x01, 0x00, 0x01);
|
||||
|
||||
char usb_buf[65];
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -348,7 +358,7 @@ void AlienwareAW510KController::UpdateSingleLED
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, usb_buf, 65);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 20 milliseconds |
|
||||
|
|
@ -360,7 +370,7 @@ void AlienwareAW510KController::SendMode
|
|||
(
|
||||
unsigned char /*zone*/,
|
||||
unsigned char mode,
|
||||
unsigned short speed,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
|
|
@ -368,7 +378,7 @@ void AlienwareAW510KController::SendMode
|
|||
unsigned char blue
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -394,13 +404,13 @@ void AlienwareAW510KController::SendMode
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, usb_buf, 65);
|
||||
}
|
||||
|
||||
void AlienwareAW510KController::SetMorphMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned short speed,
|
||||
unsigned char speed,
|
||||
unsigned char red1,
|
||||
unsigned char green1,
|
||||
unsigned char blue1,
|
||||
|
|
@ -409,7 +419,7 @@ void AlienwareAW510KController::SetMorphMode
|
|||
unsigned char blue2
|
||||
)
|
||||
{
|
||||
char usb_buf[65];
|
||||
unsigned char usb_buf[65];
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
|
@ -438,5 +448,5 @@ void AlienwareAW510KController::SetMorphMode
|
|||
/*-----------------------------------------------------*\
|
||||
| Send packet |
|
||||
\*-----------------------------------------------------*/
|
||||
hid_write(dev, (unsigned char *)usb_buf, 65);
|
||||
hid_write(dev, usb_buf, 65);
|
||||
}
|
||||
|
|
@ -1,19 +1,20 @@
|
|||
/*-----------------------------------------*\
|
||||
| AlienwareAW510KController.h |
|
||||
| |
|
||||
| Definitions and types for alienware |
|
||||
| AW510K Keyboard |
|
||||
| |
|
||||
| Mohamad Sallal - msallal 05/22/2021 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController.h"
|
||||
|
||||
#include <string>
|
||||
#include <hidapi/hidapi.h>
|
||||
/*---------------------------------------------------------*\
|
||||
| AlienwareAW510KController.h |
|
||||
| |
|
||||
| Driver for Alienware AW510K keyboard |
|
||||
| |
|
||||
| Mohamad Sallal (msallal) 22 May 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <hidapi.h>
|
||||
#include "RGBController.h"
|
||||
|
||||
enum
|
||||
{
|
||||
ALIENWARE_AW510K_ZONE_MODE_KEYBOARD = 0x01,
|
||||
|
|
@ -76,10 +77,11 @@ struct SelectedKeys
|
|||
class AlienwareAW510KController
|
||||
{
|
||||
public:
|
||||
AlienwareAW510KController(hid_device* dev_handle, const char* path);
|
||||
AlienwareAW510KController(hid_device* dev_handle, const char* path, std::string dev_name);
|
||||
~AlienwareAW510KController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
std::string GetDeviceName();
|
||||
std::string GetSerialString();
|
||||
|
||||
void SendInitialize();
|
||||
|
|
@ -110,7 +112,7 @@ public:
|
|||
void SetMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned short speed,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
|
|
@ -121,7 +123,7 @@ public:
|
|||
void SetMorphMode
|
||||
(
|
||||
unsigned char mode,
|
||||
unsigned short speed,
|
||||
unsigned char speed,
|
||||
unsigned char red1,
|
||||
unsigned char green1,
|
||||
unsigned char blue1,
|
||||
|
|
@ -141,12 +143,13 @@ public:
|
|||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string name;
|
||||
|
||||
void SendMode
|
||||
(
|
||||
unsigned char zone,
|
||||
unsigned char mode,
|
||||
unsigned short speed,
|
||||
unsigned char speed,
|
||||
unsigned char direction,
|
||||
unsigned char colorMode,
|
||||
unsigned char red,
|
||||
|
|
@ -1,15 +1,17 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AlienwareAW510K.cpp |
|
||||
| |
|
||||
| Generic RGB Interface for alienware |
|
||||
| AW510K Keyboard |
|
||||
| |
|
||||
| Mohamad Sallal - msallal 05/22/2021 |
|
||||
\*-----------------------------------------*/
|
||||
/*---------------------------------------------------------*\
|
||||
| RGBController_AlienwareAW510K.cpp |
|
||||
| |
|
||||
| RGBController for Alienware AW510K keyboard |
|
||||
| |
|
||||
| Mohamad Sallal (msallal) 22 May 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <iterator>
|
||||
#include "RGBControllerKeyNames.h"
|
||||
#include "RGBController_AlienwareAW510K.h"
|
||||
#include <iterator>
|
||||
|
||||
//0xFFFFFFFF indicates an unused entry in matrix
|
||||
#define NA 0xFFFFFFFF
|
||||
|
|
@ -45,9 +47,9 @@ typedef struct
|
|||
const char * name;
|
||||
const unsigned char zone;
|
||||
const unsigned char idx;
|
||||
} led_type;
|
||||
} aw510k_led_type;
|
||||
|
||||
static const led_type led_names[] =
|
||||
static const aw510k_led_type led_names[] =
|
||||
{
|
||||
/* Key Label Zone, Index */
|
||||
{ KEY_EN_ESCAPE, ALIENWARE_AW510K_ZONE_DIRECT_KEYBOARD, 0xB0 },
|
||||
|
|
@ -173,7 +175,7 @@ RGBController_AlienwareAW510K::RGBController_AlienwareAW510K(AlienwareAW510KCont
|
|||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "Alienware AW510K Keyboard Device";
|
||||
name = controller->GetDeviceName();
|
||||
vendor = "Alienware";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "Alienware AW510K Keyboard Device";
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_AlienwareAW510K.h |
|
||||
| |
|
||||
| RGBController for Alienware AW510K keyboard |
|
||||
| |
|
||||
| Mohamad Sallal (msallal) 22 May 2021 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareAW510KController.h"
|
||||
|
||||
class RGBController_AlienwareAW510K : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_AlienwareAW510K(AlienwareAW510KController* controller_ptr);
|
||||
~RGBController_AlienwareAW510K();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
AlienwareAW510KController* controller;
|
||||
std::vector<RGBColor> current_colors;
|
||||
};
|
||||
|
|
@ -1,18 +1,29 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareKeyboardControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for Alienware Keyboard |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <hidapi.h>
|
||||
#include "Detector.h"
|
||||
#include "AlienwareAW510KController.h"
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareAW410KController.h"
|
||||
#include "RGBController_AlienwareAW510K.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
#include "RGBController_AlienwareAW410K.h"
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Alienware vendor ID |
|
||||
\*-----------------------------------------------------*/
|
||||
#define ALIENWARE_VID 0x04F2
|
||||
#define ALIENWARE_VID 0x04F2
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Keyboard product IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define ALIENWARE_AW510K_PID 0x1830
|
||||
#define ALIENWARE_AW510K_PID 0x1830
|
||||
#define ALIENWARE_AW410K_PID 0x1968
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
|
|
@ -27,12 +38,25 @@ void DetectAlienwareAW510KControllers(hid_device_info* info, const std::string&
|
|||
hid_device* dev = hid_open_path(info->path);
|
||||
if( dev )
|
||||
{
|
||||
AlienwareAW510KController* controller = new AlienwareAW510KController(dev, info->path);
|
||||
AlienwareAW510KController* controller = new AlienwareAW510KController(dev, info->path, name);
|
||||
RGBController_AlienwareAW510K* rgb_controller = new RGBController_AlienwareAW510K(controller);
|
||||
rgb_controller->name = name;
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
} /* DetectAlienwareKeyboardControllers() */
|
||||
}
|
||||
|
||||
void DetectAlienwareAW410KControllers(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
if( dev )
|
||||
{
|
||||
AlienwareAW410KController* controller = new AlienwareAW410KController(dev, info->path, name);
|
||||
RGBController_AlienwareAW410K* rgb_controller = new RGBController_AlienwareAW410K(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}/* DetectAlienwareKeyboardControllers() */
|
||||
|
||||
|
||||
REGISTER_HID_DETECTOR_IPU("Alienware AW510K", DetectAlienwareAW510KControllers, ALIENWARE_VID, ALIENWARE_AW510K_PID, 0x02, 0xFF00, 0x01);
|
||||
REGISTER_HID_DETECTOR_IPU("Alienware AW410K", DetectAlienwareAW410KControllers, ALIENWARE_VID, ALIENWARE_AW410K_PID, 0x02, 0xFF00, 0x01);
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_AlienwareAW510K.h |
|
||||
| |
|
||||
| Generic RGB Interface for Alienware |
|
||||
| AW510K keyboard |
|
||||
| |
|
||||
| Mohamad Sallal - msallal 05/22/2021 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "AlienwareAW510KController.h"
|
||||
|
||||
class RGBController_AlienwareAW510K : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_AlienwareAW510K(AlienwareAW510KController* controller_ptr);
|
||||
~RGBController_AlienwareAW510K();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
AlienwareAW510KController* controller;
|
||||
std::vector<RGBColor> current_colors;
|
||||
};
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareAW3423DWFController.cpp |
|
||||
| |
|
||||
| Driver for the Alienware AW3423DWF monitor |
|
||||
| |
|
||||
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <bitset>
|
||||
#include <chrono>
|
||||
#include <cstring>
|
||||
#include <thread>
|
||||
|
||||
#include "AlienwareAW3423DWFController.h"
|
||||
#include "StringUtils.h"
|
||||
|
||||
AlienwareAW3423DWFController::AlienwareAW3423DWFController(hid_device *dev_handle, const char *path) : dev(dev_handle), location(path){}
|
||||
|
||||
void AlienwareAW3423DWFController::SendControlPacket(const unsigned char *data, size_t length)
|
||||
{
|
||||
unsigned char buffer[256] = {0x00};
|
||||
memcpy(buffer + 1, data, length);
|
||||
|
||||
hid_write(dev, buffer, length + 1);
|
||||
}
|
||||
|
||||
std::vector<unsigned char> AlienwareAW3423DWFController::GetReportResponse()
|
||||
{
|
||||
uint8_t buffer[193];
|
||||
|
||||
memset(buffer, 0, 193);
|
||||
|
||||
hid_get_input_report(dev, buffer, 193);
|
||||
|
||||
return std::vector<unsigned char>(buffer + 1, buffer + 18);
|
||||
}
|
||||
|
||||
void AlienwareAW3423DWFController::PerformLogin()
|
||||
{
|
||||
unsigned char init_packet[64] =
|
||||
{
|
||||
0x40, 0xE1, 0x01
|
||||
};
|
||||
SendControlPacket(init_packet, 4);
|
||||
|
||||
std::vector<unsigned char> response = GetReportResponse();
|
||||
|
||||
std::vector<unsigned char> key = GenerateKey(response);
|
||||
|
||||
unsigned char login_packet[192] = {0x00};
|
||||
login_packet[0] = 0x40;
|
||||
login_packet[1] = 0xE1;
|
||||
login_packet[2] = 0x02;
|
||||
memcpy(login_packet + 64, key.data(), key.size());
|
||||
|
||||
SendControlPacket(login_packet, 192);
|
||||
}
|
||||
|
||||
void AlienwareAW3423DWFController::SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b)
|
||||
{
|
||||
unsigned char led_id_2 = (led_id == 0x01) ? 0xf6 : (led_id == 0x02) ? 0xf5
|
||||
: (led_id == 0x08) ? 0xff
|
||||
: 0xfc;
|
||||
PerformLogin();
|
||||
|
||||
unsigned char color_packet[192] = {0x00};
|
||||
|
||||
color_packet[0] = 0x40;
|
||||
color_packet[1] = 0xC6;
|
||||
color_packet[6] = 0x0A;
|
||||
color_packet[8] = 0x6E;
|
||||
color_packet[10] = 0x82;
|
||||
color_packet[64] = 0x51;
|
||||
color_packet[65] = 0x87;
|
||||
color_packet[66] = 0xD0;
|
||||
color_packet[67] = 0x04;
|
||||
|
||||
color_packet[68] = led_id;
|
||||
color_packet[69] = r;
|
||||
color_packet[70] = g;
|
||||
color_packet[71] = b;
|
||||
color_packet[72] = 0x64;
|
||||
color_packet[73] = led_id_2;
|
||||
|
||||
SendControlPacket(color_packet, 192);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(200));
|
||||
}
|
||||
|
||||
std::vector<unsigned char> AlienwareAW3423DWFController::GenerateKey(
|
||||
const std::vector<unsigned char> &response)
|
||||
{
|
||||
std::vector<unsigned char> syn_key(8, 0);
|
||||
|
||||
const std::vector<unsigned char> oem_key = {
|
||||
0xf5, 0x3f, 0xc1, 0x39, 0x44, 0x3a, 0x31, 0x79, 0x0d, 0xb1, 0x82, 0x76
|
||||
};
|
||||
|
||||
size_t sk_idx = 0, ok_idx = 0;
|
||||
while(ok_idx < oem_key.size() && sk_idx < 8)
|
||||
{
|
||||
unsigned char ok_sub_len = (oem_key[ok_idx] & 1) + ((oem_key[ok_idx] & 0x10) >> 4);
|
||||
|
||||
for(unsigned int i = 0; i < ok_sub_len && sk_idx < 8; i++)
|
||||
{
|
||||
syn_key[sk_idx] = oem_key[ok_idx + 1] ^ oem_key[ok_idx];
|
||||
ok_idx++;
|
||||
sk_idx++;
|
||||
}
|
||||
ok_idx++;
|
||||
}
|
||||
|
||||
std::vector<unsigned char> out_buffer;
|
||||
|
||||
uint16_t v15 = static_cast<uint16_t>(response[15]) |
|
||||
(static_cast<uint16_t>(response[0]) << 8);
|
||||
bool parity_odd = (std::bitset<16>(v15).count() % 2 != 0);
|
||||
|
||||
if(parity_odd)
|
||||
{
|
||||
size_t end = std::min<size_t>(8, response.size());
|
||||
out_buffer = std::vector<unsigned char>(response.begin(), response.begin() + end);
|
||||
|
||||
if(response.size() > 14)
|
||||
{
|
||||
unsigned char idx = response[14] & 0x07;
|
||||
if((idx + 8) < (unsigned char)response.size())
|
||||
{
|
||||
out_buffer[idx] ^= response[idx + 8];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t start = std::min<size_t>(8, response.size());
|
||||
size_t end = std::min<size_t>(start + 8, response.size());
|
||||
out_buffer = std::vector<unsigned char>(response.begin() + start, response.begin() + end);
|
||||
|
||||
if(response.size() > 6)
|
||||
{
|
||||
unsigned char idx = response[6] & 0x07;
|
||||
if(idx < response.size())
|
||||
{
|
||||
out_buffer[idx] ^= response[idx];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(size_t i = 0; i < 8 && i < out_buffer.size(); i++)
|
||||
{
|
||||
syn_key[i] ^= out_buffer[i];
|
||||
}
|
||||
|
||||
return syn_key;
|
||||
}
|
||||
|
||||
AlienwareAW3423DWFController::~AlienwareAW3423DWFController()
|
||||
{
|
||||
if(dev)
|
||||
{
|
||||
hid_close(dev);
|
||||
dev = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
std::string AlienwareAW3423DWFController::GetLocation()
|
||||
{
|
||||
return "HID: " + location;
|
||||
}
|
||||
|
||||
std::string AlienwareAW3423DWFController::GetSerialString()
|
||||
{
|
||||
wchar_t serial[256];
|
||||
if(hid_get_serial_number_string(dev, serial, 256) >= 0)
|
||||
{
|
||||
std::wstring ws(serial);
|
||||
return StringUtils::wstring_to_string(ws);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareAW3423DWFController.h |
|
||||
| |
|
||||
| Driver for the Alienware AW3423DWF monitor |
|
||||
| |
|
||||
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <hidapi.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class AlienwareAW3423DWFController
|
||||
{
|
||||
public:
|
||||
AlienwareAW3423DWFController(hid_device* dev_handle, const char* path);
|
||||
~AlienwareAW3423DWFController();
|
||||
|
||||
std::string GetLocation();
|
||||
std::string GetSerialString();
|
||||
void SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b);
|
||||
|
||||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
|
||||
static const std::vector<std::vector<unsigned char>> OEM_KEYS;
|
||||
|
||||
void PerformLogin();
|
||||
std::vector<unsigned char> GenerateKey(const std::vector<unsigned char>& response);
|
||||
void SendControlPacket(const unsigned char* data, size_t length);
|
||||
std::vector<unsigned char> GetReportResponse();
|
||||
};
|
||||
|
|
@ -0,0 +1,146 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareMonitorController.cpp |
|
||||
| |
|
||||
| Detector for Alienware monitors |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 08 May 2025 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <chrono>
|
||||
#include <cstring>
|
||||
#include <thread>
|
||||
|
||||
#include "AlienwareMonitorController.h"
|
||||
|
||||
AlienwareMonitorController::AlienwareMonitorController(hid_device *dev_handle, const char *path, std::string dev_name)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
name = dev_name;
|
||||
|
||||
Initialize();
|
||||
}
|
||||
|
||||
AlienwareMonitorController::~AlienwareMonitorController()
|
||||
{
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
std::string AlienwareMonitorController::GetLocation()
|
||||
{
|
||||
return("HID: " + location);
|
||||
}
|
||||
|
||||
std::string AlienwareMonitorController::GetName()
|
||||
{
|
||||
return(name);
|
||||
}
|
||||
|
||||
std::string AlienwareMonitorController::GetSerialString()
|
||||
{
|
||||
return("");
|
||||
}
|
||||
|
||||
void fillInChecksum(unsigned char *packet)
|
||||
{
|
||||
unsigned char checksum = 110;
|
||||
|
||||
for(unsigned int index = 5; index <= 13; index++)
|
||||
{
|
||||
checksum ^= packet[index];
|
||||
}
|
||||
|
||||
packet[14] = checksum;
|
||||
}
|
||||
|
||||
void AlienwareMonitorController::SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b)
|
||||
{
|
||||
unsigned char packet[65];
|
||||
|
||||
memset(packet, 0xFF, sizeof(packet));
|
||||
|
||||
packet[0] = 0x00;
|
||||
packet[1] = 0x92;
|
||||
packet[2] = 0x37;
|
||||
packet[3] = 0x0a;
|
||||
packet[4] = 0x00;
|
||||
packet[5] = 0x51;
|
||||
packet[6] = 0x87;
|
||||
packet[7] = 0xd0;
|
||||
packet[8] = 0x04;
|
||||
|
||||
packet[9] = led_id;
|
||||
packet[10] = r;
|
||||
packet[11] = g;
|
||||
packet[12] = b;
|
||||
packet[13] = 0x64;
|
||||
|
||||
fillInChecksum(packet);
|
||||
|
||||
hid_write(dev, packet, sizeof(packet));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 50 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
}
|
||||
|
||||
void AlienwareMonitorController::Initialize()
|
||||
{
|
||||
unsigned char packet[65];
|
||||
|
||||
memset(packet, 0xFF, sizeof(packet));
|
||||
|
||||
packet[0] = 0x00;
|
||||
packet[1] = 0x95;
|
||||
packet[2] = 0x00;
|
||||
packet[3] = 0x00;
|
||||
packet[4] = 0x00;
|
||||
|
||||
hid_write(dev, packet, sizeof(packet));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 50 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
|
||||
memset(packet, 0xFF, sizeof(packet));
|
||||
|
||||
packet[0] = 0x00;
|
||||
packet[1] = 0x92;
|
||||
packet[2] = 0x37;
|
||||
packet[3] = 0x08;
|
||||
packet[4] = 0x00;
|
||||
packet[5] = 0x51;
|
||||
packet[6] = 0x85;
|
||||
packet[7] = 0x01;
|
||||
packet[8] = 0xFE;
|
||||
packet[9] = 0x03;
|
||||
packet[10] = 0x00;
|
||||
packet[11] = 0x06;
|
||||
packet[12] = 0x40;
|
||||
|
||||
hid_write(dev, packet, sizeof(packet));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 50 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
|
||||
memset(packet, 0x00, sizeof(packet));
|
||||
|
||||
packet[0] = 0x00;
|
||||
packet[1] = 0x93;
|
||||
packet[2] = 0x37;
|
||||
packet[3] = 0x12;
|
||||
|
||||
hid_write(dev, packet, sizeof(packet));
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Delay 50 milliseconds |
|
||||
\*-----------------------------------------------------*/
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareMonitorController.h |
|
||||
| |
|
||||
| Detector for Alienware monitors |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 08 May 2025 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <hidapi.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class AlienwareMonitorController
|
||||
{
|
||||
public:
|
||||
AlienwareMonitorController(hid_device* dev_handle, const char* path, std::string dev_name);
|
||||
~AlienwareMonitorController();
|
||||
|
||||
std::string GetLocation();
|
||||
std::string GetName();
|
||||
std::string GetSerialString();
|
||||
void SendColor(unsigned char led_id, unsigned char r, unsigned char g, unsigned char b);
|
||||
|
||||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
std::string name;
|
||||
|
||||
void Initialize();
|
||||
};
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| AlienwareMonitorControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for Alienware monitors |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 08 May 2025 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "Detector.h"
|
||||
#include "AlienwareAW3423DWFController.h"
|
||||
#include "AlienwareMonitorController.h"
|
||||
#include "RGBController_AlienwareAW3423DWF.h"
|
||||
#include "RGBController_AlienwareMonitor.h"
|
||||
#include <hidapi.h>
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Alienware Vendor ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define ALIENWARE_VID 0x187C
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Alienware Vendor ID |
|
||||
\*---------------------------------------------------------*/
|
||||
#define ALIENWARE_AW3423DWF_PID 0x100E
|
||||
#define ALIENWARE_AW3225QF_PID 0x1013
|
||||
#define ALIENWARE_USAGE_PAGE 0xFFDA
|
||||
#define ALIENWARE_USAGE 0x00DA
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
* AlienwareAW3423DWFControllerDetect *
|
||||
* *
|
||||
* Tests the USB address to see if an Alienware AW3423DWF exists there. *
|
||||
* *
|
||||
\******************************************************************************************/
|
||||
|
||||
void DetectAlienwareAW3423DWFControllers(hid_device_info* info, const std::string&)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
if(dev)
|
||||
{
|
||||
AlienwareAW3423DWFController* controller = new AlienwareAW3423DWFController(dev, info->path);
|
||||
RGBController_AlienwareAW3423DWF* rgb_controller = new RGBController_AlienwareAW3423DWF(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
void DetectAlienwareMonitorControllers(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
AlienwareMonitorController* controller = new AlienwareMonitorController(dev, info->path, name);
|
||||
RGBController_AlienwareMonitor* rgb_controller = new RGBController_AlienwareMonitor(controller);
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR("Alienware AW3423DWF", DetectAlienwareAW3423DWFControllers, ALIENWARE_VID, ALIENWARE_AW3423DWF_PID);
|
||||
REGISTER_HID_DETECTOR("Alienware AW3225QF", DetectAlienwareMonitorControllers, ALIENWARE_VID, ALIENWARE_AW3225QF_PID);
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_AlienwareAW3423DWF.cpp |
|
||||
| |
|
||||
| RGBController for the Alienware AW3423DWF monitor |
|
||||
| |
|
||||
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include "RGBController_AlienwareAW3423DWF.h"
|
||||
|
||||
/**------------------------------------------------------------------*\
|
||||
@name AW3423DWF
|
||||
@category Accessory
|
||||
@type USB
|
||||
@save :x:
|
||||
@direct :white_check_mark:
|
||||
@effects :x:
|
||||
@detectors DetectAlienwareAW3423DWFControllers
|
||||
@comment
|
||||
\*-------------------------------------------------------------------*/
|
||||
|
||||
RGBController_AlienwareAW3423DWF::RGBController_AlienwareAW3423DWF(AlienwareAW3423DWFController* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "Alienware AW3423DWF";
|
||||
vendor = "Alienware";
|
||||
type = DEVICE_TYPE_MONITOR;
|
||||
description = "Alienware AW3423DWF Monitor Device";
|
||||
location = controller->GetLocation();
|
||||
serial = controller->GetSerialString();
|
||||
|
||||
mode Direct;
|
||||
Direct.name = "Direct";
|
||||
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR;
|
||||
Direct.color_mode = MODE_COLORS_PER_LED;
|
||||
modes.push_back(Direct);
|
||||
|
||||
active_mode = 0;
|
||||
|
||||
SetupZones();
|
||||
}
|
||||
|
||||
RGBController_AlienwareAW3423DWF::~RGBController_AlienwareAW3423DWF()
|
||||
{
|
||||
delete controller;
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW3423DWF::SetupZones()
|
||||
{
|
||||
zone Logo;
|
||||
Logo.name = "Logo";
|
||||
Logo.type = ZONE_TYPE_SINGLE;
|
||||
Logo.leds_min = 1;
|
||||
Logo.leds_max = 1;
|
||||
Logo.leds_count = 1;
|
||||
Logo.matrix_map = NULL;
|
||||
zones.push_back(Logo);
|
||||
|
||||
led Logo_LED;
|
||||
Logo_LED.name = "Logo";
|
||||
Logo_LED.value = 0x01;
|
||||
leds.push_back(Logo_LED);
|
||||
|
||||
zone Number;
|
||||
Number.name = "Number";
|
||||
Number.type = ZONE_TYPE_SINGLE;
|
||||
Number.leds_min = 1;
|
||||
Number.leds_max = 1;
|
||||
Number.leds_count = 1;
|
||||
Number.matrix_map = NULL;
|
||||
zones.push_back(Number);
|
||||
|
||||
led Number_LED;
|
||||
Number_LED.name = "Number";
|
||||
Number_LED.value = 0x02;
|
||||
leds.push_back(Number_LED);
|
||||
|
||||
zone PowerButton;
|
||||
PowerButton.name = "Power Button";
|
||||
PowerButton.type = ZONE_TYPE_SINGLE;
|
||||
PowerButton.leds_min = 1;
|
||||
PowerButton.leds_max = 1;
|
||||
PowerButton.leds_count = 1;
|
||||
PowerButton.matrix_map = NULL;
|
||||
zones.push_back(PowerButton);
|
||||
|
||||
led PowerButton_LED;
|
||||
PowerButton_LED.name = "Power Button";
|
||||
PowerButton_LED.value = 0x08;
|
||||
leds.push_back(PowerButton_LED);
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW3423DWF::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW3423DWF::DeviceUpdateLEDs()
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| If all three colors are the same value, speed up the |
|
||||
| direct mode by using the ALL target (0x0B) instead of |
|
||||
| setting each LED individually. |
|
||||
\*-----------------------------------------------------*/
|
||||
if((colors[0] == colors[1]) && (colors[1] == colors[2]))
|
||||
{
|
||||
unsigned char red = RGBGetRValue(colors[0]);
|
||||
unsigned char grn = RGBGetGValue(colors[0]);
|
||||
unsigned char blu = RGBGetBValue(colors[0]);
|
||||
controller->SendColor(0x0B, red, grn, blu);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(unsigned int led_idx = 0; led_idx < leds.size(); led_idx++)
|
||||
{
|
||||
UpdateSingleLED(led_idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW3423DWF::UpdateZoneLEDs(int /*zone*/)
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW3423DWF::UpdateSingleLED(int led)
|
||||
{
|
||||
unsigned char red = RGBGetRValue(colors[led]);
|
||||
unsigned char grn = RGBGetGValue(colors[led]);
|
||||
unsigned char blu = RGBGetBValue(colors[led]);
|
||||
controller->SendColor(leds[led].value, red, grn, blu);
|
||||
}
|
||||
|
||||
void RGBController_AlienwareAW3423DWF::DeviceUpdateMode()
|
||||
{
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| RGBController_AlienwareAW3423DWF.h |
|
||||
| |
|
||||
| RGBController for the Alienware AW3423DWF monitor |
|
||||
| |
|
||||
| Ferréol DUBOIS COLI (Fefe_du_973) 23 Jan 2025 |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "AlienwareAW3423DWFController.h"
|
||||
#include "RGBController.h"
|
||||
|
||||
class RGBController_AlienwareAW3423DWF : public RGBController
|
||||
{
|
||||
public:
|
||||
explicit RGBController_AlienwareAW3423DWF(AlienwareAW3423DWFController* controller_ptr);
|
||||
~RGBController_AlienwareAW3423DWF();
|
||||
|
||||
void SetupZones();
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
private:
|
||||
AlienwareAW3423DWFController* controller;
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue