Compare commits
620 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 | |
Paulchen-Panther | ffa2fd45ac | |
Murat Seker | e52fd7b557 | |
Serhan | 6f5f28cd56 | |
Murat Seker | df0d411ba1 | |
Paulchen Panther | 30f04a326b | |
Paulchen Panther | bc0bd2bb0d | |
Murat Seker | 21b0b3f2ea | |
Murat Seker | 126c18e003 | |
Murat Seker | 6362cfcc1b | |
Serhan | d6573048e7 | |
Serhan | 37fbc1a23e | |
Murat Seker | c124e2136a | |
dependabot[bot] | a3ce4fa706 | |
Murat Seker | 95688c0f1e | |
Murat Seker | 4880e31562 | |
LordGrey | 45303e1b64 | |
Murat Seker | c85b4c530c | |
Paulchen Panther | a8954f2cc0 | |
Serhan | 02560ca67c | |
Serhan | 76cebd450b | |
Sersch | 8a9b44fd3c | |
Sersch | 13075f80d1 | |
Sersch | ac535b5810 | |
Sersch | 3d165ceb07 | |
Serhan | 52ed2d88fe | |
Serhan | ebba77f330 | |
LordGrey | 7389068a66 | |
Murat Seker | 3b48d8c9d6 | |
Paulchen-Panther | 9c5e5cac24 | |
Paulchen Panther | 4d56a8974c | |
Paulchen Panther | 0027e682e3 | |
SJunkies | 9110b3e690 | |
Paulchen Panther | 8c188d71d9 | |
Murat Seker | c32a4df587 | |
Paulchen Panther | 22ace55447 | |
Murat Seker | 69561aea9d | |
Murat Seker | dd98e245fe | |
Murat Seker | 138b7d9c94 | |
brindosch | de9ece5139 | |
Paulchen Panther | 0f3da1ccc7 | |
Murat Seker | 6cf9dfaa68 | |
Serhan | 26813be36a | |
Murat Seker | 45990f2726 | |
Murat Seker | 485beab4f3 | |
Murat Seker | a68ed7d44f | |
Murat Seker | 0cb1ab2be1 | |
Murat Seker | db8b872217 | |
Murat Seker | 458113f8f9 | |
LordGrey | bfb50b8d91 | |
heikobihr | e365a2839d | |
Serhan | 2562787dae | |
brindosch | def7d285d0 | |
Paulchen Panther | 6ce97e7f30 | |
Paulchen Panther | f9f32c6cff | |
Hyperion-Bot | 00da8c6d8e | |
brindosch | 49dc80d5ae | |
LordGrey | 1744f6d07a | |
Serhan | 5eb45e857f | |
Serhan | 38db12b109 | |
mootzen | 9ff8634d63 | |
Paulchen Panther | aa55edf5a7 | |
Paulchen Panther | 756247aa1e | |
LordGrey | e30a9d263d | |
LordGrey | 7d354aa72d | |
dependabot[bot] | 244b4e6886 | |
dependabot[bot] | 423a59fa34 | |
brindosch | 2110548751 | |
brindosch | 536b5c4c1e | |
brindosch | 4be47fd222 | |
LordGrey | 081e375927 | |
Paulchen Panther | 08de6b7831 | |
LordGrey | b49ff0e5e2 | |
LordGrey | 6c7b1813a7 | |
Sersch | 85e2bc9fb8 | |
Sersch | 6d12b111a5 | |
Sersch | f5583de85b | |
brindosch | 336379357d | |
LordGrey | 55253b5322 | |
brindosch | d5af0f4290 | |
SJunkies | 3ff7fe483f | |
SJunkies | e1288a2649 | |
SJunkies | 3f68e55d1a | |
SJunkies | 259becea04 | |
Ben Williams | 4aebd55715 | |
brindosch | a38502b8fe | |
Paulchen Panther | b0fcad4bb3 | |
LordGrey | 9472860868 | |
Paulchen Panther | 9e149308f4 | |
brindosch | 510bb903ae | |
SJunkies | 598b404f38 | |
clempat | 472da54856 | |
Paulchen Panther | da7b02fc59 | |
Paulchen Panther | aeb199b1c1 | |
Paulchen-Panther | 43a91bc21e | |
brindosch | e79615534c | |
brindosch | 884c68b239 | |
LordGrey | 0c16293319 | |
Paulchen Panther | 3a2b58b571 | |
Paulchen Panther | 91c771ccd6 |
161
.azure.yml
161
.azure.yml
|
@ -1,161 +0,0 @@
|
|||
stages:
|
||||
- stage: Build
|
||||
displayName: Build packages
|
||||
|
||||
jobs:
|
||||
|
||||
######################
|
||||
###### Linux #########
|
||||
######################
|
||||
|
||||
- job: Linux
|
||||
timeoutInMinutes: 120
|
||||
pool:
|
||||
vmImage: 'ubuntu-16.04'
|
||||
strategy:
|
||||
matrix:
|
||||
AMD64 (x64):
|
||||
dockerTag: 'amd64'
|
||||
dockerName: 'Debian Stretch (AMD64)'
|
||||
platform: 'x11'
|
||||
i386 (x86):
|
||||
dockerTag: 'i386'
|
||||
dockerName: 'Debian Stretch (i386)'
|
||||
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)
|
||||
|
||||
# move files
|
||||
- bash: 'mv -v deploy/Hyperion-* $(Build.ArtifactStagingDirectory) 2>/dev/null || :'
|
||||
workingDirectory: $(Build.SourcesDirectory)
|
||||
condition: and(succeeded(), ne(variables['system.pullrequest.isfork'], true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
||||
displayName: 'Collect artifacts'
|
||||
|
||||
# publish artifacts
|
||||
- task: PublishBuildArtifacts@1
|
||||
inputs:
|
||||
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
||||
ArtifactName: $(dockerTag)
|
||||
condition: and(succeeded(), ne(variables['system.pullrequest.isfork'], true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
||||
displayName: 'Publish artifacts'
|
||||
|
||||
######################
|
||||
###### 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'
|
||||
|
||||
# move files
|
||||
- bash: 'mv -v build/Hyperion-* $(Build.ArtifactStagingDirectory) 2>/dev/null || :'
|
||||
workingDirectory: $(Build.SourcesDirectory)
|
||||
condition: and(succeeded(), ne(variables['system.pullrequest.isfork'], true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
||||
displayName: 'Collect artifacts'
|
||||
|
||||
# publish artifacts
|
||||
- task: PublishBuildArtifacts@1
|
||||
inputs:
|
||||
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
||||
ArtifactName: 'macos'
|
||||
condition: and(succeeded(), ne(variables['system.pullrequest.isfork'], true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
||||
displayName: 'Publish artifacts'
|
||||
|
||||
################################
|
||||
###### Publish Releases ########
|
||||
################################
|
||||
|
||||
- stage: Publish
|
||||
displayName: Publish Releases
|
||||
dependsOn:
|
||||
- Build
|
||||
condition: and(succeeded('Build'), ne(variables['system.pullrequest.isfork'], true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
||||
|
||||
jobs:
|
||||
- job: PublishReleases
|
||||
timeoutInMinutes: 120
|
||||
pool:
|
||||
vmImage: ubuntu-16.04
|
||||
|
||||
steps:
|
||||
- checkout: self # represents the repo where the initial Pipelines YAML file was found
|
||||
|
||||
# download deployables artifacts
|
||||
- task: DownloadPipelineArtifact@2
|
||||
inputs:
|
||||
path: $(Build.ArtifactStagingDirectory)
|
||||
displayName: Download artifacts
|
||||
|
||||
# read version file
|
||||
- bash: |
|
||||
echo "##vso[task.setvariable variable=semVer]$(cat version)"
|
||||
echo "##vso[task.setvariable variable=preRel]$(grep -oE 'alpha|beta' version)"
|
||||
workingDirectory: '$(Build.SourcesDirectory)'
|
||||
condition: succeeded()
|
||||
displayName: 'Read and generate pipeline variables'
|
||||
|
||||
# set release to pre-release
|
||||
- bash: echo '##vso[task.setvariable variable=preRelease;]true'
|
||||
condition: and(succeeded(), or(contains(variables['preRel'], 'alpha'), contains(variables['preRel'], 'beta')), ne(variables['system.pullrequest.isfork'], true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
||||
displayName: 'Mark alpha or beta as pre-release'
|
||||
|
||||
# create github releases
|
||||
- task: GithubRelease@0
|
||||
inputs:
|
||||
gitHubConnection: Hyperion-Bot
|
||||
repositoryName: $(Build.Repository.Name)
|
||||
action: create
|
||||
target: $(Build.SourceVersion)
|
||||
tagSource: manual
|
||||
tag: $(Build.SourceBranchName)
|
||||
title: 'Hyperion $(semVer)'
|
||||
assets: |
|
||||
$(Build.ArtifactStagingDirectory)/amd64/*
|
||||
$(Build.ArtifactStagingDirectory)/i386/*
|
||||
$(Build.ArtifactStagingDirectory)/armv6hf/*
|
||||
$(Build.ArtifactStagingDirectory)/armv7hf/*
|
||||
$(Build.ArtifactStagingDirectory)/aarch64/*
|
||||
$(Build.ArtifactStagingDirectory)/macos/*
|
||||
assetUploadMode: 'replace'
|
||||
addChangeLog: false
|
||||
isPreRelease: $(preRelease)
|
||||
condition: succeeded()
|
||||
displayName: Create GitHub releases
|
|
@ -1,12 +1,9 @@
|
|||
#!/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
|
||||
echo "Github Actions detected"
|
||||
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||
CI_BUILD_DIR="$GITHUB_WORKSPACE"
|
||||
else
|
||||
|
@ -24,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
|
||||
|
@ -34,8 +34,20 @@ if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
|
|||
cd ${CI_BUILD_DIR} && source /${CI_BUILD_DIR}/test/testrunner.sh || exit 4
|
||||
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 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
|
||||
|
||||
|
@ -43,10 +55,10 @@ 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} -DDOCKER_PLATFORM=${DOCKER_TAG} ../ || exit 2 &&
|
||||
cmake -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2 &&
|
||||
make -j $(nproc) package || exit 3 &&
|
||||
cp /hyperion/build/bin/h* /deploy/ 2>/dev/null || : &&
|
||||
cp /hyperion/build/Hyperion-* /deploy/ 2>/dev/null || : &&
|
||||
|
|
|
@ -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,7 +37,4 @@ if [[ $CI_NAME == 'osx' || $CI_NAME == 'darwin' ]]; then
|
|||
brew update
|
||||
dependencies=("qt5" "python" "libusb" "cmake" "doxygen")
|
||||
installAndUpgrade "${dependencies[@]}"
|
||||
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"
|
||||
}
|
|
@ -18,4 +18,8 @@ indent_size = 4
|
|||
# js and webui
|
||||
[*.{ts,js,html}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
indent_size = 2
|
||||
|
||||
# version file
|
||||
[version]
|
||||
insert_final_newline = false
|
||||
|
|
|
@ -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: Waiting For Review
|
||||
---
|
||||
|
||||
<!-- Please don't delete this template or we'll close your issue -->
|
||||
|
@ -29,4 +29,4 @@ about: Create a report to help us improving Hyperion
|
|||
|
||||
|
||||
#### System
|
||||
<!-- Your system information - please copy paste "System info (Github Issue)" section from web configuration/system/about -->
|
||||
<!-- In the web interface of the Hyperion config go to System > About Hyperion and Paste the content of "System info (Github Issue)" here -->
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
blank_issues_enabled: false
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for Hyperion
|
||||
|
||||
labels: feature request
|
||||
---
|
||||
|
||||
<!-- Please don't delete this template or we'll close your issue -->
|
||||
|
|
|
@ -36,6 +36,9 @@ If adding a **new feature**, the PR's description includes:
|
|||
- [ ] Related documents have been updated (docs/docs/en)
|
||||
- [ ] Related tests have been updated
|
||||
|
||||
**PLEASE DON'T FORGET TO ADD YOUR CHANGES TO CHANGELOG.MD**
|
||||
- [ ] Yes, CHANGELOG.md is also updated
|
||||
|
||||
To avoid wasting your time, it's best to open a **feature request issue** first and wait for approval before working on it.
|
||||
|
||||
**Other information:**
|
||||
|
|
|
@ -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,41 +15,39 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
dockerTag: [ amd64, i386, 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: i386
|
||||
dockerName: Debian Stretch (i386)
|
||||
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
|
||||
|
@ -59,15 +57,15 @@ jobs:
|
|||
- name: Collecting deployable artifacts
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p ${{ matrix.dockerTag }}
|
||||
mv deploy/*.tar.gz ${{ matrix.dockerTag }}
|
||||
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 }}.zip
|
||||
path: ${{ matrix.dockerTag }}
|
||||
name: ${{ matrix.dockerImage }}
|
||||
path: ${{ matrix.dockerImage }}
|
||||
|
||||
######################
|
||||
###### macOS #########
|
||||
|
@ -78,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
|
||||
|
@ -106,11 +104,90 @@ 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.zip
|
||||
name: macOS
|
||||
path: macOS
|
||||
|
||||
######################
|
||||
###### Windows #######
|
||||
######################
|
||||
|
||||
windows:
|
||||
name: Windows
|
||||
runs-on: windows-2022
|
||||
env:
|
||||
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
|
||||
QT_VERSION: 5.15.2
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
# 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
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v3
|
||||
with:
|
||||
version: ${{env.QT_VERSION}}
|
||||
target: 'desktop'
|
||||
arch: 'win64_msvc2019_64'
|
||||
cache: 'true'
|
||||
cache-key-prefix: 'cache-qt-windows'
|
||||
|
||||
- name: Cache Chocolatey downloads
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
|
||||
key: ${{ runner.os }}-chocolatey
|
||||
|
||||
# - name: Install Python
|
||||
# shell: powershell
|
||||
# run: |
|
||||
# choco install --no-progress python -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
|
||||
run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat"
|
||||
|
||||
# Build packages
|
||||
- name: Build packages
|
||||
env:
|
||||
PLATFORM: windows
|
||||
shell: bash
|
||||
run: ./.ci/ci_build.sh
|
||||
|
||||
# Collecting deployable artifacts
|
||||
- name: Collecting deployable artifacts
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p windows
|
||||
mv build/*.exe windows
|
||||
|
||||
# Upload artifacts
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows
|
||||
path: windows
|
||||
|
|
|
@ -2,70 +2,200 @@ name: Hyperion CI Build
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
######################
|
||||
###### Linux #########
|
||||
######################
|
||||
- '**'
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
|
||||
###################
|
||||
###### Linux ######
|
||||
###################
|
||||
|
||||
Linux:
|
||||
name: ${{ matrix.dockerName }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
dockerTag: [ amd64, i386, 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: i386
|
||||
dockerName: Debian Stretch (i386)
|
||||
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
|
||||
|
||||
######################
|
||||
###### macOS #########
|
||||
######################
|
||||
# Upload artifacts (only on tagged commit)
|
||||
- name: Upload artifacts
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: deploy/Hyperion-*
|
||||
|
||||
###################
|
||||
###### 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)
|
||||
- name: Upload artifacts
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: build/Hyperion-*
|
||||
|
||||
#####################
|
||||
###### Windows ######
|
||||
#####################
|
||||
|
||||
windows:
|
||||
name: Windows
|
||||
runs-on: windows-2022
|
||||
env:
|
||||
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
|
||||
QT_VERSION: 5.15.2
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v3
|
||||
with:
|
||||
version: ${{env.QT_VERSION}}
|
||||
target: 'desktop'
|
||||
arch: 'win64_msvc2019_64'
|
||||
cache: 'true'
|
||||
cache-key-prefix: 'cache-qt-windows'
|
||||
|
||||
- name: Cache Chocolatey downloads
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
|
||||
key: ${{ runner.os }}-chocolatey
|
||||
|
||||
# - name: Install Python
|
||||
# shell: powershell
|
||||
# run: |
|
||||
# choco install --no-progress python -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
|
||||
run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat"
|
||||
|
||||
# Build packages
|
||||
- name: Build packages
|
||||
env:
|
||||
PLATFORM: windows
|
||||
shell: bash
|
||||
run: ./.ci/ci_build.sh
|
||||
|
||||
# Upload artifacts (only on tagged commit)
|
||||
- name: Upload artifacts
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: build/Hyperion-*
|
||||
retention-days: 1
|
||||
|
||||
#####################################
|
||||
###### Publish GitHub Releases ######
|
||||
#####################################
|
||||
|
||||
github_publish:
|
||||
name: Publish GitHub Releases
|
||||
if: startsWith(github.event.ref, 'refs/tags')
|
||||
needs: [Linux, macOS, windows]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Generate environment variables
|
||||
- name: Generate environment variables from .version and tag
|
||||
run: |
|
||||
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@v3.0.2
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
# Create draft release and upload artifacts
|
||||
- name: Create draft release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: Hyperion ${{ env.VERSION }}
|
||||
tag_name: ${{ env.TAG }}
|
||||
files: "artifacts/**"
|
||||
draft: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
##########################
|
||||
###### 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/*
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[submodule "dependencies/external/rpi_ws281x"]
|
||||
path = dependencies/external/rpi_ws281x
|
||||
url = https://github.com/hyperion-project/rpi_ws281x.git
|
||||
url = https://github.com/jgarff/rpi_ws281x
|
||||
branch = master
|
||||
[submodule "dependencies/external/flatbuffers"]
|
||||
path = dependencies/external/flatbuffers
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
}
|
|
@ -7,12 +7,28 @@
|
|||
"/usr/include/**"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "/usr/bin/gcc-5",
|
||||
"compilerPath": "/usr/bin/gcc",
|
||||
"intelliSenseMode": "gcc-x64",
|
||||
"cppStandard": "c++11",
|
||||
"cStandard": "c11",
|
||||
"configurationProvider": "ms-vscode.cmake-tools"
|
||||
},
|
||||
{
|
||||
"name": "Win32",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"C:/Qt/5.15.0/msvc2019_64/include/**"
|
||||
],
|
||||
"defines": [
|
||||
"_DEBUG",
|
||||
"UNICODE",
|
||||
"_UNICODE"
|
||||
],
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++11",
|
||||
"intelliSenseMode": "msvc-x64",
|
||||
"configurationProvider": "ms-vscode.cmake-tools"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "../"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"editor.formatOnSave": false,
|
||||
"cmake.environment": {
|
||||
},
|
||||
},
|
||||
"extensions": {
|
||||
"recommendations": [
|
||||
"twxs.cmake",
|
||||
"ms-vscode.cpptools",
|
||||
"ms-vscode.cmake-tools",
|
||||
"spmeesseman.vscode-taskexplorer",
|
||||
"yzhang.markdown-all-in-one",
|
||||
"vscode-icons-team.vscode-icons",
|
||||
"editorconfig.editorconfig"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "(Linux) hyperiond",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/build/bin/hyperiond",
|
||||
"args": ["-d"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"externalConsole": false,
|
||||
"MIMode": "gdb",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "(Windows) hyperiond",
|
||||
"type": "cppvsdbg",
|
||||
"request": "launch",
|
||||
"program": "${command:cmake.launchTargetDirectory}/hyperiond",
|
||||
"args": ["-d"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "cmake:conf Release",
|
||||
"detail": "Configure Build Env. Release/Debug switch not required for multi generators (msvc)",
|
||||
"type": "shell",
|
||||
"command": "cmake -B ${workspaceFolder}/build -DCMAKE_BUILD_TYPE=Release",
|
||||
"windows": {
|
||||
"command": "cmake -G \"Visual Studio 16 2019\" -A x64 -B ${workspaceFolder}/build"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "cmake:conf Debug",
|
||||
"detail": "Configure Build Env. Release/Debug switch not required with msvc",
|
||||
"type": "shell",
|
||||
"command": "cmake -B ${workspaceFolder}/build -DCMAKE_BUILD_TYPE=Debug",
|
||||
"windows": {
|
||||
"command": "cmake -G \"Visual Studio 16 2019\" -A x64 -B ${workspaceFolder}/build"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "build:debug hyperiond",
|
||||
"type": "shell",
|
||||
"command": "cmake --build ${workspaceFolder}/build --target hyperiond -- -j $(nproc)",
|
||||
"windows": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target hyperiond --config Debug -- -maxcpucount"
|
||||
},
|
||||
"osx": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target hyperiond -- -j $(sysctl -n hw.ncpu)"
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "build:debug all",
|
||||
"type": "shell",
|
||||
"command": "cmake --build ${workspaceFolder}/build -- -j $(nproc)",
|
||||
"windows": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --config Debug -- -maxcpucount"
|
||||
},
|
||||
"osx": {
|
||||
"command": "cmake --build ${workspaceFolder}/build -- -j $(sysctl -n hw.ncpu)"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "build:debug package",
|
||||
"type": "shell",
|
||||
"command": "cmake --build ${workspaceFolder}/build --target package -- -j $(nproc)",
|
||||
"windows": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target package --config Debug -- -maxcpucount"
|
||||
},
|
||||
"osx": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target package -- -j $(sysctl -n hw.ncpu)"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "build:release hyperiond",
|
||||
"type": "shell",
|
||||
"command": "cmake --build ${workspaceFolder}/build --target hyperiond -- -j $(nproc)",
|
||||
"windows": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target hyperiond --config Release -- -maxcpucount"
|
||||
},
|
||||
"osx": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target hyperiond -- -j $(sysctl -n hw.ncpu)"
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "build:release all",
|
||||
"type": "shell",
|
||||
"command": "cmake --build ${workspaceFolder}/build -- -j $(nproc)",
|
||||
"windows": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --config Release -- -maxcpucount"
|
||||
},
|
||||
"osx": {
|
||||
"command": "cmake --build ${workspaceFolder}/build -- -j $(sysctl -n hw.ncpu)"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "build:release package",
|
||||
"type": "shell",
|
||||
"command": "cmake --build ${workspaceFolder}/build --target package -- -j $(nproc)",
|
||||
"windows": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target package --config Release -- -maxcpucount"
|
||||
},
|
||||
"osx": {
|
||||
"command": "cmake --build ${workspaceFolder}/build --target package -- -j $(sysctl -n hw.ncpu)"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "run:hyperiond (Debug)",
|
||||
"type": "shell",
|
||||
"command": "${workspaceFolder}/build/bin/hyperiond -d",
|
||||
"windows": {
|
||||
"command": "${workspaceFolder}/build/bin/Debug/hyperiond -d -c"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "run:hyperiond (Release)",
|
||||
"type": "shell",
|
||||
"command": "${workspaceFolder}/build/bin/hyperiond -d",
|
||||
"windows": {
|
||||
"command": "${workspaceFolder}/build/bin/Release/hyperiond -d -c"
|
||||
},
|
||||
"group": "build"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -0,0 +1,628 @@
|
|||
# Changelog
|
||||
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.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)
|
||||
- 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)
|
||||
- Minor fixes
|
||||
- New Devices (#875)
|
||||
* Yeelight support incl. device discovery and setup-wizard
|
||||
* WLED as own device and pre-configuration
|
||||
- Additional device related capabilities (#875)
|
||||
* 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
|
||||
- Documentation (#875)
|
||||
* Process workflow for LED-Devices
|
||||
* Documentation of device classes & methods
|
||||
* Code template for new LED-Devices available
|
||||
- CEC detection (#877)
|
||||
|
||||
### Changed
|
||||
- Updated dependency rpi_ws281x to latest upstream (#820)
|
||||
- Updated websocket-extensions (#826)
|
||||
- webui: Suppress default password warning (#830)
|
||||
- webui: Add French, Vietnamese and Turkish (#842)
|
||||
- Show thread names in GDB for better debugging (#848)
|
||||
- CompileHowto.md updated (#864)
|
||||
- Updated Embedded python package (zip) for Linux (#871)
|
||||
- DBManager: ORDER BY parameter added to getRecord(s) (#770)
|
||||
- Corrected GitHub Actions badge
|
||||
- Fix GitHub Actions/Azure Windows Workflow/Pipeline
|
||||
- Updated submodules flatbuffers/rpi_ws281x (#873)
|
||||
- LED-Device workflow changed allowing proper suspend/resume & disable/enable scenarios (#875)
|
||||
- Network LED-Devices will stop sending packages when disabled (#875)
|
||||
- Rs232 Provider fully reworked and changed to synchronous writes (#875)
|
||||
- Rs232 configuration via portname and system location (/dev/ style), auto detection is not case-sensitive any longer (#875)
|
||||
- Additional error handling depending on device type (#875)
|
||||
- Add Windows compatibility incl. moving to Qt functions (#875)
|
||||
- Add compatibility for different Qt versions (#875)
|
||||
|
||||
|
||||
### Fixed
|
||||
- device: Nanoleaf (#829)
|
||||
- device: LPD8806 Problems fixed (#829)
|
||||
- Possible crash on shutdown (#846). Issue #668
|
||||
- Enumerate only V4L2 frame sizes & intervals for framesize type DISCRETE (fix BCM2835 ISP) (#820)
|
||||
- Fix systemd registration in debian for RPi4 (#820)
|
||||
- Fix missing define in Profiler & added header notes (#820)
|
||||
- some Windows Compile issues
|
||||
- Fix: leaking active effects during quit (#850)
|
||||
- Correct path for each build configuration
|
||||
- Fix heap corruption (#862)
|
||||
- Fix OpenSSL dependencies for Windows (#864)
|
||||
- Fix resolution change event Fixes part of #620 (#867)
|
||||
- some code improvements & cleanup (#861) (#872) (#880) (#876)
|
||||
- some little things, as always (#863)
|
||||
- AtmoOrb: Buffer length fix and new configuration validations (#875)
|
||||
- Added missing DMX SubTypes to configuration (#875)
|
||||
- Fix logger (#885)
|
||||
* Make logger thread safe
|
||||
* Include timestamp in logs
|
||||
* Make logs look a bit more cleaner
|
||||
- Decrease compile time (#886)
|
||||
- Fix some data synchronization error (#890)
|
||||
- Fix Qt screenshot crash (#889)
|
||||
- Fix crash on startup if no X server available (#892)
|
||||
- Fix RPC restart of Hyperion (#894)
|
||||
|
||||
## [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.\
|
||||
If you used a `.deb` package please uninstall it before you upgrade
|
||||
- Check for the package name `apt-cache search hyperion`. You may see now a entry like `hyperion-x86`, `hyperion-rpi`
|
||||
- Remove with the correct name `sudo apt-get remove hyperion-XX`
|
||||
- Now install the new .deb as usual. From now on the package is just called `hyperion`
|
||||
|
||||
### Added
|
||||
- [Documentation](https://docs.hyperion-project.org) for Hyperion (#780)
|
||||
- Hyperion can be compiled on windows. [Issues list](https://github.com/hyperion-project/hyperion.ng/issues/737) (#738)
|
||||
- effect: New plasma/lava lamp effect (#792)
|
||||
- device: Philips Hue Entertainment API now available as new device. [Read about requirements](https://docs.hyperion-project.org/en/user/LedDevices.html#philipshue) (#806)
|
||||
- webui: Philips Hue Entertainment API Wizard (#806)
|
||||
- webui: Toggle-Buttons for Component Remote Control (#677) (#778)
|
||||
- webui: Add Trapezoid to LED Layout creation (#791)
|
||||
|
||||
### Changed
|
||||
- webui: Dark mode adjustments (#789)
|
||||
|
||||
### Fixed
|
||||
- device: Rewrite-/LatchTime definitions for all devices adjusted (#785) (#799)
|
||||
- device: Nanoleaf crashes hyperion
|
||||
- Documentation for Hyperion (#780)
|
||||
- webui: Hide v4l2 if not available (#782)
|
||||
- Documentation fixes (#790)
|
||||
|
||||
### Removed
|
||||
- Linux 32bit packages are no longer available for download. Also the `.sh` packages are gone.
|
||||
- Mac `.dmg` package disabled because of new apple restrictions. Please use the `tar.gz` instead.
|
||||
|
||||
## [2.0.0-alpha.5](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.5) - 2020-04-17
|
||||
### Added:
|
||||
- WebUI Dark Mode (#752) (#765)
|
||||
|
||||
### Fixed:
|
||||
- SSDP Discovery reliability (#756)
|
||||
- Some effects are running extreme slowly (#763)
|
||||
- JsonAPI error "Dead lock detected" (2e578c1)
|
||||
- USB Capture only in Black and white (#766)
|
||||
|
||||
### Changed:
|
||||
- Check if requested Instance is running (#759)
|
||||
- V4L2 enhancements (#766)
|
||||
- Stages are now used in Azure CI/CD (9ca197e)
|
||||
|
||||
## [2.0.0-alpha.4](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.4) - 2020-03-27
|
||||
### Fixed:
|
||||
- Memoryleaks & Coredump, if no Grabber compiled (#724)
|
||||
- Resolve enable state for v4l and screen capture (#728)
|
||||
- Enable/Disable loops for components
|
||||
- Runs now on x86_64 LibreElec (missing libs) (#736)
|
||||
- Brightness compensation is now visible for configuration (#746)
|
||||
- Prevent malformed image size for effects with specific led layouts (#746)
|
||||
|
||||
### Changed:
|
||||
- SIGUSR1/SIGUSR2 implemented again (#725)
|
||||
- V4L2 width/height/fps options available (#734)
|
||||
- Swedish translation update
|
||||
|
||||
## [2.0.0-alpha.3](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.3) - 2020-03-01
|
||||
### Added
|
||||
- Package Update Descriptions on WebUi (#694)
|
||||
- Pull Requests will now create artifacts for faster testing!
|
||||
|
||||
### Fixed
|
||||
- Led Matrix Layout - Save/Restore (#669) (#697)
|
||||
- New hue user generation (#696)
|
||||
- Nanoleaf - Udp Network init was missing (#698)
|
||||
- Multiple memory leaks and segfault issues in Flatbuffer Forwarder
|
||||
|
||||
## [2.0.0-alpha.2](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.2) - 2020-02-20
|
||||
### Added
|
||||
- Swedish Translation (#675)
|
||||
- Dutch translation from [Kees](mailto:kees@vannieuwenhuijzen.com), [Nick](mailto:nick@doingcode.nl) & [Ward Wygaerts](mailto:wardwygaerts@gmail.com)
|
||||
- Polish translation from [Patryk Niedźwiedziński](mailto:pniedzwiedzinski19@gmail.com)
|
||||
- Romanian translation from [Ghenciu Ciprian](mailto:g.ciprian@osn.ro)
|
||||
|
||||
### Changed
|
||||
- Smoothing comp state on startup (#685)
|
||||
- Azure GitHub release title (#686)
|
||||
- SSL/Avahi problems in previous release (#689)
|
||||
- WebUI Version Check to SemVer. Also adds "Alpha" Channel (#692)
|
||||
|
||||
### Removed
|
||||
- Travis CI tests (#684)
|
||||
|
||||
## [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
|
||||
|
598
CMakeLists.txt
598
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,35 +38,98 @@ if ( CCACHE_FOUND )
|
|||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
||||
endif(CCACHE_FOUND)
|
||||
|
||||
set(Python_ADDITIONAL_VERSIONS 3.5)
|
||||
find_package( PythonInterp 3.5 REQUIRED )
|
||||
# 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()
|
||||
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_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_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_FB ON )
|
||||
SET ( DEFAULT_USB_HID 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_USB_HID 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")
|
||||
|
@ -64,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}")
|
||||
|
@ -83,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 )
|
||||
elseif ( "${PLATFORM}" STREQUAL "rpi" )
|
||||
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 ( "${PLATFORM}" STREQUAL "windows" )
|
||||
MESSAGE( WARNING "Hyperion is not developed nor tested on MS Windows.")
|
||||
endif()
|
||||
|
||||
# enable tests for -dev builds
|
||||
if ( "${PLATFORM}" MATCHES "-dev" )
|
||||
if ( "${PLATFORM}" MATCHES "-dev$" )
|
||||
SET ( DEFAULT_TESTS ON )
|
||||
endif()
|
||||
|
||||
|
@ -128,48 +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" ON)
|
||||
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_USB_HID "Enable the libusb and hid devices" ${DEFAULT_USB_HID} )
|
||||
message(STATUS "ENABLE_USB_HID = ${ENABLE_USB_HID}")
|
||||
option(ENABLE_XCB "Enable the XCB grabber" ${DEFAULT_XCB})
|
||||
message(STATUS "ENABLE_XCB = ${ENABLE_XCB}")
|
||||
|
||||
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
|
||||
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
|
||||
removeIndent()
|
||||
|
||||
option(ENABLE_QT "Enable the qt grabber" ${DEFAULT_QT})
|
||||
message(STATUS "ENABLE_QT = ${ENABLE_QT}")
|
||||
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_FLATBUF_SERVER "Enable Flatbuffers server" ${DEFAULT_FLATBUF_SERVER} )
|
||||
message(STATUS "ENABLE_FLATBUF_SERVER = ${ENABLE_FLATBUF_SERVER}")
|
||||
|
||||
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 )
|
||||
|
@ -177,39 +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}
|
||||
)
|
||||
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 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/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 ()
|
||||
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})
|
||||
|
||||
# for python 3 the checkschema.py file must be rewritten
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND python test/jsonchecks/checkschema.py config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE CHECK_CONFIG_FAILED
|
||||
)
|
||||
IF ( ${CHECK_CONFIG_FAILED} )
|
||||
MESSAGE (FATAL_ERROR "check of json default config failed" )
|
||||
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_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
|
||||
)
|
||||
|
||||
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)
|
||||
|
@ -235,99 +467,105 @@ include_directories(${CMAKE_SOURCE_DIR}/include)
|
|||
# Prefer static linking over dynamic
|
||||
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so")
|
||||
|
||||
# enable C++11
|
||||
include(CheckCXXCompilerFlag)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
|
||||
# MSVC options
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
# Search for Windows SDK
|
||||
find_package(WindowsSDK REQUIRED)
|
||||
message(STATUS "WINDOWS SDK: ${WINDOWSSDK_LATEST_DIR} ${WINDOWSSDK_LATEST_NAME}")
|
||||
message(STATUS "MSVC VERSION: ${MSVC_VERSION}")
|
||||
|
||||
# Search for DirectX9
|
||||
if (ENABLE_DX)
|
||||
find_package(DirectX9 REQUIRED)
|
||||
endif(ENABLE_DX)
|
||||
|
||||
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()
|
||||
|
||||
# Use GNU gold linker if available
|
||||
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake)
|
||||
if (NOT WIN32 AND NOT APPLE)
|
||||
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake)
|
||||
endif()
|
||||
|
||||
# Don't create new dynamic tags (RUNPATH)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
|
||||
|
||||
# setup -rpath to search for shared libs in BINARY/../lib folder
|
||||
if (UNIX AND NOT APPLE)
|
||||
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
# 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")
|
||||
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)
|
||||
|
@ -341,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" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -3,10 +3,7 @@ You can participate in the translation.
|
|||
[![Join Translation](https://img.shields.io/badge/POEditor-translate-green.svg)](https://poeditor.com/join/project/Y4F6vHRFjA)
|
||||
|
||||
## Development Setup
|
||||
|
||||
> TODO: Be more specific, provide a Visual Studio Code workspace with plugins and pre configured build tasks
|
||||
|
||||
Get Hyperion to compile: [Compile HowTo](CompileHowTo.md)
|
||||
You may already have an editor or IDE you want to use. In any case we provide a pre configured [Visual Studio Code](#visual-studio-code) setup.
|
||||
|
||||
## Workflow
|
||||
|
||||
|
@ -97,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)
|
||||
|
@ -113,11 +110,23 @@ 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
|
||||
|
||||
|
||||
## Commit specification
|
||||
|
||||
> TODO
|
||||
> TODO
|
||||
|
||||
## Visual Studio Code
|
||||
**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.
|
||||
- Linux: Install gdb `sudo apt-get install gdb`
|
||||
- Mac: ?
|
||||
- Open VSCode and click on _File_ -> _Open Workspace_ and select the file `hyperion.ng/.vscode/hyperion.code-workspace`
|
||||
- Install recommended extensions
|
||||
- If you installed the Task Explorer you can now use the defined vscode tasks to build Hyperion and configure cmake
|
||||
- For debugging you need to build Hyperion in Debug mode and start the correct Run config
|
||||
|
|
180
CompileHowto.md
180
CompileHowto.md
|
@ -1,180 +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 libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite libssl-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
|
||||
```
|
||||
|
||||
|
||||
# Compiling and installing Hyperion
|
||||
|
||||
### The general quick way (without big comments)
|
||||
|
||||
complete automated process:
|
||||
```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 ..
|
||||
```
|
||||
|
||||
### 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)
|
||||
```
|
||||
|
||||
### 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 libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite aptitude show qt5-default rsync
|
||||
```
|
||||
## 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 libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libqt5sql5-sqlite
|
||||
```
|
||||
|
||||
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,41 +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 the usb / hid devices
|
||||
#cmakedefine ENABLE_USB_HID
|
||||
// Define to enable boblight server
|
||||
#cmakedefine ENABLE_BOBLIGHT_SERVER
|
||||
|
||||
// Define to enable CEC
|
||||
#cmakedefine ENABLE_CEC
|
||||
|
||||
// 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
|
70
README.md
70
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)
|
||||
[![GitHub Actions](https://github.com/hyperion-project/hyperion.ng/workflows/GitHub%20Actions/badge.svg)](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/)
|
||||
[![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)
|
||||
[![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,32 +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
|
||||
|
||||
If you need further support please open a topic at the forum!
|
||||
[![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)
|
||||
### Supported Hardware
|
||||
|
||||
## Contributing
|
||||
You can find a list of supported hardware [here](https://docs.hyperion-project.org/en/user/leddevices/).
|
||||
|
||||
Contributions are welcome! Feel free to join us! We are looking always for people who wants to participate.
|
||||
[![Contributors](https://img.shields.io/github/contributors/hyperion-project/hyperion.ng.svg)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
|
||||
If you need further support please open a topic at the forum!<br>
|
||||
[![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)
|
||||
|
||||
For an example, you can participate in the translation.
|
||||
[![Join Translation](https://img.shields.io/badge/POEditor-translate-green.svg)](https://poeditor.com/join/project/Y4F6vHRFjA)
|
||||
## Contributing
|
||||
|
||||
## Requirements
|
||||
Debian 9, Ubuntu 16.04 or higher. Windows is not supported currently.
|
||||
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?label=Contributors&logo=github&logoColor=white)](https://github.com/hyperion-project/hyperion.ng/graphs/contributors)
|
||||
|
||||
We provide a macOS Build but we can not support this.
|
||||
For an example, you can participate in the translation.<br>
|
||||
[![Join Translation](https://img.shields.io/badge/POEditor-4bc51d.svg?label=Join%20Translation)](https://poeditor.com/join/project/Y4F6vHRFjA)
|
||||
|
||||
## Supported Platforms
|
||||
|
||||
Find here more details on [supported platforms and configuration sets](doc/development/SupportedPlatforms.md)
|
||||
|
||||
## Documentation
|
||||
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/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)
|
||||
|
||||
## 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).
|
||||
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/", "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();
|
||||
</script>
|
||||
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,309 +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_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" 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 id="menu_gencfg" class="tab-pane fade" style="padding-top:10px">
|
||||
|
||||
|
||||
</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
|
@ -0,0 +1,28 @@
|
|||
/*! ========================================================================
|
||||
* Bootstrap Toggle: bootstrap-toggle.css v2.2.0
|
||||
* http://www.bootstraptoggle.com
|
||||
* ========================================================================
|
||||
* Copyright 2014 Min Hur, The New York Times Company
|
||||
* Licensed under MIT
|
||||
* ======================================================================== */
|
||||
.checkbox label .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px}
|
||||
.toggle{position:relative;overflow:hidden}
|
||||
.toggle input[type=checkbox]{display:none}
|
||||
.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none}
|
||||
.toggle.off .toggle-group{left:-100%}
|
||||
.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0}
|
||||
.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0}
|
||||
.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px}
|
||||
.toggle.btn{min-width:59px;min-height:34px}
|
||||
.toggle-on.btn{padding-right:24px}
|
||||
.toggle-off.btn{padding-left:24px}
|
||||
.toggle.btn-lg{min-width:79px;min-height:45px}
|
||||
.toggle-on.btn-lg{padding-right:31px}
|
||||
.toggle-off.btn-lg{padding-left:31px}
|
||||
.toggle-handle.btn-lg{width:40px}
|
||||
.toggle.btn-sm{min-width:50px;min-height:30px}
|
||||
.toggle-on.btn-sm{padding-right:20px}
|
||||
.toggle-off.btn-sm{padding-left:20px}
|
||||
.toggle.btn-xs{min-width:35px;min-height:22px}
|
||||
.toggle-on.btn-xs{padding-right:12px}
|
||||
.toggle-off.btn-xs{padding-left:12px}
|
|
@ -14,6 +14,10 @@ body {
|
|||
border-color: #212121;
|
||||
}
|
||||
|
||||
.navbar-default li a {
|
||||
color: #C6C6C6 !important;
|
||||
}
|
||||
|
||||
.panel-body {
|
||||
background-color: #424242;
|
||||
}
|
||||
|
@ -47,6 +51,32 @@ h4 {
|
|||
}
|
||||
|
||||
/*Buttons*/
|
||||
.btn-transparent:hover {
|
||||
color: #5db6ff;
|
||||
}
|
||||
|
||||
.btn-transparent:focus{
|
||||
color: #5db6ff;
|
||||
}
|
||||
|
||||
.btn-default {
|
||||
color: #DDDDDD;
|
||||
background-color: #212121;
|
||||
border-color: #424242;
|
||||
}
|
||||
|
||||
.btn-default:hover {
|
||||
color: #DDDDDD;
|
||||
background-color: #333;
|
||||
border-color: #616161;
|
||||
}
|
||||
|
||||
.btn-default:focus{
|
||||
color: #DDDDDD;
|
||||
background-color: #333;
|
||||
border-color: #616161;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #155fa0;
|
||||
border-color: #5db6ff;
|
||||
|
@ -68,15 +98,18 @@ h4 {
|
|||
}
|
||||
|
||||
.btn-warning {
|
||||
background-color: #ec971f;
|
||||
background-color: #bc7410;
|
||||
border-color: #f0ad4e;
|
||||
}
|
||||
|
||||
.btn-warning:hover {
|
||||
background-color: #f0ad4e;
|
||||
background-color: #ec971f;
|
||||
border-color: #f3bd72;
|
||||
}
|
||||
|
||||
.btn-warning:focus {
|
||||
background-color: #f0ad4e;
|
||||
background-color: #ec971f;
|
||||
border-color: #f3bd72;
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
|
@ -104,6 +137,21 @@ h4 {
|
|||
border-color: #a1eea1;
|
||||
}
|
||||
|
||||
.btn-wizard {
|
||||
background-color: #602060;
|
||||
border-color: #993399;
|
||||
}
|
||||
|
||||
.btn-wizard:hover {
|
||||
background-color: #993399;
|
||||
border-color: #cc66cc;
|
||||
}
|
||||
|
||||
.btn-wizard:focus {
|
||||
background-color: #993399;
|
||||
border-color: #cc66cc;
|
||||
}
|
||||
|
||||
/*Tables*/
|
||||
tr:hover td {
|
||||
background-color: #2e6da4;
|
||||
|
@ -145,7 +193,7 @@ tr:hover td {
|
|||
}
|
||||
|
||||
.dropdown-menu>li>a {
|
||||
color: #2e6da4;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
/*Panels*/
|
||||
|
@ -176,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;
|
||||
|
@ -191,7 +251,15 @@ tr:hover td {
|
|||
border-color: #616161;
|
||||
background-color: #212121;
|
||||
color: #DDDDDD !important;
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
|
||||
select.form-control {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4.95 10'%3E%3Cpath fill='%23212121' d='M0 0h4.95v10H0z'/%3E%3Cpath fill='%23ddd' d='M1.41 4.67l1.07-1.49 1.06 1.49H1.41zm2.13.66L2.48 6.82 1.41 5.33h2.13z'/%3E%3C/svg%3E") !important;
|
||||
background-repeat: no-repeat;
|
||||
background-position: right 5px center;
|
||||
}
|
||||
|
||||
.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child>.btn, .input-group-btn:last-child>.btn-group>.btn, .input-group-btn:last-child>.dropdown-toggle, .input-group-btn:first-child>.btn:not(:first-child), .input-group-btn:first-child>.btn-group:not(:first-child)>.btn {
|
||||
|
@ -206,31 +274,39 @@ tr:hover td {
|
|||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.keystone_correction_corners {
|
||||
border:1px solid white;
|
||||
}
|
||||
|
||||
.checkbox label::before {
|
||||
border-color: #616161;
|
||||
background-color: #212121;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.checkbox label::after
|
||||
.checkbox label::after
|
||||
{
|
||||
left: 1px;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
|
||||
.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;
|
||||
|
@ -364,7 +440,7 @@ button.close:hover {
|
|||
}
|
||||
|
||||
.bs-callout-success {
|
||||
border-left-color: greenyellow;
|
||||
border-left-color: #67FF01;
|
||||
}
|
||||
|
||||
.bs-callout-success h4 {
|
||||
|
@ -388,4 +464,4 @@ pre {
|
|||
border-color: #424242 !important;
|
||||
box-shadow: 0px 2px 10px 0px rgba(18, 18, 18, 0.4);
|
||||
color: #DDD;
|
||||
}
|
||||
}
|
||||
|
|
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
|
@ -0,0 +1,933 @@
|
|||
{
|
||||
"InfoDialog_access_text": "Selon le niveau des paramètres, vous pourrez ajuster plus d'options ou accéder à plus de fonctionnalités. Le niveau \"Par défaut\" est recommandé.",
|
||||
"InfoDialog_access_title": "Niveau des paramètres",
|
||||
"InfoDialog_changePassword_success": "Mot de passe enregistré !",
|
||||
"InfoDialog_changePassword_title": "Modifier le mot de passe",
|
||||
"InfoDialog_iswitch_text": "Si vous faites fonctionner plus d'une instance Hyperion sur votre réseau local, vous pouvez basculer entre les différentes configurations. Sélectionnez l'instance d'Hyperion que vous souhaitez contrôler ci-dessous !",
|
||||
"InfoDialog_iswitch_title": "Commutateur Hyperion",
|
||||
"InfoDialog_nostorage_title": "Impossible d'ecrire les paramètres",
|
||||
"InfoDialog_nowrite_foottext": "WebUI sera débloqué automatiquement une fois les problèmes résolus !",
|
||||
"InfoDialog_nowrite_text": "Hyperion ne peut pas écrire votre fichier de configuration actuellement chargé. Réparez les permissions sur le fichier afin de poursuivre.",
|
||||
"InfoDialog_nowrite_title": "Erreur de droit d'écriture !",
|
||||
"about_3rd_party_licenses": "Licences tierces",
|
||||
"about_build": "Build",
|
||||
"about_builddate": "Date du build",
|
||||
"about_contribute": "Développez Hyperion avec nous !",
|
||||
"about_credits": "Le mérite revient à tous ces développeurs !",
|
||||
"about_resources": "$1 bibliothèques",
|
||||
"about_translations": "Traductions",
|
||||
"about_version": "Version :",
|
||||
"conf_colors_blackborder_intro": "Évitez les barres noires où qu'elles se trouvent. Chaque mode utilise un algorithme de détection spécifique pour des situations particulières. Augmentez le seuil en cas de problème.",
|
||||
"conf_colors_color_intro": "Créer un ou plusieurs profils de calibration, ajuster chaque couleur, luminosité, linéarité et plus.",
|
||||
"conf_colors_smoothing_intro": "Le fondu limite les changements de couleur/luminosité pour réduire l'effet de transition.",
|
||||
"conf_effect_bgeff_intro": "Définissez un effet/couleur d'arrière-plan, qui est affiché lorsqu'Hyperion sera \"inactif\". Commence toujours par une priorité de canal de 255",
|
||||
"conf_effect_fgeff_intro": "Définissez un effet ou une couleur de démarrage et sa durée, il sera utilisé lors du démarrage d'Hyperion.",
|
||||
"conf_effect_path_intro": "Chargement des effets depuis les emplacements définis. Vous pouvez également désactiver des effets par leur nom.",
|
||||
"conf_general_createInst_btn": "Créer une instance",
|
||||
"conf_general_impexp_expbtn": "Exporter",
|
||||
"conf_general_impexp_impbtn": "Importer",
|
||||
"conf_general_impexp_l1": "Importer une configuration en sélectionnant un fichier de configuration ci-dessous et en cliquant sur \"Importer\".",
|
||||
"conf_general_impexp_l2": "Exporter une configuration en cliquant sur \"Exporter\". Votre navigateur démarrera le téléchargement.",
|
||||
"conf_general_impexp_title": "Importer/Exporter la configuration",
|
||||
"conf_general_inst_actionhead": "Action",
|
||||
"conf_general_inst_delreq_h": "Supprimer l'instance de LED",
|
||||
"conf_general_inst_delreq_t": "Êtes-vous sur de vouloir supprimer l'instance \"$1\" ? Tous les réglages seront perdus.",
|
||||
"conf_general_inst_desc": "Utilisez différentes instances de LED simultanément. Chaque instance s'exécute indépendamment permettant différentes dispositons et calibrations. Les instances en cours d'exécution sont disponibles",
|
||||
"conf_general_inst_name_title": "Nouveau nom d'instance",
|
||||
"conf_general_inst_namehead": "Nom d'instance",
|
||||
"conf_general_inst_renreq_t": "Entrez un nouveau nom pour votre configuration dans la champ ci-dessous.",
|
||||
"conf_general_inst_title": "Gestion des instances de LED",
|
||||
"conf_general_intro": "Configuration basique pour Hyperion et WebUI ne rentrant dans aucune autre catégorie.",
|
||||
"conf_general_label_title": "Réglages généraux",
|
||||
"conf_grabber_fg_intro": "La capture d'écran correspond à l'image affichée par l'appareil sur lequel est installé Hyperion.",
|
||||
"conf_grabber_v4l_intro": "La capture USB utilise un périphérique de capture connecté en USB au système pour obtenir la source d'images à traiter.",
|
||||
"conf_helptable_expl": "Explication",
|
||||
"conf_helptable_option": "Option",
|
||||
"conf_leds_config_error": "Erreur dans la configuration de la disposition",
|
||||
"conf_leds_config_warning": "Verifiez la configuration de la disposition des LEDs",
|
||||
"conf_leds_contr_label_contrtype": "Type de contrôleur : ",
|
||||
"conf_leds_device_intro": "Hyperion prend en charge de nombreux contrôleurs pour transmettre des données à votre appareil cible. Sélectionnez un contrôleur LED dans la liste triée et configurez-le. Nous avons choisi les meilleurs paramètres par défaut pour chaque appareil.",
|
||||
"conf_leds_error_get_properties_title": "Propriétés du périphérique",
|
||||
"conf_leds_layout_advanced": "Réglages avancés",
|
||||
"conf_leds_layout_blacklist_num_title": "Nombre de LEDs",
|
||||
"conf_leds_layout_blacklist_rule_title": "Règle de liste noire",
|
||||
"conf_leds_layout_blacklist_rules_title": "Règles de liste noire",
|
||||
"conf_leds_layout_blacklist_start_title": "Démarrer LED",
|
||||
"conf_leds_layout_btn_checklist": "Afficher la checklist",
|
||||
"conf_leds_layout_button_savelay": "Sauvegarder la disposition",
|
||||
"conf_leds_layout_button_updsim": "Mettre à jour la prévisualisation",
|
||||
"conf_leds_layout_checkp1": "La LED noire est votre première LED, la première LED est le point d'entrée du signal de données.",
|
||||
"conf_leds_layout_checkp2": "La disposition est toujours celle visible par l'avant de votre TV, jamais par l'arrière.",
|
||||
"conf_leds_layout_checkp3": "Assurez-vous que la direction est correcte. Les LED grises indiquent les LED 2 et 3 pour aider à visualiser la direction des données.",
|
||||
"conf_leds_layout_checkp4": "Écart : Pour créer un écart, ne le prenez pas en compte lors que vous définissez le nombre de LED en Haut/Bas/Gauche/Droite. Vous indiquerez la longueur de l'écart après coup, afin de supprimer un certain nombre de LED. Modifier la position de l'écart jusqu'à obtenir l'effet désiré.",
|
||||
"conf_leds_layout_cl_bottom": "Bas",
|
||||
"conf_leds_layout_cl_bottomleft": "Bas gauche (Coin)",
|
||||
"conf_leds_layout_cl_bottomright": "Bas droit (Coin)",
|
||||
"conf_leds_layout_cl_cornergap": "Écart aux coins",
|
||||
"conf_leds_layout_cl_edgegap": "Écart aux bords",
|
||||
"conf_leds_layout_cl_gaglength": "Taille de l'écart",
|
||||
"conf_leds_layout_cl_gappos": "Position de l'écart",
|
||||
"conf_leds_layout_cl_hleddepth": "Profondeur LED horizontale",
|
||||
"conf_leds_layout_cl_inppos": "Position de départ",
|
||||
"conf_leds_layout_cl_left": "Gauche",
|
||||
"conf_leds_layout_cl_leftbottom": "Gauche 50%-100% Bas",
|
||||
"conf_leds_layout_cl_leftmiddle": "Gauche 25%-75% Milieu",
|
||||
"conf_leds_layout_cl_lefttop": "Gauche 0%-50% Haut",
|
||||
"conf_leds_layout_cl_overlap": "Chevauchement",
|
||||
"conf_leds_layout_cl_reversdir": "Inverser le sens",
|
||||
"conf_leds_layout_cl_right": "Droite",
|
||||
"conf_leds_layout_cl_rightbottom": "Droite 50%-100% Bas",
|
||||
"conf_leds_layout_cl_rightmiddle": "Droite 25%-75% Milieu",
|
||||
"conf_leds_layout_cl_righttop": "Droite 0%-50% Haut",
|
||||
"conf_leds_layout_cl_top": "Haut",
|
||||
"conf_leds_layout_cl_topleft": "Haut gauche (Coin)",
|
||||
"conf_leds_layout_cl_topright": "Haut droit (Coin)",
|
||||
"conf_leds_layout_cl_vleddepth": "Profondeur LED verticale",
|
||||
"conf_leds_layout_frame": "Disposition classique (Cadre LED)",
|
||||
"conf_leds_layout_generatedconf": "Configuration générée/courante des LED",
|
||||
"conf_leds_layout_intro": "Vous avez également besoin d'une disposition de LED qui reflète la position de vos LED. La disposition classique correspond à une télévision, mais nous prenons également en charge la création de matrice de LED (murs de LED). La vue est toujours par rapport à l'avant de votre TV.",
|
||||
"conf_leds_layout_ma_cabling": "Câblage",
|
||||
"conf_leds_layout_ma_direction": "Direction",
|
||||
"conf_leds_layout_ma_horiz": "Horizontal",
|
||||
"conf_leds_layout_ma_optbottomleft": "Bas Gauche",
|
||||
"conf_leds_layout_ma_optbottomright": "Bas Droit",
|
||||
"conf_leds_layout_ma_opthoriz": "Horizontal",
|
||||
"conf_leds_layout_ma_optparallel": "Parallèle",
|
||||
"conf_leds_layout_ma_optsnake": "Serpent",
|
||||
"conf_leds_layout_ma_opttopleft": "Haut Gauche",
|
||||
"conf_leds_layout_ma_opttopright": "Haut Droit",
|
||||
"conf_leds_layout_ma_optvert": "Vertical",
|
||||
"conf_leds_layout_ma_order": "Ordre",
|
||||
"conf_leds_layout_ma_position": "Entrée",
|
||||
"conf_leds_layout_ma_vert": "Vertical",
|
||||
"conf_leds_layout_matrix": "Disposition en matrice (Mur LED)",
|
||||
"conf_leds_layout_pbl": "Point en bas à gauche",
|
||||
"conf_leds_layout_pbr": "Point en bas à droite",
|
||||
"conf_leds_layout_peview": "Prévisualisation de la disposition des LED",
|
||||
"conf_leds_layout_preview_l1": "Ceci est votre première LED (position de départ)",
|
||||
"conf_leds_layout_preview_l2": "Ceci vous permet de visualiser le sens de direction des LED (deuxième/troisième LED)",
|
||||
"conf_leds_layout_preview_ledpower": "Consommation max. des LED : $1 A",
|
||||
"conf_leds_layout_preview_originCL": "Créé à partir : Disposition classique (Cadre LED)",
|
||||
"conf_leds_layout_preview_originMA": "Crée à partir : Disposition en matrice (Mur LED)",
|
||||
"conf_leds_layout_preview_originTEXT": "Crée à partir : Champ texte",
|
||||
"conf_leds_layout_preview_totalleds": "Nombre total de LED : $1",
|
||||
"conf_leds_layout_ptl": "Point en haut à gauche",
|
||||
"conf_leds_layout_ptlh": "Horizontale",
|
||||
"conf_leds_layout_ptlv": "Verticale",
|
||||
"conf_leds_layout_ptr": "Point en haut à droite",
|
||||
"conf_leds_layout_textf1": "Ce champ montre (par défaut) votre disposition actuellement chargée et sera écrasée si vous en générez une nouvelle avec les options ci-dessus. Vous pourrez également y apporter des modifications par la suite.",
|
||||
"conf_leds_nav_label_ledcontroller": "Contrôleur LED",
|
||||
"conf_leds_nav_label_ledlayout": "Disposition des LED",
|
||||
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
|
||||
"conf_leds_optgroup_RPiPWM": "RPi PWM",
|
||||
"conf_leds_optgroup_RPiSPI": "RPi SPI",
|
||||
"conf_leds_optgroup_debug": "Debogage",
|
||||
"conf_leds_optgroup_network": "Réseau",
|
||||
"conf_leds_optgroup_other": "Autre",
|
||||
"conf_leds_optgroup_usb": "USB/Série",
|
||||
"conf_logging_btn_autoscroll": "Défilement automatique",
|
||||
"conf_logging_btn_clipboard": "Copier le journal dans le presse papier",
|
||||
"conf_logging_btn_pbupload": "Télécharger un rapport pour des demandes au support",
|
||||
"conf_logging_contpolicy": "la politique de confidentialité des rapports",
|
||||
"conf_logging_label_intro": "Zone pour vérifier les messages du journal, plus ou moins d'informations seront affichées en fonction du niveau de journalisation réglé.",
|
||||
"conf_logging_lastreports": "Rapports précédents",
|
||||
"conf_logging_nomessage": "Pas de message disponible dans le journal.",
|
||||
"conf_logging_report": "Rapport",
|
||||
"conf_logging_uplfailed": "Échec du téléchargement ! Veuillez vérifier votre connexion Internet !",
|
||||
"conf_logging_uploading": "Préparation des données...",
|
||||
"conf_logging_uplpolicy": "En cliquant sur ce bouton vous acceptez",
|
||||
"conf_logging_yourlink": "Lien de votre rapport",
|
||||
"conf_network_bobl_intro": "Le port pour Boblight",
|
||||
"conf_network_createToken_btn": "Créer un token",
|
||||
"conf_network_fbs_intro": "Le port pour Google Flatbuffers, utilisé pour la transmission rapide des images.",
|
||||
"conf_network_forw_intro": "Transférer toutes les entrées vers une seconde instance d'Hyperion qui peut utiliser un autre contrôleur LED.",
|
||||
"conf_network_json_intro": "Le port JSON-RPC de toutes les instances d'Hyperion utilisé pour le contrôle à distance.",
|
||||
"conf_network_net_intro": "Réglages réseau globaux",
|
||||
"conf_network_proto_intro": "Le port pour PROTO de toutes les instances d'Hyperion, utilisé pour les flux d'images (HyperionScreenCap, Extensions Kodi, Android Hyperion Grabber, ...)",
|
||||
"conf_network_tok_cidhead": "Description",
|
||||
"conf_network_tok_comment_title": "Description du token",
|
||||
"conf_network_tok_diaTitle": "Le nouveau token a été créé !",
|
||||
"conf_network_tok_grantT": "Token d'accès à l'application",
|
||||
"conf_network_tok_lastuse": "Dernière utilisation",
|
||||
"conf_network_tok_title": "Gestion des tokens",
|
||||
"conf_webconfig_label_intro": "Réglages de la configuration web. Modifiez judicieusement.",
|
||||
"dashboard_active_instance": "Instance sélectionnée",
|
||||
"dashboard_alert_message_confedit": "Votre configuration d'Hyperion a été modifiée. Redémarrer Hyperion pour l'appliquer.",
|
||||
"dashboard_alert_message_confedit_t": "Configuration modifiée",
|
||||
"dashboard_alert_message_confsave_success": "Votre configuration d'Hyperion a été sauvegardée. Vos modifications sont maintenant actives.",
|
||||
"dashboard_alert_message_confsave_success_t": "Configuration sauvegardée",
|
||||
"dashboard_alert_message_disabled": "Cette instance est actuellement désactivée ! Pour l'utiliser à nouveau, activez-la dans le tableau de bord.",
|
||||
"dashboard_alert_message_disabled_t": "Instance matérielle LED désactivée",
|
||||
"dashboard_componentbox_label_comp": "Composant",
|
||||
"dashboard_componentbox_label_status": "Etat",
|
||||
"dashboard_componentbox_label_title": "Etat des composants",
|
||||
"dashboard_infobox_label_currenthyp": "Votre version d'Hyperion : ",
|
||||
"dashboard_infobox_label_disableh": "Désactiver l'instance : $1",
|
||||
"dashboard_infobox_label_enableh": "Activer l'instance : $1",
|
||||
"dashboard_infobox_label_instance": "Instance",
|
||||
"dashboard_infobox_label_latesthyp": "Dernière version d'Hyperion : ",
|
||||
"dashboard_infobox_label_platform": "Plateforme",
|
||||
"dashboard_infobox_label_ports": "Ports",
|
||||
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
|
||||
"dashboard_infobox_label_smartacc": "Accès simplifié",
|
||||
"dashboard_infobox_label_statush": "Statut d'Hyperion : ",
|
||||
"dashboard_infobox_label_title": "Information",
|
||||
"dashboard_infobox_label_watchedversionbranch": "Branche surveillée :",
|
||||
"dashboard_infobox_message_updatesuccess": "Vous utilisez la dernière version d'Hyperion.",
|
||||
"dashboard_infobox_message_updatewarning": "Une nouvelle version d'Hyperion est disponible ! ($1)",
|
||||
"dashboard_label_intro": "Ce dashboard vous donne une vue rapide sur l'état d'Hyperion.",
|
||||
"dashboard_message_default_password": "La WebUI utilise le mot de passe par défaut. Nous recommandons de le modifier.",
|
||||
"dashboard_message_default_password_t": "Utilisation du mot de passe par défaut pour la WebUI",
|
||||
"dashboard_message_do_not_show_again": "Ne plus afficher ce message",
|
||||
"dashboard_message_global_setting": "Les réglages sur cette page sont indépendantes des instances. Tout changement sera global a toutes les instances.",
|
||||
"dashboard_message_global_setting_t": "Réglage global",
|
||||
"dashboard_newsbox_label_title": "Hyperion - Blog",
|
||||
"dashboard_newsbox_noconn": "Impossible d'accéder au blog d'Hyperion. Votre connexion internet fonctionne-t-elle ?",
|
||||
"dashboard_newsbox_readmore": "Lire plus",
|
||||
"dashboard_newsbox_visitblog": "Visiter le Blog d'Hyperion",
|
||||
"edt_append_degree": "°",
|
||||
"edt_append_frames": "images",
|
||||
"edt_append_hz": "Hz",
|
||||
"edt_append_leds": "LED",
|
||||
"edt_append_ms": "ms",
|
||||
"edt_append_percent": "%",
|
||||
"edt_append_percent_h": "% hori",
|
||||
"edt_append_percent_v": "% vert",
|
||||
"edt_append_pixel": "Pixel",
|
||||
"edt_append_s": "s",
|
||||
"edt_append_sdegree": "s/degré",
|
||||
"edt_conf_bb_blurRemoveCnt_expl": "Nombre de pixel supprimés de la bordure détectée pour réduire le flou",
|
||||
"edt_conf_bb_blurRemoveCnt_title": "Pixel flou",
|
||||
"edt_conf_bb_borderFrameCnt_expl": "Nombre d'images avant la définition d'une bordure détectée cohérente",
|
||||
"edt_conf_bb_borderFrameCnt_title": "Bordure d'image",
|
||||
"edt_conf_bb_heading_title": "Détection de barres noires",
|
||||
"edt_conf_bb_maxInconsistentCnt_expl": "Nombre d'images incohérentes ignorée avant qu'une nouvelle bordure n'ait une chance de prouver la cohérence.",
|
||||
"edt_conf_bb_maxInconsistentCnt_title": "Image incohérente",
|
||||
"edt_conf_bb_mode_expl": "Algorithme de traitement. (voir Wiki)",
|
||||
"edt_conf_bb_mode_title": "Mode",
|
||||
"edt_conf_bb_threshold_expl": "Si la détection ne marche pas, augmentez le seuil pour tendre vers un noir \"grisâtre\"",
|
||||
"edt_conf_bb_threshold_title": "Seuil",
|
||||
"edt_conf_bb_unknownFrameCnt_expl": "Nombre de images sans aucune détection avant que la bordure soit paramétrer à 0.",
|
||||
"edt_conf_bb_unknownFrameCnt_title": "image inconnu",
|
||||
"edt_conf_bge_heading_title": "Effet/Couleur d'arrière-plan",
|
||||
"edt_conf_bobls_heading_title": "Serveur Boblight",
|
||||
"edt_conf_color_backlightColored_expl": "Ajouter des couleurs à votre rétroéclairage",
|
||||
"edt_conf_color_backlightColored_title": "Rétroéclairage coloré",
|
||||
"edt_conf_color_backlightThreshold_expl": "La quantité minium de luminosité (rétroéclairage). Désactivé lors des effets, couleurs et sur le statut \"OFF\"",
|
||||
"edt_conf_color_backlightThreshold_title": "Seuil de rétroéclairage",
|
||||
"edt_conf_color_black_expl": "La valeur noire calibrée",
|
||||
"edt_conf_color_black_title": "Noir",
|
||||
"edt_conf_color_blue_expl": "La valeur bleue calibrée.",
|
||||
"edt_conf_color_blue_title": "Bleu",
|
||||
"edt_conf_color_brightnessComp_expl": "Compense les différences de luminosité entre rouge vert bleu, cyan magenta jaune et blanc. 100 signifie compensation maximale, 0 pour aucune compensation.",
|
||||
"edt_conf_color_brightnessComp_title": "Compensation de luminosité",
|
||||
"edt_conf_color_brightnessGain_title": "Gain de luminosité",
|
||||
"edt_conf_color_brightness_expl": "Paramétrer la luminosité générale des leds.",
|
||||
"edt_conf_color_brightness_title": "Luminosité",
|
||||
"edt_conf_color_channelAdjustment_header_expl": "Créer des profils de couleurs qui pourrait être attribués à un composant. Ajustez la couleur, le gamma, la luminosité, la compensation et plus.",
|
||||
"edt_conf_color_channelAdjustment_header_itemtitle": "Profil",
|
||||
"edt_conf_color_channelAdjustment_header_title": "Ajustement du canal de couleur",
|
||||
"edt_conf_color_cyan_expl": "La valeur cyan calibrée.",
|
||||
"edt_conf_color_cyan_title": "Cyan",
|
||||
"edt_conf_color_gammaBlue_expl": "Le gamma du bleu. 1.0 est neutre. Plus de 1.0 diminue le bleu, moins que 1.0 ajoute du bleu.",
|
||||
"edt_conf_color_gammaBlue_title": "Gamma bleu",
|
||||
"edt_conf_color_gammaGreen_expl": "Le gamma du vert. 1.0 est neutre. Plus de 1.0 diminue le vert, moins que 1.0 ajoute du vert.",
|
||||
"edt_conf_color_gammaGreen_title": "Gamma vert",
|
||||
"edt_conf_color_gammaRed_expl": "Le gamma du rouge. 1.0 est neutre. Plus de 1.0 diminue le rouge, moins que 1.0 ajoute du rouge.",
|
||||
"edt_conf_color_gammaRed_title": "Gamma rouge",
|
||||
"edt_conf_color_green_expl": "La valeur verte calibrée.",
|
||||
"edt_conf_color_green_title": "Vert",
|
||||
"edt_conf_color_heading_title": "Calibration de couleur",
|
||||
"edt_conf_color_id_expl": "Nom de l'utilisateur",
|
||||
"edt_conf_color_id_title": "ID",
|
||||
"edt_conf_color_imageToLedMappingType_expl": "Remplace l'affectation de zone de la LED si elle n'est pas \"multicolore\"",
|
||||
"edt_conf_color_imageToLedMappingType_title": "Affectation des zones aux LED",
|
||||
"edt_conf_color_leds_expl": "Attribuez ce réglage à toutes les LED (*) ou seulement à certaines (0-24)",
|
||||
"edt_conf_color_leds_title": "Index LED",
|
||||
"edt_conf_color_magenta_expl": "La valeur magenta calibrée.",
|
||||
"edt_conf_color_magenta_title": "Magenta",
|
||||
"edt_conf_color_red_expl": "La valeur rouge calibrée.",
|
||||
"edt_conf_color_red_title": "Rouge",
|
||||
"edt_conf_color_saturationGain_expl": "Ajuste la saturation des couleurs. 1.0 signifie aucune changement, au dessus de 1.0 augmente la saturation, en dessous de 1.0 la diminue.",
|
||||
"edt_conf_color_white_expl": "La valeur blanche calibrée.",
|
||||
"edt_conf_color_white_title": "Blanc",
|
||||
"edt_conf_color_yellow_expl": "La valeur jaune calibrée.",
|
||||
"edt_conf_color_yellow_title": "Jaune",
|
||||
"edt_conf_effp_disable_expl": "Ajoutez les noms des effets que vous souhaiter désactiver/masquer dans les liste d'effets.",
|
||||
"edt_conf_effp_disable_itemtitle": "Effet",
|
||||
"edt_conf_effp_disable_title": "Désactiver les effets",
|
||||
"edt_conf_effp_heading_title": "Chemin(s) d'effets",
|
||||
"edt_conf_effp_paths_expl": "Vous pouvez définir des dossiers contenant des effets supplémentaires. Le configurateur d'effets sera enregistré par défaut dans le premier dossier.",
|
||||
"edt_conf_effp_paths_itemtitle": "Chemin",
|
||||
"edt_conf_effp_paths_title": "Chemin(s) d'effets",
|
||||
"edt_conf_enum_BOTH": "Horizontale & Verticale",
|
||||
"edt_conf_enum_HORIZONTAL": "Horizontale",
|
||||
"edt_conf_enum_NO_CHANGE": "Auto",
|
||||
"edt_conf_enum_NTSC": "NTSC",
|
||||
"edt_conf_enum_PAL": "PAL",
|
||||
"edt_conf_enum_SECAM": "SECAM",
|
||||
"edt_conf_enum_VERTICAL": "Verticale",
|
||||
"edt_conf_enum_automatic": "Automatique",
|
||||
"edt_conf_enum_bbclassic": "Classique",
|
||||
"edt_conf_enum_bbdefault": "Defaut",
|
||||
"edt_conf_enum_bbosd": "OSD",
|
||||
"edt_conf_enum_bgr": "BGR",
|
||||
"edt_conf_enum_bottom_up": "De bas en haut",
|
||||
"edt_conf_enum_brg": "BRG",
|
||||
"edt_conf_enum_color": "Couleur",
|
||||
"edt_conf_enum_custom": "Personnalisation",
|
||||
"edt_conf_enum_dl_error": "Erreur",
|
||||
"edt_conf_enum_dl_nodebug": "Pas de Debug",
|
||||
"edt_conf_enum_dl_statechange": "Changement d'état",
|
||||
"edt_conf_enum_dl_verbose": "Verbeux",
|
||||
"edt_conf_enum_effect": "Effet",
|
||||
"edt_conf_enum_gbr": "GBR",
|
||||
"edt_conf_enum_grb": "GRB",
|
||||
"edt_conf_enum_left_right": "De la gauche vers la droite",
|
||||
"edt_conf_enum_linear": "Linéaire",
|
||||
"edt_conf_enum_logdebug": "Débug",
|
||||
"edt_conf_enum_logsilent": "Silencieux",
|
||||
"edt_conf_enum_logverbose": "Verbeux",
|
||||
"edt_conf_enum_logwarn": "Avertissement",
|
||||
"edt_conf_enum_multicolor_mean": "Multicolor",
|
||||
"edt_conf_enum_please_select": "Veuillez sélectionner",
|
||||
"edt_conf_enum_rbg": "RBG",
|
||||
"edt_conf_enum_rgb": "RGB",
|
||||
"edt_conf_enum_right_left": "De la droite vers la gauche",
|
||||
"edt_conf_enum_top_down": "De haut en bas",
|
||||
"edt_conf_enum_unicolor_mean": "Unicolore",
|
||||
"edt_conf_fbs_heading_title": "Serveur Flatbuffers",
|
||||
"edt_conf_fbs_timeout_expl": "Si aucune donnée n'est reçue dans la période de temps donnée, le composant sera désactivé.",
|
||||
"edt_conf_fbs_timeout_title": "Temps écoulé",
|
||||
"edt_conf_fg_display_expl": "Sélectionnez l'écran à capturer (dans le cas d'un multi-écran)",
|
||||
"edt_conf_fg_display_title": "Écran",
|
||||
"edt_conf_fg_frequency_Hz_title": "Fréquence de capture",
|
||||
"edt_conf_fg_heading_title": "Platform de capture",
|
||||
"edt_conf_fg_height_expl": "Réduit l'image à la hauteur définie, une image brute nécessite une grande puissance de calcul.",
|
||||
"edt_conf_fg_height_title": "Hauteur",
|
||||
"edt_conf_fg_pixelDecimation_title": "Décimation de l'image",
|
||||
"edt_conf_fg_type_expl": "Type de capture d'écran, 'auto' par défaut",
|
||||
"edt_conf_fg_type_title": "Type",
|
||||
"edt_conf_fg_width_expl": "Réduit l'image à la largeur définie, une image brute nécessite une grande puissance de calcul.",
|
||||
"edt_conf_fg_width_title": "Largeur",
|
||||
"edt_conf_fge_color_expl": "Si le type est défini sur \"Couleur\", choisissez la couleur à afficher.",
|
||||
"edt_conf_fge_color_title": "Couleur",
|
||||
"edt_conf_fge_duration_ms_expl": "Durée de l'Effet/Couleur au démarrage d'Hyperion.",
|
||||
"edt_conf_fge_duration_ms_title": "Durée",
|
||||
"edt_conf_fge_effect_expl": "Si le type est défini sur \"Effet\", choisissez l'effet à utiliser (Vos propres effets sont disponibles).",
|
||||
"edt_conf_fge_effect_title": "Effet",
|
||||
"edt_conf_fge_heading_title": "Effet/Couleur de démarrage",
|
||||
"edt_conf_fge_type_expl": "Choisissez parmi une couleur ou un effet.",
|
||||
"edt_conf_fge_type_title": "Type",
|
||||
"edt_conf_fw_flat_itemtitle": "cible du flatbuffer",
|
||||
"edt_conf_fw_heading_title": "Transitaire",
|
||||
"edt_conf_fw_json_expl": "Une cible json par ligne. Contient IP: PORT (ex : 127.0.0.1:19446)",
|
||||
"edt_conf_fw_json_itemtitle": "Cible json",
|
||||
"edt_conf_fw_json_title": "Liste des clients json",
|
||||
"edt_conf_fw_service_name_expl": "Nom du fournisseur de service",
|
||||
"edt_conf_fw_service_name_title": "Nom du service",
|
||||
"edt_conf_gen_configVersion_title": "Version de configuration",
|
||||
"edt_conf_gen_heading_title": "Réglages générals",
|
||||
"edt_conf_gen_name_expl": "Un nom défini par l'utilisateur qui est utilisé pour identifier Hyperion. (Utile si vous disposez de plusieurs instances Hyperion)",
|
||||
"edt_conf_gen_name_title": "Nom de la configuration",
|
||||
"edt_conf_gen_showOptHelp_expl": "Afficher toutes les explications disponible dans cette section. Très recommandé pour les débutants !",
|
||||
"edt_conf_gen_showOptHelp_title": "Afficher les explications",
|
||||
"edt_conf_gen_watchedVersionBranch_expl": "Selectionne quelle version de branche doit être utilisée pour trouver des nouvelles versions d'Hyperion",
|
||||
"edt_conf_gen_watchedVersionBranch_title": "Branche surveillée",
|
||||
"edt_conf_general_enable_expl": "Si coché, le composant est actif.",
|
||||
"edt_conf_general_enable_title": "Activer",
|
||||
"edt_conf_general_port_expl": "Le port utilisé.",
|
||||
"edt_conf_general_port_title": "Port",
|
||||
"edt_conf_general_priority_expl": "Priorité de ce composant",
|
||||
"edt_conf_general_priority_title": "Canal de priorité",
|
||||
"edt_conf_grabber_discovered_none": "Aucun périphérique de capture trouvé",
|
||||
"edt_conf_grabber_discovered_title": "Périphérique trouvé",
|
||||
"edt_conf_grabber_discovered_title_info": "Sélectionner votre périphérique de capture trouvé",
|
||||
"edt_conf_grabber_discovery_inprogress": "Découverte en cours",
|
||||
"edt_conf_instC_screen_grabber_device_expl": "Le périphérique de capture d'écran utilisé.",
|
||||
"edt_conf_instC_screen_grabber_device_title": "Périphérique de capture d'écran",
|
||||
"edt_conf_instC_systemEnable_expl": "Active la capture d'écran pour cette configuration de LED",
|
||||
"edt_conf_instC_systemEnable_title": "Activer la capture d'écran",
|
||||
"edt_conf_instC_v4lEnable_expl": "Active la capture USB pour cette configuration de LED",
|
||||
"edt_conf_instC_v4lEnable_title": "Activer la capture USB",
|
||||
"edt_conf_instC_video_grabber_device_title": "Périphérique de capture vidéo",
|
||||
"edt_conf_instCapture_heading_title": "Appareils de capture",
|
||||
"edt_conf_js_heading_title": "Serveur JSON",
|
||||
"edt_conf_log_heading_title": "Connexion",
|
||||
"edt_conf_log_level_expl": "Vous verrez plus ou moins d'information selon le niveau de log que vous avez défini.",
|
||||
"edt_conf_log_level_title": "Niveau de log",
|
||||
"edt_conf_net_apiAuth_title": "Authentification de l'API",
|
||||
"edt_conf_net_heading_title": "Réseau",
|
||||
"edt_conf_net_ipWhitelist_expl": "Vous pouvez mettre les IP en liste blanche au lieu d'autoriser toutes les connexions depuis internet à l'API/interface web",
|
||||
"edt_conf_net_ipWhitelist_title": "Liste blanche d'adresses IP",
|
||||
"edt_conf_net_ip_itemtitle": "IP",
|
||||
"edt_conf_net_localApiAuth_title": "Authentification de l'API locale",
|
||||
"edt_conf_net_restirctedInternetAccessAPI_title": "Limité aux IP",
|
||||
"edt_conf_pbs_heading_title": "Serveur Protocol Buffers",
|
||||
"edt_conf_pbs_timeout_expl": "Si aucune donnée n'est reçue dans la période de temps donnée, le composant sera désactivé.",
|
||||
"edt_conf_pbs_timeout_title": "Temps écoulé",
|
||||
"edt_conf_smooth_continuousOutput_expl": "Mettez à jour les leds mais si l'image n'a pas changé.",
|
||||
"edt_conf_smooth_continuousOutput_title": "Sortie continue",
|
||||
"edt_conf_smooth_heading_title": "Lissage",
|
||||
"edt_conf_smooth_time_ms_expl": "Combien de temps le lissage doit-il récupérer des images ?",
|
||||
"edt_conf_smooth_time_ms_title": "Temps",
|
||||
"edt_conf_smooth_type_expl": "Type de lissage.",
|
||||
"edt_conf_smooth_type_title": "Type",
|
||||
"edt_conf_smooth_updateDelay_expl": "Ajouter du retard à la sortie dans le cas ou vos lumière ambiante sont plus rapide que votre TV.",
|
||||
"edt_conf_smooth_updateDelay_title": "Changer le retard",
|
||||
"edt_conf_smooth_updateFrequency_expl": "Le vitesse de sortie pour le contrôleur led.",
|
||||
"edt_conf_smooth_updateFrequency_title": "Charger la fréquence",
|
||||
"edt_conf_v4l2_blueSignalThreshold_expl": "Assombrie les valeurs bleues faibles (reconnues comme noires)",
|
||||
"edt_conf_v4l2_blueSignalThreshold_title": "Seuil de signal bleu",
|
||||
"edt_conf_v4l2_cropBottom_expl": "Le nombre de pixel sur le bas qui sont retirés de l'image.",
|
||||
"edt_conf_v4l2_cropBottom_title": "Rognagne bas",
|
||||
"edt_conf_v4l2_cropLeft_expl": "Le nombre de pixels sur le côté gauche qui sont retirés de l'image.",
|
||||
"edt_conf_v4l2_cropLeft_title": "Rognage gauche",
|
||||
"edt_conf_v4l2_cropRight_expl": "Le nombre de pixels sur le côté droit qui sont retirés de l'image.",
|
||||
"edt_conf_v4l2_cropRight_title": "Rognage droit",
|
||||
"edt_conf_v4l2_cropTop_expl": "Le nombre de pixels sur le haut qui sont retirés de l'image.",
|
||||
"edt_conf_v4l2_cropTop_title": "Rognage haut",
|
||||
"edt_conf_v4l2_device_expl": "Le chemin d'accès à l'interface de capture d'image USB. Mettre en 'Automatique' pour la détection automatique. Exemple : '/dev/video0'",
|
||||
"edt_conf_v4l2_device_title": "Appareil",
|
||||
"edt_conf_v4l2_encoding_title": "Format d'encodage",
|
||||
"edt_conf_v4l2_flip_expl": "Cela permet de retourner l'image horizontalement, verticalement ou les deux.",
|
||||
"edt_conf_v4l2_flip_title": "Retourner Image",
|
||||
"edt_conf_v4l2_fpsSoftwareDecimation_title": "Saut d'images logiciel",
|
||||
"edt_conf_v4l2_framerate_expl": "Nombre d'images par secondes supporté par le périphérique actif",
|
||||
"edt_conf_v4l2_framerate_title": "Images par seconde",
|
||||
"edt_conf_v4l2_greenSignalThreshold_expl": "Assombrie les valeurs vertes faibles (reconnues comme noires)",
|
||||
"edt_conf_v4l2_greenSignalThreshold_title": "Seuil de signal vert",
|
||||
"edt_conf_v4l2_hardware_brightness_expl": "Définie la luminosité matérielle",
|
||||
"edt_conf_v4l2_hardware_brightness_title": "Contrôle matériel de la luminosité",
|
||||
"edt_conf_v4l2_hardware_contrast_expl": "Définie le contraste matériel",
|
||||
"edt_conf_v4l2_hardware_contrast_title": "Contrôle le contraste matériel",
|
||||
"edt_conf_v4l2_hardware_hue_expl": "Définie le hue matériel",
|
||||
"edt_conf_v4l2_hardware_hue_title": "Contrôle matériel de la teinte",
|
||||
"edt_conf_v4l2_hardware_saturation_expl": "Définie la saturation matérielle",
|
||||
"edt_conf_v4l2_hardware_saturation_title": "Contrôle la saturation matériel",
|
||||
"edt_conf_v4l2_heading_title": "Capture USB",
|
||||
"edt_conf_v4l2_input_title": "Entrée",
|
||||
"edt_conf_v4l2_redSignalThreshold_expl": "Assombrie les valeurs rouges faibles (reconnues comme noires)",
|
||||
"edt_conf_v4l2_redSignalThreshold_title": "Seuil de signal rouge",
|
||||
"edt_conf_v4l2_resolution_expl": "Liste des résolutions supportées pour le périphérique actif",
|
||||
"edt_conf_v4l2_resolution_title": "Résolution de l'appareil",
|
||||
"edt_conf_v4l2_sDHOffsetMax_expl": "Zone horizontale maximale pour la détection de signal (0.0 - 1.0)",
|
||||
"edt_conf_v4l2_sDHOffsetMax_title": "Détection de signal Hmax",
|
||||
"edt_conf_v4l2_sDHOffsetMin_expl": "Zone horizontale minimale pour la détection de signal (0.0 - 1.0)",
|
||||
"edt_conf_v4l2_sDHOffsetMin_title": "Détection de signal HMin",
|
||||
"edt_conf_v4l2_sDVOffsetMax_expl": "Zone verticale maximale pour la détection de signal (0.0 - 1.0)",
|
||||
"edt_conf_v4l2_sDVOffsetMax_title": "Détection de signal VMax",
|
||||
"edt_conf_v4l2_sDVOffsetMin_expl": "Zone verticale minimale pour la détection de signal (0.0 - 1.0)",
|
||||
"edt_conf_v4l2_sDVOffsetMin_title": "Détection de signal VMin",
|
||||
"edt_conf_v4l2_signalDetection_expl": "Si activé, la capture USB sera temporairement désactivé lorsque aucun signal n'est détecté. Cela correspond à une perte d'image inférieure au seuil pendant au moins 4 secondes.",
|
||||
"edt_conf_v4l2_signalDetection_title": "Détection du signal",
|
||||
"edt_conf_v4l2_sizeDecimation_expl": "Le rapport de taille de la décimation. 1 signifie aucune décimation (conserve la taille originale)",
|
||||
"edt_conf_v4l2_sizeDecimation_title": "Taille de la décimation",
|
||||
"edt_conf_v4l2_standard_expl": "Sélectionner le standard vidéo de votre région. 'Automatique' garde les valeurs choisie par l'interface v4l2.",
|
||||
"edt_conf_v4l2_standard_title": "Standart Vidéo",
|
||||
"edt_conf_webc_crtPath_expl": "Chemin vers le certificat (doit être au format PEM)",
|
||||
"edt_conf_webc_crtPath_title": "Chemin du certificat",
|
||||
"edt_conf_webc_docroot_expl": "Chemin racine local des interfaces web (uniquement pour le développement de WebUI)",
|
||||
"edt_conf_webc_docroot_title": "Document racine",
|
||||
"edt_conf_webc_heading_title": "Configuration web",
|
||||
"edt_conf_webc_keyPassPhrase_expl": "Optionnel : La clé peut être protégée par un mot de passe",
|
||||
"edt_conf_webc_keyPassPhrase_title": "Mot de passe de clé",
|
||||
"edt_conf_webc_keyPath_expl": "Chemin vers la clé (doit être au format PEM, chiffrée avec RSA)",
|
||||
"edt_conf_webc_keyPath_title": "Chemin de clé privée",
|
||||
"edt_conf_webc_sslport_expl": "Port HTTPS du serveur web",
|
||||
"edt_conf_webc_sslport_title": "Port HTTPS",
|
||||
"edt_dev_auth_key_title": "Token d'authentification",
|
||||
"edt_dev_enum_sub_min_cool_adjust": "Soustraire le blanc froid",
|
||||
"edt_dev_enum_sub_min_warm_adjust": "Soustraire le blanc chaud",
|
||||
"edt_dev_enum_subtract_minimum": "Soustraire le minimum",
|
||||
"edt_dev_enum_white_off": "Blanc cassé",
|
||||
"edt_dev_general_autostart_title": "Démarrage automatique",
|
||||
"edt_dev_general_autostart_title_info": "Allumage du périphérique LED durant le démarrage ou non",
|
||||
"edt_dev_general_colorOrder_title": "Ordre des octets RGB",
|
||||
"edt_dev_general_enableAttemptsInterval_title": "Intervalle de relance",
|
||||
"edt_dev_general_enableAttemptsInterval_title_info": "Intervalle entre deux tentatives de connexions.",
|
||||
"edt_dev_general_enableAttempts_title": "Tentatives de connexion",
|
||||
"edt_dev_general_enableAttempts_title_info": "Nombre de tentatives de connexion au périphérique avant d'être en erreur.",
|
||||
"edt_dev_general_hardwareLedCount_title": "Nombre de LED physiques",
|
||||
"edt_dev_general_hardwareLedCount_title_info": "Nombre de LEDs physique pour le périphérique sélectionné",
|
||||
"edt_dev_general_heading_title": "Réglages générals",
|
||||
"edt_dev_general_name_title": "Nom de la configuration",
|
||||
"edt_dev_general_rewriteTime_title": "Temps de rafraichissement",
|
||||
"edt_dev_spec_FCledToOn_title": "Les LED fadecandy sont allumées",
|
||||
"edt_dev_spec_FCmanualControl_title": "Contrôle manuel des LED fadecandy",
|
||||
"edt_dev_spec_FCsetConfig_title": "Paramétrer fadecandy",
|
||||
"edt_dev_spec_LBap102Mode_title": "LightBerry APA102 Mode",
|
||||
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
|
||||
"edt_dev_spec_baudrate_title": "Vitesse de transmission",
|
||||
"edt_dev_spec_brightnessFactor_title": "Facteur de luminosité",
|
||||
"edt_dev_spec_brightnessMax_title": "Luminosité maximale",
|
||||
"edt_dev_spec_brightnessMin_title": "Luminosité minimale",
|
||||
"edt_dev_spec_brightnessOverwrite_title": "Ecraser luminosité",
|
||||
"edt_dev_spec_brightness_title": "Luminosité",
|
||||
"edt_dev_spec_candyGamma_title": "Mode 'bougie' (double correction gamma)",
|
||||
"edt_dev_spec_cid_title": "CID",
|
||||
"edt_dev_spec_clientKey_title": "Clé client",
|
||||
"edt_dev_spec_colorComponent_title": "Composant de coulour",
|
||||
"edt_dev_spec_debugLevel_title": "Niveau de debogage",
|
||||
"edt_dev_spec_delayAfterConnect_title": "Retard après connexion",
|
||||
"edt_dev_spec_devices_discovered_none": "Aucun périphérique trouvé",
|
||||
"edt_dev_spec_devices_discovered_title": "Périphériques trouvés",
|
||||
"edt_dev_spec_dithering_title": "Distribution",
|
||||
"edt_dev_spec_dmaNumber_title": "Canal DMA",
|
||||
"edt_dev_spec_gamma_title": "Gamma",
|
||||
"edt_dev_spec_gpioBcm_title": "Pin GPIO",
|
||||
"edt_dev_spec_gpioMap_title": "Correspondance GPIO",
|
||||
"edt_dev_spec_gpioNumber_title": "Numéro GPIO",
|
||||
"edt_dev_spec_groupId_title": "ID de groupe",
|
||||
"edt_dev_spec_header_title": "Configuration spécifique",
|
||||
"edt_dev_spec_interpolation_title": "Interpolation",
|
||||
"edt_dev_spec_intervall_title": "Interval",
|
||||
"edt_dev_spec_invert_title": "Inverser le signal",
|
||||
"edt_dev_spec_latchtime_title": "Temps de verrouillage",
|
||||
"edt_dev_spec_ledIndex_title": "Index de led",
|
||||
"edt_dev_spec_ledType_title": "Type de LED",
|
||||
"edt_dev_spec_lightid_itemtitle": "ID",
|
||||
"edt_dev_spec_lightid_title": "ID(s) des lumières",
|
||||
"edt_dev_spec_lights_itemtitle": "Lumière",
|
||||
"edt_dev_spec_lights_name": "Nom",
|
||||
"edt_dev_spec_lights_title": "Lumière(s)",
|
||||
"edt_dev_spec_maxPacket_title": "Paquet max.",
|
||||
"edt_dev_spec_maximumLedCount_title": "Nombre max. de LED",
|
||||
"edt_dev_spec_multicastGroup_title": "Group de multi-diffusion",
|
||||
"edt_dev_spec_networkDevicePort_title": "Port",
|
||||
"edt_dev_spec_numberOfLeds_title": "Nombre de LED",
|
||||
"edt_dev_spec_orbIds_title": "ID(s) Orb",
|
||||
"edt_dev_spec_order_left_right_title": "2.",
|
||||
"edt_dev_spec_order_top_down_title": "1.",
|
||||
"edt_dev_spec_outputPath_title": "Chemin de sortie",
|
||||
"edt_dev_spec_panelorganisation_title": "Panneau de séquence de numérotation",
|
||||
"edt_dev_spec_pid_title": "PID",
|
||||
"edt_dev_spec_port_expl": "Port de service [1-65535]",
|
||||
"edt_dev_spec_port_title": "Port",
|
||||
"edt_dev_spec_printTimeStamp_title": "Ajouter un horodatage",
|
||||
"edt_dev_spec_pwmChannel_title": "Canal PWM",
|
||||
"edt_dev_spec_restoreOriginalState_title": "Restaurer l'état des lumières",
|
||||
"edt_dev_spec_serial_title": "Numéro de série",
|
||||
"edt_dev_spec_spipath_title": "Chemin SPI",
|
||||
"edt_dev_spec_stream_protocol_title": "Protocole de diffusion",
|
||||
"edt_dev_spec_switchOffOnBlack_title": "Éteindre avec le noir",
|
||||
"edt_dev_spec_targetIpHost_title": "IP/nom d'hôte cible",
|
||||
"edt_dev_spec_targetIp_title": "IP cible",
|
||||
"edt_dev_spec_transeffect_title": "Effet de transition",
|
||||
"edt_dev_spec_transistionTime_title": "Temps de transition",
|
||||
"edt_dev_spec_uid_title": "UID",
|
||||
"edt_dev_spec_universe_title": "Univers",
|
||||
"edt_dev_spec_useOrbSmoothing_title": "Utiliser le lissage orb",
|
||||
"edt_dev_spec_useRgbwProtocol_title": "Utiliser le protocole RGBW",
|
||||
"edt_dev_spec_username_title": "Nom d'utilisateur",
|
||||
"edt_dev_spec_verbose_title": "Tracer toutes les commandes Hue",
|
||||
"edt_dev_spec_vid_title": "VID",
|
||||
"edt_dev_spec_whiteLedAlgor_title": "Algorithme LED Blanche",
|
||||
"edt_dev_spec_whitepoint_title": "Point blanc",
|
||||
"edt_eff_alarmcolor": "Couleur d'alarme",
|
||||
"edt_eff_backgroundColor": "Couleur d'arrière plan",
|
||||
"edt_eff_basecolorchange": "Couleur de base",
|
||||
"edt_eff_basecolorchangerate": "Taux du changement de couleur",
|
||||
"edt_eff_basecolorrangeleft": "Plage inférieur du CC",
|
||||
"edt_eff_basecolorrangeright": "Plage supérieur du CC",
|
||||
"edt_eff_blobcount": "Nombre de gouttes",
|
||||
"edt_eff_brightness": "Luminosité",
|
||||
"edt_eff_candle_header": "Bougies",
|
||||
"edt_eff_candle_header_desc": "Bougies chatoyantes",
|
||||
"edt_eff_centerx": "Coordonnée X du centre",
|
||||
"edt_eff_centery": "Coordonnée Y du centre",
|
||||
"edt_eff_color": "Couleur",
|
||||
"edt_eff_colorHour": "Couleur des heures",
|
||||
"edt_eff_colorMarker": "Couleur de marqueur",
|
||||
"edt_eff_colorMinute": "Couleur des minutes",
|
||||
"edt_eff_colorcount": "longueur de couleur",
|
||||
"edt_eff_colorend": "Couleur de fin",
|
||||
"edt_eff_colorendtime": "Temps de maintien de la couleur de début",
|
||||
"edt_eff_colorevel": "Niveau de couleur",
|
||||
"edt_eff_colorone": "Couleur un",
|
||||
"edt_eff_colorrandom": "Couleur aléatoire",
|
||||
"edt_eff_colorshift": "Décalage de couleur",
|
||||
"edt_eff_colorstart": "Couleur de départ",
|
||||
"edt_eff_colorstarttime": "Temps de maintient de la couleur de fin",
|
||||
"edt_eff_colortwo": "Couleur deux",
|
||||
"edt_eff_count": "Nombre",
|
||||
"edt_eff_countries": "Pays",
|
||||
"edt_eff_customColor": "Couleur personnalisée",
|
||||
"edt_eff_enableSecondSwirl": "Deuxième tourbillon",
|
||||
"edt_eff_enum_all": "Tous",
|
||||
"edt_eff_enum_all-together": "Tous ensemble",
|
||||
"edt_eff_enum_list": "Liste des LED",
|
||||
"edt_eff_fade_header": "Fondu",
|
||||
"edt_eff_fade_header_desc": "Fondu de couleurs",
|
||||
"edt_eff_fadefactor": "Multiplicateur du fondu",
|
||||
"edt_eff_fadeintime": "Temps de fondu d'entrée",
|
||||
"edt_eff_fadeouttime": "Temps de fondu de sortie",
|
||||
"edt_eff_flag_header": "Drapeaux",
|
||||
"edt_eff_flag_header_desc": "Vos LED arboreront les couleurs de votre pays. Vous pouvez définir plusieurs drapeaux qui s'alterneront en fonction de l'intervalle défini.",
|
||||
"edt_eff_fps": "images par secondes",
|
||||
"edt_eff_frequency": "Fréquence",
|
||||
"edt_eff_gif_header": "GIF",
|
||||
"edt_eff_gif_header_desc": "Cet effet lit des fichiers .gif, fournit une simple boucle vidéo comme effet.",
|
||||
"edt_eff_grayscale": "Niveaux de gris",
|
||||
"edt_eff_height": "Hauteur",
|
||||
"edt_eff_huechange": "Changement de couleur",
|
||||
"edt_eff_image": "Image",
|
||||
"edt_eff_image_source": "Image source",
|
||||
"edt_eff_image_source_file": "Fichier local",
|
||||
"edt_eff_image_source_url": "URL",
|
||||
"edt_eff_interval": "Intervalle",
|
||||
"edt_eff_knightrider_header": "Chevalier",
|
||||
"edt_eff_knightrider_header_desc": "K.I.T.T est de retour ! Le scanner avant de la voiture, cette fois pas seulement en rouge.",
|
||||
"edt_eff_ledlist": "Liste de LED",
|
||||
"edt_eff_ledtest_header": "Test LED",
|
||||
"edt_eff_ledtest_header_desc": "sortie tournante: rouge, verte, blanche, noire",
|
||||
"edt_eff_length": "Longueur",
|
||||
"edt_eff_lightclock_header": "Horloge lumineuse",
|
||||
"edt_eff_maintain_end_color": "Garder la couleur de fin",
|
||||
"edt_eff_margin": "Marge",
|
||||
"edt_eff_markerDepth": "Profondeur de marqueur",
|
||||
"edt_eff_markerEnable": "Montrer le marqueur",
|
||||
"edt_eff_markerWidth": "Largeur de marqueur",
|
||||
"edt_eff_max_len": "Longueur maximale",
|
||||
"edt_eff_min_len": "Longueur minimale",
|
||||
"edt_eff_moodblobs_header": "Gouttes relaxantes",
|
||||
"edt_eff_moodblobs_header_desc": "Détendez vous le soir avec des gouttes se déplaçant lentement et changeant de couleurs.",
|
||||
"edt_eff_offset": "Décalage",
|
||||
"edt_eff_pacman_header": "Pac-Man",
|
||||
"edt_eff_pacman_header_desc": "Petit, affamé et jaune. Qui survivra ?",
|
||||
"edt_eff_plasma_header": "Plasma",
|
||||
"edt_eff_plasma_header_desc": "Distortion coloriphique dans les différentes directions",
|
||||
"edt_eff_police_header": "Police",
|
||||
"edt_eff_police_header_desc": "Gyrophare de police",
|
||||
"edt_eff_rainbowmood_header": "Arc-en-ciel",
|
||||
"edt_eff_rainbowmood_header_desc": "Arc-en-ciel",
|
||||
"edt_eff_randomCenter": "Centre aléatoire",
|
||||
"edt_eff_random_header": "Aléatoire",
|
||||
"edt_eff_random_header_desc": "Pixel point, point, point",
|
||||
"edt_eff_repeat": "Répéter",
|
||||
"edt_eff_repeatcount": "Nombre de répétitions",
|
||||
"edt_eff_reverseRandomTime": "Inverser chaque",
|
||||
"edt_eff_reversedirection": "Direction inverse",
|
||||
"edt_eff_rotationtime": "Temps de rotation",
|
||||
"edt_eff_saturation": "Saturation",
|
||||
"edt_eff_showseconds": "Afficher les secondes",
|
||||
"edt_eff_sleeptime": "Temps de sommeil",
|
||||
"edt_eff_smooth_custom": "Activer le lissage",
|
||||
"edt_eff_smooth_time_ms": "Temps de lissage",
|
||||
"edt_eff_smooth_updateFrequency": "Fréquence de mise à jour du lissage",
|
||||
"edt_eff_snake_header": "Serpent",
|
||||
"edt_eff_snake_header_desc": "Vous cherchez quelque chose à manger ? ",
|
||||
"edt_eff_sparks_header": "Étincelles",
|
||||
"edt_eff_sparks_header_desc": "Étoile pétillante, Choisissez entre une couleur statique ou aléatoire. Vous pouvez également régler la luminosité, la saturation et la vitesse.",
|
||||
"edt_eff_speed": "Vitesse",
|
||||
"edt_eff_swirl_header": "Tourbillon de couleur",
|
||||
"edt_eff_swirl_header_desc": "Un tourbillon de couleurs personnalisées. Les couleurs sont réparties équitablement à 360°, le dégradé de couleur est automatiquement calculé. Vous pouvez également ajouter un deuxième tourbillon, il faudra cependant définir une transparence ! Conseil : l'utilisation de la même couleur permet d'obtenir une plus \"grande\" zone et réduit le dégradé.",
|
||||
"edt_eff_systemshutdown_header": "Arrêt système",
|
||||
"edt_eff_systemshutdown_header_desc": "Une courte animation imitant un arrêt système",
|
||||
"edt_eff_traces_header": "Trace de couleur",
|
||||
"edt_eff_traces_header_desc": "Nécessite une refonte",
|
||||
"edt_eff_trails_header": "Étoiles tombantes",
|
||||
"edt_eff_trails_header_desc": "Étoiles colorées qui tombent de haut en bas",
|
||||
"edt_eff_url": "Adresse de l'image",
|
||||
"edt_eff_waves_header": "Vagues",
|
||||
"edt_eff_waves_header_desc": "Vagues de couleurs ! Choisissez vos couleurs, le temps de rotation, la direction inverse et plus.",
|
||||
"edt_eff_whichleds": "Quelles LED",
|
||||
"edt_eff_whitelevel": "Niveau de blanc",
|
||||
"edt_eff_x-mas_header": "Noël",
|
||||
"edt_eff_x-mas_header_desc": "Touches de Noël",
|
||||
"edt_msg_button_add_row_title": "Ajoute $1",
|
||||
"edt_msg_button_collapse": "Réduire",
|
||||
"edt_msg_button_delete_all": "Tout",
|
||||
"edt_msg_button_delete_all_title": "Supprimer tout",
|
||||
"edt_msg_button_delete_last": "Dernier $1",
|
||||
"edt_msg_button_delete_last_title": "Supprimer le dernier $1",
|
||||
"edt_msg_button_delete_row_title": "Supprimer $1",
|
||||
"edt_msg_button_delete_row_title_short": "Supprimer",
|
||||
"edt_msg_button_expand": "Agrandir",
|
||||
"edt_msg_button_move_down_title": "Déplacer vers le bas",
|
||||
"edt_msg_button_move_up_title": "Déplacer vers le haut",
|
||||
"edt_msg_error_additionalItems": "Aucun élément supplémentaire autorisé dans ce tableau",
|
||||
"edt_msg_error_additional_properties": "Aucune propriété supplémentaire n'est autorisée, mais la propriété $1 est définie.",
|
||||
"edt_msg_error_anyOf": "La valeur doit valider au moins un des schémas fournis",
|
||||
"edt_msg_error_dependency": "Doit avoir une propriété $1",
|
||||
"edt_msg_error_disallow": "La valeur ne doit pas être du type : $1",
|
||||
"edt_msg_error_disallow_union": "La valeur ne doit pas faire partie des types non permis spécifiés",
|
||||
"edt_msg_error_enum": "La valeur doit faire partie des valeurs indiquées",
|
||||
"edt_msg_error_maxItems": "La valeur doit avoir au plus $1 éléments",
|
||||
"edt_msg_error_maxLength": "La valeur doit être au plus $1 caractères de long",
|
||||
"edt_msg_error_maxProperties": "L'objet doit avoir au plus $1 propriétés",
|
||||
"edt_msg_error_maximum_excl": "La valeur doit être inférieure à $1",
|
||||
"edt_msg_error_maximum_incl": "La valeur doit être au plus $1",
|
||||
"edt_msg_error_minItems": "La valeur doit avoir au moins $1 éléments",
|
||||
"edt_msg_error_minLength": "La valeur doit être au moins $1 caractère de long",
|
||||
"edt_msg_error_minProperties": "L'object doit avoir au moins $1 propriétés",
|
||||
"edt_msg_error_minimum_excl": "La valeur doit être plus grande que $1",
|
||||
"edt_msg_error_minimum_incl": "La valeur doit être au moins $1",
|
||||
"edt_msg_error_multipleOf": "La valeur doit être un multiple de $1",
|
||||
"edt_msg_error_not": "La valeur ne doit pas valider le schéma fourni",
|
||||
"edt_msg_error_notempty": "La valeur est requise",
|
||||
"edt_msg_error_notset": "La propriété doit être configurée",
|
||||
"edt_msg_error_oneOf": "La valeur doit valider un seul des schémas fournis. $1 schémas sont validés actuellement.",
|
||||
"edt_msg_error_pattern": "La valeur doit correspondre au schema",
|
||||
"edt_msg_error_required": "Il manque la propriété requise '$1' à l'objet.",
|
||||
"edt_msg_error_type": "La valeur doit être du type : $1",
|
||||
"edt_msg_error_type_union": "La valeur doit faire partie des types fournis",
|
||||
"edt_msg_error_uniqueItems": "Le tableau doit avoir des éléments uniques",
|
||||
"effectsconfigurator_button_conttest": "Test continu",
|
||||
"effectsconfigurator_button_deleffect": "Supprimer un effet",
|
||||
"effectsconfigurator_button_editeffect": "Charger un effet",
|
||||
"effectsconfigurator_button_saveeffect": "Sauvegarder un effet",
|
||||
"effectsconfigurator_button_starttest": "Démarrer le test",
|
||||
"effectsconfigurator_button_stoptest": "Arrêter le test",
|
||||
"effectsconfigurator_editdeleff": "Supprimer/Charger un effet",
|
||||
"effectsconfigurator_label_chooseeff": "Choisir un modèle",
|
||||
"effectsconfigurator_label_effectname": "Nom de l'effet",
|
||||
"effectsconfigurator_label_intro": "Créez de nouveaux effets personnalisés (basés sur ceux intégrés) que vous pouvez régler à votre guise. Il existe différentes options disponibles telles que la couleur, la vitesse et la direction en fonction de l'effet de base que vous choisissez.",
|
||||
"general_access_advanced": "Avancé",
|
||||
"general_access_default": "Défaut",
|
||||
"general_access_expert": "Expert",
|
||||
"general_btn_back": "Précédent",
|
||||
"general_btn_cancel": "Annuler",
|
||||
"general_btn_continue": "Continuer",
|
||||
"general_btn_delete": "Supprimer",
|
||||
"general_btn_denyAccess": "Révoquer l'accès",
|
||||
"general_btn_grantAccess": "Donner l'accès",
|
||||
"general_btn_iswitch": "Basculer",
|
||||
"general_btn_next": "Suivant",
|
||||
"general_btn_off": "Off",
|
||||
"general_btn_ok": "OK",
|
||||
"general_btn_on": "On",
|
||||
"general_btn_rename": "Renommer",
|
||||
"general_btn_restarthyperion": "Redémarrer Hyperion",
|
||||
"general_btn_save": "Sauvegarder",
|
||||
"general_btn_saveandreload": "Sauvegarder et recharger",
|
||||
"general_btn_saverestart": "Enregistrer et redémarrer",
|
||||
"general_btn_start": "Démarrer",
|
||||
"general_btn_stop": "Arrêter",
|
||||
"general_btn_yes": "Oui",
|
||||
"general_button_savesettings": "Sauvegarder les réglages",
|
||||
"general_chars_needed": "Plus de caractères nécessaire",
|
||||
"general_col_blue": "bleu",
|
||||
"general_col_green": "vert",
|
||||
"general_col_red": "rouge",
|
||||
"general_comp_BLACKBORDER": "Détection des bandes noires",
|
||||
"general_comp_BOBLIGHTSERVER": "Serveur Boblight",
|
||||
"general_comp_FLATBUFSERVER": "Serveur Flatbuffers",
|
||||
"general_comp_FORWARDER": "Transfert",
|
||||
"general_comp_GRABBER": "Capture d'écran",
|
||||
"general_comp_LEDDEVICE": "Périphérique LED",
|
||||
"general_comp_PROTOSERVER": "Serveur Protocol Buffers",
|
||||
"general_comp_SMOOTHING": "Fondu",
|
||||
"general_comp_V4L": "Capture USB",
|
||||
"general_country_cn": "Chine",
|
||||
"general_country_de": "Allemagne",
|
||||
"general_country_es": "Espagne",
|
||||
"general_country_fr": "France",
|
||||
"general_country_it": "Italie",
|
||||
"general_country_nl": "Pays-Bas",
|
||||
"general_country_ru": "Russie",
|
||||
"general_country_uk": "Royaume-Uni",
|
||||
"general_country_us": "États-Unis",
|
||||
"general_disabled": "désactivé",
|
||||
"general_enabled": "activé",
|
||||
"general_speech_cs": "Tchèque",
|
||||
"general_speech_da": "Danois",
|
||||
"general_speech_de": "Allemand",
|
||||
"general_speech_en": "Anglais",
|
||||
"general_speech_es": "Espagnol",
|
||||
"general_speech_fr": "Français",
|
||||
"general_speech_hu": "Hongrois",
|
||||
"general_speech_it": "Italien",
|
||||
"general_speech_ja": "Japonais",
|
||||
"general_speech_nb": "Norvégien(Bokmål)",
|
||||
"general_speech_nl": "Néerlandais",
|
||||
"general_speech_pl": "Polonais",
|
||||
"general_speech_pt": "Portuguais",
|
||||
"general_speech_ro": "Roumain",
|
||||
"general_speech_ru": "Russe",
|
||||
"general_speech_sv": "Suédois",
|
||||
"general_speech_vi": "Vietnamien",
|
||||
"general_speech_zh-CN": "Chinois (simplifié)",
|
||||
"general_webui_title": "Hyperion - Configuration web",
|
||||
"general_wiki_moreto": "Plus d'informations à propos de \"$1\" sont disponible sur notre Wiki",
|
||||
"infoDialog_checklist_title": "Checklist !",
|
||||
"infoDialog_effconf_created_text": "L'effet \"$1\" a été créé !",
|
||||
"infoDialog_effconf_deleted_text": "L'effet \"$1\" a été supprimé !",
|
||||
"infoDialog_general_error_title": "Erreur",
|
||||
"infoDialog_general_success_title": "Succès",
|
||||
"infoDialog_general_warning_title": "Avertissement",
|
||||
"infoDialog_import_comperror_text": "Malheureusement votre navigateur ne supporte pas l'importation. Essayez à nouveau avec un autre navigateur.",
|
||||
"infoDialog_import_confirm_text": "Êtes-vous sur de vouloir importer \"$1\" ? Cette action ne pourra pas être annulée !",
|
||||
"infoDialog_import_confirm_title": "Confirmation d'importation",
|
||||
"infoDialog_import_hyperror_text": "Le fichier de configuration \"$1\" ne peut pas être importé. Il n'est pas compatible avec Hyperion 2.0 ou supérieur !",
|
||||
"infoDialog_import_jsonerror_text": "Le fichier de configuration sélectionné \"$1\" n'est pas un fichier .json ou est corrompu. Message d'erreur : ($2)",
|
||||
"infoDialog_password_current_text": "Mot de passe actuel",
|
||||
"infoDialog_password_minimum_length": "le mot de passe doit faire 8 caractères au minimum. ",
|
||||
"infoDialog_password_new_text": "Nouveau mot de passe",
|
||||
"infoDialog_username_text": "Nom d'utilisateur",
|
||||
"infoDialog_wizrgb_text": "L'ordre des octets RGB est déjà correctement défini.",
|
||||
"infoDialog_writeconf_error_text": "Echec de sauvegarde de votre configuration.",
|
||||
"infoDialog_writeimage_error_text": "Le fichier sélectionné \"$1\" n'est pas une image ou est corrompu ! Veuillez sélectionner une autre image.",
|
||||
"info_404": "La page demandée n'est pas disponible !",
|
||||
"info_conlost_label_autorecon": "Nous nous reconnecterons dès que Hyperion sera disponible.",
|
||||
"info_conlost_label_autorefresh": "Cette page sera automatiquement rafraîchie.",
|
||||
"info_conlost_label_reason": "Raisons possibles : ",
|
||||
"info_conlost_label_reason1": "- Mauvaise connexion Wi-Fi",
|
||||
"info_conlost_label_reason2": "- Vous effectuez une mise à jour",
|
||||
"info_conlost_label_reason3": "- Hyperion n'est pas démarré",
|
||||
"info_conlost_label_reload": "Arrêt de la reconnexion automatique - dépassement de limite, rafraîchissez la page ou cliquez ici.",
|
||||
"info_conlost_label_title": "Connexion au service Hyperion perdue !",
|
||||
"info_restart_contus": "Si vous êtes ici depuis plus de 20 secondes et vous ne savez pas pourquoi, ouvrez un nouveau sujet dans le forum du support SVP...",
|
||||
"info_restart_contusa": "... détaillant les manipulations effectuées. Merci !",
|
||||
"info_restart_rightback": "Hyperion sera de retour rapidement !",
|
||||
"info_restart_title": "Redémarrage en cours...",
|
||||
"main_ledsim_btn_togglelednumber": "Nombre de LED",
|
||||
"main_ledsim_btn_toggleleds": "Montrer les LED",
|
||||
"main_ledsim_btn_togglelivevideo": "Vidéo temps réel",
|
||||
"main_ledsim_text": "Visualisation en temps réel des couleurs des LED et optionnellement, le flux vidéo actuel issu du périphérique de capture",
|
||||
"main_ledsim_title": "Visualisation LED",
|
||||
"main_menu_about_token": "À propos d'Hyperion",
|
||||
"main_menu_colors_conf_token": "Traitement d'image",
|
||||
"main_menu_configuration_token": "Configurations LED",
|
||||
"main_menu_dashboard_token": "Tableau de bord",
|
||||
"main_menu_effect_conf_token": "Effets",
|
||||
"main_menu_effectsconfigurator_token": "Configurateur d'effets",
|
||||
"main_menu_general_conf_token": "Général",
|
||||
"main_menu_grabber_conf_token": "Capture matérielle",
|
||||
"main_menu_input_selection_token": "Sélection de l'entrée",
|
||||
"main_menu_instcapture_conf_token": "Sources",
|
||||
"main_menu_leds_conf_token": "Matériel LED",
|
||||
"main_menu_logging_token": "Journal",
|
||||
"main_menu_network_conf_token": "Services réseaux",
|
||||
"main_menu_remotecontrol_token": "Contrôle à distance",
|
||||
"main_menu_support_token": "Support",
|
||||
"main_menu_system_token": "Système",
|
||||
"main_menu_update_token": "Mise à jour",
|
||||
"main_menu_webconfig_token": "Configuration web",
|
||||
"remote_adjustment_intro": "Modifiez la couleur/la luminosité/la compensation durant l'exécution. $1",
|
||||
"remote_adjustment_label": "Ajustement des couleurs",
|
||||
"remote_color_button_reset": "Réinitialiser Couleur/Effet",
|
||||
"remote_color_intro": "Définissez un effet ou une couleur. Vos propres effets sont également répertoriés (si disponibles). $1",
|
||||
"remote_color_label": "Couleurs/Effets",
|
||||
"remote_color_label_color": "Couleur : ",
|
||||
"remote_components_intro": "Activer et désactiver les composants d'Hyperion pendant l'exécution. $1",
|
||||
"remote_components_label": "Contrôle des composants",
|
||||
"remote_effects_label_effects": "Effet : ",
|
||||
"remote_effects_label_picture": "Image :",
|
||||
"remote_input_clearall": "Effacer les effets/couleurs",
|
||||
"remote_input_duration": "Durée : ",
|
||||
"remote_input_intro": "Hyperion utilise un système de priorité pour choisir une source. Tout ce que vous définissez à une priorité (Effets/Couleurs/Capture d'écran/Capture USB et sources réseau). Par défaut, Hyperion choisit les sources en fonction de leur priorité (le nombre le plus bas représente la source active). Vous pouvez choisir une source manuellement. $1",
|
||||
"remote_input_ip": "IP : ",
|
||||
"remote_input_label": "Sélection de la source",
|
||||
"remote_input_label_autoselect": "Sélection automatique",
|
||||
"remote_input_origin": "Origine",
|
||||
"remote_input_owner": "Type",
|
||||
"remote_input_priority": "Priorité",
|
||||
"remote_input_setsource_btn": "Sélectionner une source",
|
||||
"remote_input_sourceactiv_btn": "Source Active",
|
||||
"remote_input_status": "Etat/Action",
|
||||
"remote_losthint": "Note : Toutes les modifications seront perdues après redémarrage.",
|
||||
"remote_maptype_intro": "Habituellement, la disposition des LED définit quelle LED est en charge d'une partie de l'image. Vous pouvez la modifier ici : $1.",
|
||||
"remote_maptype_label": "Type de correspondance",
|
||||
"remote_maptype_label_multicolor_mean": "Multicolore",
|
||||
"remote_maptype_label_unicolor_mean": "Unicolore",
|
||||
"remote_optgroup_syseffets": "Effets fournis",
|
||||
"remote_optgroup_templates_system": "Modèles Système",
|
||||
"remote_optgroup_usreffets": "Effets utilisateur",
|
||||
"remote_videoMode_2D": "2D",
|
||||
"remote_videoMode_3DSBS": "3DSBS",
|
||||
"remote_videoMode_3DTAB": "3DTAB",
|
||||
"remote_videoMode_intro": "Basculez entre les différents modes vidéo pour profiter de films 3D ! Tous les périphériques de capture sont pris en charge. $1",
|
||||
"remote_videoMode_label": "Mode vidéo",
|
||||
"support_label_affinstr1": "Cliquez sur le lien associé à votre pays",
|
||||
"support_label_affinstr2": "Peu importe la quantité achetée, cela nous permet de toucher une petite commission en fonction du montant total",
|
||||
"support_label_affinstr3": "Vous payez TOUJOURS le même prix, il n'y a pas de différences. Essayez !",
|
||||
"support_label_btctext": "Adresse : ",
|
||||
"support_label_donate": "Faites un don ou utilisez nos liens d'affiliation",
|
||||
"support_label_donationpp": "Don : ",
|
||||
"support_label_fbtext": "Partagez notre page Facebook et recevez une notification lorsque de nouvelles mises à jour sont publiées.",
|
||||
"support_label_forumtext": "Vitrines, discussions, aide et plus",
|
||||
"support_label_forumtitle": "Forum",
|
||||
"support_label_ggtext": "Ajouter nous à votre cercle Google+ !",
|
||||
"support_label_ghtext": "Rendez-nous visite sur GitHub",
|
||||
"support_label_igtext": "Visitez notre Instagram pour votre les dernières images d'Hyperion ! ",
|
||||
"support_label_intro": "Hyperion est un logiciel gratuit à but non lucratif. Une petite équipe y travaille et c'est pourquoi nous avons besoin de votre soutien constant.",
|
||||
"support_label_spreadtheword": "Faites passer le message",
|
||||
"support_label_title": "Support d'Hyperion",
|
||||
"support_label_twtext": "Partagez et suivez nous sur Twitter, soyez informé des dernières mises à jour d'Hyperion",
|
||||
"support_label_webpagetext": "Accueil d'Hyperion",
|
||||
"support_label_webpagetitle": "Page web",
|
||||
"support_label_webrestitle": "Informations et ressources d'aide",
|
||||
"support_label_wikitext": "La source de A à Z pour à peu près tout concernant Hyperion",
|
||||
"support_label_wikititle": "Wiki",
|
||||
"support_label_yttext": "Lassé des images ? Découvrez notre chaîne YouTube !",
|
||||
"update_button_changelog": "Changelog complet",
|
||||
"update_button_install": "Installation",
|
||||
"update_error_getting_versions": "Nous n'avons pas pu déterminer la dernière version disponible.",
|
||||
"update_label_description": "Description :",
|
||||
"update_label_intro": "Présentation de toutes les versions d'Hyperion disponibles. De plus, vous pouvez mettre à jour ou rétrograder votre version d'Hyperion à tout moment. Trié du plus récent au plus ancien",
|
||||
"update_label_type": "Type :",
|
||||
"update_no_updates_for_branch": "Pas de mise à jour pour le canal sélectionné.",
|
||||
"update_versreminder": "Votre version : $1",
|
||||
"wiz_cc_adjustgamma": "Gamma : Vous devez ici ajuster le niveau de gamma de chaque canal afin d'obtenir le même niveau. Conseil : Neutre est égal à 1.0 ! Par exemple, si votre Gris est un peu rougeâtre, cela signifie que vous devez augmenter le gamma du rouge pour réduire son effet (plus le gamma est élevé, plus la couleur sera absente).",
|
||||
"wiz_cc_adjustit": "Ajuster votre \"$1\" jusqu'à obtenir l'effet désiré. Attention : plus vous vous éloignez des valeur par défaut, plus la plage de couleur sera limité (s'applique aux couleurs intermédiaires). Les résultats peuvent variés en fonction de votre TV/plage de couleur de vos LED.",
|
||||
"wiz_cc_btn_stop": "Arrêter la vidéo",
|
||||
"wiz_cc_btn_switchpic": "Changer d'image",
|
||||
"wiz_cc_chooseid": "Donner un nom à ce profil de couleurs.",
|
||||
"wiz_cc_intro1": "Cet assistant vous guidera à travers l'étalonnage de vos LED. Si vous utilisez Kodi, les photos et vidéos d'étalonnage peuvent lui être envoyées directement sans autres actions de votre côté. Sinon, vous devez télécharger ces fichiers vous-même et les afficher lorsque l'assistant aura besoin de vous pour ajuster le paramètre.",
|
||||
"wiz_cc_kodicon": "Serveur web Kodi trouvé, continuer avec support Kodi.",
|
||||
"wiz_cc_kodidiscon": "Serveur web Kodi introuvable, continuer sans support Kodi.",
|
||||
"wiz_cc_kodidisconlink": "Télécharger les images des liens : ",
|
||||
"wiz_cc_kodimsg_start": "Test validé - Il est temps de continuer !",
|
||||
"wiz_cc_kodishould": "Kodi devrait montrer cette image : $1",
|
||||
"wiz_cc_kwebs": "Serveur web Kodi (Nom d'hôte ou IP)",
|
||||
"wiz_cc_lettvshow": "Afficher sur votre TV cette image : $1",
|
||||
"wiz_cc_lettvshowm": "Vérifier avec ces images : $1",
|
||||
"wiz_cc_link": "Cliquez moi !",
|
||||
"wiz_cc_morethanone": "Vous avez plusieurs profils, sélectionnez le profil que vous souhaitez configurer.",
|
||||
"wiz_cc_summary": "Le résumé de vos réglages. Lors de la lecture d'une vidéo, vous pouvez modifier ou tester les nouvelles valeurs. Si vous êtes satisfait du résultat, cliquez sur Sauvegarder.",
|
||||
"wiz_cc_testintro": "Il est temps de faire un vrai test !",
|
||||
"wiz_cc_testintrok": "Cliquer sur le bouton ci-dessous pour démarrer un test vidéo.",
|
||||
"wiz_cc_testintrowok": "Consultez le lien suivant pour télécharger des vidéos de test : ",
|
||||
"wiz_cc_title": "Assistant de calibration des couleurs",
|
||||
"wiz_cc_try_connect": "Connexion en cours...",
|
||||
"wiz_cololight_noprops": "Récupération des propriétés du périphérique impossible. Définissez manuellement le nombre de LED physiques",
|
||||
"wiz_guideyou": "Le $1 vous guidera à travers les réglages. Cliquez sur le bouton !",
|
||||
"wiz_hue_blinkblue": "Laissez ID $1 s'allumer en bleu",
|
||||
"wiz_hue_clientkey": "Clé Client :",
|
||||
"wiz_hue_create_user": "Créer un nouvel utilisateur",
|
||||
"wiz_hue_desc1": "Il recherche automatiquement un Hue Bridge, au cas où il n'en trouverait pas, vous devez fournir l'adresse IP et appuyer sur le bouton actualiser à droite. Maintenant, vous avez besoin d'un ID utilisateur, si vous n'en avez pas, créez-en un nouveau.",
|
||||
"wiz_hue_desc2": "Choisissez maintenant les lampes à ajouter. La position attribue la lampe à une position spécifique sur votre \"image\". Les lampes désactivées ne seront pas ajoutées. Pour identifier des lampes individuelles, appuyez sur le bouton à droite.",
|
||||
"wiz_hue_e_create_user": "Créer un nouvel utilisateur et clé cliente",
|
||||
"wiz_hue_e_desc2": "Choisissez votre groupe de divertissement, celui qui a toutes les lumières pour l'utiliser avec Hyperion",
|
||||
"wiz_hue_e_noegrpids": "Aucun groupe de divertissement Hue défini",
|
||||
"wiz_hue_e_nogrpids": "Ce pont Hue n'a aucun groupe défini, veuillez en créer au moins un au préalable avec l'application Hue",
|
||||
"wiz_hue_e_use_group": "Utiliser Groupe",
|
||||
"wiz_hue_e_use_groupid": "Utiliser groupe ID $1",
|
||||
"wiz_hue_failure_connection": "Le délai a expiré : Appuyez sur le bouton du Bridge dans les 30 secondes.",
|
||||
"wiz_hue_failure_ip": "Pas de Bridge trouvé, tapez une IP valide",
|
||||
"wiz_hue_failure_user": "Utilisateur inconnu, créez un nouvel utilisateur en cliquant sur le bouton si dessous ou saisissez un identifiant valide et cliquez sur le symbole de rechargement",
|
||||
"wiz_hue_intro1": "Cet assistant configure Hyperion pour le système Philips Hue. Les fonctionnalités sont la détection automatique de Hue Bridge, la création d'utilisateurs, réglage de chaque lumière à une position spécifique sur votre image ou sa déactivation et le réglage automatique des paramètres Hyperion ! Donc en bref: il vous suffit de quelques clics et vous avez terminé !",
|
||||
"wiz_hue_ip": "IP Hue Bridge : ",
|
||||
"wiz_hue_noids": "Ce pont Hue n'a pas d'ampoules/bandeau, veuillez les coupler avant avec les applications Hue",
|
||||
"wiz_hue_press_link": "Appuyez sur le bouton de votre Hue Bridge.",
|
||||
"wiz_hue_searchb": "Recherche d'un pont...",
|
||||
"wiz_hue_title": "Assistant de configuration Philips Hue",
|
||||
"wiz_hue_username": "ID utilisateur : ",
|
||||
"wiz_identify": "Identifié",
|
||||
"wiz_identify_light": "Identifié $1",
|
||||
"wiz_ids_disabled": "Désactivé",
|
||||
"wiz_ids_entire": "Image entière",
|
||||
"wiz_noLights": "Pas de $1 trouvé! Veuillez connecter les lumières au réseau ou configurez les manuellement.",
|
||||
"wiz_pos": "Position/État",
|
||||
"wiz_rgb_expl": "Le point coloré change de couleur (rouge, vert) toutes les x secondes, en même temps que vos LEDs passent à cette couleur. Répondez aux questions en bas pour vérifier/corriger votre ordre d'octets.",
|
||||
"wiz_rgb_intro1": "Cet assistant vous guidera à travers le processus de recherche de l'ordre des couleurs correct pour vos leds. Cliquez sur continuer pour commencer.",
|
||||
"wiz_rgb_intro2": "Quand avez-vous besoin de cet assistant? Exemple : vous définissez la couleur rouge, mais vous obtenez du vert ou du bleu. Vous pouvez également l'utiliser pour la première configuration.",
|
||||
"wiz_rgb_q": "Quelle couleur affiche votre configuration, lorsque le point coloré ci-dessus est ...",
|
||||
"wiz_rgb_qgend": "...vert ?",
|
||||
"wiz_rgb_qrend": "...rouge ?",
|
||||
"wiz_rgb_switchevery": "Changer de couleur toutes les...",
|
||||
"wiz_rgb_title": "Assistant de configuration d'ordre des octets RVB",
|
||||
"wiz_wizavail": "Assistant de configuration disponible",
|
||||
"wiz_yeelight_unsupported": "Non supporté"
|
||||
}
|
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
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue