Compare commits
521 Commits
2.0.0-alph
...
master
Author | SHA1 | Date |
---|---|---|
LordGrey | cd22d4454d | |
dependabot[bot] | 33722c9a09 | |
dependabot[bot] | 41bffecc0b | |
dependabot[bot] | f49e1a2c0b | |
LordGrey | 08dc59c885 | |
LordGrey | 48cea4ad9b | |
LordGrey | 7909997398 | |
LordGrey | a5bb7e905b | |
LordGrey | d1879c2e39 | |
LordGrey | c0dc08b0c0 | |
LordGrey | 5bf25c98ad | |
LordGrey | da275dd448 | |
Paulchen-Panther | 1257cfff70 | |
LordGrey | 42c98da470 | |
LordGrey | 64642a4457 | |
Christoph Pohl | af1a31b842 | |
dependabot[bot] | a7ce0f8a4c | |
Paulchen-Panther | 00ce3ff089 | |
Paulchen-Panther | 54d03b8065 | |
lsellens | 2a17de37f1 | |
LordGrey | 5535b884bf | |
Hyperion-Bot | 79b31e16e0 | |
dependabot[bot] | e3496eb4dc | |
Paulchen-Panther | 08e7c7d8c2 | |
Paulchen-Panther | e0060eb406 | |
dependabot[bot] | 2f09f9a0b8 | |
Portisch | 85eb62f314 | |
Hyperion-Bot | c73f8623b8 | |
Harald | e59e456b00 | |
Rastafabisch | a393f6211c | |
LordGrey | b2fcea3bbd | |
LordGrey | 24a00e3b0b | |
Hyperion-Bot | bfba0d6137 | |
Hyperion-Bot | fd82f58269 | |
Michael Rochelle | acdf733936 | |
LordGrey | a1bfa63343 | |
Hyperion-Bot | 21c5c6a122 | |
LordGrey | 1ae37d151e | |
Hyperion-Bot | 093361d3e4 | |
Hyperion-Bot | f4391a512b | |
Hyperion-Bot | f062aa71c5 | |
Hyperion-Bot | 6251b58ff9 | |
Hyperion-Bot | dea0a17df4 | |
Hyperion-Bot | 22fa008c4b | |
LordGrey | bf418686e3 | |
LordGrey | a57bcbc2b8 | |
LordGrey | ef7ceb0bbf | |
dependabot[bot] | f327b5063e | |
LordGrey | fa7a5b6b56 | |
LordGrey | f665f1e1b6 | |
dependabot[bot] | e3a82b2890 | |
dependabot[bot] | 09d1ef4883 | |
LordGrey | 6fa7bab6f7 | |
LordGrey | 1189f86c1a | |
LordGrey | 2217135336 | |
LordGrey | 10b755b2ec | |
LordGrey | c4e681f6b3 | |
LordGrey | b109703189 | |
LordGrey | a2db590d2a | |
Hyperion-Bot | 46f996310d | |
Hyperion-Bot | dc8dc566e0 | |
Hyperion-Bot | 4d0c3723de | |
Hyperion-Bot | 29db3ba593 | |
Hyperion-Bot | 6b17123259 | |
Hyperion-Bot | 5098a7a11e | |
Hyperion-Bot | 905515c46f | |
Hyperion-Bot | 1d12fe45ca | |
Hyperion-Bot | 1127087b52 | |
LordGrey | 547a976000 | |
xkns | 7a31e2bb6d | |
LordGrey | 80aafa22ec | |
dependabot[bot] | 1848744e6e | |
dependabot[bot] | 97e5e01a27 | |
dependabot[bot] | b1fe042a9f | |
dependabot[bot] | 0ea1522000 | |
LordGrey | 06091b0786 | |
dependabot[bot] | 49b83abcdf | |
LordGrey | 9df21b9ddd | |
LordGrey | e8fc8a9855 | |
LordGrey | cb76afa4d9 | |
LordGrey | 9d23d9e2d6 | |
dependabot[bot] | d219dac36c | |
LordGrey | 95e53b4720 | |
LordGrey | 9f6704118e | |
Drzony | 2008e2c3d7 | |
xkns | 2fb2fc9dd7 | |
LordGrey | a2266b177f | |
dependabot[bot] | e17ce6cd4e | |
dependabot[bot] | cef70af78d | |
dependabot[bot] | ec553985b9 | |
LordGrey | c7a1fc6b32 | |
LordGrey | 8000c3e8b7 | |
tuxuser | abde114dc4 | |
dependabot[bot] | c47a3054d2 | |
dependabot[bot] | 19711f71fa | |
dependabot[bot] | 6946794680 | |
dependabot[bot] | 975f5cc309 | |
dependabot[bot] | e25d0a61a6 | |
James | de41f014ec | |
Hyperion-Bot | a608c336dc | |
LordGrey | 359618a4ee | |
LordGrey | 400fa78679 | |
LordGrey | ec496ed457 | |
tuxuser | 7c76322215 | |
LordGrey | fdab2586a5 | |
LordGrey | 5dc696b8dc | |
Hyperion-Bot | 858e2bbff0 | |
Hyperion-Bot | f0c0262dec | |
LordGrey | ec71772f98 | |
Hyperion-Bot | 2ac8f30bb1 | |
Hyperion-Bot | 62990974f5 | |
LordGrey | 8f65f34247 | |
imgbot[bot] | 988ea97346 | |
Hyperion-Bot | a4b7490ed1 | |
Hyperion-Bot | 3dc81e1a0c | |
Hyperion-Bot | 1311dc9d87 | |
Hyperion-Bot | 3a15f35740 | |
Hyperion-Bot | c7afa35127 | |
Hyperion-Bot | 83c5b7fb4a | |
Hyperion-Bot | d5e796208b | |
Hyperion-Bot | e055fb9e15 | |
LordGrey | e9936e131b | |
LordGrey | 3ef4ebc1a4 | |
Paulchen-Panther | f27010088d | |
Aaron Godfrey | f721240e58 | |
ShalokShalom | 613ae7c922 | |
Hyperion-Bot | 7f174b2872 | |
LordGrey | 2388044a93 | |
Markus | addff6f7ef | |
LordGrey | f32db90c12 | |
LordGrey | 62829d9bf8 | |
Paulchen Panther | c75c98e252 | |
LordGrey | 3e8c6f3b25 | |
Paulchen Panther | f9a5772aa5 | |
Hyperion-Bot | 4c472d50ca | |
Paulchen Panther | 15015a4257 | |
LordGrey | 320ec00108 | |
LordGrey | 5cd3881067 | |
tuxuser | 14b6a114bb | |
LordGrey | 160c5d0b3a | |
Hyperion-Bot | 0a3df596cf | |
Hyperion-Bot | 51a1044787 | |
Hyperion-Bot | f2d0857798 | |
Hyperion-Bot | 518e15a129 | |
Hyperion-Bot | a14d9d1af5 | |
Hyperion-Bot | 7651c71b63 | |
LordGrey | 5078688dc8 | |
Paulchen Panther | 9e4b58d5c6 | |
Paulchen Panther | da64ab58d5 | |
Markus | a8342b4a6a | |
LordGrey | 2efc03b612 | |
Markus | 98654e48f6 | |
LordGrey | 2f573a117f | |
Jamie Burchell | c38ec60208 | |
LordGrey | fcd0fb0c52 | |
LordGrey | 442fab9c59 | |
Paulchen Panther | a0d4efc10d | |
LordGrey | 17582ac38a | |
Markus | 7840317cc0 | |
LordGrey | e3b494428a | |
Markus | 926a58de9c | |
Markus | df149583d3 | |
LordGrey | 72d99a1121 | |
LordGrey | 7311c3e424 | |
Hyperion-Bot | f156f52123 | |
Hyperion-Bot | c7e91c8c6d | |
Hyperion-Bot | a5f970b975 | |
LordGrey | d395e0a3b1 | |
Hyperion-Bot | ac941aebe1 | |
Hyperion-Bot | 06d72adbca | |
Hyperion-Bot | 6181360785 | |
Hyperion-Bot | d8cb6b5479 | |
Hyperion-Bot | fbf6886dfe | |
Hyperion-Bot | 4c7ce6e509 | |
Hyperion-Bot | 7d33d93b32 | |
Hyperion-Bot | 3c361cb2a2 | |
Markus | dd3229d582 | |
LordGrey | 80ec037832 | |
LordGrey | ad293b2fb6 | |
Markus | b33466d392 | |
LordGrey | 67280b8566 | |
LordGrey | 25d79a9f3f | |
LordGrey | 3b1ca20b10 | |
LordGrey | b8bb1adbba | |
LordGrey | b0c529c05d | |
LordGrey | 954112a88e | |
Markus | ba32b875ab | |
LordGrey | e51a42dc14 | |
Markus | 8b1267d059 | |
Markus | 3761ff47d2 | |
Markus | a1dee08195 | |
LordGrey | c9a7258160 | |
LordGrey | 532ac7e330 | |
Markus | ac1dad77e3 | |
Markus | 23470ac90a | |
Markus | 084e28f0ca | |
Markus | 788e843846 | |
LordGrey | 4db8afda87 | |
Markus | 2c79656b4a | |
Markus | 672354fb5c | |
LordGrey | a6b63d8e91 | |
Paulchen-Panther | 17e8c6bca0 | |
LordGrey | d5a71f21fe | |
Hyperion-Bot | ef375886e1 | |
hissingshark | 9e8740b6df | |
Markus | eb96553975 | |
LordGrey | f269268def | |
Hyperion-Bot | af24e6d623 | |
Hyperion-Bot | 785ad10c01 | |
Hyperion-Bot | 90e8765910 | |
Hyperion-Bot | e6a3396085 | |
Hyperion-Bot | d0b40b629a | |
LordGrey | 2a10ef955d | |
LordGrey | 8134917c51 | |
LordGrey | da49f25b4e | |
LordGrey | 8a785e70c8 | |
Markus | 8fb3d76b9c | |
LordGrey | b9d5178e55 | |
LordGrey | 1dfcd4d8ec | |
Hyperion-Bot | 5fe1dbb67c | |
Hyperion-Bot | 9c830b22a6 | |
Hyperion-Bot | 87d73bd040 | |
LordGrey | 22a39f1b47 | |
LordGrey | 1ef3a106f1 | |
LordGrey | f0bd38d473 | |
LordGrey | 12cdd1d58a | |
Hyperion-Bot | 42e7f85864 | |
Serhan S | 5c233bc8ec | |
Markus | dfb4766f95 | |
Serhan S | a30e3237cc | |
Serhan S | ce368aa84c | |
LordGrey | bd3e12d3ac | |
Markus | 0227694d20 | |
Markus | fa957aeeda | |
LordGrey | d3a912f014 | |
LordGrey | d3c8e6da4e | |
Markus | 5ef8c23ba0 | |
LordGrey | 76cdfd3638 | |
Markus | 9cb01dc49b | |
Paulchen-Panther | 4f3c853263 | |
Hyperion-Bot | 3476409ed4 | |
Hyperion-Bot | e523b6ef8d | |
LordGrey | 10b6317777 | |
LordGrey | a25f0698d7 | |
Markus | 22a3e3fb20 | |
Hyperion-Bot | 9968c0f3e3 | |
Hyperion-Bot | 4bc16c2348 | |
Hyperion-Bot | 30a1dc7ed5 | |
Hyperion-Bot | 5a334d9c56 | |
Hyperion-Bot | f08170c074 | |
Hyperion-Bot | 0beca22cb8 | |
Hyperion-Bot | 5005c2b998 | |
Hyperion-Bot | a7846396fd | |
Hyperion-Bot | 9ce989cea8 | |
Hyperion-Bot | c4cd5d8f08 | |
Hyperion-Bot | a488a68f51 | |
Hyperion-Bot | 790999e349 | |
Hyperion-Bot | 56194f6fb4 | |
Hyperion-Bot | 2e60657479 | |
imgbot[bot] | 888848a1e7 | |
Markus | c135d91986 | |
Markus | b0e1510a78 | |
Markus | 8dc4ff9a34 | |
LordGrey | f98938020a | |
Jumper78 | a777620d2f | |
LordGrey | 6d004240de | |
LordGrey | a9fb5fa359 | |
LordGrey | 4c2806f966 | |
LordGrey | 9199aa8216 | |
Paulchen Panther | 0d826570bd | |
Hyperion-Bot | 599d70243c | |
LordGrey | feec395756 | |
imaprogrammer | 016855898a | |
Hyperion-Bot | 03afc0db8f | |
Hyperion-Bot | 43159a9373 | |
Hyperion-Bot | cbe309f5b8 | |
Hyperion-Bot | 0b27e8c963 | |
Hyperion-Bot | a60e18d12b | |
Hyperion-Bot | 4c5b506ace | |
Hyperion-Bot | eb09d680b6 | |
Hyperion-Bot | a34d5d609f | |
Hyperion-Bot | bf4b951f55 | |
Hyperion-Bot | dafd168b6a | |
Hyperion-Bot | 53fa0a6d63 | |
Hyperion-Bot | 91d52ca8ba | |
Hyperion-Bot | a3b3e50eb9 | |
Hyperion-Bot | 802dc56382 | |
Hyperion-Bot | f662da589e | |
Hyperion-Bot | 6e3179ae90 | |
Hyperion-Bot | adb11437e1 | |
Hyperion-Bot | 247f1c4505 | |
Hyperion-Bot | dc8629251a | |
Hyperion-Bot | 07cc9bc74f | |
Hyperion-Bot | 9ed12929d2 | |
Hyperion-Bot | 7e71dc93b0 | |
Hyperion-Bot | dc7bef79b0 | |
Hyperion-Bot | ffa072ae3a | |
Hyperion-Bot | cc98def67e | |
Hyperion-Bot | 8705936707 | |
Hyperion-Bot | 2c5c3db42b | |
Hyperion-Bot | 05ebac1d47 | |
Hyperion-Bot | 2286c009da | |
Hyperion-Bot | c8eb44f28e | |
Hyperion-Bot | 5b9ec04d32 | |
Hyperion-Bot | fc4ac645f0 | |
Hyperion-Bot | eb451cd0c2 | |
Hyperion-Bot | 831cc39bbc | |
Hyperion-Bot | 99bab35e34 | |
Hyperion-Bot | 739052f03d | |
Hyperion-Bot | 0ad77f2d5b | |
Hyperion-Bot | cd2b8a596f | |
Hyperion-Bot | 6ec0208fb7 | |
Hyperion-Bot | 21931cbf13 | |
Hyperion-Bot | 1d54811e85 | |
Hyperion-Bot | 14e8357c53 | |
Hyperion-Bot | c58bf9c680 | |
Hyperion-Bot | 4409bcef8b | |
Hyperion-Bot | f990562514 | |
LordGrey | a8def65764 | |
LordGrey | 9b427b9397 | |
LordGrey | cf084265fc | |
Paulchen Panther | 17d4406deb | |
Paulchen Panther | aec24e9246 | |
LordGrey | 71e34a6a55 | |
Daniel Schwierzeck | 724d90bfdb | |
LordGrey | 35ffeb740f | |
Portisch | aede77b7ca | |
LordGrey | 7eeb740177 | |
TheGroundZero | a4d98fd916 | |
LordGrey | 6f0ccdbe25 | |
LordGrey | a3c8fba7a3 | |
Paulchen-Panther | dc0e953c40 | |
LordGrey | f870096a66 | |
LordGrey | 94d9b02734 | |
LordGrey | 41af5c1b9e | |
Serhan S | 956edf9e78 | |
Serhan S | 675e9b9e21 | |
Paulchen-Panther | 709728aa81 | |
dependabot[bot] | 48240bbd21 | |
dependabot[bot] | 1b09504b26 | |
Paulchen Panther | 36385acc9a | |
Dermot Duffy | 28164c7b80 | |
mlaurijsse | 68d06f14fe | |
LordGrey | 3ae9bc998b | |
Gerion Entrup | 6a4aabd5e9 | |
Gerion Entrup | 74a6795991 | |
Calvin | 2b66754997 | |
LordGrey | 90d05e6c54 | |
Vincent Tavernier | 9475b93d9f | |
Paulchen Panther | 45bd23ca5c | |
Gerion Entrup | 6ed9553ca3 | |
Chris Browet | f843b5a046 | |
LordGrey | 9e281b2347 | |
LordGrey | 77262adf3b | |
Paulchen Panther | ac88fdd80f | |
Paulchen Panther | 4ff9e52ba7 | |
LordGrey | 86ab15d18c | |
Cosmicbase | 4f85ac1c4b | |
LordGrey | be894c821d | |
ChR-iSz | 8a028328ce | |
Panagiotis Koutsias | c17727beb0 | |
thosoo | c253b820b3 | |
Paulchen Panther | 0f2563235d | |
Paulchen Panther | 2bc8bf7ecb | |
FlouHappy | a31f995959 | |
Paulchen Panther | fbd10e8865 | |
dependabot[bot] | b345b9e657 | |
Paulchen Panther | a42aae44d1 | |
Paulchen Panther | 0cbb276631 | |
Paulchen Panther | ef6526212a | |
Paulchen Panther | 83338dc394 | |
Florent Benoist | c4e15dba00 | |
LordGrey | a0311bd8b5 | |
Hyperion-Bot | 83543f10b2 | |
Hyperion-Bot | 0367257a41 | |
Hyperion-Bot | cbcbf72d1a | |
Hyperion-Bot | ec16ed1932 | |
Hyperion-Bot | 05bb622702 | |
Hyperion-Bot | 41a8399767 | |
Hyperion-Bot | 93cd8f6560 | |
Hyperion-Bot | 2c598db887 | |
Hyperion-Bot | ab444e5987 | |
Hyperion-Bot | af6ea4d77a | |
Hyperion-Bot | 38b7965190 | |
Hyperion-Bot | b5b21b58c7 | |
Paulchen Panther | 38e9d8aef0 | |
Paulchen Panther | 9ae0f4cfc4 | |
LordGrey | efc2046ab5 | |
LordGrey | d28540a7fe | |
LordGrey | 56f45a4930 | |
LordGrey | d5a1e7d19d | |
LordGrey | 758d9a70c5 | |
Dermot Duffy | e2c8735fde | |
LordGrey | 36c05142a3 | |
The-Master777 | 0dd8e45364 | |
LordGrey | 83455441fa | |
LordGrey | bb652ade36 | |
Peter Eskdale | 85a55de28c | |
Paulchen Panther | 958975975c | |
Chris Browet | f7ccf9d0da | |
Awawa | 9e4c7af5e9 | |
Serhan S | 0cddc06844 | |
Serhan S | d1d1789a5f | |
Paulchen Panther | 4928117e8e | |
Serhan S | 1d6664d4f0 | |
Serhan S | 0647faadb8 | |
Paulchen Panther | 69eec61de8 | |
Paulchen Panther | f3dc25891d | |
Paulchen Panther | 1d35338b83 | |
Sören | 1ae522237c | |
LordGrey | 65a036dfc0 | |
Paulchen Panther | 1910d359bc | |
Paulchen Panther | 4d37409d62 | |
imgbot[bot] | 669b108aaa | |
LordGrey | a8492d6586 | |
Paulchen Panther | da8a216587 | |
LordGrey | 7e370b3d8b | |
LordGrey | 3bf1089763 | |
LordGrey | db1dae45d2 | |
LordGrey | 83b8a800d8 | |
Demian Kellermann | 8f991001c1 | |
Paulchen Panther | 84607b4063 | |
Denrage | 02d0ab68f6 | |
The-Master777 | c09061e5d8 | |
Paulchen Panther | aa465c018c | |
Paulchen-Panther | 9d2e442d42 | |
LordGrey | 5d5b24979d | |
LordGrey | 730b5d5681 | |
LordGrey | 28cbec1009 | |
LordGrey | f72a1d7737 | |
The-Master777 | 6c68454bea | |
TPmodding | f11885fd8b | |
Hyperion-Bot | 28c12a86a8 | |
Murat Seker | c711d62354 | |
Hyperion-Bot | e53760bcad | |
Hyperion-Bot | 90a29145cf | |
Paulchen Panther | 510af27e76 | |
LordGrey | 5c95fab894 | |
Paulchen-Panther | 08909b8a25 | |
TPmodding | 70b7e11e67 | |
TPmodding | ee4238a108 | |
Hyperion-Bot | a0722df741 | |
Hyperion-Bot | 8181575198 | |
Hyperion-Bot | c03c7c3698 | |
Hyperion-Bot | 828d4b5a9a | |
Hyperion-Bot | fb177c1526 | |
Hyperion-Bot | e29de52f76 | |
Hyperion-Bot | a0b293f9ec | |
Hyperion-Bot | ce979dd66b | |
Hyperion-Bot | d9be4094f2 | |
Hyperion-Bot | bdc5e226a1 | |
Hyperion-Bot | bae64abc66 | |
Hyperion-Bot | c4b1d12ec1 | |
Paulchen Panther | b804f28132 | |
Murat Seker | 5e922be4d3 | |
Paulchen Panther | 9b729f8913 | |
Murat Seker | be0bccea59 | |
dependabot[bot] | 11d98fddb9 | |
dependabot[bot] | feecd67397 | |
LordGrey | 7a685185f4 | |
LordGrey | 4aabe175cd | |
TPmodding | fbd8167458 | |
Murat | 9204f8a313 | |
Jeff Rescignano | 8bb5833250 | |
Murat Seker | 120a563ca0 | |
Paulchen-Panther | 6cd7fc60b3 | |
Paulchen-Panther | 50e9084d2f | |
LordGrey | 8b2ebf355d | |
LordGrey | 31b5be39b5 | |
LordGrey | ca02649330 | |
LordGrey | 24b861d3b5 | |
Murat Seker | 35ea94e639 | |
LordGrey | 7f676a8a4a | |
Jeff Rescignano | ba13eec863 | |
Murat Seker | 6e039a0d83 | |
Murat | 0a2961a3b4 | |
Murat Seker | fda061bc87 | |
Murat Seker | 71dbd77708 | |
Paulchen-Panther | 3e4d106580 | |
Mirko Vogt | 5a684e2056 | |
Paulchen Panther | 4971a07f26 | |
Murat Seker | ff47f9ce7b | |
Murat Seker | bc57a45089 | |
Murat Seker | bae39f667d | |
Murat | 0383dec836 | |
Raymond Mouthaan | 838092e2e6 | |
Paulchen Panther | b00b38791d | |
LordGrey | 16353a5906 | |
Murat | 4a688b932a | |
Murat Seker | 4099d12d9a | |
Murat Seker | a18ccb8b48 | |
Murat Seker | 63d95a5a2a | |
Murat Seker | c00d8e62fb | |
Murat Seker | 5758b19cbc | |
Murat Seker | 1df0e9ce17 | |
Murat Seker | f3f07e0c82 | |
Murat Seker | be329fb7bb | |
Murat Seker | 29ee5e2c41 | |
Murat | dd2d5e4b40 | |
Murat | 6ad511881e | |
Murat | 54ee71a46a | |
Murat Seker | 13205a9d11 | |
LordGrey | 11d7614591 | |
Murat Seker | b7a9a10223 | |
Murat Seker | d183c630c8 | |
Murat Seker | 031b9a6b7c | |
m33ts4k0z | d1a2b77ce3 | |
brindosch | 94c23653de | |
Murat Seker | 8824e69986 | |
dependabot[bot] | d9e33885a0 | |
LordGrey | 85cbf630f6 | |
Mathijs Groothuis | fcac80d3d5 | |
Paulchen Panther | 7550a93e59 | |
Murat Seker | d4b4158cb7 | |
Paulchen Panther | 773b47bf53 | |
SJunkies | 374945346a | |
Mathijs Groothuis | cedd1e81c9 | |
Sersch | 67e0371cf5 | |
LordGrey | a9ad9d920f | |
Serhan | a2809046b5 | |
Paulchen Panther | cce6980982 |
114
.azure.yml
114
.azure.yml
|
@ -1,114 +0,0 @@
|
|||
jobs:
|
||||
|
||||
######################
|
||||
###### Linux #########
|
||||
######################
|
||||
|
||||
- job: Linux
|
||||
timeoutInMinutes: 120
|
||||
pool:
|
||||
vmImage: 'ubuntu-16.04'
|
||||
strategy:
|
||||
matrix:
|
||||
AMD64 (x64):
|
||||
dockerTag: 'amd64'
|
||||
dockerName: 'Debian Stretch (AMD64)'
|
||||
platform: 'x11'
|
||||
ARMv6hf (Raspberry Pi v1 & ZERO):
|
||||
dockerTag: 'armv6hf'
|
||||
dockerName: 'Debian Stretch (Raspberry Pi v1 & ZERO)'
|
||||
platform: 'rpi'
|
||||
ARMv7hf (Raspberry Pi 2 & 3):
|
||||
dockerTag: 'armv7hf'
|
||||
dockerName: 'Debian Stretch (Raspberry Pi 2 & 3)'
|
||||
platform: 'rpi'
|
||||
ARMv8 (Generic AARCH64):
|
||||
dockerTag: 'aarch64'
|
||||
dockerName: 'ARMv8 (Generic AARCH64)'
|
||||
platform: 'amlogic'
|
||||
|
||||
steps:
|
||||
- checkout: self # represents the repo where the initial Pipelines YAML file was found
|
||||
submodules: recursive # set to 'recursive' to get submodules of submodules
|
||||
|
||||
# build process
|
||||
- bash: ./.ci/ci_build.sh
|
||||
displayName: 'Build $(dockerName) packages'
|
||||
env:
|
||||
DOCKER_TAG: $(dockerTag)
|
||||
DOCKER_NAME: $(dockerName)
|
||||
PLATFORM: $(platform)
|
||||
|
||||
######################
|
||||
###### macOS #########
|
||||
######################
|
||||
|
||||
- job: macOS
|
||||
timeoutInMinutes: 120
|
||||
pool:
|
||||
vmImage: 'macOS-10.14'
|
||||
|
||||
steps:
|
||||
- checkout: self # represents the repo where the initial Pipelines YAML file was found
|
||||
submodules: recursive # set to 'recursive' to get submodules of submodules
|
||||
|
||||
# install dependencies
|
||||
- bash: ./.ci/ci_install.sh
|
||||
displayName: 'Install dependencies'
|
||||
|
||||
# build process
|
||||
- bash: ./.ci/ci_build.sh
|
||||
env:
|
||||
PLATFORM: 'osx'
|
||||
condition: succeeded()
|
||||
displayName: 'Build macOS 10.13 packages'
|
||||
|
||||
######################
|
||||
###### windows #######
|
||||
######################
|
||||
|
||||
- job: windows
|
||||
timeoutInMinutes: 120
|
||||
pool:
|
||||
vmImage: 'windows-latest'
|
||||
variables:
|
||||
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
|
||||
|
||||
steps:
|
||||
- checkout: self # represents the repo where the initial Pipelines YAML file was found
|
||||
submodules: recursive # set to 'recursive' to get submodules of submodules
|
||||
|
||||
# install qt 5.15 via aqtinstall
|
||||
- script: |
|
||||
cd $(Build.SourcesDirectory)
|
||||
python -m pip install aqtinstall
|
||||
python -m aqt install -O c:\Qt 5.15.0 windows desktop win64_msvc2019_64
|
||||
displayName: 'Install Qt'
|
||||
|
||||
# use Python 3.x from the tool cache
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '3.x'
|
||||
addToPath: true
|
||||
architecture: 'x64'
|
||||
displayName: 'Install Python'
|
||||
|
||||
# install nsis via chocolatey
|
||||
- powershell: choco install --no-progress nsis -y
|
||||
displayName: 'Install NSIS'
|
||||
|
||||
# install openssl via chocolatey
|
||||
- powershell: choco install --no-progress openssl -y
|
||||
displayName: 'Install OpenSSL'
|
||||
|
||||
# register x64 architecture environment
|
||||
- script: |
|
||||
call "%VCINSTALLDIR%\Auxiliary\Build\vcvars64.bat"
|
||||
displayName: 'Set up x64 build architecture environment'
|
||||
|
||||
# build process
|
||||
- bash: ./.ci/ci_build.sh
|
||||
env:
|
||||
PLATFORM: 'windows'
|
||||
condition: succeeded()
|
||||
displayName: 'Build windows packages'
|
|
@ -1,12 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
# detect CI
|
||||
if [ "$SYSTEM_COLLECTIONID" != "" ]; then
|
||||
# Azure Pipelines
|
||||
echo "Azure detected"
|
||||
CI_NAME="$(echo "$AGENT_OS" | tr '[:upper:]' '[:lower:]')"
|
||||
CI_BUILD_DIR="$BUILD_SOURCESDIRECTORY"
|
||||
elif [ "$HOME" != "" ]; then
|
||||
if [ "$HOME" != "" ]; then
|
||||
# GitHub Actions
|
||||
echo "Github Actions detected"
|
||||
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||
|
@ -26,8 +21,11 @@ else
|
|||
PLATFORM=${PLATFORM}-dev
|
||||
fi
|
||||
|
||||
echo "Platform: ${PLATFORM}, build type: ${BUILD_TYPE}, CI_NAME: $CI_NAME, docker image: ${DOCKER_IMAGE}, docker type: ${DOCKER_TAG}"
|
||||
|
||||
# Build the package on osx or linux
|
||||
if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
|
||||
echo "Compile Hyperion on OSX or Darwin"
|
||||
# compile prepare
|
||||
mkdir build || exit 1
|
||||
cd build
|
||||
|
@ -37,16 +35,19 @@ if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
|
|||
exit 0;
|
||||
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
|
||||
elif [[ $CI_NAME == *"mingw64_nt"* || "$CI_NAME" == 'windows_nt' ]]; then
|
||||
echo "Compile Hyperion on Windows"
|
||||
# compile prepare
|
||||
echo "Number of Cores $NUMBER_OF_PROCESSORS"
|
||||
mkdir build || exit 1
|
||||
cd build
|
||||
cmake -G "Visual Studio 16 2019" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2
|
||||
cmake --build . --target package --config Release -- -nologo -v:m -maxcpucount || exit 3
|
||||
cmake -G "Visual Studio 17 2022" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE="Release" ../ || exit 2
|
||||
cmake --build . --target package --config "Release" -- -nologo -v:m -maxcpucount || exit 3
|
||||
exit 0;
|
||||
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
|
||||
elif [[ "$CI_NAME" == 'linux' ]]; then
|
||||
echo "Compile Hyperion with DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}"
|
||||
echo "Compile Hyperion with DOCKER_IMAGE = ${DOCKER_IMAGE}, DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}"
|
||||
# set GitHub Container Registry url
|
||||
REGISTRY_URL="ghcr.io/hyperion-project/${DOCKER_IMAGE}"
|
||||
# take ownership of deploy dir
|
||||
mkdir ${CI_BUILD_DIR}/deploy
|
||||
|
||||
|
@ -54,7 +55,7 @@ elif [[ "$CI_NAME" == 'linux' ]]; then
|
|||
docker run --rm \
|
||||
-v "${CI_BUILD_DIR}/deploy:/deploy" \
|
||||
-v "${CI_BUILD_DIR}:/source:ro" \
|
||||
hyperionproject/hyperion-ci:$DOCKER_TAG \
|
||||
$REGISTRY_URL:$DOCKER_TAG \
|
||||
/bin/bash -c "mkdir hyperion && cp -r source/. /hyperion &&
|
||||
cd /hyperion && mkdir build && cd build &&
|
||||
cmake -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2 &&
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
# detect CI
|
||||
if [ "$SYSTEM_COLLECTIONID" != "" ]; then
|
||||
# Azure Pipelines
|
||||
CI_NAME="$(echo "$AGENT_OS" | tr '[:upper:]' '[:lower:]')"
|
||||
CI_BUILD_DIR="$BUILD_SOURCESDIRECTORY"
|
||||
elif [ "$HOME" != "" ]; then
|
||||
if [ "$HOME" != "" ]; then
|
||||
# GitHub Actions
|
||||
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||
CI_BUILD_DIR="$GITHUB_WORKSPACE"
|
||||
|
@ -19,12 +15,15 @@ function installAndUpgrade()
|
|||
arr=("$@")
|
||||
for i in "${arr[@]}";
|
||||
do
|
||||
list_output=`brew list | grep $i`
|
||||
list_output=`brew list --formula | grep $i`
|
||||
outdated_output=`brew outdated | grep $i`
|
||||
|
||||
if [[ ! -z "$list_output" ]]; then
|
||||
if [[ ! -z "$outdated_output" ]]; then
|
||||
echo "Outdated package: ${outdated_output}"
|
||||
brew unlink ${outdated_output}
|
||||
brew upgrade $i
|
||||
brew link --overwrite $i
|
||||
fi
|
||||
else
|
||||
brew install $i
|
||||
|
@ -38,12 +37,4 @@ if [[ $CI_NAME == 'osx' || $CI_NAME == 'darwin' ]]; then
|
|||
brew update
|
||||
dependencies=("qt5" "python" "libusb" "cmake" "doxygen")
|
||||
installAndUpgrade "${dependencies[@]}"
|
||||
# github actions uname -> windows-2019 -> mingw64_nt-10.0-17763
|
||||
# TODO: Azure uname windows?
|
||||
elif [[ $CI_NAME == *"mingw64_nt"* ]]; then
|
||||
echo "Yes, we are Windows: $CI_NAME"
|
||||
# Windows has no dependency manager
|
||||
elif [[ $CI_NAME != 'linux' ]]; then
|
||||
echo "Unsupported platform: $CI_NAME"
|
||||
exit 5
|
||||
fi
|
||||
|
|
76
.codedocs
76
.codedocs
|
@ -1,76 +0,0 @@
|
|||
# Hyperion.NG .codedocs Configuration File
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# CodeDocs Configuration
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# Include the Doxygen configuration from another file.
|
||||
# The file must be a relative path with respect to the root of the repository.
|
||||
|
||||
DOXYFILE =
|
||||
|
||||
# Specify external repository to link documentation with.
|
||||
# This is similar to Doxygen's TAGFILES option, but will automatically link to
|
||||
# tags of other repositories already using CodeDocs. List each repository to
|
||||
# link with by giving its location in the form of owner/repository.
|
||||
# For example:
|
||||
# TAGLINKS = doxygen/doxygen CodeDocs/osg
|
||||
# Note: these repositories must already be built on CodeDocs.
|
||||
|
||||
TAGLINKS =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Doxygen Configuration
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# Doxygen configuration may also be placed in this file.
|
||||
# Currently, the following Doxygen configuration options are available. Refer
|
||||
# to http://doxygen.org/manual/config.html for detailed explanation of the
|
||||
# options. To request support for more options, contact support@codedocs.xyz.
|
||||
#
|
||||
# ABBREVIATE_BRIEF =
|
||||
# ALIASES =
|
||||
# ALPHABETICAL_INDEX =
|
||||
# ALWAYS_DETAILED_SEC =
|
||||
# CASE_SENSE_NAMES =
|
||||
# CLASS_DIAGRAMS =
|
||||
# DISABLE_INDEX =
|
||||
# DISTRIBUTE_GROUP_DOC =
|
||||
# EXAMPLE_PATH =
|
||||
EXCLUDE = .ci/ \
|
||||
assets/ \
|
||||
bin/
|
||||
config/ \
|
||||
effects/ \
|
||||
test/ \
|
||||
# EXCLUDE_PATTERNS =
|
||||
# EXCLUDE_SYMBOLS =
|
||||
# EXTENSION_MAPPING =
|
||||
# EXTRACT_LOCAL_CLASSES =
|
||||
# FILE_PATTERNS =
|
||||
# GENERATE_TAGFILE =
|
||||
# GENERATE_TREEVIEW =
|
||||
# HIDE_COMPOUND_REFERENCE =
|
||||
# HIDE_SCOPE_NAMES =
|
||||
# HIDE_UNDOC_CLASSES =
|
||||
# HIDE_UNDOC_MEMBERS =
|
||||
# HTML_TIMESTAMP =
|
||||
# INLINE_GROUPED_CLASSES =
|
||||
# INPUT_ENCODING =
|
||||
# INTERNAL_DOCS =
|
||||
# OPTIMIZE_OUTPUT_FOR_C =
|
||||
PROJECT_BRIEF = "The successor to Hyperion aka Hyperion Next Generation"
|
||||
PROJECT_NAME = "Hyperion.NG"
|
||||
# PROJECT_NUMBER =
|
||||
# SHORT_NAMES =
|
||||
# SHOW_FILES =
|
||||
# SHOW_INCLUDE_FILES =
|
||||
# SHOW_NAMESPACES =
|
||||
# SORT_BRIEF_DOCS =
|
||||
# SORT_BY_SCOPE_NAME =
|
||||
# SORT_MEMBER_DOCS =
|
||||
# STRICT_PROTO_MATCHING =
|
||||
# TYPEDEF_HIDES_STRUCT =
|
||||
USE_MDFILE_AS_MAINPAGE = README.md
|
||||
# VERBATIM_HEADERS =
|
||||
#
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"name": "Hyperion.ng Linux",
|
||||
"extensions": [
|
||||
"twxs.cmake",
|
||||
"ms-vscode.cpptools",
|
||||
"ms-vscode.cmake-tools",
|
||||
"spmeesseman.vscode-taskexplorer",
|
||||
"yzhang.markdown-all-in-one",
|
||||
"CoenraadS.bracket-pair-colorizer",
|
||||
"vscode-icons-team.vscode-icons",
|
||||
"editorconfig.editorconfig"
|
||||
],
|
||||
"settings": {
|
||||
"editor.formatOnSave": false,
|
||||
"cmake.environment": {
|
||||
},
|
||||
},
|
||||
"forwardPorts": [8090, 8092],
|
||||
"postCreateCommand": "git submodule update --recursive --init && sudo apt-get update && sudo apt-get install -y git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libssl-dev"
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
custom: "https://www.paypal.me/HyperionAmbi"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improving Hyperion
|
||||
labels: bug
|
||||
labels: Waiting For Review
|
||||
---
|
||||
|
||||
<!-- Please don't delete this template or we'll close your issue -->
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
blank_issues_enabled: false
|
|
@ -0,0 +1,4 @@
|
|||
name: "CodeQL config"
|
||||
paths-ignore:
|
||||
- 'dependencies/external/'
|
||||
- 'assets/webconfig/js/lib'
|
|
@ -0,0 +1,7 @@
|
|||
version: 2
|
||||
updates:
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
|
@ -0,0 +1,12 @@
|
|||
Issues:
|
||||
opened: |
|
||||
Hello @$AUTHOR
|
||||
|
||||
We make use of an **[ISSUE TEMPLATE](https://github.com/$REPO_FULL_NAME/issues/new/choose)** to capture relevant information to support you best. Unfortunately, **you ignored or deleted** the given sections. Please take care that all information requested is provided.
|
||||
|
||||
This issue will be automatically closed by our bot, please do not take it personally. We would like asking you to open a new issue following the **[ISSUE TEMPLATE](https://github.com/$REPO_FULL_NAME/issues/new/choose)**.
|
||||
|
||||
Thanks for your continuous support!
|
||||
|
||||
Best regards,
|
||||
Hyperion-Project
|
|
@ -1,17 +1,20 @@
|
|||
PullRequest:
|
||||
opened: |
|
||||
Hello @$AUTHOR :wave:
|
||||
Hello @$AUTHOR :wave:
|
||||
|
||||
I'm your friendly neighborhood bot and would like to say thank you for
|
||||
submitting a pull request to Hyperion!
|
||||
I'm the Hyperion Project Bot and I want to thank you for
|
||||
contributing to Hyperion with your pull requests!
|
||||
|
||||
So that you and other users can test your changes more quickly,
|
||||
you can find your workflow artifacts [here](https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID).
|
||||
To help you and other users test your pull requests faster,
|
||||
I'll create a link for you to your workflow artifacts.
|
||||
|
||||
If you make changes to your PR, i create a new link to your workflow artifacts.
|
||||
:link: https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID
|
||||
|
||||
Of course, if you make changes to your PR, I will create a new link.
|
||||
|
||||
Best regards,
|
||||
Hyperion-Project
|
||||
Hyperion Project
|
||||
synchronize: |
|
||||
[Here](https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID) is your new link to your workflow artifacts.
|
||||
|
||||
Hey @$AUTHOR I created a new link to your workflow artifacts:
|
||||
:link: https://github.com/$REPO_FULL_NAME/actions/runs/$RUN_ID
|
||||
|
||||
|
|
|
@ -0,0 +1,154 @@
|
|||
name: Hyperion APT Build
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
head_sha:
|
||||
type: string
|
||||
description: The branch, tag or SHA to checkout
|
||||
required: true
|
||||
secrets:
|
||||
APT_GPG:
|
||||
required: true
|
||||
APT_USER:
|
||||
required: true
|
||||
APT_PASSWORD:
|
||||
required: true
|
||||
APT_DRAFT:
|
||||
required: true
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
head_sha:
|
||||
type: string
|
||||
description: The branch, tag or SHA to checkout
|
||||
required: true
|
||||
secrets:
|
||||
APT_GPG:
|
||||
required: true
|
||||
APT_USER:
|
||||
required: true
|
||||
APT_PASSWORD:
|
||||
required: true
|
||||
APT_DRAFT:
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
setup:
|
||||
name: Setup APT build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set APT matrix
|
||||
id: apt-ppa
|
||||
run: |
|
||||
APT=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
|
||||
echo "apt=$APT" >> $GITHUB_OUTPUT
|
||||
|
||||
outputs:
|
||||
apt-matrix: ${{ steps.apt-ppa.outputs.apt }}
|
||||
|
||||
build:
|
||||
name: ${{ matrix.description }}
|
||||
needs: [setup]
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix: ${{ fromJson(needs.setup.outputs.apt-matrix) }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.inputs.head_sha || github.event.client_payload.head_sha }}
|
||||
submodules: true
|
||||
|
||||
- name: Generate environment variables
|
||||
run: |
|
||||
tr -d '\n' < .version > temp && mv temp .version
|
||||
VERSION=$(cat .version)
|
||||
echo VERSION=${VERSION} >> $GITHUB_ENV
|
||||
if [[ $VERSION == *"-"* ]]; then
|
||||
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
|
||||
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
|
||||
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
|
||||
else
|
||||
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
|
||||
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
||||
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
|
||||
fi
|
||||
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
||||
|
||||
- name: Build package
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p "${GITHUB_WORKSPACE}/deploy"
|
||||
docker run --rm \
|
||||
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
|
||||
-v "${GITHUB_WORKSPACE}:/source:rw" \
|
||||
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
|
||||
/bin/bash -c "cd /source && \
|
||||
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
|
||||
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
|
||||
cp -fr LICENSE debian/copyright && \
|
||||
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
|
||||
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
|
||||
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
|
||||
debuild --no-lintian -uc -us && \
|
||||
cp ../hyperion_*.deb /deploy"
|
||||
|
||||
- name: Upload package artifact
|
||||
if: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'workflow_dispatch' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: deploy
|
||||
retention-days: 1
|
||||
|
||||
publish:
|
||||
name: Publish APT packages
|
||||
if: ${{ startsWith(github.event.ref, 'refs/tags') || github.event_name == 'workflow_dispatch' }}
|
||||
needs: [setup, build]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.inputs.head_sha || github.event.client_payload.head_sha }}
|
||||
|
||||
- name: Import GPG key
|
||||
uses: crazy-max/ghaction-import-gpg@v6.0.0
|
||||
with:
|
||||
gpg_private_key: ${{ secrets.APT_GPG }}
|
||||
|
||||
- name: Install reprepro
|
||||
run: sudo apt -y install reprepro
|
||||
|
||||
- name: Make build folders, export public GPG key and copy distributions file
|
||||
run: |
|
||||
mkdir -p apt/{conf,dists,db}
|
||||
gpg --armor --output apt/hyperion.pub.key --export 'admin@hyperion-project.org'
|
||||
cp debian/distributions apt/conf/distributions
|
||||
|
||||
- name: Create initial structure/packages files and symbolic links
|
||||
run: |
|
||||
reprepro -Vb apt createsymlinks
|
||||
reprepro -Vb apt export
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3.0.2
|
||||
|
||||
- name: Include artifacts into the package source
|
||||
run: |
|
||||
for file in artifact/hyperion_*.deb; do
|
||||
if [ -f "$file" ]; then
|
||||
dist=${file#*~}
|
||||
dist=${dist%_*}
|
||||
reprepro -Vb apt/ includedeb "$dist" "$file"
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Upload packages to APT server (DRAFT)
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||
with:
|
||||
server: apt.hyperion-project.org
|
||||
username: ${{ secrets.APT_USER }}
|
||||
password: ${{ secrets.APT_PASSWORD }}
|
||||
local-dir: "./apt/"
|
||||
server-dir: ${{ secrets.APT_DRAFT }}
|
||||
dangerous-clean-slate: true
|
|
@ -0,0 +1,58 @@
|
|||
[
|
||||
{
|
||||
"distribution": "Focal",
|
||||
"architecture": "amd64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 20.04 (Focal Fossa) (amd64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Jammy",
|
||||
"architecture": "amd64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 22.04 (Jammy Jellyfish) (amd64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Kinetic",
|
||||
"architecture": "amd64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 22.10 (Kinetic Kudu) (amd64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Lunar",
|
||||
"architecture": "amd64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 23.04 (Lunar Lobster) (amd64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Buster",
|
||||
"architecture": "amd64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 10.x (Buster) (amd64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Bullseye",
|
||||
"architecture": "amd64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 11.x (Bullseye) (amd64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Bookworm",
|
||||
"architecture": "amd64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 12.x (Bookworm) (amd64)"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,51 @@
|
|||
[
|
||||
{
|
||||
"distribution": "Focal",
|
||||
"architecture": "arm64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
|
||||
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 20.04 (Focal Fossa) (arm64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Jammy",
|
||||
"architecture": "arm64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
|
||||
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 22.04 (Jammy Jellyfish) (arm64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Kinetic",
|
||||
"architecture": "arm64",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
|
||||
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 22.10 (Kinetic Kudu) (arm64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Buster",
|
||||
"architecture": "arm64",
|
||||
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 10.x (Buster) (arm64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Bullseye",
|
||||
"architecture": "arm64",
|
||||
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 11.x (Bullseye) (arm64)"
|
||||
},
|
||||
{
|
||||
"distribution": "Bookworm",
|
||||
"architecture": "arm64",
|
||||
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 12.x (Bookworm) (arm64)",
|
||||
"exclude" : true
|
||||
}
|
||||
]
|
|
@ -0,0 +1,51 @@
|
|||
[
|
||||
{
|
||||
"distribution": "Focal",
|
||||
"architecture": "armhf",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
|
||||
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 20.04 (Focal Fossa) (armhf)"
|
||||
},
|
||||
{
|
||||
"distribution": "Jammy",
|
||||
"architecture": "armhf",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
|
||||
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 22.04 (Jammy Jellyfish) (armhf)"
|
||||
},
|
||||
{
|
||||
"distribution": "Kinetic",
|
||||
"architecture": "armhf",
|
||||
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
|
||||
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Ubuntu 22.10 (Kinetic Kudu) (armhf)"
|
||||
},
|
||||
{
|
||||
"distribution": "Buster",
|
||||
"architecture": "armhf",
|
||||
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl1.0-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 10.x (Buster) (armhf)"
|
||||
},
|
||||
{
|
||||
"distribution": "Bullseye",
|
||||
"architecture": "armhf",
|
||||
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 11.x (Bullseye) (armhf)"
|
||||
},
|
||||
{
|
||||
"distribution": "Bookworm",
|
||||
"architecture": "armhf",
|
||||
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
|
||||
"package-depends": "libpython3.11, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg0, libcec6",
|
||||
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
|
||||
"description": "Debian 12.x (Bookworm) (armhf)",
|
||||
"exclude" : true
|
||||
}
|
||||
]
|
|
@ -1,5 +1,6 @@
|
|||
name: Clean artifacts
|
||||
|
||||
# Run cleanup workflow at the end of every day
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: "36 18 * * 4"
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ python, javascript, cpp ]
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Packages (cpp)
|
||||
if: ${{ matrix.language == 'cpp' }}
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install --yes git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libasound2-dev libturbojpeg0-dev libjpeg-dev libssl-dev
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
queries: +security-and-quality
|
||||
config-file: ./.github/config/codeql.yml
|
||||
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{ matrix.language }}"
|
||||
upload: False
|
||||
output: sarif-results
|
||||
|
||||
- name: Filter SARIF
|
||||
uses: advanced-security/filter-sarif@v1
|
||||
with:
|
||||
patterns: |
|
||||
-**/dependencies/**
|
||||
-**/moc_*.cpp
|
||||
-**/libsrc/flatbufserver/hyperion_request_generated.h
|
||||
-**/libsrc/protoserver/message.pb.cc
|
||||
-**/libsrc/protoserver/message.pb.h
|
||||
input: sarif-results/${{ matrix.language }}.sarif
|
||||
output: sarif-results/${{ matrix.language }}.sarif
|
||||
|
||||
- name: Upload SARIF
|
||||
uses: github/codeql-action/upload-sarif@v2
|
||||
with:
|
||||
sarif_file: sarif-results/${{ matrix.language }}.sarif
|
||||
- name: Upload loc as a Build Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: sarif-results
|
||||
path: sarif-results
|
||||
retention-days: 1
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
name: Nightly build
|
||||
|
||||
# Create nightly builds at the end of every day
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
repository_dispatch:
|
||||
types: [hyperion_nightly_push]
|
||||
|
||||
jobs:
|
||||
update:
|
||||
name: Update Submodule rpi_ws281x
|
||||
if: github.repository_owner == 'hyperion-project'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Update Submodule rpi_ws281x
|
||||
id: update
|
||||
run: git submodule update --remote --recursive dependencies/external/rpi_ws281x
|
||||
|
||||
- name: Check git status
|
||||
id: status
|
||||
run: echo "status=$(git status -s)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Add and commit changes
|
||||
if: ${{ steps.status.outputs.status }}
|
||||
run: |
|
||||
git config --local user.email "20935312+Hyperion-Bot@users.noreply.github.com"
|
||||
git config --local user.name "Hyperion-Bot"
|
||||
git config --local diff.ignoreSubmodules dirty
|
||||
git commit -am "Update submodule rpi_ws281x"
|
||||
|
||||
- name: Push changes
|
||||
if: ${{ steps.status.outputs.status }}
|
||||
uses: ad-m/github-push-action@master
|
||||
with:
|
||||
github_token: ${{ secrets.HYPERION_BOT_TOKEN }}
|
||||
branch: ${{ github.ref }}
|
||||
|
||||
check:
|
||||
name: Compare local <-> nightly
|
||||
needs: [update]
|
||||
if: github.repository_owner == 'hyperion-project'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Check if commit has changed
|
||||
id: build-necessary
|
||||
run: |
|
||||
if wget --spider "https://nightly.apt.hyperion-project.org/$(git rev-parse --short HEAD)" 2>/dev/null; then
|
||||
echo "commit-has-changed=false" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "commit-has-changed=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
outputs:
|
||||
build-nightly: ${{ steps.build-necessary.outputs.commit-has-changed }}
|
||||
|
||||
setup:
|
||||
name: Setup nightly build
|
||||
needs: [check]
|
||||
if: ${{ needs.check.outputs.build-nightly == 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set nightly matrix
|
||||
id: nightly-ppa
|
||||
run: |
|
||||
NIGHTLY=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
|
||||
echo "nightly=$NIGHTLY" >> $GITHUB_OUTPUT
|
||||
|
||||
outputs:
|
||||
nightly-matrix: ${{ steps.nightly-ppa.outputs.nightly }}
|
||||
|
||||
build:
|
||||
name: ${{ matrix.description }}
|
||||
needs: [setup]
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix: ${{ fromJson(needs.setup.outputs.nightly-matrix) }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Generate environment variables
|
||||
run: |
|
||||
echo "$(tr -d '\n' < .version)+nightly$(date '+%Y%m%d')$(git rev-parse --short HEAD)" > .version
|
||||
VERSION=$(cat .version)
|
||||
echo VERSION=${VERSION} >> $GITHUB_ENV
|
||||
if [[ $VERSION == *"-"* ]]; then
|
||||
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
|
||||
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
|
||||
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
|
||||
else
|
||||
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
|
||||
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
||||
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
|
||||
fi
|
||||
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
|
||||
|
||||
- name: Build package
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p "${GITHUB_WORKSPACE}/deploy"
|
||||
docker run --rm \
|
||||
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
|
||||
-v "${GITHUB_WORKSPACE}:/source:rw" \
|
||||
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
|
||||
/bin/bash -c "cd /source && \
|
||||
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
|
||||
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
|
||||
cp -fr LICENSE debian/copyright && \
|
||||
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
|
||||
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
|
||||
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
|
||||
debuild --no-lintian -uc -us && \
|
||||
cp ../hyperion_*.deb /deploy"
|
||||
|
||||
- name: Upload package artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: deploy
|
||||
retention-days: 1
|
||||
|
||||
publish:
|
||||
name: Publish nightly packages
|
||||
needs: [setup, build]
|
||||
if: github.repository_owner == 'hyperion-project'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Import GPG key
|
||||
uses: crazy-max/ghaction-import-gpg@v6.0.0
|
||||
with:
|
||||
gpg_private_key: ${{ secrets.APT_GPG }}
|
||||
|
||||
- name: Install reprepro
|
||||
run: sudo apt -y install reprepro
|
||||
|
||||
- name: Make build folders, export public GPG key, copy distributions file and create short sha file for nightly build check
|
||||
run: |
|
||||
mkdir -p nightly/{conf,dists,db}
|
||||
gpg --armor --output nightly/hyperion.pub.key --export 'admin@hyperion-project.org'
|
||||
cp debian/distributions nightly/conf/distributions
|
||||
touch "nightly/$(git rev-parse --short HEAD)"
|
||||
|
||||
- name: Create initial structure/packages files and symbolic links
|
||||
run: |
|
||||
reprepro -Vb nightly createsymlinks
|
||||
reprepro -Vb nightly export
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3.0.2
|
||||
|
||||
- name: Include artifacts into the package source
|
||||
run: |
|
||||
for file in artifact/*.deb; do
|
||||
if [ -f "$file" ]; then
|
||||
dist=${file#*~}
|
||||
dist=${dist%_*}
|
||||
reprepro -Vb nightly/ includedeb "$dist" "$file"
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Upload packages to nightly server
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||
with:
|
||||
server: nightly.apt.hyperion-project.org
|
||||
username: ${{ secrets.NIGHTLY_USER }}
|
||||
password: ${{ secrets.NIGHTLY_PASSWORD }}
|
||||
local-dir: "./nightly/"
|
||||
server-dir: "./"
|
||||
dangerous-clean-slate: true
|
||||
|
||||
- name: Remove intermediate artifacts
|
||||
uses: geekyeggo/delete-artifact@v2
|
||||
with:
|
||||
name: artifact
|
||||
failOnError: false
|
|
@ -15,38 +15,39 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
dockerTag: [ amd64, armv6hf, armv7hf, aarch64 ]
|
||||
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
|
||||
include:
|
||||
- dockerTag: amd64
|
||||
dockerName: Debian Stretch (AMD64)
|
||||
- dockerImage: x86_64
|
||||
dockerName: Debian Buster (x86_64)
|
||||
platform: x11
|
||||
- dockerTag: armv6hf
|
||||
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
|
||||
- dockerImage: armv6l
|
||||
dockerName: Debian Buster (Raspberry Pi v1 & ZERO)
|
||||
platform: rpi
|
||||
- dockerTag: armv7hf
|
||||
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
|
||||
- dockerImage: armv7l
|
||||
dockerName: Debian Buster (Raspberry Pi 2 & 3)
|
||||
platform: rpi
|
||||
- dockerTag: aarch64
|
||||
dockerName: Debian Stretch (Generic AARCH64)
|
||||
- dockerImage: aarch64
|
||||
dockerName: Debian Buster (Generic AARCH64)
|
||||
platform: amlogic
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
submodules: recursive
|
||||
|
||||
# Append PR number to version
|
||||
# Append PR number to .version
|
||||
- name: Append PR number to version
|
||||
shell: bash
|
||||
run: |
|
||||
tr -d '\n' < version > temp && mv temp version
|
||||
echo -n -PR#${{ github.event.pull_request.number }} >> version
|
||||
tr -d '\n' < .version > temp && mv temp .version
|
||||
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
|
||||
|
||||
# Build packages
|
||||
- name: Build packages
|
||||
env:
|
||||
DOCKER_TAG: ${{ matrix.dockerTag }}
|
||||
DOCKER_IMAGE: ${{ matrix.dockerImage }}
|
||||
DOCKER_TAG: buster
|
||||
DOCKER_NAME: ${{ matrix.dockerName }}
|
||||
PLATFORM: ${{ matrix.platform }}
|
||||
shell: bash
|
||||
|
@ -56,17 +57,15 @@ jobs:
|
|||
- name: Collecting deployable artifacts
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p ${{ matrix.dockerTag }}
|
||||
mv deploy/*.tar.gz ${{ matrix.dockerTag }}
|
||||
if: matrix.dockerTag != 'aarch64'
|
||||
mkdir -p ${{ matrix.dockerImage }}
|
||||
mv deploy/*.tar.gz ${{ matrix.dockerImage }}
|
||||
|
||||
# Upload artifacts
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.dockerTag }}
|
||||
path: ${{ matrix.dockerTag }}
|
||||
if: matrix.dockerTag != 'aarch64'
|
||||
name: ${{ matrix.dockerImage }}
|
||||
path: ${{ matrix.dockerImage }}
|
||||
|
||||
######################
|
||||
###### macOS #########
|
||||
|
@ -77,16 +76,16 @@ jobs:
|
|||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
submodules: recursive
|
||||
|
||||
# Append PR number to version
|
||||
# Append PR number to .version
|
||||
- name: Append PR number to version
|
||||
shell: bash
|
||||
run: |
|
||||
tr -d '\n' < version > temp && mv temp version
|
||||
echo -n "-PR#${{ github.event.pull_request.number }}" >> version
|
||||
tr -d '\n' < .version > temp && mv temp .version
|
||||
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
|
||||
|
||||
# Install dependencies
|
||||
- name: Install dependencies
|
||||
|
@ -105,11 +104,11 @@ jobs:
|
|||
shell: bash
|
||||
run: |
|
||||
mkdir -p macOS
|
||||
mv build/*.tar.gz macOS
|
||||
mv build/*.dmg macOS
|
||||
|
||||
# Upload artifacts
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: macOS
|
||||
path: macOS
|
||||
|
@ -120,39 +119,53 @@ jobs:
|
|||
|
||||
windows:
|
||||
name: Windows
|
||||
runs-on: windows-latest
|
||||
runs-on: windows-2022
|
||||
env:
|
||||
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
|
||||
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
|
||||
QT_VERSION: 5.15.2
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
submodules: recursive
|
||||
|
||||
# Append PR number to version
|
||||
# Append PR number to .version
|
||||
- name: Append PR number to version
|
||||
shell: bash
|
||||
run: |
|
||||
tr -d '\n' < version > temp && mv temp version
|
||||
echo -n "-PR#${{ github.event.pull_request.number }}" >> version
|
||||
tr -d '\n' < .version > temp && mv temp .version
|
||||
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v2
|
||||
uses: jurplel/install-qt-action@v3
|
||||
with:
|
||||
version: '5.15.0'
|
||||
version: ${{env.QT_VERSION}}
|
||||
target: 'desktop'
|
||||
arch: 'win64_msvc2019_64'
|
||||
cache: 'true'
|
||||
cache-key-prefix: 'cache-qt-windows'
|
||||
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Cache Chocolatey downloads
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
python-version: '3.x'
|
||||
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
|
||||
key: ${{ runner.os }}-chocolatey
|
||||
|
||||
- name: Install NSIS
|
||||
run: choco install --no-progress nsis -y
|
||||
# - name: Install Python
|
||||
# shell: powershell
|
||||
# run: |
|
||||
# choco install --no-progress python -y
|
||||
|
||||
- name: Install OpenSSL
|
||||
run: choco install --no-progress openssl -y
|
||||
- name: Install OpenSSL, DirectX SDK
|
||||
shell: powershell
|
||||
run: |
|
||||
choco install --no-progress openssl --version=1.1.1.2100 -y
|
||||
choco install --no-progress directx-sdk -y
|
||||
|
||||
- name: Install libjpeg-turbo
|
||||
run: |
|
||||
Invoke-WebRequest https://netcologne.dl.sourceforge.net/project/libjpeg-turbo/2.0.6/libjpeg-turbo-2.0.6-vc64.exe -OutFile libjpeg-turbo.exe -UserAgent NativeHost
|
||||
.\libjpeg-turbo /S
|
||||
|
||||
- name: Set up x64 build architecture environment
|
||||
shell: cmd
|
||||
|
@ -170,38 +183,11 @@ jobs:
|
|||
shell: bash
|
||||
run: |
|
||||
mkdir -p windows
|
||||
mv build/*.zip windows
|
||||
mv build/*.exe windows
|
||||
|
||||
# Upload artifacts
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows
|
||||
path: windows
|
||||
|
||||
######################
|
||||
#### Documentation ###
|
||||
######################
|
||||
|
||||
docs:
|
||||
name: Documentation
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: docs
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Install dependencies
|
||||
- name: Setup node 12
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
# Build Docs
|
||||
- name: Build docs
|
||||
run: |
|
||||
npm install -g yarn
|
||||
yarn install
|
||||
yarn docs:build
|
||||
|
|
|
@ -1,122 +1,136 @@
|
|||
name: Hyperion CI Build
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'gh-pages'
|
||||
- 'docker-ci'
|
||||
branches:
|
||||
- '**'
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
|
||||
######################
|
||||
###### Linux #########
|
||||
######################
|
||||
###################
|
||||
###### Linux ######
|
||||
###################
|
||||
|
||||
Linux:
|
||||
name: ${{ matrix.dockerName }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
dockerTag: [ amd64, armv6hf, armv7hf, aarch64 ]
|
||||
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
|
||||
include:
|
||||
- dockerTag: amd64
|
||||
dockerName: Debian Stretch (AMD64)
|
||||
- dockerImage: x86_64
|
||||
dockerName: Debian Buster (x86_64)
|
||||
platform: x11
|
||||
- dockerTag: armv6hf
|
||||
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
|
||||
- dockerImage: armv6l
|
||||
dockerName: Debian Buster (Raspberry Pi v1 & ZERO)
|
||||
platform: rpi
|
||||
- dockerTag: armv7hf
|
||||
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
|
||||
- dockerImage: armv7l
|
||||
dockerName: Debian Buster (Raspberry Pi 2 & 3)
|
||||
platform: rpi
|
||||
- dockerTag: aarch64
|
||||
dockerName: Debian Stretch (Generic AARCH64)
|
||||
- dockerImage: aarch64
|
||||
dockerName: Debian Buster (Generic AARCH64)
|
||||
platform: amlogic
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
submodules: recursive
|
||||
|
||||
# build process
|
||||
# Build process
|
||||
- name: Build packages
|
||||
env:
|
||||
DOCKER_TAG: ${{ matrix.dockerTag }}
|
||||
DOCKER_IMAGE: ${{ matrix.dockerImage }}
|
||||
DOCKER_TAG: buster
|
||||
DOCKER_NAME: ${{ matrix.dockerName }}
|
||||
PLATFORM: ${{ matrix.platform }}
|
||||
shell: bash
|
||||
run: ./.ci/ci_build.sh
|
||||
|
||||
# upload artifacts (only on tagged commit)
|
||||
# Upload artifacts (only on tagged commit)
|
||||
- name: Upload artifacts
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: deploy/Hyperion-*
|
||||
|
||||
######################
|
||||
###### macOS #########
|
||||
######################
|
||||
###################
|
||||
###### macOS ######
|
||||
###################
|
||||
|
||||
macOS:
|
||||
name: macOS
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
submodules: recursive
|
||||
|
||||
# install dependencies
|
||||
# Install dependencies
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: ./.ci/ci_install.sh
|
||||
|
||||
# build process
|
||||
# Build process
|
||||
- name: Build packages
|
||||
env:
|
||||
PLATFORM: osx
|
||||
shell: bash
|
||||
run: ./.ci/ci_build.sh
|
||||
|
||||
# upload artifacts (only on tagged commit)
|
||||
# Upload artifacts (only on tagged commit)
|
||||
- name: Upload artifacts
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: build/Hyperion-*
|
||||
|
||||
######################
|
||||
###### Windows #######
|
||||
######################
|
||||
#####################
|
||||
###### Windows ######
|
||||
#####################
|
||||
|
||||
windows:
|
||||
name: Windows
|
||||
runs-on: windows-latest
|
||||
runs-on: windows-2022
|
||||
env:
|
||||
VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC'
|
||||
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
|
||||
QT_VERSION: 5.15.2
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v2
|
||||
uses: jurplel/install-qt-action@v3
|
||||
with:
|
||||
version: '5.15.0'
|
||||
version: ${{env.QT_VERSION}}
|
||||
target: 'desktop'
|
||||
arch: 'win64_msvc2019_64'
|
||||
cache: 'true'
|
||||
cache-key-prefix: 'cache-qt-windows'
|
||||
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Cache Chocolatey downloads
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
python-version: '3.x'
|
||||
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
|
||||
key: ${{ runner.os }}-chocolatey
|
||||
|
||||
- name: Install NSIS
|
||||
run: choco install --no-progress nsis -y
|
||||
# - name: Install Python
|
||||
# shell: powershell
|
||||
# run: |
|
||||
# choco install --no-progress python -y
|
||||
|
||||
- name: Install OpenSSL
|
||||
run: choco install --no-progress openssl -y
|
||||
- name: Install OpenSSL, DirectX SDK
|
||||
shell: powershell
|
||||
run: |
|
||||
choco install --no-progress openssl --version=1.1.1.2100 -y
|
||||
choco install --no-progress directx-sdk -y
|
||||
|
||||
- name: Install libjpeg-turbo
|
||||
run: |
|
||||
Invoke-WebRequest https://netcologne.dl.sourceforge.net/project/libjpeg-turbo/2.0.6/libjpeg-turbo-2.0.6-vc64.exe -OutFile libjpeg-turbo.exe -UserAgent NativeHost
|
||||
.\libjpeg-turbo /S
|
||||
|
||||
- name: Set up x64 build architecture environment
|
||||
shell: cmd
|
||||
|
@ -129,82 +143,40 @@ jobs:
|
|||
shell: bash
|
||||
run: ./.ci/ci_build.sh
|
||||
|
||||
# upload artifacts (only on tagged commit)
|
||||
# Upload artifacts (only on tagged commit)
|
||||
- name: Upload artifacts
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: build/Hyperion-*
|
||||
retention-days: 1
|
||||
|
||||
######################
|
||||
#### Documentation ###
|
||||
######################
|
||||
#####################################
|
||||
###### Publish GitHub Releases ######
|
||||
#####################################
|
||||
|
||||
Docs:
|
||||
name: Documentation
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: docs
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Install dependencies
|
||||
- name: Setup node 12
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
# Build Docs
|
||||
- name: Build docs
|
||||
run: |
|
||||
cd docs
|
||||
npm install -g yarn
|
||||
yarn install
|
||||
yarn docs:build
|
||||
|
||||
# Deploy to gh-pages (only on tagged commit)
|
||||
- name: Deploy to gh-pages
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./docs/dist
|
||||
cname: docs.hyperion-project.org
|
||||
|
||||
################################
|
||||
###### Publish Releases ########
|
||||
################################
|
||||
|
||||
publish:
|
||||
name: Publish Releases
|
||||
github_publish:
|
||||
name: Publish GitHub Releases
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
needs: [Linux, macOS, windows, Docs]
|
||||
needs: [Linux, macOS, windows]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# generate environment variables
|
||||
- name: Generate environment variables from version and tag
|
||||
# Generate environment variables
|
||||
- name: Generate environment variables from .version and tag
|
||||
run: |
|
||||
echo ::set-env name=TAG::${GITHUB_REF/refs\/tags\//}
|
||||
echo ::set-env name=VERSION::$(tr -d '\n' < version)
|
||||
echo ::set-env name=preRelease::false
|
||||
|
||||
# If version contains alpha or beta, mark draft release as pre-release
|
||||
- name: Mark release as pre-release
|
||||
if: contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta')
|
||||
run: echo ::set-env name=preRelease::true
|
||||
echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
|
||||
echo "VERSION=$(tr -d '\n' < .version)" >> $GITHUB_ENV
|
||||
|
||||
# Download artifacts from previous build process
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3.0.2
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
# create draft release and upload artifacts
|
||||
# Create draft release and upload artifacts
|
||||
- name: Create draft release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
|
@ -212,15 +184,18 @@ jobs:
|
|||
tag_name: ${{ env.TAG }}
|
||||
files: "artifacts/**"
|
||||
draft: true
|
||||
prerelease: ${{ env.preRelease }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Dispatch event to build new HyperBian image
|
||||
- name: Dispatch HyperBian build
|
||||
uses: peter-evans/repository-dispatch@v1
|
||||
if: ${{ github.repository_owner == 'hyperion-project'}}
|
||||
with:
|
||||
repository: hyperion-project/HyperBian
|
||||
token: ${{ secrets.HYPERION_BOT_TOKEN }}
|
||||
event-type: hyperion_push
|
||||
##########################
|
||||
###### APT workflow ######
|
||||
##########################
|
||||
|
||||
apt_build:
|
||||
name: APT Build GitHub Releases
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
needs: [Linux, macOS, windows]
|
||||
uses: ./.github/workflows/apt.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
head_sha: master
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
name: Release Actions
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
hyperbian:
|
||||
name: Let HyperBian create
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Dispatch event to build new HyperBian image
|
||||
- name: Dispatch HyperBian build
|
||||
uses: peter-evans/repository-dispatch@v2.1.2
|
||||
if: ${{ github.repository_owner == 'hyperion-project'}}
|
||||
with:
|
||||
repository: hyperion-project/HyperBian
|
||||
token: ${{ secrets.HYPERION_BOT_TOKEN }}
|
||||
event-type: hyperion_push
|
|
@ -17,3 +17,25 @@ CMakeCache.txt
|
|||
/lib
|
||||
.directory
|
||||
*.pyc
|
||||
compile_commands.json
|
||||
|
||||
# Autogenerated by flatbuffers
|
||||
libsrc/flatbufserver/hyperion_reply_generated.h
|
||||
libsrc/flatbufserver/hyperion_request_generated.h
|
||||
|
||||
# Kdevelop project files
|
||||
*.kdev*
|
||||
|
||||
# Visual Studio 2015/2017/2019 cache/options directory
|
||||
# Ignore
|
||||
.vs/*
|
||||
CMakeSettings.json
|
||||
/out
|
||||
# Allow
|
||||
!.vs/launch.vs.json
|
||||
|
||||
# LedDevice 'File' output
|
||||
NULL
|
||||
|
||||
# Docker deploy folder
|
||||
deploy/*
|
||||
|
|
|
@ -8,5 +8,10 @@
|
|||
branch = master
|
||||
[submodule "dependencies/external/protobuf"]
|
||||
path = dependencies/external/protobuf
|
||||
url = https://github.com/hyperion-project/protobuf.git
|
||||
branch = master
|
||||
url = https://github.com/protocolbuffers/protobuf
|
||||
[submodule "dependencies/external/qmdnsengine"]
|
||||
path = dependencies/external/qmdnsengine
|
||||
url = https://github.com/nitroshare/qmdnsengine.git
|
||||
[submodule "dependencies/external/mbedtls"]
|
||||
path = dependencies/external/mbedtls
|
||||
url = ../../Mbed-TLS/mbedtls.git
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"version": "0.2.1",
|
||||
"defaults": {},
|
||||
"configurations": [
|
||||
{
|
||||
"type": "default",
|
||||
"project": "CMakeLists.txt",
|
||||
"projectTarget": "hyperiond.exe (bin\\hyperiond.exe)",
|
||||
"name": "Run hyperion with debug option and external console",
|
||||
"args": [
|
||||
"-d",
|
||||
"-c"
|
||||
],
|
||||
"externalConsole": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -16,9 +16,6 @@
|
|||
"ms-vscode.cmake-tools",
|
||||
"spmeesseman.vscode-taskexplorer",
|
||||
"yzhang.markdown-all-in-one",
|
||||
"formulahendry.auto-rename-tag",
|
||||
"CoenraadS.bracket-pair-colorizer",
|
||||
"eamodio.gitlens",
|
||||
"vscode-icons-team.vscode-icons",
|
||||
"editorconfig.editorconfig"
|
||||
]
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/build/bin/hyperiond",
|
||||
"args": [],
|
||||
"args": ["-d"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
|
@ -27,12 +27,24 @@
|
|||
"name": "(Windows) hyperiond",
|
||||
"type": "cppvsdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/build/bin/Debug/hyperiond.exe",
|
||||
"args": [],
|
||||
"program": "${command:cmake.launchTargetDirectory}/hyperiond",
|
||||
"args": ["-d"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"externalConsole": false
|
||||
"console": "internalConsole"
|
||||
},
|
||||
{
|
||||
"name": "(macOS) Hyperion.app",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/build/bin/Hyperion.app/Contents/MacOS/Hyperion",
|
||||
"args": ["-d"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"console": "internalConsole",
|
||||
"MIMode": "lldb"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"windows": {
|
||||
"command": "cmake -G \"Visual Studio 16 2019\" -A x64 -B ${workspaceFolder}/build"
|
||||
},
|
||||
"group": "build",
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "cmake:conf Debug",
|
||||
|
@ -21,7 +21,7 @@
|
|||
"windows": {
|
||||
"command": "cmake -G \"Visual Studio 16 2019\" -A x64 -B ${workspaceFolder}/build"
|
||||
},
|
||||
"group": "build",
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "build:debug hyperiond",
|
||||
|
|
|
@ -458,6 +458,44 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
===========
|
||||
Animate.css
|
||||
===========
|
||||
|
||||
Animate.css Copyright 2021 Daniel Eden (“Licensor”)
|
||||
|
||||
Hippocratic License Version Number: 2.1.
|
||||
|
||||
Purpose. The purpose of this License is for the Licensor named above to permit the Licensee (as defined below) broad permission, if consistent with Human Rights Laws and Human Rights Principles (as each is defined below), to use and work with the Software (as defined below) within the full scope of Licensor’s copyright and patent rights, if any, in the Software, while ensuring attribution and protecting the Licensor from liability.
|
||||
|
||||
Permission and Conditions. The Licensor grants permission by this license (“License”), free of charge, to the extent of Licensor’s rights under applicable copyright and patent law, to any person or entity (the “Licensee”) obtaining a copy of this software and associated documentation files (the “Software”), to do everything with the Software that would otherwise infringe (i) the Licensor’s copyright in the Software or (ii) any patent claims to the Software that the Licensor can license or becomes able to license, subject to all of the following terms and conditions:
|
||||
|
||||
* Acceptance. This License is automatically offered to every person and entity subject to its terms and conditions. Licensee accepts this License and agrees to its terms and conditions by taking any action with the Software that, absent this License, would infringe any intellectual property right held by Licensor.
|
||||
|
||||
* Notice. Licensee must ensure that everyone who gets a copy of any part of this Software from Licensee, with or without changes, also receives the License and the above copyright notice (and if included by the Licensor, patent, trademark and attribution notice). Licensee must cause any modified versions of the Software to carry prominent notices stating that Licensee changed the Software. For clarity, although Licensee is free to create modifications of the Software and distribute only the modified portion created by Licensee with additional or different terms, the portion of the Software not modified must be distributed pursuant to this License. If anyone notifies Licensee in writing that Licensee has not complied with this Notice section, Licensee can keep this License by taking all practical steps to comply within 30 days after the notice. If Licensee does not do so, Licensee’s License (and all rights licensed hereunder) shall end immediately.
|
||||
|
||||
* Compliance with Human Rights Principles and Human Rights Laws.
|
||||
|
||||
1. Human Rights Principles.
|
||||
|
||||
(a) Licensee is advised to consult the articles of the United Nations Universal Declaration of Human Rights and the United Nations Global Compact that define recognized principles of international human rights (the “Human Rights Principles”). Licensee shall use the Software in a manner consistent with Human Rights Principles.
|
||||
|
||||
(b) Unless the Licensor and Licensee agree otherwise, any dispute, controversy, or claim arising out of or relating to (i) Section 1(a) regarding Human Rights Principles, including the breach of Section 1(a), termination of this License for breach of the Human Rights Principles, or invalidity of Section 1(a) or (ii) a determination of whether any Law is consistent or in conflict with Human Rights Principles pursuant to Section 2, below, shall be settled by arbitration in accordance with the Hague Rules on Business and Human Rights Arbitration (the “Rules”); provided, however, that Licensee may elect not to participate in such arbitration, in which event this License (and all rights licensed hereunder) shall end immediately. The number of arbitrators shall be one unless the Rules require otherwise.
|
||||
|
||||
Unless both the Licensor and Licensee agree to the contrary: (1) All documents and information concerning the arbitration shall be public and may be disclosed by any party; (2) The repository referred to under Article 43 of the Rules shall make available to the public in a timely manner all documents concerning the arbitration which are communicated to it, including all submissions of the parties, all evidence admitted into the record of the proceedings, all transcripts or other recordings of hearings and all orders, decisions and awards of the arbitral tribunal, subject only to the arbitral tribunal's powers to take such measures as may be necessary to safeguard the integrity of the arbitral process pursuant to Articles 18, 33, 41 and 42 of the Rules; and (3) Article 26(6) of the Rules shall not apply.
|
||||
|
||||
2. Human Rights Laws. The Software shall not be used by any person or entity for any systems, activities, or other uses that violate any Human Rights Laws. “Human Rights Laws” means any applicable laws, regulations, or rules (collectively, “Laws”) that protect human, civil, labor, privacy, political, environmental, security, economic, due process, or similar rights; provided, however, that such Laws are consistent and not in conflict with Human Rights Principles (a dispute over the consistency or a conflict between Laws and Human Rights Principles shall be determined by arbitration as stated above). Where the Human Rights Laws of more than one jurisdiction are applicable or in conflict with respect to the use of the Software, the Human Rights Laws that are most protective of the individuals or groups harmed shall apply.
|
||||
|
||||
3. Indemnity. Licensee shall hold harmless and indemnify Licensor (and any other contributor) against all losses, damages, liabilities, deficiencies, claims, actions, judgments, settlements, interest, awards, penalties, fines, costs, or expenses of whatever kind, including Licensor’s reasonable attorneys’ fees, arising out of or relating to Licensee’s use of the Software in violation of Human Rights Laws or Human Rights Principles.
|
||||
|
||||
* Failure to Comply. Any failure of Licensee to act according to the terms and conditions of this License is both a breach of the License and an infringement of the intellectual property rights of the Licensor (subject to exceptions under Laws, e.g., fair use). In the event of a breach or infringement, the terms and conditions of this License may be enforced by Licensor under the Laws of any jurisdiction to which Licensee is subject. Licensee also agrees that the Licensor may enforce the terms and conditions of this License against Licensee through specific performance (or similar remedy under Laws) to the extent permitted by Laws. For clarity, except in the event of a breach of this License, infringement, or as otherwise stated in this License, Licensor may not terminate this License with Licensee.
|
||||
|
||||
* Enforceability and Interpretation. If any term or provision of this License is determined to be invalid, illegal, or unenforceable by a court of competent jurisdiction, then such invalidity, illegality, or unenforceability shall not affect any other term or provision of this License or invalidate or render unenforceable such term or provision in any other jurisdiction; provided, however, subject to a court modification pursuant to the immediately following sentence, if any term or provision of this License pertaining to Human Rights Laws or Human Rights Principles is deemed invalid, illegal, or unenforceable against Licensee by a court of competent jurisdiction, all rights in the Software granted to Licensee shall be deemed null and void as between Licensor and Licensee. Upon a determination that any term or provision is invalid, illegal, or unenforceable, to the extent permitted by Laws, the court may modify this License to affect the original purpose that the Software be used in compliance with Human Rights Principles and Human Rights Laws as closely as possible. The language in this License shall be interpreted as to its fair meaning and not strictly for or against any party.
|
||||
|
||||
* Disclaimer. TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES “AS IS,” WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR AND ANY OTHER CONTRIBUTOR SHALL NOT BE LIABLE TO ANYONE FOR ANY DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THIS LICENSE, UNDER ANY KIND OF LEGAL CLAIM.
|
||||
|
||||
This Hippocratic License is an Ethical Source license (https://ethicalsource.dev) and is offered for use by licensors and licensees at their own risk, on an “AS IS” basis, and with no warranties express or implied, to the maximum extent permitted by Laws.
|
||||
|
||||
===========
|
||||
Flatbuffers
|
||||
===========
|
||||
|
@ -704,6 +742,64 @@ trademarks does not indicate endorsement of the trademark holder by Font
|
|||
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||
to represent the company, product, or service to which they refer.**
|
||||
|
||||
=====================
|
||||
Material Design Icons
|
||||
=====================
|
||||
|
||||
Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), with Reserved Font Name Material Design Icons.
|
||||
|
||||
Copyright (c) 2014, Google (http://www.google.com/design/) uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects,
|
||||
to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and
|
||||
improved in partnership with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves.
|
||||
The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works.
|
||||
The fonts and derivatives, however, cannot be released under any other type of license.
|
||||
The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such.
|
||||
This may include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version,
|
||||
by changing formats or by porting the Font Software to a new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software,
|
||||
to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
|
||||
|
||||
Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software,
|
||||
provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files,
|
||||
human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder.
|
||||
This restriction only applies to the primary font name as presented to the users.
|
||||
|
||||
The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote,
|
||||
endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
|
||||
|
||||
The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license.
|
||||
The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
|
||||
|
||||
TERMINATION This license becomes null and void if any of the above conditions are not met.
|
||||
|
||||
DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
=====
|
||||
Gijgo
|
||||
=====
|
||||
|
@ -730,6 +826,58 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
==============
|
||||
PlainDraggable
|
||||
==============
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 anseki
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
==========
|
||||
LeaderLine
|
||||
==========
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 anseki
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
======
|
||||
HIDAPI
|
||||
======
|
||||
|
@ -739,11 +887,40 @@ HIDAPI
|
|||
|
||||
Copyright 2009, Alan Ott, Signal 11 Software.
|
||||
All Rights Reserved.
|
||||
|
||||
|
||||
This software may be used by anyone for any reason so
|
||||
long as the copyright notice in the source files
|
||||
remains intact.
|
||||
|
||||
========
|
||||
HyperHDR
|
||||
========
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 awawa-dev
|
||||
|
||||
Project homesite: https://github.com/awawa-dev/HyperHDR
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
|
||||
===========
|
||||
JSON-Editor
|
||||
===========
|
||||
|
@ -834,6 +1011,7 @@ all code is your original work. `</legalese>`
|
|||
|
||||
## Marked
|
||||
|
||||
Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
|
||||
Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
@ -856,8 +1034,8 @@ THE SOFTWARE.
|
|||
|
||||
## Markdown
|
||||
|
||||
Copyright © 2004, John Gruber
|
||||
http://daringfireball.net/
|
||||
Copyright © 2004, John Gruber
|
||||
http://daringfireball.net/
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
@ -874,7 +1052,7 @@ metismenu
|
|||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014-2018 Osman Nuri Okumuş
|
||||
Copyright (c) 2014-2021 Osman Nuri Okumuş
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
@ -1377,6 +1555,346 @@ tinkerforge
|
|||
|
||||
Copyright (C) 2012-2013 Matthias Bolte <matthias@tinkerforge.com>
|
||||
Copyright (C) 2011 Olaf Lüke <olaf@tinkerforge.com>
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms of this file,
|
||||
with or without modification, are permitted.
|
||||
|
||||
======
|
||||
libcec
|
||||
======
|
||||
|
||||
This file is part of the libCEC(R) library.
|
||||
|
||||
libCEC(R) is Copyright (C) 2011-2020 Pulse-Eight Limited. All rights reserved.
|
||||
libCEC(R) is a original work, containing original code.
|
||||
|
||||
libCEC(R) is a trademark of Pulse-Eight Limited.
|
||||
|
||||
This program is dual-licensed; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Alternatively, you can license this library under a commercial license,
|
||||
please contact Pulse-Eight Licensing for more information.
|
||||
|
||||
For more information contact:
|
||||
Pulse-Eight Licensing <license@pulse-eight.com>
|
||||
http://www.pulse-eight.com/
|
||||
http://www.pulse-eight.net/
|
||||
|
||||
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
==========================================
|
||||
Oklab Color Space Reference Implementation
|
||||
==========================================
|
||||
|
||||
Copyright (c) 2021 Björn Ottosson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
473
CHANGELOG.md
473
CHANGELOG.md
|
@ -4,15 +4,471 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.0-alpha.6...HEAD)
|
||||
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.15...HEAD)
|
||||
|
||||
### Breaking
|
||||
|
||||
### Added
|
||||
|
||||
### Changed
|
||||
|
||||
### Fixed
|
||||
- Fixed missing Include limits in QJsonSchemaChecker
|
||||
- Fixed dependencies for deb packages in Debian Bookworm
|
||||
|
||||
## Removed
|
||||
|
||||
## [2.0.15](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.15) - 2023-02
|
||||
|
||||
### Added
|
||||
|
||||
- Audio Grabber to add audio visualization support for both Windows and Linux.
|
||||
- Support streaming to individual WLED segments (requires WLED 0.13.3+).
|
||||
To allow segment streaming, enable "Realtime - Use main segment only" in WLED's Sync Interfaces setup screen
|
||||
- Allow to keep WLED powered on after streaming and restoring state
|
||||
- Allow to Disable / Enable all instances (#970) by
|
||||
- Suspend/Resume support for Linux and Windows (#1493,#1282, #978).
|
||||
Suspend/Resume/Restart is supported via API, UI, Systray and hyperion-remote
|
||||
- Idle scenario via Screen Locking (Linux/Windows), Screensaver invokation (Linux), hyperion-remote or API
|
||||
In Idle, all instances, components will be disabled besides the output processing (LED-Devices, smoothing).
|
||||
The current priorities will be cleared and the background effect per instance will be executed, if enabled.
|
||||
- Commands toogleSuspend and toggleIdle allow to flip between modes, e.g. might be used to trigger modes by a remote
|
||||
- Reduced pixel processing to reduce resources on big assignment areas
|
||||
- Support for squared mean color processing
|
||||
- Support for dominant color processing on assigned LED areas (#1382). A simple and advanced way is provided. Advanced and high accuracy might be combined with reduced pixel processing to lower CPU usage.
|
||||
- Add instance# in API response (#1504)
|
||||
|
||||
### Changed
|
||||
|
||||
- REST API - Increased default timeout to address "Operation cancelled" errors
|
||||
- LED Devices: Allow to differentiate between recoverable/unrecoverable errors
|
||||
- Renamed LED area assignment naming to provide clarity on the processing algorithms
|
||||
|
||||
### Fixed
|
||||
|
||||
- Effects/Smoothing: Effects with dedicated smoothing settings will now run with those settings (even if general smoothing is off)
|
||||
- No interim color update after streaming and turning off WLED
|
||||
- LED-Matrix Layout: Add Cabling direction selection element again (#1566)
|
||||
- Restart correctly, if running as service (#1368)
|
||||
- Hue-Wizard: In case auto discovery failed, port 80 was not used as default (#1544)
|
||||
- Send only one reply per Start Instance request (#1551)
|
||||
- Add instance# in JSON-API replies (aligning to Add instance in websocket response to a subscription #1504 behaviour)
|
||||
- hyperion-remote: Extracting reply for a configGet request correctly (#1555)
|
||||
- Grabber fps setting was not applied correctly
|
||||
- Smoothing: No empty updates
|
||||
|
||||
### Technical
|
||||
- Add CodeQL for GitHub code scanning
|
||||
- Update to Protocol Buffers 3.21.12
|
||||
- Update to Mbed TLS 3.3.0
|
||||
- Qt6 alignments
|
||||
- cmake support of libcec without version in lib-name
|
||||
- Refactor for Python 3.11 deprecated functions
|
||||
|
||||
## Removed
|
||||
|
||||
## [2.0.14](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.14) - 2022-11
|
||||
|
||||
Hyperion's November release is not too big, but provides you with the latest updates and fixes. Many thanks to all contributors providing code (xkns, drzony) or translations.
|
||||
|
||||
### Added
|
||||
|
||||
- New color processing settings: Saturation gain and brightness/value gain. They allow compensating washed out HDR colors on LEDs (#822, #1092, #1142 partially).
|
||||
- New languages: Catalan & Greek
|
||||
- USB Capture: Support 3D processing for MJPEG
|
||||
- Forwarding: Support flat-/proto buffer input
|
||||
- Adalight: HyperSerial support (High speed protocol by awawa-dev) and support device feedback, show statistics provided by HyperSerial (modified by LordGrey) sketch
|
||||
- AtmoOrb: Firmware image for Particle/Photon
|
||||
|
||||
### Changed
|
||||
|
||||
- Serial LED-devices: Ability to select standard Baud rates, as well as defining a custom one
|
||||
- LED-devices: Do not switch-off device, if background effect is configured and will kick-in soon
|
||||
|
||||
### Fixed
|
||||
|
||||
- USB-Grabber: Fixed a SEGFAULT when compiled on Ubuntu Server 22.04
|
||||
- USB Grabber: Fixed memory leak when transforming MJPEG
|
||||
- ImageResampler: Apply only half crop for 3D to maintain crop ratio
|
||||
- Remote Control: Update Color calibration values when calibration settings were saved
|
||||
- Fixed Smoothing got out of sync when saving configuration
|
||||
- Smoothing: Removed "outputrate" as duplicate to update frequency
|
||||
- Queue LED-device on/off signals
|
||||
- UI: Correctly lookup current Instance Name
|
||||
- Fixed AtmoOrb firmware image
|
||||
|
||||
## [2.0.13](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.13) - 2022-05-22
|
||||
### Added
|
||||
|
||||
- Allow to build a "light" version of Hyperion, i.e. no grabbers, or services like flat-/proto buffers, boblight, CEC
|
||||
- Allow to restart Hyperion via Systray
|
||||
- mDNS support for all platforms inkl. Windows (#740)
|
||||
- Forwarder: mDNS discovery support and ease of configuration of other Hyperion instances
|
||||
- Grabber: mDNS discovery for standalone grabbers
|
||||
- Grabber: Dynamic loading of the Dispmanx Grabber (#1418)
|
||||
- Flatbuffer/Protobuf are now able to receive RGBA data
|
||||
- Added the instance number as part of the logline (#910). In the UI Log the instance is presented as a readable name.
|
||||
- New language: Japanese
|
||||
|
||||
##### LED-Devices
|
||||
- Support retry attempts enabling devices, e.g. to open devices after network or a device itself got available (#1302). Fixes that devices got "stuck", if initial open failed e.g. for WLED, Hue
|
||||
- New UDP-DDP (Distributed Display Protocol) device to overcome the 490 LEDs limitation of UDP-RAW
|
||||
- mDNS discovery support and ease of configuration (Cololight, Nanoleaf, Philips-Hue, WLED, Yeelight); removes the need to configure IP-Address, as address is resolved automatically.
|
||||
- Allow to disable switching LEDs on during startup (#1390)
|
||||
- Support additional Yeelight models
|
||||
- Show warning, if get properties failed (Network devices: indication that network device is not reachable)
|
||||
- LED Layout Classic: Support keystone correction via draggable corner LEDs
|
||||
- LED Layout Matrix: Support vertical cabling direction (#1420)
|
||||
|
||||
### Changed
|
||||
|
||||
- Color Smoothing is started in pause mode to save resources, when Hyperion starts with no active source
|
||||
- Boblight: Support multiple Boblight clients with different priorities
|
||||
- UI: LED Preview has been given a touch of Ambilight.
|
||||
- UI: Allow configuration of a Boblight server per LED-instance
|
||||
- UI: LED Layout - Removed limitations on indention
|
||||
- UI: Log output and LED preview window can be maximized
|
||||
- mDNS Publisher: Aligned Hyperion mDNS names to general conventions and simplified naming
|
||||
|
||||
##### LED-Devices
|
||||
- Refactored Philips Hue wizard and LED-Device
|
||||
- WLED's default streaming protocol is now UDP-DDP. More than 490 LEDs are supported now (requires minimum WLED 0.11.0). UDP-RAW is still supported in parallel (via expert settings).
|
||||
- Present all serial/TTY devices during discovery in expert mode; no filtering on existing vendor-identifier (Adalight serial USB does not show up in GUI #1458)
|
||||
|
||||
### Fixed
|
||||
|
||||
- UI: Ensure all configuration and system info response are there before reloading the page (#1430)
|
||||
- UI: Show all previous log lines in the Log UI (was only working for Debug before)
|
||||
- UI: Remote control: Treat duration=0 as endless
|
||||
- UI: Stop Web-Browser capture when user triggers other activities
|
||||
- Effects: Fix image URL in Matrix effect
|
||||
- Effects: Fix that start effect is stuck on UI
|
||||
- Effects: Fixed that effect specific smoothing setup was not applied when effect is started from available- or effects under configuration
|
||||
- Qt-Grabber: Fixed position handling of multiple monitors (#1320, #1403)
|
||||
- Standalone grabbers: Improved fps help/error text, fixed default address and port, fixed auto discovery of Hyperion server in hyperion-remote
|
||||
- hyperion-remote: Show image filename in UI for images sent
|
||||
- Reworked PriorityMuxer and Subscriptions
|
||||
- PriorityMuxer: Fix crash when running fore- and background effect in parallel during start-up
|
||||
- Update Priority, if first LED changes for COLOR update (to reflect color correctly in UI)
|
||||
- Start JSON and WebServer only, if Hyperion's instance 0 is available
|
||||
- Treat http headers case insensitive (RFC 2616)
|
||||
- Fixed: Signal detection does not switch off all instances (#1281)
|
||||
- Do not kill application on SIGILL-signal (#1435)
|
||||
- Fixed Qt version override, e.g. set via QTDIR
|
||||
- Update jsonschema and checkschema to allow checking hyperion.config.json.default on Windows
|
||||
|
||||
##### LED-Devices
|
||||
- Fixes that the Led-Device output flow was interrupted, by an enabling API request on an already enabled device (#967)
|
||||
- Yeelight - Workaround: Ignore error when setting music mode = off, but the music-mode is already off (#1372)
|
||||
- Fixed: Hue Entertainment mode does not resume after no signal (#930)
|
||||
|
||||
## Removed
|
||||
- UI: Removed sessions (of other Hyperions)
|
||||
- Replaced existing AVAHI/Bonjour code by QMdnsEngine
|
||||
|
||||
## [2.0.12](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.12) - 2021-11-20
|
||||
Hyperion's November release brings you some new features, removed IPv6 address related limitations, as well as fixing a couple of issues.
|
||||
|
||||
Hyperion packages can be installed now under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
|
||||
Details about the installation can be found in the installation.md and at apt.hyperion-project.org.
|
||||
|
||||
### Added
|
||||
|
||||
- New LED-device type: Razor Chroma.
|
||||
Note: Due to Chroma Razer API limitations, only one device can be configured.
|
||||
- APA102 - Support setting maximum brightness level (1-31)
|
||||
- New installation method (Drag'n Drop) for macOS.
|
||||
- hyperion-remote & standalone grabbers: IPv6 support
|
||||
- New languages: Danish & Hungarian
|
||||
|
||||
### Changed
|
||||
|
||||
- LED-Devices: Removed IPv6 limitations
|
||||
- Philips-Hue Wizard optimizations
|
||||
- JSON/Flatbuffer forwarder: Removed IPv6 limitations
|
||||
- Allow to import configurations from previous versions
|
||||
|
||||
Note: Existing configurations are migrated to new structures automatically
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed API Subscription (e.g. as used by HomeAssistant) (#1351)
|
||||
- Fixed APA102 protocol aligning to the standard defined, removed Latch-Time as not required by APA102 protocol (#1352, #1132)
|
||||
- Fixed hyperion-remote when sending multiple Hex-Colors with "Set Color" option
|
||||
- UI: Fixed "Selected Hyperion instance isn't running" issue (#1357)
|
||||
- Fixed Database migration version handling
|
||||
- Fixed Python ModuleNotFoundError (#1109)
|
||||
|
||||
### Technical
|
||||
|
||||
- Added Qt6 support
|
||||
- Migrated to MBEDTSL 3
|
||||
|
||||
## [2.0.0-alpha.11](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.11) - 2021-10-06
|
||||
|
||||
The release is primarily fixing issues introduced with alpha 10, but covering other findings too.
|
||||
Thanks to everybody highlighting real problem areas, as well as to those proactively providing fixes for integration via pull requests.
|
||||
Besides bug fixing, you will find some smaller enhancements which make everybody’s life easier.
|
||||
|
||||
The fact that WS281x devices must run under root caused many headaches before in getting them running.
|
||||
We did not weaken security, but provide you with an easy to use script to switch the user-id of hyperion going forward. Furthermore, device configuration is blocked, if the environment does not allow it.
|
||||
|
||||
### Added:
|
||||
- Script to change the user Hyperion is executed with.
|
||||
To run Hyperion with root privileges (e.g. for WS281x) execute <br> `sudo updateHyperionUser -u root`
|
||||
- Gif effects can source Gifs via URLs in addition to local files as input
|
||||
|
||||
- System info screen: Added used config path and "is run under root/admin"
|
||||
- LED-Device enhancements
|
||||
- WS281x: Ensure that a device cannot be configured via the UI when Hyperion is not run with root privileges
|
||||
- Nanoleaf: Support discovering additional Nanoleaf devices, e.g. Shapes
|
||||
- Nanoleaf: Ability to restore state when Hyperion stops streaming<br>
|
||||
Note: In case previous state was a dynamic/temporary effect, the state cannot be restored
|
||||
- Nanoleaf: New Feature: allow to overwrite brightness by Hyperion
|
||||
|
||||
### Changed:
|
||||
|
||||
- The Systemd/Upstart/System-V-Init service registers Hyperion under the name hyperion instead of hyperiond, as this has caused confusion among users in the past.
|
||||
- WLED and UDP-Raw: Limit maximum LEDs number to 490
|
||||
- WS281x: Update DMA default as per rpi_ws281x recommendation
|
||||
- Smoothing is paused when no input source is available (to save resources)
|
||||
- Disable LED update streaming, if LED updates are not required, Sync. Video-Streaming between Layout and Simulation
|
||||
- Load configuration of last instance used when loading the UI page, Streamline API requests to avoid unnecessary invocations (#1311)
|
||||
- BobLight: Priorities are not limited any longer. BobLight can feed Priorities [2-253], default is still 128 (#1269)
|
||||
- Amlogic grabber: Limit grabber to 30fps during discovery
|
||||
- Amlogic grabber: Continuous image feed even when paused (to not have LEDs switched off), plus no delay when pausing/unpausing
|
||||
|
||||
### Fixed:
|
||||
|
||||
- Fixed that Smoothing with "Continuous Updates" disabled does not provides LED updates (#1068, #1240)
|
||||
- Fixed Issue Blinking / flickering cursor with QT screen capture on Windows (#1328)
|
||||
- Fixed Colour effect priority is not deleted when Colorpicker is open (double click on delete is required)
|
||||
- Fixed reuse local SSDP address (#1324)
|
||||
- Exclude FB Grabber on Amlogic platform, as FB is included in Amlogic Grabber
|
||||
- Escape XSS payload to avoid execution (#1292)
|
||||
- Include libqt5sql5-sqlite packaging dependency
|
||||
- Fixed embedded Python location (#1109)
|
||||
|
||||
- LED-Devices
|
||||
- Fixed Philips Hue wizard (#1276)
|
||||
- Fixed AtmoOrb wizard
|
||||
- Fixed that Lightpack device does not core when lack of permissions error (LIBUSB_ERROR_ACCESS)
|
||||
- Fixed Atmo/Karate LED count constraint handling
|
||||
- Fixed Hue, Disable LED general options (HW Led count & RGB Byte order) as calculated
|
||||
- Fixed SPI, Tpm2.Net - Memory issues
|
||||
- Fixed: Nanoleaf does not turn on
|
||||
- Fixed LED layout - Additional parameters for classic layout were not saved (#1314)
|
||||
- Fixed Network LED-Device UI: Trigger getProperties for the configured host, when no hosts were discovered
|
||||
|
||||
### Removed:
|
||||
|
||||
- Smoothing: Removed "Continuous Updates" flag as it is obsolete.
|
||||
In case an LED-device requires continuous updates, use the LED-Device's "Rewrite Time" parameter.
|
||||
|
||||
## [2.0.0-alpha.10](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.10) - 2021-07-17
|
||||
|
||||
The focus of this release is on user experience.
|
||||
We tried as much as possible supporting you in getting valid setup done, as well as providing enough room for expert users to tweak configurations here and there.
|
||||
The reworked dashboard provides you now with the ability to control individual components, jump to key configuration items, as well as to switch between LED instances easily.
|
||||
The refined color coding in the user-interfaces, helps you to quickly identify instance specific and global configuration items.
|
||||
|
||||
Of course, the release brings new features (e.g. USB Capture on Windows), as well as minor enhancements and a good number of fixes.
|
||||
|
||||
Note:
|
||||
|
||||
- **IMPORTANT:** Due to the rework of the grabbers, both screen- and video grabbers are disabled after the upgrade to the new version.
|
||||
Please, re-enable the grabber of choice via the UI, validate the configuration and save the setup. The grabber should the restart.
|
||||
|
||||
- Hyperion packages can now be installed under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server.
|
||||
Details about the installation can be found in the [installation.md](https://github.com/hyperion-project/hyperion.ng/blob/master/Installation.md) and at [apt.hyperion-project.org](apt.hyperion-project.org).
|
||||
- Find here more details on [supported platforms and configuration sets](https://github.com/hyperion-project/hyperion.ng/blob/master/doc/development/SupportedPlatforms.md)
|
||||
|
||||
### Breaking
|
||||
|
||||
### Added
|
||||
|
||||
- The Dashboard is now a one-stop control element to control instances and link into configuration areas
|
||||
- LED Instance independent configuration objects (e.g. capturing hardware) are now separated out in the menu
|
||||
- New menu item "Sources" per LED instances configuration to enable/disable screen or usb grabber per instance
|
||||
|
||||
#### Grabbers
|
||||
- Windows Media Foundation USB grabber (incl. Media Foundation transform/Turbo-JPEG scaling)
|
||||
- Linux V4L2 Grabber now supports the following formats: NV12, YUV420
|
||||
- Image flipping ability in ImageResampler/Turbo-JPEG
|
||||
- UI: Simplified screens for non-expert usage, do only show elements relevant
|
||||
- Discover available Grabbers (incl. their capabilities for selection), not supported grabbers are not presented. Note: Screen capturing on Wayland is not supported (given the Wayland security architecture)
|
||||
- USB Grabber: New ability to configure hardware controls (brightness, contrast, saturation, hue), as well as populating defaults
|
||||
- Configuration item ranges are automatically adopted based on grabber capabilities,
|
||||
- Grabbers can only be saved with a valid configuration
|
||||
- Standalone grabbers: Added consistent options/capabilities for standalone grabbers, debug logging support
|
||||
- Screen grabbers: Allow to set capture frequency, size decimation and cropping across all grabber types
|
||||
- Screen grabber: QT-Grabber allows to capture individual displays or all displays in a multi-display setup
|
||||
- Display Signal Detection area in preview (expert users)
|
||||
- UI: Only show CEC detection, if supported by platform
|
||||
|
||||
#### LED-Devices
|
||||
- Select device from list of available devices (UI Optimization - Select device from list of available devices #1053) - Cololight, Nanoleaf, Serial Devices (e.g. Adalight), SPI-Device, Pi-Blaster
|
||||
- Get device properties for automatic configuration of number of LEDs and initial layout (WLED, Cololight, Nanoleaf)
|
||||
- Identify/Test device (WLED, Cololight, Nanoleaf, Adalight)
|
||||
- For selected devices a default layout configuration is created, if the user chooses "Overwrite" (WLED, Cololight, Nanoleaf, all serial devices, all spi device, pi-blaster)
|
||||
- Ensure Hardware LED count matches number of lights (Philips Hue, Yeelight, Atmo Orb)
|
||||
- User is presented a warning/error, if there is a mismatch between configured LED number and available hardware LEDs
|
||||
- Add udev support for Serial-Devices
|
||||
- Allow to get properties for Atmo and Karatedevices to limit LED numbers configurable
|
||||
- Philips Hue: Add basic support for the Play Gradient Lightstrip
|
||||
- WLED: Support of ["live" property] (https://github.com/Aircoookie/WLED/issues/1308) (#1095)
|
||||
- WLED: Brightness overwrite control by configuration
|
||||
- WLED: Allow to disable WLED synchronization when streaming via hyperion
|
||||
- WLED: Support storing/restoring state (#1101)
|
||||
- Adalight: Fix LED Num for non analogue output in arduino firmware
|
||||
|
||||
- Allow to blacklist LEDs in layout via UI
|
||||
- Live Video image to LedLayout preview (#1136)
|
||||
|
||||
#### Other
|
||||
|
||||
- Effects: Support Custom Effect Templates in UI for custom effect creation and configuration
|
||||
- Effects: Custom effect separation in the systray menu
|
||||
|
||||
- New languages - Portuguese (Std/Brazil) & Norwegian (Bokmål)
|
||||
- New Flags: Russia, Cameroon, Great Britain, England, Scotland
|
||||
|
||||
- Provide cross compilation on x86_64 for developers using docker. This includes the ability to use local code, as well as build incrementally
|
||||
|
||||
### Changed
|
||||
|
||||
- Grabbers use now precise timings for better timing accuracy
|
||||
|
||||
- Nanoleaf: Consider Nanoleaf-Shape Controllers
|
||||
- LED-Devices: Show HW-Ledcount in all setting levels
|
||||
|
||||
- System Log Screen: Support to copy loglines, system info and status of the current instance to the clipboard (to share it for investigation)
|
||||
|
||||
- Updated dependency rpi_ws281x to latest upstream
|
||||
- Fix High CPU load (RPI3B+) (#1013)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Active grabbers are displayed correctly after updating the WebUI
|
||||
- Issue Crop values are checked against decimated resolution (#1160)
|
||||
- Framebuffer grabber is deactivated in case of error
|
||||
- Fix/no signal detection (#1087)
|
||||
|
||||
- Fix that global settings were not correctly reflected across instances after updates in other non default instance (#1131,#1186,#1188)
|
||||
- Fix UI: Handle error scenario properly, when last instance number used does not exist any longer.
|
||||
- UI Allow to have password handled by Password-Manager (#1263)
|
||||
|
||||
- Fixed effect freezing during startup
|
||||
- Effects were not started from tray (#1199)
|
||||
- Interrupt effect on timeout (#1013)
|
||||
- Fixed color and effect handling and duplicate priorities (#993,#1113,#1216)
|
||||
- Stop background effect, when it gets out of scope (to not use resources unnecessarily)
|
||||
- Custom Effect Templates (schemas) are now loaded
|
||||
- Effects: Uploaded images were not found executing custom image effects
|
||||
- "LED Test" effect description is in wrong order (#1229)
|
||||
|
||||
- LED-Devices: Only consider Hardware LED count (#673)
|
||||
- LED-Devices: Correct total packet count in tpm2net implementation (#1127)
|
||||
- LED-Hue: Proper black in Entertainment mode if min brightness is set
|
||||
- LED-Hue: Minor fix of setColor command
|
||||
- Nanoleaf: Fixed behaviour, if external control mode cannot be set
|
||||
|
||||
- System Log Screen: Fixed Auto-Scrolling, Update Look & Feel, Works across multiple Browser tabs/windows, as log stream is not stopped by a new UI
|
||||
|
||||
- Rename Instance and Change Password: Modal did not close
|
||||
- Read-Only mode was not handled in the SysInfo function
|
||||
|
||||
- WebSockets: Handling of fragmented frames fixed
|
||||
- Fixed libcec dependencies
|
||||
|
||||
- General language and grammar updates
|
||||
|
||||
### Removed
|
||||
|
||||
## [2.0.0-alpha.9](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.9) - 2020-11-18
|
||||
### Added
|
||||
- Grabber: DirectX9 support (#1039)
|
||||
- New blackbar detection mode "Letterbox", that considers only bars at the top and bottom of picture
|
||||
|
||||
- LED-Devices: Cololight support (Cololight Plus & Strip) incl. configuration wizard
|
||||
- LED-Devices: SK9822 support (#1005,#1017)
|
||||
|
||||
- UX: New language support: Russian and Chinese (simplified) (#1005)
|
||||
- UX: Additional details on Hardware/CPU information (#1045)
|
||||
- UX: Systray icons added - Issue #925 (#1040)
|
||||
|
||||
- Read-Only configuration database support
|
||||
- Hide Window Systray icon on Hyperion exit & Install DirectX Redistributable
|
||||
- Read-Only configuration database support
|
||||
|
||||
### Changed
|
||||
- boblight: reduce cpu time spent on memcopy and parsing rgb values (#1016)
|
||||
- Windows Installer/Uninstaller notification when Hyperion is running (#1033)
|
||||
- Updated Windows Dependencies
|
||||
- Documentation: Optimized images (#1058)
|
||||
- UX: Default LED-layout is now one LED only to avoid errors as in #673
|
||||
- UX: Change links from http to https (#1067)
|
||||
- Change links from http to https (#1067)
|
||||
- Cleanup packages.cmake & extend NSIS plugin directory
|
||||
- Optimize images (#1058)
|
||||
- Docs: Refreshed EN JSON API documentation
|
||||
|
||||
### Fixed
|
||||
- Color calibration for Kodi 18 (#1044)
|
||||
- LED-Devices: Karatelight, allow an 8-LED configuration (#1037)
|
||||
- LED-Devices: Save Hue light state between sessions (#1014)
|
||||
- LED-Devices: LED's retain last state after clearing a source (#1008)
|
||||
- LED-Devices: Lightpack issue #1015 (#1049)
|
||||
- Fix various JSON API issues (#1036)
|
||||
- Fix issue #909, Have ratio correction first and then scale (#1047)
|
||||
- Fix display argument in hyperion-qt (#1027)
|
||||
- Fix Python reset thread state
|
||||
- AVAHI included in Webserver (#996)
|
||||
- Fix add libcec to deb/rpm dependency list
|
||||
- Fix Hyperion configuration is corrected during start-up, if required
|
||||
- Fix color comparison / Signal detection (#1087)
|
||||
|
||||
### Removed
|
||||
- Replace Multi-Lightpack by multi-instance Lightpack configuration (#1049)
|
||||
|
||||
## [2.0.0-alpha.8](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.8) - 2020-09-14
|
||||
### Added
|
||||
- Add XCB grabber, a faster and safer alternative for X11 grabbing (#912)
|
||||
- for Windows: Add binary meta (#932)
|
||||
- Differentiate between LED-Device Enable/Disable and Switch On/Off (#960) (Fixes: #828)
|
||||
- AtmoOrb discovery and identification support (#988)
|
||||
- New AtmoOrb Wizard (#988)
|
||||
- Added and updated some language files (#900, #926, #916) (DE, CS, NL, FR, IT, PL, RO, ES, SV, TR, VI)
|
||||
### Changed
|
||||
- Improved UDP-Device Error handling (#961)
|
||||
- NSIS/Systray option to launch Hyperion on Windows start (HKCU) (#887)
|
||||
- Updated some dependencies (#929, #1003, #1004)
|
||||
- refactor: Modernize Qt connections (#914)
|
||||
- refactor: Resolve some clang warnings (#915)
|
||||
- refactor: Several random fixes + Experimental playground (#917)
|
||||
- Use query interface for void returning X requests (#945)
|
||||
- Move Python related code to Python module (#946)
|
||||
- General tidy up (#958)
|
||||
- AtmoOrb ESP8266 sketch to support device identification, plus small fix (#988)
|
||||
|
||||
### Fixed
|
||||
- webui: Works now with HTTPS port 443 (#923 with #924)
|
||||
- Adalight issue (#903 with #991)
|
||||
- Fixed CI: Trigger HyperBian build after release
|
||||
- Fixed: -DUSE_SYSTEM_MBEDTLS_LIBS=ON - undefined reference (#898)
|
||||
- set zlib back to system ignore list/revert pr #871 (#904)
|
||||
- Fixed: logger and led colors (#906)
|
||||
- Fixed: some more threading errors (#911)
|
||||
- Fix OSX build (#952)
|
||||
- AtmoOrb Fix (#988)
|
||||
- Return TAN to API requests whenever possible (#1002)
|
||||
|
||||
## [2.0.0-alpha.7](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.7) - 2020-07-23
|
||||
### Added
|
||||
- [HyperBian](https://github.com/hyperion-project/HyperBian/releases) - A Raspberry Pi OS Lite image with Hyperion pre installed. (#832)
|
||||
- An option to reset (delete) the database for the commandline has been added (#820)
|
||||
- Improve language selection usability (#812)
|
||||
- readded V4L2 Input method from old Hyperion (#825)
|
||||
- re-added V4L2 Input method from old Hyperion (#825)
|
||||
- Windows: Start Hyperion with a console window `hyperiond -c` (Or new start menu entry) (#860)
|
||||
- Get process IDs by iterating /proc (#843)
|
||||
- Dump stack trace on crash (Implement #849) (#870)
|
||||
|
@ -24,7 +480,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
* discover, getProperties, identify, store/restore state and power-on/off available for Philips-Hue, Nanoleaf, Yeelight, partially for Rs232 / USB (Hid)
|
||||
* New device capabilities are accessible via JSON-API
|
||||
* New REST-API wrapper class in support of network devices, e.g. Philips Hue, Nanoleaf and WLED
|
||||
* Flexible ssdp-Discovery incl. RegEx matching and filtering
|
||||
* Flexible SSDP-Discovery incl. RegEx matching and filtering
|
||||
- Documentation (#875)
|
||||
* Process workflow for LED-Devices
|
||||
* Documentation of device classes & methods
|
||||
|
@ -67,7 +523,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- Fix resolution change event Fixes part of #620 (#867)
|
||||
- some code improvements & cleanup (#861) (#872) (#880) (#876)
|
||||
- some little things, as always (#863)
|
||||
- AtomOrb: Buffer length fix and new configuration validations (#875)
|
||||
- AtmoOrb: Buffer length fix and new configuration validations (#875)
|
||||
- Added missing DMX SubTypes to configuration (#875)
|
||||
- Fix logger (#885)
|
||||
* Make logger thread safe
|
||||
|
@ -75,12 +531,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
* Make logs look a bit more cleaner
|
||||
- Decrease compile time (#886)
|
||||
- Fix some data synchronization error (#890)
|
||||
- Fix Qt screenhot crash (#889)
|
||||
- Fix Qt screenshot crash (#889)
|
||||
- Fix crash on startup if no X server available (#892)
|
||||
- Fix RPC restart of Hyperion (#894)
|
||||
|
||||
### Removed
|
||||
|
||||
## [2.0.0-alpha.6](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.6) - 2020-05-27
|
||||
### Breaking
|
||||
The release package names have been adjusted.\
|
||||
|
@ -133,7 +587,7 @@ If you used a `.deb` package please uninstall it before you upgrade
|
|||
- Resolve enable state for v4l and screen capture (#728)
|
||||
- Enable/Disable loops for components
|
||||
- Runs now on x86_64 LibreElec (missing libs) (#736)
|
||||
- Brightness componsation is now visible for configuration (#746)
|
||||
- Brightness compensation is now visible for configuration (#746)
|
||||
- Prevent malformed image size for effects with specific led layouts (#746)
|
||||
|
||||
### Changed:
|
||||
|
@ -163,7 +617,7 @@ If you used a `.deb` package please uninstall it before you upgrade
|
|||
- Smoothing comp state on startup (#685)
|
||||
- Azure GitHub release title (#686)
|
||||
- SSL/Avahi problems in previous release (#689)
|
||||
- WebUI Version Check to SemVer. Also addes "Alpha" Channel (#692)
|
||||
- WebUI Version Check to SemVer. Also adds "Alpha" Channel (#692)
|
||||
|
||||
### Removed
|
||||
- Travis CI tests (#684)
|
||||
|
@ -171,3 +625,4 @@ If you used a `.deb` package please uninstall it before you upgrade
|
|||
## [2.0.0-alpha.1](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.1) - 2020-02-16
|
||||
### Added
|
||||
- Initial Release
|
||||
|
||||
|
|
610
CMakeLists.txt
610
CMakeLists.txt
|
@ -1,23 +1,36 @@
|
|||
cmake_minimum_required(VERSION 3.0.0)
|
||||
cmake_minimum_required(VERSION 3.5.0)
|
||||
|
||||
message( STATUS "CMake Version: ${CMAKE_VERSION}" )
|
||||
|
||||
macro(addIndent text)
|
||||
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
|
||||
list(APPEND CMAKE_MESSAGE_INDENT ${text})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(removeIndent)
|
||||
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
|
||||
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
PROJECT(hyperion)
|
||||
|
||||
# Parse semantic version of version file
|
||||
# Parse semantic version of version file and write version to config
|
||||
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.cmake)
|
||||
file (STRINGS "version" HYPERION_VERSION)
|
||||
file (STRINGS ".version" HYPERION_VERSION)
|
||||
SetVersionNumber(HYPERION ${HYPERION_VERSION})
|
||||
set(DEFAULT_JSON_CONFIG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/config/hyperion.config.json.default)
|
||||
file(READ ${DEFAULT_JSON_CONFIG_FILE} DEFAULT_JSON_CONFIG_VAR)
|
||||
string(REPLACE "configVersionValue" ${HYPERION_VERSION} DEFAULT_JSON_CONFIG_VAR "${DEFAULT_JSON_CONFIG_VAR}")
|
||||
string(REPLACE "previousVersionValue" ${HYPERION_VERSION} DEFAULT_JSON_CONFIG_VAR "${DEFAULT_JSON_CONFIG_VAR}")
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default "${DEFAULT_JSON_CONFIG_VAR}")
|
||||
|
||||
# Instruct CMake to run moc automatically when needed.
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
# auto prepare .qrc files
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
if ( POLICY CMP0026 )
|
||||
CMAKE_POLICY( SET CMP0026 OLD )
|
||||
endif()
|
||||
|
||||
# Configure CCache if available
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
if ( CCACHE_FOUND )
|
||||
|
@ -25,48 +38,98 @@ if ( CCACHE_FOUND )
|
|||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
||||
endif(CCACHE_FOUND)
|
||||
|
||||
if (NOT CMAKE_VERSION VERSION_LESS "3.12")
|
||||
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
|
||||
if(Python_FOUND)
|
||||
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
|
||||
# enable C++17
|
||||
if(APPLE)
|
||||
include(CheckCXXCompilerFlag)
|
||||
CHECK_CXX_COMPILER_FLAG("Werror=unguarded-availability" REQUIRED_UNGUARDED_AVAILABILITY)
|
||||
if(REQUIRED_UNGUARDED_AVAILABILITY)
|
||||
list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "Werror=unguarded-availability")
|
||||
endif()
|
||||
else()
|
||||
set(Python_ADDITIONAL_VERSIONS 3.5)
|
||||
find_package( PythonInterp 3.5 REQUIRED )
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "GNU")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# Set build variables
|
||||
SET ( DEFAULT_AMLOGIC OFF )
|
||||
SET ( DEFAULT_DISPMANX OFF )
|
||||
SET ( DEFAULT_OSX OFF )
|
||||
SET ( DEFAULT_X11 OFF )
|
||||
SET ( DEFAULT_QT ON )
|
||||
SET ( DEFAULT_WS281XPWM OFF )
|
||||
SET ( DEFAULT_AVAHI ON )
|
||||
SET ( DEFAULT_USE_SHARED_AVAHI_LIBS ON )
|
||||
# Grabber
|
||||
SET ( DEFAULT_AMLOGIC OFF )
|
||||
SET ( DEFAULT_DISPMANX OFF )
|
||||
SET ( DEFAULT_DX OFF )
|
||||
SET ( DEFAULT_MF OFF )
|
||||
SET ( DEFAULT_OSX OFF )
|
||||
SET ( DEFAULT_QT ON )
|
||||
SET ( DEFAULT_V4L2 OFF )
|
||||
SET ( DEFAULT_AUDIO ON )
|
||||
SET ( DEFAULT_X11 OFF )
|
||||
SET ( DEFAULT_XCB OFF )
|
||||
|
||||
# Input
|
||||
SET ( DEFAULT_BOBLIGHT_SERVER ON )
|
||||
SET ( DEFAULT_CEC OFF )
|
||||
SET ( DEFAULT_FLATBUF_SERVER ON )
|
||||
SET ( DEFAULT_PROTOBUF_SERVER ON )
|
||||
|
||||
# Output
|
||||
SET ( DEFAULT_FORWARDER ON )
|
||||
SET ( DEFAULT_FLATBUF_CONNECT ON )
|
||||
|
||||
# LED-Devices
|
||||
SET ( DEFAULT_DEV_NETWORK ON )
|
||||
SET ( DEFAULT_DEV_SERIAL ON )
|
||||
SET ( DEFAULT_DEV_SPI OFF )
|
||||
SET ( DEFAULT_DEV_TINKERFORGE OFF )
|
||||
SET ( DEFAULT_DEV_USB_HID OFF )
|
||||
SET ( DEFAULT_DEV_WS281XPWM OFF )
|
||||
|
||||
# Services
|
||||
SET ( DEFAULT_EFFECTENGINE ON )
|
||||
SET ( DEFAULT_EXPERIMENTAL OFF )
|
||||
SET ( DEFAULT_MDNS ON )
|
||||
SET ( DEFAULT_REMOTE_CTL ON )
|
||||
|
||||
# Build
|
||||
SET ( DEFAULT_JSONCHECKS ON )
|
||||
SET ( DEFAULT_DEPLOY_DEPENDENCIES ON )
|
||||
SET ( DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF )
|
||||
SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF )
|
||||
SET ( DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF )
|
||||
SET ( DEFAULT_TESTS OFF )
|
||||
SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF )
|
||||
SET ( DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF )
|
||||
SET ( DEFAULT_USE_SYSTEM_QMDNS_LIBS OFF )
|
||||
SET ( DEFAULT_TESTS OFF )
|
||||
|
||||
# Build Hyperion with a reduced set of functionality, overwrites other default values
|
||||
SET ( DEFAULT_HYPERION_LIGHT OFF )
|
||||
|
||||
IF ( ${CMAKE_SYSTEM} MATCHES "Linux" )
|
||||
SET ( DEFAULT_V4L2 ON )
|
||||
SET ( DEFAULT_SPIDEV ON )
|
||||
SET ( DEFAULT_TINKERFORGE ON )
|
||||
SET ( DEFAULT_FB ON )
|
||||
SET ( DEFAULT_USB_HID ON )
|
||||
SET ( DEFAULT_CEC ON )
|
||||
SET ( DEFAULT_FB ON )
|
||||
SET ( DEFAULT_V4L2 ON )
|
||||
SET ( DEFAULT_DEV_SPI ON )
|
||||
SET ( DEFAULT_DEV_TINKERFORGE ON )
|
||||
SET ( DEFAULT_DEV_USB_HID ON )
|
||||
SET ( DEFAULT_CEC ON )
|
||||
ELSEIF ( WIN32 )
|
||||
SET ( DEFAULT_DX ON )
|
||||
SET ( DEFAULT_MF ON )
|
||||
ELSE()
|
||||
SET ( DEFAULT_V4L2 OFF )
|
||||
SET ( DEFAULT_FB OFF )
|
||||
SET ( DEFAULT_SPIDEV OFF )
|
||||
SET ( DEFAULT_TINKERFORGE OFF )
|
||||
SET ( DEFAULT_USB_HID OFF )
|
||||
SET ( DEFAULT_CEC OFF )
|
||||
SET ( DEFAULT_FB OFF )
|
||||
SET ( DEFAULT_V4L2 OFF )
|
||||
SET ( DEFAULT_DEV_SPI OFF )
|
||||
SET ( DEFAULT_DEV_TINKERFORGE OFF )
|
||||
SET ( DEFAULT_DEV_USB_HID OFF )
|
||||
SET ( DEFAULT_CEC OFF )
|
||||
ENDIF()
|
||||
|
||||
if ( NOT DEFINED PLATFORM )
|
||||
if ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86" )
|
||||
if ( APPLE )
|
||||
SET( PLATFORM "osx")
|
||||
elseif ( WIN32 )
|
||||
SET( PLATFORM "windows")
|
||||
elseif ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86" )
|
||||
SET( PLATFORM "x11")
|
||||
elseif ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
|
||||
SET( PLATFORM "rpi")
|
||||
|
@ -77,10 +140,6 @@ if ( NOT DEFINED PLATFORM )
|
|||
elseif ( ("${SYSTEM_CPUINFO}" MATCHES "amlogic" OR "${SYSTEM_CPUINFO}" MATCHES "odroid-c2" OR "${SYSTEM_CPUINFO}" MATCHES "vero4k") AND ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
|
||||
SET( PLATFORM "amlogic64" )
|
||||
endif()
|
||||
elseif ( APPLE )
|
||||
SET( PLATFORM "osx")
|
||||
elseif ( WIN32 )
|
||||
SET( PLATFORM "windows")
|
||||
endif()
|
||||
if ( PLATFORM )
|
||||
message( STATUS "PLATFORM is not defined, evaluated platform: ${PLATFORM}")
|
||||
|
@ -96,43 +155,50 @@ MACRO(FIRSTSUBDIR result curdir)
|
|||
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
|
||||
SET(dirlist "")
|
||||
FOREACH(child ${children})
|
||||
IF(IS_DIRECTORY ${curdir}/${child})
|
||||
LIST(APPEND dirlist "${curdir}/${child}")
|
||||
BREAK()
|
||||
ENDIF()
|
||||
IF(IS_DIRECTORY ${curdir}/${child})
|
||||
LIST(APPEND dirlist "${curdir}/${child}")
|
||||
BREAK()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
SET(${result} ${dirlist})
|
||||
ENDMACRO()
|
||||
|
||||
if ( "${PLATFORM}" MATCHES "osx" )
|
||||
# specify the min version of the target platform
|
||||
SET ( CMAKE_OSX_DEPLOYMENT_TARGET "10.15" )
|
||||
# add specific prefix paths
|
||||
FIRSTSUBDIR(SUBDIRQT "/usr/local/Cellar/qt5")
|
||||
FIRSTSUBDIR(SUBDIRPY "/usr/local/opt/python3/Frameworks/Python.framework/Versions")
|
||||
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${SUBDIRQT} ${SUBDIRPY} "/usr/local/opt/qt5" )
|
||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${SUBDIRPY})
|
||||
|
||||
include_directories("/opt/X11/include/")
|
||||
SET ( DEFAULT_OSX ON )
|
||||
SET ( DEFAULT_USB_HID ON )
|
||||
SET ( DEFAULT_OSX ON )
|
||||
SET ( DEFAULT_AUDIO OFF )
|
||||
SET ( DEFAULT_DEV_USB_HID ON )
|
||||
|
||||
elseif ( "${PLATFORM}" MATCHES "rpi" )
|
||||
SET ( DEFAULT_DISPMANX ON )
|
||||
SET ( DEFAULT_WS281XPWM ON )
|
||||
elseif ( "${PLATFORM}" STREQUAL "amlogic" )
|
||||
SET ( DEFAULT_AMLOGIC ON )
|
||||
elseif ( "${PLATFORM}" STREQUAL "amlogic64" )
|
||||
SET ( DEFAULT_AMLOGIC ON )
|
||||
elseif ( "${PLATFORM}" MATCHES "x11" )
|
||||
SET ( DEFAULT_DEV_WS281XPWM ON )
|
||||
elseif ( "${PLATFORM}" MATCHES "^amlogic" )
|
||||
SET ( DEFAULT_AMLOGIC ON )
|
||||
if ( "${PLATFORM}" MATCHES "-dev$" )
|
||||
SET ( DEFAULT_AMLOGIC ON )
|
||||
SET ( DEFAULT_DISPMANX OFF )
|
||||
SET ( DEFAULT_QT OFF )
|
||||
SET ( DEFAULT_CEC OFF )
|
||||
endif()
|
||||
elseif ( "${PLATFORM}" MATCHES "^x11" )
|
||||
SET ( DEFAULT_X11 ON )
|
||||
if ( "${PLATFORM}" STREQUAL "x11-dev" )
|
||||
SET ( DEFAULT_XCB ON )
|
||||
if ( "${PLATFORM}" MATCHES "-dev$" )
|
||||
SET ( DEFAULT_AMLOGIC ON)
|
||||
SET ( DEFAULT_WS281XPWM ON )
|
||||
SET ( DEFAULT_DEV_WS281XPWM ON )
|
||||
endif()
|
||||
elseif ( "${PLATFORM}" STREQUAL "imx6" )
|
||||
SET ( DEFAULT_FB ON )
|
||||
elseif (WIN32)
|
||||
SET ( DEFAULT_AVAHI OFF)
|
||||
endif()
|
||||
|
||||
# enable tests for -dev builds
|
||||
if ( "${PLATFORM}" MATCHES "-dev" )
|
||||
if ( "${PLATFORM}" MATCHES "-dev$" )
|
||||
SET ( DEFAULT_TESTS ON )
|
||||
endif()
|
||||
|
||||
|
@ -141,54 +207,187 @@ STRING( REPLACE "-DEV" "" PLATFORM_DEFINE "${PLATFORM_DEFINE}" )
|
|||
ADD_DEFINITIONS( ${PLATFORM_DEFINE} )
|
||||
|
||||
# set the build options
|
||||
|
||||
option(HYPERION_LIGHT "Build Hyperion with a reduced set of functionality" ${DEFAULT_HYPERION_LIGHT} )
|
||||
message(STATUS "HYPERION_LIGHT = ${HYPERION_LIGHT}")
|
||||
|
||||
if (HYPERION_LIGHT)
|
||||
message(STATUS "HYPERION_LIGHT: Hyperion is build with a reduced set of functionality.")
|
||||
# Disable Grabbers
|
||||
SET ( DEFAULT_AMLOGIC OFF )
|
||||
SET ( DEFAULT_DISPMANX OFF )
|
||||
SET ( DEFAULT_DX OFF )
|
||||
SET ( DEFAULT_FB OFF )
|
||||
SET ( DEFAULT_MF OFF )
|
||||
SET ( DEFAULT_OSX OFF )
|
||||
SET ( DEFAULT_QT OFF )
|
||||
SET ( DEFAULT_V4L2 OFF )
|
||||
SET ( DEFAULT_AUDIO OFF )
|
||||
SET ( DEFAULT_X11 OFF )
|
||||
SET ( DEFAULT_XCB OFF )
|
||||
|
||||
# Disable Input Servers
|
||||
SET ( DEFAULT_BOBLIGHT_SERVER OFF )
|
||||
SET ( DEFAULT_CEC OFF )
|
||||
SET ( DEFAULT_FLATBUF_SERVER OFF )
|
||||
SET ( DEFAULT_PROTOBUF_SERVER OFF )
|
||||
|
||||
# Disable Output Connectors
|
||||
SET ( DEFAULT_FORWARDER OFF )
|
||||
SET ( DEFAULT_FLATBUF_CONNECT OFF )
|
||||
|
||||
# Disable Services
|
||||
SET ( DEFAULT_EFFECTENGINE OFF )
|
||||
endif()
|
||||
|
||||
message(STATUS "Grabber options:")
|
||||
|
||||
addIndent(" - ")
|
||||
|
||||
option(ENABLE_AMLOGIC "Enable the AMLOGIC video grabber" ${DEFAULT_AMLOGIC} )
|
||||
message(STATUS "ENABLE_AMLOGIC = ${ENABLE_AMLOGIC}")
|
||||
|
||||
option(ENABLE_DISPMANX "Enable the RPi dispmanx grabber" ${DEFAULT_DISPMANX} )
|
||||
message(STATUS "ENABLE_DISPMANX = ${ENABLE_DISPMANX}")
|
||||
|
||||
option(ENABLE_DX "Enable the DirectX grabber" ${DEFAULT_DX})
|
||||
message(STATUS "ENABLE_DX = ${ENABLE_DX}")
|
||||
|
||||
if (ENABLE_AMLOGIC)
|
||||
SET(ENABLE_FB ON)
|
||||
else()
|
||||
option(ENABLE_FB "Enable the framebuffer grabber" ${DEFAULT_FB} )
|
||||
option(ENABLE_FB " Enable the framebuffer grabber" ${DEFAULT_FB} )
|
||||
endif()
|
||||
message(STATUS "ENABLE_FB = ${ENABLE_FB}")
|
||||
|
||||
option(ENABLE_OSX "Enable the osx grabber" ${DEFAULT_OSX} )
|
||||
option(ENABLE_MF "Enable the Media Foundation grabber" ${DEFAULT_MF})
|
||||
message(STATUS "ENABLE_MF = ${ENABLE_MF}")
|
||||
|
||||
option(ENABLE_OSX "Enable the OSX grabber" ${DEFAULT_OSX} )
|
||||
message(STATUS "ENABLE_OSX = ${ENABLE_OSX}")
|
||||
|
||||
option(ENABLE_SPIDEV "Enable the SPIDEV device" ${DEFAULT_SPIDEV} )
|
||||
message(STATUS "ENABLE_SPIDEV = ${ENABLE_SPIDEV}")
|
||||
|
||||
option(ENABLE_TINKERFORGE "Enable the TINKERFORGE device" ${DEFAULT_TINKERFORGE})
|
||||
message(STATUS "ENABLE_TINKERFORGE = ${ENABLE_TINKERFORGE}")
|
||||
option(ENABLE_QT "Enable the Qt grabber" ${DEFAULT_QT})
|
||||
message(STATUS "ENABLE_QT = ${ENABLE_QT}")
|
||||
|
||||
option(ENABLE_V4L2 "Enable the V4L2 grabber" ${DEFAULT_V4L2})
|
||||
message(STATUS "ENABLE_V4L2 = ${ENABLE_V4L2}")
|
||||
|
||||
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
|
||||
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
|
||||
option(ENABLE_AUDIO "Enable the AUDIO grabber" ${DEFAULT_AUDIO})
|
||||
message(STATUS "ENABLE_AUDIO = ${ENABLE_AUDIO}")
|
||||
|
||||
option(ENABLE_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_WS281XPWM} )
|
||||
message(STATUS "ENABLE_WS281XPWM = ${ENABLE_WS281XPWM}")
|
||||
|
||||
option(ENABLE_AVAHI "Enable Zeroconf" ${DEFAULT_AVAHI})
|
||||
message(STATUS "ENABLE_AVAHI = " ${ENABLE_AVAHI})
|
||||
option(ENABLE_XCB "Enable the XCB grabber" ${DEFAULT_XCB})
|
||||
message(STATUS "ENABLE_XCB = ${ENABLE_XCB}")
|
||||
|
||||
option(ENABLE_USB_HID "Enable the libusb and hid devices" ${DEFAULT_USB_HID} )
|
||||
message(STATUS "ENABLE_USB_HID = ${ENABLE_USB_HID}")
|
||||
removeIndent()
|
||||
|
||||
message(STATUS "Input options:")
|
||||
addIndent(" - ")
|
||||
|
||||
option(ENABLE_BOBLIGHT_SERVER "Enable BOBLIGHT server" ${DEFAULT_BOBLIGHT_SERVER} )
|
||||
message(STATUS "ENABLE_BOBLIGHT_SERVER = ${ENABLE_BOBLIGHT_SERVER}")
|
||||
|
||||
option(ENABLE_CEC "Enable the libcec and CEC control" ${DEFAULT_CEC} )
|
||||
message(STATUS "ENABLE_CEC = ${ENABLE_CEC}")
|
||||
|
||||
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
|
||||
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
|
||||
option(ENABLE_FLATBUF_SERVER "Enable Flatbuffers server" ${DEFAULT_FLATBUF_SERVER} )
|
||||
message(STATUS "ENABLE_FLATBUF_SERVER = ${ENABLE_FLATBUF_SERVER}")
|
||||
|
||||
option(ENABLE_QT "Enable the qt grabber" ${DEFAULT_QT})
|
||||
message(STATUS "ENABLE_QT = ${ENABLE_QT}")
|
||||
option(ENABLE_PROTOBUF_SERVER "Enable Protocol Buffers server" ${DEFAULT_PROTOBUF_SERVER} )
|
||||
message(STATUS "ENABLE_PROTOBUF_SERVER = ${ENABLE_PROTOBUF_SERVER}")
|
||||
|
||||
removeIndent()
|
||||
|
||||
message(STATUS "Output options:")
|
||||
addIndent(" - ")
|
||||
|
||||
option(ENABLE_FORWARDER "Enable Hyperion forwarding" ${DEFAULT_FORWARDER} )
|
||||
message(STATUS "ENABLE_FORWARDER = ${ENABLE_FORWARDER}")
|
||||
|
||||
if (ENABLE_FORWARDER)
|
||||
SET(ENABLE_FLATBUF_CONNECT ON)
|
||||
else()
|
||||
option(ENABLE_FLATBUF_CONNECT "Enable Flatbuffers connecting remotely" ${DEFAULT_FLATBUF_CONNECT} )
|
||||
endif()
|
||||
message(STATUS "ENABLE_FLATBUF_CONNECT = ${ENABLE_FLATBUF_CONNECT}")
|
||||
|
||||
removeIndent()
|
||||
|
||||
message(STATUS "LED-Device options:")
|
||||
addIndent(" - ")
|
||||
|
||||
option(ENABLE_DEV_NETWORK "Enable the Network devices" ${DEFAULT_DEV_NETWORK} )
|
||||
message(STATUS "ENABLE_DEV_NETWORK = ${ENABLE_DEV_NETWORK}")
|
||||
|
||||
option(ENABLE_DEV_SERIAL "Enable the Serial devices" ${DEFAULT_DEV_SERIAL} )
|
||||
message(STATUS "ENABLE_DEV_SERIAL = ${ENABLE_DEV_SERIAL}")
|
||||
|
||||
option(ENABLE_DEV_SPI "Enable the SPI device" ${DEFAULT_DEV_SPI} )
|
||||
message(STATUS "ENABLE_DEV_SPI = ${ENABLE_DEV_SPI}")
|
||||
|
||||
option(ENABLE_DEV_TINKERFORGE "Enable the TINKERFORGE device" ${DEFAULT_DEV_TINKERFORGE})
|
||||
message(STATUS "ENABLE_DEV_TINKERFORGE = ${ENABLE_DEV_TINKERFORGE}")
|
||||
|
||||
option(ENABLE_DEV_USB_HID "Enable the libusb and hid devices" ${DEFAULT_DEV_USB_HID} )
|
||||
message(STATUS "ENABLE_DEV_USB_HID = ${ENABLE_DEV_USB_HID}")
|
||||
|
||||
option(ENABLE_DEV_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_DEV_WS281XPWM} )
|
||||
message(STATUS "ENABLE_DEV_WS281XPWM = ${ENABLE_DEV_WS281XPWM}")
|
||||
|
||||
removeIndent()
|
||||
|
||||
message(STATUS "Services options:")
|
||||
addIndent(" - ")
|
||||
|
||||
option(ENABLE_EFFECTENGINE "Enable Effect-Engine" ${DEFAULT_EFFECTENGINE})
|
||||
message(STATUS "ENABLE_EFFECTENGINE = ${ENABLE_EFFECTENGINE}")
|
||||
|
||||
option(ENABLE_EXPERIMENTAL "Compile experimental features" ${DEFAULT_EXPERIMENTAL})
|
||||
message(STATUS "ENABLE_EXPERIMENTAL = ${ENABLE_EXPERIMENTAL}")
|
||||
|
||||
option(ENABLE_MDNS "Enable mDNS (aka Zeroconf)" ${DEFAULT_MDNS})
|
||||
message(STATUS "ENABLE_MDNS = ${ENABLE_MDNS}")
|
||||
|
||||
option(ENABLE_REMOTE_CTL "Enable Hyperion remote control" ${DEFAULT_REMOTE_CTL})
|
||||
message(STATUS "ENABLE_REMOTE_CTL = ${ENABLE_REMOTE_CTL}")
|
||||
|
||||
removeIndent()
|
||||
|
||||
message(STATUS "Build options:")
|
||||
addIndent(" - ")
|
||||
|
||||
option(ENABLE_JSONCHECKS "Validate json schema files" ${DEFAULT_JSONCHECKS})
|
||||
message(STATUS "ENABLE_JSONCHECKS = ${ENABLE_JSONCHECKS}")
|
||||
|
||||
option(ENABLE_DEPLOY_DEPENDENCIES "Deploy with dependencies" ${DEFAULT_DEPLOY_DEPENDENCIES})
|
||||
message(STATUS "ENABLE_DEPLOY_DEPENDENCIES = ${ENABLE_DEPLOY_DEPENDENCIES}")
|
||||
|
||||
if(ENABLE_FLATBUF_SERVER OR ENABLE_FLATBUF_CONNECT)
|
||||
message(STATUS "DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS = ${DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS}")
|
||||
endif()
|
||||
|
||||
if(ENABLE_PROTOBUF_SERVER)
|
||||
message(STATUS "DEFAULT_USE_SYSTEM_PROTO_LIBS = ${DEFAULT_USE_SYSTEM_PROTO_LIBS}")
|
||||
endif()
|
||||
|
||||
message(STATUS "DEFAULT_USE_SYSTEM_MBEDTLS_LIBS = ${DEFAULT_USE_SYSTEM_MBEDTLS_LIBS}")
|
||||
|
||||
if (ENABLE_MDNS)
|
||||
message(STATUS "DEFAULT_USE_SYSTEM_QMDNS_LIBS = ${DEFAULT_USE_SYSTEM_QMDNS_LIBS}")
|
||||
endif()
|
||||
|
||||
|
||||
option(ENABLE_PROFILER "enable profiler capabilities - not for release code" OFF)
|
||||
message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}")
|
||||
|
||||
option(ENABLE_TESTS "Compile additional test applications" ${DEFAULT_TESTS})
|
||||
message(STATUS "ENABLE_TESTS = ${ENABLE_TESTS}")
|
||||
|
||||
option(ENABLE_PROFILER "enable profiler capabilities - not for release code" OFF)
|
||||
message(STATUS "ENABLE_PROFILER = ${ENABLE_PROFILER}")
|
||||
removeIndent()
|
||||
|
||||
SET ( FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf )
|
||||
SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf )
|
||||
|
@ -196,43 +395,53 @@ SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf )
|
|||
SET ( PROTOBUF_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/proto )
|
||||
SET ( PROTOBUF_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/proto )
|
||||
|
||||
# check all json files
|
||||
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
|
||||
SET( JSON_FILES
|
||||
config/hyperion.config.json.default
|
||||
${HYPERION_SCHEMAS}
|
||||
)
|
||||
if(ENABLE_JSONCHECKS OR ENABLE_EFFECTENGINE)
|
||||
if ("${CMAKE_VERSION}" VERSION_LESS "3.12.0")
|
||||
set(Python_ADDITIONAL_VERSIONS 3.5)
|
||||
find_package(PythonInterp 3.5 REQUIRED)
|
||||
else()
|
||||
find_package(Python3 3.5 COMPONENTS Interpreter Development REQUIRED)
|
||||
if(Python3_FOUND)
|
||||
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE CHECK_JSON_FAILED
|
||||
)
|
||||
IF ( ${CHECK_JSON_FAILED} )
|
||||
MESSAGE (FATAL_ERROR "check of json files failed" )
|
||||
ENDIF ()
|
||||
if(ENABLE_JSONCHECKS)
|
||||
# check all json files
|
||||
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
|
||||
SET( JSON_FILES ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default ${HYPERION_SCHEMAS})
|
||||
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkeffects.py effects effects/schema
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE CHECK_EFFECTS_FAILED
|
||||
)
|
||||
IF ( ${CHECK_EFFECTS_FAILED} )
|
||||
MESSAGE (FATAL_ERROR "check of json effect files failed" )
|
||||
ENDIF ()
|
||||
|
||||
# for python 3 the checkschema.py file must be rewritten
|
||||
# TODO on windows it can't resolve the path inside the file (Das System kann den angegebenen Pfad nicht finden: '\\schema\\schema-general.json')
|
||||
IF (NOT WIN32)
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND python test/jsonchecks/checkschema.py config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
|
||||
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE CHECK_JSON_FAILED
|
||||
)
|
||||
IF ( ${CHECK_JSON_FAILED} )
|
||||
MESSAGE (FATAL_ERROR "check of json files failed" )
|
||||
ENDIF ()
|
||||
|
||||
if(ENABLE_EFFECTENGINE)
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkeffects.py effects effects/schema
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE CHECK_EFFECTS_FAILED
|
||||
)
|
||||
IF ( ${CHECK_EFFECTS_FAILED} )
|
||||
MESSAGE (FATAL_ERROR "check of json effect files failed" )
|
||||
ENDIF ()
|
||||
endif()
|
||||
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkschema.py ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE CHECK_CONFIG_FAILED
|
||||
)
|
||||
ENDIF()
|
||||
IF ( ${CHECK_CONFIG_FAILED} )
|
||||
MESSAGE (FATAL_ERROR "check of json default config failed" )
|
||||
ENDIF ()
|
||||
|
||||
IF ( ${CHECK_CONFIG_FAILED} )
|
||||
MESSAGE (FATAL_ERROR "check of json default config failed" )
|
||||
ENDIF ()
|
||||
endif(ENABLE_JSONCHECKS)
|
||||
|
||||
# Add project specific cmake modules (find, etc)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||
|
@ -258,26 +467,6 @@ include_directories(${CMAKE_SOURCE_DIR}/include)
|
|||
# Prefer static linking over dynamic
|
||||
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so")
|
||||
|
||||
# enable C++11; MSVC doesn't have c++11 feature switch
|
||||
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
include(CheckCXXCompilerFlag)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
|
||||
endif()
|
||||
if(COMPILER_SUPPORTS_CXX11)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
elseif(COMPILER_SUPPORTS_CXX0X)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||
else()
|
||||
message(STATUS "No support for C++11 detected. Compilation will most likely fail on your compiler")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# MSVC options
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
# Search for Windows SDK
|
||||
|
@ -285,105 +474,98 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|||
message(STATUS "WINDOWS SDK: ${WINDOWSSDK_LATEST_DIR} ${WINDOWSSDK_LATEST_NAME}")
|
||||
message(STATUS "MSVC VERSION: ${MSVC_VERSION}")
|
||||
|
||||
# Qt5 default install path with msvc2017 64bit component
|
||||
# The Qt5_DIR should point to Qt5Config.cmake -> C:/Qt/5.xx/msvc2017_64/lib/cmake/Qt5
|
||||
# The CMAKE_PREFIX_PATH should point to the install directory -> C:/Qt/5.xx/msvc2017_64
|
||||
FIRSTSUBDIR(SUBDIRQT "C:/Qt")
|
||||
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${SUBDIRQT}/msvc2019_64")
|
||||
if (NOT DEFINED ENV{Qt5_DIR})
|
||||
message(STATUS "Set Qt5 module path: ${SUBDIRQT}")
|
||||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${SUBDIRQT}/msvc2019_64/lib/cmake/Qt5")
|
||||
endif()
|
||||
endif()
|
||||
# Search for DirectX9
|
||||
if (ENABLE_DX)
|
||||
find_package(DirectX9 REQUIRED)
|
||||
endif(ENABLE_DX)
|
||||
|
||||
# Windows specific
|
||||
if(WIN32)
|
||||
# Path to .rc icon file for add_executable() calls
|
||||
SET ( WIN_RC_ICON_FILE ${CMAKE_SOURCE_DIR}/cmake/nsis/icon.rc)
|
||||
# Force gui app
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
|
||||
endif()
|
||||
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
|
||||
|
||||
# Use GNU gold linker if available
|
||||
if (NOT WIN32)
|
||||
if (NOT WIN32 AND NOT APPLE)
|
||||
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake)
|
||||
endif()
|
||||
|
||||
# Don't create new dynamic tags (RUNPATH)
|
||||
if (NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
# Don't create new dynamic tags (RUNPATH) and setup -rpath to search for shared libs in BINARY/../lib folder (only for Unix)
|
||||
if (ENABLE_DEPLOY_DEPENDENCIES AND UNIX AND NOT APPLE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
|
||||
endif()
|
||||
|
||||
# setup -rpath to search for shared libs in BINARY/../lib folder
|
||||
if (UNIX AND NOT APPLE)
|
||||
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib")
|
||||
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
endif ()
|
||||
|
||||
# add QT5 dependency
|
||||
IF ( CMAKE_CROSSCOMPILING )
|
||||
|
||||
file(GLOB QT_BIN ${QT_BIN_PATH})
|
||||
|
||||
set(QT_MOC_EXECUTABLE ${QT_BIN}/moc)
|
||||
add_executable(Qt5::moc IMPORTED)
|
||||
set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION ${QT_MOC_EXECUTABLE})
|
||||
|
||||
set(QT_RCC_EXECUTABLE ${QT_BIN}/rcc)
|
||||
add_executable(Qt5::rcc IMPORTED)
|
||||
set_property(TARGET Qt5::rcc PROPERTY IMPORTED_LOCATION ${QT_RCC_EXECUTABLE})
|
||||
|
||||
message(STATUS "QT_BIN_PATH = ${QT_BIN}")
|
||||
message(STATUS "QT_MOC_EXECUTABLE = ${QT_MOC_EXECUTABLE}")
|
||||
message(STATUS "QT_RCC_EXECUTABLE = ${QT_RCC_EXECUTABLE}")
|
||||
|
||||
ENDIF()
|
||||
|
||||
SET(QT_MIN_VERSION "5.5.0")
|
||||
find_package(Qt5 COMPONENTS Core Gui Network SerialPort Sql REQUIRED)
|
||||
message( STATUS "Found Qt Version: ${Qt5Core_VERSION}" )
|
||||
IF ( "${Qt5Core_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
|
||||
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
|
||||
ENDIF()
|
||||
|
||||
# Add libusb and pthreads
|
||||
find_package(libusb-1.0 REQUIRED)
|
||||
find_package(Threads REQUIRED)
|
||||
add_definitions(${QT_DEFINITIONS})
|
||||
|
||||
# Add JPEG library
|
||||
if (ENABLE_V4L2)
|
||||
# Turbo JPEG
|
||||
find_package(TurboJPEG)
|
||||
if (TURBOJPEG_FOUND)
|
||||
add_definitions(-DHAVE_TURBO_JPEG)
|
||||
message( STATUS "Using Turbo JPEG library: ${TurboJPEG_LIBRARY}")
|
||||
include_directories(${TurboJPEG_INCLUDE_DIRS})
|
||||
else()
|
||||
# System JPEG
|
||||
find_package(JPEG)
|
||||
if (JPEG_FOUND)
|
||||
add_definitions(-DHAVE_JPEG)
|
||||
message( STATUS "Using system JPEG library: ${JPEG_LIBRARIES}")
|
||||
include_directories(${JPEG_INCLUDE_DIR})
|
||||
else()
|
||||
message( STATUS "JPEG library not found, MJPEG camera format won't work in V4L2 grabber.")
|
||||
endif()
|
||||
endif (TURBOJPEG_FOUND)
|
||||
|
||||
if (TURBOJPEG_FOUND OR JPEG_FOUND)
|
||||
add_definitions(-DHAVE_JPEG_DECODER)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-framework CoreGraphics")
|
||||
endif()
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
|
||||
# Allow to overwrite QT base directory
|
||||
# Either supply QTDIR as -DQTDIR=<path> to cmake or set and environment variable QTDIR pointing to the Qt installation
|
||||
# For Windows and OSX, the default Qt installation path are tried to resolved automatically
|
||||
if (NOT DEFINED QTDIR)
|
||||
if (DEFINED ENV{QTDIR})
|
||||
set(QTDIR $ENV{QTDIR})
|
||||
else()
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
FIRSTSUBDIR(SUBDIRQT "C:/Qt")
|
||||
if (NOT ${SUBDIRQT} STREQUAL "")
|
||||
set(QTDIR "${SUBDIRQT}/msvc2019_64")
|
||||
endif()
|
||||
elseif ( "${PLATFORM}" MATCHES "osx" )
|
||||
# QT6 x86_64 location
|
||||
if (EXISTS /usr/local/opt/qt6)
|
||||
set(QTDIR "/usr/local/opt/qt6")
|
||||
# QT6 arm64 location
|
||||
elseif (EXISTS /opt/homebrew/opt/qt@6)
|
||||
set(QTDIR "/opt/homebrew/opt/qt@6")
|
||||
# QT5 x86_64 location
|
||||
elseif (EXISTS /usr/local/opt/qt5)
|
||||
set(QTDIR "/usr/local/opt/qt5")
|
||||
# QT5 arm64 location
|
||||
elseif (EXISTS /opt/homebrew/opt/qt@5)
|
||||
set(QTDIR "/opt/homebrew/opt/qt@5")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (DEFINED QTDIR)
|
||||
message(STATUS "Add QTDIR: ${QTDIR} to CMAKE_PREFIX_PATH")
|
||||
list(PREPEND CMAKE_PREFIX_PATH ${QTDIR} "${QTDIR}/lib")
|
||||
endif()
|
||||
|
||||
if (CMAKE_PREFIX_PATH)
|
||||
message( STATUS "CMAKE_PREFIX_PATH used: ${CMAKE_PREFIX_PATH}" )
|
||||
endif()
|
||||
|
||||
# find QT libs
|
||||
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui Network Sql Widgets REQUIRED)
|
||||
message( STATUS "Found Qt Version: ${QT_VERSION}" )
|
||||
|
||||
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6 )
|
||||
SET(QT_MIN_VERSION "6.2.2")
|
||||
else()
|
||||
SET(QT_MIN_VERSION "5.5.0")
|
||||
endif()
|
||||
|
||||
if ( "${QT_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
|
||||
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
|
||||
endif()
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} ${QT_VERSION} COMPONENTS Core Gui Network Sql Widgets REQUIRED)
|
||||
|
||||
message( STATUS "Qt version used: ${QT_VERSION}" )
|
||||
|
||||
if (APPLE AND (${QT_VERSION_MAJOR} GREATER_EQUAL 6) )
|
||||
set(OPENSSL_ROOT_DIR /usr/local/opt/openssl)
|
||||
endif()
|
||||
|
||||
# Add libusb and pthreads
|
||||
find_package(libusb-1.0 REQUIRED)
|
||||
add_definitions(${QT_DEFINITIONS})
|
||||
|
||||
# Add the source/lib directories
|
||||
add_subdirectory(dependencies)
|
||||
add_subdirectory(libsrc)
|
||||
|
@ -397,10 +579,16 @@ add_subdirectory(resources)
|
|||
|
||||
# remove generated files on make cleaan too
|
||||
LIST( APPEND GENERATED_QRC
|
||||
${CMAKE_BINARY_DIR}/EffectEngine.qrc
|
||||
${CMAKE_BINARY_DIR}/WebConfig.qrc
|
||||
${CMAKE_BINARY_DIR}/HyperionConfig.h
|
||||
)
|
||||
|
||||
if(ENABLE_EFFECTENGINE)
|
||||
LIST( APPEND GENERATED_QRC
|
||||
${CMAKE_BINARY_DIR}/EffectEngine.qrc
|
||||
)
|
||||
endif ()
|
||||
|
||||
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_QRC}" )
|
||||
|
||||
# uninstall target
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "x64-Debug",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "Debug",
|
||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
||||
"buildRoot": "${projectDir}\\build-${name}",
|
||||
"installRoot": "${projectDir}\\install-${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": "",
|
||||
"variables": [
|
||||
// Replace path with your TurboJPEG installation path
|
||||
//{ "name": "TurboJPEG_INCLUDE_DIRS", "type": "PATH", "value": "YourTurboJPEGPath/libjpeg-turbo64/include" },
|
||||
//{ "name": "TurboJPEG_LIBRARY", "value": "YourTurboJPEGPath/libjpeg-turbo64/lib/turbojpeg.lib", "type": "FILEPATH" }
|
||||
],
|
||||
"environments": [
|
||||
// Replace path with your installation path
|
||||
//{ "QTDIR": "C:/Qt/6.2.2/msvc2019_64/" },
|
||||
//{ "VULKAN_SDK": "C:/VulkanSDK/1.2.182.0" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "x64-Release",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "Release",
|
||||
"buildRoot": "${projectDir}\\build-${name}",
|
||||
"installRoot": "${projectDir}\\install-${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "package",
|
||||
"ctestCommandArgs": "",
|
||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
||||
"variables": [
|
||||
// Replace path with your TurboJPEG installation path
|
||||
//{ "name": "TurboJPEG_INCLUDE_DIRS", "type": "PATH", "value": "YourTurboJPEGPath/libjpeg-turbo64/include" },
|
||||
//{ "name": "TurboJPEG_LIBRARY", "value": "YourTurboJPEGPath/libjpeg-turbo64/lib/turbojpeg.lib", "type": "FILEPATH" }
|
||||
],
|
||||
"environments": [
|
||||
// Replace path with your installation path
|
||||
//{ "QTDIR": "C:/Qt/6.2.2/msvc2019_64/" },
|
||||
//{ "VULKAN_SDK": "C:/VulkanSDK/1.2.182.0" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -94,13 +94,13 @@ Error( log_main, "oh to crazy, aborting");
|
|||
// quick logging, when only one message exists and want no typing overhead - or usage in static functions
|
||||
Info( Logger::getInstance("LedDevice"), "Leddevice %s started", "PublicStreetLighting");
|
||||
|
||||
// a bit mor complex - with printf like format
|
||||
// a bit more complex - with printf like format
|
||||
Info( log_main, "hello %s, you have %d messages", "Dax", 25);
|
||||
|
||||
// conditional messages
|
||||
WarningIf( (value>threshold), log_main, "Alert, your value is greater then %d", threshold );
|
||||
```
|
||||
The amount of "%" mus match with following arguments
|
||||
The amount of "%" must match with following arguments
|
||||
|
||||
#### The Placeholders
|
||||
- %s for strings (this are cstrings, when having std::string use myStdString.c_str() to convert)
|
||||
|
@ -110,7 +110,7 @@ The amount of "%" mus match with following arguments
|
|||
|
||||
#### Log Level
|
||||
* Debug - used when message is more or less for the developer or for trouble shooting
|
||||
* Info - used for not absolutly developer stuff messages for what's going on
|
||||
* Info - used for not absolutely developer stuff messages for what's going on
|
||||
* Warning - warn if something is not as it should be, but didn't harm
|
||||
* Error - used when an error occurs
|
||||
|
||||
|
@ -120,7 +120,7 @@ The amount of "%" mus match with following arguments
|
|||
> TODO
|
||||
|
||||
## Visual Studio Code
|
||||
**We assume that you sucessfully compiled Hyperion with the [Compile HowTo](CompileHowto.md) WITHOUT Docker** \
|
||||
**We assume that you successfully compiled Hyperion with the [Compile HowTo](CompileHowto.md) WITHOUT Docker** \
|
||||
If you want to use VSCode for development follow the steps.
|
||||
|
||||
- Install [VSCode](https://code.visualstudio.com/). On Ubuntu 16.04+ you can also use the [Snapcraft VSCode](https://snapcraft.io/code) package.
|
||||
|
|
208
CompileHowto.md
208
CompileHowto.md
|
@ -1,208 +0,0 @@
|
|||
# With Docker
|
||||
If you are using [Docker](https://www.docker.com/), you can compile Hyperion inside a docker container. This keeps your system clean and with a simple script it's easy to use. Supported is also cross compiling for Raspberry Pi (Debian Stretch or higher). To compile Hyperion just execute one of the following commands.
|
||||
|
||||
The compiled binaries and packages will be available at the deploy folder next to the script.<br/>
|
||||
Note: call the script with `./docker-compile.sh -h` for more options
|
||||
|
||||
## Native compiling on Raspberry Pi
|
||||
|
||||
**Raspbian Stretch**
|
||||
```
|
||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t rpi-raspbian-stretch
|
||||
```
|
||||
**Raspbian Buster**
|
||||
```
|
||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t rpi-raspbian-buster
|
||||
```
|
||||
|
||||
## Cross compiling on X64_86 for:
|
||||
|
||||
**X64:**
|
||||
```
|
||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh
|
||||
```
|
||||
**i386:**
|
||||
```
|
||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t i386
|
||||
```
|
||||
**Raspberry Pi v1 & ZERO**
|
||||
```
|
||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv6hf
|
||||
```
|
||||
**Raspberry Pi 2 & 3**
|
||||
```
|
||||
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv7hf
|
||||
```
|
||||
|
||||
# The usual way
|
||||
|
||||
## Debian/Ubuntu/Win10LinuxSubsystem
|
||||
|
||||
```
|
||||
sudo apt-get update
|
||||
sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
|
||||
```
|
||||
|
||||
**on RPI you need the videocore IV headers**
|
||||
|
||||
```
|
||||
sudo apt-get install libraspberrypi-dev
|
||||
```
|
||||
|
||||
**OSMC on Raspberry Pi**
|
||||
```
|
||||
sudo apt-get install rbp-userland-dev-osmc
|
||||
```
|
||||
|
||||
**ATTENTION Win10LinuxSubsystem** we do not (/we can't) support using hyperion in linux subsystem of MS Windows 10, albeit some users tested it with success. Keep in mind to disable
|
||||
all linux specific led and grabber hardware via cmake. Because we use QT as framework in hyperion, serialport leds and network driven devices could work.
|
||||
|
||||
|
||||
## Arch
|
||||
See [AUR](https://aur.archlinux.org/packages/?O=0&SeB=nd&K=hyperion&outdated=&SB=n&SO=a&PP=50&do_Search=Go) for PKGBUILDs on arch. If the PKGBUILD does not work ask questions there please.
|
||||
|
||||
|
||||
## OSX
|
||||
To install on OS X you either need Homebrew or Macport but Homebrew is the recommended way to install the packages. To use Homebrew XCode is required as well, use `brew doctor` to check your install.
|
||||
|
||||
First you need to install the dependencies:
|
||||
```
|
||||
brew install qt5
|
||||
brew install python3
|
||||
brew install cmake
|
||||
brew install libusb
|
||||
brew install doxygen
|
||||
brew install zlib
|
||||
```
|
||||
|
||||
## Windows (WIP)
|
||||
We assume a 64bit Windows 7 or higher. Install the following
|
||||
- [Git](https://git-scm.com/downloads) (Check: Add to PATH)
|
||||
- [Python 3 (Windows x86-64 executable installer)](https://www.python.org/downloads/windows/) (Check: Add to PATH and Debug Symbols)
|
||||
- Open a console window and execute `pip install aqtinstall`.
|
||||
- Now we can download Qt to _C:\Qt_ `mkdir c:\Qt && aqt install -O c:\Qt 5.15.0 windows desktop win64_msvc2019_64`
|
||||
- [CMake (Windows win64-x64 Installer)](https://cmake.org/download/) (Check: Add to PATH)
|
||||
- [Win64 OpenSSL v1.1.1g](https://slproweb.com/products/Win32OpenSSL.html) ([direct link](https://slproweb.com/download/Win64OpenSSL-1_1_1g.exe))
|
||||
- [Visual Studio 2019 Build Tools](https://go.microsoft.com/fwlink/?linkid=840931) ([direct link](https://aka.ms/vs/16/release/vs_buildtools.exe))
|
||||
- Select C++ Buildtools
|
||||
- On the right, just select `MSVC v142 VS 2019 C++ x64/x86-Buildtools` and latest `Windows 10 SDK`. Everything else is not needed.
|
||||
|
||||
# Compiling and installing Hyperion
|
||||
|
||||
### The general quick way (without big comments)
|
||||
|
||||
complete automated process for Mac/Linux:
|
||||
```bash
|
||||
wget -qO- https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/bin/compile.sh | sh
|
||||
```
|
||||
|
||||
some more detailed way: (or more or less the content of the script above)
|
||||
be sure you fulfill the prerequisites above.
|
||||
|
||||
```bash
|
||||
git clone --recursive https://github.com/hyperion-project/hyperion.ng.git hyperion
|
||||
cd hyperion
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ..
|
||||
make -j $(nproc)
|
||||
if this get stucked and dmseg says out of memory try:
|
||||
make -j 2
|
||||
# optional: install into your system
|
||||
sudo make install/strip
|
||||
# to uninstall (not very well tested, please keep that in mind)
|
||||
sudo make uninstall
|
||||
# ... or run it from compile directory
|
||||
bin/hyperiond
|
||||
# webui is located on localhost:8090 or 8091
|
||||
```
|
||||
|
||||
|
||||
### Download
|
||||
Creates hyperion directory and checkout the code from github
|
||||
|
||||
```
|
||||
export HYPERION_DIR="hyperion"
|
||||
git clone --recursive --depth 1 https://github.com/hyperion-project/hyperion.ng.git "$HYPERION_DIR"
|
||||
```
|
||||
|
||||
### Preparations
|
||||
Change into hyperion folder and create a build folder
|
||||
```
|
||||
cd "$HYPERION_DIR"
|
||||
mkdir build
|
||||
cd build
|
||||
```
|
||||
|
||||
### Generate the make files:
|
||||
|
||||
To generate make files with automatic platform detection and default settings:
|
||||
|
||||
This should fit to *RPI, x86, amlogic/wetek*
|
||||
```
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ..
|
||||
```
|
||||
|
||||
*Developers on x86* linux should use:
|
||||
```
|
||||
cmake -DPLATFORM=x11-dev -DCMAKE_BUILD_TYPE=Release ..
|
||||
```
|
||||
|
||||
To use framebuffer instead of dispmanx (for example on the *cubox-i*):
|
||||
```
|
||||
cmake -DENABLE_FB=ON -DCMAKE_BUILD_TYPE=Release ..
|
||||
```
|
||||
|
||||
To generate make files on OS X:
|
||||
|
||||
Platform should be auto detected and refer to osx, you can also force osx:
|
||||
```
|
||||
cmake -DPLATFORM=osx -DCMAKE_BUILD_TYPE=Release ..
|
||||
```
|
||||
|
||||
To generate files on Windows (Release+Debug capable):
|
||||
|
||||
Platform should be auto detected and refer to windows, you can also force windows:
|
||||
|
||||
```sh
|
||||
# You might need to setup MSVC env first
|
||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
|
||||
cmake -DPLATFORM=windows -G "Visual Studio 16 2019" ..
|
||||
```
|
||||
|
||||
### Run make to build Hyperion
|
||||
The `-j $(nproc)` specifies the amount of CPU cores to use.
|
||||
```bash
|
||||
make -j $(nproc)
|
||||
```
|
||||
|
||||
On a mac you can use ``sysctl -n hw.ncpu`` to get the number of available CPU cores to use.
|
||||
|
||||
```bash
|
||||
make -j $(sysctl -n hw.ncpu)
|
||||
```
|
||||
|
||||
On Windows run
|
||||
```bash
|
||||
cmake --build . --config Release -- -maxcpucount
|
||||
```
|
||||
Maintainer: To build installer, install [NSIS](https://nsis.sourceforge.io/Main_Page) and set env `VCINSTALLDIR="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC"`
|
||||
|
||||
### Install hyperion into your system
|
||||
|
||||
Copy all necessary files to ``/usr/local/share/hyperion``
|
||||
```bash
|
||||
sudo make install/strip
|
||||
```
|
||||
|
||||
If you want to install into another location call this before installing
|
||||
|
||||
```bash
|
||||
cmake -DCMAKE_INSTALL_PREFIX=/home/pi/apps ..
|
||||
```
|
||||
This will install to ``/home/pi/apps/share/hyperion``
|
||||
|
||||
|
||||
### Integrating hyperion into your system
|
||||
|
||||
... ToDo
|
|
@ -1,92 +0,0 @@
|
|||
# Cross-Compile Hyperion-NG
|
||||
Leverage the power of a host environment (here Ubuntu) compiling for a target platform (here Raspberry Pi).
|
||||
Use a clean Raspbian Stretch Lite (on target) and Ubuntu 18/19 (on host) to execute the steps outlined below.
|
||||
## On the Target system (here Raspberry Pi)
|
||||
Install required additional packages.
|
||||
```
|
||||
sudo apt-get install qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite aptitude qt5-default rsync libssl-dev zlib1g-dev
|
||||
```
|
||||
## On the Host system (here Ubuntu)
|
||||
Update the Ubuntu environment to the latest stage and install required additional packages.
|
||||
```
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade
|
||||
sudo apt-get -qq -y install git rsync cmake build-essential qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-util0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-dev zlib1g-dev
|
||||
```
|
||||
|
||||
Refine the target IP or hostname, plus userID as required and set-up cross-compilation environment:
|
||||
```
|
||||
export TARGET_IP=x.x.x.x
|
||||
export TARGET_USER=pi
|
||||
```
|
||||
```
|
||||
export CROSSROOT="$HOME/crosscompile"
|
||||
export RASCROSS_DIR="$CROSSROOT/raspberrypi"
|
||||
export ROOTFS_DIR="$RASCROSS_DIR/rootfs"
|
||||
export TOOLCHAIN_DIR="$RASCROSS_DIR/tools"
|
||||
export QT5_DIR="$CROSSROOT/Qt5"
|
||||
export HYPERION_DIR="$HOME/hyperion.ng"
|
||||
```
|
||||
Get native files from target platform into the host-environment:
|
||||
```
|
||||
mkdir -p "$ROOTFS_DIR/lib"
|
||||
mkdir -p "$ROOTFS_DIR/usr"
|
||||
rsync -rl --delete-after --copy-unsafe-links $TARGET_USER@$TARGET_IP:/lib "$ROOTFS_DIR"
|
||||
rsync -rl --delete-after --copy-unsafe-links $TARGET_USER@$TARGET_IP:/usr/include "$ROOTFS_DIR/usr"
|
||||
rsync -rl --delete-after --copy-unsafe-links $TARGET_USER@$TARGET_IP:/usr/lib "$ROOTFS_DIR/usr"
|
||||
```
|
||||
|
||||
### Raspberry Pi specific steps
|
||||
Get Raspberry Pi firmware:
|
||||
```
|
||||
mkdir -p "$RASCROSS_DIR/firmware"
|
||||
git clone --depth 1 https://github.com/raspberrypi/firmware.git "$RASCROSS_DIR/firmware"
|
||||
ln -s "$RASCROSS_DIR/firmware/hardfp/opt" "$ROOTFS_DIR/opt"
|
||||
```
|
||||
Get toolchain files which allows to build ARM executables on x86 platforms:
|
||||
```
|
||||
mkdir -p "$TOOLCHAIN_DIR"
|
||||
cd $TOOLCHAIN_DIR
|
||||
wget -c https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz --no-check-certificate
|
||||
tar -xvf gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
|
||||
```
|
||||
### Install the Qt5 framework
|
||||
```
|
||||
mkdir -p "$QT5_DIR"
|
||||
cd "$QT5_DIR"
|
||||
wget -c http://download.qt.io/archive/qt/5.7/5.7.1/qt-opensource-linux-x64-5.7.1.run
|
||||
chmod +x $QT5_DIR/*.run
|
||||
```
|
||||
Display absolute installation directory to be used in Qt5 installer:
|
||||
```
|
||||
echo $HOME/crosscompile/Qt5
|
||||
```
|
||||
Start the Qt5 installation.
|
||||
Follow the dialogs and install in absolute directory of ```$HOME/crosscompile/Qt5``` (copy from above)
|
||||
```
|
||||
./qt-opensource-linux-x64-5.7.1.run
|
||||
```
|
||||
### Get the Hyperion-NG source files
|
||||
```
|
||||
git clone --recursive https://github.com/hyperion-project/hyperion.ng.git "$HYPERION_DIR"
|
||||
```
|
||||
### Get required submodules for Hyperion
|
||||
```
|
||||
cd "$HYPERION_DIR"
|
||||
git fetch --recurse-submodules -j2
|
||||
```
|
||||
### Compile Hyperion-NG
|
||||
```
|
||||
cd "$HYPERION_DIR"
|
||||
chmod +x "$HYPERION_DIR/bin/"*.sh
|
||||
./bin/create_all_releases.sh
|
||||
```
|
||||
### Transfer output packages to target platform and install Hyperion-NG
|
||||
Output packages for target platform (.deb, .tar.gz, .sh) can be found here:
|
||||
```
|
||||
$HYPERION_DIR/deploy/rpi
|
||||
```
|
||||
# Install Hyperion-NG on target platform
|
||||
t.b.d.
|
||||
|
||||
|
|
@ -1,47 +1,96 @@
|
|||
// Generated config file
|
||||
|
||||
// Define to enable the dispmanx grabber
|
||||
#cmakedefine ENABLE_DISPMANX
|
||||
|
||||
// Define to enable the v4l2 grabber
|
||||
#cmakedefine ENABLE_V4L2
|
||||
|
||||
// Define to enable the framebuffer grabber
|
||||
#cmakedefine ENABLE_FB
|
||||
|
||||
// Define to enable the amlogic grabber
|
||||
// Define to enable the AMLogic grabber
|
||||
#cmakedefine ENABLE_AMLOGIC
|
||||
|
||||
// Define to enable the osx grabber
|
||||
// Define to enable the DispmanX grabber
|
||||
#cmakedefine ENABLE_DISPMANX
|
||||
|
||||
// Define to enable the DirectX grabber
|
||||
#cmakedefine ENABLE_DX
|
||||
|
||||
// Define to enable the framebuffer grabber
|
||||
// Define to enable the Audio grabber
|
||||
#cmakedefine ENABLE_AUDIO
|
||||
|
||||
// Define to enable the Framebuffer grabber
|
||||
#cmakedefine ENABLE_FB
|
||||
|
||||
// Define to enable the Media Foundation grabber
|
||||
#cmakedefine ENABLE_MF
|
||||
|
||||
// Define to enable the OSX grabber
|
||||
#cmakedefine ENABLE_OSX
|
||||
|
||||
// Define to enable the x11 grabber
|
||||
#cmakedefine ENABLE_X11
|
||||
|
||||
// Define to enable the qt grabber
|
||||
// Define to enable the Qt grabber
|
||||
#cmakedefine ENABLE_QT
|
||||
|
||||
// Define to enable the spi-device
|
||||
#cmakedefine ENABLE_SPIDEV
|
||||
// Define to enable the V4L2 grabber
|
||||
#cmakedefine ENABLE_V4L2
|
||||
|
||||
// Define to enable the ws281x-pwm-via-dma-device using jgarff's library
|
||||
#cmakedefine ENABLE_WS281XPWM
|
||||
// Define to enable the X11 grabber
|
||||
#cmakedefine ENABLE_X11
|
||||
|
||||
// Define to enable the tinkerforge device
|
||||
#cmakedefine ENABLE_TINKERFORGE
|
||||
// Define to enable the XCB grabber
|
||||
#cmakedefine ENABLE_XCB
|
||||
|
||||
// Define to enable avahi
|
||||
#cmakedefine ENABLE_AVAHI
|
||||
// Define to enable boblight server
|
||||
#cmakedefine ENABLE_BOBLIGHT_SERVER
|
||||
|
||||
// Define to enable cec
|
||||
// Define to enable CEC
|
||||
#cmakedefine ENABLE_CEC
|
||||
|
||||
// Define to enable the usb / hid devices
|
||||
#cmakedefine ENABLE_USB_HID
|
||||
// Define to enable flatbuffer server
|
||||
#cmakedefine ENABLE_FLATBUF_SERVER
|
||||
|
||||
// Define to enable protocol buffer server
|
||||
#cmakedefine ENABLE_PROTOBUF_SERVER
|
||||
|
||||
// Define to enable hyperion forwarding
|
||||
#cmakedefine ENABLE_FORWARDER
|
||||
|
||||
// Define to enable enable flatbuffer connect
|
||||
#cmakedefine ENABLE_FLATBUF_CONNECT
|
||||
|
||||
// Define to enable protocol buffer connect
|
||||
#cmakedefine ENABLE_PROTOBUF_CONNECT
|
||||
|
||||
// Define to enable the network devices
|
||||
#cmakedefine ENABLE_DEV_NETWORK
|
||||
|
||||
// Define to enable the Serial devices
|
||||
#cmakedefine ENABLE_DEV_SERIAL
|
||||
|
||||
// Define to enable the SPI devices
|
||||
#cmakedefine ENABLE_DEV_SPI
|
||||
|
||||
// Define to enable the Tinkerforge devices
|
||||
#cmakedefine ENABLE_DEV_TINKERFORGE
|
||||
|
||||
// Define to enable the USB / HID devices
|
||||
#cmakedefine ENABLE_DEV_USB_HID
|
||||
|
||||
// Define to enable the WS281x-PWM-via-DMA-device using jgarff's library
|
||||
#cmakedefine ENABLE_DEV_WS281XPWM
|
||||
|
||||
// Define to enable MDNS
|
||||
#cmakedefine ENABLE_MDNS
|
||||
|
||||
// Define to enable EFFECTENGINE
|
||||
#cmakedefine ENABLE_EFFECTENGINE
|
||||
|
||||
// Define to enable experimental features
|
||||
#cmakedefine ENABLE_EXPERIMENTAL
|
||||
|
||||
// Define to enable Hyperion remote control
|
||||
#cmakedefine ENABLE_REMOTE_CTL
|
||||
|
||||
// Define to enable profiler for development purpose
|
||||
#cmakedefine ENABLE_PROFILER
|
||||
|
||||
// Define to enable deploy dependencies to packages
|
||||
#cmakedefine ENABLE_DEPLOY_DEPENDENCIES
|
||||
|
||||
// the hyperion build id string
|
||||
#define HYPERION_BUILD_ID "${HYPERION_BUILD_ID}"
|
||||
#define HYPERION_GIT_REMOTE "${HYPERION_GIT_REMOTE}"
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
|
||||
# Installation
|
||||
This page contains general installation steps for Hyperion.
|
||||
|
||||
## Windows & macOS
|
||||
For Windows and macOS is an installation file available on our [Release page](https://github.com/hyperion-project/hyperion.ng/releases).
|
||||
|
||||
## Linux:
|
||||
On the following operating systems, Hyperion can currently be installed/updated using the method listed below:
|
||||
- Raspbian Buster/Raspberry Pi OS and later (armhf/arm64)
|
||||
- Debian Buster(10) and later (armhf/arm64/x86_64)
|
||||
- Ubuntu 20.04 and later (armhf/arm64/x86_64)
|
||||
|
||||
***
|
||||
|
||||
### Install Hyperion:
|
||||
1. Add necessary packages for the installation:
|
||||
```bash
|
||||
sudo apt-get update && sudo apt-get install wget gpg apt-transport-https lsb-release
|
||||
```
|
||||
|
||||
2. Add Hyperion’s official GPG key:
|
||||
```bash
|
||||
wget -qO- https://apt.hyperion-project.org/hyperion.pub.key | sudo gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg
|
||||
```
|
||||
|
||||
3. Add Hyperion-Project to your APT sources:
|
||||
```bash
|
||||
echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.hyperion-project.org/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hyperion.list
|
||||
```
|
||||
|
||||
4. Update your local package index and install Hyperion:
|
||||
```bash
|
||||
sudo apt-get update && sudo apt-get install hyperion
|
||||
```
|
||||
***
|
||||
|
||||
### Update Hyperion:
|
||||
```bash
|
||||
sudo apt-get install hyperion
|
||||
```
|
||||
***
|
||||
|
||||
### If you want to uninstall Hyperion, use the following commands:
|
||||
1. Remove Hyperion:
|
||||
```bash
|
||||
sudo apt-get --purge autoremove hyperion
|
||||
```
|
||||
|
||||
2. Remove the Hyperion-Project APT source from your system:
|
||||
```bash
|
||||
sudo rm /usr/share/keyrings/hyperion.pub.gpg /etc/apt/sources.list.d/hyperion.list
|
||||
```
|
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2014 hyperion team
|
||||
Copyright (c) 2014-2023 Hyperion Project
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
# Privacy Policy
|
||||
|
||||
Hyperion-Project takes your privacy seriously. To better protect your privacy we provide this privacy policy notice
|
||||
explaining the way your personal or technical information is collected and used.
|
||||
|
||||
|
||||
## Collection of Routine Information
|
||||
|
||||
This application does not collect or transmit any user's personally identifiable information.
|
||||
No personal information is used, stored, secured or disclosed by services this application works with.
|
||||
Limited technical information is sent (such as IP addresses included in the HTTP/S calls the application makes) but none of that is used or stored.
|
||||
|
||||
|
||||
## Cookies
|
||||
|
||||
Where necessary, this app uses cookies to store information about a visitor’s preferences and history
|
||||
in order to better serve the user and/or present the user with customized content.
|
||||
|
||||
|
||||
## Links to Third Party Websites
|
||||
|
||||
We have included links on this app for your use and reference. We are not responsible for the privacy policies on these websites.
|
||||
You should be aware that the privacy policies of these websites may differ from our own.
|
||||
|
||||
|
||||
## Security
|
||||
|
||||
The security of your personal information is important to us. That is the reason we do not collect any information,
|
||||
but remember that no method of transmission over the Internet, or method of electronic storage,
|
||||
is 100% secure. While we strive to use commercially acceptable means to protect your personal information,
|
||||
we cannot guarantee its absolute security.
|
||||
|
||||
|
||||
## Changes To This Privacy Policy
|
||||
|
||||
This Privacy Policy is effective as of February 2022 and will remain in effect except with respect to any changes in its provisions in the future,
|
||||
which will be in effect immediately after being posted on this page.
|
||||
|
||||
We reserve the right to update or change our Privacy Policy at any time and you should check this Privacy Policy periodically.
|
||||
If we make any material changes to this Privacy Policy, we will notify you by placing a prominent notice on our app.
|
||||
|
||||
|
||||
## Contact Information
|
||||
|
||||
For any questions or concerns regarding the privacy policy, please open up an issue on our GitHub
|
||||
https://github.com/hyperion-project/hyperion.ng
|
62
README.md
62
README.md
|
@ -1,15 +1,20 @@
|
|||
![Hyperion](https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/assets/webconfig/img/hyperion/hyperionlogo.png)
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="doc/logo_dark.png">
|
||||
<source media="(prefers-color-scheme: light)" srcset="doc/logo_light.png">
|
||||
<img alt="Hyperion" src="doc/logo_light.png">
|
||||
</picture>
|
||||
|
||||
[![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases)](https://github.com/hyperion-project/hyperion.ng/releases)
|
||||
[![Dependencies](https://img.shields.io/librariesio/github/hyperion-project/hyperion.ng.svg)](https://github.com/hyperion-project/hyperion.ng/tree/master/dependencies/external)
|
||||
[![Azure-Pipeline](https://dev.azure.com/Hyperion-Project/Hyperion.NG/_apis/build/status/Hyperion.NG?branchName=master)](https://dev.azure.com/Hyperion-Project/Hyperion.NG/_build/latest?definitionId=7&branchName=master)
|
||||
[![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases&label=Latest%20Release&logo=github&logoColor=white&color=0f83e7)](https://github.com/hyperion-project/hyperion.ng/releases)
|
||||
[![GitHub Actions](https://github.com/hyperion-project/hyperion.ng/workflows/Hyperion%20CI%20Build/badge.svg?branch=master)](https://github.com/hyperion-project/hyperion.ng/actions)
|
||||
[![LGTM](https://img.shields.io/lgtm/alerts/g/hyperion-project/hyperion.ng.svg)](https://lgtm.com/projects/g/hyperion-project/hyperion.ng/alerts/)
|
||||
[![Documentation](https://codedocs.xyz/hyperion-project/hyperion.ng.svg)](https://codedocs.xyz/hyperion-project/hyperion.ng/)
|
||||
[![CodeQL Analysis](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml/badge.svg)](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml)
|
||||
[![Forum](https://img.shields.io/website/https/hyperion-project.org.svg?label=Forum&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=homeadvisor&logoColor=white)](https://www.hyperion-project.org)
|
||||
[![Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
|
||||
[![Discord](https://img.shields.io/discord/785578322167463937?label=Discord&logo=discord&logoColor=white&color=4bc51d)](https://discord.gg/XtVTb3HEKS)
|
||||
![made-with-love](https://img.shields.io/badge/Made%20With-♥-ff0000.svg)
|
||||
|
||||
## About Hyperion
|
||||
|
||||
[Hyperion](https://github.com/hyperion-project/hyperion.ng) is an opensource [Bias or Ambient Lighting](https://en.wikipedia.org/wiki/Bias_lighting) implementation which you might know from TV manufacturers. It supports many LED devices and video grabbers. The project is still in a alpha development stage (no stable release available).
|
||||
[Hyperion](https://github.com/hyperion-project/hyperion.ng) is an opensource [Bias or Ambient Lighting](https://en.wikipedia.org/wiki/Bias_lighting) implementation which you might know from TV manufacturers. It supports many LED devices and video grabbers.
|
||||
|
||||
![Screenshot](doc/screenshot.png)
|
||||
|
||||
|
@ -20,44 +25,53 @@
|
|||
* A command line utility for testing and integration in automated environment
|
||||
* Priority channels are not coupled to a specific led data provider which means that a provider can post led data and leave without the need to maintain a connection to Hyperion. This is ideal for a remote application (like our [Android app](https://play.google.com/store/apps/details?id=nl.hyperion.hyperionpro)).
|
||||
* Black border detector and processor
|
||||
* A scriptable (Python) effect engine
|
||||
* A scriptable (Python) effect engine with 39 build-in effects for your inspiration
|
||||
* A multi language web interface to configure and remote control hyperion
|
||||
|
||||
### Supported Hardware
|
||||
|
||||
You can find a list of supported hardware [here](https://docs.hyperion-project.org/en/user/leddevices/).
|
||||
|
||||
If you need further support please open a topic at the forum!<br>
|
||||
[![Hyperion webpage/forum](https://img.shields.io/website/https/hyperion-project.org.svg?down_color=red&down_message=offline&up_color=green&up_message=online)](https://www.hyperion-project.org)
|
||||
[![Forum](https://img.shields.io/website/https/hyperion-project.org.svg?label=Forum&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=homeadvisor&logoColor=white)](https://www.hyperion-project.org)
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Feel free to join us! We are looking always for people who wants to participate.<br>
|
||||
[![Contributors](https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
|
||||
[![Contributors](https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg?label=Contributors&logo=github&logoColor=white)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
|
||||
|
||||
For an example, you can participate in the translation.<br>
|
||||
[![Join Translation](https://img.shields.io/badge/POEditor-translate-green.svg)](https://poeditor.com/join/project/Y4F6vHRFjA)
|
||||
[![Join Translation](https://img.shields.io/badge/POEditor-4bc51d.svg?label=Join%20Translation)](https://poeditor.com/join/project/Y4F6vHRFjA)
|
||||
|
||||
## Requirements
|
||||
Debian 9, Ubuntu 16.04 or higher.
|
||||
## Supported Platforms
|
||||
|
||||
We provide a macOS Build but we can not support this.
|
||||
Find here more details on [supported platforms and configuration sets](doc/development/SupportedPlatforms.md)
|
||||
|
||||
## Documentation
|
||||
Covers these topics (WorkInProgress)
|
||||
- Installation
|
||||
- Configuration
|
||||
- Effect development
|
||||
- JSON API
|
||||
Covers these topics:
|
||||
- [Installation](https://docs.hyperion-project.org/en/user/Installation.html)
|
||||
- [Configuration](https://docs.hyperion-project.org/en/user/Configuration.html)
|
||||
- [Effect development](https://docs.hyperion-project.org/en/effects/#effect-files)
|
||||
- [JSON API](https://docs.hyperion-project.org/en/json/)
|
||||
|
||||
[![Visit Documentation](https://img.shields.io/website?down_message=offline&label=Documentation%20%20&up_message=online&url=https%3A%2F%2Fdocs.hyperion-project.org)](https://docs.hyperion-project.org)
|
||||
[![Visit Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
|
||||
|
||||
## Changelog
|
||||
Released and unreleased changes at [Changelog.md](CHANGELOG.md)
|
||||
Released and unreleased changes at [CHANGELOG.md](CHANGELOG.md)
|
||||
|
||||
## Building
|
||||
See [CompileHowto](CompileHowto.md) and [CrossCompileHowto](CrossCompileHowto.md).
|
||||
See [CompileHowto.md](doc/development/CompileHowto.md).
|
||||
|
||||
## Installation
|
||||
See [Documentation](https://docs.hyperion-project.org/en/user/Installation.html) or at [Installation.md](Installation.md).
|
||||
|
||||
## Download
|
||||
Alpha releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)
|
||||
Releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)
|
||||
|
||||
## Privacy Policy
|
||||
See [PRIVACY.md](PRIVACY.md).
|
||||
|
||||
## License
|
||||
The source is released under MIT-License (see http://opensource.org/licenses/MIT).<br>
|
||||
The source is released under MIT-License (see https://opensource.org/licenses/MIT).<br>
|
||||
[![GitHub license](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/LICENSE)
|
||||
|
||||
|
|
|
@ -0,0 +1,655 @@
|
|||
#include <NeoPixelBus.h>
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////// CONFIG SECTION STARTS /////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define THIS_IS_RGBW // RGBW SK6812, otherwise comment it
|
||||
#define COLD_WHITE // for RGBW (THIS_IS_RGBW enabled) select COLD version, comment it if NEUTRAL
|
||||
|
||||
const bool skipFirstLed = false; // if set the first led in the strip will be set to black (for level shifters using sacrifice LED)
|
||||
const int serialSpeed = 2000000; // serial port speed
|
||||
#define DATA_PIN 2 // PIN: data output for LED strip
|
||||
|
||||
const bool reportStats = false; // Send back processing statistics
|
||||
const int reportStatInterval_s = 10; // Send back processing every interval in seconds
|
||||
|
||||
/* Statistics breakdown:
|
||||
FPS: Updates to the LEDs per second
|
||||
F-FPS: Frames identified per second
|
||||
S: Shown (Done) updates to the LEDs per given interval
|
||||
F: Frames identified per interval (garbled grames cannot be counted)
|
||||
G: Good frames identified per interval
|
||||
B: Total bad frames of all types identified per interval
|
||||
BF: Bad frames identified per interval
|
||||
BS: Skipped incomplete frames
|
||||
BC: Frames failing CRC check per interval
|
||||
BFL Frames failing Fletcher content validation per interval
|
||||
*/
|
||||
|
||||
//Developer configs
|
||||
#define ENABLE_STRIP
|
||||
#define ENABLE_CHECK_FLETCHER
|
||||
|
||||
const int SERIAL_SIZE_RX = 4096;
|
||||
|
||||
#ifndef ENABLE_STRIP
|
||||
const int serial2Speed = 460800;
|
||||
const bool reportInput = false;
|
||||
#endif
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////// CONFIG SECTION ENDS /////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
const String version = "8.0";
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
float whiteLimit = 1.0f;
|
||||
#ifdef COLD_WHITE
|
||||
uint8_t rCorrection = 0xA0; // adjust red -> white in 0-0xFF range
|
||||
uint8_t gCorrection = 0xA0; // adjust green -> white in 0-0xFF range
|
||||
uint8_t bCorrection = 0xA0; // adjust blue -> white in 0-0xFF range
|
||||
#else
|
||||
uint8_t rCorrection = 0xB0; // adjust red -> white in 0-0xFF range
|
||||
uint8_t gCorrection = 0xB0; // adjust green -> white in 0-0xFF range
|
||||
uint8_t bCorrection = 0x70; // adjust blue -> white in 0-0xFF range
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int ledCount = 0; // This is dynamic, don't change it
|
||||
int pixelCount = 0; // This is dynamic, don't change it
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
#define LED_TYPE NeoGrbwFeature
|
||||
#if defined(ARDUINO_LOLIN_S2_MINI)
|
||||
#define LED_METHOD NeoEsp32I2s0Sk6812Method
|
||||
#else
|
||||
#define LED_METHOD NeoEsp32I2s1Sk6812Method
|
||||
#endif
|
||||
#else
|
||||
#define LED_TYPE NeoGrbFeature
|
||||
#if defined(ARDUINO_LOLIN_S2_MINI)
|
||||
#define LED_METHOD NeoEsp32I2s0Ws2812xMethod
|
||||
#else
|
||||
#define LED_METHOD NeoEsp32I2s1Ws2812xMethod
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define LED_DRIVER NeoPixelBus<LED_TYPE, LED_METHOD>
|
||||
|
||||
uint8_t* ledBuffer;
|
||||
int ledBufferSize;
|
||||
|
||||
#ifdef ENABLE_STRIP
|
||||
LED_DRIVER* strip = NULL;
|
||||
#endif
|
||||
|
||||
enum class AwaProtocol
|
||||
{
|
||||
HEADER_A,
|
||||
HEADER_w,
|
||||
HEADER_a,
|
||||
HEADER_HI,
|
||||
HEADER_LO,
|
||||
HEADER_CRC,
|
||||
CHANNELCALIB_GAIN,
|
||||
CHANNELCALIB_RED,
|
||||
CHANNELCALIB_GREEN,
|
||||
CHANNELCALIB_BLUE,
|
||||
PIXEL,
|
||||
FLETCHER1,
|
||||
FLETCHER2,
|
||||
FLETCHER_EXT
|
||||
};
|
||||
|
||||
AwaProtocol state = AwaProtocol::HEADER_A;
|
||||
|
||||
const int headerSize = 6;
|
||||
const int trailerSize = 3;
|
||||
const int calibInfoSize = 4;
|
||||
int bytesRead = 0;
|
||||
|
||||
bool isVersion2 = false;
|
||||
bool isChannelCalib = false;
|
||||
uint8_t CRC = 0;
|
||||
int count = 0;
|
||||
int currentPixel = 0;
|
||||
uint16_t fletcher1 = 0;
|
||||
uint16_t fletcher2 = 0;
|
||||
uint16_t fletcherExt = 0;
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
RgbwColor inputColor;
|
||||
uint8_t wChannel[256];
|
||||
uint8_t rChannel[256];
|
||||
uint8_t gChannel[256];
|
||||
uint8_t bChannel[256];
|
||||
#else
|
||||
RgbColor inputColor;
|
||||
#endif
|
||||
|
||||
bool ledsComplete = false;
|
||||
|
||||
// statistics
|
||||
const int reportStatInterval_ms = reportStatInterval_s * 1000;
|
||||
unsigned long curTime;
|
||||
unsigned long stat_start = 0;
|
||||
uint16_t stat_shown = 0;
|
||||
uint16_t stat_frames = 0;
|
||||
uint16_t stat_good = 0;
|
||||
uint16_t stat_bad = 0;
|
||||
|
||||
uint16_t stat_bad_frame = 0;
|
||||
uint16_t stat_bad_skip = 0;
|
||||
uint16_t stat_bad_crc = 0;
|
||||
uint16_t stat_bad_fletcher = 0;
|
||||
|
||||
uint16_t stat_final_shown = 0;
|
||||
uint16_t stat_final_frames = 0;
|
||||
uint16_t stat_final_good = 0;
|
||||
uint16_t stat_final_bad = 0;
|
||||
|
||||
uint16_t stat_final_bad_frame = 0;
|
||||
uint16_t stat_final_bad_skip = 0;
|
||||
uint16_t stat_final_bad_crc = 0;
|
||||
uint16_t stat_final_bad_fletcher = 0;
|
||||
|
||||
//Debugging
|
||||
String inputString;
|
||||
String inputErrorString;
|
||||
String debugString;
|
||||
|
||||
void printStringHex(String string)
|
||||
{
|
||||
#ifndef ENABLE_STRIP
|
||||
Serial2.println(string.length());
|
||||
for (int i = 0; i < string.length(); ++i)
|
||||
{
|
||||
if (i % 36 == 0)
|
||||
{
|
||||
Serial2.println();
|
||||
Serial2.print("[");
|
||||
Serial2.print(i);
|
||||
Serial2.print("] ");
|
||||
}
|
||||
|
||||
if (string[i] < 16)
|
||||
Serial2.print("0");
|
||||
Serial2.print(string[i], HEX);
|
||||
Serial2.print(":");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void showMe()
|
||||
{
|
||||
#ifdef ENABLE_STRIP
|
||||
if (strip != NULL && strip->CanShow())
|
||||
{
|
||||
stat_shown++;
|
||||
strip->Show();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// statistics
|
||||
inline void showStats()
|
||||
{
|
||||
if (reportStats)
|
||||
{
|
||||
if (stat_frames > 0)
|
||||
{
|
||||
stat_final_shown = stat_shown;
|
||||
stat_final_frames = stat_frames;
|
||||
stat_final_good = stat_good;
|
||||
stat_final_bad = stat_bad;
|
||||
|
||||
stat_final_bad_frame = stat_bad_frame;
|
||||
stat_final_bad_skip = stat_bad_skip;
|
||||
stat_final_bad_crc = stat_bad_crc;
|
||||
stat_final_bad_fletcher = stat_bad_fletcher;
|
||||
}
|
||||
|
||||
stat_start = curTime;
|
||||
stat_shown = 0;
|
||||
stat_frames = 0;
|
||||
stat_good = 0;
|
||||
stat_bad = 0;
|
||||
|
||||
stat_bad_frame = 0;
|
||||
stat_bad_skip = 0;
|
||||
stat_bad_crc = 0;
|
||||
stat_bad_fletcher = 0;
|
||||
|
||||
String summary = String("FPS: ") + (stat_final_shown / reportStatInterval_s) +
|
||||
" F-FPS: " + (stat_final_frames / reportStatInterval_s) +
|
||||
" S: " + stat_final_shown +
|
||||
" F: " + stat_final_frames +
|
||||
" G: " + stat_final_good +
|
||||
" B: " + stat_final_bad +
|
||||
" (BF: " + stat_final_bad_frame +
|
||||
" BS: " + stat_final_bad_skip +
|
||||
" BC: " + stat_final_bad_crc +
|
||||
" BFL: " + stat_final_bad_fletcher +
|
||||
")";
|
||||
#ifdef ENABLE_STRIP
|
||||
Serial.println(summary);
|
||||
#else
|
||||
Serial2.println(summary);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void InitLeds(uint16_t ledCount, int pixelCount, bool channelCalibration = false)
|
||||
{
|
||||
if (ledBuffer != NULL)
|
||||
delete ledBuffer;
|
||||
|
||||
ledBufferSize = pixelCount + (channelCalibration ? calibInfoSize : 0);
|
||||
ledBuffer = new uint8_t[ledBufferSize];
|
||||
|
||||
#ifdef ENABLE_STRIP
|
||||
if (strip != NULL)
|
||||
delete strip;
|
||||
|
||||
strip = new LED_DRIVER(ledCount, DATA_PIN);
|
||||
strip->Begin();
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void processSerialData()
|
||||
{
|
||||
while (Serial.available()) {
|
||||
|
||||
char input = Serial.read();
|
||||
++bytesRead;
|
||||
|
||||
#ifndef ENABLE_STRIP
|
||||
if (reportInput)
|
||||
inputString += input;
|
||||
#endif
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case AwaProtocol::HEADER_A:
|
||||
if (input == 'A')
|
||||
{
|
||||
state = AwaProtocol::HEADER_w;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_w:
|
||||
if (input == 'w')
|
||||
state = AwaProtocol::HEADER_a;
|
||||
else
|
||||
{
|
||||
state = AwaProtocol::HEADER_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_a:
|
||||
if (input == 'a')
|
||||
{
|
||||
isVersion2 = false;
|
||||
state = AwaProtocol::HEADER_HI;
|
||||
}
|
||||
else if (input == 'A')
|
||||
{
|
||||
state = AwaProtocol::HEADER_HI;
|
||||
isVersion2 = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
state = AwaProtocol::HEADER_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_HI:
|
||||
|
||||
stat_frames++;
|
||||
|
||||
count = input << 8;
|
||||
|
||||
CRC = input;
|
||||
fletcher1 = 0;
|
||||
fletcher2 = 0;
|
||||
fletcherExt = 0;
|
||||
state = AwaProtocol::HEADER_LO;
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_LO:
|
||||
count += input + 1;
|
||||
|
||||
if (ledCount != count || isChannelCalib != isVersion2)
|
||||
{
|
||||
ledCount = count;
|
||||
isChannelCalib = isVersion2;
|
||||
pixelCount = ledCount * 3;
|
||||
|
||||
if (isChannelCalib)
|
||||
prepareCalibration();
|
||||
|
||||
InitLeds(ledCount, pixelCount, isChannelCalib);
|
||||
}
|
||||
|
||||
CRC = CRC ^ input ^ 0x55;
|
||||
|
||||
state = AwaProtocol::HEADER_CRC;
|
||||
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_CRC:
|
||||
|
||||
// Check, if incomplete package information was skipped, set bytesread to headersize and skip wrong input
|
||||
if (bytesRead != headerSize)
|
||||
{
|
||||
stat_bad_skip++;
|
||||
bytesRead = headerSize;
|
||||
}
|
||||
|
||||
currentPixel = 0;
|
||||
if (CRC == input)
|
||||
{
|
||||
state = AwaProtocol::PIXEL;
|
||||
}
|
||||
else
|
||||
{
|
||||
// CRC failure
|
||||
stat_bad++;
|
||||
stat_bad_crc++;
|
||||
|
||||
state = AwaProtocol::HEADER_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::PIXEL:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
if (currentPixel == pixelCount)
|
||||
{
|
||||
if (isChannelCalib)
|
||||
state = AwaProtocol::CHANNELCALIB_GAIN;
|
||||
else
|
||||
state = AwaProtocol::FLETCHER1;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_GAIN:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
state = AwaProtocol::CHANNELCALIB_RED;
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_RED:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
|
||||
state = AwaProtocol::CHANNELCALIB_GREEN;
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_GREEN:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
|
||||
state = AwaProtocol::CHANNELCALIB_BLUE;
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_BLUE:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
|
||||
state = AwaProtocol::FLETCHER1;
|
||||
break;
|
||||
|
||||
case AwaProtocol::FLETCHER1:
|
||||
fletcher1 = input;
|
||||
|
||||
state = AwaProtocol::FLETCHER2;
|
||||
break;
|
||||
|
||||
case AwaProtocol::FLETCHER2:
|
||||
fletcher2 = input;
|
||||
|
||||
state = AwaProtocol::FLETCHER_EXT;
|
||||
break;
|
||||
|
||||
case AwaProtocol::FLETCHER_EXT:
|
||||
fletcherExt = input;
|
||||
ledsComplete = true;
|
||||
|
||||
state = AwaProtocol::HEADER_A;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
// Init serial port
|
||||
int bufSize = Serial.setRxBufferSize(SERIAL_SIZE_RX);
|
||||
Serial.begin(serialSpeed);
|
||||
Serial.setTimeout(50);
|
||||
|
||||
#ifndef ENABLE_STRIP
|
||||
Serial2.begin(serial2Speed);
|
||||
|
||||
Serial2.println();
|
||||
Serial2.println("Welcome!");
|
||||
Serial2.println("Hyperion Awa driver " + version);
|
||||
Serial2.println("!!! Debug Output !!!");
|
||||
#endif
|
||||
|
||||
// Display config
|
||||
Serial.println();
|
||||
Serial.println("Welcome!");
|
||||
Serial.println("Hyperion Awa driver " + version);
|
||||
Serial.print("(Build: ");
|
||||
Serial.print(__DATE__);
|
||||
Serial.print(" ");
|
||||
Serial.print(__TIME__);
|
||||
Serial.println(")");
|
||||
|
||||
// first LED info
|
||||
if (skipFirstLed)
|
||||
Serial.println("First LED: disabled");
|
||||
else
|
||||
Serial.println("First LED: enabled");
|
||||
|
||||
// RGBW claibration info
|
||||
#ifdef THIS_IS_RGBW
|
||||
#ifdef COLD_WHITE
|
||||
Serial.println("Default color mode: RGBW cold");
|
||||
#else
|
||||
Serial.println("Default color mode: RGBW neutral");
|
||||
#endif
|
||||
prepareCalibration();
|
||||
#else
|
||||
Serial.println("Color mode: RGB");
|
||||
#endif
|
||||
|
||||
InitLeds(ledCount, pixelCount);
|
||||
}
|
||||
|
||||
void prepareCalibration()
|
||||
{
|
||||
#ifdef THIS_IS_RGBW
|
||||
// prepare LUT calibration table, cold white is much better than "neutral" white
|
||||
for (uint32_t i = 0; i < 256; i++)
|
||||
{
|
||||
// color calibration
|
||||
float red = rCorrection * i; // adjust red
|
||||
float green = gCorrection * i; // adjust green
|
||||
float blue = bCorrection * i; // adjust blue
|
||||
|
||||
wChannel[i] = (uint8_t)round(min(whiteLimit * i, 255.0f));
|
||||
rChannel[i] = (uint8_t)round(min(red / 0xFF, 255.0f));
|
||||
gChannel[i] = (uint8_t)round(min(green / 0xFF, 255.0f));
|
||||
bChannel[i] = (uint8_t)round(min(blue / 0xFF, 255.0f));
|
||||
}
|
||||
|
||||
Serial.write("RGBW calibration. White limit(%): ");
|
||||
Serial.print(whiteLimit * 100.0f);
|
||||
Serial.write(" %, red: ");
|
||||
Serial.print(rCorrection);
|
||||
Serial.write(" , green: ");
|
||||
Serial.print(gCorrection);
|
||||
Serial.write(" , blue: ");
|
||||
Serial.print(bCorrection);
|
||||
Serial.println();
|
||||
#endif
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
curTime = millis();
|
||||
|
||||
#ifdef __AVR__
|
||||
// nothing , USART Interrupt is implemented
|
||||
ESPserialEvent();
|
||||
#else
|
||||
// ESP8266 polling
|
||||
ESPserialEvent();
|
||||
#endif
|
||||
|
||||
if (ledsComplete)
|
||||
{
|
||||
#ifndef ENABLE_STRIP
|
||||
if (reportInput)
|
||||
{
|
||||
Serial2.println();
|
||||
Serial2.print("<input> L: ");
|
||||
printStringHex(inputString);
|
||||
Serial2.println("<\input>");
|
||||
inputString = "";
|
||||
|
||||
Serial2.print("bytesRead: ");
|
||||
Serial2.print(bytesRead);
|
||||
Serial2.print(" , currentPixel: ");
|
||||
Serial2.print(currentPixel);
|
||||
Serial2.print(" ,pixelCount: ");
|
||||
Serial2.print(pixelCount);
|
||||
Serial2.println();
|
||||
}
|
||||
#endif
|
||||
|
||||
int frameSize = headerSize + ledBufferSize + trailerSize;
|
||||
|
||||
if (bytesRead > frameSize)
|
||||
{
|
||||
//Add number of frames ignored on top of frame
|
||||
int frames = bytesRead / frameSize;
|
||||
stat_frames += frames;
|
||||
|
||||
//Count frame plus frames ignored as bad frames
|
||||
int badFrames = frames + 1;
|
||||
stat_bad += badFrames;
|
||||
stat_bad_frame += badFrames;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
#ifdef ENABLE_CHECK_FLETCHER
|
||||
//Test if content is valid
|
||||
uint16_t item = 0;
|
||||
uint16_t fletch1 = 0;
|
||||
uint16_t fletch2 = 0;
|
||||
uint16_t fletchExt = 0;
|
||||
|
||||
while (item < ledBufferSize)
|
||||
{
|
||||
fletch1 = (fletch1 + (uint16_t)ledBuffer[item]) % 255;
|
||||
fletch2 = (fletch2 + fletch1) % 255;
|
||||
fletcherExt = (fletcherExt + ((uint16_t)ledBuffer[item] ^ (item))) % 255;
|
||||
++item;
|
||||
}
|
||||
if ((fletch1 == fletcher1) && (fletch2 == fletcher2) && (ledBuffer[item-1] == (fletcherExt != 0x41) ? fletcherExt : 0xaa))
|
||||
{
|
||||
#endif
|
||||
stat_good++;
|
||||
|
||||
uint16_t startLed = 0;
|
||||
if (skipFirstLed)
|
||||
{
|
||||
#ifdef ENABLE_STRIP
|
||||
#ifdef THIS_IS_RGBW
|
||||
strip->SetPixelColor(startLed, RgbwColor(0, 0, 0, 0));
|
||||
#else
|
||||
strip->SetPixelColor(startLed, RgbColor(0, 0, 0));
|
||||
#endif
|
||||
#endif
|
||||
startLed = 1;
|
||||
}
|
||||
|
||||
for (uint16_t led = startLed; led < ledCount; ++led)
|
||||
{
|
||||
inputColor.R = ledBuffer[led * 3];
|
||||
inputColor.G = ledBuffer[led * 3 + 1];
|
||||
inputColor.B = ledBuffer[led * 3 + 2];
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
inputColor.W = min(rChannel[inputColor.R],
|
||||
min(gChannel[inputColor.G],
|
||||
bChannel[inputColor.B]));
|
||||
inputColor.R -= rChannel[inputColor.W];
|
||||
inputColor.G -= gChannel[inputColor.W];
|
||||
inputColor.B -= bChannel[inputColor.W];
|
||||
inputColor.W = wChannel[inputColor.W];
|
||||
#endif
|
||||
#ifdef ENABLE_STRIP
|
||||
strip->SetPixelColor(led, inputColor);
|
||||
#endif
|
||||
}
|
||||
|
||||
showMe();
|
||||
yield();
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
if (isChannelCalib)
|
||||
{
|
||||
uint8_t incoming_gain = ledBuffer[pixelCount];
|
||||
uint8_t incoming_red = ledBuffer[pixelCount + 1];
|
||||
uint8_t incoming_green = ledBuffer[pixelCount + 2];
|
||||
uint8_t incoming_blue = ledBuffer[pixelCount + 3];
|
||||
|
||||
float final_limit = (incoming_gain != 255) ? incoming_gain / 255.0f : 1.0f;
|
||||
if (rCorrection != incoming_red || gCorrection != incoming_green || bCorrection != incoming_blue || whiteLimit != final_limit)
|
||||
{
|
||||
rCorrection = incoming_red;
|
||||
gCorrection = incoming_green;
|
||||
bCorrection = incoming_blue;
|
||||
whiteLimit = final_limit;
|
||||
prepareCalibration();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_CHECK_FLETCHER
|
||||
}
|
||||
else
|
||||
{
|
||||
stat_bad++;
|
||||
stat_bad_fletcher++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bytesRead = 0;
|
||||
state = AwaProtocol::HEADER_A;
|
||||
|
||||
ledsComplete = false;
|
||||
}
|
||||
|
||||
if ((curTime - stat_start > reportStatInterval_ms))
|
||||
{
|
||||
if (stat_frames > 0)
|
||||
{
|
||||
showStats();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __AVR__
|
||||
void serialEvent()
|
||||
{
|
||||
processSerialData();
|
||||
}
|
||||
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
|
||||
void ESPserialEvent()
|
||||
{
|
||||
processSerialData();
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,646 @@
|
|||
#include <NeoPixelBus.h>
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////// CONFIG SECTION STARTS /////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define THIS_IS_RGBW // RGBW SK6812, otherwise comment it
|
||||
#define COLD_WHITE // for RGBW (THIS_IS_RGBW enabled) select COLD version, comment it if NEUTRAL
|
||||
|
||||
const bool skipFirstLed = false; // if set the first led in the strip will be set to black (for level shifters using sacrifice LED)
|
||||
const int serialSpeed = 2000000; // serial port speed
|
||||
|
||||
const bool reportStats = false; // Send back processing statistics
|
||||
const int reportStatInterval_s = 10; // Send back processing every interval in seconds
|
||||
|
||||
/* Statistics breakdown:
|
||||
FPS: Updates to the LEDs per second
|
||||
F-FPS: Frames identified per second
|
||||
S: Shown (Done) updates to the LEDs per given interval
|
||||
F: Frames identified per interval (garbled grames cannot be counted)
|
||||
G: Good frames identified per interval
|
||||
B: Total bad frames of all types identified per interval
|
||||
BF: Bad frames identified per interval
|
||||
BS: Skipped incomplete frames
|
||||
BC: Frames failing CRC check per interval
|
||||
BFL Frames failing Fletcher content validation per interval
|
||||
*/
|
||||
|
||||
//Developer configs
|
||||
#define ENABLE_STRIP
|
||||
#define ENABLE_CHECK_FLETCHER
|
||||
|
||||
const int SERIAL_SIZE_RX = 4096;
|
||||
|
||||
#ifndef ENABLE_STRIP
|
||||
const int serial2Speed = 460800;
|
||||
const bool reportInput = false;
|
||||
#endif
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////// CONFIG SECTION ENDS /////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
const String version = "8.0";
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
float whiteLimit = 1.0f;
|
||||
#ifdef COLD_WHITE
|
||||
uint8_t rCorrection = 0xA0; // adjust red -> white in 0-0xFF range
|
||||
uint8_t gCorrection = 0xA0; // adjust green -> white in 0-0xFF range
|
||||
uint8_t bCorrection = 0xA0; // adjust blue -> white in 0-0xFF range
|
||||
#else
|
||||
uint8_t rCorrection = 0xB0; // adjust red -> white in 0-0xFF range
|
||||
uint8_t gCorrection = 0xB0; // adjust green -> white in 0-0xFF range
|
||||
uint8_t bCorrection = 0x70; // adjust blue -> white in 0-0xFF range
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int ledCount = 0; // This is dynamic, don't change it
|
||||
int pixelCount = 0; // This is dynamic, don't change it
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
#define LED_TYPE NeoGrbwFeature
|
||||
#define LED_METHOD NeoEsp8266Uart1Sk6812Method
|
||||
#else
|
||||
#define LED_TYPE NeoGrbFeature
|
||||
#define LED_METHOD NeoEsp8266Uart1Ws2812xMethod
|
||||
#endif
|
||||
|
||||
#define LED_DRIVER NeoPixelBus<LED_TYPE, LED_METHOD>
|
||||
|
||||
uint8_t* ledBuffer;
|
||||
int ledBufferSize;
|
||||
|
||||
#ifdef ENABLE_STRIP
|
||||
LED_DRIVER* strip = NULL;
|
||||
#endif
|
||||
|
||||
enum class AwaProtocol
|
||||
{
|
||||
HEADER_A,
|
||||
HEADER_w,
|
||||
HEADER_a,
|
||||
HEADER_HI,
|
||||
HEADER_LO,
|
||||
HEADER_CRC,
|
||||
CHANNELCALIB_GAIN,
|
||||
CHANNELCALIB_RED,
|
||||
CHANNELCALIB_GREEN,
|
||||
CHANNELCALIB_BLUE,
|
||||
PIXEL,
|
||||
FLETCHER1,
|
||||
FLETCHER2,
|
||||
FLETCHER_EXT
|
||||
};
|
||||
|
||||
AwaProtocol state = AwaProtocol::HEADER_A;
|
||||
|
||||
const int headerSize = 6;
|
||||
const int trailerSize = 3;
|
||||
const int calibInfoSize = 4;
|
||||
int bytesRead = 0;
|
||||
|
||||
bool isVersion2 = false;
|
||||
bool isChannelCalib = false;
|
||||
uint8_t CRC = 0;
|
||||
int count = 0;
|
||||
int currentPixel = 0;
|
||||
uint16_t fletcher1 = 0;
|
||||
uint16_t fletcher2 = 0;
|
||||
uint16_t fletcherExt = 0;
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
RgbwColor inputColor;
|
||||
uint8_t wChannel[256];
|
||||
uint8_t rChannel[256];
|
||||
uint8_t gChannel[256];
|
||||
uint8_t bChannel[256];
|
||||
#else
|
||||
RgbColor inputColor;
|
||||
#endif
|
||||
|
||||
bool ledsComplete = false;
|
||||
|
||||
// statistics
|
||||
const int reportStatInterval_ms = reportStatInterval_s * 1000;
|
||||
unsigned long curTime;
|
||||
unsigned long stat_start = 0;
|
||||
uint16_t stat_shown = 0;
|
||||
uint16_t stat_frames = 0;
|
||||
uint16_t stat_good = 0;
|
||||
uint16_t stat_bad = 0;
|
||||
|
||||
uint16_t stat_bad_frame = 0;
|
||||
uint16_t stat_bad_skip = 0;
|
||||
uint16_t stat_bad_crc = 0;
|
||||
uint16_t stat_bad_fletcher = 0;
|
||||
|
||||
uint16_t stat_final_shown = 0;
|
||||
uint16_t stat_final_frames = 0;
|
||||
uint16_t stat_final_good = 0;
|
||||
uint16_t stat_final_bad = 0;
|
||||
|
||||
uint16_t stat_final_bad_frame = 0;
|
||||
uint16_t stat_final_bad_skip = 0;
|
||||
uint16_t stat_final_bad_crc = 0;
|
||||
uint16_t stat_final_bad_fletcher = 0;
|
||||
|
||||
//Debugging
|
||||
String inputString;
|
||||
String inputErrorString;
|
||||
String debugString;
|
||||
|
||||
void printStringHex(String string)
|
||||
{
|
||||
#ifndef ENABLE_STRIP
|
||||
Serial2.println(string.length());
|
||||
for (int i = 0; i < string.length(); ++i)
|
||||
{
|
||||
if (i % 36 == 0)
|
||||
{
|
||||
Serial2.println();
|
||||
Serial2.print("[");
|
||||
Serial2.print(i);
|
||||
Serial2.print("] ");
|
||||
}
|
||||
|
||||
if (string[i] < 16)
|
||||
Serial2.print("0");
|
||||
Serial2.print(string[i], HEX);
|
||||
Serial2.print(":");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void showMe()
|
||||
{
|
||||
#ifdef ENABLE_STRIP
|
||||
if (strip != NULL && strip->CanShow())
|
||||
{
|
||||
stat_shown++;
|
||||
strip->Show();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// statistics
|
||||
inline void showStats()
|
||||
{
|
||||
if (reportStats)
|
||||
{
|
||||
if (stat_frames > 0)
|
||||
{
|
||||
stat_final_shown = stat_shown;
|
||||
stat_final_frames = stat_frames;
|
||||
stat_final_good = stat_good;
|
||||
stat_final_bad = stat_bad;
|
||||
|
||||
stat_final_bad_frame = stat_bad_frame;
|
||||
stat_final_bad_skip = stat_bad_skip;
|
||||
stat_final_bad_crc = stat_bad_crc;
|
||||
stat_final_bad_fletcher = stat_bad_fletcher;
|
||||
}
|
||||
|
||||
stat_start = curTime;
|
||||
stat_shown = 0;
|
||||
stat_frames = 0;
|
||||
stat_good = 0;
|
||||
stat_bad = 0;
|
||||
|
||||
stat_bad_frame = 0;
|
||||
stat_bad_skip = 0;
|
||||
stat_bad_crc = 0;
|
||||
stat_bad_fletcher = 0;
|
||||
|
||||
String summary = String("FPS: ") + (stat_final_shown / reportStatInterval_s) +
|
||||
" F-FPS: " + (stat_final_frames / reportStatInterval_s) +
|
||||
" S: " + stat_final_shown +
|
||||
" F: " + stat_final_frames +
|
||||
" G: " + stat_final_good +
|
||||
" B: " + stat_final_bad +
|
||||
" (BF: " + stat_final_bad_frame +
|
||||
" BS: " + stat_final_bad_skip +
|
||||
" BC: " + stat_final_bad_crc +
|
||||
" BFL: " + stat_final_bad_fletcher +
|
||||
")";
|
||||
#ifdef ENABLE_STRIP
|
||||
Serial.println(summary);
|
||||
#else
|
||||
Serial2.println(summary);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void InitLeds(uint16_t ledCount, int pixelCount, bool channelCalibration = false)
|
||||
{
|
||||
if (ledBuffer != NULL)
|
||||
delete ledBuffer;
|
||||
|
||||
ledBufferSize = pixelCount + (channelCalibration ? calibInfoSize : 0);
|
||||
ledBuffer = new uint8_t[ledBufferSize];
|
||||
|
||||
#ifdef ENABLE_STRIP
|
||||
if (strip != NULL)
|
||||
delete strip;
|
||||
|
||||
strip = new LED_DRIVER(ledCount);
|
||||
strip->Begin();
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void processSerialData()
|
||||
{
|
||||
while (Serial.available()) {
|
||||
|
||||
char input = Serial.read();
|
||||
++bytesRead;
|
||||
|
||||
#ifndef ENABLE_STRIP
|
||||
if (reportInput)
|
||||
inputString += input;
|
||||
#endif
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case AwaProtocol::HEADER_A:
|
||||
if (input == 'A')
|
||||
{
|
||||
state = AwaProtocol::HEADER_w;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_w:
|
||||
if (input == 'w')
|
||||
state = AwaProtocol::HEADER_a;
|
||||
else
|
||||
{
|
||||
state = AwaProtocol::HEADER_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_a:
|
||||
if (input == 'a')
|
||||
{
|
||||
isVersion2 = false;
|
||||
state = AwaProtocol::HEADER_HI;
|
||||
}
|
||||
else if (input == 'A')
|
||||
{
|
||||
state = AwaProtocol::HEADER_HI;
|
||||
isVersion2 = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
state = AwaProtocol::HEADER_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_HI:
|
||||
|
||||
stat_frames++;
|
||||
|
||||
count = input << 8;
|
||||
|
||||
CRC = input;
|
||||
fletcher1 = 0;
|
||||
fletcher2 = 0;
|
||||
fletcherExt = 0;
|
||||
state = AwaProtocol::HEADER_LO;
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_LO:
|
||||
count += input + 1;
|
||||
|
||||
if (ledCount != count || isChannelCalib != isVersion2)
|
||||
{
|
||||
ledCount = count;
|
||||
isChannelCalib = isVersion2;
|
||||
pixelCount = ledCount * 3;
|
||||
|
||||
if (isChannelCalib)
|
||||
prepareCalibration();
|
||||
|
||||
InitLeds(ledCount, pixelCount, isChannelCalib);
|
||||
}
|
||||
|
||||
CRC = CRC ^ input ^ 0x55;
|
||||
|
||||
state = AwaProtocol::HEADER_CRC;
|
||||
|
||||
break;
|
||||
|
||||
case AwaProtocol::HEADER_CRC:
|
||||
|
||||
// Check, if incomplete package information was skipped, set bytesread to headersize and skip wrong input
|
||||
if (bytesRead != headerSize)
|
||||
{
|
||||
stat_bad_skip++;
|
||||
bytesRead = headerSize;
|
||||
}
|
||||
|
||||
currentPixel = 0;
|
||||
if (CRC == input)
|
||||
{
|
||||
state = AwaProtocol::PIXEL;
|
||||
}
|
||||
else
|
||||
{
|
||||
// CRC failure
|
||||
stat_bad++;
|
||||
stat_bad_crc++;
|
||||
|
||||
state = AwaProtocol::HEADER_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::PIXEL:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
if (currentPixel == pixelCount)
|
||||
{
|
||||
if (isChannelCalib)
|
||||
state = AwaProtocol::CHANNELCALIB_GAIN;
|
||||
else
|
||||
state = AwaProtocol::FLETCHER1;
|
||||
}
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_GAIN:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
state = AwaProtocol::CHANNELCALIB_RED;
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_RED:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
|
||||
state = AwaProtocol::CHANNELCALIB_GREEN;
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_GREEN:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
|
||||
state = AwaProtocol::CHANNELCALIB_BLUE;
|
||||
break;
|
||||
|
||||
case AwaProtocol::CHANNELCALIB_BLUE:
|
||||
ledBuffer[currentPixel++] = input;
|
||||
|
||||
state = AwaProtocol::FLETCHER1;
|
||||
break;
|
||||
|
||||
case AwaProtocol::FLETCHER1:
|
||||
fletcher1 = input;
|
||||
|
||||
state = AwaProtocol::FLETCHER2;
|
||||
break;
|
||||
|
||||
case AwaProtocol::FLETCHER2:
|
||||
fletcher2 = input;
|
||||
|
||||
state = AwaProtocol::FLETCHER_EXT;
|
||||
break;
|
||||
|
||||
case AwaProtocol::FLETCHER_EXT:
|
||||
fletcherExt = input;
|
||||
ledsComplete = true;
|
||||
|
||||
state = AwaProtocol::HEADER_A;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
// Init serial port
|
||||
int bufSize = Serial.setRxBufferSize(SERIAL_SIZE_RX);
|
||||
Serial.begin(serialSpeed);
|
||||
Serial.setTimeout(50);
|
||||
|
||||
#ifndef ENABLE_STRIP
|
||||
Serial2.begin(serial2Speed);
|
||||
|
||||
Serial2.println();
|
||||
Serial2.println("Welcome!");
|
||||
Serial2.println("Hyperion Awa driver " + version);
|
||||
Serial2.println("!!! Debug Output !!!");
|
||||
#endif
|
||||
|
||||
// Display config
|
||||
Serial.println();
|
||||
Serial.println("Welcome!");
|
||||
Serial.println("Hyperion Awa driver " + version);
|
||||
Serial.print("(Build: ");
|
||||
Serial.print(__DATE__);
|
||||
Serial.print(" ");
|
||||
Serial.print(__TIME__);
|
||||
Serial.println(")");
|
||||
|
||||
// first LED info
|
||||
if (skipFirstLed)
|
||||
Serial.println("First LED: disabled");
|
||||
else
|
||||
Serial.println("First LED: enabled");
|
||||
|
||||
// RGBW claibration info
|
||||
#ifdef THIS_IS_RGBW
|
||||
#ifdef COLD_WHITE
|
||||
Serial.println("Default color mode: RGBW cold");
|
||||
#else
|
||||
Serial.println("Default color mode: RGBW neutral");
|
||||
#endif
|
||||
prepareCalibration();
|
||||
#else
|
||||
Serial.println("Color mode: RGB");
|
||||
#endif
|
||||
|
||||
InitLeds(ledCount, pixelCount);
|
||||
}
|
||||
|
||||
void prepareCalibration()
|
||||
{
|
||||
#ifdef THIS_IS_RGBW
|
||||
// prepare LUT calibration table, cold white is much better than "neutral" white
|
||||
for (uint32_t i = 0; i < 256; i++)
|
||||
{
|
||||
// color calibration
|
||||
float red = rCorrection * i; // adjust red
|
||||
float green = gCorrection * i; // adjust green
|
||||
float blue = bCorrection * i; // adjust blue
|
||||
|
||||
wChannel[i] = (uint8_t)round(min(whiteLimit * i, 255.0f));
|
||||
rChannel[i] = (uint8_t)round(min(red / 0xFF, 255.0f));
|
||||
gChannel[i] = (uint8_t)round(min(green / 0xFF, 255.0f));
|
||||
bChannel[i] = (uint8_t)round(min(blue / 0xFF, 255.0f));
|
||||
}
|
||||
|
||||
Serial.write("RGBW calibration. White limit(%): ");
|
||||
Serial.print(whiteLimit * 100.0f);
|
||||
Serial.write(" %, red: ");
|
||||
Serial.print(rCorrection);
|
||||
Serial.write(" , green: ");
|
||||
Serial.print(gCorrection);
|
||||
Serial.write(" , blue: ");
|
||||
Serial.print(bCorrection);
|
||||
Serial.println();
|
||||
#endif
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
curTime = millis();
|
||||
|
||||
#ifdef __AVR__
|
||||
// nothing , USART Interrupt is implemented
|
||||
ESPserialEvent();
|
||||
#else
|
||||
// ESP8266 polling
|
||||
ESPserialEvent();
|
||||
#endif
|
||||
|
||||
if (ledsComplete)
|
||||
{
|
||||
#ifndef ENABLE_STRIP
|
||||
if (reportInput)
|
||||
{
|
||||
Serial2.println();
|
||||
Serial2.print("<input> L: ");
|
||||
printStringHex(inputString);
|
||||
Serial2.println("<\input>");
|
||||
inputString = "";
|
||||
|
||||
Serial2.print("bytesRead: ");
|
||||
Serial2.print(bytesRead);
|
||||
Serial2.print(" , currentPixel: ");
|
||||
Serial2.print(currentPixel);
|
||||
Serial2.print(" ,pixelCount: ");
|
||||
Serial2.print(pixelCount);
|
||||
Serial2.println();
|
||||
}
|
||||
#endif
|
||||
|
||||
int frameSize = headerSize + ledBufferSize + trailerSize;
|
||||
|
||||
if (bytesRead > frameSize)
|
||||
{
|
||||
//Add number of frames ignored on top of frame
|
||||
int frames = bytesRead / frameSize;
|
||||
stat_frames += frames;
|
||||
|
||||
//Count frame plus frames ignored as bad frames
|
||||
int badFrames = frames + 1;
|
||||
stat_bad += badFrames;
|
||||
stat_bad_frame += badFrames;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
#ifdef ENABLE_CHECK_FLETCHER
|
||||
//Test if content is valid
|
||||
uint16_t item = 0;
|
||||
uint16_t fletch1 = 0;
|
||||
uint16_t fletch2 = 0;
|
||||
uint16_t fletchExt = 0;
|
||||
|
||||
while (item < ledBufferSize)
|
||||
{
|
||||
fletch1 = (fletch1 + (uint16_t)ledBuffer[item]) % 255;
|
||||
fletch2 = (fletch2 + fletch1) % 255;
|
||||
fletcherExt = (fletcherExt + ((uint16_t)ledBuffer[item] ^ (item))) % 255;
|
||||
++item;
|
||||
}
|
||||
if ((fletch1 == fletcher1) && (fletch2 == fletcher2) && (ledBuffer[item-1] == (fletcherExt != 0x41) ? fletcherExt : 0xaa))
|
||||
{
|
||||
#endif
|
||||
stat_good++;
|
||||
|
||||
uint16_t startLed = 0;
|
||||
if (skipFirstLed)
|
||||
{
|
||||
#ifdef ENABLE_STRIP
|
||||
#ifdef THIS_IS_RGBW
|
||||
strip->SetPixelColor(startLed, RgbwColor(0, 0, 0, 0));
|
||||
#else
|
||||
strip->SetPixelColor(startLed, RgbColor(0, 0, 0));
|
||||
#endif
|
||||
#endif
|
||||
startLed = 1;
|
||||
}
|
||||
|
||||
for (uint16_t led = startLed; led < ledCount; ++led)
|
||||
{
|
||||
inputColor.R = ledBuffer[led * 3];
|
||||
inputColor.G = ledBuffer[led * 3 + 1];
|
||||
inputColor.B = ledBuffer[led * 3 + 2];
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
inputColor.W = min(rChannel[inputColor.R],
|
||||
min(gChannel[inputColor.G],
|
||||
bChannel[inputColor.B]));
|
||||
inputColor.R -= rChannel[inputColor.W];
|
||||
inputColor.G -= gChannel[inputColor.W];
|
||||
inputColor.B -= bChannel[inputColor.W];
|
||||
inputColor.W = wChannel[inputColor.W];
|
||||
#endif
|
||||
#ifdef ENABLE_STRIP
|
||||
strip->SetPixelColor(led, inputColor);
|
||||
#endif
|
||||
}
|
||||
|
||||
showMe();
|
||||
yield();
|
||||
|
||||
#ifdef THIS_IS_RGBW
|
||||
if (isChannelCalib)
|
||||
{
|
||||
uint8_t incoming_gain = ledBuffer[pixelCount];
|
||||
uint8_t incoming_red = ledBuffer[pixelCount + 1];
|
||||
uint8_t incoming_green = ledBuffer[pixelCount + 2];
|
||||
uint8_t incoming_blue = ledBuffer[pixelCount + 3];
|
||||
|
||||
float final_limit = (incoming_gain != 255) ? incoming_gain / 255.0f : 1.0f;
|
||||
if (rCorrection != incoming_red || gCorrection != incoming_green || bCorrection != incoming_blue || whiteLimit != final_limit)
|
||||
{
|
||||
rCorrection = incoming_red;
|
||||
gCorrection = incoming_green;
|
||||
bCorrection = incoming_blue;
|
||||
whiteLimit = final_limit;
|
||||
prepareCalibration();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_CHECK_FLETCHER
|
||||
}
|
||||
else
|
||||
{
|
||||
stat_bad++;
|
||||
stat_bad_fletcher++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bytesRead = 0;
|
||||
state = AwaProtocol::HEADER_A;
|
||||
|
||||
ledsComplete = false;
|
||||
}
|
||||
|
||||
if ((curTime - stat_start > reportStatInterval_ms))
|
||||
{
|
||||
if (stat_frames > 0)
|
||||
{
|
||||
showStats();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __AVR__
|
||||
void serialEvent()
|
||||
{
|
||||
processSerialData();
|
||||
}
|
||||
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
|
||||
void ESPserialEvent()
|
||||
{
|
||||
processSerialData();
|
||||
}
|
||||
#endif
|
|
@ -139,7 +139,7 @@ void setup() {
|
|||
}
|
||||
|
||||
int ledCount = MAX_LEDS;
|
||||
if (ANALOG_MODE == ANALOG_MODE_LAST_LED) {
|
||||
if (ANALOG_OUTPUT_ENABLED == true && ANALOG_MODE == ANALOG_MODE_LAST_LED) {
|
||||
ledCount--;
|
||||
}
|
||||
|
||||
|
@ -170,7 +170,7 @@ void setup() {
|
|||
showColor(CRGB(0, 0, 0));
|
||||
|
||||
Serial.print("Ada\n"); // Send "Magic Word" string to host
|
||||
|
||||
Serial.println("Ada: LED num: " + String(FastLED.size())); //Return number of LEDs configured
|
||||
|
||||
boolean transmissionSuccess;
|
||||
unsigned long sum_r, sum_g, sum_b;
|
||||
|
@ -254,4 +254,3 @@ void setup() {
|
|||
void loop() {
|
||||
// Not used. See note in setup() function.
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ import socket
|
|||
import serial
|
||||
import serial.threaded
|
||||
|
||||
from __future__ import division
|
||||
|
||||
class SerialToNet(serial.threaded.Protocol):
|
||||
"""serial->socket"""
|
||||
|
@ -137,7 +138,7 @@ to this service over the network.
|
|||
sys.stderr.write(
|
||||
'--- UDP to Serial redirector\n'
|
||||
'--- listening on udp port {a.localport}\n'
|
||||
'--- sending to {p.name} {p.baudrate},{p.bytesize}{p.parity}{p.stopbits}\n'
|
||||
'--- sending to {p.name} {p.baudrate},{p.bytesize}{p.parity}{p.stopbits}\n'
|
||||
'--- type Ctrl-C / BREAK to quit\n'.format(p=ser, a=args))
|
||||
|
||||
try:
|
||||
|
@ -152,10 +153,9 @@ to this service over the network.
|
|||
|
||||
srv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
srv.bind(('', args.localport))
|
||||
srv.bind(('0.0.0.0', args.localport))
|
||||
|
||||
try:
|
||||
intentional_exit = False
|
||||
while True:
|
||||
try:
|
||||
while True:
|
||||
|
@ -164,14 +164,14 @@ to this service over the network.
|
|||
if not data:
|
||||
break
|
||||
|
||||
if args.ada:
|
||||
numleds = len(data)/3
|
||||
hi = (numleds-1)/256
|
||||
lo = (numleds-1)&255
|
||||
sum = hi^lo^0x55
|
||||
ser.write ("Ada"+ chr(hi) + chr(lo) + chr(sum))
|
||||
if args.ada:
|
||||
numleds = len(data)/3
|
||||
hi = (numleds-1)/256
|
||||
lo = (numleds-1)&255
|
||||
sum = hi^lo^0x55
|
||||
ser.write ("Ada"+ chr(hi) + chr(lo) + chr(sum))
|
||||
|
||||
ser.write(data) # get a bunch of bytes and send them
|
||||
ser.write(data) # get a bunch of bytes and send them
|
||||
except socket.error as msg:
|
||||
if args.develop:
|
||||
raise
|
||||
|
@ -179,7 +179,7 @@ to this service over the network.
|
|||
# probably got disconnected
|
||||
break
|
||||
except KeyboardInterrupt:
|
||||
intentional_exit = True
|
||||
# intentional_exit
|
||||
raise
|
||||
except socket.error as msg:
|
||||
if args.develop:
|
||||
|
@ -189,6 +189,7 @@ to this service over the network.
|
|||
ser_to_net.socket = None
|
||||
sys.stderr.write('Disconnected\n')
|
||||
except KeyboardInterrupt:
|
||||
# do not handle exceptions
|
||||
pass
|
||||
|
||||
sys.stderr.write('\n--- exit ---\n')
|
||||
|
|
|
@ -0,0 +1,354 @@
|
|||
// AtmoOrb by Lightning303 & Rick164, Additions by Lord-Grey
|
||||
//
|
||||
// ESP8266 Standalone Version
|
||||
//
|
||||
//
|
||||
// You may change the settings that are commented
|
||||
|
||||
#define FASTLED_ALLOW_INTERRUPTS 0
|
||||
// To make sure that all leds get changed 100% of the time, we need to allow FastLED to disabled interrupts for a short while.
|
||||
// If you experience problems, please set this value to 1.
|
||||
// This is only needed for 3 wire (1 data line + Vcc and GND) chips (e.g. WS2812B). If you are using WS2801, APA102 or similar chipsets, you can set the value back to 1.
|
||||
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <WiFiUdp.h>
|
||||
#include <FastLED.h>
|
||||
|
||||
#define NUM_LEDS 24 // Number of leds
|
||||
#define DATA_PIN D7 // Data pin for leds (the default pin 7 might correspond to pin 13 on some boards)
|
||||
#define SERIAL_DEBUG 0 // Serial debugging (0=Off, 1=On)
|
||||
|
||||
#define ID 1 // Id of this lamp
|
||||
|
||||
// Smoothing
|
||||
#define SMOOTH_STEPS 20 // Steps to take for smoothing colors
|
||||
#define SMOOTH_DELAY 10 // Delay between smoothing steps
|
||||
#define SMOOTH_BLOCK 0 // Block incoming colors while smoothing
|
||||
|
||||
// Startup color
|
||||
#define STARTUP_RED 255 // Color shown directly after power on
|
||||
#define STARTUP_GREEN 175 // Color shown directly after power on
|
||||
#define STARTUP_BLUE 100 // Color shown directly after power on
|
||||
|
||||
// White adjustment
|
||||
#define RED_CORRECTION 220 // Color Correction
|
||||
#define GREEN_CORRECTION 255 // Color Correction
|
||||
#define BLUE_CORRECTION 180 // Color Correction
|
||||
|
||||
// RC Switch
|
||||
#define RC_SWITCH 0 // RF transmitter to swtich remote controlled power sockets (0=Off, 1=On)
|
||||
#if RC_SWITCH == 1
|
||||
#include <RCSwitch.h>
|
||||
#define RC_PIN 2 // Data pin for RF transmitter
|
||||
#define RC_SLEEP_DELAY 900000 // Delay until RF transmitter send signals
|
||||
char* rcCode0 = "10001"; // First part of the transmission code
|
||||
char* rcCode1 = "00010"; // Second part of the transmission code
|
||||
RCSwitch mySwitch = RCSwitch();
|
||||
boolean remoteControlled = false;
|
||||
#endif
|
||||
|
||||
// Network settings
|
||||
const char* ssid = "***"; // WiFi SSID
|
||||
const char* password = "***"; // WiFi password
|
||||
|
||||
const IPAddress multicastIP(239,255,255,250); // Multicast IP address
|
||||
const int multicastPort = 49692; // Multicast port number
|
||||
IPAddress ip_null(0,0,0,0);
|
||||
IPAddress local_IP(0,0,0,0);
|
||||
WiFiUDP Udp;
|
||||
|
||||
int timeout = 20000; // wait 20 sec for successfull login
|
||||
boolean is_connect = false; // ... not yet connected
|
||||
|
||||
CRGB leds[NUM_LEDS];
|
||||
|
||||
byte nextColor[3];
|
||||
byte prevColor[3];
|
||||
byte currentColor[3];
|
||||
byte smoothStep = SMOOTH_STEPS;
|
||||
unsigned long smoothMillis;
|
||||
|
||||
void setColor(byte red, byte green, byte blue);
|
||||
void setSmoothColor(byte red, byte green, byte blue);
|
||||
void smoothColor();
|
||||
void clearSmoothColors();
|
||||
|
||||
void setup()
|
||||
{
|
||||
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
|
||||
//FastLED.setCorrection(TypicalSMD5050);
|
||||
FastLED.setCorrection(CRGB(RED_CORRECTION, GREEN_CORRECTION, BLUE_CORRECTION));
|
||||
FastLED.showColor(CRGB(STARTUP_RED, STARTUP_GREEN, STARTUP_BLUE));
|
||||
|
||||
#if RC_SWITCH == 1
|
||||
mySwitch.enableTransmit(RC_PIN);
|
||||
#endif
|
||||
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.begin(115200);
|
||||
#endif
|
||||
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.printf("Connecting to %s ", ssid);
|
||||
#endif
|
||||
|
||||
// .... wait for WiFi gets valid !!!
|
||||
unsigned long tick = millis(); // get start-time for login
|
||||
WiFi.begin(ssid, password);
|
||||
while ( (!is_connect) && ((millis() - tick) < timeout) )
|
||||
{
|
||||
yield(); // ... for safety
|
||||
is_connect = WiFi.status(); // connected ?
|
||||
if (!is_connect) // only if not yet connected !
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print("."); // print a dot while waiting
|
||||
#endif
|
||||
delay(50);
|
||||
}
|
||||
}
|
||||
|
||||
if (is_connect)
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print("after ");
|
||||
Serial.print(millis() - tick);
|
||||
Serial.println(" ms");
|
||||
#endif
|
||||
// .... wait for local_IP becomes valid !!!
|
||||
is_connect = false;
|
||||
tick = millis(); // get start-time for login
|
||||
while ( (!is_connect) && ((millis() - tick) < timeout) )
|
||||
{
|
||||
yield(); // ... for safety
|
||||
local_IP = WiFi.localIP();
|
||||
is_connect = local_IP != ip_null; // connected ?
|
||||
if (!is_connect) // only if not yet connected !
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print("."); // print a dot while waiting
|
||||
#endif
|
||||
delay(50);
|
||||
}
|
||||
}
|
||||
if (is_connect)
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print("local_IP valid after ");
|
||||
Serial.print(millis() - tick);
|
||||
Serial.println(" ms");
|
||||
Serial.println("");
|
||||
Serial.print(F("Connected to "));
|
||||
Serial.println(ssid);
|
||||
#endif
|
||||
|
||||
// ... now start UDP and check the result:
|
||||
is_connect = Udp.beginMulticast(local_IP, multicastIP, multicastPort);
|
||||
if (is_connect)
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print("Listening to Multicast at ");
|
||||
Serial.print(multicastIP);
|
||||
Serial.println(":" + String(multicastPort));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.println(" - ERROR beginMulticast !");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.println("local_IP invalid after timeout !");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.println("- invalid after timeout !");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
if (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
Serial.print(F("Lost connection to "));
|
||||
Serial.print(ssid);
|
||||
Serial.println(F("."));
|
||||
Serial.println(F("Trying to reconnect."));
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
delay(500);
|
||||
Serial.print(F("."));
|
||||
}
|
||||
Serial.println("");
|
||||
Serial.println(F("Reconnected."));
|
||||
}
|
||||
#endif
|
||||
if (Udp.parsePacket())
|
||||
{
|
||||
byte len = Udp.available();
|
||||
byte rcvd[len];
|
||||
Udp.read(rcvd, len);
|
||||
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("UDP Packet from "));
|
||||
Serial.print(Udp.remoteIP());
|
||||
Serial.print(F(":"));
|
||||
Serial.print(Udp.remotePort());
|
||||
Serial.print(F(" to "));
|
||||
Serial.println(Udp.destinationIP());
|
||||
for (byte i = 0; i < len; i++)
|
||||
{
|
||||
Serial.print(rcvd[i]);
|
||||
Serial.print(F(" "));
|
||||
}
|
||||
Serial.println("");
|
||||
#endif
|
||||
if (len >= 8 && rcvd[0] == 0xC0 && rcvd[1] == 0xFF && rcvd[2] == 0xEE && (rcvd[4] == ID || rcvd[4] == 0))
|
||||
{
|
||||
switch (rcvd[3])
|
||||
{
|
||||
case 1:
|
||||
smoothStep = SMOOTH_STEPS;
|
||||
forceLedsOFF();
|
||||
break;
|
||||
case 2:
|
||||
default:
|
||||
setSmoothColor(rcvd[5], rcvd[6], rcvd[7]);
|
||||
break;
|
||||
case 4:
|
||||
setColor(rcvd[5], rcvd[6], rcvd[7]);
|
||||
smoothStep = SMOOTH_STEPS;
|
||||
break;
|
||||
case 8:
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("Announce myself. OrbID: "));
|
||||
Serial.println(ID);
|
||||
#endif
|
||||
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
|
||||
Udp.write(ID);
|
||||
Udp.endPacket();
|
||||
break;
|
||||
case 9:
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("Identify myself. OrbID: "));
|
||||
Serial.println(ID);
|
||||
#endif
|
||||
identify();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (smoothStep < SMOOTH_STEPS && millis() >= (smoothMillis + (SMOOTH_DELAY * (smoothStep + 1))))
|
||||
{
|
||||
smoothColor();
|
||||
}
|
||||
#if RC_SWITCH == 1
|
||||
if (remoteControlled && currentColor[0] == 0 && currentColor[1] == 0 && currentColor[2] == 0 && millis() >= smoothMillis + RC_SLEEP_DELAY)
|
||||
{
|
||||
// Send this signal only once every seconds
|
||||
smoothMillis += 1000;
|
||||
mySwitch.switchOff(rcCode0, rcCode1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Display color on leds
|
||||
void setColor(byte red, byte green, byte blue)
|
||||
{
|
||||
// Is the new color already active?
|
||||
if (currentColor[0] == red && currentColor[1] == green && currentColor[2] == blue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
currentColor[0] = red;
|
||||
currentColor[1] = green;
|
||||
currentColor[2] = blue;
|
||||
|
||||
FastLED.showColor(CRGB(red, green, blue));
|
||||
}
|
||||
|
||||
// Set a new color to smooth to
|
||||
void setSmoothColor(byte red, byte green, byte blue)
|
||||
{
|
||||
if (smoothStep == SMOOTH_STEPS || SMOOTH_BLOCK == 0)
|
||||
{
|
||||
// Is the new color the same as the one we already are smoothing towards?
|
||||
// If so dont do anything.
|
||||
if (nextColor[0] == red && nextColor[1] == green && nextColor[2] == blue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// Is the new color the same as we have right now?
|
||||
// If so stop smoothing and keep the current color.
|
||||
else if (currentColor[0] == red && currentColor[1] == green && currentColor[2] == blue)
|
||||
{
|
||||
smoothStep = SMOOTH_STEPS;
|
||||
return;
|
||||
}
|
||||
|
||||
prevColor[0] = currentColor[0];
|
||||
prevColor[1] = currentColor[1];
|
||||
prevColor[2] = currentColor[2];
|
||||
|
||||
nextColor[0] = red;
|
||||
nextColor[1] = green;
|
||||
nextColor[2] = blue;
|
||||
|
||||
smoothMillis = millis();
|
||||
smoothStep = 0;
|
||||
|
||||
#if RC_SWITCH == 1
|
||||
if (!remoteControlled)
|
||||
{
|
||||
remoteControlled = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
// Display one step to the next color
|
||||
void smoothColor()
|
||||
{
|
||||
smoothStep++;
|
||||
|
||||
byte red = prevColor[0] + (((nextColor[0] - prevColor[0]) * smoothStep) / SMOOTH_STEPS);
|
||||
byte green = prevColor[1] + (((nextColor[1] - prevColor[1]) * smoothStep) / SMOOTH_STEPS);
|
||||
byte blue = prevColor[2] + (((nextColor[2] - prevColor[2]) * smoothStep) / SMOOTH_STEPS);
|
||||
|
||||
setColor(red, green, blue);
|
||||
}
|
||||
|
||||
// Force all leds OFF
|
||||
void forceLedsOFF()
|
||||
{
|
||||
setColor(0,0,0);
|
||||
clearSmoothColors();
|
||||
}
|
||||
|
||||
// Clear smooth color byte arrays
|
||||
void clearSmoothColors()
|
||||
{
|
||||
memset(prevColor, 0, sizeof(prevColor));
|
||||
memset(currentColor, 0, sizeof(nextColor));
|
||||
memset(nextColor, 0, sizeof(nextColor));
|
||||
}
|
||||
|
||||
void identify()
|
||||
{
|
||||
for (byte i = 0; i < 3; i++)
|
||||
{
|
||||
FastLED.showColor(CRGB::LemonChiffon);
|
||||
delay(500);
|
||||
FastLED.showColor(CRGB::Black);
|
||||
delay(500);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,313 @@
|
|||
#include <FastLED.h>
|
||||
FASTLED_USING_NAMESPACE;
|
||||
|
||||
SYSTEM_THREAD(ENABLED);
|
||||
|
||||
#if FASTLED_VERSION < 3001000
|
||||
#error "Requires FastLED 3.1 or later; check github for latest code."
|
||||
#endif
|
||||
|
||||
// WiFi
|
||||
#define timeout 30000
|
||||
#define reconnect_delay 5000
|
||||
|
||||
// UDP
|
||||
#define SERVER_PORT 49692
|
||||
#define DISCOVERY_PORT 49692
|
||||
UDP client;
|
||||
IPAddress multicastIP(239, 15, 18, 2);
|
||||
|
||||
// ORB
|
||||
unsigned int orbID = 1;
|
||||
|
||||
#define SERIAL_DEBUG 0 // Serial debugging (0=Off, 1=On)
|
||||
|
||||
// LED
|
||||
#define DATA_PIN 6
|
||||
#define NUM_LEDS 24
|
||||
CRGB leds[NUM_LEDS];
|
||||
|
||||
// UDP
|
||||
#define BUFFER_SIZE 8 // 5 + 3 channels for 1 LED
|
||||
#define BUFFER_SIZE_DISCOVERY 5
|
||||
#define TIMEOUT_MS 500
|
||||
uint8_t buffer[BUFFER_SIZE];
|
||||
uint8_t bufferDiscovery[BUFFER_SIZE_DISCOVERY];
|
||||
unsigned long lastWiFiCheck = 0;
|
||||
|
||||
// SMOOTHING
|
||||
#define SMOOTH_STEPS 50 // Steps to take for smoothing colors
|
||||
#define SMOOTH_DELAY 4 // Delay between smoothing steps
|
||||
#define SMOOTH_BLOCK 0 // Block incoming colors while smoothing
|
||||
|
||||
byte nextColor[3];
|
||||
byte prevColor[3];
|
||||
byte currentColor[3];
|
||||
byte smoothStep = SMOOTH_STEPS;
|
||||
unsigned long smoothMillis;
|
||||
|
||||
// CUSTOM COLOR CORRECTIONS
|
||||
#define RED_CORRECTION 255
|
||||
#define GREEN_CORRECTION 255
|
||||
#define BLUE_CORRECTION 255
|
||||
#include "Particle.h"
|
||||
|
||||
void setup()
|
||||
{
|
||||
// Leds - choose one correction method
|
||||
// 1 - Custom color correction
|
||||
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS).setCorrection(CRGB(RED_CORRECTION, GREEN_CORRECTION, BLUE_CORRECTION));
|
||||
|
||||
// Set color
|
||||
//setColor(40, 21, 0);
|
||||
|
||||
// Uncomment the below lines to dim the single built-in led to 2%
|
||||
::RGB.control(true);
|
||||
::RGB.brightness(2);
|
||||
::RGB.control(false);
|
||||
|
||||
// WiFi
|
||||
lastWiFiCheck = millis();
|
||||
initWiFi();
|
||||
|
||||
// 2 - FastLED predefined color correction
|
||||
//FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS).setCorrection(TypicalSMD5050);
|
||||
}
|
||||
|
||||
void initWiFi()
|
||||
{
|
||||
// Delays added UDP client creation, required for WiFi reconnects as takes a bit for resources to be full available
|
||||
|
||||
// Wait for WiFi connection
|
||||
delay(500);
|
||||
waitFor(WiFi.ready, timeout);
|
||||
delay(reconnect_delay);
|
||||
|
||||
// Multicast UDP
|
||||
if(WiFi.ready())
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.println("");
|
||||
Serial.print(F("Connected to "));
|
||||
Serial.println(WiFi.SSID());
|
||||
Serial.print(F("IP address: "));
|
||||
Serial.println(WiFi.localIP());
|
||||
#endif
|
||||
|
||||
client.begin(SERVER_PORT);
|
||||
delay(reconnect_delay);
|
||||
client.joinMulticast(multicastIP);
|
||||
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("Listening to Multicast at "));
|
||||
Serial.print(multicastIP);
|
||||
Serial.print(F(":"));
|
||||
Serial.println(SERVER_PORT);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void loop(){
|
||||
if (Network.listening())
|
||||
{
|
||||
// If we are in listening mode (blinking dark blue), don't
|
||||
// output by USB serial, because it can conflict with
|
||||
// serial commands.
|
||||
return;
|
||||
}
|
||||
|
||||
if(WiFi.ready() == false) {
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("Lost connection to "));
|
||||
Serial.print(WiFi.SSID());
|
||||
Serial.println(F("."));
|
||||
Serial.println(F("Trying to reconnect."));
|
||||
#endif
|
||||
|
||||
initWiFi();
|
||||
}
|
||||
|
||||
int packetSize = client.parsePacket();
|
||||
|
||||
if(packetSize == BUFFER_SIZE){
|
||||
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("Packet size: "));
|
||||
Serial.println(packetSize);
|
||||
#endif
|
||||
client.read(buffer, BUFFER_SIZE);
|
||||
//client.flush();
|
||||
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("UDP Packet from "));
|
||||
Serial.println(client.remoteIP());
|
||||
for (int i = 0; i < BUFFER_SIZE; i++)
|
||||
{
|
||||
Serial.print(buffer[i]);
|
||||
Serial.print(F(" "));
|
||||
}
|
||||
Serial.println("");
|
||||
#endif
|
||||
unsigned int i = 0;
|
||||
|
||||
// Look for 0xC0FFEE
|
||||
if(buffer[i++] == 0xC0 && buffer[i++] == 0xFF && buffer[i++] == 0xEE)
|
||||
{
|
||||
byte commandOptions = buffer[i++];
|
||||
byte rcvOrbID = buffer[i++];
|
||||
|
||||
byte red = buffer[i++];
|
||||
byte green = buffer[i++];
|
||||
byte blue = buffer[i++];
|
||||
|
||||
// Command options
|
||||
// 1 = force off
|
||||
// 2 = use lamp smoothing and validate by Orb ID
|
||||
// 4 = validate by Orb ID
|
||||
// 8 = discovery
|
||||
// 9 = light-up Orb to identify by Orb ID
|
||||
if(commandOptions == 1)
|
||||
{
|
||||
// Orb ID 0 = turn off all lights
|
||||
// Otherwise turn off selectively
|
||||
if(rcvOrbID == 0 || rcvOrbID == orbID)
|
||||
{
|
||||
smoothStep = SMOOTH_STEPS;
|
||||
forceLedsOFF();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if(commandOptions == 2)
|
||||
{
|
||||
if(rcvOrbID != orbID)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
setSmoothColor(red, green, blue);
|
||||
}
|
||||
else if(commandOptions == 4)
|
||||
{
|
||||
if(rcvOrbID != orbID)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
smoothStep = SMOOTH_STEPS;
|
||||
setColor(red, green, blue);
|
||||
setSmoothColor(red, green, blue);
|
||||
|
||||
return;
|
||||
}
|
||||
else if(commandOptions == 8)
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("Announce myself. OrbID: "));
|
||||
Serial.println(orbID);
|
||||
#endif
|
||||
// Respond to remote IP address with Orb ID
|
||||
IPAddress remoteIP = client.remoteIP();
|
||||
bufferDiscovery[0] = orbID;
|
||||
|
||||
client.sendPacket(bufferDiscovery, BUFFER_SIZE_DISCOVERY, remoteIP, DISCOVERY_PORT);
|
||||
|
||||
// Clear buffer
|
||||
memset(bufferDiscovery, 0, sizeof(bufferDiscovery));
|
||||
return;
|
||||
}
|
||||
else if(commandOptions == 9)
|
||||
{
|
||||
if(rcvOrbID == 0 || rcvOrbID == orbID)
|
||||
{
|
||||
#if SERIAL_DEBUG == 1
|
||||
Serial.print(F("Identify myself. OrbID: "));
|
||||
Serial.println(orbID);
|
||||
#endif
|
||||
identify();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}else if(packetSize > 0){
|
||||
// Got malformed packet
|
||||
}
|
||||
|
||||
if (smoothStep < SMOOTH_STEPS && millis() >= (smoothMillis + (SMOOTH_DELAY * (smoothStep + 1))))
|
||||
{
|
||||
smoothColor();
|
||||
}
|
||||
}
|
||||
|
||||
// Set color
|
||||
void setColor(byte red, byte green, byte blue)
|
||||
{
|
||||
for (byte i = 0; i < NUM_LEDS; i++)
|
||||
{
|
||||
leds[i] = CRGB(red, green, blue);
|
||||
}
|
||||
|
||||
FastLED.show();
|
||||
}
|
||||
|
||||
|
||||
// Set a new color to smooth to
|
||||
void setSmoothColor(byte red, byte green, byte blue)
|
||||
{
|
||||
if (smoothStep == SMOOTH_STEPS || SMOOTH_BLOCK == 0)
|
||||
{
|
||||
if (nextColor[0] == red && nextColor[1] == green && nextColor[2] == blue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
prevColor[0] = currentColor[0];
|
||||
prevColor[1] = currentColor[1];
|
||||
prevColor[2] = currentColor[2];
|
||||
|
||||
nextColor[0] = red;
|
||||
nextColor[1] = green;
|
||||
nextColor[2] = blue;
|
||||
|
||||
smoothMillis = millis();
|
||||
smoothStep = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Display one step to the next color
|
||||
void smoothColor()
|
||||
{
|
||||
smoothStep++;
|
||||
currentColor[0] = prevColor[0] + (((nextColor[0] - prevColor[0]) * smoothStep) / SMOOTH_STEPS);
|
||||
currentColor[1] = prevColor[1] + (((nextColor[1] - prevColor[1]) * smoothStep) / SMOOTH_STEPS);
|
||||
currentColor[2] = prevColor[2] + (((nextColor[2] - prevColor[2]) * smoothStep) / SMOOTH_STEPS);
|
||||
|
||||
setColor(currentColor[0], currentColor[1], currentColor[2]);
|
||||
}
|
||||
|
||||
// Force all leds OFF
|
||||
void forceLedsOFF()
|
||||
{
|
||||
setColor(0,0,0);
|
||||
clearSmoothColors();
|
||||
}
|
||||
|
||||
// Clear smooth color byte arrays
|
||||
void clearSmoothColors()
|
||||
{
|
||||
memset(prevColor, 0, sizeof(prevColor));
|
||||
memset(currentColor, 0, sizeof(nextColor));
|
||||
memset(nextColor, 0, sizeof(nextColor));
|
||||
}
|
||||
|
||||
void identify()
|
||||
{
|
||||
for (byte i = 0; i < 3; i++)
|
||||
{
|
||||
FastLED.showColor(CRGB::LemonChiffon);
|
||||
delay(500);
|
||||
FastLED.showColor(CRGB::Black);
|
||||
delay(500);
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 32 KiB |
|
@ -1,89 +1,75 @@
|
|||
<div class="container-fluid">
|
||||
<h3 class="page-header"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="main_menu_about_token">About
|
||||
Hyperion</span></h3>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div id="about_cont"></div>
|
||||
<h3 class="page-header">
|
||||
<i class="fa fa-info-circle fa-fw"></i><span data-i18n="main_menu_about_token">
|
||||
About
|
||||
Hyperion
|
||||
</span>
|
||||
</h3>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div id="about_cont"></div>
|
||||
|
||||
</div>
|
||||
<div id="danger_act" class="col-lg-6" style="display:none;padding-top:20px">
|
||||
<h4>You found a hidden service menu!</h4>
|
||||
<button id="reset_cache" class="btn btn-danger">Reset Browser Cache</button>
|
||||
<button id="hyp_restart" class="btn btn-danger">Force Hyperion Restart</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="danger_act" class="col-lg-6" style="display:none;padding-top:20px">
|
||||
<h4>You found a hidden service menu!</h4>
|
||||
<button id="reset_cache" class="btn btn-danger">Reset Browser Cache</button>
|
||||
<button id="hyp_restart" class="btn btn-danger">Force Hyperion Restart</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
performTranslation();
|
||||
performTranslation();
|
||||
|
||||
var si = sysInfo.hyperion;
|
||||
var libs = { "Bootstrap 3": "http://getbootstrap.com/", "JQuery": "https://jquery.com/", "Bootstrap Colorpicker": "https://itsjavi.com/bootstrap-colorpicker/", "Bootstrap Toggle": "https://www.bootstraptoggle.com/", "Bootstrap Select": "https://developer.snapappointments.com/bootstrap-select/", "JSON-Editor": "http://jeremydorn.com/json-editor/", "jQuery.i18n": "https://github.com/wikimedia/jquery.i18n", "metisMenu": "http://mm.onokumus.com/index.html", "download.js": "http://danml.com/download.html", "gijgo": "http://gijgo.com/" };
|
||||
var libh = "";
|
||||
var lang = [];
|
||||
var dcount = 0;
|
||||
var si = window.sysInfo.hyperion;
|
||||
var libs = { "Bootstrap 3": "https://getbootstrap.com/", "JQuery": "https://jquery.com/", "Bootstrap Colorpicker": "https://itsjavi.com/bootstrap-colorpicker/", "Bootstrap Toggle": "https://www.bootstraptoggle.com/", "Bootstrap Select": "https://developer.snapappointments.com/bootstrap-select/", "JSON-Editor": "https://www.jeremydorn.com/json-editor", "jQuery.i18n": "https://github.com/wikimedia/jquery.i18n", "metisMenu": "https://mm.onokumus.com/index.html", "download.js": "https://github.com/rndme/download", "Gijgo": "https://gijgo.com/", "DOMPurify" : "https://github.com/cure53/DOMPurify", "Marked": "https://github.com/markedjs/marked", "PlainDraggable": "https://github.com/anseki/plain-draggable", "LeaderLine": "https://github.com/anseki/leader-line", "Animate.css": "https://github.com/animate-css/animate.css"};
|
||||
var libh = "";
|
||||
var lang = [];
|
||||
var dcount = 0;
|
||||
|
||||
for (var i = 0; i < availLang.length; i++)
|
||||
lang.push($.i18n('general_speech_' + availLang[i]));
|
||||
for (key in libs)
|
||||
libh += '<a href="' + libs[key] + '" target="_blank">' + key + '</a>, ';
|
||||
libh += "<br/>" + $.i18n("about_credits");
|
||||
lang = lang.toString().replace(/,/g, ", ");
|
||||
for (var i = 0; i < availLang.length; i++)
|
||||
lang.push($.i18n('general_speech_' + availLang[i]));
|
||||
lang.sort();
|
||||
for (key in libs)
|
||||
libh += '<a href="' + libs[key] + '" target="_blank">' + key + '</a>, ';
|
||||
libh += "<br/>" + $.i18n("about_credits");
|
||||
lang = lang.toString().replace(/,/g, ", ");
|
||||
|
||||
// Github Issue bugreport infos
|
||||
var sys = window.sysInfo.system;
|
||||
var shy = window.sysInfo.hyperion;
|
||||
var info = "<pre>Hyperion Server: \n";
|
||||
info += '- Build: ' + shy.build + '\n';
|
||||
info += '- Build time: ' + shy.time + '\n';
|
||||
info += '- Git Remote: ' + shy.gitremote + '\n';
|
||||
info += '- Version: ' + shy.version + '\n';
|
||||
info += '- UI Lang: ' + storedLang + ' (BrowserLang: ' + navigator.language + ')\n';
|
||||
info += '- UI Access: ' + storedAccess + '\n';
|
||||
//info += 'Log lvl: ' + window.serverConfig.logger.level + '\n';
|
||||
info += '- Avail Capt: ' + window.serverInfo.grabbers.available + '\n\n';
|
||||
info += 'Hyperion Server OS: \n';
|
||||
info += '- Distribution: ' + sys.prettyName + '\n';
|
||||
info += '- Arch: ' + sys.architecture + '\n';
|
||||
info += '- Kernel: ' + sys.kernelType + ' (' + sys.kernelVersion + ' (WS: ' + sys.wordSize + '))\n';
|
||||
info += '- Browser: ' + navigator.userAgent + ' </pre>';
|
||||
var info = '<pre>' + getSystemInfo() + '</pre>';
|
||||
|
||||
var fc = ['<span id="danger_trig">' + $.i18n("about_version") + '<span>', $.i18n("about_build"), $.i18n("about_builddate"), $.i18n("about_translations"), $.i18n("about_resources", $.i18n("general_webui_title")), "System info (Github Issue)", $.i18n("about_3rd_party_licenses")];
|
||||
var sc = [currentVersion, si.build, si.time, '(' + availLang.length + ')<p>' + lang + '</p><p><a href="https://github.com/hyperion-project/hyperion.ng" target="_blank">' + $.i18n("about_contribute") + '</a></p>', libh, info, '<pre><div id="3rdpartylicenses" style="overflow:scroll;max-height:400px"></div></pre>'];
|
||||
var fc = ['<span id="danger_trig">' + $.i18n("about_version") + '<span>', $.i18n("about_build"), $.i18n("about_builddate"), $.i18n("about_translations"), $.i18n("about_resources", $.i18n("general_webui_title")), "System info (Github Issue)", $.i18n("about_3rd_party_licenses")];
|
||||
var sc = [currentVersion, si.build, si.time, '(' + availLang.length + ')<p>' + lang + '</p><p><a href="https://github.com/hyperion-project/hyperion.ng" target="_blank">' + $.i18n("about_contribute") + '</a></p>', libh, info, '<pre><div id="3rdpartylicenses" style="overflow:scroll;max-height:400px"></div></pre>'];
|
||||
|
||||
createTable("", "atb", "about_cont");
|
||||
for (var i = 0; i < fc.length; i++)
|
||||
$('.atb').append(createTableRow([fc[i], sc[i]], "atb", false));
|
||||
createTable("", "atb", "about_cont");
|
||||
for (var i = 0; i < fc.length; i++)
|
||||
$('.atb').append(createTableRow([fc[i], sc[i]], "atb", false));
|
||||
|
||||
$('#danger_trig').off().on('click', function () {
|
||||
dcount++;
|
||||
if (dcount > 2)
|
||||
$('#danger_act').toggle(true);
|
||||
});
|
||||
$('#danger_trig').off().on('click', function () {
|
||||
dcount++;
|
||||
if (dcount > 2)
|
||||
$('#danger_act').toggle(true);
|
||||
});
|
||||
|
||||
$('#reset_cache').off().on('click', function () {
|
||||
localStorage.clear();
|
||||
});
|
||||
$('#reset_cache').off().on('click', function () {
|
||||
localStorage.clear();
|
||||
});
|
||||
|
||||
$('#hyp_restart').off().on('click', function () {
|
||||
initRestart();
|
||||
});
|
||||
$('#hyp_restart').off().on('click', function () {
|
||||
initRestart();
|
||||
});
|
||||
|
||||
var url = 'https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/3RD_PARTY_LICENSES';
|
||||
fetch(url)
|
||||
.then(function (response) {
|
||||
if (!response.ok) {
|
||||
$("#3rdpartylicenses").html('<a href="' + url + '">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
|
||||
}
|
||||
else {
|
||||
response.text().then(function (text) {
|
||||
$("#3rdpartylicenses").html('<code>' + text + '</code>');
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(function (rejected) {
|
||||
$("#3rdpartylicenses").html('<a href="' + url + '">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
|
||||
});
|
||||
$.ajax({
|
||||
url:'3RD_PARTY_LICENSES',
|
||||
dataType: "text",
|
||||
success: function(data)
|
||||
{
|
||||
$("#3rdpartylicenses").html('<code>' + data + '</code>');
|
||||
},
|
||||
error: function()
|
||||
{
|
||||
$("#3rdpartylicenses").html('<a href="https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/3RD_PARTY_LICENSES">' + $.i18n("about_3rd_party_licenses_error") + '</a>');
|
||||
}
|
||||
});
|
||||
|
||||
removeOverlay();
|
||||
removeOverlay();
|
||||
</script>
|
||||
|
|
|
@ -2,11 +2,23 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></h3>
|
||||
<div id="conf_cont"></div>
|
||||
<h3 class="page-header"><i class="fa fa-photo fa-fw"></i><span data-i18n="main_menu_colors_conf_token">Image Processing</span></h3>
|
||||
|
||||
<div class="panel panel-default" style="border:0px;">
|
||||
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
|
||||
<div class="dropdown">
|
||||
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
|
||||
<div id="active_instance_friendly_name"></div>
|
||||
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
|
||||
</a>
|
||||
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="conf_cont"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script src="/js/content_colors.js"></script>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-spinner fa-fw"></i><span data-i18n="main_menu_effect_conf_token">Effects</span></h3>
|
||||
|
||||
<div class="panel panel-default" style="border:0px;">
|
||||
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
|
||||
<div class="dropdown">
|
||||
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
|
||||
<div id="active_instance_friendly_name"></div>
|
||||
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
|
||||
</a>
|
||||
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="conf_cont"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<div class="row">
|
||||
<div class="col-lg-6" id="inst_desc">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-plus fa-fw"></i><span data-i18n="conf_general_inst_title"></span></div>
|
||||
<div class="panel-heading panel-instance"><i class="mdi mdi-lightbulb-group mdi-24px"></i><span data-i18n="conf_general_inst_title"></span></div>
|
||||
<div class="panel-body">
|
||||
<div id="inst_desc_cont"></div>
|
||||
<div id="itable"></div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></h3>
|
||||
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span></h3>
|
||||
<div id="conf_cont"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-camera fa-fw"></i><span data-i18n="main_menu_instcapture_conf_token">Capturing Hardware</span></h3>
|
||||
|
||||
<div class="panel panel-default" style="border:0px;">
|
||||
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
|
||||
<div class="dropdown">
|
||||
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
|
||||
<div id="active_instance_friendly_name"></div>
|
||||
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
|
||||
</a>
|
||||
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="conf_cont"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/content_instcapture.js"></script>
|
|
@ -1,374 +1,428 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Hyperion - LED Device Configuration</title>
|
||||
</head>
|
||||
<div class="container-fluid">
|
||||
<h3 class="page-header"><i class="fa fa-lightbulb-o fa-fw"></i><span data-i18n="main_menu_leds_conf_token">LED Hardware</span></h3>
|
||||
<ul id="leds_cfg_nav" class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle="tab" href="#menu_controller" data-i18n="conf_leds_nav_label_ledcontroller">LED Controller</a></li>
|
||||
<li><a data-toggle="tab" href="#menu_gencfg" data-i18n="conf_leds_nav_label_ledlayout">LED Layout</a></li>
|
||||
</ul>
|
||||
<h3 class="page-header"><i class="mdi mdi-lightbulb-on fa-fw"></i><span data-i18n="main_menu_leds_conf_token">LED Hardware</span></h3>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="panel panel-default" style="border:0px;">
|
||||
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
|
||||
<div class="dropdown">
|
||||
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
|
||||
<div id="active_instance_friendly_name"></div>
|
||||
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
|
||||
</a>
|
||||
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="menu_controller" class="tab-pane fade in active" style="padding-top:10px">
|
||||
<div class="row">
|
||||
<div class="col-lg-12" id="leddevice_intro"></div>
|
||||
<div class="col-lg-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading form-group">
|
||||
<label for="leddevices" class="panel-title" data-i18n="conf_leds_contr_label_contrtype">Controller type:</label>
|
||||
<select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
|
||||
</div>
|
||||
<ul id="leds_cfg_nav" class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle="tab" href="#menu_controller" data-i18n="conf_leds_nav_label_ledcontroller">LED Controller</a></li>
|
||||
<li><a data-toggle="tab" href="#menu_gencfg" data-i18n="conf_leds_nav_label_ledlayout">LED Layout</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="btn_wiz_holder"></div>
|
||||
<div id="ledDeviceOptions"> <div id='editor_container'></div> </div>
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right">
|
||||
<button id='btn_submit_controller' class="btn btn-primary"><i class="fa fa-fw fa-save" /><span data-i18n="general_button_savesettings">Save Settings</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-content">
|
||||
<div id="menu_controller" class="tab-pane fade in active" style="padding-top:10px">
|
||||
<div class="row">
|
||||
<div class="col-lg-12" id="leddevice_intro"></div>
|
||||
<div class="col-lg-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading form-group">
|
||||
<label for="leddevices" class="panel-title" data-i18n="conf_leds_contr_label_contrtype">Controller type:</label>
|
||||
<select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
|
||||
</div>
|
||||
|
||||
<div id="menu_gencfg" class="tab-pane fade" style="padding-top:10px">
|
||||
<div class="panel-body">
|
||||
<div id="btn_wiz_holder"></div>
|
||||
<div id='editor_container_leddevice'></div>
|
||||
<div id='info_container' class="bs-callout bs-callout-info" style="margin-top:0px">
|
||||
<h4 data-i18n="dashboard_infobox_label_title">Information</h4>
|
||||
<div id='info_container_text'>
|
||||
<span data-i18n="conf_leds_device_info_log"> In case your LEDs do not work, check here for errors: </span>
|
||||
<a onclick="SwitchToMenuItem('MenuItemLogging')" data-i18n="main_menu_logging_token" style="cursor:pointer"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right">
|
||||
<button id='btn_test_controller' class="btn btn-primary" disabled data-toggle="tooltip" data-placement="top" title="Identify configured device by lighting it up">
|
||||
<i class="fa fa-fw fa-save"></i><span data-i18n="wiz_identify">Identify/Test</span>
|
||||
</button>
|
||||
<button id='btn_submit_controller' class="btn btn-primary" data-toggle="tooltip" data-placement="top" title="Save the device's connectivity configuration">
|
||||
<i class="fa fa-fw fa-save"></i><span data-i18n="general_button_savesettings">Save Settings</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12" id="layout_intro"></div>
|
||||
<div class="col-lg-6 col-md-12">
|
||||
<div class="panel-group" id="accordion">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1">
|
||||
<h4 class="panel-title">
|
||||
<a><i class="fa fa-television fa-fw"></i><span data-i18n="conf_leds_layout_frame">Classic Layout (LED Frame)</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse1" class="panel-collapse collapse in">
|
||||
<div class="panel-body">
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_top" data-i18n="conf_leds_layout_cl_top">Top</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr " id="ip_cl_top" type="number" value="10" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_bottom" data-i18n="conf_leds_layout_cl_bottom">Bottom</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_bottom" type="number" value="10" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_left" data-i18n="conf_leds_layout_cl_left">Left</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_left" type="number" value="6" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_right" data-i18n="conf_leds_layout_cl_right">Right</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_right" type="number" value="6" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_glength" data-i18n="conf_leds_layout_cl_gaglength">Gap length</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_glength" type="number" value="0" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_gpos" data-i18n="conf_leds_layout_cl_gappos">Gap position</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_gpos" type="number" value="0" min="0" step="1">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_position" data-i18n="conf_leds_layout_cl_inppos">Input position</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_position" type="number" value="0" min="0" step="1">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_reverse" data-i18n="conf_leds_layout_cl_reversdir">Reverse direction</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<div class="checkbox">
|
||||
<input class="ledCLconstr" id="ip_cl_reverse" type="checkbox" value="false"></input>
|
||||
<label></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3">
|
||||
<h4 class="panel-title">
|
||||
<a><span data-i18n="conf_leds_layout_advanced">Advanced settings</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse3" class="panel-collapse collapse">
|
||||
<div class="panel-body ">
|
||||
<table class="tableform borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_hdepth" data-i18n="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_hdepth" type="number" value="8" min="1" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_vdepth" data-i18n="conf_leds_layout_cl_vleddepth">Vertical LED depth</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_vdepth" type="number" value="5" min="1" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_overlap" data-i18n="conf_leds_layout_cl_overlap">Edge Gap</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_overlap" type="number" value="0" min="0" max="200" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_edgegap" data-i18n="conf_leds_layout_cl_edgegap">Edge Gap</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_edgegap" type="number" value="0" min="0" max="50" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_ptl" data-i18n="conf_leds_layout_ptl">Point Top Left</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptlh" type="number" value="0" min="0" max="40" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%h</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptlv" type="number" value="0" min="0" max="40" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%v</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_ptr" data-i18n="conf_leds_layout_ptr">Point Top Right</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptrh" type="number" value="100" min="60" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptrv" type="number" value="0" min="0" max="40" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_pbr" data-i18n="conf_leds_layout_pbr">Point Bottom Right</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pbrh" type="number" value="100" min="60" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pbrv" type="number" value="100" min="60" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_pbl" data-i18n="conf_leds_layout_pbl">Point Bottom Left</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pblh" type="number" value="0" min="0" max="40" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pblv" type="number" value="100" min="60" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- <tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_cornergap" data-i18n="conf_leds_layout_cl_cornergap">Corner Gap</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr " id="ip_cl_cornergap" type="number" value="0" min="0" max="50" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
-->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="menu_gencfg" class="tab-pane fade" style="padding-top:10px">
|
||||
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right;">
|
||||
<button id="btn_cl_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse2">
|
||||
<h4 class="panel-title">
|
||||
<a><i class="fa fa-th fa-fw"></i><span data-i18n="conf_leds_layout_matrix">Matrix Configuration (LED wall)</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse2" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_ledshoriz" data-i18n="conf_leds_layout_ma_horiz">Horizontal</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledMAconstr" id="ip_ma_ledshoriz" type="number" value="10" min="1" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_ledsvert" data-i18n="conf_leds_layout_ma_vert">Vertical</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledMAconstr" id="ip_ma_ledsvert" type="number" value="10" min="1" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_cabling" data-i18n="conf_leds_layout_ma_cabling">Cabling</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<select class="form-control ledMAconstr" id="ip_ma_cabling">
|
||||
<option value="snake" data-i18n="conf_leds_layout_ma_optsnake">Snake</option>
|
||||
<option value="parallel" data-i18n="conf_leds_layout_ma_optparallel">Parallel</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<!--- <tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_order" data-i18n="conf_leds_layout_ma_order">Order</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<select class="form-control ledMAconstr" id="ip_ma_order">
|
||||
<option value="horizontal" data-i18n="conf_leds_layout_ma_opthoriz">Horizontal</option>
|
||||
<option value="vertical" data-i18n="conf_leds_layout_ma_optvert">Vertical</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
--->
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_start" data-i18n="conf_leds_layout_ma_position">Input</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<select class="form-control ledMAconstr" id="ip_ma_start">
|
||||
<option value="top-left" data-i18n="conf_leds_layout_ma_opttopleft">Top left</option>
|
||||
<option value="top-right" data-i18n="conf_leds_layout_ma_opttopright">Top right</option>
|
||||
<option value="bottom-left" data-i18n="conf_leds_layout_ma_optbottomleft">Bottom left</option>
|
||||
<option value="bottom-right" data-i18n="conf_leds_layout_ma_optbottomright">Bottom right</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right;">
|
||||
<button id="btn_ma_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="texfield_panel" class="panel panel-primary">
|
||||
<div class="panel-heading headcollapse" data-toggle="collapse" data-parent="#accordion" data-target="#collapse4">
|
||||
<h4 class="panel-title">
|
||||
<a><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_leds_layout_generatedconf">Generated/Actual LED Configuration</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse4" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<p id="leds_wl" data-i18n="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p>
|
||||
<div id="aceedit" style="width:100%;height:500px"></div>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<button type="button" class="btn btn-warning" id="leds_custom_updsim"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_button_updsim">Update preview</span></button>
|
||||
<button type="button" class="btn btn-primary pull-right" id="leds_custom_save"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- accordion -->
|
||||
<div class="col-lg-6 col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_peview">LED Layout preview</span></h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p id="previewcreator" style="font-weight:bold"></p>
|
||||
<p id="previewledcount" style="font-weight:bold"></p>
|
||||
<p id="previewledpower" style="font-weight:bold"></p>
|
||||
<div id="led_vis_help"></div>
|
||||
<div class="col-lg-12 st_helper" style="padding-left:0px; padding-right:0px">
|
||||
<div id="leds_preview"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<button type="button" class="btn btn-danger" id="leds_prev_toggle_num"><i class="fa fa-info fa-fw"></i><span data-i18n="main_ledsim_btn_togglelednumber">toggle led numbers</span></button>
|
||||
<button type="button" class="btn btn-primary" id="leds_prev_checklist"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="conf_leds_layout_btn_checklist">toggle led numbers</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- row layout -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div> <!-- tab content -->
|
||||
<div class="row">
|
||||
<div class="col-lg-12" id="layout_intro"></div>
|
||||
<div class="col-lg-6 col-md-12" id="layout_type">
|
||||
<div class="panel-group" id="accordion">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading headcollapse" id="classic_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1">
|
||||
<h4 class="panel-title">
|
||||
<a><i class="fa fa-television fa-fw"></i><span data-i18n="conf_leds_layout_frame">Classic Layout (LED Frame)</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse1" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_top" data-i18n="conf_leds_layout_cl_top">Top</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr " id="ip_cl_top" type="number" value="1" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_bottom" data-i18n="conf_leds_layout_cl_bottom">Bottom</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_bottom" type="number" value="0" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_left" data-i18n="conf_leds_layout_cl_left">Left</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_left" type="number" value="0" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_right" data-i18n="conf_leds_layout_cl_right">Right</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_right" type="number" value="0" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_glength" data-i18n="conf_leds_layout_cl_gaglength">Gap length</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_glength" type="number" value="0" min="0" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_gpos" data-i18n="conf_leds_layout_cl_gappos">Gap position</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_gpos" type="number" value="0" min="0" step="1">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_position" data-i18n="conf_leds_layout_cl_inppos">Input position</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_position" type="number" value="0" min="0" step="1">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_reverse" data-i18n="conf_leds_layout_cl_reversdir">Reverse direction</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<div class="checkbox">
|
||||
<input class="ledCLconstr" id="ip_cl_reverse" type="checkbox" value="false"></input>
|
||||
<label></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading headcollapse" data-toggle="collapse" data-target="#collapse3" id="advanced_settings">
|
||||
<h4 class="panel-title">
|
||||
<a>
|
||||
<i class="fa fa-fw fa-cogs"></i>
|
||||
<span data-i18n="conf_leds_layout_advanced">Advanced settings</span>
|
||||
<i class="fa fa-angle-down pull-right" id="advanced_settings_right_icon"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse3" class="panel-collapse collapse">
|
||||
<div class="panel-body ">
|
||||
<table class="tableform borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_hdepth" data-i18n="conf_leds_layout_cl_hleddepth">Horizontal LED depth</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_hdepth" type="number" value="8" min="1" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_vdepth" data-i18n="conf_leds_layout_cl_vleddepth">Vertical LED depth</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_vdepth" type="number" value="5" min="1" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_overlap" data-i18n="conf_leds_layout_cl_overlap">Edge Gap</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_overlap" type="number" value="0" min="0" max="200" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_edgegap" data-i18n="conf_leds_layout_cl_edgegap">Edge Gap</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_edgegap" type="number" value="0" min="0" max="50" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_ptl" data-i18n="conf_leds_layout_ptl">Point Top Left</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptlh" type="number" value="0" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%h</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptlv" type="number" value="0" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%v</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_ptr" data-i18n="conf_leds_layout_ptr">Point Top Right</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptrh" type="number" value="100" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_ptrv" type="number" value="0" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_pbr" data-i18n="conf_leds_layout_pbr">Point Bottom Right</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pbrh" type="number" value="100" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pbrv" type="number" value="100" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_pbl" data-i18n="conf_leds_layout_pbl">Point Bottom Left</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pblh" type="number" value="0" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_h">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd"></td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr" id="ip_cl_pblv" type="number" value="100" min="0" max="100" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent_v">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- <tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_cl_cornergap" data-i18n="conf_leds_layout_cl_cornergap">Corner Gap</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledCLconstr " id="ip_cl_cornergap" type="number" value="0" min="0" max="50" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_percent">%</div>
|
||||
</td>
|
||||
</tr>
|
||||
-->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right;">
|
||||
<button id="btn_cl_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading headcollapse" id="matrix_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse2">
|
||||
<h4 class="panel-title">
|
||||
<a><i class="fa fa-th fa-fw"></i><span data-i18n="conf_leds_layout_matrix">Matrix Configuration (LED wall)</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse2" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_ledshoriz" data-i18n="conf_leds_layout_ma_horiz">Horizontal</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledMAconstr" id="ip_ma_ledshoriz" type="number" value="1" min="1" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_ledsvert" data-i18n="conf_leds_layout_ma_vert">Vertical</label>
|
||||
</td>
|
||||
<td class="itd input-group">
|
||||
<input class="form-control ledMAconstr" id="ip_ma_ledsvert" type="number" value="1" min="1" step="1"></input>
|
||||
<div class="input-group-addon" data-i18n="edt_append_leds">LEDs</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_cabling" data-i18n="conf_leds_layout_ma_cabling">Cabling</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<select class="form-control ledMAconstr" id="ip_ma_cabling">
|
||||
<option value="snake" data-i18n="conf_leds_layout_ma_optsnake">Snake</option>
|
||||
<option value="parallel" data-i18n="conf_leds_layout_ma_optparallel">Parallel</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_direction" data-i18n="conf_leds_layout_ma_direction">Cabling</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<select class="form-control ledMAconstr" id="ip_ma_direction">
|
||||
<option value="horizontal" data-i18n="conf_leds_layout_ma_opthoriz">Horizontal</option>
|
||||
<option value="vertical" data-i18n="conf_leds_layout_ma_optvert">Vertical</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="ltd">
|
||||
<label class="ltdlabel" for="ip_ma_start" data-i18n="conf_leds_layout_ma_position">Input</label>
|
||||
</td>
|
||||
<td class="itd">
|
||||
<select class="form-control ledMAconstr" id="ip_ma_start">
|
||||
<option value="top-left" data-i18n="conf_leds_layout_ma_opttopleft">Top left</option>
|
||||
<option value="top-right" data-i18n="conf_leds_layout_ma_opttopright">Top right</option>
|
||||
<option value="bottom-left" data-i18n="conf_leds_layout_ma_optbottomleft">Bottom left</option>
|
||||
<option value="bottom-right" data-i18n="conf_leds_layout_ma_optbottomright">Bottom right</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right;">
|
||||
<button id="btn_ma_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="blacklist_panel" class="panel panel-primary">
|
||||
<div class="panel-heading headcollapse" id="blacklist_config_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse4">
|
||||
<h4 class="panel-title">
|
||||
<a><i class="fa fa-ban fa-fw"></i><span data-i18n="conf_leds_layout_blacklistleds_title">Blacklist LEDs</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse4" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<div id="editor_container_blacklist_conf"></div>
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right;">
|
||||
<button id="btn_bl_save" class="btn btn-primary"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="texfield_panel" class="panel panel-primary">
|
||||
<div class="panel-heading headcollapse" id="current_config_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapse5">
|
||||
<h4 class="panel-title">
|
||||
<a><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_leds_layout_generatedconf">Generated/Actual LED Configuration</span></a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse5" class="panel-collapse collapse in">
|
||||
<div class="panel-body">
|
||||
<p id="leds_wl" data-i18n="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p>
|
||||
<div id="aceedit" style="width:100%;height:500px"></div>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<button type="button" class="btn btn-warning" id="leds_custom_updsim"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_button_updsim">Update preview</span></button>
|
||||
<button type="button" class="btn btn-primary pull-right" id="leds_custom_save"><i class="fa fa-fw fa-save"></i><span data-i18n="conf_leds_layout_button_savelay">Save layout</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- accordion -->
|
||||
<div class="col-lg-6 col-md-12" id="layout_preview">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<i class="fa fa-search fa-fw"></i>
|
||||
<span data-i18n="conf_leds_layout_peview">LED Layout preview</span>
|
||||
<a href="#" class='fullscreen-btn' role="button" title="Toggle fullscreen">
|
||||
<i class="fa fa-expand fa-fw pull-right"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p id="previewcreator" style="font-weight:bold"></p>
|
||||
<p id="previewledcount" style="font-weight:bold"></p>
|
||||
<p id="previewledpower" style="font-weight:bold"></p>
|
||||
<div id="led_vis_help"></div>
|
||||
<div class="col-lg-12 st_helper" style="position:relative; padding-left:0px; padding-right:0px">
|
||||
<canvas id="image_preview" style="position:absolute; z-index:0"></canvas>
|
||||
<div id="keystone_correction_area" style="position: absolute; z-index: 20;"></div>
|
||||
<div id="leds_preview"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<button type="button" class="btn btn-danger" id="leds_prev_toggle_num"><i class="fa fa-info fa-fw"></i><span data-i18n="main_ledsim_btn_togglelednumber">toggle led numbers</span></button>
|
||||
<button type="button" class="btn btn-danger" id="leds_prev_toggle_live_video"><i class="fa fa-fw fa-television"></i><span data-i18n="main_ledsim_btn_togglelivevideo">toggle live video</span></button>
|
||||
<button type="button" class="btn btn-danger" id="leds_prev_toggle_keystone_correction_area" style="display:none;"><i class="mdi mdi-vector-square" style="margin-right:5px;"></i><span data-i18n="conf_leds_layout_btn_keystone">toggle keystone correction</span></button>
|
||||
<button type="button" class="btn btn-primary pull-right" id="leds_prev_checklist"><i class="fa fa-info-circle fa-fw"></i><span data-i18n="conf_leds_layout_btn_checklist">show checklist</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/content_leds.js"></script>
|
||||
|
||||
|
||||
|
|
|
@ -1,21 +1,30 @@
|
|||
<div class="container-fluid" id="trans_conf_logging">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></h3>
|
||||
<div id="log_head"></div>
|
||||
<div class="row" id='conf_cont'></div>
|
||||
<hr />
|
||||
<div id="log_content"><span style="font-weight:bold;font-size:17px" data-i18n="conf_logging_nomessage"></span></div>
|
||||
<hr>
|
||||
<div style="display:none">
|
||||
<h4 style="font-weight:bold"><i class="fa fa-reorder fa-fw"></i><span data-i18n="conf_logging_report">Bericht</span></h4>
|
||||
<button class="btn btn-primary" id="btn_logupload"><i class="fa fa-upload fa-fw"></i><span data-i18n="conf_logging_btn_pbupload"></span></button>
|
||||
<div id="log_upl_pol"></div>
|
||||
<div id="upl_link" style="margin-top:10px;font-weight:bold;"></div>
|
||||
<div id="prev_reports"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></h3>
|
||||
<div id="log_head"></div>
|
||||
<div class="row" id='conf_cont'></div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<i class="fa fa-book fa-fw"></i>
|
||||
<span data-i18n="conf_logging_logoutput"></span>
|
||||
<a href="#" class='fullscreen-btn' role="button" title="Toggle fullscreen">
|
||||
<i class="fa fa-expand fa-fw pull-right"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="log_content"><span style="font-weight:bold;font-size:17px" data-i18n="conf_logging_nomessage"></span></div>
|
||||
</div>
|
||||
<div class="panel-footer" id="log_footer">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="/js/content_logging.js"></script>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network Services</span></h3>
|
||||
<h3 class="page-header"><i class="fa fa-sitemap fa-fw"></i><span data-i18n="main_menu_network_conf_token">Network Services</span></h3>
|
||||
<div id="conf_cont">
|
||||
<div class="row" id="conf_cont_tok">
|
||||
<div class="col-lg-6" id="tok_desc">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-key fa-fw"></i><span data-i18n="conf_network_tok_title"></span></div>
|
||||
<div class="panel-heading panel-system"><i class="fa fa-key fa-fw"></i><span data-i18n="conf_network_tok_title"></span></div>
|
||||
<div class="panel-body">
|
||||
<div id="tok_desc_cont"></div>
|
||||
<div id="tktable"></div>
|
||||
|
@ -34,4 +34,4 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/content_network.js"></script>
|
||||
<script src="/js/content_network.js"></script>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,98 +1,149 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></h3>
|
||||
<div id="dash_intro">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-xxl-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-info-circle fa-fw"></i>
|
||||
<span data-i18n="dashboard_infobox_label_title">Information</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_statush"></td>
|
||||
<td id="dash_statush" style="font-weight:bold">unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_platform">Platform:</td>
|
||||
<td id="dash_platform"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="conf_leds_contr_label_contrtype">LED type:</td>
|
||||
<td id="dash_leddevice"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_instance">Instance</td>
|
||||
<td id="dash_instance"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_ports">Ports</td>
|
||||
<td id="dash_ports"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_currenthyp">Hyperion version:</td>
|
||||
<td id="dash_currv">unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_watchedversionbranch">Watched version branch:</td>
|
||||
<td id="dash_watchedversionbranch">unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_latesthyp">Latest version:</td>
|
||||
<td id="dash_latev">unknown</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<p style="font-weight:bold" data-i18n="dashboard_infobox_label_smartacc">Smart Access<p>
|
||||
<span id="btn_hsc"></span>
|
||||
<hr>
|
||||
<span id="versioninforesult"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-xxl-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-eye fa-fw"></i>
|
||||
<span data-i18n="dashboard_componentbox_label_title">Components status</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-i18n="dashboard_componentbox_label_comp">Component</th>
|
||||
<th data-i18n="dashboard_componentbox_label_status">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tab_components">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 col-xxl-5" style="display:none">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-newspaper-o fa-fw"></i>
|
||||
<span data-i18n="dashboard_newsbox_label_title">Visit Hyperion Blog</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="dash_news" style="margin-bottom:7px"></div>
|
||||
<a href="https://hyperion-project.org/blog/?pk_campaign=WebUI&pk_kwd=visitblog" target="_blank" data-i18n="dashboard_newsbox_visitblog"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col-lg-12 -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- /.container-fluid -->
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-dashboard fa-fw"></i><span data-i18n="main_menu_dashboard_token">Dashboard</span></h3>
|
||||
|
||||
<script src="/js/content_dashboard.js"></script>
|
||||
<!-- Infobox -->
|
||||
<div id="dash_intro">
|
||||
|
||||
<!-- Instance(s) -->
|
||||
<div class="row instances">
|
||||
|
||||
<!-- Config status -->
|
||||
<div class="col-md-6 col-xxl-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading panel-system">
|
||||
<span id="dash_config_status">Status</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table id="dash_capture_hw" class="table borderless">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<i class="mdi mdi-camera"></i>
|
||||
<span data-i18n="main_menu_grabber_conf_token">Capturing Hardware</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="dash_screen_grabber_row">
|
||||
<td></td>
|
||||
<td data-i18n="edt_conf_fg_heading_title">Screen-Grabber</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_screen_grabber">disabled</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_screengrabber')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="dash_video_grabber_row">
|
||||
<td></td>
|
||||
<td data-i18n="edt_conf_v4l2_heading_title">Video-Grabber</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_video_grabber">disabled</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_videograbber')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="dash_audio_grabber_row">
|
||||
<td></td>
|
||||
<td data-i18n="edt_conf_audio_heading_title">Audio-Grabber</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_audio_grabber">disabled</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemGrabber', 'editor_container_audiograbber')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table id="dash_ports" class="table borderless">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<i class="mdi mdi-lan"></i>
|
||||
<span data-i18n="dashboard_infobox_label_ports">Ports</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="dash_ports_flat_row">
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_port_flat">flat</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_fbPort">unknown</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_fbserver')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="dash_ports_proto_row">
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_port_proto">proto</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_pbPort">unknown</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_protoserver')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="dash_ports_boblight_row">
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_port_boblight">proto</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_boblightPort">unknown</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemInstCapture', 'editor_container_boblightserver')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_port_json">json</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_jsonPort">unknown</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemNetwork', 'editor_container_jsonserver')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_ports_websocket">websocket</td>
|
||||
<td style="text-align: right; padding-right: 0">
|
||||
<span id="dash_wsPorts">unknown</span>
|
||||
<a class="fa fa-cog fa-fw" onclick="SwitchToMenuItem('MenuItemWeb')" style="text-decoration: none; cursor: pointer"></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="table borderless">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<i class="mdi mdi-numeric"></i>
|
||||
<span data-i18n="about_version">Version</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_currenthyp">Hyperion version:</td>
|
||||
<td id="dash_currv" style="text-align: right">unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_watchedversionbranch">Watched version branch:</td>
|
||||
<td id="dash_watchedversionbranch" style="text-align: right">unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td data-i18n="dashboard_infobox_label_latesthyp">Latest version:</td>
|
||||
<td id="dash_latev" style="text-align: right">unknown</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<span id="versioninforesult"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col-lg-12 -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.container-fluid -->
|
||||
|
||||
<script src="/js/content_dashboard.js"></script>
|
||||
|
|
|
@ -1,51 +1,65 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h3>
|
||||
<div id="intro_effc">
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading">
|
||||
<label for="effectslist" data-i18n="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label>
|
||||
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="eff_desc"></div>
|
||||
<table style="margin-bottom:8px" id="effc_nametable">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td>
|
||||
<td class="itd"><input class="form-control" type="text" id="name-input" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="editor_container" />
|
||||
</div>
|
||||
<div class="panel-footer" id="eff_footer">
|
||||
<button class="btn btn-warning" id='btn_start_test' data-i18n="effectsconfigurator_button_starttest">Start Effecttest</button>
|
||||
<button class="btn btn-warning" id='btn_stop_test' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</button>
|
||||
<button class="btn btn-danger" id='btn_cont_test' data-i18n="effectsconfigurator_button_conttest">Toggle continuous testing</button>
|
||||
<button class="btn btn-primary" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading">
|
||||
<label for="effectsdellist" data-i18n="effectsconfigurator_editdeleff"></label>
|
||||
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
|
||||
<button class="btn btn-primary" id='btn_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header"><i class="fa fa-cogs fa-fw"></i><span data-i18n="main_menu_effectsconfigurator_token">Effects Configurator</span></h3>
|
||||
|
||||
<div class="panel panel-default" style="border:0px;">
|
||||
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
|
||||
<div class="dropdown">
|
||||
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
|
||||
<div id="active_instance_friendly_name"></div>
|
||||
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
|
||||
</a>
|
||||
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="intro_effc">
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<label for="effectslist" data-i18n="effectsconfigurator_label_chooseeff">Choose Base-Effect:</label>
|
||||
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="eff_desc"></div>
|
||||
<table style="margin-bottom:8px" id="effc_nametable">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td>
|
||||
<td class="itd"><input class="form-control" type="text" id="name-input"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="editor_container"></div>
|
||||
</div>
|
||||
<div class="panel-footer" id="eff_footer">
|
||||
<button class="btn btn-warning" id='btn_start_test' data-i18n="effectsconfigurator_button_starttest">Start Effecttest</button>
|
||||
<button class="btn btn-warning" id='btn_stop_test' data-i18n="effectsconfigurator_button_stoptest">Stop Effecttest</button>
|
||||
<button class="btn btn-danger" id='btn_cont_test' data-i18n="effectsconfigurator_button_conttest">Toggle continuous testing</button>
|
||||
<button class="btn btn-primary" id='btn_write' data-i18n="effectsconfigurator_button_saveeffect">Save Effect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<label for="effectsdellist" data-i18n="effectsconfigurator_editdeleff"></label>
|
||||
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block"></select>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
|
||||
<button class="btn btn-primary" id='btn_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/content_effectsconfigurator.js"></script>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<style> body {margin:auto; padding:2%; text-align:center; font-family:arial;}</style>
|
||||
</head>
|
||||
<body>
|
||||
<img src="../img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:20px;">
|
||||
<img src="../img/hyperion/logo_positiv.png" alt="Redefine ambient light!" style="margin-bottom:20px;">
|
||||
<h2><span style="color:red">We are sorry, Internet Explorer is not supported!</span><br /><br /> Please use recent versions of Firefox, Chrome, Safari or MS Edge.</h2>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,35 +1,40 @@
|
|||
<div class="container" style="margin:20px auto;max-width:500px;">
|
||||
<center>
|
||||
<div>
|
||||
<div class="panel panel-danger">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Login</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<input name="password" class="form-control" type="password" id="password" placeholder="Password" autocomplete="off"/>
|
||||
<input name="show_pw" type="checkbox" id="show_pw"/><label for="show_pw">Show/Hide Password</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-sm btn-success" id="btn_password" onclick="requestAuthorization(document.getElementById('password').value); return false;" disabled><i class="fa fa-fw fa-unlock"></i>Login</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</center>
|
||||
<center>
|
||||
<div>
|
||||
<div class="panel panel-danger">
|
||||
<div class="panel-heading panel-system">
|
||||
<h3 class="panel-title">Login</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<input type="name="username" class="form-control" type="text" id="username" value="Hyperion" disabled/></br>
|
||||
<input name="password" class="form-control" type="password" id="password" placeholder="Password" autocomplete="off"/>
|
||||
<input name="show_pw" type="checkbox" id="show_pw" /><label for="show_pw">Show/Hide Password</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-sm btn-success" id="btn_password" onclick="requestAuthorization(document.getElementById('password').value); return false;"><i class="fa fa-fw fa-unlock"></i>Login</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
removeOverlay();
|
||||
removeOverlay();
|
||||
|
||||
$('#password').off().on('input',function(e) {
|
||||
if(e.currentTarget.value.length >= 8)
|
||||
$('#btn_password').removeAttr('disabled');
|
||||
});
|
||||
$('#password').off().on('input', function (e) {
|
||||
if (e.currentTarget.value.length >= 8) {
|
||||
$('#btn_password').prop('disabled', false);
|
||||
}
|
||||
else {
|
||||
$('#btn_password').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
|
||||
$('#show_pw').off().on('change',function(e) {
|
||||
(e.currentTarget.checked ? $('#password').attr('type', 'text') : $('#password').attr('type', 'password'))
|
||||
});
|
||||
$('#show_pw').off().on('change', function (e) {
|
||||
(e.currentTarget.checked ? $('#password').attr('type', 'text') : $('#password').attr('type', 'password'))
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -1,91 +1,107 @@
|
|||
<div class="container-fluid">
|
||||
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-8 col-xxl-7">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
|
||||
<div class="panel-body">
|
||||
<div id="sstcont"></div>
|
||||
<div id="auto_btn"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
|
||||
|
||||
<div class="col-md-6 col-lg-4 col-xxl-5">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
|
||||
<div class="panel-body" id="comp_intro">
|
||||
<div id="componentsbutton"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default" style="border:0px;">
|
||||
<div class="panel-heading panel-instance" style="border-radius:3px; border-bottom:0px;">
|
||||
<div class="dropdown">
|
||||
<a id="active_instance_dropdown" class="dropdown-toggle" data-toggle="dropdown" href="#" style="text-decoration:none;display:flex;align-items:center;">
|
||||
<div id="active_instance_friendly_name"></div>
|
||||
<div id="btn_hypinstanceswitch" style="white-space:nowrap;"><span class="mdi mdi-lightbulb-group mdi-24px" style="margin-right:0; margin-left:5px;"></span><span class="mdi mdi-menu-down mdi-24px"></span></div>
|
||||
</a>
|
||||
<ul id="hyp_inst_listing" class="dropdown-menu dropdown-alerts" style="cursor:pointer;"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-6 col-xxl-4">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
|
||||
<div class="panel-body" id="color_intro">
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="cpeff" data-i18n="remote_color_label_color"></label></td>
|
||||
<td>
|
||||
<div id="cp2" class="colorpicker-component input-group">
|
||||
<input type="text" id="cpeff" class="form-control"/>
|
||||
<span class="input-group-addon"><i></i></span>
|
||||
<span class="input-group-addon" id="remote_input_rescol" title="Repeat Color" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="effect_select" data-i18n="remote_effects_label_effects">Effect:</label></td>
|
||||
<td class="input-group">
|
||||
<select id="effect_select" class="form-control"></select>
|
||||
<span class="input-group-addon" id="remote_input_reseff" title="Repeat Effect" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="remote_input_img" data-i18n="remote_effects_label_picture" >Picture:</label></td>
|
||||
<td class="input-group custom-file">
|
||||
<input class="form-control" id="remote_input_img" type="file" accept="image/*" />
|
||||
<span class="input-group-addon" id="remote_input_repimg" title="Repeat Image" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="remote_duration" data-i18n="remote_input_duration"></label></td>
|
||||
<td class="input-group">
|
||||
<input id="remote_duration" type="number" class="form-control" value="0" min="0"/>
|
||||
<span class="input-group-addon" data-i18n="edt_append_s"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-primary" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-6 col-xxl-3">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
|
||||
<div class="panel-body" id="maptype_intro">
|
||||
<div id="mappingsbutton"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-6 col-xxl-5">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_videoMode_label"></span></div>
|
||||
<div class="panel-body" id="videomode_intro">
|
||||
<div id="videomodebtns"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-6 col-xxl-5">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
|
||||
<div class="panel-body" id="adjust_content">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-lg-8 col-xxl-8">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
|
||||
<div class="panel-body">
|
||||
<div id="sstcont"></div>
|
||||
<div id="auto_btn"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 col-xxl-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
|
||||
<div class="panel-body" id="comp_intro">
|
||||
<div id="componentsbutton"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-lg-6 col-xxl-4">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
|
||||
<div class="panel-body" id="color_intro">
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="cpeff" data-i18n="remote_color_label_color"></label></td>
|
||||
<td>
|
||||
<div id="cp2" class="colorpicker-component input-group">
|
||||
<input type="text" id="cpeff" class="form-control" />
|
||||
<span class="input-group-addon"><i></i></span>
|
||||
<span class="input-group-addon" id="remote_input_rescol" title="Repeat Color" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="effect_row">
|
||||
<td style="vertical-align:middle"><label for="effect_select" data-i18n="remote_effects_label_effects">Effect:</label></td>
|
||||
<td class="input-group">
|
||||
<select id="effect_select" class="form-control"></select>
|
||||
<span class="input-group-addon" id="remote_input_reseff" title="Repeat Effect" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="remote_input_img" data-i18n="remote_effects_label_picture">Picture:</label></td>
|
||||
<td class="input-group custom-file">
|
||||
<input class="form-control" id="remote_input_img" type="file" accept="image/*" />
|
||||
<span class="input-group-addon" id="remote_input_repimg" title="Repeat Image" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="remote_duration" data-i18n="remote_input_duration"></label></td>
|
||||
<td class="input-group">
|
||||
<input id="remote_duration" type="number" class="form-control" value="0" min="0" />
|
||||
<span class="input-group-addon" data-i18n="edt_append_s"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-primary" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-6 col-xxl-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
|
||||
<div class="panel-body" id="maptype_intro">
|
||||
<div id="mappingsbutton"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-6 col-xxl-5">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_videoMode_label"></span></div>
|
||||
<div class="panel-body" id="videomode_intro">
|
||||
<div id="videomodebtns"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-6 col-xxl-5">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
|
||||
<div class="panel-body" id="adjust_content">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/content_remote.js" ></script>
|
||||
<script src="/js/content_remote.js"></script>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<h3 data-i18n="info_restart_title"></h3>
|
||||
<h4 data-i18n="info_restart_rightback"></h4>
|
||||
<p data-i18n="info_restart_contus"></p>
|
||||
<a href="https://forum.hyperion-project.org?pk_campaign=WebUI&pk_kwd=failedrestart" data-i18n="info_restart_contusa"></a>
|
||||
<a href="https://hyperion-project.org/forum/" data-i18n="info_restart_contusa"></a>
|
||||
</div>
|
||||
</center>
|
||||
</div>
|
||||
|
|
|
@ -3,110 +3,24 @@
|
|||
<div class="col-xs-12">
|
||||
<h3 class="page-header"><i class="fa fa-info fa-fw"></i><span data-i18n="support_label_title">Support Hyperion</span></h3>
|
||||
<div id="supp_intro"></div>
|
||||
<div style="display:none">
|
||||
<h4 style="font-weight: bold" data-i18n="support_label_spreadtheword">Spread the word</h4>
|
||||
<a href="https://www.facebook.com/Hyperion-1415088231896140/" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-facebook bg-color-fb"></i>
|
||||
<h4>Facebook</h4>
|
||||
<p data-i18n="support_label_fbtext">Share our Hyperion Facebook page and get a notice when new updates are released</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://twitter.com/HyperionAmbient" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-twitter bg-color-tw"></i>
|
||||
<h4>Twitter</h4>
|
||||
<p data-i18n="support_label_twtext">Share and follow on Twitter, be always up to date with latest post about the Hyperion development</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://plus.google.com/103082579494653418604" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-google-plus bg-color-g"></i>
|
||||
<h4>Google+</h4>
|
||||
<p data-i18n="support_label_ggtext">Circle us on Google +!</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/channel/UCCah_idbSMqgo4UwP6R9H-A" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-youtube bg-color-g"></i>
|
||||
<h4>Youtube</h4>
|
||||
<p data-i18n="support_label_yttext">Bored from pictures? Checkout our Youtube channel!</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://www.instagram.com/hyperionambient/" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-instagram bg-color-ig"></i>
|
||||
<h4>Instagram</h4>
|
||||
<p data-i18n="support_label_igtext"></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12" style="display:none">
|
||||
<hr>
|
||||
<h4 style="font-weight: bold" data-i18n="support_label_donate">Donate or use our affiliate links</h4>
|
||||
<ol>
|
||||
<li data-i18n="support_label_affinstr1">Click on the appropriate link of your country</li>
|
||||
<li data-i18n="support_label_affinstr2">Everything you buy (doesn’t matter what) we get a small fee based on your turnover</li>
|
||||
<li data-i18n="support_label_affinstr3">You ALWAYS pay the same price, there is absolutely no difference. Try it out!</li>
|
||||
</ol>
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-amazon bg-color-am"></i>
|
||||
<h4>Amazon</h4>
|
||||
<ul>
|
||||
<li><a href="http://www.amazon.de/?tag=hyperionproje-21" target="_blank" data-i18n="general_country_de">Germany</a></li>
|
||||
<li><a href="http://www.amazon.com/?tag=hyperionpro05-20" target="_blank" data-i18n="general_country_us">United States</a></li>
|
||||
<li><a href="http://www.amazon.co.uk/?tag=hyperionpro02-21" target="_blank" data-i18n="general_country_uk">United Kingdom</a></li>
|
||||
<li><a href="http://www.amazon.fr/?tag=hyperionpro0c-21" target="_blank" data-i18n="general_country_fr">France</a></li>
|
||||
<li><a href="http://www.amazon.es/?tag=hyperionpro07-21" target="_blank" data-i18n="general_country_es">Spain</a></li>
|
||||
<li><a href="http://www.amazon.it/?tag=hyperionpro00-21" target="_blank" data-i18n="general_country_it">Italy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-shopping-cart bg-color-am"></i>
|
||||
<h4>ebay</h4>
|
||||
<ul>
|
||||
<li><a href="http://rover.ebay.com/rover/1/707-53477-19255-0/1?pub=5575174930&toolid=10001&campid=707-53477-19255-0&customid=&mpt=9592320&mpre=http%3A%2F%2Fwww.ebay.de" target="_blank" data-i18n="general_country_de">Germany</a></li>
|
||||
<li><a href="http://rover.ebay.com/rover/1/711-53200-19255-0/1?pub=5575174930&toolid=10001&campid=711-53200-19255-0&customid=&mpt=8091563&mpre=http%3A%2F%2Fwww.ebay.com" target="_blank" data-i18n="general_country_us">United States</a></li>
|
||||
<li><a href="http://rover.ebay.com/rover/1/710-53481-19255-0/1?pub=5575174930&toolid=10001&campid=710-53481-19255-0&customid=&mpt=9837178&mpre=http%3A%2F%2Fwww.ebay.co.uk" target="_blank" data-i18n="general_country_uk">United Kingdom</a></li>
|
||||
<li><a href="http://rover.ebay.com/rover/1/1346-53482-19255-0/1?pub=5575174930&toolid=10001&campid=1346-53482-19255-0&customid=&mpt=9890408&mpre=http%3A%2F%2Fwww.ebay.nl" target="_blank" data-i18n="general_country_nl">Netherlands</a></li>
|
||||
<li><a href="http://rover.ebay.com/rover/1/709-53476-19255-0/1?pub=5575174930&toolid=10001&campid=709-53476-19255-0&customid=&mpt=9865977&mpre=http%3A%2F%2Fwww.ebay.fr" target="_blank" data-i18n="general_country_fr">France</a></li>
|
||||
<li><a href="http://rover.ebay.com/rover/1/1185-53479-19255-0/1?pub=5575174930&toolid=10001&campid=1185-53479-19255-0&customid=&mpt=1016300&mpre=http%3A%2F%2Fwww.ebay.es" target="_blank" data-i18n="general_country_es">Spain</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-paypal bg-color-pp"></i>
|
||||
<h4>Paypal</h4>
|
||||
<p data-i18n="support_label_donationpp">Donation:</p><a href="https://www.paypal.me/hyperionproject/10" target="_blank">Paypal</a>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-btc bg-color-btc"></i>
|
||||
<h4>Bitcoin</h4>
|
||||
<p data-i18n="support_label_btctext">Address:</p>
|
||||
<p style="word-break: break-all;">1GGZbsT6fH3cGq25H5HS2PfisPfDnffSJR</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<hr>
|
||||
<h4 style="font-weight: bold" data-i18n="support_label_webrestitle">Information and help ressources</h4>
|
||||
<a href="https://www.hyperion-project.org?pk_campaign=WebUI&pk_kwd=support_webpage" target="_blank" class="unlink">
|
||||
<a href="https://hyperion-project.org" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-globe bg-color-wf"></i>
|
||||
<h4 data-i18n="support_label_webpagetitle">Webpage</h4>
|
||||
<p data-i18n="support_label_webpagetext">Home of Hyperion</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://wiki.hyperion-project.org?pk_campaign=WebUI&pk_kwd=support_wiki" target="_blank" class="unlink">
|
||||
<a href="https://docs.hyperion-project.org" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-book bg-color-wf"></i>
|
||||
<h4 data-i18n="support_label_wikititle">Wiki</h4>
|
||||
<h4 data-i18n="support_label_wikititle">Documentation</h4>
|
||||
<p data-i18n="support_label_wikitext">The A to Z source for almost everything Hyperion related</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://forum.hyperion-project.org?pk_campaign=WebUI&pk_kwd=support_forum" target="_blank" class="unlink">
|
||||
<a href="https://hyperion-project.org/forum/" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-comments bg-color-wf"></i>
|
||||
<h4 data-i18n="support_label_forumtitle">Forum</h4>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<h3 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h3>
|
||||
<div class="introd">
|
||||
<h4 data-i18n="update_label_intro">Overview about all available Hyperion versions. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest</h4>
|
||||
<h4> At the moment the install buttons are not working. Development is still ongoing here. </h4>
|
||||
<h4> At the moment the respective install button is disabled. Development is still ongoing here. </h4>
|
||||
<hr />
|
||||
</div>
|
||||
<h4 id="update_currver"></h4>
|
||||
|
@ -49,12 +49,12 @@ $(document).ready( function(error) {
|
|||
danger = 'default';
|
||||
type = 'Stable';
|
||||
}
|
||||
|
||||
|
||||
matches++;
|
||||
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-'+ danger +'"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+window.gitHubVersionList[key].tag_name+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+DOMPurify.sanitize(marked(window.gitHubVersionList[key].body))+'</p><hr><a class="btn btn-primary" href="'+ window.gitHubVersionList[key].html_url +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled":"") + '><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
|
||||
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-'+ danger +'"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+window.gitHubVersionList[key].tag_name+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+DOMPurify.sanitize(marked.parse(window.gitHubVersionList[key].body))+'</p><hr><a class="btn btn-primary" href="'+ window.gitHubVersionList[key].html_url +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled":"disabled") + '><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
|
||||
}
|
||||
$('#update_currver').append($.i18n('update_versreminder', currentVersion));
|
||||
|
||||
|
||||
if (matches == 0)
|
||||
$('#versionlist').append($.i18n('update_no_updates_for_branch'));
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -14,6 +14,10 @@ body {
|
|||
border-color: #212121;
|
||||
}
|
||||
|
||||
.navbar-default li a {
|
||||
color: #C6C6C6 !important;
|
||||
}
|
||||
|
||||
.panel-body {
|
||||
background-color: #424242;
|
||||
}
|
||||
|
@ -189,7 +193,7 @@ tr:hover td {
|
|||
}
|
||||
|
||||
.dropdown-menu>li>a {
|
||||
color: #2e6da4;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
/*Panels*/
|
||||
|
@ -220,6 +224,18 @@ tr:hover td {
|
|||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.panel-default>.panel-system{
|
||||
background-color: #0E83E7 !important;
|
||||
border-color: #212121 !important;
|
||||
color: #fff ;
|
||||
}
|
||||
|
||||
.panel-default>.panel-instance{
|
||||
background-color:#E18300 !important;
|
||||
border-color: #212121 !important;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.panel-footer {
|
||||
background-color: #424242 !important;
|
||||
border-top: 1px solid #616161 !important;
|
||||
|
@ -258,6 +274,10 @@ select.form-control {
|
|||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.keystone_correction_corners {
|
||||
border:1px solid white;
|
||||
}
|
||||
|
||||
.checkbox label::before {
|
||||
border-color: #616161;
|
||||
background-color: #212121;
|
||||
|
@ -271,18 +291,22 @@ select.form-control {
|
|||
}
|
||||
|
||||
.checklist li::before {
|
||||
color: greenyellow;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-success input[type="radio"]:checked + label::before {
|
||||
background-color: greenyellow;
|
||||
border-color: #5cb85c;
|
||||
.checkbox input[type="checkbox"]:checked + label::before, .checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-success input[type="radio"]:checked + label::before {
|
||||
border-color: #616161;
|
||||
background-color: #212121;
|
||||
}
|
||||
|
||||
.checkbox-success input[type="checkbox"]:checked + label::after, .checkbox-success input[type="radio"]:checked + label::after {
|
||||
color: #1e1e1e;
|
||||
.checkbox input[type="checkbox"]:checked + label::after, .checkbox-success input[type="checkbox"]:checked + label::after, .checkbox-success input[type="radio"]:checked + label::after {
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.radio__field:checked ~ .radio__icon::before {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) {
|
||||
border-bottom-right-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
|
@ -416,7 +440,7 @@ button.close:hover {
|
|||
}
|
||||
|
||||
.bs-callout-success {
|
||||
border-left-color: greenyellow;
|
||||
border-left-color: #67FF01;
|
||||
}
|
||||
|
||||
.bs-callout-success h4 {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
.gj-draggable{cursor:move}.gj-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;z-index:1203}.gj-dialog-bootstrap [data-role=title],.gj-dialog-bootstrap4 [data-role=title]{display:inline}.gj-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.gj-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.gj-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.gj-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.gj-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.gj-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.gj-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.gj-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.gj-dialog-footer{position:absolute;bottom:0;width:100%;margin-top:0}.gj-dialog-scrollable [data-role=body]{overflow-x:hidden;overflow-y:scroll}.gj-dialog-bootstrap,.gj-dialog-bootstrap4,.gj-dialog-md{overflow:hidden;z-index:1202}.gj-dialog-bootstrap [data-role=close]{line-height:1.42857143}.gj-dialog-bootstrap4 [data-role=close]{line-height:1.5}.gj-dialog-md{background-color:#FFF;border:none;box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);box-sizing:border-box;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.gj-dialog-md-header{padding:24px 24px 0;font-family:Roboto,Helvetica,Arial,sans-serif}.gj-dialog-md-title{margin:0;font-weight:400;display:inline;line-height:28px;font-size:20px}.gj-dialog-md-close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0;float:right;line-height:28px;font-size:28px}.gj-dialog-md-body{padding:20px 24px 24px;color:rgba(0,0,0,.54);font-family:Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:20px}.gj-dialog-md-footer{padding:8px 8px 8px 24px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;box-sizing:border-box}.gj-dialog-md-footer>:first-child{margin-right:0}.gj-dialog-md-footer>*{margin-right:8px;height:36px}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -1,64 +0,0 @@
|
|||
/*
|
||||
* metismenu - v1.1.3
|
||||
* Easy menu jQuery plugin for Twitter Bootstrap 3
|
||||
* https://github.com/onokumus/metisMenu
|
||||
*
|
||||
* Made by Osman Nuri Okumus
|
||||
* Under MIT License
|
||||
*/
|
||||
.arrow {
|
||||
float: right;
|
||||
line-height: 1.42857;
|
||||
}
|
||||
|
||||
.glyphicon.arrow:before {
|
||||
content: "\e079";
|
||||
}
|
||||
|
||||
.active > a > .glyphicon.arrow:before {
|
||||
content: "\e114";
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Require Font-Awesome
|
||||
* http://fortawesome.github.io/Font-Awesome/
|
||||
*/
|
||||
|
||||
|
||||
.fa.arrow:before {
|
||||
content: "\f104";
|
||||
}
|
||||
|
||||
.active > a > .fa.arrow:before {
|
||||
content: "\f107";
|
||||
}
|
||||
|
||||
.plus-times {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.fa.plus-times:before {
|
||||
content: "\f067";
|
||||
}
|
||||
|
||||
.active > a > .fa.plus-times {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
|
||||
-webkit-transform: rotate(45deg);
|
||||
-moz-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
-o-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.plus-minus {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.fa.plus-minus:before {
|
||||
content: "\f067";
|
||||
}
|
||||
|
||||
.active > a > .fa.plus-minus:before {
|
||||
content: "\f068";
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
/*!
|
||||
* metismenu https://github.com/onokumus/metismenu#readme
|
||||
* A collapsible jQuery menu plugin
|
||||
* @version 3.0.6
|
||||
* @author Osman Nuri Okumus <onokumus@gmail.com> (https://github.com/onokumus)
|
||||
* @license: MIT
|
||||
*/.metismenu .arrow{float:right;line-height:1.42857}*[dir=rtl] .metismenu .arrow{float:left}.metismenu .glyphicon.arrow:before{content:""}.metismenu .mm-active>a>.glyphicon.arrow:before{content:""}.metismenu .fa.arrow:before{content:""}.metismenu .mm-active>a>.fa.arrow:before{content:""}.metismenu .ion.arrow:before{content:""}.metismenu .mm-active>a>.ion.arrow:before{content:""}.metismenu .plus-times{float:right}*[dir=rtl] .metismenu .plus-times{float:left}.metismenu .fa.plus-times:before{content:""}.metismenu .mm-active>a>.fa.plus-times{transform:rotate(45deg)}.metismenu .plus-minus{float:right}*[dir=rtl] .metismenu .plus-minus{float:left}.metismenu .fa.plus-minus:before{content:""}.metismenu .mm-active>a>.fa.plus-minus:before{content:""}.metismenu .mm-collapse:not(.mm-show){display:none}.metismenu .mm-collapsing{position:relative;height:0;overflow:hidden;transition-timing-function:ease;transition-duration:.35s;transition-property:height,visibility}.metismenu .has-arrow{position:relative}.metismenu .has-arrow::after{position:absolute;content:"";width:.5em;height:.5em;border-width:1px 0 0 1px;border-style:solid;border-color:initial;right:1em;transform:rotate(-45deg) translate(0, -50%);transform-origin:top;top:50%;transition:all .3s ease-out}*[dir=rtl] .metismenu .has-arrow::after{right:auto;left:1em;transform:rotate(135deg) translate(0, -50%)}.metismenu .mm-active>.has-arrow::after,.metismenu .has-arrow[aria-expanded=true]::after{transform:rotate(-135deg) translate(0, -50%)}*[dir=rtl] .metismenu .mm-active>.has-arrow::after,*[dir=rtl] .metismenu .has-arrow[aria-expanded=true]::after{transform:rotate(225deg) translate(0, -50%)}/*# sourceMappingURL=metisMenu.min.css.map */
|
Binary file not shown.
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 1.4 KiB |
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 382 KiB After Width: | Height: | Size: 377 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"dashboard_alert_message_confedit": "La teva configuració d'Hyperion s'ha modificat. Per aplicar-la, reinicia Hyperion.",
|
||||
"dashboard_alert_message_confedit_t": "Configuració modificada",
|
||||
"dashboard_alert_message_confsave_success_t": "Configuració guardada",
|
||||
"dashboard_alert_message_disabled_t": "Instància de maquinari LED deshabilitada",
|
||||
"dashboard_componentbox_label_comp": "Component",
|
||||
"dashboard_componentbox_label_status": "Estat",
|
||||
"dashboard_componentbox_label_title": "Estat del component",
|
||||
"dashboard_infobox_label_currenthyp": "La teva versió d'Hyperion:",
|
||||
"dashboard_infobox_label_disableh": "Desactivar instància: 1 $",
|
||||
"dashboard_infobox_label_enableh": "Activar instància: 1 $",
|
||||
"dashboard_infobox_label_instance": "Instànica:",
|
||||
"dashboard_infobox_label_latesthyp": "La darrera versió d'Hyperion:",
|
||||
"dashboard_infobox_label_platform": "Plataforma:",
|
||||
"dashboard_infobox_label_ports": "Ports:",
|
||||
"dashboard_infobox_label_smartacc": "Accés intel·ligent",
|
||||
"dashboard_infobox_label_statush": "Estat d'Hyperion:",
|
||||
"dashboard_infobox_label_title": "Informació",
|
||||
"dashboard_infobox_message_updatesuccess": "Estàs executant la darrera versió d'Hyperion.",
|
||||
"dashboard_infobox_message_updatewarning": "Hi ha una nova versió d'Hyperion disponible! (1 $)",
|
||||
"dashboard_label_intro": "El panell de control et dona una vista ràpida de l'estat d'Hyperion",
|
||||
"dashboard_newsbox_label_title": "Bloc d'Hyperion",
|
||||
"dashboard_newsbox_readmore": "Llegeix més",
|
||||
"dashboard_newsbox_visitblog": "Visita el bloc d'Hyperion",
|
||||
"general_access_advanced": "Avançat",
|
||||
"general_access_default": "Per defecte",
|
||||
"general_access_expert": "Expert",
|
||||
"general_btn_back": "Tornar",
|
||||
"general_btn_cancel": "Cancel.la",
|
||||
"general_btn_continue": "Continuar",
|
||||
"general_btn_next": "Següent",
|
||||
"general_btn_off": "Off",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_on": "On",
|
||||
"general_btn_restarthyperion": "Reinicia Hyperion",
|
||||
"general_btn_save": "Guarda",
|
||||
"general_btn_saveandreload": "Guarda i recarrega",
|
||||
"general_btn_yes": "Sí",
|
||||
"general_button_savesettings": "Guarda la configuració",
|
||||
"general_col_blue": "blau",
|
||||
"general_col_green": "verd",
|
||||
"general_col_red": "vermell",
|
||||
"general_comp_BLACKBORDER": "Bandes fosques",
|
||||
"general_comp_GRABBER": "Captura Pantalla",
|
||||
"general_comp_LEDDEVICE": "Sortida LED",
|
||||
"general_comp_SMOOTHING": "Suavitzat",
|
||||
"general_comp_V4L": "Captura l'entrada USB",
|
||||
"general_country_de": "Alemany",
|
||||
"general_country_es": "Espanya",
|
||||
"general_country_fr": "França",
|
||||
"general_country_it": "Itàlia",
|
||||
"general_country_nl": "Països Baixos",
|
||||
"general_country_uk": "Regne Unit",
|
||||
"general_country_us": "Estats Units",
|
||||
"general_speech_cs": "Txec",
|
||||
"general_speech_de": "Alemany",
|
||||
"general_speech_en": "Anglès",
|
||||
"general_speech_es": "Espanyol",
|
||||
"general_speech_it": "Italià",
|
||||
"general_webui_title": "Hyperion - Configuració Web"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"dashboard_infobox_label_currenthyp": "Din Hyperion version:",
|
||||
"dashboard_infobox_label_latesthyp": "Seneste Hyperion version:",
|
||||
"dashboard_infobox_label_platform": "Platform:",
|
||||
"dashboard_infobox_label_title": "Information",
|
||||
"dashboard_label_intro": "Dashboardet giver dig en hurtig oversigt over status af Hyperion",
|
||||
"general_access_advanced": "Avanceret",
|
||||
"general_access_default": "Standart",
|
||||
"general_access_expert": "Ekspert",
|
||||
"general_btn_back": "Tilbage",
|
||||
"general_btn_cancel": "Annullere",
|
||||
"general_btn_continue": "Fortsæt",
|
||||
"general_btn_iswitch": "Skift",
|
||||
"general_btn_next": "Næste",
|
||||
"general_btn_off": "Fra",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_on": "Til",
|
||||
"general_btn_restarthyperion": "Genstart Hyperion",
|
||||
"general_btn_save": "Gem",
|
||||
"general_btn_saveandreload": "Gem og genindlæs",
|
||||
"general_btn_yes": "Ja",
|
||||
"general_button_savesettings": "Gem indstillinger",
|
||||
"general_col_blue": "blå",
|
||||
"general_col_green": "grøn",
|
||||
"general_col_red": "rød",
|
||||
"general_comp_BLACKBORDER": "Blackbar Detektion",
|
||||
"general_comp_BOBLIGHTSERVER": "Boblight Server",
|
||||
"general_comp_FLATBUFSERVER": "Flatbuffers Server",
|
||||
"general_comp_FORWARDER": "Forwarder",
|
||||
"general_comp_GRABBER": "Optag skærm",
|
||||
"general_comp_LEDDEVICE": "LED output",
|
||||
"general_comp_PROTOSERVER": "Protocol Buffers Server",
|
||||
"general_comp_SMOOTHING": "Udjævning",
|
||||
"general_comp_V4L": "Optag USB-input",
|
||||
"general_country_de": "Tyskland",
|
||||
"general_country_es": "Spanien",
|
||||
"general_country_fr": "Frankrig",
|
||||
"general_country_it": "Italien",
|
||||
"general_country_nl": "Holland",
|
||||
"general_country_uk": "England",
|
||||
"general_country_us": "USA",
|
||||
"general_speech_cs": "Tjekkisk",
|
||||
"general_speech_de": "Tysk",
|
||||
"general_speech_en": "Engelsk",
|
||||
"general_speech_es": "Spansk",
|
||||
"general_speech_it": "Italiensk",
|
||||
"general_webui_title": "Hyperion - Webkonfiguration",
|
||||
"general_wiki_moreto": "Mere information om \"$1\" på vores Wiki"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,646 @@
|
|||
{
|
||||
"InfoDialog_access_text": "Ανάλογα με το επίπεδο ρυθμίσεων, μπορείτε να προσαρμόσετε περισσότερες επιλογές ή να αποκτήσετε πρόσβαση σε περισσότερες δυνατότητες. Συνιστάται το επίπεδο \"Προεπιλογή\".",
|
||||
"InfoDialog_access_title": "Επίπεδα Ρυθμίσεων",
|
||||
"InfoDialog_changePassword_success": "Ο κωδικός πρόσβασης αποθηκεύτηκε με επιτυχία!",
|
||||
"InfoDialog_changePassword_title": "Αλλαγή κωδικού",
|
||||
"InfoDialog_iswitch_text": "Εάν εκτελείτε το Hyperion περισσότερες από μία φορές στο τοπικό σας δίκτυο, μπορείτε να κάνετε εναλλαγή μεταξύ των διαμορφώσεων ιστού. Επιλέξτε την παρουσία Hyperion παρακάτω και αλλάξτε!",
|
||||
"InfoDialog_nostorage_text": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει τοπική αποθήκευση. Δεν μπορείτε να αποθηκεύσετε μια συγκεκριμένη ρύθμιση γλώσσας (επιστροφή στην «αυτόματη ανίχνευση») και επίπεδο πρόσβασης (επιστροφή στην «προεπιλογή»). Μερικοί μάγοι μπορεί να είναι κρυφοί. Θα μπορούσατε ακόμα να χρησιμοποιήσετε τη διεπαφή ιστού χωρίς περαιτέρω προβλήματα",
|
||||
"InfoDialog_nowrite_foottext": "Το WebUI θα ξεκλειδωθεί αυτόματα μόλις λύσετε το πρόβλημα!",
|
||||
"InfoDialog_nowrite_text": "Το Hyperion δεν μπορεί να γράψει στο τρέχον φορτωμένο αρχείο διαμόρφωσης. Επιδιορθώστε τα δικαιώματα του αρχείου για να συνεχίσετε.",
|
||||
"InfoDialog_nowrite_title": "Σφάλμα άδειας εγγραφής!",
|
||||
"about_3rd_party_licenses": "Άδεια τρίτου μέρους",
|
||||
"about_credits": "Πιστώσεις σε όλους αυτούς τους προγραμματιστές!",
|
||||
"about_resources": "$1 βιβλιοθήκες",
|
||||
"about_translations": "Μεταφράσεις",
|
||||
"about_version": "Έκδοση",
|
||||
"conf_colors_blackborder_intro": "Παραλείψτε τις μαύρες μπάρες όπου κι αν βρίσκονται. Κάθε λειτουργία χρησιμοποιεί έναν άλλο αλγόριθμο ανίχνευσης που είναι συντονισμένος για ειδικές καταστάσεις. Αυξήστε το όριο αν δεν λειτουργεί για εσάς.",
|
||||
"conf_colors_color_intro": "Δημιουργήστε ένα ή περισσότερα προφίλ βαθμονόμησης, προσαρμόστε κάθε χρώμα, φωτεινότητα, γραμμικοποίηση και άλλα.",
|
||||
"conf_effect_fgeff_intro": "Καθορίστε ένα εφέ εκκίνησης ή ένα χρώμα, το οποίο εμφανίζεται κατά την εκκίνηση του Hyperion για την καθορισμένη διάρκεια.",
|
||||
"conf_effect_path_intro": "Φόρτωση εφέ από τις καθορισμένες διαδρομές. Επιπλέον, μπορείτε να απενεργοποιήσετε μεμονωμένα εφέ ονομαστικά για να τα αποκρύψετε από όλες τις λίστες εφέ.",
|
||||
"conf_general_impexp_expbtn": "Εξαγωγή",
|
||||
"conf_general_impexp_impbtn": "Εισαγωγή",
|
||||
"conf_general_impexp_l1": "Εισαγάγετε μια διαμόρφωση επιλέγοντας ένα αρχείο διαμόρφωσης παρακάτω και κάντε κλικ στο \"Εισαγωγή\".",
|
||||
"conf_general_impexp_l2": "Εξάγετε μια διαμόρφωση κάνοντας κλικ στο \"Εξαγωγή\". Το πρόγραμμα περιήγησής σας ξεκινά μια λήψη.",
|
||||
"conf_general_impexp_title": "Εισαγωγή/Εξαγωγή διαρύθμισης",
|
||||
"conf_general_inst_actionhead": "Ενέργεια",
|
||||
"conf_general_inst_desc": "Χρησιμοποιήστε διαφορετικό υλικό LED ταυτόχρονα. Κάθε στιγμιότυπο εκτελείται ανεξάρτητα το ένα από το άλλο, γεγονός που επιτρέπει διαφορετικές διατάξεις LED και ρυθμίσεις βαθμονόμησης. Οι εμφανίσεις που εκτελούνται είναι διαθέσιμες στην επάνω γραμμή εικονιδίων",
|
||||
"conf_general_intro": "Βασικές ρυθμίσεις γύρω από το Hyperion και το WebUI που δεν ταιριάζουν σε άλλη κατηγορία.",
|
||||
"conf_general_label_title": "Γενικές ρυθμίσεις",
|
||||
"conf_grabber_fg_intro": "Η καταγραφή οθόνης είναι η λήψη του τοπικού σας συστήματος ως πηγή εισόδου, στο οποίο είναι εγκατεστημένο το Hyperion.",
|
||||
"conf_grabber_v4l_intro": "Η λήψη USB είναι μια συσκευή (λήψης) που συνδέεται μέσω USB και χρησιμοποιείται για την εισαγωγή εικόνων πηγής για επεξεργασία.",
|
||||
"conf_helptable_expl": "Εξήγηση",
|
||||
"conf_helptable_option": "Επιλογή",
|
||||
"conf_leds_contr_label_contrtype": "Είδος χειριστή:",
|
||||
"conf_leds_device_intro": "Το Hyperion υποστηρίζει πολλούς ελεγκτές για τη μετάδοση δεδομένων στη συσκευή-στόχο σας. Επιλέξτε έναν ελεγκτή LED από την ταξινομημένη λίστα και διαμορφώστε τον. Έχουμε επιλέξει τις καλύτερες προεπιλεγμένες ρυθμίσεις για κάθε συσκευή.",
|
||||
"conf_leds_error_get_properties_text": "Αποτυχία λήψης των ιδιοτήτων της συσκευής. Ελέγξτε τα στοιχεία διαμόρφωσης.",
|
||||
"conf_leds_error_get_properties_title": "Ιδιότητες συσκευής",
|
||||
"conf_leds_layout_advanced": "Προχωρημένες Ρυθμίσεις",
|
||||
"conf_leds_layout_blacklist_num_title": "Αριθμός LED",
|
||||
"conf_leds_layout_blacklist_start_title": "Εκκίνηση LED",
|
||||
"conf_leds_layout_btn_checklist": "Δείξε λίστα ελέγχου",
|
||||
"conf_leds_layout_button_savelay": "Αποθήκευση Διάταξης",
|
||||
"conf_leds_layout_button_updsim": "Ενημέρωση Προεπισκόπησης",
|
||||
"conf_leds_layout_checkp1": "Το μαύρο LED είναι το πρώτο LED, το πρώτο LED είναι το σημείο όπου εισέρχεται το σήμα",
|
||||
"conf_leds_layout_checkp2": "Η διάταξη είναι πάντα η μπροστινή όψη της τηλεόρασής σας, ποτέ η πίσω όψη.",
|
||||
"conf_leds_layout_checkp3": "Βεβαιωθείτε ότι η κατεύθυνση είναι σωστή. Τα γκρι LED υποδεικνύουν τον αριθμό LED 2 και 3 για οπτικοποίηση της κατεύθυνσης των δεδομένων.",
|
||||
"conf_leds_layout_checkp4": "Κενό θήκης: Για να δημιουργήσετε ένα κενό, αγνοήστε το πρώτα όταν ορίζετε Πάνω/Κάτω/Αριστερά/Δεξιά και στη συνέχεια ορίστε το μήκος του διακένου σας για να αφαιρέσετε μια ποσότητα led. Τροποποιήστε τη θέση του κενού μέχρι να ταιριάζει.",
|
||||
"conf_leds_layout_cl_bottom": "Κάτω",
|
||||
"conf_leds_layout_cl_bottomleft": "Κάτω αριστερά (Γωνία)",
|
||||
"conf_leds_layout_cl_bottomright": "Κάτω Δεξιά (Γωνία)",
|
||||
"conf_leds_layout_cl_gaglength": "Μήκος κενού",
|
||||
"conf_leds_layout_cl_gappos": "θέση κενού",
|
||||
"conf_leds_layout_cl_hleddepth": "Οριζόντιο βάθος LED",
|
||||
"conf_leds_layout_cl_inppos": "Θέση Εισαγωγής",
|
||||
"conf_leds_layout_cl_left": "Αριστερά",
|
||||
"conf_leds_layout_cl_leftbottom": "Αριστερά 50% - 100% Κάτω",
|
||||
"conf_leds_layout_cl_leftmiddle": "Αριστερά 25% - 75% Μέση",
|
||||
"conf_leds_layout_cl_lefttop": "Αριστερά 0% - 50% Πάνω",
|
||||
"conf_leds_layout_cl_lightPosBottomLeft11": "Κάτω: 75 - 100% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosBottomLeft112": "Κάτω: 0 - 50% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosBottomLeft12": "Κάτω: 25 - 50% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosBottomLeft121": "Κάτω: 50 - 100% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosBottomLeft14": "Κάτω: 0 - 25% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosBottomLeft34": "Κάτω: 50 - 75% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Κάτω: 25 - 75% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosTopLeft112": "Πάνω: 0 - 50% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosTopLeft121": "Πάνω: 50 - 100% από Αριστερά",
|
||||
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Πάνω: 25 - 75% από Αριστερά",
|
||||
"conf_leds_layout_cl_overlap": "Αλληλοεπικάλυψη",
|
||||
"conf_leds_layout_cl_reversdir": "Αντίστροφη κατεύθυνση",
|
||||
"conf_leds_layout_cl_right": "Δεξιά",
|
||||
"conf_leds_layout_cl_rightbottom": "Δεξιά 50% - 100% Κάτω",
|
||||
"conf_leds_layout_cl_rightmiddle": "Δεξιά 25% - 75% Μέση",
|
||||
"conf_leds_layout_cl_righttop": "Δεξιά 0% - 50% Πάνω",
|
||||
"conf_leds_layout_cl_top": "Πάνω",
|
||||
"conf_leds_layout_cl_topleft": "Πάνω αριστερά (Γωνία)",
|
||||
"conf_leds_layout_cl_topright": "Πάνω Δεξιά (Γωνία)",
|
||||
"conf_leds_layout_cl_vleddepth": "Κάθετο βάθος LED",
|
||||
"conf_leds_layout_frame": "Κλασική διάταξη (Κορνίζα LED)",
|
||||
"conf_leds_layout_generatedconf": "Δημιουργία/Τρέχουσα διαμόρφωση LED",
|
||||
"conf_leds_layout_intro": "Χρειάζεστε επίσης μια διάταξη LED, η οποία αντικατοπτρίζει τις θέσεις LED σας. Η κλασική διάταξη είναι το συνήθως χρησιμοποιούμενο πλαίσιο τηλεόρασης, αλλά υποστηρίζουμε επίσης τη δημιουργία LED matrix (LED walls). Η προβολή αυτής της διάταξης είναι ΠΑΝΤΑ από το ΜΠΡΟΣΤΑ της τηλεόρασής σας.",
|
||||
"conf_leds_layout_ma_cabling": "Καλωδίωση",
|
||||
"conf_leds_layout_ma_direction": "Διεύθυνση",
|
||||
"conf_leds_layout_ma_horiz": "Οριζόντια",
|
||||
"conf_leds_layout_ma_optbottomleft": "Κάτω Αριστερά",
|
||||
"conf_leds_layout_ma_optbottomright": "Κάτω Δεξιά",
|
||||
"conf_leds_layout_ma_opthoriz": "Οριζόντια",
|
||||
"conf_leds_layout_ma_optparallel": "Παράλληλα",
|
||||
"conf_leds_layout_ma_optsnake": "Φιδάκι",
|
||||
"conf_leds_layout_ma_opttopleft": "Πάνω Αριστερά",
|
||||
"conf_leds_layout_ma_opttopright": "Πάνω Δεξιά",
|
||||
"conf_leds_layout_ma_optvert": "Κάθετα",
|
||||
"conf_leds_layout_ma_order": "Σειρά",
|
||||
"conf_leds_layout_ma_position": "Εισαγωγή",
|
||||
"conf_leds_layout_ma_vert": "Κάθετα",
|
||||
"conf_leds_layout_matrix": "Διάταξη Μήτρας (Τοίχος LED)",
|
||||
"conf_leds_layout_pbl": "Δείξτε κάτω Αριστερά",
|
||||
"conf_leds_layout_pbr": "Δείξτε κάτω Δεξιά",
|
||||
"conf_leds_layout_preview_l1": "Αυτό είναι το πρώτο σας LED (θέση εισόδου)",
|
||||
"conf_leds_layout_preview_l2": "Αυτό οπτικοποιεί την κατεύθυνση των δεδομένων (δεύτερο/τρίτο LED)",
|
||||
"conf_leds_layout_preview_ledpower": "Μέγιστη κατανάλωση ενέργειας: $1 Α",
|
||||
"conf_leds_layout_preview_originCL": "Δημιουργήθηκε από: Κλασική διάταξη (πλαίσιο LED)",
|
||||
"conf_leds_layout_preview_originMA": "Δημιουργήθηκε από: Διάταξη Μήτρας (τείχος LED)",
|
||||
"conf_leds_layout_preview_totalleds": "Πλήθος LED: $1",
|
||||
"conf_leds_layout_ptl": "Δείξτε πάνω Αριστερά",
|
||||
"conf_leds_layout_ptlh": "Οριζόντια",
|
||||
"conf_leds_layout_ptln": "Τριπλό σημείο",
|
||||
"conf_leds_layout_ptlv": "Κάθετα",
|
||||
"conf_leds_layout_ptr": "Δείξτε πάνω Δεξιά",
|
||||
"conf_leds_layout_textf1": "Αυτό το πεδίο κειμένου εμφανίζει από προεπιλογή την τρέχουσα φορτωμένη διάταξη και θα αντικατασταθεί εάν δημιουργήσετε μια νέα με τις παραπάνω επιλογές. Προαιρετικά, μπορείτε να πραγματοποιήσετε περαιτέρω επεξεργασίες.",
|
||||
"conf_leds_nav_label_ledcontroller": "Χειριστής LED",
|
||||
"conf_leds_nav_label_ledlayout": "Διάταξη LED",
|
||||
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
|
||||
"conf_leds_optgroup_RPiPWM": "PRI PWM",
|
||||
"conf_leds_optgroup_RPiSPI": "RPi SPI",
|
||||
"conf_leds_optgroup_network": "Δίκτυο",
|
||||
"conf_leds_optgroup_other": "Άλλο",
|
||||
"conf_leds_optgroup_usb": "USB/Serial",
|
||||
"conf_logging_contpolicy": "Αναφορά Πολιτικής Απορρήτου",
|
||||
"conf_logging_lastreports": "Προηγούμενες αναφορές",
|
||||
"conf_logging_report": "Αναφορά",
|
||||
"conf_logging_uplfailed": "Η μεταφόρτωση απέτυχε! Ελέγξτε τη σύνδεσή σας στο Διαδίκτυο!",
|
||||
"conf_logging_uploading": "Προετοιμασία δεδομένων...",
|
||||
"conf_logging_uplpolicy": "Κάνοντας κλικ σε αυτό το κουμπί αποδέχεστε το",
|
||||
"conf_network_forw_intro": "Προωθήστε όλες τις εισόδους σε μια δεύτερη εγκατάσταση Hyperion που θα μπορούσε να οδηγηθεί με άλλο ελεγκτή LED",
|
||||
"conf_network_tok_cidhead": "Περιγραφή",
|
||||
"conf_network_tok_desc": "Τα διακριτικά παρέχουν σε άλλες εφαρμογές πρόσβαση στο Hyperion API, μια εφαρμογή μπορεί να ζητήσει ένα διακριτικό όπου πρέπει να το αποδεχτείτε ή να τις δημιουργήσετε μόνοι σας παρακάτω. Αυτά τα διακριτικά απαιτούνται απλώς όταν η \"Εξουσιοδότηση API\" είναι ενεργοποιημένη στις ρυθμίσεις δικτύου.",
|
||||
"conf_network_tok_grantMsg": "Μια εφαρμογή ζήτησε ένα διακριτικό για να αποκτήσει πρόσβαση στο Hyperion API. Θέλετε να παραχωρήσετε πρόσβαση; Επαληθεύστε τις παρεχόμενες πληροφορίες!",
|
||||
"conf_network_tok_lastuse": "Τελευταία χρήση",
|
||||
"conf_network_tok_title": "Διαχείρηση Διακριτικών",
|
||||
"conf_webconfig_label_intro": "Ρυθμίσεις Webconfiguration. Επεξεργαστείτε με σύνεση.",
|
||||
"dashboard_alert_message_confedit": "Η διαμόρφωση του Hyperion έχει τροποποιηθεί. Για να το εφαρμόσετε, επανεκκινήστε το Hyperion.",
|
||||
"dashboard_alert_message_confsave_success": "Η διαμόρφωσή σας στο Hyperion αποθηκεύτηκε επιτυχώς. Οι αλλαγές σας είναι πλέον ενεργές.",
|
||||
"dashboard_alert_message_confsave_success_t": "Η διαμόρφωση αποθηκεύτηκε",
|
||||
"dashboard_componentbox_label_comp": "Στοιχείο",
|
||||
"dashboard_componentbox_label_status": "Κατάσταση",
|
||||
"dashboard_componentbox_label_title": "Κατάσταση στοιχείου",
|
||||
"dashboard_infobox_label_currenthyp": "Η έκδοση Hyperion σας:",
|
||||
"dashboard_infobox_label_disableh": "Απενεργοποίηση Περίπτωσης: $1",
|
||||
"dashboard_infobox_label_enableh": "Ενεργοποίηση Περίπτωσης: $1",
|
||||
"dashboard_infobox_label_instance": "Περίπτωση:",
|
||||
"dashboard_infobox_label_latesthyp": "Η τελευταία έκδοση Hyperion:",
|
||||
"dashboard_infobox_label_platform": "Πλατφόρμα",
|
||||
"dashboard_infobox_label_ports": "Θύρες",
|
||||
"dashboard_infobox_label_smartacc": "Έξυπνη πρόσβαση",
|
||||
"dashboard_infobox_label_statush": "Κατάσταση Hyperion:",
|
||||
"dashboard_infobox_label_title": "Πληροφορίες",
|
||||
"dashboard_infobox_message_updatesuccess": "Τρέχεται την τελευταία έκδοση Hyperion.",
|
||||
"dashboard_infobox_message_updatewarning": "Μια νεότερη έκδοση του Hyperion είναι διαθέσιμη! (1$)",
|
||||
"dashboard_label_intro": "Ο πίνακας ελέγχου σας δίνει μια σύντομη περιγραφή για τη κατάσταση του Hyperion",
|
||||
"dashboard_newsbox_label_title": "Hyperion-Blog",
|
||||
"dashboard_newsbox_noconn": "Δεν μπορείτε να συνδεθείτε με το Hyperion Server για να ανακτήσετε τις τελευταίες δημοσιεύσεις, λειτουργεί το διαδύκτιο σας;",
|
||||
"dashboard_newsbox_readmore": "Διαβάστε παραπάνω",
|
||||
"dashboard_newsbox_visitblog": "Επισκεφτείτε Hyperion-Blog ",
|
||||
"edt_append_degree": "°",
|
||||
"edt_append_frames": "καρέ",
|
||||
"edt_append_hz": "Hz",
|
||||
"edt_append_leds": "LED",
|
||||
"edt_append_ms": "ms",
|
||||
"edt_append_ns": "ns",
|
||||
"edt_append_percent": "%",
|
||||
"edt_append_percent_h": "% hori",
|
||||
"edt_append_percent_v": "% vert",
|
||||
"edt_append_pixel": "Πίξελ",
|
||||
"edt_append_s": "s",
|
||||
"edt_append_sdegree": "s/μοίρα",
|
||||
"edt_conf_bb_blurRemoveCnt_title": "Θόλωσε πίξελ",
|
||||
"edt_conf_bb_mode_title": "Τρόπο",
|
||||
"edt_conf_bb_threshold_title": "Κατώφλι",
|
||||
"edt_conf_color_black_expl": "Η βαθμονομημένη τιμή μαύρου.",
|
||||
"edt_conf_color_black_title": "Μαύρο",
|
||||
"edt_conf_color_blue_expl": "Η βαθμονομημένη τιμή μπλε.",
|
||||
"edt_conf_color_blue_title": "Μπλε",
|
||||
"edt_conf_color_channelAdjustment_header_expl": "Δημιουργήστε προφίλ χρωμάτων που θα μπορούσαν να αντιστοιχιστούν σε ένα συγκεκριμένο στοιχείο. Προσαρμόστε χρώμα, γάμμα, φωτεινότητα, αντιστάθμιση και πολλά άλλα.",
|
||||
"edt_conf_color_channelAdjustment_header_itemtitle": "Προφίλ",
|
||||
"edt_conf_color_cyan_expl": "Η βαθμονομημένη τιμή κυανού.",
|
||||
"edt_conf_color_cyan_title": "Κυανό",
|
||||
"edt_conf_color_green_expl": "Η βαθμονομημένη τιμή πράσινου.",
|
||||
"edt_conf_color_green_title": "Πράσινο",
|
||||
"edt_conf_color_heading_title": "Βαθμονόμηση Χρώματος",
|
||||
"edt_conf_color_id_title": "ID",
|
||||
"edt_conf_color_imageToLedMappingType_expl": "Αντικαθιστά την εκχώρηση περιοχής LED της διάταξης LED εάν δεν είναι \"πολύχρωμη\"",
|
||||
"edt_conf_color_leds_expl": "Αντιστοιχίστε αυτήν τη ρύθμιση σε όλα τα LED (*) ή μόνο σε μερικά (0-24).",
|
||||
"edt_conf_color_leds_title": "Δείκτης LED",
|
||||
"edt_conf_color_magenta_expl": "Η βαθμονομημένη τιμή ματζέντας.",
|
||||
"edt_conf_color_magenta_title": "Ματζέντα",
|
||||
"edt_conf_color_red_expl": "Η βαθμονομημένη τιμή κόκκινου.",
|
||||
"edt_conf_color_red_title": "Κόκκινο",
|
||||
"edt_conf_color_saturationGain_expl": "Ρυθμίζει τον κορεσμό των χρωμάτων. 1,0 σημαίνει καμία αλλαγή, πάνω από 1,0 αυξάνει τον κορεσμό, κάτω από 1,0 αποκορεσμένα.",
|
||||
"edt_conf_color_white_expl": "Η βαθμονομημένη τιμή λευκού.",
|
||||
"edt_conf_color_white_title": "Λευκό",
|
||||
"edt_conf_color_yellow_expl": "Η βαθμονομημένη τιμή κίτρινου.",
|
||||
"edt_conf_color_yellow_title": "Κίτρινο",
|
||||
"edt_conf_enum_BOTH": "Οριζόντια & Κάθετα",
|
||||
"edt_conf_enum_HORIZONTAL": "Οριζόντια",
|
||||
"edt_conf_enum_NO_CHANGE": "Αυτόματο",
|
||||
"edt_conf_enum_NTSC": "NTSC",
|
||||
"edt_conf_enum_PAL": "PAL",
|
||||
"edt_conf_enum_SECAM": "SECAM",
|
||||
"edt_conf_enum_VERTICAL": "Κάθετα",
|
||||
"edt_conf_enum_automatic": "Αυτόματο",
|
||||
"edt_conf_enum_bbclassic": "Κλασσικό",
|
||||
"edt_conf_enum_bbletterbox": "Γραμματοκιβώτιο",
|
||||
"edt_conf_enum_bbosd": "OSD",
|
||||
"edt_conf_enum_bgr": "BGR",
|
||||
"edt_conf_enum_brg": "BRG",
|
||||
"edt_conf_enum_color": "Χρώμα",
|
||||
"edt_conf_enum_decay": "Αποσύνθεση",
|
||||
"edt_conf_enum_dl_error": "Σφάλμα",
|
||||
"edt_conf_enum_dl_verbose1": "Επίπεδο πολυγλωσσίας 1",
|
||||
"edt_conf_enum_dl_verbose2": "Επίπεδο πολυγλωσσίας 2",
|
||||
"edt_conf_enum_dl_verbose3": "Επίπεδο πολυγλωσσίας 3",
|
||||
"edt_conf_enum_effect": "Εφέ",
|
||||
"edt_conf_enum_gbr": "GBR",
|
||||
"edt_conf_enum_grb": "GRB",
|
||||
"edt_conf_enum_hsv": "HSV",
|
||||
"edt_conf_enum_linear": "Γραμμικό",
|
||||
"edt_conf_enum_logsilent": "Αθόρυβο",
|
||||
"edt_conf_enum_logwarn": "Προειδοποίση",
|
||||
"edt_conf_enum_multicolor_mean": "Πολύχρωμο",
|
||||
"edt_conf_enum_please_select": "Παρακαλώ Επιλέξτε",
|
||||
"edt_conf_enum_rbg": "RBG",
|
||||
"edt_conf_enum_rgb": "RGB",
|
||||
"edt_conf_enum_transeffect_smooth": "Λείο",
|
||||
"edt_conf_enum_transeffect_sudden": "Απότομο",
|
||||
"edt_conf_enum_udp_ddp": "DDP",
|
||||
"edt_conf_enum_udp_raw": "RAW",
|
||||
"edt_conf_enum_unicolor_mean": "Μονοχρωματικό",
|
||||
"edt_conf_fg_display_title": "Απεικόνηση",
|
||||
"edt_conf_fg_heading_title": "Καταγραφή Οθόνης",
|
||||
"edt_conf_fg_height_expl": "Συρρικνώστε την εικόνα σε αυτό το ύψος, καθώς η ακατέργαστη εικόνα χρειάζεται πολύ χρόνο cpu.",
|
||||
"edt_conf_fg_height_title": "Ύψος",
|
||||
"edt_conf_fg_type_title": "Είδος",
|
||||
"edt_conf_fg_width_expl": "Συρρικνώστε την εικόνα σε αυτό το πλάτος, καθώς η ακατέργαστη εικόνα χρειάζεται πολύ χρόνο cpu.",
|
||||
"edt_conf_fg_width_title": "Πλάτος",
|
||||
"edt_conf_fge_color_expl": "Εάν ο τύπος είναι \"Χρώμα\", ορίστε ένα χρώμα της επιλογής σας εδώ.",
|
||||
"edt_conf_fge_color_title": "Χρώμα",
|
||||
"edt_conf_fge_duration_ms_title": "Διάρκεια.",
|
||||
"edt_conf_fge_effect_expl": "Εάν ο τύπος είναι \"Εφέ\", ορίστε ένα εφέ της επιλογής σας εδώ.",
|
||||
"edt_conf_fge_effect_title": "Εφέ",
|
||||
"edt_conf_fge_type_expl": "Επιλέξτε ανάμεσα σε χρώμα ή εφέ.",
|
||||
"edt_conf_fge_type_title": "Είδος",
|
||||
"edt_conf_fw_remote_service_discovered_none": "Δεν ανακαλύφθηκαν απομακρυσμένες υπηρεσίες",
|
||||
"edt_conf_fw_service_name_expl": "Όνομα του παρόχου υπηρεσιών",
|
||||
"edt_conf_fw_service_name_title": "Όνομα υπηρεσίας",
|
||||
"edt_conf_gen_configVersion_title": "Έκδοση διαμόρφωσης",
|
||||
"edt_conf_gen_heading_title": "Γενικές Ρυθμίσεις",
|
||||
"edt_conf_gen_name_expl": "Ένα όνομα καθορισμένο από το χρήστη που χρησιμοποιείται για τον εντοπισμό του Hyperion. (Χρήσιμο με περισσότερες από μία περιπτώσεις Hyperion)",
|
||||
"edt_conf_gen_name_title": "Όνομα διαμόρφωσης",
|
||||
"edt_conf_gen_showOptHelp_expl": "Εμφάνιση όλων των διαθέσιμων επεξηγήσεων σε κάθε ενότητα. Συνιστάται ανεπιφύλακτα για αρχάριους!",
|
||||
"edt_conf_gen_showOptHelp_title": "Δείξε παραδείγματα",
|
||||
"edt_conf_general_port_expl": "Η θύρα που χρησιμοποιείται.",
|
||||
"edt_conf_general_port_title": "Θύρα",
|
||||
"edt_conf_net_apiAuth_expl": "Επιβολή όλων των εφαρμογών που χρησιμοποιούν το Hyperion API για έλεγχο ταυτότητας έναντι του Hyperion (Εξαίρεση: βλ. \"Τοπικός έλεγχος ταυτότητας API\"). Υψηλότερη ασφάλεια, καθώς ελέγχετε την πρόσβαση και την ανακαλείτε ανά πάσα στιγμή.",
|
||||
"edt_conf_net_apiAuth_title": "Αυθεντικοποίηση ΑΡΙ",
|
||||
"edt_conf_net_heading_title": "Δίκτυο",
|
||||
"edt_conf_net_ip_itemtitle": "ΙΡ",
|
||||
"edt_conf_smooth_decay_expl": "Η ταχύτητα της αποσύνθεσης. Το 1 είναι γραμμικό, οι μεγαλύτερες τιμές έχουν ισχυρότερο αποτέλεσμα.",
|
||||
"edt_conf_smooth_decay_title": "Αποσύνθεση-Δύναμη",
|
||||
"edt_conf_smooth_dithering_title": "Χρωματική αντιπαράθεση",
|
||||
"edt_conf_smooth_heading_title": "Λείανση",
|
||||
"edt_conf_smooth_interpolationRate_expl": "Ταχύτητα υπολογισμού λείων ενδιάμεσων πλαισίων.",
|
||||
"edt_conf_smooth_interpolationRate_title": "Ρυθμός Παρεμβολής",
|
||||
"edt_conf_smooth_outputRate_expl": "Η ταχύτητα εξόδου του χειριστή LED σας.",
|
||||
"edt_conf_smooth_outputRate_title": "Ρυθμός Εξόδου",
|
||||
"edt_conf_smooth_time_ms_title": "Χρόνος",
|
||||
"edt_conf_smooth_type_expl": "Είδος λείανσης.",
|
||||
"edt_conf_smooth_type_title": "Είδος",
|
||||
"edt_conf_smooth_updateFrequency_title": "Ρυθμός ανανέωσης",
|
||||
"edt_conf_v4l2_cecDetection_expl": "Εάν είναι ενεργοποιημένο, η λήψη USB θα απενεργοποιηθεί προσωρινά όταν ληφθεί συμβάν αναμονής CEC από το δίαυλο HDMI.",
|
||||
"edt_conf_v4l2_cecDetection_title": "Ανίχνευση CEC",
|
||||
"edt_conf_v4l2_cropBottom_title": "Περικοπή κάτω",
|
||||
"edt_conf_v4l2_cropHeightValidation_error": "Περικοπή πάνω + Περικοπή κάτω δεν μπορεί να είναι μεγαλύτερη από το πλάτος ($1)",
|
||||
"edt_conf_v4l2_cropLeft_title": "Περικοπή αριστερά",
|
||||
"edt_conf_v4l2_cropRight_title": "Περικοπή δεξιά",
|
||||
"edt_conf_v4l2_cropTop_title": "Περικοπή πάνω",
|
||||
"edt_conf_v4l2_cropWidthValidation_error": "Περικοπή αριστερά + Περικοπή δεξιά δεν μπορεί να είναι μεγαλύτερη από το πλάτος ($1)",
|
||||
"edt_conf_v4l2_device_title": "Συσκευή",
|
||||
"edt_conf_v4l2_flip_expl": "Αυτό σας επιτρέπει να αναστρέψετε την εικόνα οριζόντια, κάθετα ή και τα δύο.",
|
||||
"edt_conf_v4l2_flip_title": "Αναστροφή εικόνας",
|
||||
"edt_conf_v4l2_framerate_title": "Καρέ ανά δευτερόλεπτο",
|
||||
"edt_conf_v4l2_resolution_title": "Ανάλυση Συσκευής",
|
||||
"edt_conf_webc_keyPassPhrase_expl": "Προαιρετικό: Το κλειδί μπορεί να προστατεύεται με κωδικό πρόσβασης",
|
||||
"edt_conf_webc_keyPassPhrase_title": "Κωδικός πρόσβασης",
|
||||
"edt_conf_webc_sslport_title": "Θύρα HTTPS",
|
||||
"edt_dev_enum_sub_min_cool_adjust": "Αφαίρεσε ψυχρό λευκό",
|
||||
"edt_dev_enum_sub_min_warm_adjust": "Αφαίρεσε θερμό λευκό",
|
||||
"edt_dev_enum_subtract_minimum": "Αφαίρεση ελάχιστου",
|
||||
"edt_dev_enum_white_off": "Απενεργοποίηση Λευκού",
|
||||
"edt_dev_general_autostart_title": "Αυτόματη Εκκίνηση",
|
||||
"edt_dev_general_enableAttemptsInterval_title": "Διάστημα Επανάληψης",
|
||||
"edt_dev_general_enableAttempts_title": "Προσπάθεια Σύνδεσης",
|
||||
"edt_dev_general_enableAttempts_title_info": "Αριθμός προσπαθειών σύνδεσης μιας συσκευής προτού μεταβεί σε κατάσταση σφάλματος.",
|
||||
"edt_dev_general_heading_title": "Γενικές Ρυθμίσεις",
|
||||
"edt_dev_general_rewriteTime_title": "Χρόνος Ανανέωσης",
|
||||
"edt_dev_spec_brightnessMax_title": "Μέγιστη Φωτεινότητα",
|
||||
"edt_dev_spec_brightnessMin_title": "Ελάχιστη Φωτεινότητα",
|
||||
"edt_dev_spec_brightness_title": "Φωτεινότητα",
|
||||
"edt_dev_spec_cid_title": "CID",
|
||||
"edt_dev_spec_dmaNumber_title": "Κανάλι DMA",
|
||||
"edt_dev_spec_gamma_title": "Gamma",
|
||||
"edt_dev_spec_globalBrightnessControlMaxLevel_title": "Μέγιστο επίπεδο Έντασης",
|
||||
"edt_dev_spec_gpioMap_title": "Χαρτογράφηση GPIO",
|
||||
"edt_dev_spec_gpioNumber_title": "Αριθμός GPIO",
|
||||
"edt_dev_spec_intervall_title": "Διάστημα",
|
||||
"edt_dev_spec_ledIndex_title": "Δείκτης LED",
|
||||
"edt_dev_spec_ledType_title": "Είδος LED",
|
||||
"edt_dev_spec_lightid_itemtitle": "ID",
|
||||
"edt_dev_spec_lights_itemtitle": "Φως",
|
||||
"edt_dev_spec_lights_name": "Όνομα",
|
||||
"edt_dev_spec_lights_title": "Φώτα",
|
||||
"edt_dev_spec_maximumLedCount_title": "Μέγιστος αριθμός LED",
|
||||
"edt_dev_spec_networkDevicePort_title": "Θύρα",
|
||||
"edt_dev_spec_order_left_right_title": "2.",
|
||||
"edt_dev_spec_order_top_down_title": "1.",
|
||||
"edt_dev_spec_pid_title": "PID",
|
||||
"edt_dev_spec_port_title": "Θύρα",
|
||||
"edt_dev_spec_razer_device_title": "Συσκευή RΛΖΞR Chroma",
|
||||
"edt_dev_spec_serial_title": "Σειριακός Αριθμός",
|
||||
"edt_dev_spec_spipath_title": "Συσκευή SPI",
|
||||
"edt_dev_spec_targetIpHost_title": "Hostname/Διεύθυνση ΙΡ",
|
||||
"edt_dev_spec_targetIp_title": "Διεύθυνση ΙΡ",
|
||||
"edt_dev_spec_transistionTime_title": "Χρόνος Μετάβασης",
|
||||
"edt_dev_spec_uid_title": "UID",
|
||||
"edt_dev_spec_useRgbwProtocol_title": "Χρησιμοπίησε πρωτόκολο RGBW",
|
||||
"edt_dev_spec_username_title": "Όνομα Χρήστη",
|
||||
"edt_dev_spec_vid_title": "VID",
|
||||
"edt_eff_blobcount": "Αριθμός σταγώνων",
|
||||
"edt_eff_candle_header": "Κερί",
|
||||
"edt_eff_candle_header_desc": "Λαμπερά κεριά",
|
||||
"edt_eff_centerx": "Κέντρο Χ-άξονα",
|
||||
"edt_eff_centery": "Κέντρο Υ-άξονα",
|
||||
"edt_eff_color": "Χρώμα",
|
||||
"edt_eff_colorHour": "Χρώμα ώρας",
|
||||
"edt_eff_colorMinute": "Χρώμα λεπτού",
|
||||
"edt_eff_colorSecond": "Χρώμα δευτερολέπτου",
|
||||
"edt_eff_colorcount": "Μήκος χρώματος",
|
||||
"edt_eff_colorend": "Τέλους χρώματος",
|
||||
"edt_eff_colorevel": "Επίπεδο χρώματος",
|
||||
"edt_eff_colorone": "Χρώμα ένα",
|
||||
"edt_eff_colorrandom": "Τυχαίο χρώμα",
|
||||
"edt_eff_colorshift": "Μετάβαση Χρώματος",
|
||||
"edt_eff_colorstart": "Αρχή χρώματος",
|
||||
"edt_eff_colortwo": "Χρώμα δύο",
|
||||
"edt_eff_count": "Αριθμός",
|
||||
"edt_eff_countries": "Χώρες",
|
||||
"edt_eff_enableSecondSwirl": "Δεύτερος Στροβιλισμός",
|
||||
"edt_eff_enum_all": "Όλα",
|
||||
"edt_eff_enum_all-together": "Όλα μαζί",
|
||||
"edt_eff_enum_list": "Λίστα LED",
|
||||
"edt_eff_fade_header": "Σβήσιμο",
|
||||
"edt_eff_fade_header_desc": "Σβήσιμο ανάμεσα σε χρώματα",
|
||||
"edt_eff_flag_header": "Σημαίες",
|
||||
"edt_eff_flag_header_desc": "Αφήστε τα LED σας να λάμπουν στα χρώματα της χώρας σας. Μπορείτε να επιλέξετε περισσότερες από μία σημαίες και θα αλλάξουν με βάση το χρονικό διάστημα.",
|
||||
"edt_eff_fps": "Καρέ ανά δευτερόλεπτο",
|
||||
"edt_eff_frequency": "Συχνότητα",
|
||||
"edt_eff_gif_header": "GIF's",
|
||||
"edt_eff_gif_header_desc": "Αυτό το εφέ αναπαράγει αρχεία .gif, παρέχει ένα απλό βίντεο όπως βρόχο ως εφέ.",
|
||||
"edt_eff_height": "Ύψος",
|
||||
"edt_eff_huechange": "Αλλαγή χρώματος",
|
||||
"edt_eff_image_source_url": "URL",
|
||||
"edt_eff_knightrider_header": "Knight Rider",
|
||||
"edt_eff_knightrider_header_desc": "O K.I.T.T επέστρεψε! Ο μπροστινός σαρωτής του γνωστού αυτοκινήτου, αυτή τη φορά όχι μόνο στο κόκκινο.",
|
||||
"edt_eff_ledlist": "Λίστα LED",
|
||||
"edt_eff_ledtest_header": "Δοκιμή LED",
|
||||
"edt_eff_length": "Μήκος",
|
||||
"edt_eff_lightclock_header_desc": "Ένα πραγματικό ρολόι σαν φως! Προσαρμόστε τα χρώματα των ωρών, λεπτών, και δευτερολέπτων. Διατίθεται επίσης προαιρετικός δείκτης ώρας 3/6/9/12. Σε περίπτωση που το ρολόι είναι λάθος, πρέπει να ελέγξετε το ρολόι του συστήματός σας.",
|
||||
"edt_eff_max_len": "Μέγιστο μήκος",
|
||||
"edt_eff_min_len": "Ελάχιστο μήκος",
|
||||
"edt_eff_moodblobs_header_desc": "Χαλαρώστε το βράδυ με αργή κίνηση και σταγόνες που αλλάζουν χρώμα.",
|
||||
"edt_eff_pacman_header": "Πακ-Μαν",
|
||||
"edt_eff_pacman_header_desc": "Μικρό, πεινασμένο και κίτρινο. Ποιος θα επιβιώσει;",
|
||||
"edt_eff_plasma_header": "Πλάσμα",
|
||||
"edt_eff_police_header": "Αστυνομία",
|
||||
"edt_eff_police_header_desc": "Φώτα σαν αστινομικό όχημα σε δράση",
|
||||
"edt_eff_randomCenter": "Τυχαίο Κέντρο",
|
||||
"edt_eff_random_header": "Τυχαίο",
|
||||
"edt_eff_repeat": "Επανάληψη",
|
||||
"edt_eff_reverseRandomTime": "Ανέστρεψε κάθε",
|
||||
"edt_eff_reversedirection": "Ανάστροφη κίνηση",
|
||||
"edt_eff_rotationtime": "Χρόνος περιστροφής",
|
||||
"edt_eff_showseconds": "Δείξε δευτερόλεπτα",
|
||||
"edt_eff_snake_header": "Φιδάκι",
|
||||
"edt_eff_snake_header_desc": "Που υπάρχει κάτι να φάω;",
|
||||
"edt_eff_sparks_header": "Σπίθες",
|
||||
"edt_eff_sparks_header_desc": "Αστερική-σπίθα, επιλέξτε ανάμεσα σε ένα στατικό χρώμα ή ένα τυχαίο. Θα μπορούσατε επίσης να ρυθμίσετε τη φωτεινότητα, τον κορεσμό και την ταχύτητα.",
|
||||
"edt_eff_speed": "Ταχύτητα",
|
||||
"edt_eff_swirl_header": "στροβιλισμός χρωμάτων",
|
||||
"edt_eff_swirl_header_desc": "Ένας στροβιλισμός με προσαρμοσμένα χρώματα. Τα χρώματα απλώνονται ακόμη και στις 360°, θα υπολογίζονται οι μετατοπίσεις μεταξύ των χρωμάτων. Επιπλέον, μπορείτε να προσθέσετε ένα δεύτερο στροβιλισμό από πάνω, να γνωρίζετε ότι χρειάζεστε μερική διαφάνεια! Συμβουλή: Η επανάληψη του ίδιου χρώματος έχει ως αποτέλεσμα μια \"υψηλότερη\" περιοχή χρώματος και μια μειωμένη περιοχή μετατόπισης χρώματος.",
|
||||
"edt_eff_trails_header": "Πεφταστέρι",
|
||||
"edt_eff_trails_header_desc": "Χρωματιστά αστέρια που πέφτουν από τη κορυφή",
|
||||
"edt_eff_waves_header": "Κύματα",
|
||||
"edt_eff_whichleds": "Ποια LEDs",
|
||||
"edt_eff_whitelevel": "Επίπεδο λευκού",
|
||||
"edt_eff_x-mas_header": "Χριστούγεννα",
|
||||
"edt_eff_x-mas_header_desc": "Άγγιγμα Χριστουγέννων",
|
||||
"edt_msg_button_add_row_title": "Προσθήκη $1",
|
||||
"edt_msg_button_collapse": "Σύμπτηξη",
|
||||
"edt_msg_button_delete_all": "Όλα",
|
||||
"edt_msg_button_delete_all_title": "Διαγραφή Όλων",
|
||||
"edt_msg_button_delete_last": "Τουλάχιστον $1",
|
||||
"edt_msg_button_delete_last_title": "Διαγραφή Τελευταίων $1",
|
||||
"edt_msg_button_delete_row_title": "Διαγραφή $1",
|
||||
"edt_msg_button_delete_row_title_short": "Διαγραφή",
|
||||
"edt_msg_button_expand": "Ανέπτυξε",
|
||||
"edt_msg_button_move_down_title": "Μετακίνησε κάτω",
|
||||
"edt_msg_button_move_up_title": "Μετακίνησε πάνω",
|
||||
"edt_msg_error_additionalItems": "Δεν επιτρέπονται επιπλέον στοιχεία σε αυτόν τον πίνακα",
|
||||
"edt_msg_error_additional_properties": "Δεν επιτρέπονται πρόσθετες ιδιότητες, αλλά η ιδιότητα $1 έχει οριστεί",
|
||||
"edt_msg_error_dependency": "Πρέπει να έχει την ιδιότητα $1",
|
||||
"edt_msg_error_disallow": "Η τιμή δεν πρέπει να είναι τύπου $1",
|
||||
"edt_msg_error_disallow_union": "Η τιμή δεν πρέπει να είναι ένας από τους παρεχόμενους μη επιτρεπόμενους τύπους",
|
||||
"edt_msg_error_maxItems": "Η τιμή πρέπει να έχει το πολύ $1 αντικείμενα",
|
||||
"edt_msg_error_maxLength": "Η τιμή πρέπει να έχει το πολύ $1 μήκος χαρακτήρων",
|
||||
"edt_msg_error_maxProperties": "Το αντικείμενο πρέπει να έχει το πολύ $1 ιδιότητες",
|
||||
"edt_msg_error_maximum_excl": "Η τιμή πρέπει να είναι λιγότερο του $1",
|
||||
"edt_msg_error_maximum_incl": "Η τιμή πρέπει να είναι το πολύ $1",
|
||||
"edt_msg_error_minItems": "Η τιμή πρέπει να έχει τουλάχιστον $1 αντικείμενα",
|
||||
"edt_msg_error_minLength": "Η τιμή πρέπει να έχει τουλάχιστον $1 μήκος χαρακτήρων",
|
||||
"edt_msg_error_minProperties": "Το αντικείμενο πρέπει να έχει τουλάχιστον $1 ιδιότητες",
|
||||
"edt_msg_error_minimum_excl": "Η τιμή πρέπει να είναι μεγαλύτερη του $1",
|
||||
"edt_msg_error_minimum_incl": "Η τιμή πρέπει να είναι τουλάχιστον $1",
|
||||
"edt_msg_error_multipleOf": "Η τιμή πρέπει να είναι πολλαπλάσιο του $1",
|
||||
"edt_msg_error_pattern": "Η τιμή πρέπει να μοιάζει με το μοτίβο",
|
||||
"edt_msg_error_required": "Από το αντικείμενο λείπει η απαιτούμενη ιδιότητα '$1'",
|
||||
"edt_msg_error_type": "Η τιμή πρέπει να είναι τύπου $1",
|
||||
"edt_msg_error_uniqueItems": "Ο πίνακας πρέπει να έχει μοναδικά στοιχεία",
|
||||
"effectsconfigurator_button_conttest": "Συνεχές τεστ",
|
||||
"effectsconfigurator_button_deleffect": "Διαγραφή Εφέ",
|
||||
"effectsconfigurator_button_editeffect": "Φόρτωση Εφέ",
|
||||
"effectsconfigurator_button_saveeffect": "Αποθήκευση Εφέ",
|
||||
"effectsconfigurator_button_starttest": "Εκκίνηση τεστ",
|
||||
"effectsconfigurator_button_stoptest": "Τερματισμός τεστ",
|
||||
"effectsconfigurator_label_chooseeff": "Επιλέξτε Πρότυπο",
|
||||
"effectsconfigurator_label_effectname": "Όνομα Εφέ",
|
||||
"effectsconfigurator_label_intro": "Δημιουργήστε από τα βασικά εφέ νέα εφέ που είναι συντονισμένα σύμφωνα με τις προτιμήσεις σας. Ανάλογα με το Εφέ, υπάρχουν διαθέσιμες επιλογές όπως χρώμα, ταχύτητα, κατεύθυνση και άλλα.",
|
||||
"general_access_advanced": "Προχωρημένο",
|
||||
"general_access_default": "Προεπιλεγμένο",
|
||||
"general_access_expert": "Ειδικό",
|
||||
"general_btn_back": "Πίσω",
|
||||
"general_btn_cancel": "Ακύρωση",
|
||||
"general_btn_continue": "Συνέχεια",
|
||||
"general_btn_delete": "Διαγραφή",
|
||||
"general_btn_denyAccess": "Απόρριψη πρόσβασης",
|
||||
"general_btn_grantAccess": "Παραχώρηση πρόσβασης",
|
||||
"general_btn_iswitch": "Διακόπτης",
|
||||
"general_btn_next": "Επόμενο",
|
||||
"general_btn_off": "Απενεργοποίηση",
|
||||
"general_btn_ok": "ΟΚ",
|
||||
"general_btn_on": "Εκκίνηση",
|
||||
"general_btn_overwrite": "Αντικατάσταση",
|
||||
"general_btn_rename": "Μεταονόμασε",
|
||||
"general_btn_restarthyperion": "Επανεκκίνηση Hyperion",
|
||||
"general_btn_save": "Αποθήκευση",
|
||||
"general_btn_saveandreload": "Αποθήκευση και επαναφόρτωση",
|
||||
"general_btn_saverestart": "Αποθήκευση και επανεκκίνηση",
|
||||
"general_btn_start": "Εκκίνηση",
|
||||
"general_btn_stop": "Τερματισμός",
|
||||
"general_btn_yes": "Ναι",
|
||||
"general_button_savesettings": "Αποθήκευση ρυθμίσεων",
|
||||
"general_chars_needed": "χρειάζονται περισσότεροι χαρακτήρες",
|
||||
"general_col_blue": "Μπλε",
|
||||
"general_col_green": "Πράσινο",
|
||||
"general_col_red": "Κόκκινο",
|
||||
"general_comp_BLACKBORDER": "Ανίχνευση μαύρης μπάρας",
|
||||
"general_comp_GRABBER": "Λήψη Οθόνης",
|
||||
"general_comp_LEDDEVICE": "Έξοδος LED",
|
||||
"general_comp_SMOOTHING": "Εξομάλυνση",
|
||||
"general_comp_V4L": "Λήψη εισόδου-USB",
|
||||
"general_country_cn": "Κίνα",
|
||||
"general_country_de": "Γερμανία",
|
||||
"general_country_es": "Ισπανία",
|
||||
"general_country_fr": "Γαλλία",
|
||||
"general_country_it": "Ιταλία",
|
||||
"general_country_nl": "Ολλανδία",
|
||||
"general_country_ru": "Ρωσία",
|
||||
"general_country_uk": "Ηνωμένο Βασίλειο",
|
||||
"general_country_us": "ΗΠΑ",
|
||||
"general_disabled": "Απενεργοποιημένο",
|
||||
"general_enabled": "Ενεργοποιημένο",
|
||||
"general_speech_cs": "Τσέχικα",
|
||||
"general_speech_da": "Δανέζικα",
|
||||
"general_speech_de": "Γερμανικά",
|
||||
"general_speech_en": "Αγγλικά",
|
||||
"general_speech_es": "Ισπανικά",
|
||||
"general_speech_fr": "Γαλλικά",
|
||||
"general_speech_hu": "Ουγγαρικά",
|
||||
"general_speech_it": "Ιταλικά",
|
||||
"general_speech_ja": "Ιαπωνικά",
|
||||
"general_speech_nb": "Νορβηγικά (Bokmål)",
|
||||
"general_speech_nl": "Ολλανδικά",
|
||||
"general_speech_pl": "Πολωνικά",
|
||||
"general_speech_pt": "Πορτογαλικά",
|
||||
"general_speech_ro": "Ρουμάνικα",
|
||||
"general_speech_ru": "Ρωσικά",
|
||||
"general_speech_sv": "Σουηδικά",
|
||||
"general_speech_tr": "Τούρκικα",
|
||||
"general_speech_vi": "Βιετναμέζικα",
|
||||
"general_speech_zh-CN": "Κινέζικα (απλοποιημένα)",
|
||||
"general_webui_title": "Hyperion - Διαμόρφωση Ιστού",
|
||||
"general_wiki_moreto": "Περισσότερες πληροφορίες για \"$1\" στο Wiki μας",
|
||||
"infoDialog_effconf_created_text": "Το εφέ \"$1\" κατασκευάστηκε επιτυχώς!",
|
||||
"infoDialog_effconf_deleted_text": "Το εφέ \"$1\" διαγράφτηκε επιτυχώς!",
|
||||
"infoDialog_general_error_title": "Σφάλμα",
|
||||
"infoDialog_general_success_title": "Επιτυχία",
|
||||
"infoDialog_general_warning_title": "Προειδοπίηση",
|
||||
"infoDialog_import_comperror_text": "Λυπητερό! Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την εισαγωγή. Δοκιμάστε ξανά με άλλο πρόγραμμα περιήγησης.",
|
||||
"infoDialog_import_confirm_text": "Είστε βέβαιοι ότι θα εισαγάγετε το \"$1\"; Δεν είναι δυνατή η επαναφορά αυτής της διαδικασίας!",
|
||||
"infoDialog_import_hyperror_text": "Δεν είναι δυνατή η εισαγωγή του επιλεγμένου αρχείου διαμόρφωσης \"$1\". Δεν είναι συμβατό με Hyperion 2.0 και νεότερη έκδοση!",
|
||||
"infoDialog_import_jsonerror_text": "Το επιλεγμένο αρχείο διαμόρφωσης \"$1\" δεν είναι αρχείο .json ή είναι κατεστραμμένο. Μήνυμα σφάλματος: ($2)",
|
||||
"infoDialog_password_current_text": "Τωρινός κωδικός",
|
||||
"infoDialog_password_new_text": "Νέος κωδικός",
|
||||
"infoDialog_username_text": "Όνομα Χρήστη",
|
||||
"infoDialog_writeconf_error_text": "Η αποθήκευση της διαμόρφωσής σας απέτυχε.",
|
||||
"infoDialog_writeimage_error_text": "Το επιλεγμένο αρχείο \"$1\" δεν είναι αρχείο εικόνας ή είναι κατεστραμμένο! Επιλέξτε άλλο αρχείο εικόνας.",
|
||||
"info_404": "Η σελίδα που ζητήσατε δεν είναι διαθέσιμη!",
|
||||
"info_conlost_label_autorecon": "Θα επανασυνδεθείτε ξανά αφού το Hyperion είναι διαθέσιμο.",
|
||||
"info_conlost_label_autorefresh": "Αυτή η σελίδα θα ανανεωθεί αυτόματα.",
|
||||
"info_conlost_label_reason1": "- Κακή σύνδεση WLAN",
|
||||
"info_conlost_label_reason2": "- Πραγματοποιήσατε αναβάθμιση",
|
||||
"info_conlost_label_reason3": "- Το Hyperion δεν τρέχει",
|
||||
"info_conlost_label_reload": "Η αυτόματη επανασύνδεση διακόπηκε - υπέρβαση του ορίου. Ανανεώστε τη σελίδα ή κάντε κλικ σε εμένα!",
|
||||
"info_conlost_label_title": "Χάθηκε η σύνδεση με την υπηρεσία Hyperion!",
|
||||
"info_restart_contus": "Εάν εξακολουθείτε να μένετε εδώ μετά από 20 δευτερόλεπτα και δεν έχετε ιδέα γιατί ανοίξτε ένα νέο θέμα στο φόρουμ υποστήριξής μας...",
|
||||
"info_restart_contusa": "...με τα τελευταία σου βήματα. Ευχαριστώ!",
|
||||
"info_restart_rightback": "Ο Hyperion θα επιστρέψει αμέσως!",
|
||||
"info_restart_title": "Αυτήν τη στιγμή γίνεται επανεκκίνηση...",
|
||||
"main_ledsim_btn_togglelednumber": "Αριθμός LED",
|
||||
"main_ledsim_btn_toggleleds": "Δείξε LED",
|
||||
"main_ledsim_btn_togglelivevideo": "Ζωντανό βίντεο",
|
||||
"main_ledsim_text": "Ζωντανή απεικόνιση χρωμάτων LED και προαιρετική η τρέχουσα ροή βίντεο της συσκευής λήψης.",
|
||||
"main_ledsim_title": "Οπτικοποίηση LED",
|
||||
"main_menu_about_token": "Σχετικά με το Hyperion",
|
||||
"main_menu_colors_conf_token": "Επεξεργασία εικόνας",
|
||||
"main_menu_dashboard_token": "Πίνακας Ελέγχου",
|
||||
"main_menu_effect_conf_token": "Εφέ",
|
||||
"main_menu_general_conf_token": "Γενικά",
|
||||
"main_menu_input_selection_token": "Επιλογή εισόδου",
|
||||
"main_menu_instcapture_conf_token": "Πηγές",
|
||||
"main_menu_leds_conf_token": "Έξοδος LED",
|
||||
"main_menu_logging_token": "Καταγράψτε",
|
||||
"main_menu_remotecontrol_token": "Ασύρματος χειρισμός",
|
||||
"main_menu_support_token": "Υποστήριξη",
|
||||
"main_menu_system_token": "Σύστημα",
|
||||
"main_menu_update_token": "Αναβάθμιση",
|
||||
"main_menu_webconfig_token": "Διαμόρφωση Ιστού",
|
||||
"remote_adjustment_label": "Ρύθμιση χρώματος",
|
||||
"remote_color_button_reset": "Επαναφορά Χρώματος/Εφέ",
|
||||
"remote_color_intro": "Ορίστε ένα εφέ ή χρώμα. Επίσης παρατίθενται τα εφέ που δημιουργήσατε εσείς (εάν είναι διαθέσιμα). $1",
|
||||
"remote_color_label": "Χρώματα/Εφέ",
|
||||
"remote_color_label_color": "Χρώμα:",
|
||||
"remote_components_intro": "Ενεργοποίηση και απενεργοποίηση στοιχείων του Hyperion κατά τη διάρκεια του χρόνου εκτέλεσης. $1",
|
||||
"remote_effects_label_effects": "Εφέ:",
|
||||
"remote_effects_label_picture": "Εικόνα:",
|
||||
"remote_input_clearall": "Καθαρισμός όλων των Χρωμάτων/Εφέ",
|
||||
"remote_input_duration": "Διάρκεια:",
|
||||
"remote_input_intro": "Το Hyperion χρησιμοποιεί ένα σύστημα προτεραιότητας για να επιλέξει μια πηγή. Ό,τι ορίζετε έχει προτεραιότητα (Εφέ/Χρώμα/Λήψη οθόνης/Λήψη USB και πηγές δικτύου). Από προεπιλογή, το Hyperion επιλέγει πηγές ανάλογα με την προτεραιότητα (ο χαμηλότερος αριθμός αντικατοπτρίζει την τρέχουσα ενεργή πηγή). Τώρα έχετε την ευκαιρία να επιλέξετε μόνοι σας πηγές. $1",
|
||||
"remote_input_ip": "ΙΡ:",
|
||||
"remote_input_label_autoselect": "Αυτόματη Επιλογή",
|
||||
"remote_input_origin": "Προέλευση",
|
||||
"remote_input_owner": "Είδος",
|
||||
"remote_input_priority": "Προτεραιότητα",
|
||||
"remote_input_setsource_btn": "Επιλέξτε Πηγή",
|
||||
"remote_input_sourceactiv_btn": "Πηγή ενεργή",
|
||||
"remote_input_status": "Κατάσταση/Ενέργεια",
|
||||
"remote_losthint": "Σημείωση: Όλες οι αλλαγές θα χαθούν μετά από επανεκκίνηση.",
|
||||
"remote_maptype_intro": "Συνήθως η διάταξη LED καθορίζει ποια LED καλύπτει μια συγκεκριμένη περιοχή εικόνας. Μπορείτε να το αλλάξετε εδώ: $1.",
|
||||
"remote_maptype_label": "Είδος Χαρτογράφισης",
|
||||
"remote_maptype_label_multicolor_mean": "Πολύχρωμο",
|
||||
"remote_maptype_label_unicolor_mean": "Μονοχρωματικό",
|
||||
"remote_optgroup_syseffets": "Ρυθμίσης Συστήματος",
|
||||
"remote_optgroup_templates_custom": "Πρότυπα Χρήστη",
|
||||
"remote_optgroup_templates_system": "Πρότυπα Συστήματος",
|
||||
"remote_optgroup_usreffets": "Εφέ Χρήστη",
|
||||
"remote_videoMode_2D": "2D",
|
||||
"remote_videoMode_3DSBS": "3DSBS",
|
||||
"remote_videoMode_3DTAB": "3DTAB",
|
||||
"remote_videoMode_label": "Λειτουργία βίντεο",
|
||||
"support_label_affinstr1": "Κάντε κλικ στον κατάλληλο σύνδεσμο της χώρας σας",
|
||||
"support_label_affinstr2": "Ό,τι αγοράζετε (δεν έχει σημασία τι) παίρνουμε μια μικρή χρέωση με βάση τον τζίρο σας",
|
||||
"support_label_affinstr3": "Πληρώνετε ΠΑΝΤΑ το ίδιο, δεν υπάρχει καμία απολύτως διαφορά. Δοκίμασέ το!",
|
||||
"support_label_btctext": "Διεύθυνση:",
|
||||
"support_label_donate": "Δωρίστε ή χρησιμοποιήστε τους συνδέσμους συνεργατών μας",
|
||||
"support_label_donationpp": "Δωρεά:",
|
||||
"support_label_fbtext": "Μοιραστείτε τη σελίδα μας στο Hyperion στο Facebook και λάβετε ειδοποίηση όταν κυκλοφορούν νέες ενημερώσεις",
|
||||
"support_label_forumtext": "Προθήκες, συζητήσεις, βοήθεια και πολλά άλλα",
|
||||
"support_label_forumtitle": "Φόρουμ",
|
||||
"support_label_ghtext": "Επισκευτείτε μας στο GitHub",
|
||||
"support_label_igtext": "Επισκεφθείτε μας στο Instagram για να παρακολουθήσετε τις τελευταίες φωτογραφίες του Hyperion!",
|
||||
"support_label_intro": "Το Hyperion είναι ένα δωρεάν, μη-κερδοσκοπικό λογισμικό. Μια μικρή ομάδα εργάζεται πάνω σε αυτό και γι' αυτό χρειαζόμαστε τη σταθερή υποστήριξή σας.",
|
||||
"support_label_spreadtheword": "Διέδωσέ το",
|
||||
"support_label_title": "Υποστήριξη Hyperion",
|
||||
"support_label_twtext": "Μοιραστείτε και ακολουθήστε μας στο Twitter, για να είστε πάντα ενημερωμένοι με την τελευταία ανάρτηση σχετικά με την ανάπτυξη του Hyperion",
|
||||
"support_label_webpagetitle": "Ιστοσελίδα",
|
||||
"support_label_webrestitle": "Πληροφορίες και βοηθιτικό υλικό",
|
||||
"support_label_wikitext": "Το Α έως Ω για σχεδόν οτιδήποτε σχετίζεται με το Hyperion",
|
||||
"support_label_yttext": "Βαρεθήκατε τις φωτογραφίες; Δείτε το κανάλι μας στο YouTube!",
|
||||
"update_button_install": "Εγκατάσταση",
|
||||
"update_error_getting_versions": "Παρουσιάστηκε πρόβλημα με τον προσδιορισμό της πιο πρόσφατης διαθέσιμης έκδοσης.",
|
||||
"update_label_description": "Περιγραφή:",
|
||||
"update_label_intro": "Επισκόπηση όλων των διαθέσιμων εκδόσεων Hyperion. Επιπλέον, θα μπορούσατε να ενημερώσετε ή να υποβαθμίσετε την έκδοση του Hyperion όποτε θέλετε. Ταξινόμηση από το νεότερο στο παλαιότερο",
|
||||
"update_label_type": "Τύπος:",
|
||||
"update_versreminder": "Η έκδοση σας: $1",
|
||||
"wiz_cc_adjustgamma": "Gamma: Αυτό που πρέπει να κάνετε είναι να προσαρμόσετε τα επίπεδα γάμμα κάθε καναλιού μέχρι να έχετε την ίδια αντιληπτή ποσότητα για κάθε κανάλι. Υπόδειξη: Το ουδέτερο είναι 1,0! Για παράδειγμα, εάν το Γκρι σας είναι λίγο κοκκινωπό, σημαίνει ότι πρέπει να αυξήσετε το κόκκινο γάμμα για να μειώσετε την ποσότητα του κόκκινου (όσο περισσότερο γάμμα, τόσο μικρότερη ποσότητα χρώματος).",
|
||||
"wiz_cc_adjustit": "Προσαρμόστε το \"$1\" σας, μέχρι να τα καταφέρετε. Λάβετε υπόψη: Όσο περισσότερο προσαρμόζετε μακριά από την προεπιλεγμένη τιμή, το φάσμα χρωμάτων θα είναι περιορισμένο (Επίσης για όλα τα ενδιάμεσα χρώματα). Ανάλογα με το χρωματικό φάσμα της τηλεόρασης/LED, τα αποτελέσματα θα διαφέρουν.",
|
||||
"wiz_cc_backlight": "Επιπλέον, θα μπορούσατε να ορίσετε έναν οπίσθιο φωτισμό για να ταξινομήσετε τα \"κακά χρώματα\" σε σχεδόν σκοτεινές περιοχές ή εάν δεν σας αρέσει η εναλλαγή μεταξύ χρώματος και απενεργοποίησης κατά την παρακολούθηση. Επιπλέον, θα μπορούσατε να ορίσετε εάν πρέπει να υπάρχει κάποιο χρώμα σε αυτό ή απλώς λευκό. Αυτό είναι απενεργοποιημένο κατά την κατάσταση \"Απενεργοποίηση\" \"Χρώμα\" και \"Εφέ\".",
|
||||
"wiz_cc_btn_stop": "Σταματήστε το βίντεο",
|
||||
"wiz_cc_btn_switchpic": "Αλλαγή εικόνας",
|
||||
"wiz_cc_chooseid": "Ορίστε ένα όνομα για αυτό το προφίλ χρώματος.",
|
||||
"wiz_cc_kodidiscon": "Το Kodi δεν βρέθηκε, προχωρήστε χωρίς υποστήριξη Kodi (ελέγξτε εάν είναι ενεργοποιημένος ο τηλεχειρισμός από άλλα συστήματα).",
|
||||
"wiz_cc_kodimsg_start": "Επιτυχία δοκιμής - ώρα να προχωρήσετε!",
|
||||
"wiz_cc_kodishould": "Το Kodi θα πρέπει να δείχνει την ακόλουθη εικόνα: $1",
|
||||
"wiz_cc_kwebs": "Kodi webserver (Hostname ή IP)\n",
|
||||
"wiz_cc_lettvshow": "Αφήστε την τηλεόρασή σας να εμφανίσει την ακόλουθη εικόνα: $1",
|
||||
"wiz_cc_lettvshowm": "Ελέγξτε αυτό με τις παρακάτω εικόνες: $1",
|
||||
"wiz_cc_link": "Πάτα με!",
|
||||
"wiz_cc_morethanone": "Έχετε περισσότερα από ένα προφίλ, επιλέξτε το προφίλ που θέλετε να βαθμονομήσετε.",
|
||||
"wiz_cc_summary": "Συμπέρασμα των ρυθμίσεών σας. Κατά τη διάρκεια της αναπαραγωγής βίντεο, μπορείτε να αλλάξετε ή να δοκιμάσετε ξανά τις τιμές. Εάν τελειώσετε, κάντε κλικ στην αποθήκευση.",
|
||||
"wiz_cc_testintro": "Ώρα για ένα πραγματικό τεστ",
|
||||
"wiz_cc_testintrok": "Πατήστε ένα κουμπί παρακάτω για να ξεκινήσετε ένα δοκιμαστικό βίντεο.",
|
||||
"wiz_cc_testintrowok": "Δείτε τον παρακάτω σύνδεσμο για να κατεβάσετε δοκιμαστικά βίντεο:",
|
||||
"wiz_cc_try_connect": "Σύνδεση...",
|
||||
"wiz_cololight_desc2": "Τώρα επιλέξτε ποια Cololights θα προστεθούν. Για να αναγνωρίσετε μεμονωμένα φώτα, πατήστε το κουμπί στα δεξιά.",
|
||||
"wiz_cololight_noprops": "Δεν είναι δυνατή η λήψη των ιδιοτήτων της συσκευής - Ορίστε τον αριθμό των LED υλικού με μη αυτόματο τρόπο",
|
||||
"wiz_guideyou": "Το $1 θα σας καθοδηγήσει στις ρυθμίσεις. Απλά πατήστε το κουμπί!",
|
||||
"wiz_hue_create_user": "Δημιουργία νέου Χρήστη",
|
||||
"wiz_hue_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη, εάν δεν έχετε, δημιουργήστε ένα νέο.",
|
||||
"wiz_hue_desc2": "3. Τώρα επιλέξτε ποιοι λαμπτήρες πρέπει να προστεθούν. Η θέση αντιστοιχίζει τη λάμπα σε μια συγκεκριμένη θέση στην \"εικόνα\" σας. Δεν θα προστεθούν απενεργοποιημένες λάμπες. Για να αναγνωρίσετε μεμονωμένους λαμπτήρες πατήστε το κουμπί στα δεξιά.",
|
||||
"wiz_hue_e_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη και το κλειδί πελάτη, εάν δεν έχετε και τα δύο, δημιουργήστε νέα.",
|
||||
"wiz_hue_e_noapisupport": "Ο Wizard έχει απενεργοποιήσει την υποστήριξη API ψυχαγωγίας και θα συνεχίσει σε κλασική λειτουργία.",
|
||||
"wiz_hue_e_title": "Wizard ψυχαγωγίας Philips Hue",
|
||||
"wiz_hue_ip": "Hostname ή ΙΡ",
|
||||
"wiz_hue_title": "Philips Hue Wizard",
|
||||
"wiz_hue_username": "ID Χρήστη",
|
||||
"wiz_identify": "Αναγνώρισε",
|
||||
"wiz_identify_light": "Αναγνώρισε $1",
|
||||
"wiz_ids_disabled": "Απενεργοποίηση",
|
||||
"wiz_ids_entire": "Πλήρη εικόνα",
|
||||
"wiz_noLights": "Δεν βρέθηκε το $1! Συνδέστε τα φώτα στο δίκτυο ή διαμορφώστε τα με μη αυτόματο τρόπο.",
|
||||
"wiz_pos": "Θέση/Κατάσταση",
|
||||
"wiz_rgb_expl": "Η χρωματική κουκκίδα αλλάζει κάθε x δευτερόλεπτα το χρώμα (κόκκινο, πράσινο), την ίδια στιγμή που τα LED σας αλλάζουν και το χρώμα. Απαντήστε στις ερωτήσεις στο κάτω μέρος για να ελέγξετε/διορθώσετε τη σειρά των byte.",
|
||||
"wiz_rgb_q": "Ποιο χρώμα δείχνουν τα LED σας, όταν η έγχρωμη κουκκίδα παραπάνω δείχνει...",
|
||||
"wiz_rgb_qgend": "...πράσινο;",
|
||||
"wiz_rgb_qrend": "...κόκινο;",
|
||||
"wiz_rgb_switchevery": "Αλάξτε χρώμα κάθε...",
|
||||
"wiz_yeelight_unsupported": "Μη-υποστηριζόμενο"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,301 @@
|
|||
{
|
||||
"InfoDialog_access_title": "設定レベル",
|
||||
"InfoDialog_nowrite_title": "書き込み権限エラー!",
|
||||
"about_build": "ビルド",
|
||||
"about_builddate": "ビルド日付",
|
||||
"about_translations": "翻訳について",
|
||||
"about_version": "バージョン",
|
||||
"conf_general_impexp_expbtn": "出力",
|
||||
"conf_general_impexp_impbtn": "入力",
|
||||
"conf_general_impexp_l1": "下記の設定ファイルを選択し、「インポート」をクリックしてください",
|
||||
"conf_general_impexp_l2": "設定をエクスポートするには「エクスポート」をクリックしてください。",
|
||||
"conf_general_impexp_title": "設定ファイルをインポート・エクスポートする",
|
||||
"conf_general_label_title": "一般設定",
|
||||
"conf_helptable_expl": "説明",
|
||||
"conf_helptable_option": "オプション",
|
||||
"conf_leds_contr_label_contrtype": "コントローラータイプ",
|
||||
"conf_leds_layout_advanced": "詳細設定",
|
||||
"conf_leds_layout_btn_checklist": "チェックリストを表示",
|
||||
"conf_leds_layout_button_savelay": "レイアウト保存",
|
||||
"conf_leds_layout_button_updsim": "プレビュー",
|
||||
"conf_leds_layout_cl_bottom": "下",
|
||||
"conf_leds_layout_cl_gappos": "ギャップの位置",
|
||||
"conf_leds_layout_cl_inppos": "インプットの位置",
|
||||
"conf_leds_layout_cl_left": "左",
|
||||
"conf_leds_layout_cl_right": "右",
|
||||
"conf_leds_layout_cl_top": "上",
|
||||
"conf_leds_layout_frame": "クラッシックレイアウト",
|
||||
"conf_leds_layout_ma_cabling": "配線",
|
||||
"conf_leds_layout_ma_horiz": "水平",
|
||||
"conf_leds_layout_ma_optbottomleft": "左下",
|
||||
"conf_leds_layout_ma_optbottomright": "右下",
|
||||
"conf_leds_layout_ma_opthoriz": "水平",
|
||||
"conf_leds_layout_ma_optparallel": "パラレル",
|
||||
"conf_leds_layout_ma_optsnake": "スネーク",
|
||||
"conf_leds_layout_ma_opttopleft": "左上",
|
||||
"conf_leds_layout_ma_opttopright": "右上",
|
||||
"conf_leds_layout_ma_optvert": "垂直",
|
||||
"conf_leds_layout_ma_order": "並び順",
|
||||
"conf_leds_layout_ma_position": "インプット",
|
||||
"conf_leds_layout_ma_vert": "垂直",
|
||||
"conf_leds_layout_matrix": "マトリックスレイアウト",
|
||||
"conf_leds_layout_peview": "LEDレイアウトのプレビュー",
|
||||
"conf_leds_layout_preview_l1": "一番目のLEDの位置",
|
||||
"conf_leds_layout_preview_l2": "データの向きを示す",
|
||||
"conf_leds_layout_preview_ledpower": "最大パワー消費電力率:",
|
||||
"conf_leds_layout_preview_originCL": "クラッシックレイアウトから作成",
|
||||
"conf_leds_layout_preview_originMA": "マトリックスレイアウトから作成",
|
||||
"conf_leds_layout_preview_originTEXT": "テキストから作成",
|
||||
"conf_leds_layout_preview_totalleds": "LED数:",
|
||||
"conf_leds_nav_label_ledcontroller": "LEDコントローラー",
|
||||
"conf_leds_nav_label_ledlayout": "LEDレイアウト",
|
||||
"conf_leds_optgroup_network": "ネットワーク",
|
||||
"conf_leds_optgroup_usb": "USB/シリアル",
|
||||
"conf_logging_btn_autoscroll": "オートスクロール",
|
||||
"conf_logging_report": "レポートと連携する",
|
||||
"conf_logging_uplpolicy": "ボタンをクリックして同意する",
|
||||
"dashboard_alert_message_confedit": "設定変更しました。適用するには、ハイペリオンを再起動してください。",
|
||||
"dashboard_alert_message_confedit_t": "設定変更しました",
|
||||
"dashboard_alert_message_confsave_success": "設定を保存し、有効化にしました。",
|
||||
"dashboard_alert_message_confsave_success_t": "設定を保存しました",
|
||||
"dashboard_alert_message_disabled": "インスタンスが無効になっています。使用するにはダッシュボードにて有効にしてください。",
|
||||
"dashboard_alert_message_disabled_t": "LEDハードウェアインスタンスを無効",
|
||||
"dashboard_componentbox_label_comp": "コンポネント",
|
||||
"dashboard_componentbox_label_status": "ステータス",
|
||||
"dashboard_componentbox_label_title": "コンポネント・ステータス",
|
||||
"dashboard_infobox_label_currenthyp": "バージョン",
|
||||
"dashboard_infobox_label_disableh": "インスタンスを無効にする",
|
||||
"dashboard_infobox_label_enableh": "インスタンスを有効にする",
|
||||
"dashboard_infobox_label_instance": "インスタンス",
|
||||
"dashboard_infobox_label_latesthyp": "最新バージョン",
|
||||
"dashboard_infobox_label_platform": "プラットフォーム",
|
||||
"dashboard_infobox_label_ports": "ポート",
|
||||
"dashboard_infobox_label_smartacc": "スマートアクセス",
|
||||
"dashboard_infobox_label_statush": "ステータス",
|
||||
"dashboard_infobox_label_title": "システム情報",
|
||||
"dashboard_infobox_message_updatesuccess": "最新版を使用しています",
|
||||
"dashboard_infobox_message_updatewarning": "最新版のアップデートあります!",
|
||||
"dashboard_label_intro": "ハイペリオンのステータスを確認できる画面です",
|
||||
"dashboard_newsbox_label_title": "ブログ",
|
||||
"dashboard_newsbox_noconn": "ハイペリオンサーバーに接続して最新情報を見れない場合は、インターネット接続を確認してください。",
|
||||
"dashboard_newsbox_readmore": "詳細を読む",
|
||||
"dashboard_newsbox_visitblog": "ハイペリオンのブログを見る",
|
||||
"edt_conf_bb_mode_title": "モード",
|
||||
"edt_conf_color_black_title": "ブラック",
|
||||
"edt_conf_color_blue_title": "青",
|
||||
"edt_conf_color_brightness_title": "明るさ",
|
||||
"edt_conf_color_channelAdjustment_header_itemtitle": "プロファイル",
|
||||
"edt_conf_color_channelAdjustment_header_title": "カラーチャネルの調整",
|
||||
"edt_conf_color_cyan_title": "シアン",
|
||||
"edt_conf_color_green_title": "緑",
|
||||
"edt_conf_color_heading_title": "色の調整",
|
||||
"edt_conf_color_id_title": "ID",
|
||||
"edt_conf_color_leds_title": "LEDインデックス",
|
||||
"edt_conf_color_magenta_title": "マジェスタ",
|
||||
"edt_conf_color_red_title": "赤",
|
||||
"edt_conf_color_white_title": "ホワイト",
|
||||
"edt_conf_color_yellow_title": "黄",
|
||||
"edt_conf_enum_NO_CHANGE": "自動",
|
||||
"edt_conf_enum_NTSC": "NTSC",
|
||||
"edt_conf_enum_PAL": "PAL",
|
||||
"edt_conf_enum_automatic": "自動",
|
||||
"edt_conf_enum_bbclassic": "クラシック",
|
||||
"edt_conf_enum_bbdefault": "デフォルト",
|
||||
"edt_conf_enum_bbosd": "OSD",
|
||||
"edt_conf_enum_bgr": "BGR 青・緑・赤",
|
||||
"edt_conf_enum_brg": "BRG 青・赤・緑",
|
||||
"edt_conf_enum_color": "色",
|
||||
"edt_conf_enum_effect": "効果",
|
||||
"edt_conf_enum_gbr": "GBR 緑・青・赤",
|
||||
"edt_conf_enum_grb": "GRB 緑・赤・青",
|
||||
"edt_conf_enum_logdebug": "デバッグ",
|
||||
"edt_conf_enum_logwarn": "警告",
|
||||
"edt_conf_enum_multicolor_mean": "マルチカラー",
|
||||
"edt_conf_enum_rbg": "RBG 赤・青・緑",
|
||||
"edt_conf_enum_rgb": "RGB 赤・緑・青",
|
||||
"edt_conf_enum_unicolor_mean": "ユニカラー",
|
||||
"edt_conf_fg_type_title": "タイプ",
|
||||
"edt_conf_fge_type_title": "タイプ",
|
||||
"edt_conf_gen_heading_title": "全般設定",
|
||||
"edt_conf_gen_name_title": "設定の名前",
|
||||
"edt_conf_gen_showOptHelp_title": "説明を表示する",
|
||||
"edt_conf_general_enable_expl": "コンポネントを有効にする。",
|
||||
"edt_conf_general_enable_title": "有効にする",
|
||||
"edt_conf_general_port_expl": "使用ポート",
|
||||
"edt_conf_general_port_title": "ポート",
|
||||
"edt_conf_general_priority_expl": "このコンポネントの優先度",
|
||||
"edt_conf_general_priority_title": "有線チャネル",
|
||||
"edt_conf_smooth_heading_title": "スムージング",
|
||||
"edt_conf_smooth_time_ms_title": "時刻",
|
||||
"edt_conf_smooth_type_expl": "スムージングタイプ",
|
||||
"edt_conf_smooth_type_title": "タイプ",
|
||||
"edt_conf_v4l2_device_title": "デバイス",
|
||||
"edt_conf_v4l2_heading_title": "USBキャプチャ",
|
||||
"edt_conf_v4l2_standard_title": "ビデオスタンダード",
|
||||
"edt_dev_auth_key_title": "認証トークン",
|
||||
"edt_dev_enum_sub_min_cool_adjust": "クールホワイトを減らす",
|
||||
"edt_dev_enum_sub_min_warm_adjust": "ワームホワイトを減らす",
|
||||
"edt_dev_general_autostart_title": "オートスタート",
|
||||
"edt_dev_general_colorOrder_title": "RGBの並び",
|
||||
"edt_dev_general_hardwareLedCount_title": "ハードウェアLED数",
|
||||
"edt_dev_general_heading_title": "一般設定",
|
||||
"edt_dev_general_name_title": "設定の名前",
|
||||
"edt_dev_spec_FCledToOn_title": "フェードキャンディーLEDを有効にする",
|
||||
"edt_dev_spec_FCsetConfig_title": "フェードキャンディの設定",
|
||||
"edt_dev_spec_baudrate_title": "ボーレート",
|
||||
"edt_dev_spec_cid_title": "CID",
|
||||
"edt_dev_spec_colorComponent_title": "カラーコンポネント",
|
||||
"edt_dev_spec_dmaNumber_title": "DMAチャネル",
|
||||
"edt_dev_spec_gpioBcm_title": "GPIOピン",
|
||||
"edt_dev_spec_gpioMap_title": "GPIOマッピング",
|
||||
"edt_dev_spec_gpioNumber_title": "GPIO番号",
|
||||
"edt_dev_spec_intervall_title": "インタバル",
|
||||
"edt_dev_spec_ledIndex_title": "LEDインデックス",
|
||||
"edt_dev_spec_ledType_title": "LEDタイプ",
|
||||
"edt_dev_spec_lightid_itemtitle": "ID",
|
||||
"edt_dev_spec_lightid_title": "ライトID",
|
||||
"edt_dev_spec_maxPacket_title": "最大パケット",
|
||||
"edt_dev_spec_maximumLedCount_title": "最大LED数",
|
||||
"edt_dev_spec_numberOfLeds_title": "LED数",
|
||||
"edt_dev_spec_outputPath_title": "出力パス",
|
||||
"edt_dev_spec_pid_title": "PID",
|
||||
"edt_dev_spec_port_title": "ポート",
|
||||
"edt_dev_spec_serial_title": "シリアル番号",
|
||||
"edt_dev_spec_spipath_title": "SPIデバイス",
|
||||
"edt_dev_spec_targetIpHost_title": "ホスト名/IPアドレス",
|
||||
"edt_dev_spec_targetIp_title": "IPアドレス",
|
||||
"edt_dev_spec_uid_title": "UID",
|
||||
"edt_dev_spec_universe_title": "ユニバース",
|
||||
"edt_dev_spec_useRgbwProtocol_title": "RGBWプロトコルを使用する",
|
||||
"edt_dev_spec_username_title": "ユーザー名",
|
||||
"edt_dev_spec_vid_title": "VID",
|
||||
"edt_eff_image_source_url": "URL",
|
||||
"effectsconfigurator_button_deleffect": "効果を削除する",
|
||||
"effectsconfigurator_button_editeffect": "効果をロードする",
|
||||
"effectsconfigurator_button_saveeffect": "効果を保存",
|
||||
"effectsconfigurator_button_starttest": "テスト開始",
|
||||
"effectsconfigurator_button_stoptest": "テスト中止",
|
||||
"effectsconfigurator_editdeleff": "効果を削除/ロードする",
|
||||
"effectsconfigurator_label_chooseeff": "テンプレートを選択する",
|
||||
"effectsconfigurator_label_effectname": "効果名",
|
||||
"general_access_advanced": "アドバンスト",
|
||||
"general_access_default": "一般",
|
||||
"general_access_expert": "エキスパート",
|
||||
"general_btn_back": "戻る",
|
||||
"general_btn_cancel": "キャンセル",
|
||||
"general_btn_continue": "続行",
|
||||
"general_btn_iswitch": "スイッチ",
|
||||
"general_btn_next": "次へ",
|
||||
"general_btn_off": "切",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_on": "入",
|
||||
"general_btn_restarthyperion": "ハイペリオンを再起動する",
|
||||
"general_btn_save": "保存",
|
||||
"general_btn_saveandreload": "保存してリフレッシュ",
|
||||
"general_btn_yes": "はい",
|
||||
"general_button_savesettings": "設定保存",
|
||||
"general_col_blue": "青",
|
||||
"general_col_green": "緑",
|
||||
"general_col_red": "赤",
|
||||
"general_comp_BLACKBORDER": "黒帯検出",
|
||||
"general_comp_BOBLIGHTSERVER": "ボブライト・サーバー",
|
||||
"general_comp_FLATBUFSERVER": "フラットバッファ・サーバー",
|
||||
"general_comp_FORWARDER": "フォワーダー",
|
||||
"general_comp_GRABBER": "画面キャプチャ",
|
||||
"general_comp_LEDDEVICE": "LED出力",
|
||||
"general_comp_PROTOSERVER": "プロトコルバッファ・サーバー",
|
||||
"general_comp_SMOOTHING": "スムージング",
|
||||
"general_comp_V4L": "キャプチャ - USB入力",
|
||||
"general_country_de": "ドイツ",
|
||||
"general_country_es": "スペイン",
|
||||
"general_country_fr": "仏国",
|
||||
"general_country_it": "イタリア",
|
||||
"general_country_nl": "オランダ",
|
||||
"general_country_uk": "英国",
|
||||
"general_country_us": "米国",
|
||||
"general_speech_cs": "チェコ語",
|
||||
"general_speech_de": "ドイツ語",
|
||||
"general_speech_en": "英語",
|
||||
"general_speech_es": "スペイン語",
|
||||
"general_speech_it": "イタリア語",
|
||||
"general_webui_title": "ハイペリオン - ウェブ設定",
|
||||
"infoDialog_checklist_title": "チェックリスト!",
|
||||
"infoDialog_effconf_created_text": "\"$1\"は正しく作成されました!",
|
||||
"infoDialog_effconf_deleted_text": "\"$1\"は正しく削除されました!",
|
||||
"infoDialog_general_error_title": "エラー",
|
||||
"infoDialog_general_success_title": "大成功!",
|
||||
"infoDialog_general_warning_title": "警告",
|
||||
"infoDialog_import_comperror_text": "残念!このブラウザーはインポートを対応していません。別なブラウザーで試してください。",
|
||||
"infoDialog_import_confirm_title": "インポートの確認",
|
||||
"infoDialog_wizrgb_text": "RGBの並び順を修正しました。",
|
||||
"info_conlost_label_autorefresh": "このページは自動的に更新します。",
|
||||
"info_conlost_label_reason": "原因:",
|
||||
"info_conlost_label_reason1": "- インターネットにせt属されていない",
|
||||
"info_conlost_label_reason2": "‐ ハイペリオンがアップデート中",
|
||||
"info_conlost_label_reason3": "- ハイペリオンが起動されていない",
|
||||
"info_restart_title": "再起動中…",
|
||||
"main_ledsim_btn_togglelednumber": "LED番号を表示する",
|
||||
"main_ledsim_btn_toggleleds": "LEDを表示する",
|
||||
"main_ledsim_btn_togglelivevideo": "LEDビデオ",
|
||||
"main_ledsim_title": "LEDの視覚化",
|
||||
"main_menu_about_token": "ハイペリオンについて",
|
||||
"main_menu_colors_conf_token": "イメージ・プロセシング",
|
||||
"main_menu_configuration_token": "LEDのインスタンス",
|
||||
"main_menu_dashboard_token": "ダッシュボード",
|
||||
"main_menu_effect_conf_token": "効果",
|
||||
"main_menu_effectsconfigurator_token": "効果設定",
|
||||
"main_menu_general_conf_token": "一般",
|
||||
"main_menu_grabber_conf_token": "キャプチャ・ハードウェア",
|
||||
"main_menu_input_selection_token": "入力選択",
|
||||
"main_menu_leds_conf_token": "LED出力",
|
||||
"main_menu_logging_token": "ログ",
|
||||
"main_menu_network_conf_token": "ネットワーク設定",
|
||||
"main_menu_remotecontrol_token": "リモート・コントロール設定",
|
||||
"main_menu_support_token": "サポート",
|
||||
"main_menu_system_token": "システム",
|
||||
"main_menu_update_token": "アップデート",
|
||||
"main_menu_webconfig_token": "ウェブ設定",
|
||||
"remote_adjustment_label": "色の調整",
|
||||
"remote_color_button_reset": "色/効果をリセット",
|
||||
"remote_color_label": "色/効果",
|
||||
"remote_color_label_color": "色:",
|
||||
"remote_effects_label_effects": "効果:",
|
||||
"remote_input_clearall": "全ての効果/色をクリアする",
|
||||
"remote_input_ip": "IP:",
|
||||
"remote_input_label": "ソース選択",
|
||||
"remote_input_label_autoselect": "自動選択",
|
||||
"remote_input_owner": "タイプ",
|
||||
"remote_input_priority": "優先度",
|
||||
"remote_input_setsource_btn": "ソース選択",
|
||||
"remote_maptype_label_multicolor_mean": "マルチカラー",
|
||||
"remote_maptype_label_unicolor_mean": "ユニカラー",
|
||||
"remote_optgroup_syseffets": "システム設定",
|
||||
"remote_optgroup_usreffets": "ユーザー設定",
|
||||
"remote_videoMode_label": "ビデオモード",
|
||||
"support_label_forumtitle": "フォーラム",
|
||||
"support_label_ghtext": "GitHubへ",
|
||||
"support_label_title": "ハイペリオンをサポートする",
|
||||
"support_label_wikititle": "ドキュメンテーション",
|
||||
"update_button_changelog": "変更ログ",
|
||||
"update_button_install": "インストール",
|
||||
"update_error_getting_versions": "最新バージョンをとけていできません",
|
||||
"update_label_description": "説明",
|
||||
"update_label_type": "タイプ:",
|
||||
"update_versreminder": "使用中のバージョン:",
|
||||
"wiz_cc_btn_stop": "ビデオを停止する",
|
||||
"wiz_cc_btn_switchpic": "画像の切り替え:",
|
||||
"wiz_cc_kodimsg_start": "テスト成功 - 次へ進みましょう!",
|
||||
"wiz_cc_kodishould": "Kodiに次の画像が表示されます:$1",
|
||||
"wiz_cc_kwebs": "Kodiウェブサーバー(ホスト名またはIPアドレス)",
|
||||
"wiz_cc_testintro": "テストしましょう!",
|
||||
"wiz_cc_title": "色調整ウィザード",
|
||||
"wiz_hue_create_user": "ユーザーIDを新規作成",
|
||||
"wiz_hue_ip": "ホスト名またはIPアドレス",
|
||||
"wiz_hue_searchb": "ブリッジを検証中…",
|
||||
"wiz_hue_title": "フィリップスヒューウィザード",
|
||||
"wiz_hue_username": "ユーザーID",
|
||||
"wiz_rgb_qgend": "緑?",
|
||||
"wiz_rgb_qrend": "赤?",
|
||||
"wiz_rgb_title": "RGBの並び順",
|
||||
"wiz_wizavail": "ウィザードを使用可能"
|
||||
}
|
|
@ -0,0 +1,180 @@
|
|||
{
|
||||
"about_translations": "Oversettelser",
|
||||
"about_version": "Versjon",
|
||||
"conf_general_impexp_expbtn": "Eksporter",
|
||||
"conf_general_impexp_impbtn": "Importer",
|
||||
"conf_general_impexp_l1": "Import en konfigurasjon ved å velge en konfigurasjonsfil nedenfor og trykk \"Importer\".",
|
||||
"conf_general_impexp_l2": "Eksporter en konfigurasjon ved å trykke \"Eksporter\". Nettleseren din starter en nedlastning.",
|
||||
"conf_general_impexp_title": "Import/eksport konfigurasjon",
|
||||
"conf_general_label_title": "Generelle innstillinger",
|
||||
"conf_helptable_expl": "Forklaring",
|
||||
"conf_helptable_option": "Valg",
|
||||
"conf_leds_contr_label_contrtype": "Kontrollertype:",
|
||||
"conf_leds_layout_advanced": "Avanserte innstillinger",
|
||||
"conf_leds_layout_btn_checklist": "Vis sjekkliste",
|
||||
"conf_leds_layout_button_savelay": "Lagre Oppsett",
|
||||
"conf_leds_layout_button_updsim": "Oppdater Forhåndsvining",
|
||||
"conf_leds_layout_cl_bottom": "Bunn",
|
||||
"conf_leds_layout_cl_left": "Venstre",
|
||||
"conf_leds_layout_cl_right": "Høyre",
|
||||
"conf_leds_layout_cl_top": "Topp",
|
||||
"conf_leds_layout_frame": "Klassisk Oppsett (LED Ramme)",
|
||||
"conf_leds_layout_matrix": "Matrix Oppsett (LED-vegg)",
|
||||
"conf_leds_layout_peview": "LED-oppsett forhåndsvisning",
|
||||
"conf_leds_layout_ptlh": "Horisontal",
|
||||
"conf_leds_layout_ptlv": "Vertikal",
|
||||
"conf_leds_nav_label_ledcontroller": "LED kontroller",
|
||||
"conf_leds_nav_label_ledlayout": "LED-oppsett",
|
||||
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
|
||||
"conf_leds_optgroup_RPiPWM": "RPi PWM",
|
||||
"conf_leds_optgroup_RPiSPI": "RPi SPI",
|
||||
"conf_leds_optgroup_network": "Nettverk",
|
||||
"conf_leds_optgroup_usb": "USB/Serial",
|
||||
"dashboard_alert_message_confedit": "Din Hyperion konfigureringer er blitt endret. For å aktivere dem, restart Hyperion.",
|
||||
"dashboard_alert_message_confedit_t": "Konfigurering endret",
|
||||
"dashboard_alert_message_confsave_success": "Dine Hyperionkonfigureringer er vellykket endret. Dine endringer er nå aktive.",
|
||||
"dashboard_alert_message_confsave_success_t": "Konfigurasjon lagret",
|
||||
"dashboard_componentbox_label_comp": "Komponent",
|
||||
"dashboard_componentbox_label_status": "Status",
|
||||
"dashboard_componentbox_label_title": "Komponentstatus",
|
||||
"dashboard_infobox_label_currenthyp": "Din Hyperion versjon:",
|
||||
"dashboard_infobox_label_disableh": "Deaktiver forekomst: $1",
|
||||
"dashboard_infobox_label_enableh": "Aktiver forekomst: $1",
|
||||
"dashboard_infobox_label_instance": "Forekomst:",
|
||||
"dashboard_infobox_label_latesthyp": "Siste Hyperion versjon:",
|
||||
"dashboard_infobox_label_platform": "Plattform:",
|
||||
"dashboard_infobox_label_ports": "Porter",
|
||||
"dashboard_infobox_label_smartacc": "Smart Adgang",
|
||||
"dashboard_infobox_label_statush": "Hyperion status:",
|
||||
"dashboard_infobox_label_title": "Informasjon",
|
||||
"dashboard_infobox_message_updatesuccess": "Du kjører siste versjon av Hyperion.",
|
||||
"dashboard_infobox_message_updatewarning": "En nyere versjon av Hyperion er tilgjengelig! ($1)",
|
||||
"dashboard_label_intro": "Dashbordet gir en enkel oversikt over statusen til Hyperion.",
|
||||
"dashboard_message_do_not_show_again": "Ikke vis denne meldingen igjen",
|
||||
"dashboard_newsbox_label_title": "Hyperion-Blogg",
|
||||
"dashboard_newsbox_noconn": "Kan ikke koble Hyperion Serveren for å motta siste innlegg, fungerer internettilkoblingen?",
|
||||
"dashboard_newsbox_readmore": "Les mer",
|
||||
"dashboard_newsbox_visitblog": "Besøk Hyperion-Bloggen",
|
||||
"edt_conf_enum_dl_error": "Feil",
|
||||
"edt_conf_enum_hsv": "HSV",
|
||||
"edt_conf_enum_right_left": "Høyre til venstre",
|
||||
"edt_dev_spec_clientKey_title": "Klientnøkkel",
|
||||
"edt_dev_spec_lights_itemtitle": "Lys",
|
||||
"edt_dev_spec_lights_name": "Navn",
|
||||
"edt_dev_spec_networkDevicePort_title": "Port",
|
||||
"edt_dev_spec_order_left_right_title": "2.",
|
||||
"edt_dev_spec_order_top_down_title": "1.",
|
||||
"edt_eff_grayscale": "Gråskala",
|
||||
"edt_eff_image_source": "Bildekilde",
|
||||
"edt_eff_image_source_file": "Lokal fil",
|
||||
"edt_eff_image_source_url": "URL",
|
||||
"edt_eff_ledtest_header": "LED Test",
|
||||
"edt_eff_plasma_header": "Plasma",
|
||||
"edt_eff_url": "Bildeadresse",
|
||||
"effectsconfigurator_button_deleffect": "Slett effekt",
|
||||
"effectsconfigurator_button_editeffect": "Last inn effekt",
|
||||
"effectsconfigurator_button_starttest": "Start test",
|
||||
"effectsconfigurator_button_stoptest": "Stop test",
|
||||
"effectsconfigurator_label_effectname": "Effektnavn",
|
||||
"general_access_advanced": "Avansert",
|
||||
"general_access_default": "Standard",
|
||||
"general_access_expert": "Ekspert",
|
||||
"general_btn_back": "Tilbake",
|
||||
"general_btn_cancel": "Avbryt",
|
||||
"general_btn_continue": "Fortsett",
|
||||
"general_btn_denyAccess": "Nekt tilgang",
|
||||
"general_btn_grantAccess": "Gi tilgang",
|
||||
"general_btn_iswitch": "Bytt",
|
||||
"general_btn_next": "Neste",
|
||||
"general_btn_off": "Av",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_on": "På",
|
||||
"general_btn_restarthyperion": "Start Hyperion på nytt",
|
||||
"general_btn_save": "Lagre",
|
||||
"general_btn_saveandreload": "Lagre og last inn på nytt",
|
||||
"general_btn_saverestart": "Lagre og restart",
|
||||
"general_btn_yes": "Ja",
|
||||
"general_col_blue": "blå",
|
||||
"general_col_green": "grønn",
|
||||
"general_col_red": "rød",
|
||||
"general_comp_BLACKBORDER": "Blackbar gjennkjennelse",
|
||||
"general_comp_BOBLIGHTSERVER": "Boblight Server",
|
||||
"general_comp_SMOOTHING": "Utjevning",
|
||||
"general_country_cn": "Kina",
|
||||
"general_country_de": "Tyskland",
|
||||
"general_country_es": "Spania",
|
||||
"general_country_fr": "Frankrike",
|
||||
"general_country_it": "Italia",
|
||||
"general_country_nl": "Nederland",
|
||||
"general_country_ru": "Russland",
|
||||
"general_country_uk": "Storbritania",
|
||||
"general_country_us": "USA",
|
||||
"general_speech_cs": "Tsjekkisk",
|
||||
"general_speech_de": "Tysk",
|
||||
"general_speech_en": "Engelsk",
|
||||
"general_speech_es": "Spansk",
|
||||
"general_speech_fr": "Fransk",
|
||||
"general_speech_it": "Italiensk",
|
||||
"general_speech_nl": "Nederlandsk",
|
||||
"general_speech_pl": "Polsk",
|
||||
"general_speech_ro": "Rumensk",
|
||||
"general_speech_ru": "Russisk",
|
||||
"general_speech_sv": "Svensk",
|
||||
"general_speech_tr": "Tyrkisk",
|
||||
"general_speech_vi": "Vietnamesisk",
|
||||
"general_speech_zh-CN": "Kinesisk (forenklet)",
|
||||
"general_webui_title": "Hyperion - Webkonfigurasjon",
|
||||
"infoDialog_checklist_title": "Sjekkliste!",
|
||||
"infoDialog_general_success_title": "Suksess",
|
||||
"infoDialog_general_warning_title": "Advarsel",
|
||||
"infoDialog_import_confirm_title": "Bekreft import",
|
||||
"infoDialog_password_minimum_length": "Passord må bestå av minst 8 tegn",
|
||||
"infoDialog_username_text": "Brukernavn",
|
||||
"infoDialog_writeconf_error_text": "Lagringen av konfigurasjonen din feilet.",
|
||||
"info_conlost_label_autorecon": "Vil koble til på nytt når Hyperion er tilgjengelig.",
|
||||
"info_conlost_label_reason": "Mulige årsaker:",
|
||||
"main_ledsim_btn_togglelednumber": "Antall LED",
|
||||
"main_ledsim_btn_toggleleds": "Vis LED",
|
||||
"main_ledsim_btn_togglelivevideo": "Direktevideo",
|
||||
"main_ledsim_title": "LED-visualisering",
|
||||
"main_menu_about_token": "Om Hyperion",
|
||||
"main_menu_colors_conf_token": "Bildebehandling",
|
||||
"main_menu_configuration_token": "Konfigureringer",
|
||||
"main_menu_dashboard_token": "Dashbord",
|
||||
"main_menu_effect_conf_token": "Effekter",
|
||||
"main_menu_effectsconfigurator_token": "Effekt konfigurerer",
|
||||
"main_menu_general_conf_token": "Generell",
|
||||
"main_menu_instcapture_conf_token": "Kilder",
|
||||
"main_menu_logging_token": "Logg",
|
||||
"main_menu_network_conf_token": "Nettverkstjenester",
|
||||
"main_menu_remotecontrol_token": "Fjern-kontroll",
|
||||
"main_menu_support_token": "Støtte",
|
||||
"main_menu_system_token": "System",
|
||||
"main_menu_update_token": "Oppdater",
|
||||
"main_menu_webconfig_token": "Web-konfigurasjon",
|
||||
"remote_adjustment_label": "Fargejusteringer",
|
||||
"remote_color_button_reset": "Nullstill Farge/Effekt",
|
||||
"remote_color_label_color": "Farge:",
|
||||
"remote_effects_label_effects": "Effekt:",
|
||||
"remote_effects_label_picture": "Bilde:",
|
||||
"remote_input_duration": "Varighet",
|
||||
"remote_input_label": "Kildevalg",
|
||||
"remote_input_owner": "Type",
|
||||
"remote_input_priority": "Prioritet",
|
||||
"remote_input_setsource_btn": "Velg kilde",
|
||||
"remote_input_sourceactiv_btn": "Kilde aktiv",
|
||||
"remote_videoMode_2D": "2D",
|
||||
"remote_videoMode_3DSBS": "3DSBS",
|
||||
"remote_videoMode_3DTAB": "3DTAB",
|
||||
"remote_videoMode_label": "Videomodus",
|
||||
"support_label_btctext": "Adresse:",
|
||||
"support_label_donationpp": "Doner:",
|
||||
"support_label_spreadtheword": "Spre ordet",
|
||||
"update_button_install": "Installer",
|
||||
"update_label_description": "Beskrivelse:",
|
||||
"wiz_hue_username": "Bruker ID:",
|
||||
"wiz_identify": "Identifiser",
|
||||
"wiz_identify_light": "Identifiser $1",
|
||||
"wiz_rgb_qgend": "...grønn?",
|
||||
"wiz_rgb_qrend": "...rød?"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,76 @@
|
|||
{
|
||||
"dashboard_alert_message_confedit_t": "Configuração modificada",
|
||||
"dashboard_alert_message_confsave_success_t": "Configuração gravada",
|
||||
"dashboard_componentbox_label_comp": "Componente",
|
||||
"dashboard_componentbox_label_status": "Estado",
|
||||
"dashboard_componentbox_label_title": "Estado dos componentes",
|
||||
"dashboard_infobox_label_currenthyp": "A tua versão do Hyperion:",
|
||||
"dashboard_infobox_label_disableh": "Desabilitar instância: $1",
|
||||
"dashboard_infobox_label_enableh": "Habilitar instância: $1",
|
||||
"dashboard_infobox_label_instance": "Instância",
|
||||
"dashboard_infobox_label_latesthyp": "Última versão do Hyperion:",
|
||||
"dashboard_infobox_label_platform": "Plataforma:",
|
||||
"dashboard_infobox_label_ports": "Portos",
|
||||
"dashboard_infobox_label_smartacc": "Acesso Inteligente",
|
||||
"dashboard_infobox_label_statush": "Hyperion estado:",
|
||||
"dashboard_infobox_label_title": "Informação",
|
||||
"dashboard_infobox_message_updatesuccess": "Está a executar última versão do Hyperion.",
|
||||
"dashboard_infobox_message_updatewarning": "Uma versão mais recente do Hyperion está disponível! ($1)",
|
||||
"dashboard_label_intro": "O painel fornece uma visão geral rápida sobre o estado do Hyperion.",
|
||||
"dashboard_newsbox_label_title": "Hyperion-Blog",
|
||||
"dashboard_newsbox_noconn": "Não é possível conectar ao servidor Hyperion para recuperar os últimos posts, a sua conexão à Internet funciona?",
|
||||
"dashboard_newsbox_readmore": "Ler mais",
|
||||
"dashboard_newsbox_visitblog": "Visite o Hyperion-Blog",
|
||||
"general_access_advanced": "Avançado",
|
||||
"general_access_default": "Por omissão",
|
||||
"general_access_expert": "Especialista",
|
||||
"general_btn_back": "Voltar",
|
||||
"general_btn_cancel": "Cancelar",
|
||||
"general_btn_continue": "Continuar",
|
||||
"general_btn_iswitch": "Interruptor",
|
||||
"general_btn_next": "Seguinte",
|
||||
"general_btn_off": "Desligar",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_on": "Ligar",
|
||||
"general_btn_restarthyperion": "Reiniciar o Hyperion",
|
||||
"general_btn_save": "Garvar",
|
||||
"general_btn_saveandreload": "Gravar e recarregar",
|
||||
"general_btn_yes": "Sim",
|
||||
"general_button_savesettings": "Gravar configurações",
|
||||
"general_col_blue": "azul",
|
||||
"general_col_green": "verde",
|
||||
"general_col_red": "vermelho",
|
||||
"general_comp_BLACKBORDER": "Detecção de barras",
|
||||
"general_comp_BOBLIGHTSERVER": "Boblight Server",
|
||||
"general_comp_FLATBUFSERVER": "Servidor Flatbuffers",
|
||||
"general_comp_FORWARDER": "Forwarder",
|
||||
"general_comp_GRABBER": "Plataforma de Captura",
|
||||
"general_comp_LEDDEVICE": "Dispositivo LED",
|
||||
"general_comp_PROTOSERVER": "Servidor de buffers de protocolo",
|
||||
"general_comp_SMOOTHING": "Smoothing",
|
||||
"general_comp_V4L": "Captura USB",
|
||||
"general_country_de": "Alemanha",
|
||||
"general_country_es": "Espanha",
|
||||
"general_country_fr": "França",
|
||||
"general_country_it": "Itália",
|
||||
"general_country_nl": "Holanda",
|
||||
"general_country_uk": "Reino Unido",
|
||||
"general_country_us": "Estados Unidos da América",
|
||||
"general_speech_cs": "Tcheco",
|
||||
"general_speech_de": "Alemão",
|
||||
"general_speech_en": "Inglês",
|
||||
"general_speech_es": "Espanhol",
|
||||
"general_speech_it": "Italiano",
|
||||
"general_webui_title": "Hyperion - Configuração Web",
|
||||
"general_wiki_moreto": "Mais informação a \"$1\" na nossa Wiki",
|
||||
"main_menu_colors_conf_token": "Processamento de imagem",
|
||||
"main_menu_configuration_token": "Configuração",
|
||||
"main_menu_dashboard_token": "Painel",
|
||||
"main_menu_effect_conf_token": "Efeitos",
|
||||
"main_menu_general_conf_token": "Geral",
|
||||
"main_menu_grabber_conf_token": "Hardware de captura",
|
||||
"main_menu_leds_conf_token": "LED Hardware",
|
||||
"main_menu_network_conf_token": "Serviços de rede",
|
||||
"main_menu_remotecontrol_token": "Controlo remoto",
|
||||
"main_menu_support_token": "Suporte"
|
||||
}
|
|
@ -1,891 +1,96 @@
|
|||
{
|
||||
"general_webui_title": "Hyperion - Configurare Web",
|
||||
"conf_leds_contr_label_contrtype": "Tip controller",
|
||||
"conf_leds_layout_button_savelay": "Salvare model",
|
||||
"conf_leds_layout_button_updsim": "Actualizare previzualizare",
|
||||
"conf_leds_layout_cl_bottom": "Jos",
|
||||
"conf_leds_layout_cl_left": "Stânga",
|
||||
"conf_leds_layout_cl_right": "Dreapta",
|
||||
"conf_leds_layout_cl_top": "Sus",
|
||||
"conf_leds_layout_ma_cabling": "Cablare",
|
||||
"conf_leds_layout_ma_horiz": "Orizontal",
|
||||
"conf_leds_layout_ma_opthoriz": "Orizontal",
|
||||
"conf_leds_layout_ma_optparallel": "Paralel",
|
||||
"conf_leds_layout_ma_optsnake": "Șarpe",
|
||||
"conf_leds_layout_ma_order": "Direcție",
|
||||
"conf_leds_layout_ma_vert": "Vertical",
|
||||
"conf_leds_nav_label_ledcontroller": "Controller LED",
|
||||
"conf_leds_optgroup_RPiGPIO": "PRi GPIO",
|
||||
"conf_leds_optgroup_RPiPWM": "RPi PWM",
|
||||
"conf_leds_optgroup_RPiSPI": "RPi SPI",
|
||||
"conf_leds_optgroup_network": "Rețea",
|
||||
"conf_leds_optgroup_usb": "USB",
|
||||
"conf_logging_contpolicy": "Politica de confidențialitate pentru raport",
|
||||
"conf_logging_lastreports": "Rapoarte anterioare",
|
||||
"conf_logging_report": "Raport",
|
||||
"conf_logging_uplpolicy": "Apăsând acest buton accepți",
|
||||
"dashboard_alert_message_confsave_success": "Configurația ta Hyperion a fost salvată cu succes. Modificările sunt active acum.",
|
||||
"dashboard_componentbox_label_title": "Stare componente",
|
||||
"dashboard_infobox_label_currenthyp": "Versiunea ta Hyperion:",
|
||||
"dashboard_infobox_label_disableh": "Dezactivare Hyperion",
|
||||
"dashboard_infobox_label_enableh": "Activare Instans: $1",
|
||||
"dashboard_infobox_label_instance": "Instanță:",
|
||||
"dashboard_infobox_label_latesthyp": "Cea mai nouă versiune Hyperion:",
|
||||
"dashboard_infobox_label_platform": "Platformă:",
|
||||
"dashboard_infobox_label_statush": "Stare Hyperion:",
|
||||
"dashboard_infobox_label_title": "Informații",
|
||||
"dashboard_infobox_message_updatesuccess": "Rulezi cea mai recentă versiune Hyperion.",
|
||||
"dashboard_infobox_message_updatewarning": "Este disponibilă o nouă versiune Hyperion! ($1)",
|
||||
"general_access_advanced": "Avansat",
|
||||
"general_access_default": "Implicit",
|
||||
"general_access_expert": "Expert",
|
||||
"general_btn_back": "Înapoi",
|
||||
"general_btn_cancel": "Anulare",
|
||||
"general_btn_continue": "Continuă",
|
||||
"general_btn_next": "Următor",
|
||||
"general_btn_off": "Închis",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_on": "Deschis",
|
||||
"general_btn_restarthyperion": "Repornește Hyperion",
|
||||
"general_btn_save": "Salvare",
|
||||
"general_btn_saveandreload": "Salvare și reîncărcare",
|
||||
"general_btn_yes": "Da",
|
||||
"general_button_savesettings": "Salvare setări",
|
||||
"general_col_blue": "albastru",
|
||||
"general_col_green": "verde",
|
||||
"general_col_red": "roșu",
|
||||
"general_comp_BLACKBORDER": "Detecție bare negre",
|
||||
"general_comp_BOBLIGHTSERVER": "Server Boblight",
|
||||
"general_comp_GRABBER": "Captură platformă",
|
||||
"general_comp_LEDDEVICE": "Dispozitiv LED",
|
||||
"general_comp_V4L": "Captură USB",
|
||||
"general_country_de": "Germania",
|
||||
"general_country_us": "Statele Unite",
|
||||
"general_country_uk": "Regatul Unit",
|
||||
"general_country_fr": "Franța",
|
||||
"general_country_es": "Spania",
|
||||
"general_country_fr": "Franța",
|
||||
"general_country_it": "Italia",
|
||||
"general_country_nl": "Olanda",
|
||||
"general_country_uk": "Regatul Unit",
|
||||
"general_country_us": "Statele Unite",
|
||||
"general_speech_cs": "Cehă",
|
||||
"general_speech_de": "Germană",
|
||||
"general_speech_en": "Engleză",
|
||||
"general_speech_es": "Spaniolă",
|
||||
"general_speech_it": "Italiană",
|
||||
"general_speech_cs": "Cehă",
|
||||
"general_access_default": "Implicit",
|
||||
"general_access_advanced": "Avansat",
|
||||
"general_access_expert": "Expert",
|
||||
"general_comp_SMOOTHING": "",
|
||||
"general_comp_BLACKBORDER": "Detecție bare negre",
|
||||
"general_comp_FORWARDER": "",
|
||||
"general_comp_BOBLIGHTSERVER": "Server Boblight",
|
||||
"general_comp_FLATBUFSERVER": "",
|
||||
"general_comp_PROTOSERVER": "",
|
||||
"general_comp_GRABBER": "Captură platformă",
|
||||
"general_comp_V4L": "Captură USB",
|
||||
"general_comp_LEDDEVICE": "Dispozitiv LED",
|
||||
"general_col_red": "roșu",
|
||||
"general_col_green": "verde",
|
||||
"general_col_blue": "albastru",
|
||||
"general_button_savesettings": "Salvare setări",
|
||||
"general_btn_yes": "Da",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_cancel": "Anulare",
|
||||
"general_btn_continue": "Continuă",
|
||||
"general_btn_save": "Salvare",
|
||||
"general_btn_saveandreload": "Salvare și reîncărcare",
|
||||
"general_btn_restarthyperion": "Repornește Hyperion",
|
||||
"general_btn_off": "Închis",
|
||||
"general_btn_on": "Deschis",
|
||||
"general_btn_next": "Următor",
|
||||
"general_btn_back": "Înapoi",
|
||||
"general_btn_iswitch": "",
|
||||
"general_wiki_moreto": "",
|
||||
"dashboard_label_intro": "",
|
||||
"dashboard_infobox_label_title": "Informații",
|
||||
"dashboard_infobox_label_currenthyp": "Versiunea ta Hyperion:",
|
||||
"dashboard_infobox_label_latesthyp": "Cea mai nouă versiune Hyperion:",
|
||||
"dashboard_infobox_label_platform": "Platformă:",
|
||||
"dashboard_infobox_label_instance": "Instanță:",
|
||||
"dashboard_infobox_label_ports": "",
|
||||
"dashboard_infobox_message_updatewarning": "Este disponibilă o nouă versiune Hyperion! ($1)",
|
||||
"dashboard_infobox_message_updatesuccess": "Rulezi cea mai recentă versiune Hyperion.",
|
||||
"dashboard_infobox_label_statush": "Stare Hyperion:",
|
||||
"dashboard_infobox_label_smartacc": "",
|
||||
"dashboard_infobox_label_enableh": "Activare Hyperion",
|
||||
"dashboard_infobox_label_disableh": "Dezactivare Hyperion",
|
||||
"dashboard_componentbox_label_title": "Stare componente",
|
||||
"dashboard_componentbox_label_comp": "",
|
||||
"dashboard_componentbox_label_status": "",
|
||||
"dashboard_newsbox_label_title": "",
|
||||
"dashboard_newsbox_visitblog": "",
|
||||
"dashboard_newsbox_noconn": "",
|
||||
"dashboard_newsbox_readmore": "",
|
||||
"dashboard_alert_message_confedit_t": "",
|
||||
"dashboard_alert_message_confedit": "",
|
||||
"dashboard_alert_message_disabled_t": "",
|
||||
"dashboard_alert_message_disabled": "",
|
||||
"dashboard_alert_message_confsave_success_t": "",
|
||||
"dashboard_alert_message_confsave_success": "Configurația ta Hyperion a fost salvată cu succes. Modificările sunt active acum.",
|
||||
"main_menu_dashboard_token": "Panou control",
|
||||
"main_menu_configuration_token": "Configurație",
|
||||
"main_menu_general_conf_token": "General",
|
||||
"main_menu_leds_conf_token": "",
|
||||
"main_menu_grabber_conf_token": "",
|
||||
"main_menu_effect_conf_token": "Efecte",
|
||||
"general_webui_title": "Hyperion - Configurare Web",
|
||||
"main_ledsim_title": "Vizualizare LED",
|
||||
"main_menu_about_token": "Despre Hyperion",
|
||||
"main_menu_colors_conf_token": "Procesare imagine",
|
||||
"main_menu_configuration_token": "Configurație",
|
||||
"main_menu_dashboard_token": "Panou control",
|
||||
"main_menu_effect_conf_token": "Efecte",
|
||||
"main_menu_effectsconfigurator_token": "Configurator efecte",
|
||||
"main_menu_general_conf_token": "General",
|
||||
"main_menu_logging_token": "Jurnal",
|
||||
"main_menu_network_conf_token": "Servicii rețea",
|
||||
"main_menu_remotecontrol_token": "Telecomandă",
|
||||
"main_menu_effectsconfigurator_token": "Configurator efecte",
|
||||
"main_menu_support_token": "Ajutor",
|
||||
"main_menu_update_token": "Actualizare",
|
||||
"main_menu_system_token": "Sistem",
|
||||
"main_menu_input_selection_token": "",
|
||||
"main_menu_logging_token": "Jurnal",
|
||||
"main_menu_update_token": "Actualizare",
|
||||
"main_menu_webconfig_token": "Configurație web",
|
||||
"main_menu_about_token": "Despre Hyperion",
|
||||
"main_ledsim_title": "Vizualizare LED",
|
||||
"main_ledsim_text": "",
|
||||
"main_ledsim_btn_toggleleds": "",
|
||||
"main_ledsim_btn_togglelednumber": "",
|
||||
"main_ledsim_btn_togglelivevideo": "",
|
||||
"conf_general_label_title": "",
|
||||
"conf_general_intro": "",
|
||||
"conf_general_impexp_title": "",
|
||||
"conf_general_impexp_l1": "",
|
||||
"conf_general_impexp_l2": "",
|
||||
"conf_general_impexp_impbtn": "",
|
||||
"conf_general_impexp_expbtn": "",
|
||||
"conf_helptable_option": "",
|
||||
"conf_helptable_expl": "",
|
||||
"conf_effect_path_intro": "",
|
||||
"conf_effect_fgeff_intro": "",
|
||||
"conf_effect_bgeff_intro": "",
|
||||
"conf_leds_device_intro": "",
|
||||
"conf_leds_layout_intro": "",
|
||||
"conf_leds_nav_label_ledcontroller": "Controller LED",
|
||||
"conf_leds_nav_label_ledlayout": "",
|
||||
"conf_leds_contr_label_contrtype": "Tip controller",
|
||||
"conf_leds_optgroup_RPiSPI": "RPi SPI",
|
||||
"conf_leds_optgroup_RPiPWM": "RPi PWM",
|
||||
"conf_leds_optgroup_RPiGPIO": "PRi GPIO",
|
||||
"conf_leds_optgroup_network": "Rețea",
|
||||
"conf_leds_optgroup_usb": "USB",
|
||||
"conf_leds_optgroup_debug": "",
|
||||
"conf_leds_layout_btn_checklist": "",
|
||||
"conf_leds_layout_checkp1": "",
|
||||
"conf_leds_layout_checkp2": "",
|
||||
"conf_leds_layout_checkp3": "",
|
||||
"conf_leds_layout_checkp4": "",
|
||||
"conf_leds_layout_frame": "",
|
||||
"conf_leds_layout_matrix": "",
|
||||
"conf_leds_layout_generatedconf": "",
|
||||
"conf_leds_layout_button_savelay": "Salvare model",
|
||||
"conf_leds_layout_button_updsim": "Actualizare previzualizare",
|
||||
"conf_leds_layout_peview": "",
|
||||
"conf_leds_layout_advanced": "",
|
||||
"conf_leds_layout_preview_originCL": "",
|
||||
"conf_leds_layout_preview_originTEXT": "",
|
||||
"conf_leds_layout_preview_originMA": "",
|
||||
"conf_leds_layout_preview_totalleds": "",
|
||||
"conf_leds_layout_preview_ledpower": "",
|
||||
"conf_leds_layout_preview_l1": "",
|
||||
"conf_leds_layout_preview_l2": "",
|
||||
"conf_leds_layout_cl_top": "Sus",
|
||||
"conf_leds_layout_cl_bottom": "Jos",
|
||||
"conf_leds_layout_cl_left": "Stânga",
|
||||
"conf_leds_layout_cl_right": "Dreapta",
|
||||
"conf_leds_layout_cl_gaglength": "",
|
||||
"conf_leds_layout_cl_gappos": "",
|
||||
"conf_leds_layout_cl_inppos": "",
|
||||
"conf_leds_layout_cl_reversdir": "",
|
||||
"conf_leds_layout_cl_hleddepth": "",
|
||||
"conf_leds_layout_cl_vleddepth": "",
|
||||
"conf_leds_layout_cl_edgegap": "",
|
||||
"conf_leds_layout_cl_cornergap": "",
|
||||
"conf_leds_layout_cl_overlap": "",
|
||||
"conf_leds_layout_ma_horiz": "Orizontal",
|
||||
"conf_leds_layout_ma_vert": "Vertical",
|
||||
"conf_leds_layout_ma_cabling": "Cablare",
|
||||
"conf_leds_layout_ma_optsnake": "Șarpe",
|
||||
"conf_leds_layout_ma_optparallel": "Paralel",
|
||||
"conf_leds_layout_ma_order": "Direcție",
|
||||
"conf_leds_layout_ma_opthoriz": "Orizontal",
|
||||
"conf_leds_layout_ma_optvert": "",
|
||||
"conf_leds_layout_ma_position": "",
|
||||
"conf_leds_layout_ma_opttopleft": "",
|
||||
"conf_leds_layout_ma_opttopright": "",
|
||||
"conf_leds_layout_ma_optbottomleft": "",
|
||||
"conf_leds_layout_ma_optbottomright": "",
|
||||
"conf_leds_layout_textf1": "",
|
||||
"conf_grabber_fg_intro": "",
|
||||
"conf_grabber_v4l_intro": "",
|
||||
"conf_colors_color_intro": "",
|
||||
"conf_colors_smoothing_intro": "",
|
||||
"conf_colors_blackborder_intro": "",
|
||||
"conf_network_json_intro": "",
|
||||
"conf_network_bobl_intro": "",
|
||||
"conf_network_fbs_intro": "",
|
||||
"conf_network_proto_intro": "",
|
||||
"conf_network_forw_intro": "",
|
||||
"conf_logging_label_intro": "",
|
||||
"conf_logging_btn_pbupload": "",
|
||||
"conf_logging_btn_autoscroll": "",
|
||||
"conf_logging_nomessage": "",
|
||||
"conf_logging_uploading": "",
|
||||
"conf_logging_yourlink": "",
|
||||
"conf_logging_uplfailed": "",
|
||||
"conf_logging_report": "Raport",
|
||||
"conf_logging_lastreports": "Rapoarte anterioare",
|
||||
"conf_logging_uplpolicy": "Apăsând acest buton accepți",
|
||||
"conf_logging_contpolicy": "Politica de confidențialitate pentru raport",
|
||||
"conf_webconfig_label_intro": "",
|
||||
"remote_losthint": "",
|
||||
"remote_color_label": "Culori/Efecte",
|
||||
"remote_color_intro": "",
|
||||
"remote_color_button_reset": "",
|
||||
"remote_color_label_color": "",
|
||||
"remote_effects_label_effects": "",
|
||||
"remote_adjustment_label": "",
|
||||
"remote_adjustment_intro": "",
|
||||
"remote_videoMode_label": "",
|
||||
"remote_videoMode_intro": "",
|
||||
"remote_videoMode_3DSBS": "",
|
||||
"remote_videoMode_3DTAB": "",
|
||||
"remote_videoMode_2D": "",
|
||||
"remote_input_label": "",
|
||||
"remote_input_intro": "",
|
||||
"remote_input_label_autoselect": "",
|
||||
"remote_input_setsource_btn": "",
|
||||
"remote_input_sourceactiv_btn": "",
|
||||
"remote_input_duration": "Durată:",
|
||||
"remote_input_ip": "IP:",
|
||||
"remote_input_origin": "Origine",
|
||||
"remote_input_owner": "Tip",
|
||||
"remote_input_priority": "Prioritate",
|
||||
"remote_input_status": "Stare/Acțiune",
|
||||
"remote_input_duration": "Durată:",
|
||||
"remote_input_ip": "IP:",
|
||||
"remote_input_clearall": "",
|
||||
"remote_components_label": "",
|
||||
"remote_components_intro": "",
|
||||
"remote_optgroup_usreffets": "",
|
||||
"remote_optgroup_syseffets": "",
|
||||
"remote_maptype_label": "",
|
||||
"remote_maptype_intro": "",
|
||||
"remote_maptype_label_multicolor_mean": "",
|
||||
"remote_maptype_label_unicolor_mean": "",
|
||||
"effectsconfigurator_label_intro": "",
|
||||
"effectsconfigurator_label_chooseeff": "",
|
||||
"effectsconfigurator_editdeleff": "",
|
||||
"effectsconfigurator_button_saveeffect": "",
|
||||
"effectsconfigurator_label_effectname": "",
|
||||
"effectsconfigurator_button_starttest": "",
|
||||
"effectsconfigurator_button_stoptest": "",
|
||||
"effectsconfigurator_button_conttest": "",
|
||||
"effectsconfigurator_button_deleffect": "",
|
||||
"effectsconfigurator_button_editeffect": "",
|
||||
"support_label_title": "",
|
||||
"support_label_intro": "",
|
||||
"support_label_spreadtheword": "",
|
||||
"support_label_fbtext": "",
|
||||
"support_label_twtext": "",
|
||||
"support_label_ggtext": "",
|
||||
"support_label_yttext": "",
|
||||
"support_label_igtext": "",
|
||||
"support_label_donate": "",
|
||||
"support_label_affinstr1": "",
|
||||
"support_label_affinstr2": "",
|
||||
"support_label_affinstr3": "",
|
||||
"support_label_btctext": "",
|
||||
"support_label_donationpp": "",
|
||||
"support_label_webrestitle": "",
|
||||
"support_label_webpagetitle": "",
|
||||
"support_label_webpagetext": "",
|
||||
"support_label_wikititle": "",
|
||||
"support_label_wikitext": "",
|
||||
"support_label_forumtitle": "",
|
||||
"support_label_forumtext": "",
|
||||
"support_label_ghtext": "",
|
||||
"update_label_intro": "",
|
||||
"update_label_description": "",
|
||||
"update_button_install": "",
|
||||
"update_button_changelog": "",
|
||||
"update_label_type": "",
|
||||
"update_versreminder": "",
|
||||
"update_error_getting_versions": "",
|
||||
"about_version": "",
|
||||
"about_build": "",
|
||||
"about_builddate": "",
|
||||
"about_translations": "",
|
||||
"about_resources": "",
|
||||
"about_contribute": "",
|
||||
"about_credits": "",
|
||||
"info_conlost_label_title": "",
|
||||
"info_conlost_label_reason": "",
|
||||
"info_conlost_label_reason1": "",
|
||||
"info_conlost_label_reason2": "",
|
||||
"info_conlost_label_reason3": "",
|
||||
"info_conlost_label_autorecon": "",
|
||||
"info_conlost_label_autorefresh": "",
|
||||
"info_conlost_label_reload": "",
|
||||
"info_restart_title": "",
|
||||
"info_restart_rightback": "",
|
||||
"info_restart_contus": "",
|
||||
"info_restart_contusa": "",
|
||||
"info_404": "",
|
||||
"infoDialog_general_success_title": "",
|
||||
"infoDialog_general_error_title": "",
|
||||
"infoDialog_general_warning_title": "",
|
||||
"infoDialog_checklist_title": "",
|
||||
"infoDialog_effconf_deleted_text": "",
|
||||
"infoDialog_effconf_created_text": "",
|
||||
"InfoDialog_lang_title": "",
|
||||
"InfoDialog_lang_text": "",
|
||||
"InfoDialog_access_title": "",
|
||||
"InfoDialog_access_text": "",
|
||||
"InfoDialog_nowrite_title": "",
|
||||
"InfoDialog_nowrite_text": "",
|
||||
"InfoDialog_nowrite_foottext": "",
|
||||
"infoDialog_wizrgb_text": "",
|
||||
"infoDialog_writeimage_error_text": "",
|
||||
"infoDialog_writeconf_error_text": "",
|
||||
"infoDialog_import_jsonerror_text": "",
|
||||
"infoDialog_import_hyperror_text": "",
|
||||
"infoDialog_import_comperror_text": "",
|
||||
"infoDialog_import_confirm_title": "",
|
||||
"infoDialog_import_confirm_text": "",
|
||||
"InfoDialog_iswitch_title": "",
|
||||
"InfoDialog_iswitch_text": "",
|
||||
"wiz_wizavail": "",
|
||||
"wiz_guideyou": "",
|
||||
"wiz_rgb_title": "",
|
||||
"wiz_rgb_intro1": "",
|
||||
"wiz_rgb_intro2": "",
|
||||
"wiz_rgb_expl": "",
|
||||
"wiz_rgb_switchevery": "",
|
||||
"wiz_rgb_q": "",
|
||||
"wiz_rgb_qrend": "",
|
||||
"wiz_rgb_qgend": "",
|
||||
"wiz_hue_title": "",
|
||||
"wiz_hue_intro1": "",
|
||||
"wiz_hue_desc1": "",
|
||||
"wiz_hue_desc2": "",
|
||||
"wiz_hue_ip": "",
|
||||
"wiz_hue_username": "",
|
||||
"wiz_hue_create_user": "",
|
||||
"wiz_hue_failure_ip": "",
|
||||
"wiz_hue_failure_connection": "",
|
||||
"wiz_hue_failure_user": "",
|
||||
"wiz_hue_press_link": "",
|
||||
"wiz_hue_ids_disabled": "",
|
||||
"wiz_hue_ids_entire": "",
|
||||
"wiz_hue_noids": "",
|
||||
"wiz_hue_pos": "",
|
||||
"wiz_hue_searchb": "",
|
||||
"wiz_hue_blinkblue": "",
|
||||
"wiz_hue_ident": "",
|
||||
"wiz_cc_title": "",
|
||||
"wiz_cc_intro1": "",
|
||||
"wiz_cc_kwebs": "",
|
||||
"wiz_cc_kodidiscon": "",
|
||||
"wiz_cc_kodidisconlink": "",
|
||||
"wiz_cc_kodicon": "",
|
||||
"wiz_cc_kodimsg_start": "",
|
||||
"wiz_cc_kodishould": "",
|
||||
"wiz_cc_lettvshow": "",
|
||||
"wiz_cc_lettvshowm": "",
|
||||
"wiz_cc_adjustit": "",
|
||||
"wiz_cc_adjustgamma": "",
|
||||
"wiz_cc_chooseid": "",
|
||||
"wiz_cc_btn_switchpic": "",
|
||||
"wiz_cc_backlight": "",
|
||||
"wiz_cc_testintro": "",
|
||||
"wiz_cc_testintrok": "",
|
||||
"wiz_cc_testintrowok": "",
|
||||
"wiz_cc_link": "",
|
||||
"wiz_cc_morethanone": "",
|
||||
"wiz_cc_btn_stop": "",
|
||||
"wiz_cc_summary": "",
|
||||
"edt_dev_auth_key_title": "",
|
||||
"edt_dev_enum_subtract_minimum": "",
|
||||
"edt_dev_enum_sub_min_cool_adjust": "",
|
||||
"edt_dev_enum_sub_min_warm_adjust": "",
|
||||
"edt_dev_enum_white_off": "",
|
||||
"edt_dev_general_heading_title": "",
|
||||
"edt_dev_general_name_title": "",
|
||||
"edt_dev_general_hardwareLedCount_title": "",
|
||||
"edt_dev_general_colorOrder_title": "",
|
||||
"edt_dev_general_rewriteTime_title": "",
|
||||
"edt_dev_spec_header_title": "",
|
||||
"edt_dev_spec_baudrate_title": "",
|
||||
"edt_dev_spec_spipath_title": "",
|
||||
"edt_dev_spec_invert_title": "",
|
||||
"edt_dev_spec_multicastGroup_title": "",
|
||||
"edt_dev_spec_numberOfLeds_title": "",
|
||||
"edt_dev_spec_port_title": "",
|
||||
"edt_dev_spec_orbIds_title": "",
|
||||
"edt_dev_spec_useOrbSmoothing_title": "",
|
||||
"edt_dev_spec_targetIp_title": "",
|
||||
"edt_dev_spec_targetIpHost_title": "",
|
||||
"edt_dev_spec_outputPath_title": "",
|
||||
"edt_dev_spec_delayAfterConnect_title": "",
|
||||
"edt_dev_spec_FCsetConfig_title": "",
|
||||
"edt_dev_spec_FCmanualControl_title": "",
|
||||
"edt_dev_spec_FCledToOn_title": "",
|
||||
"edt_dev_spec_interpolation_title": "",
|
||||
"edt_dev_spec_dithering_title": "",
|
||||
"edt_dev_spec_gamma_title": "",
|
||||
"edt_dev_spec_whitepoint_title": "",
|
||||
"edt_dev_spec_username_title": "",
|
||||
"edt_dev_spec_lightid_title": "",
|
||||
"edt_dev_spec_lightid_itemtitle": "",
|
||||
"edt_dev_spec_transistionTime_title": "",
|
||||
"edt_dev_spec_switchOffOnBlack_title": "",
|
||||
"edt_dev_spec_brightnessFactor_title": "",
|
||||
"edt_dev_spec_ledType_title": "",
|
||||
"edt_dev_spec_uid_title": "",
|
||||
"edt_dev_spec_intervall_title": "",
|
||||
"edt_dev_spec_latchtime_title": "",
|
||||
"edt_dev_spec_maxPacket_title": "",
|
||||
"edt_dev_spec_serial_title": "",
|
||||
"edt_dev_spec_vid_title": "",
|
||||
"edt_dev_spec_pid_title": "",
|
||||
"edt_dev_spec_cid_title": "",
|
||||
"edt_dev_spec_LBap102Mode_title": "",
|
||||
"edt_dev_spec_universe_title": "",
|
||||
"edt_dev_spec_whiteLedAlgor_title": "",
|
||||
"edt_dev_spec_useRgbwProtocol_title": "",
|
||||
"edt_dev_spec_maximumLedCount_title": "",
|
||||
"edt_dev_spec_gpioNumber_title": "",
|
||||
"edt_dev_spec_dmaNumber_title": "",
|
||||
"edt_dev_spec_gpioMap_title": "",
|
||||
"edt_dev_spec_PBFiFo_title": "",
|
||||
"edt_dev_spec_gpioBcm_title": "",
|
||||
"edt_dev_spec_ledIndex_title": "",
|
||||
"edt_dev_spec_colorComponent_title": "",
|
||||
"edt_conf_general_enable_title": "",
|
||||
"edt_conf_general_enable_expl": "",
|
||||
"edt_conf_general_priority_title": "",
|
||||
"edt_conf_general_priority_expl": "",
|
||||
"edt_conf_general_port_title": "",
|
||||
"edt_conf_general_port_expl": "",
|
||||
"edt_conf_enum_color": "",
|
||||
"edt_conf_enum_effect": "",
|
||||
"edt_conf_enum_multicolor_mean": "",
|
||||
"edt_conf_enum_unicolor_mean": "",
|
||||
"edt_conf_enum_rgb": "",
|
||||
"edt_conf_enum_bgr": "",
|
||||
"edt_conf_enum_rbg": "",
|
||||
"edt_conf_enum_brg": "",
|
||||
"edt_conf_enum_gbr": "",
|
||||
"edt_conf_enum_grb": "",
|
||||
"edt_conf_enum_linear": "",
|
||||
"edt_conf_enum_PAL": "",
|
||||
"edt_conf_enum_NTSC": "",
|
||||
"edt_conf_enum_SECAM": "",
|
||||
"edt_conf_enum_NO_CHANGE": "",
|
||||
"edt_conf_enum_logsilent": "",
|
||||
"edt_conf_enum_logwarn": "",
|
||||
"edt_conf_enum_logverbose": "",
|
||||
"edt_conf_enum_logdebug": "",
|
||||
"edt_conf_enum_bbdefault": "",
|
||||
"edt_conf_enum_bbclassic": "",
|
||||
"edt_conf_enum_bbosd": "",
|
||||
"edt_conf_enum_automatic": "",
|
||||
"edt_conf_gen_heading_title": "",
|
||||
"edt_conf_gen_name_title": "",
|
||||
"edt_conf_gen_name_expl": "",
|
||||
"edt_conf_gen_showOptHelp_title": "",
|
||||
"edt_conf_gen_showOptHelp_expl": "",
|
||||
"edt_conf_color_heading_title": "",
|
||||
"edt_conf_color_channelAdjustment_header_itemtitle": "",
|
||||
"edt_conf_color_channelAdjustment_header_title": "",
|
||||
"edt_conf_color_channelAdjustment_header_expl": "",
|
||||
"edt_conf_color_imageToLedMappingType_title": "",
|
||||
"edt_conf_color_imageToLedMappingType_expl": "",
|
||||
"edt_conf_color_id_title": "",
|
||||
"edt_conf_color_id_expl": "",
|
||||
"edt_conf_color_leds_title": "",
|
||||
"edt_conf_color_leds_expl": "",
|
||||
"edt_conf_color_black_title": "",
|
||||
"edt_conf_color_black_expl": "",
|
||||
"edt_conf_color_white_title": "",
|
||||
"edt_conf_color_white_expl": "",
|
||||
"edt_conf_color_red_title": "",
|
||||
"edt_conf_color_red_expl": "",
|
||||
"edt_conf_color_green_title": "",
|
||||
"edt_conf_color_green_expl": "",
|
||||
"edt_conf_color_blue_title": "",
|
||||
"edt_conf_color_blue_expl": "",
|
||||
"edt_conf_color_cyan_title": "",
|
||||
"edt_conf_color_cyan_expl": "",
|
||||
"edt_conf_color_magenta_title": "",
|
||||
"edt_conf_color_magenta_expl": "",
|
||||
"edt_conf_color_yellow_title": "",
|
||||
"edt_conf_color_yellow_expl": "",
|
||||
"edt_conf_color_gammaRed_title": "",
|
||||
"edt_conf_color_gammaRed_expl": "",
|
||||
"edt_conf_color_gammaGreen_title": "",
|
||||
"edt_conf_color_gammaGreen_expl": "",
|
||||
"edt_conf_color_gammaBlue_title": "",
|
||||
"edt_conf_color_gammaBlue_expl": "",
|
||||
"edt_conf_color_backlightThreshold_title": "",
|
||||
"edt_conf_color_backlightThreshold_expl": "",
|
||||
"edt_conf_color_backlightColored_title": "",
|
||||
"edt_conf_color_backlightColored_expl": "",
|
||||
"edt_conf_color_brightness_title": "",
|
||||
"edt_conf_color_brightness_expl": "",
|
||||
"edt_conf_color_brightnessComp_title": "",
|
||||
"edt_conf_color_brightnessComp_expl": "",
|
||||
"edt_conf_smooth_heading_title": "",
|
||||
"edt_conf_smooth_type_title": "",
|
||||
"edt_conf_smooth_type_expl": "",
|
||||
"edt_conf_smooth_time_ms_title": "",
|
||||
"edt_conf_smooth_time_ms_expl": "",
|
||||
"edt_conf_smooth_updateFrequency_title": "",
|
||||
"edt_conf_smooth_updateFrequency_expl": "",
|
||||
"edt_conf_smooth_updateDelay_title": "",
|
||||
"edt_conf_smooth_updateDelay_expl": "",
|
||||
"edt_conf_smooth_continuousOutput_title": "",
|
||||
"edt_conf_smooth_continuousOutput_expl": "",
|
||||
"edt_conf_v4l2_heading_title": "",
|
||||
"edt_conf_v4l2_device_title": "",
|
||||
"edt_conf_v4l2_device_expl": "",
|
||||
"edt_conf_v4l2_standard_title": "",
|
||||
"edt_conf_v4l2_standard_expl": "",
|
||||
"edt_conf_v4l2_sizeDecimation_title": "",
|
||||
"edt_conf_v4l2_sizeDecimation_expl": "",
|
||||
"edt_conf_v4l2_cropLeft_title": "",
|
||||
"edt_conf_v4l2_cropLeft_expl": "",
|
||||
"edt_conf_v4l2_cropRight_title": "",
|
||||
"edt_conf_v4l2_cropRight_expl": "",
|
||||
"edt_conf_v4l2_cropTop_title": "",
|
||||
"edt_conf_v4l2_cropTop_expl": "",
|
||||
"edt_conf_v4l2_cropBottom_title": "",
|
||||
"edt_conf_v4l2_cropBottom_expl": "",
|
||||
"edt_conf_v4l2_signalDetection_title": "",
|
||||
"edt_conf_v4l2_signalDetection_expl": "",
|
||||
"edt_conf_v4l2_redSignalThreshold_title": "",
|
||||
"edt_conf_v4l2_redSignalThreshold_expl": "",
|
||||
"edt_conf_v4l2_greenSignalThreshold_title": "",
|
||||
"edt_conf_v4l2_greenSignalThreshold_expl": "",
|
||||
"edt_conf_v4l2_blueSignalThreshold_title": "",
|
||||
"edt_conf_v4l2_blueSignalThreshold_expl": "",
|
||||
"edt_conf_v4l2_sDVOffsetMin_title": "",
|
||||
"edt_conf_v4l2_sDVOffsetMin_expl": "",
|
||||
"edt_conf_v4l2_sDHOffsetMin_title": "",
|
||||
"edt_conf_v4l2_sDHOffsetMin_expl": "",
|
||||
"edt_conf_v4l2_sDVOffsetMax_title": "",
|
||||
"edt_conf_v4l2_sDVOffsetMax_expl": "",
|
||||
"edt_conf_v4l2_sDHOffsetMax_title": "",
|
||||
"edt_conf_v4l2_sDHOffsetMax_expl": "",
|
||||
"edt_conf_instCapture_heading_title": "",
|
||||
"edt_conf_instC_systemEnable_title": "",
|
||||
"edt_conf_instC_systemEnable_expl": "",
|
||||
"edt_conf_instC_v4lEnable_title": "",
|
||||
"edt_conf_instC_v4lEnable_expl": "",
|
||||
"edt_conf_fg_heading_title": "",
|
||||
"edt_conf_fg_type_title": "",
|
||||
"edt_conf_fg_type_expl": "",
|
||||
"edt_conf_fg_frequency_Hz_title": "",
|
||||
"edt_conf_fg_frequency_Hz_expl": "",
|
||||
"edt_conf_fg_width_title": "",
|
||||
"edt_conf_fg_width_expl": "",
|
||||
"edt_conf_fg_height_title": "",
|
||||
"edt_conf_fg_height_expl": "",
|
||||
"edt_conf_fg_pixelDecimation_title": "",
|
||||
"edt_conf_fg_pixelDecimation_expl": "",
|
||||
"edt_conf_fg_device_title": "",
|
||||
"edt_conf_fg_display_title": "",
|
||||
"edt_conf_fg_display_expl": "",
|
||||
"edt_conf_bb_heading_title": "",
|
||||
"edt_conf_bb_threshold_title": "",
|
||||
"edt_conf_bb_threshold_expl": "",
|
||||
"edt_conf_bb_unknownFrameCnt_title": "",
|
||||
"edt_conf_bb_unknownFrameCnt_expl": "",
|
||||
"edt_conf_bb_borderFrameCnt_title": "",
|
||||
"edt_conf_bb_borderFrameCnt_expl": "",
|
||||
"edt_conf_bb_maxInconsistentCnt_title": "",
|
||||
"edt_conf_bb_maxInconsistentCnt_expl": "",
|
||||
"edt_conf_bb_blurRemoveCnt_title": "",
|
||||
"edt_conf_bb_blurRemoveCnt_expl": "",
|
||||
"edt_conf_bb_mode_title": "",
|
||||
"edt_conf_bb_mode_expl": "",
|
||||
"edt_conf_fge_heading_title": "",
|
||||
"edt_conf_fge_type_title": "",
|
||||
"edt_conf_fge_type_expl": "",
|
||||
"edt_conf_fge_color_title": "",
|
||||
"edt_conf_fge_color_expl": "",
|
||||
"edt_conf_fge_effect_title": "",
|
||||
"edt_conf_fge_effect_expl": "",
|
||||
"edt_conf_fge_duration_ms_title": "",
|
||||
"edt_conf_fge_duration_ms_expl": "",
|
||||
"edt_conf_bge_heading_title": "",
|
||||
"edt_conf_fw_heading_title": "",
|
||||
"edt_conf_fw_json_title": "",
|
||||
"edt_conf_fw_json_expl": "",
|
||||
"edt_conf_fw_json_itemtitle": "",
|
||||
"edt_conf_js_heading_title": "",
|
||||
"edt_conf_fbs_heading_title": "",
|
||||
"edt_conf_fbs_timeout_title": "",
|
||||
"edt_conf_fbs_timeout_expl": "",
|
||||
"edt_conf_pbs_heading_title": "",
|
||||
"edt_conf_pbs_timeout_title": "",
|
||||
"edt_conf_pbs_timeout_expl": "",
|
||||
"edt_conf_bobls_heading_title": "",
|
||||
"edt_conf_webc_heading_title": "",
|
||||
"edt_conf_webc_docroot_title": "",
|
||||
"edt_conf_webc_docroot_expl": "",
|
||||
"edt_conf_effp_heading_title": "",
|
||||
"edt_conf_effp_paths_title": "",
|
||||
"edt_conf_effp_paths_expl": "",
|
||||
"edt_conf_effp_paths_itemtitle": "",
|
||||
"edt_conf_effp_disable_title": "",
|
||||
"edt_conf_effp_disable_expl": "",
|
||||
"edt_conf_effp_disable_itemtitle": "",
|
||||
"edt_conf_log_heading_title": "",
|
||||
"edt_conf_log_level_title": "",
|
||||
"edt_conf_log_level_expl": "",
|
||||
"edt_eff_smooth_custom": "",
|
||||
"edt_eff_smooth_time_ms": "",
|
||||
"edt_eff_smooth_updateFrequency": "",
|
||||
"edt_eff_waves_header": "",
|
||||
"edt_eff_waves_header_desc": "",
|
||||
"edt_eff_gif_header": "",
|
||||
"edt_eff_gif_header_desc": "",
|
||||
"edt_eff_candle_header": "",
|
||||
"edt_eff_candle_header_desc": "",
|
||||
"edt_eff_police_header": "",
|
||||
"edt_eff_police_header_desc": "",
|
||||
"edt_eff_fade_header": "",
|
||||
"edt_eff_fade_header_desc": "",
|
||||
"edt_eff_rainbowmood_header": "",
|
||||
"edt_eff_rainbowmood_header_desc": "",
|
||||
"edt_eff_knightrider_header": "",
|
||||
"edt_eff_knightrider_header_desc": "",
|
||||
"edt_eff_lightclock_header": "",
|
||||
"edt_eff_lightclock_header_desc": "",
|
||||
"edt_eff_pacman_header": "",
|
||||
"edt_eff_pacman_header_desc": "",
|
||||
"edt_eff_moodblobs_header": "",
|
||||
"edt_eff_moodblobs_header_desc": "",
|
||||
"edt_eff_swirl_header": "",
|
||||
"edt_eff_swirl_header_desc": "",
|
||||
"edt_eff_random_header": "",
|
||||
"edt_eff_random_header_desc": "",
|
||||
"edt_eff_systemshutdown_header": "",
|
||||
"edt_eff_systemshutdown_header_desc": "",
|
||||
"edt_eff_snake_header": "",
|
||||
"edt_eff_snake_header_desc": "",
|
||||
"edt_eff_sparks_header": "",
|
||||
"edt_eff_sparks_header_desc": "",
|
||||
"edt_eff_traces_header": "",
|
||||
"edt_eff_traces_header_desc": "",
|
||||
"edt_eff_x-mas_header": "",
|
||||
"edt_eff_x-mas_header_desc": "",
|
||||
"edt_eff_trails_header": "",
|
||||
"edt_eff_trails_header_desc": "",
|
||||
"edt_eff_flag_header": "",
|
||||
"edt_eff_flag_header_desc": "",
|
||||
"edt_eff_enum_all": "",
|
||||
"edt_eff_enum_all-together": "",
|
||||
"edt_eff_enum_list": "",
|
||||
"edt_eff_count": "",
|
||||
"edt_eff_color": "",
|
||||
"edt_eff_colorrandom": "",
|
||||
"edt_eff_colorone": "",
|
||||
"edt_eff_colortwo": "",
|
||||
"edt_eff_colorcount": "",
|
||||
"edt_eff_rotationtime": "",
|
||||
"edt_eff_sleeptime": "",
|
||||
"edt_eff_image": "",
|
||||
"edt_eff_fps": "",
|
||||
"edt_eff_reversedirection": "",
|
||||
"edt_eff_fadeintime": "",
|
||||
"edt_eff_fadeouttime": "",
|
||||
"edt_eff_repeat": "",
|
||||
"edt_eff_repeatcount": "",
|
||||
"edt_eff_colorendtime": "",
|
||||
"edt_eff_colorstarttime": "",
|
||||
"edt_eff_colorstart": "",
|
||||
"edt_eff_colorend": "",
|
||||
"edt_eff_maintain_end_color": "",
|
||||
"edt_eff_colorshift": "",
|
||||
"edt_eff_whichleds": "",
|
||||
"edt_eff_ledlist": "",
|
||||
"edt_eff_speed": "",
|
||||
"edt_eff_fadefactor": "",
|
||||
"edt_eff_showseconds": "",
|
||||
"edt_eff_blobcount": "",
|
||||
"edt_eff_huechange": "",
|
||||
"edt_eff_basecolorchange": "",
|
||||
"edt_eff_basecolorchangerate": "",
|
||||
"edt_eff_basecolorrangeleft": "",
|
||||
"edt_eff_basecolorrangeright": "",
|
||||
"edt_eff_brightness": "",
|
||||
"edt_eff_centerx": "",
|
||||
"edt_eff_centery": "",
|
||||
"edt_eff_saturation": "",
|
||||
"edt_eff_colorevel": "",
|
||||
"edt_eff_whitelevel": "",
|
||||
"edt_eff_alarmcolor": "",
|
||||
"edt_eff_postcolor": "",
|
||||
"edt_eff_enableshutdown": "",
|
||||
"edt_eff_length": "",
|
||||
"edt_eff_frequency": "",
|
||||
"edt_eff_min_len": "",
|
||||
"edt_eff_max_len": "",
|
||||
"edt_eff_height": "",
|
||||
"edt_eff_offset": "",
|
||||
"edt_eff_colorHour": "",
|
||||
"edt_eff_colorMinute": "",
|
||||
"edt_eff_colorSecond": "",
|
||||
"edt_eff_colorMarker": "",
|
||||
"edt_eff_markerWidth": "",
|
||||
"edt_eff_markerDepth": "",
|
||||
"edt_eff_markerEnable": "",
|
||||
"edt_eff_backgroundColor": "",
|
||||
"edt_eff_countries": "",
|
||||
"edt_eff_interval": "",
|
||||
"edt_eff_margin": "",
|
||||
"edt_eff_customColor": "",
|
||||
"edt_eff_randomCenter": "",
|
||||
"edt_eff_enableSecondSwirl": "",
|
||||
"edt_eff_reverseRandomTime": "",
|
||||
"edt_append_ns": "",
|
||||
"edt_append_ms": "",
|
||||
"edt_append_s": "",
|
||||
"edt_append_hz": "",
|
||||
"edt_append_pixel": "",
|
||||
"edt_append_percent": "",
|
||||
"edt_append_degree": "",
|
||||
"edt_append_sdegree": "",
|
||||
"edt_append_leds": "",
|
||||
"edt_msg_error_notset": "",
|
||||
"edt_msg_error_notempty": "",
|
||||
"edt_msg_error_enum": "",
|
||||
"edt_msg_error_anyOf": "",
|
||||
"edt_msg_error_oneOf": "",
|
||||
"edt_msg_error_not": "",
|
||||
"edt_msg_error_type_union": "",
|
||||
"edt_msg_error_type": "",
|
||||
"edt_msg_error_disallow_union": "",
|
||||
"edt_msg_error_disallow": "",
|
||||
"edt_msg_error_multipleOf": "",
|
||||
"edt_msg_error_maximum_excl": "",
|
||||
"edt_msg_error_maximum_incl": "",
|
||||
"edt_msg_error_minimum_excl": "",
|
||||
"edt_msg_error_minimum_incl": "",
|
||||
"edt_msg_error_maxLength": "",
|
||||
"edt_msg_error_minLength": "",
|
||||
"edt_msg_error_pattern": "",
|
||||
"edt_msg_error_additionalItems": "",
|
||||
"edt_msg_error_maxItems": "",
|
||||
"edt_msg_error_minItems": "",
|
||||
"edt_msg_error_uniqueItems": "",
|
||||
"edt_msg_error_maxProperties": "",
|
||||
"edt_msg_error_minProperties": "",
|
||||
"edt_msg_error_required": "",
|
||||
"edt_msg_error_additional_properties": "",
|
||||
"edt_msg_error_dependency": "",
|
||||
"edt_msg_button_delete_all": "",
|
||||
"edt_msg_button_delete_all_title": "",
|
||||
"edt_msg_button_delete_last": "",
|
||||
"edt_msg_button_delete_last_title": "",
|
||||
"edt_msg_button_add_row_title": "",
|
||||
"edt_msg_button_move_down_title": "",
|
||||
"edt_msg_button_move_up_title": "",
|
||||
"edt_msg_button_delete_row_title": "",
|
||||
"edt_msg_button_delete_row_title_short": "",
|
||||
"edt_msg_button_collapse": "",
|
||||
"edt_msg_button_expand": "",
|
||||
"dashboard_infobox_label_watchedversionbranch": "",
|
||||
"edt_conf_gen_watchedVersionBranch_title": "",
|
||||
"edt_conf_gen_watchedVersionBranch_expl": "",
|
||||
"about_3rd_party_licenses": "",
|
||||
"general_btn_start": "",
|
||||
"general_btn_stop": "",
|
||||
"general_btn_delete": "",
|
||||
"general_btn_rename": "",
|
||||
"dashboard_message_global_setting_t": "",
|
||||
"dashboard_message_global_setting": "",
|
||||
"conf_general_inst_title": "",
|
||||
"conf_general_inst_desc": "",
|
||||
"conf_general_inst_namehead": "",
|
||||
"conf_general_inst_actionhead": "",
|
||||
"conf_general_inst_name_title": "",
|
||||
"conf_general_createInst_btn": "",
|
||||
"conf_general_inst_renreq_t": "",
|
||||
"conf_general_inst_delreq_h": "",
|
||||
"conf_general_inst_delreq_t": "",
|
||||
"conf_network_net_intro": "",
|
||||
"conf_network_tok_title": "",
|
||||
"conf_network_tok_desc": "",
|
||||
"conf_network_tok_cidhead": "",
|
||||
"conf_network_tok_lastuse": "",
|
||||
"conf_network_tok_comment_title": "",
|
||||
"conf_network_createToken_btn": "",
|
||||
"conf_network_tok_diaTitle": "",
|
||||
"conf_network_tok_diaMsg": "",
|
||||
"conf_network_tok_intro": "",
|
||||
"edt_conf_net_heading_title": "",
|
||||
"edt_conf_net_internetAccessAPI_title": "",
|
||||
"edt_conf_net_internetAccessAPI_expl": "",
|
||||
"edt_conf_net_ipWhitelist_title": "",
|
||||
"edt_conf_net_ipWhitelist_expl": "",
|
||||
"edt_conf_net_ip_itemtitle": "",
|
||||
"edt_conf_net_apiAuth_title": "",
|
||||
"edt_conf_net_apiAuth_expl": "",
|
||||
"edt_conf_net_localApiAuth_title": "",
|
||||
"edt_conf_net_localApiAuth_expl": "",
|
||||
"general_chars_needed": "",
|
||||
"about_3rd_party_licenses_error": "",
|
||||
"edt_conf_webc_sslport_title": "",
|
||||
"edt_conf_webc_sslport_expl": "",
|
||||
"edt_conf_webc_crtPath_title": "",
|
||||
"edt_conf_webc_crtPath_expl": "",
|
||||
"edt_conf_webc_keyPath_title": "",
|
||||
"edt_conf_webc_keyPath_expl": "",
|
||||
"edt_conf_webc_keyPassPhrase_title": "",
|
||||
"edt_conf_webc_keyPassPhrase_expl": "",
|
||||
"remote_effects_label_picture": "",
|
||||
"dashboard_active_instance": "",
|
||||
"edt_conf_net_restirctedInternetAccessAPI_title": "",
|
||||
"edt_conf_net_restirctedInternetAccessAPI_expl": "",
|
||||
"edt_conf_fw_flat_title": "",
|
||||
"edt_conf_fw_flat_expl": "",
|
||||
"edt_conf_fw_flat_itemtitle": "",
|
||||
"edt_dev_spec_pwmChannel_title": "",
|
||||
"dashboard_message_default_password_t": "",
|
||||
"dashboard_message_default_password": "",
|
||||
"InfoDialog_changePassword_title": "",
|
||||
"InfoDialog_changePassword_success": "",
|
||||
"edt_conf_net_localAdminAuth_title": "",
|
||||
"edt_conf_net_localAdminAuth_expl": "",
|
||||
"edt_eff_collision_header": "",
|
||||
"edt_eff_collision_header_desc": "",
|
||||
"edt_eff_explodeRadius": "",
|
||||
"edt_dev_spec_printTimeStamp_title": "",
|
||||
"edt_eff_ledtest_header": "",
|
||||
"edt_eff_ledtest_header_desc": "",
|
||||
"update_no_updates_for_branch": "",
|
||||
"general_speech_sv": "",
|
||||
"general_speech_nl": "",
|
||||
"general_speech_pl": "",
|
||||
"general_speech_ro": "",
|
||||
"general_btn_saverestart": "",
|
||||
"general_btn_grantAccess": "",
|
||||
"general_btn_denyAccess": "",
|
||||
"conf_leds_layout_cl_topleft": "",
|
||||
"conf_leds_layout_cl_topright": "",
|
||||
"conf_leds_layout_cl_bottomleft": "",
|
||||
"conf_leds_layout_cl_bottomright": "",
|
||||
"conf_leds_layout_cl_lefttop": "",
|
||||
"conf_leds_layout_cl_leftmiddle": "",
|
||||
"conf_leds_layout_cl_leftbottom": "",
|
||||
"conf_leds_layout_cl_righttop": "",
|
||||
"conf_leds_layout_cl_rightmiddle": "",
|
||||
"conf_leds_layout_cl_rightbottom": "",
|
||||
"conf_network_tok_grantT": "",
|
||||
"conf_network_tok_grantMsg": "",
|
||||
"wiz_hue_clientkey": "",
|
||||
"wiz_hue_e_create_user": "",
|
||||
"wiz_hue_e_clientkey_needed": "",
|
||||
"wiz_hue_e_use_groupid": "",
|
||||
"wiz_hue_e_noegrpids": "",
|
||||
"wiz_hue_e_nogrpids": "",
|
||||
"wiz_hue_e_noapisupport": "",
|
||||
"wiz_hue_e_noapisupport_hint": "",
|
||||
"wiz_hue_e_title": "",
|
||||
"wiz_hue_e_intro1": "",
|
||||
"wiz_hue_e_desc1": "",
|
||||
"wiz_hue_e_desc2": "",
|
||||
"wiz_hue_e_desc3": "",
|
||||
"wiz_hue_e_use_group": "",
|
||||
"edt_dev_spec_blackLightsTimeout_title": "",
|
||||
"edt_dev_spec_brightnessThreshold_title": "",
|
||||
"edt_dev_spec_brightnessMin_title": "",
|
||||
"edt_dev_spec_brightnessMax_title": "",
|
||||
"edt_dev_spec_sslReadTimeout_title": "",
|
||||
"edt_dev_spec_sslHSTimeoutMin_title": "",
|
||||
"edt_dev_spec_sslHSTimeoutMax_title": "",
|
||||
"edt_dev_spec_verbose_title": "",
|
||||
"edt_dev_spec_debugStreamer_title": "",
|
||||
"edt_dev_spec_debugLevel_title": "",
|
||||
"edt_dev_spec_restoreOriginalState_title": "",
|
||||
"edt_dev_spec_useEntertainmentAPI_title": "",
|
||||
"edt_dev_spec_clientKey_title": "",
|
||||
"edt_dev_spec_groupId_title": "",
|
||||
"edt_dev_spec_panelorganisation_title": "",
|
||||
"edt_dev_spec_order_top_down_title": "",
|
||||
"edt_dev_spec_order_left_right_title": "",
|
||||
"edt_dev_spec_panel_start_position": "",
|
||||
"edt_conf_enum_dl_nodebug": "",
|
||||
"edt_conf_enum_dl_error": "",
|
||||
"edt_conf_enum_dl_statechange": "",
|
||||
"edt_conf_enum_dl_informational": "",
|
||||
"edt_conf_enum_dl_verbose": "",
|
||||
"edt_conf_enum_custom": "",
|
||||
"edt_conf_enum_bottom_up": "",
|
||||
"edt_conf_enum_top_down": "",
|
||||
"edt_conf_enum_right_left": "",
|
||||
"edt_conf_enum_left_right": "",
|
||||
"edt_conf_v4l2_input_title": "",
|
||||
"edt_conf_v4l2_input_expl": "",
|
||||
"edt_conf_v4l2_resolution_title": "",
|
||||
"edt_conf_v4l2_resolution_expl": "",
|
||||
"edt_conf_v4l2_framerate_title": "",
|
||||
"edt_conf_v4l2_framerate_expl": "",
|
||||
"edt_eff_plasma_header": "",
|
||||
"edt_eff_plasma_header_desc": "",
|
||||
"edt_append_percent_h": "",
|
||||
"edt_append_percent_v": "",
|
||||
"conf_leds_layout_ptln": "",
|
||||
"conf_leds_layout_ptlh": "",
|
||||
"conf_leds_layout_ptlv": "",
|
||||
"conf_leds_layout_ptl": "",
|
||||
"conf_leds_layout_ptr": "",
|
||||
"conf_leds_layout_pbl": "",
|
||||
"conf_leds_layout_pbr": "",
|
||||
"edt_dev_spec_chanperfixture_title": "",
|
||||
"dashboard_message_do_not_show_again": ""
|
||||
"remote_input_status": "Stare/Acțiune"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue