diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 6751428..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - } -} diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml deleted file mode 100644 index 8e78ffa..0000000 --- a/.github/workflows/beta.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: NodeJS with Webpack - -on: - push: - branches: [ "main" ] - -jobs: - build: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18.x] - - steps: - - uses: actions/checkout@v4 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Cache dependencies - uses: actions/cache@v4 - with: - path: ~/.npm - key: npm-${{ hashFiles('package-lock.json') }} - restore-keys: npm- - - - name: Install node module - run: | - npm install - - - name: Create dir for deploy - run: | - mkdir ./deploy - mkdir ./deploy/controller_ui - mkdir ./deploy/z_uno_compiler - mkdir ./deploy/controller_ui/beta - mkdir ./deploy/z_uno_compiler/beta - - - name: Build controller_ui - run: | - npm run dev - mv ./build/* ./deploy/controller_ui/beta - - - name: Build z-uno-compiler - run: | - npm run dev_zuno - mv ./build/* ./deploy/z_uno_compiler/beta - - - name: Deploy - uses: peaceiris/actions-gh-pages@v4 - with: - github_token: ${{secrets.GITHUB_TOKEN}} - publish_dir: ./deploy - user_name: 'amatilda' - user_email: '' - commit_message: 'Auto-generated commit' - publish_branch: 'gh-pages' \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index e046245..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: NodeJS with Webpack - -on: - push: - tags: - - v* - -jobs: - build: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18.x] - - steps: - - uses: actions/checkout@v4 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - - name: Cache dependencies - uses: actions/cache@v4 - with: - path: ~/.npm - key: npm-${{ hashFiles('package-lock.json') }} - restore-keys: npm- - - - name: Install node module - run: | - npm install - - - name: Create dir for deploy - run: | - mkdir ./deploy - mkdir ./deploy/controller_ui - mkdir ./deploy/z_uno_compiler - mkdir ./deploy/controller_ui/release - mkdir ./deploy/z_uno_compiler/release - - - name: Build controller_ui - run: | - npm run build - mv ./build/* ./deploy/controller_ui/release - - - name: Build z-uno-compiler - run: | - npm run build_zuno - mv ./build/* ./deploy/z_uno_compiler/release - - - name: Deploy - uses: peaceiris/actions-gh-pages@v4 - with: - github_token: ${{secrets.GITHUB_TOKEN}} - publish_dir: ./deploy - user_name: 'amatilda' - user_email: '' - commit_message: 'Auto-generated commit' - publish_branch: 'gh-pages' \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 41d9f3d..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -build -package-lock.json \ No newline at end of file diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/.vscode/SerialAPIWebTools.code-workspace b/.vscode/SerialAPIWebTools.code-workspace deleted file mode 100644 index a148635..0000000 --- a/.vscode/SerialAPIWebTools.code-workspace +++ /dev/null @@ -1,13 +0,0 @@ -{ - "folders": [ - { - "path": "..\\./" - } - ], - "settings": { - "files.autoSave": "onFocusChange", - "editor.insertSpaces": false, - "editor.tabSize": 4, - "editor.renderWhitespace": "all" - } -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 9abf402..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "msedge", - "request": "launch", - "name": "controller_ui", - "file": "./example/controller_ui.html" - }, - { - "type": "msedge", - "request": "launch", - "name": "z-uno-compiler", - "file": "./example/z-uno-compiler.html" - }, - { - "type": "node", - "request": "launch", - "name": "webpack", - "program": "${workspaceRoot}/node_modules/webpack/bin/webpack.js", - "args": ["--mode=development"] - }, - { - "type": "node", - "request": "launch", - "name": "gulp", - "program": "${workspaceRoot}/node_modules/gulp/bin/gulp.js", - "args": ["build"] - } - ] -} \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index e2ffe78..0000000 --- a/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Z-Wave.Me Serial API Web Tools - -This set of web-based tools allows to configure Z-Wave.Me hardware such as [Z-Station](https://z-wave.me/products/z-station/), [RaZberry 7 Pro](https://z-wave.me/products/razberry/), [Mini PCI-Express](https://z-wave.me/products/mpcie/) and [Z-Uno](https://z-uno.z-wave.me/): -- Change Z-Wave frequency -- Set TX power -- Add more features such as [Zniffer](https://z-wave.me/products/zniffer/) -- Upgrade firmware -- Switch from Z-Uno to Controller firmware and back -- Migrate from old controller -- Reset to factory default - -## Usage - -Open https://z-wave.me/support/controller-tools/ and press the Start button. - -## Migration from old Z-Wave controller - -This tool allows to migrate your network from an old Z-Wave controller such as Fibaro HomeCenter 2, Nexia, SmartThings, Vera, Wink, Zipato to any of the Z-Wave.Me hardware listed above without repairing of all devices. - -For this start the Migration process and follow instructions. - -## Building locally - - npm i - init - npm run dev - development - npm run build - production diff --git a/changelog.md b/changelog.md deleted file mode 100644 index aeb568e..0000000 --- a/changelog.md +++ /dev/null @@ -1,52 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. - - - -## Version 00.01.00 -- *Release date:* --- -- *Status:* in development -- *Commit:* --- - -##### Fixes: -* Fixed sending commands - via receiving asynchronous messages and added more attempts to send when receiving CAN. - -##### Improvements: -* Optimized timeouts for reading from the com port. -* Optimized display of security keys. -* The application version is now stored only in 'package.json'. -* Added branch for beta. -* Added the ability to restart some steps in the migration. -* During migration, the slave's dsk is now completely output. -* During migration, the inclusion/exclusion method was changed, now after 10 seconds during the timeout, wide inclusion/exclusion starts. -* For beta, added sapi output to log. -* To compile the sketch, support for EU_LR was added and ported to the common sapi library. -* Additional log output has been added for the beta version. -* For updating ZUNO, an additional attempt to write data has been added. -* Updated zuno detection method to support new mac axis curvature -* Fixed uuid comparison when validating the received license. -* Fixed output of hex strings, and in particular incorrect display of chip UUID, which occurred due to truncation of zeros. - -## Version 00.00.11 -- *Release date:* 21.08.2024 -- *Status:* release -- *Commit:* be61aa8a9d6c53f9eee790d0bc1cd8876a1b1875 - -##### Improvements: -1. The firmware loading indicator on the chip has been reduced from three integers to two. -2. Optimized display of links in the log. -3. For the slave, a button for copying dsk to the clipboard has been added. -4. Aligned action buttons. -5. Now he doesn’t demand all the keys, but asks about this one. - -##### Fixes: -1. Fixed an error that occurred when an open COM port disappeared and resulted in the inability to close this utility. -2. Fixed constants names. - - -## Version 00.00.10 -- *Release date:* 21.08.2024 -- *Status:* release -- *Commit:* c25a0137817ad2e81a21d49bacdfecd362f41a2c - -1. Public release \ No newline at end of file diff --git a/controller_ui.html b/controller_ui.html new file mode 100644 index 0000000..6f7cc88 --- /dev/null +++ b/controller_ui.html @@ -0,0 +1,8 @@ + + + + diff --git a/controller_ui.js b/controller_ui.js new file mode 100644 index 0000000..180a613 --- /dev/null +++ b/controller_ui.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ControllerUiLib=e():t.ControllerUiLib=e()}(self,(()=>(()=>{var t={836:function(t){!function(){"use strict";function e(t){return parseInt(t)===t}function _(t){if(!e(t.length))return!1;for(var _=0;_255)return!1;return!0}function i(t,i){if(t.buffer&&"Uint8Array"===t.name)return i&&(t=t.slice?t.slice():Array.prototype.slice.call(t)),t;if(Array.isArray(t)){if(!_(t))throw new Error("Array contains invalid value: "+t);return new Uint8Array(t)}if(e(t.length)&&_(t))return new Uint8Array(t);throw new Error("unsupported array-like object")}function n(t){return new Uint8Array(t)}function o(t,e,_,i,n){null==i&&null==n||(t=t.slice?t.slice(i,n):Array.prototype.slice.call(t,i,n)),e.set(t,_)}var s,r={toBytes:function(t){var e=[],_=0;for(t=encodeURI(t);_191&&i<224?(e.push(String.fromCharCode((31&i)<<6|63&t[_+1])),_+=2):(e.push(String.fromCharCode((15&i)<<12|(63&t[_+1])<<6|63&t[_+2])),_+=3)}return e.join("")}},a=(s="0123456789abcdef",{toBytes:function(t){for(var e=[],_=0;_>4]+s[15&i])}return e.join("")}}),l={16:10,24:12,32:14},E=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],T=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],d=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],u=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],c=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],C=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],I=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],N=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],A=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],S=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],h=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],L=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],R=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],O=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],U=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function g(t){for(var e=[],_=0;_>2,this._Ke[_][e%4]=o[e],this._Kd[t-_][e%4]=o[e];for(var s,r=0,a=n;a>16&255]<<24^T[s>>8&255]<<16^T[255&s]<<8^T[s>>24&255]^E[r]<<24,r+=1,8!=n)for(e=1;e>8&255]<<8^T[s>>16&255]<<16^T[s>>24&255]<<24;for(e=n/2+1;e>2,u=a%4,this._Ke[d][u]=o[e],this._Kd[t-d][u]=o[e++],a++}for(var d=1;d>24&255]^R[s>>16&255]^O[s>>8&255]^U[255&s]},D.prototype.encrypt=function(t){if(16!=t.length)throw new Error("invalid plaintext size (must be 16 bytes)");for(var e=this._Ke.length-1,_=[0,0,0,0],i=g(t),o=0;o<4;o++)i[o]^=this._Ke[0][o];for(var s=1;s>24&255]^c[i[(o+1)%4]>>16&255]^C[i[(o+2)%4]>>8&255]^I[255&i[(o+3)%4]]^this._Ke[s][o];i=_.slice()}var r,a=n(16);for(o=0;o<4;o++)r=this._Ke[e][o],a[4*o]=255&(T[i[o]>>24&255]^r>>24),a[4*o+1]=255&(T[i[(o+1)%4]>>16&255]^r>>16),a[4*o+2]=255&(T[i[(o+2)%4]>>8&255]^r>>8),a[4*o+3]=255&(T[255&i[(o+3)%4]]^r);return a},D.prototype.decrypt=function(t){if(16!=t.length)throw new Error("invalid ciphertext size (must be 16 bytes)");for(var e=this._Kd.length-1,_=[0,0,0,0],i=g(t),o=0;o<4;o++)i[o]^=this._Kd[0][o];for(var s=1;s>24&255]^A[i[(o+3)%4]>>16&255]^S[i[(o+2)%4]>>8&255]^h[255&i[(o+1)%4]]^this._Kd[s][o];i=_.slice()}var r,a=n(16);for(o=0;o<4;o++)r=this._Kd[e][o],a[4*o]=255&(d[i[o]>>24&255]^r>>24),a[4*o+1]=255&(d[i[(o+3)%4]>>16&255]^r>>16),a[4*o+2]=255&(d[i[(o+2)%4]>>8&255]^r>>8),a[4*o+3]=255&(d[255&i[(o+1)%4]]^r);return a};var p=function(t){if(!(this instanceof p))throw Error("AES must be instanitated with `new`");this.description="Electronic Code Block",this.name="ecb",this._aes=new D(t)};p.prototype.encrypt=function(t){if((t=i(t)).length%16!=0)throw new Error("invalid plaintext size (must be multiple of 16 bytes)");for(var e=n(t.length),_=n(16),s=0;sNumber.MAX_SAFE_INTEGER)throw new Error("integer value out of safe range");for(var e=15;e>=0;--e)this._counter[e]=t%256,t=parseInt(t/256)},P.prototype.setBytes=function(t){if(16!=(t=i(t,!0)).length)throw new Error("invalid counter bytes size (must be 16 bytes)");this._counter=t},P.prototype.increment=function(){for(var t=15;t>=0;t--){if(255!==this._counter[t]){this._counter[t]++;break}this._counter[t]=0}};var v=function(t,e){if(!(this instanceof v))throw Error("AES must be instanitated with `new`");this.description="Counter",this.name="ctr",e instanceof P||(e=new P(e)),this._counter=e,this._remainingCounter=null,this._remainingCounterIndex=16,this._aes=new D(t)};v.prototype.encrypt=function(t){for(var e=i(t,!0),_=0;_16)throw new Error("PKCS#7 padding byte out of range");for(var _=t.length-e,s=0;s{"use strict";_.r(e)},783:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiClass=void 0,_(594);const n=_(750),o=_(186),s=_(598),r=_(385),a=_(926),l=_(780),E=_(537),T=_(631),d=_(470),u=_(139),c=_(315),C=_(408),I=_(148),N=_(782),A=_(963);e.ControllerUiClass=class{_get_all_array_type(){let t;switch(this.detect_type){case A.SapiClassDetectType.RAZBERRY:t=this.controller;break;case A.SapiClassDetectType.ZUNO:t=this.slave;break;default:t=[]}return t}_clear(){return i(this,void 0,void 0,(function*(){let t;const e=this._get_all_array_type();for(t=0;t{navigator.clipboard.writeText(this.log.getLog())}),this.locale.getLocale(o.ControllerUiLangClassId.BUTTON_COPY_TEXT),this.locale.getLocale(o.ControllerUiLangClassId.BUTTON_COPY_TITLE)),this._constructor_button_create(t,(()=>i(this,void 0,void 0,(function*(){let t;const e=this._get_all_array_type();for(t=0;ti(this,void 0,void 0,(function*(){yield this._begin(t)}));this.detection=new T.DetectionUiSectionClass(this.el_section,this.locale,this.sapi,this.log,_),this.controller.push(new r.ControllerUiSectionInfoClass(this.el_section,this.locale,this.razberry,this.log,_)),this.controller.push(new a.ControllerUiSectionLicenseClass(this.el_section,this.locale,this.razberry,this.log)),this.controller.push(new l.ControllerUiSectionUpdateClass(this.el_section,this.locale,this.razberry,this.log,_)),this.controller.push(new E.ControllerUiSectionMigrationClass(this.el_section,this.locale,this.razberry,this.log,(()=>i(this,void 0,void 0,(function*(){yield this._clear()}))),this.sapi,this.zuno)),this.slave.push(new d.SlaveUiSectionInfoClass(this.el_section,this.locale,this.zuno,this.log,_)),this.slave.push(new u.SlaveUiSectionLicenseClass(this.el_section,this.locale,this.zuno,this.log,_)),this.slave.push(new c.SlaveUiSectionUpdateClass(this.el_section,this.locale,this.zuno,this.log,_)),t.appendChild(this.el_modal),this._start()}}},851:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HardwareChipClass=void 0;class _{constructor(){}}e.HardwareChipClass=_,_.FAMILY_ZGM13=0,_.CHIP_ZGM130S037HGN=1,_.CHIP_ZGM130S037HGN1=2,_.FAMILY_EFR32MG21=1,_.CHIP_EFR32MG21A010F1024IM32=1,_.CHIP_EFR32MG21A010F512IM32=2,_.CHIP_EFR32MG21A010F768IM32=3,_.CHIP_EFR32MG21A020F1024IM32=4,_.CHIP_EFR32MG21A020F512IM32=5,_.CHIP_EFR32MG21A020F768IM32=6,_.CHIP_EFR32MG21B010F1024IM32=7,_.CHIP_EFR32MG21B010F512IM32=8,_.CHIP_EFR32MG21B010F768IM32=9,_.CHIP_EFR32MG21B020F1024IM32=10,_.CHIP_EFR32MG21B020F512IM32=11,_.CHIP_EFR32MG21B020F768IM32=12,_.FAMILY_ZGM23=2,_.CHIP_ZGM230SA27HGN=1,_.CHIP_ZGM230SA27HNN=2,_.CHIP_ZGM230SB27HGN=3,_.CHIP_ZGM230SB27HNN=4,_.FAMILY_MGM21=3,_.CHIP_MGM210L022JIF=1,_.CHIP_MGM210L022JNF=2,_.CHIP_MGM210LA22JIF=3,_.CHIP_MGM210LA22JNF=4,_.CHIP_MGM210P022JIA=5,_.CHIP_MGM210P032JIA=6,_.CHIP_MGM210PA22JIA=7,_.CHIP_MGM210PA32JIA=8,_.CHIP_MGM210PB22JIA=9,_.CHIP_MGM210PB32JIA=10,_.CHIP_MGM211LA02JNF=11,_.FAMILY_EFR32ZG23=4,_.CHIP_EFR32ZG23A010F512GM40=1,_.CHIP_EFR32ZG23A010F512GM48=2,_.CHIP_EFR32ZG23A020F512GM40=3,_.CHIP_EFR32ZG23A020F512GM48=4,_.CHIP_EFR32ZG23B010F512IM40=5,_.CHIP_EFR32ZG23B010F512IM48=6,_.CHIP_EFR32ZG23B011F512IM40=7,_.CHIP_EFR32ZG23B020F512IM40=8,_.CHIP_EFR32ZG23B020F512IM48=9,_.CHIP_EFR32ZG23B021F512IM40=10,_.FAMILY_EFR32MG24=5,_.CHIP_EFR32MG24A010F1024IM40=1,_.CHIP_EFR32MG24A010F1024IM48=2,_.CHIP_EFR32MG24A010F1536GM40=3,_.CHIP_EFR32MG24A010F1536GM48=4,_.CHIP_EFR32MG24A010F1536IM40=5,_.CHIP_EFR32MG24A010F1536IM48=6,_.CHIP_EFR32MG24A010F768IM40=7,_.CHIP_EFR32MG24A010F768IM48=8,_.CHIP_EFR32MG24A020F1024IM40=9,_.CHIP_EFR32MG24A020F1024IM48=10,_.CHIP_EFR32MG24A020F1536GM40=11,_.CHIP_EFR32MG24A020F1536GM48=12,_.CHIP_EFR32MG24A020F1536IM40=13,_.CHIP_EFR32MG24A020F1536IM48=14,_.CHIP_EFR32MG24A020F768IM40=15,_.CHIP_EFR32MG24A021F1024IM40=16,_.CHIP_EFR32MG24A110F1024IM48=17,_.CHIP_EFR32MG24A110F1536GM48=18,_.CHIP_EFR32MG24A111F1536GM48=19,_.CHIP_EFR32MG24A120F1536GM48=20,_.CHIP_EFR32MG24A121F1536GM48=21,_.CHIP_EFR32MG24A410F1536IM40=22,_.CHIP_EFR32MG24A410F1536IM48=23,_.CHIP_EFR32MG24A420F1536IM40=24,_.CHIP_EFR32MG24A420F1536IM48=25,_.CHIP_EFR32MG24A610F1536IM40=26,_.CHIP_EFR32MG24A620F1536IM40=27,_.CHIP_EFR32MG24B010F1024IM48=28,_.CHIP_EFR32MG24B010F1536IM40=29,_.CHIP_EFR32MG24B010F1536IM48=30,_.CHIP_EFR32MG24B020F1024IM48=31,_.CHIP_EFR32MG24B020F1536IM40=32,_.CHIP_EFR32MG24B020F1536IM48=33,_.CHIP_EFR32MG24B110F1536GM48=34,_.CHIP_EFR32MG24B110F1536IM48=35,_.CHIP_EFR32MG24B120F1536IM48=36,_.CHIP_EFR32MG24B210F1536IM40=37,_.CHIP_EFR32MG24B210F1536IM48=38,_.CHIP_EFR32MG24B220F1536IM48=39,_.CHIP_EFR32MG24B310F1536IM48=40,_.CHIP_EFR32MG24B610F1536IM40=41},598:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiLangClass=void 0;const i=_(306);e.ControllerUiLangClass=class{getLocale(t){return 1==Object.hasOwn(this.locale,t)?this.locale[t]:""}constructor(){this.locale=i.controller_lang_en}}},186:(t,e)=>{"use strict";var _;Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiLangClassId=void 0,function(t){t[t.MESSAGE_PORT_NOT_SELECT=0]="MESSAGE_PORT_NOT_SELECT",t[t.MESSAGE_NOT_SUPPORT_BROWSER=1]="MESSAGE_NOT_SUPPORT_BROWSER",t[t.MESSAGE_PORT_USE=2]="MESSAGE_PORT_USE",t[t.MESSAGE_CONNECT=3]="MESSAGE_CONNECT",t[t.MESSAGE_READ_CAPABILITIES=4]="MESSAGE_READ_CAPABILITIES",t[t.MESSAGE_READ_REGION=5]="MESSAGE_READ_REGION",t[t.MESSAGE_READ_POWER=6]="MESSAGE_READ_POWER",t[t.MESSAGE_READ_LICENSE=7]="MESSAGE_READ_LICENSE",t[t.MESSAGE_SET_LICENSE=8]="MESSAGE_SET_LICENSE",t[t.MESSAGE_READ_BOARD_INFO=9]="MESSAGE_READ_BOARD_INFO",t[t.MESSAGE_SET_REGION=10]="MESSAGE_SET_REGION",t[t.MESSAGE_SET_POWER=11]="MESSAGE_SET_POWER",t[t.MESSAGE_SET_DEFAULT=12]="MESSAGE_SET_DEFAULT",t[t.MESSAGE_PLEASE_WAIT=13]="MESSAGE_PLEASE_WAIT",t[t.MESSAGE_UPDATE_DOWNLOAD_INFO=14]="MESSAGE_UPDATE_DOWNLOAD_INFO",t[t.MESSAGE_UPDATE_DOWNLOAD_FILE=15]="MESSAGE_UPDATE_DOWNLOAD_FILE",t[t.MESSAGE_UPDATE_START_FIRMWARE=16]="MESSAGE_UPDATE_START_FIRMWARE",t[t.MESSAGE_UPDATE_START_BOOTLOADER=17]="MESSAGE_UPDATE_START_BOOTLOADER",t[t.TABLE_NAME_SERIAL_API_VERSION=18]="TABLE_NAME_SERIAL_API_VERSION",t[t.TABLE_NAME_SERIAL_API_VERSION_TITLE=19]="TABLE_NAME_SERIAL_API_VERSION_TITLE",t[t.TABLE_NAME_VENDOR=20]="TABLE_NAME_VENDOR",t[t.TABLE_NAME_VENDOR_TITLE=21]="TABLE_NAME_VENDOR_TITLE",t[t.TABLE_NAME_VENDOR_ID=22]="TABLE_NAME_VENDOR_ID",t[t.TABLE_NAME_VENDOR_ID_TITLE=23]="TABLE_NAME_VENDOR_ID_TITLE",t[t.TABLE_NAME_REGION=24]="TABLE_NAME_REGION",t[t.TABLE_NAME_REGION_TITLE=25]="TABLE_NAME_REGION_TITLE",t[t.TABLE_NAME_REGION_SELECT_TITLE=26]="TABLE_NAME_REGION_SELECT_TITLE",t[t.TABLE_NAME_REGION_BUTTON=27]="TABLE_NAME_REGION_BUTTON",t[t.TABLE_NAME_REGION_BUTTON_TITLE=28]="TABLE_NAME_REGION_BUTTON_TITLE",t[t.TABLE_NAME_RESET_DEFAULT=29]="TABLE_NAME_RESET_DEFAULT",t[t.TABLE_NAME_RESET_DEFAULT_TITLE=30]="TABLE_NAME_RESET_DEFAULT_TITLE",t[t.TABLE_NAME_RESET_DEFAULT_BUTTON=31]="TABLE_NAME_RESET_DEFAULT_BUTTON",t[t.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE=32]="TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE",t[t.TABLE_NAME_POWER=33]="TABLE_NAME_POWER",t[t.TABLE_NAME_POWER_TITLE=34]="TABLE_NAME_POWER_TITLE",t[t.TABLE_NAME_POWER_SELECT_TITLE=35]="TABLE_NAME_POWER_SELECT_TITLE",t[t.TABLE_NAME_POWER_BUTTON=36]="TABLE_NAME_POWER_BUTTON",t[t.TABLE_NAME_POWER_BUTTON_TITLE=37]="TABLE_NAME_POWER_BUTTON_TITLE",t[t.TABLE_NAME_UPDATE_FIRMWARE_BUTTON=38]="TABLE_NAME_UPDATE_FIRMWARE_BUTTON",t[t.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE=39]="TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE",t[t.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON=40]="TABLE_NAME_UPDATE_BOOTLOADER_BUTTON",t[t.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE=41]="TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE",t[t.TABLE_NAME_LICENSE_UUID=42]="TABLE_NAME_LICENSE_UUID",t[t.TABLE_NAME_LICENSE_UUID_TITLE=43]="TABLE_NAME_LICENSE_UUID_TITLE",t[t.TABLE_NAME_LICENSE_MORE_OPTIONS=44]="TABLE_NAME_LICENSE_MORE_OPTIONS",t[t.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE=45]="TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE",t[t.TABLE_NAME_LICENSE_SUBVENDOR_ID=46]="TABLE_NAME_LICENSE_SUBVENDOR_ID",t[t.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE=47]="TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE",t[t.TABLE_NAME_LICENSE_MAX_NODE=48]="TABLE_NAME_LICENSE_MAX_NODE",t[t.TABLE_NAME_LICENSE_MAX_NODE_TITLE=49]="TABLE_NAME_LICENSE_MAX_NODE_TITLE",t[t.TABLE_NAME_LICENSE_SUPPORT=50]="TABLE_NAME_LICENSE_SUPPORT",t[t.TABLE_NAME_LICENSE_SUPPORT_TITLE=51]="TABLE_NAME_LICENSE_SUPPORT_TITLE",t[t.TABLE_NAME_UPDATE_BETA=52]="TABLE_NAME_UPDATE_BETA",t[t.TABLE_NAME_UPDATE_BETA_SELECT_TITLE=53]="TABLE_NAME_UPDATE_BETA_SELECT_TITLE",t[t.TABLE_NAME_UPDATE_BETA_TITLE=54]="TABLE_NAME_UPDATE_BETA_TITLE",t[t.TABLE_NAME_UPDATE_FIRMWARE=55]="TABLE_NAME_UPDATE_FIRMWARE",t[t.TABLE_NAME_UPDATE_FIRMWARE_TITLE=56]="TABLE_NAME_UPDATE_FIRMWARE_TITLE",t[t.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE=57]="TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE",t[t.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE=58]="TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE",t[t.TABLE_NAME_UPDATE_BOOTLOADER=59]="TABLE_NAME_UPDATE_BOOTLOADER",t[t.TABLE_NAME_UPDATE_BOOTLOADER_TITLE=60]="TABLE_NAME_UPDATE_BOOTLOADER_TITLE",t[t.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE=61]="TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE",t[t.TABLE_NAME_UPDATE_DOWNLOAD_INFO=62]="TABLE_NAME_UPDATE_DOWNLOAD_INFO",t[t.TABLE_NAME_UPDATE_DOWNLOAD_FILE=63]="TABLE_NAME_UPDATE_DOWNLOAD_FILE",t[t.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL=64]="TABLE_NAME_UPDATE_WAIT_BUS_SERIAL",t[t.TABLE_NAME_UPDATE_WAIT_UPDATE=65]="TABLE_NAME_UPDATE_WAIT_UPDATE",t[t.TABLE_NAME_DETECTION_SYNC_MANUAL=66]="TABLE_NAME_DETECTION_SYNC_MANUAL",t[t.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE=67]="TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE",t[t.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE=68]="TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE",t[t.LOG_HEADER=69]="LOG_HEADER",t[t.LOG_DONE=70]="LOG_DONE",t[t.LOG_FAILED=71]="LOG_FAILED",t[t.LOG_FAILED_CODE=72]="LOG_FAILED_CODE",t[t.LOG_UNSUPPORTED=73]="LOG_UNSUPPORTED",t[t.LOG_NOT_FIND_ELEMENT=74]="LOG_NOT_FIND_ELEMENT",t[t.LOG_XHR_TIMEOUT=75]="LOG_XHR_TIMEOUT",t[t.LOG_XHR_ERROR=76]="LOG_XHR_ERROR",t[t.LOG_XHR_INVALID_DATA=77]="LOG_XHR_INVALID_DATA",t[t.BUTTON_COPY_TEXT=78]="BUTTON_COPY_TEXT",t[t.BUTTON_COPY_TITLE=79]="BUTTON_COPY_TITLE",t[t.BUTTON_CLOSE_TEXT=80]="BUTTON_CLOSE_TEXT",t[t.BUTTON_CLOSE_TITLE=81]="BUTTON_CLOSE_TITLE",t[t.BUTTON_COPY_DSK=82]="BUTTON_COPY_DSK",t[t.BUTTON_COPY_DSK_TITLE=83]="BUTTON_COPY_DSK_TITLE",t[t.BOARD_INFO_HEADER=84]="BOARD_INFO_HEADER",t[t.LICENSE_INFO_HEADER=85]="LICENSE_INFO_HEADER",t[t.UPDATE_INFO_HEADER=86]="UPDATE_INFO_HEADER",t[t.DEFAULT_RESET_WARNING=87]="DEFAULT_RESET_WARNING",t[t.MIGRATION_INFO_HEADER=88]="MIGRATION_INFO_HEADER",t[t.MIGRATION_ABOUT_HEADER=89]="MIGRATION_ABOUT_HEADER",t[t.MIGRATION_ABOUT_HEADER_TITLE=90]="MIGRATION_ABOUT_HEADER_TITLE",t[t.MIGRATION_ABOUT_HEADER_TEXT_HTML=91]="MIGRATION_ABOUT_HEADER_TEXT_HTML",t[t.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5=92]="MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5",t[t.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT=93]="MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT",t[t.MIGRATION_PROCESS_HEADER=94]="MIGRATION_PROCESS_HEADER",t[t.MIGRATION_PROCESS_HEADER_TITLE=95]="MIGRATION_PROCESS_HEADER_TITLE",t[t.MIGRATION_PROCESS_BUTTON_START=96]="MIGRATION_PROCESS_BUTTON_START",t[t.MIGRATION_PROCESS_BUTTON_START_TITLE=97]="MIGRATION_PROCESS_BUTTON_START_TITLE",t[t.MIGRATION_PROCESS_BUTTON_START_WARNING=98]="MIGRATION_PROCESS_BUTTON_START_WARNING",t[t.MIGRATION_TEST_INCLUDE=99]="MIGRATION_TEST_INCLUDE",t[t.MESSAGE_READ_HOME_ID=100]="MESSAGE_READ_HOME_ID",t[t.MIGRATION_UNKNOWN_ERROR=101]="MIGRATION_UNKNOWN_ERROR",t[t.MIGRATION_GOOD_RESULT=102]="MIGRATION_GOOD_RESULT",t[t.MIGRATION_ACTION_STOP=103]="MIGRATION_ACTION_STOP",t[t.MIGRATION_ACTION_CONTINUE=104]="MIGRATION_ACTION_CONTINUE",t[t.MIGRATION_ACTION_STOP_TITLE=105]="MIGRATION_ACTION_STOP_TITLE",t[t.MIGRATION_ACTION_CONTINUE_TITLE=106]="MIGRATION_ACTION_CONTINUE_TITLE",t[t.MIGRATION_QUESTION_EXCLUDE=107]="MIGRATION_QUESTION_EXCLUDE",t[t.MIGRATION_STOP_RESULT=108]="MIGRATION_STOP_RESULT",t[t.MESSAGE_READ_INIT_DATA=109]="MESSAGE_READ_INIT_DATA",t[t.MESSAGE_START_EXCLUDING=110]="MESSAGE_START_EXCLUDING",t[t.SECONDS=111]="SECONDS",t[t.MIGRATION_WAIT_EXCLUDE_START_MASTER=112]="MIGRATION_WAIT_EXCLUDE_START_MASTER",t[t.MESSAGE_CLEAR_NODE=113]="MESSAGE_CLEAR_NODE",t[t.MESSAGE_START_INCLUDE=114]="MESSAGE_START_INCLUDE",t[t.MIGRATION_QUESTION_INCLUDE=115]="MIGRATION_QUESTION_INCLUDE",t[t.MIGRATION_WAIT_INCLUDE_START_MASTER=116]="MIGRATION_WAIT_INCLUDE_START_MASTER",t[t.MIGRATION_FINALIZE=117]="MIGRATION_FINALIZE",t[t.MESSAGE_SET_HOME_ID=118]="MESSAGE_SET_HOME_ID",t[t.MESSAGE_REMOVE_NODE=119]="MESSAGE_REMOVE_NODE",t[t.MESSAGE_SOFT_RESET=120]="MESSAGE_SOFT_RESET",t[t.MESSAGE_NOP=121]="MESSAGE_NOP",t[t.MESSAGE_PORT_SELECT=122]="MESSAGE_PORT_SELECT",t[t.DETECTION_INFO_HEADER=123]="DETECTION_INFO_HEADER",t[t.DETECTION_PROCESS_HEADER=124]="DETECTION_PROCESS_HEADER",t[t.DETECTION_PROCESS_HEADER_TITLE=125]="DETECTION_PROCESS_HEADER_TITLE",t[t.DETECTION_PROCESS=126]="DETECTION_PROCESS",t[t.DETECTION_PROCESS_STOP=127]="DETECTION_PROCESS_STOP",t[t.DETECTION_PROCESS_CONTINUE=128]="DETECTION_PROCESS_CONTINUE",t[t.DETECTION_PROCESS_STOP_TITLE=129]="DETECTION_PROCESS_STOP_TITLE",t[t.DETECTION_PROCESS_CONTINUE_TITLE=130]="DETECTION_PROCESS_CONTINUE_TITLE",t[t.DETECTION_PROCESS_QUEST_SYNC=131]="DETECTION_PROCESS_QUEST_SYNC",t[t.DETECTION_PROCESS_BUTTON_RE_SYNC=132]="DETECTION_PROCESS_BUTTON_RE_SYNC",t[t.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE=133]="DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE",t[t.SLAVE_MESSAGE_READ_BOARD_INFO=134]="SLAVE_MESSAGE_READ_BOARD_INFO",t[t.TABLE_NAME_VERSION=135]="TABLE_NAME_VERSION",t[t.TABLE_NAME_VERSION_TITLE=136]="TABLE_NAME_VERSION_TITLE",t[t.TABLE_NAME_BUILD_TIME_STAMP=137]="TABLE_NAME_BUILD_TIME_STAMP",t[t.TABLE_NAME_BUILD_TIME_STAMP_TITLE=138]="TABLE_NAME_BUILD_TIME_STAMP_TITLE",t[t.TABLE_NAME_UUID=139]="TABLE_NAME_UUID",t[t.TABLE_NAME_UUID_TITLE=140]="TABLE_NAME_UUID_TITLE",t[t.TABLE_NAME_HOME=141]="TABLE_NAME_HOME",t[t.TABLE_NAME_HOME_TITLE=142]="TABLE_NAME_HOME_TITLE",t[t.TABLE_NAME_NODE=143]="TABLE_NAME_NODE",t[t.TABLE_NAME_NODE_TITLE=144]="TABLE_NAME_NODE_TITLE",t[t.TABLE_NAME_DSK=145]="TABLE_NAME_DSK",t[t.TABLE_NAME_DSK_TITLE=146]="TABLE_NAME_DSK_TITLE",t[t.TABLE_NAME_QR_CODE=147]="TABLE_NAME_QR_CODE",t[t.TABLE_NAME_QR_CODE_TITLE=148]="TABLE_NAME_QR_CODE_TITLE",t[t.SLAVE_MESSAGE_FREEZE_ERROR=149]="SLAVE_MESSAGE_FREEZE_ERROR",t[t.SLAVE_DEFAULT_RESET_WARNING=150]="SLAVE_DEFAULT_RESET_WARNING",t[t.TABLE_NAME_TYPE=151]="TABLE_NAME_TYPE",t[t.TABLE_NAME_TYPE_TITLE=152]="TABLE_NAME_TYPE_TITLE",t[t.TABLE_NAME_TYPE_CONTROLER=153]="TABLE_NAME_TYPE_CONTROLER",t[t.TABLE_NAME_TYPE_SLAVE=154]="TABLE_NAME_TYPE_SLAVE",t[t.ERROR_ARGUMENT_FOR_UPDATE_SELECT=155]="ERROR_ARGUMENT_FOR_UPDATE_SELECT",t[t.ERROR_ARGUMENT_FIND_TYPE=156]="ERROR_ARGUMENT_FIND_TYPE",t[t.TABLE_NAME_INCLUDE_EXCLUDE=157]="TABLE_NAME_INCLUDE_EXCLUDE",t[t.TABLE_NAME_INCLUDE_EXCLUDE_TITLE=158]="TABLE_NAME_INCLUDE_EXCLUDE_TITLE",t[t.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON=159]="TABLE_NAME_INCLUDE_EXCLUDE_BUTTON",t[t.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE=160]="TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE",t[t.INCLUDE_EXCLUDE_WAIT=161]="INCLUDE_EXCLUDE_WAIT",t[t.MESSAGE_ENABLE_NIF_DEFAULT=162]="MESSAGE_ENABLE_NIF_DEFAULT",t[t.MESSAGE_ENABLE_EVENT_FOR_LEARN=163]="MESSAGE_ENABLE_EVENT_FOR_LEARN",t[t.MESSAGE_START_LEARN=164]="MESSAGE_START_LEARN",t[t.MESSAGE_LEARN_INFO_TIMEOUT=165]="MESSAGE_LEARN_INFO_TIMEOUT",t[t.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART=166]="MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART",t[t.MESSAGE_LEARN_INFO_INCLUDE_RESTART=167]="MESSAGE_LEARN_INFO_INCLUDE_RESTART",t[t.MESSAGE_LEARN_INFO_EXCLUDE_RESTART=168]="MESSAGE_LEARN_INFO_EXCLUDE_RESTART",t[t.PROCESS_CONTINUE=169]="PROCESS_CONTINUE",t[t.PROCESS_CONTINUE_TITLE=170]="PROCESS_CONTINUE_TITLE",t[t.PROCESS_STOP=171]="PROCESS_STOP",t[t.PROCESS_STOP_TITLE=172]="PROCESS_STOP_TITLE",t[t.PROCESS_REPEAT=173]="PROCESS_REPEAT",t[t.PROCESS_REPEAT_TITLE=174]="PROCESS_REPEAT_TITLE",t[t.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE=175]="LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE",t[t.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE=176]="LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE",t[t.MIGRATION_NOT_GET_URL_INFO=177]="MIGRATION_NOT_GET_URL_INFO",t[t.MIGRATION_NOT_UPDATE=178]="MIGRATION_NOT_UPDATE",t[t.MIGRATION_LAST_UPDATE_DETECT=179]="MIGRATION_LAST_UPDATE_DETECT",t[t.MIGRATION_FAILED_UPDATE_TYPE=180]="MIGRATION_FAILED_UPDATE_TYPE",t[t.MIGRATION_FAILED_UPDATE_VERSION=181]="MIGRATION_FAILED_UPDATE_VERSION",t[t.MIGRATION_FAILED_CHANGE_REGION=182]="MIGRATION_FAILED_CHANGE_REGION",t[t.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE=183]="MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE",t[t.LEARN_PROCESS_QUEST_EXCLUDE=184]="LEARN_PROCESS_QUEST_EXCLUDE",t[t.LEARN_PROCESS_QUEST_EXCLUDE_TITLE=185]="LEARN_PROCESS_QUEST_EXCLUDE_TITLE",t[t.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE=186]="MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE",t[t.MIGRATION_FAILED_DETECT=187]="MIGRATION_FAILED_DETECT",t[t.MIGRATION_PROCESS_QUEST_INCLUDE=188]="MIGRATION_PROCESS_QUEST_INCLUDE",t[t.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE=189]="MIGRATION_PROCESS_QUEST_INCLUDE_TITLE",t[t.MIGRATION_NOT_SUPPORT_DUMP_KEY=190]="MIGRATION_NOT_SUPPORT_DUMP_KEY",t[t.MESSAGE_READ_S2_KEY=191]="MESSAGE_READ_S2_KEY",t[t.MIGRATION_NOT_AVIABLE_FIRMWARE=192]="MIGRATION_NOT_AVIABLE_FIRMWARE",t[t.MIGRATION_NOT_SUPPORT_LR=193]="MIGRATION_NOT_SUPPORT_LR",t[t.MIGRATION_NOT_SUPPORT_BACKUP=194]="MIGRATION_NOT_SUPPORT_BACKUP",t[t.MIGRATION_FAILED_SEE_LOG=195]="MIGRATION_FAILED_SEE_LOG",t[t.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER=196]="MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER",t[t.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE=197]="MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE",t[t.MIGRATION_SUCESS=198]="MIGRATION_SUCESS",t[t.MIGRATION_QUEST_REPEATER_ALL_KEY=199]="MIGRATION_QUEST_REPEATER_ALL_KEY",t[t.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE=200]="MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE"}(_||(e.ControllerUiLangClassId=_={}))},306:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.controller_lang_en=void 0;const i=_(186),n={[i.ControllerUiLangClassId.MESSAGE_PORT_NOT_SELECT]:"No port selected",[i.ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER]:"Sorry, this feature is supported only on Chrome, Edge and Opera",[i.ControllerUiLangClassId.MESSAGE_PORT_USE]:"Check yours, maybe another application is using it",[i.ControllerUiLangClassId.MESSAGE_CONNECT]:"Connect device",[i.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES]:"Read capabilities the device",[i.ControllerUiLangClassId.MESSAGE_READ_REGION]:"Read region the device",[i.ControllerUiLangClassId.MESSAGE_READ_POWER]:"Read power the device",[i.ControllerUiLangClassId.MESSAGE_READ_LICENSE]:"Read license the device",[i.ControllerUiLangClassId.MESSAGE_SET_LICENSE]:"Set license the device",[i.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO]:"Read board info the device",[i.ControllerUiLangClassId.MESSAGE_SET_REGION]:"Set region the device",[i.ControllerUiLangClassId.MESSAGE_SET_POWER]:"Set power the device",[i.ControllerUiLangClassId.MESSAGE_SET_DEFAULT]:"Set default the device",[i.ControllerUiLangClassId.MESSAGE_PLEASE_WAIT]:"Please wait until the previous operation is completed.",[i.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO]:"Download update info",[i.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE]:"Download update file",[i.ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE]:"Start firmware update",[i.ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER]:"Start bootloader update",[i.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION]:"Serial API Version:",[i.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE]:"It is specific to Z-Wave.Me",[i.ControllerUiLangClassId.TABLE_NAME_VENDOR]:"Vendor:",[i.ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID]:"Vendor ID:",[i.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_REGION]:"Region:",[i.ControllerUiLangClassId.TABLE_NAME_REGION_TITLE]:"Z-Wave frequency",[i.ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE]:"Select region",[i.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON]:"Apply",[i.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE]:"Apply the selected region",[i.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT]:"Reset default:",[i.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE]:"Reset to factory default settings",[i.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON]:"Reset",[i.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_POWER]:"TX power level:",[i.ControllerUiLangClassId.TABLE_NAME_POWER_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE]:"Select the TX power level",[i.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON]:"Apply",[i.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE]:"Apply the selected TX power",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON]:"Update",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON]:"Update",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID]:"UUID:",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE]:"Unique ID of your Z-Wave hardware",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS]:"More options:",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE]:"Additional features available for your hardware",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID]:"Subvendor:",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE]:"Nodes limit:",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT]:"Support:",[i.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA]:"Beta:",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE]:"Firmware:",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE]:"Not updated",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER]:"Bootloader:",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO]:"Download info...",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE]:"Download file...",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL]:"Wait bus serial...",[i.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE]:"Wait update...",[i.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL]:"Sync manual:",[i.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE]:"",[i.ControllerUiLangClassId.LOG_HEADER]:"Log",[i.ControllerUiLangClassId.LOG_DONE]:" done",[i.ControllerUiLangClassId.LOG_FAILED]:" failed",[i.ControllerUiLangClassId.LOG_FAILED_CODE]:" failed: {{code}}",[i.ControllerUiLangClassId.LOG_UNSUPPORTED]:" unsupported",[i.ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT]:"Not find element: {{element}}",[i.ControllerUiLangClassId.LOG_XHR_TIMEOUT]:"
Internet request - timeout {{url}}
",[i.ControllerUiLangClassId.LOG_XHR_ERROR]:"
Internet request - error {{url}}
",[i.ControllerUiLangClassId.LOG_XHR_INVALID_DATA]:"
Internet request - invalid data {{url}}
",[i.ControllerUiLangClassId.BUTTON_COPY_TEXT]:"Copy log",[i.ControllerUiLangClassId.BUTTON_COPY_TITLE]:"Copy the log to clipboard",[i.ControllerUiLangClassId.BUTTON_CLOSE_TEXT]:"Close",[i.ControllerUiLangClassId.BUTTON_CLOSE_TITLE]:"Closes and stops working with the port",[i.ControllerUiLangClassId.BUTTON_COPY_DSK]:"Copy",[i.ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE]:"Copy the dsk to clipboard",[i.ControllerUiLangClassId.BOARD_INFO_HEADER]:"Board Info",[i.ControllerUiLangClassId.LICENSE_INFO_HEADER]:"License Info",[i.ControllerUiLangClassId.UPDATE_INFO_HEADER]:"Update Info",[i.ControllerUiLangClassId.DEFAULT_RESET_WARNING]:"The Controller Reset will delete all included devices from your network without excluding them. You will need to manually exclude and include all of them. Do you really want to do this?",[i.ControllerUiLangClassId.MIGRATION_INFO_HEADER]:"Migration Info",[i.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER]:"About",[i.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML]:"
Porting from your old controllerto your new Z-Wave.Me hardware
",[i.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5]:"
You have an old stickneed a newer one
",[i.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT]:"
Your stick is not supportedmigration works only to Z-Wave.Me hardware
",[i.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER]:"Migration:",[i.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START]:"Start",[i.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING]:"Are you sure you want to start the migration process? - During this process, all data will be lost.\nAlso make sure there are no power issues to avoid problems.",[i.ControllerUiLangClassId.MIGRATION_TEST_INCLUDE]:"Checking whether it is on...",[i.ControllerUiLangClassId.MESSAGE_READ_HOME_ID]:"Read home and node id the controller",[i.ControllerUiLangClassId.MIGRATION_UNKNOWN_ERROR]:"An unexpected error occurred, please try again.",[i.ControllerUiLangClassId.MIGRATION_GOOD_RESULT]:"Migration was successful.",[i.ControllerUiLangClassId.MIGRATION_ACTION_STOP]:"Stop",[i.ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE]:"Continue",[i.ControllerUiLangClassId.MIGRATION_ACTION_STOP_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE]:"You need to excluding first - click when you're ready",[i.ControllerUiLangClassId.MIGRATION_STOP_RESULT]:"Migration was stoping.",[i.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA]:"Read init data the controller",[i.ControllerUiLangClassId.MESSAGE_START_EXCLUDING]:"Start excluding controller",[i.ControllerUiLangClassId.SECONDS]:"s",[i.ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER]:"We are waiting for you to begin the elimination process.",[i.ControllerUiLangClassId.MESSAGE_CLEAR_NODE]:"Start clear node the controller",[i.ControllerUiLangClassId.MESSAGE_START_INCLUDE]:"Start include controller",[i.ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE]:"You need to turn on the controller",[i.ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER]:"We are waiting for you to begin the inclusion process.",[i.ControllerUiLangClassId.MIGRATION_FINALIZE]:"Finishing...",[i.ControllerUiLangClassId.MESSAGE_SET_HOME_ID]:"Set home and node id the controller",[i.ControllerUiLangClassId.MESSAGE_REMOVE_NODE]:"Remove node the controller",[i.ControllerUiLangClassId.MESSAGE_SOFT_RESET]:"Soft reset",[i.ControllerUiLangClassId.MESSAGE_NOP]:"Send nop",[i.ControllerUiLangClassId.MESSAGE_PORT_SELECT]:"Port selection",[i.ControllerUiLangClassId.DETECTION_INFO_HEADER]:"Detection",[i.ControllerUiLangClassId.DETECTION_PROCESS_HEADER]:"Sync:",[i.ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE]:"",[i.ControllerUiLangClassId.DETECTION_PROCESS]:"Sync...",[i.ControllerUiLangClassId.DETECTION_PROCESS_STOP]:"Stop",[i.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE]:"Continue",[i.ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE]:"",[i.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE]:"",[i.ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC]:"Reset your hardware and try again",[i.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC]:"Try to sync again",[i.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE]:"",[i.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO]:"Read hardware information",[i.ControllerUiLangClassId.TABLE_NAME_VERSION]:"Version:",[i.ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP]:"Build date and time:",[i.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_UUID]:"UUID:",[i.ControllerUiLangClassId.TABLE_NAME_UUID_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_HOME]:"Home ID:",[i.ControllerUiLangClassId.TABLE_NAME_HOME_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_NODE]:"Node ID:",[i.ControllerUiLangClassId.TABLE_NAME_NODE_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_DSK]:"DSK:",[i.ControllerUiLangClassId.TABLE_NAME_DSK_TITLE]:"Key used to securely include your device",[i.ControllerUiLangClassId.TABLE_NAME_QR_CODE]:"QR-code:",[i.ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE]:"QR-code used to securely include your device",[i.ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR]:"Failed to pause slave",[i.ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING]:"Do you really want to do this?",[i.ControllerUiLangClassId.TABLE_NAME_TYPE]:"Type:",[i.ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER]:"Controller",[i.ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE]:"Z-Uno / repeater",[i.ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT]:"error arg for update select",[i.ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE]:"error arg find type",[i.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE]:"Include/Exclude:",[i.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE]:"",[i.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON]:"Start",[i.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE]:"",[i.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT]:"Wait...",[i.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT]:"Enable default NIF",[i.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN]:"Enable event for learn mode",[i.ControllerUiLangClassId.MESSAGE_START_LEARN]:"Start learn mode",[i.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT]:"Learn timout",[i.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART]:"Learn timeout. Reloading",[i.ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART]:"Included. Reloading",[i.ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART]:"Excluded. Reloading",[i.ControllerUiLangClassId.PROCESS_CONTINUE]:"Continue",[i.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE]:"",[i.ControllerUiLangClassId.PROCESS_STOP]:"Stop",[i.ControllerUiLangClassId.PROCESS_STOP_TITLE]:"",[i.ControllerUiLangClassId.PROCESS_REPEAT]:"Repeat",[i.ControllerUiLangClassId.PROCESS_REPEAT_TITLE]:"",[i.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE]:"Ready for inclusion/exclusion by you controller",[i.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO]:"Could not get a link to the information needed for migration",[i.ControllerUiLangClassId.MIGRATION_NOT_UPDATE]:"Failed to update",[i.ControllerUiLangClassId.MIGRATION_LAST_UPDATE_DETECT]:"After the update, the firmware could not be detected",[i.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE]:"The type of the updated firmware does not match",[i.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION]:"After the update the version is not what it should be",[i.ControllerUiLangClassId.MIGRATION_FAILED_CHANGE_REGION]:"Failed to change frequency",[i.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE]:"No support for exclusion/inclusion",[i.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE]:"Turn on exclusion mode on you controller",[i.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE]:"Learn completed",[i.ControllerUiLangClassId.MIGRATION_FAILED_DETECT]:"Сould not be detected",[i.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE]:"
Turn on inclusion mode on you controller
When inclusion starts, you have to select all the supported security keys and use the following security code:${dsk}
",[i.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY]:"No support for dump key",[i.ControllerUiLangClassId.MESSAGE_READ_S2_KEY]:"Reading S2 keys",[i.ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE]:"The required firmware is not in the database",[i.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR]:"Long Range is not supported",[i.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP]:"Backup is not supported",[i.ControllerUiLangClassId.MIGRATION_FAILED_SEE_LOG]:"Failed - see log",[i.ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER]:"
The inclusion happeded without the required keys.
Please turn on exclusion mode on you controller
",[i.ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE]:"",[i.ControllerUiLangClassId.MIGRATION_SUCESS]:"Success",[i.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY]:"
These are all the keys that we were able to count, is everything correct or will you try again?
",[i.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE]:""};e.controller_lang_en=n},750:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiLogClass=void 0;const i=_(186);e.ControllerUiLogClass=class{_log(t){this.el_log.innerHTML+=t,this.el_log.scrollTop=this.el_log.scrollHeight}getLog(){let t,e;const _=this.el_log.childNodes;for(t=0,e="";t<_.length;){e=e+_[t].textContent+"\n",t++}return e}info(t){"string"!=typeof t&&(t=this.locale.getLocale(t)),this._log('
'+t+"
")}warning(t){"string"!=typeof t&&(t=this.locale.getLocale(t)),this._log('
'+t+"
")}error(t){"string"!=typeof t&&(t=this.locale.getLocale(t)),this._log('
'+t+"
")}infoStart(t){"string"!=typeof t&&(t=this.locale.getLocale(t)),this.info(t+"...")}infoDone(t){"string"!=typeof t&&(t=this.locale.getLocale(t)),this.info(t+this.locale.getLocale(i.ControllerUiLangClassId.LOG_DONE))}errorFalled(t){"string"!=typeof t&&(t=this.locale.getLocale(t)),this.error(t+this.locale.getLocale(i.ControllerUiLangClassId.LOG_FAILED))}errorFalledCode(t,e){"string"!=typeof t&&(t=this.locale.getLocale(t)),this.error(t+this.locale.getLocale(i.ControllerUiLangClassId.LOG_FAILED_CODE).replace("{{code}}",e.toString()))}errorUnsupport(t){"string"!=typeof t&&(t=this.locale.getLocale(t)),this.error(t+this.locale.getLocale(i.ControllerUiLangClassId.LOG_UNSUPPORTED))}errorNotFindElement(t){this.error(this.locale.getLocale(i.ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT).replace("{{element}}",t))}errorXhrTimeout(t){this.error(this.locale.getLocale(i.ControllerUiLangClassId.LOG_XHR_TIMEOUT).replace("{{url}}",t))}errorXhrError(t){this.error(this.locale.getLocale(i.ControllerUiLangClassId.LOG_XHR_ERROR).replace("{{url}}",t))}errorXhrInvalidData(t){this.error(this.locale.getLocale(i.ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace("{{url}}",t))}constructor(t,e){this.locale=e;const _=document.createElement("section");_.className="ZUnoRazberryModalContentSection_table";const n=document.createElement("h3");n.textContent=this.locale.getLocale(i.ControllerUiLangClassId.LOG_HEADER),_.appendChild(n);const o=document.createElement("section");o.className="ZUnoRazberryModalContentSectionLog_section_txt",_.appendChild(o),this.el_log=o,t.appendChild(_)}}},33:(t,e)=>{"use strict";function _(t,e){let _=t.toString(10);for(;_.lengthsetTimeout(e,t)))},e.checksum=function(t){let e=255,_=0;for(;_=l.length?255:l[_],_+=1,a=128;0!=a;)r=0,s=0,o&a&&(r=1),32768&t&&(s=1),n=r^s,t<<=1,t&=65535,1==n&&(t^=4129),a>>=1;return t},e.costruct_int=function(t,e,_=!0){let i,n,o;i=0,n=0;for(;n=0&&(i+=t[o]),n++;return i>>>=0,i},e.hexToBytes=function(t){let e;if(0==t.length)return;if(1&t.length)return;const _=[];e=0;for(;e>24&255).padStart(2,"0")+"."+String(t>>16&255).padStart(2,"0")+"."+String(t>>8&255).padStart(2,"0")+"."+String(255&t).padStart(2,"0")},e.intToBytearrayLsbMsb=function(t,e=4){let _;const i=new Uint8Array(e);_=0;for(;_>=8,_+=1;return i},e.intToBytearrayMsbLsb=function(t,e=4){let _;const i=new Uint8Array(e);_=0;for(;0!=e;)e--,i[_]=t>>8*e&255,_++;return i},e.versionNumberToStringSlave=function(t){return String(t>>24&255).padStart(2,"0")+"."+String(t>>16&255).padStart(2,"0")+"."+String(65535&t)},e.numberToStringHex=function(t){return(t>>24&255).toString(16).padStart(2,"0")+(t>>16&255).toString(16).padStart(2,"0")+(t>>8&255).toString(16).padStart(2,"0")+(255&t).toString(16).padStart(2,"0")},e.conv2Decimal=function(t,e="-"){let i,n,o;n="",i=0;for(;i=this.capabilities.cmd_mask.length)&&!!(this.capabilities.cmd_mask[(t-t%8)/8]&1<>16&255,t>>8&255,255&t,e>>8&255,255&e])}))}_license_send(t,e){return i(this,void 0,void 0,(function*(){let _;const i=this._set_seq();return _=yield this.sapi.sendCommandUnSz(this.RAZ7_LICENSE_CMD,e.concat([i])),_.status!=r.SapiClassStatus.OK?_.status:_.data.length<1?T.WRONG_LENGTH_CMD:_.data[0]!=this.RAZ7_LICENSE_STATUS_OK?T.WRONG_OUT_STATUS:(_=yield this.sapi.recvIncomingRequest(1e3),_.status!=r.SapiClassStatus.OK?_.status:_.data.length<1?T.WRONG_LENGTH_SEQ:_.data[0]!=i?T.WRONG_SEQ:(t.data=_.data.slice(1,_.data.length),T.OK))}))}_license_decrypt(t,e){const _=new n.ModeOfOperation.ofb(this.raz_key,e).decrypt(t),i=_[_.length-2]|_[_.length-1]<<8;if((0,a.calcSigmaCRC16)(this.RAZ7_LICENSE_CRC,_,0,_.length-2)==i)return Array.from(_)}_license_encrypt(t,e,_){const i=[t].concat(e);for(;i.length>8&255);const s=new n.ModeOfOperation.ofb(this.raz_key,_);return Array.from(s.encrypt(i))}_license_get_nonce(t){return i(this,void 0,void 0,(function*(){const e=yield this._license_send(t,[]);if(e!=T.OK)return e;if(t.data.length!=this.RAZ7_LICENSE_CMD_LEN+this.RAZ7_LICENSE_IV_LEN)return T.WRONG_LENGTH_CALLBACK;const _=this._license_decrypt(t.data.slice(0,0+this.RAZ7_LICENSE_CMD_LEN),t.data.slice(this.RAZ7_LICENSE_CMD_LEN,this.RAZ7_LICENSE_CMD_LEN+this.RAZ7_LICENSE_IV_LEN));return null==_?T.WRONG_CRC:_.length<2+this.RAZ7_LICENSE_NONCE_LEN?T.WRONG_LENGTH_CALLBACK:_[0]!=this.RAZ7_LICENSE_NONCE_SUBCMD||_[1]!=this.RAZ7_LICENSE_STATUS_OK?T.WRONG_OUT_STATUS:(t.data=_.slice(2,2+this.RAZ7_LICENSE_NONCE_LEN),T.OK)}))}_license(t,e,_){return i(this,void 0,void 0,(function*(){let i;if(0==this._test_cmd(this.RAZ7_LICENSE_CMD))return T.UNSUPPORT_CMD;if(0==this.isRazberry7())return T.NOT_RAZBERRY;if(i=yield this._license_get_nonce(_),i!=T.OK)return i;const n=Array.from((0,o.parse)((0,o.v4)())).slice(0,8),s=_.data.concat(n),r=this._license_encrypt(t,e,s);if(i=yield this._license_send(_,r.concat(n)),i!=T.OK)return i;const a=this._license_decrypt(_.data,s);return null==a?T.WRONG_CRC:a.length<2?T.WRONG_LENGTH_CALLBACK:a[0]!=t?T.WRONG_OUT_SUB_CMD:a[1]!=this.RAZ7_LICENSE_STATUS_OK?T.WRONG_OUT_STATUS:(_.data=a.slice(2,a.length),T.OK)}))}_license_decode(t,e){let _,i;if(e.length<32)return;const n=(e=e.slice(0,32))[e.length-2]|e[e.length-1]<<8;if((0,a.calcSigmaCRC16)(this.RAZ7_LICENSE_CRC,e,0,e.length-2)==n)for(t.crc16=n,t.vallid=!0,t.vendor_id=e[0]<<8|e[1],t.max_nodes=e[2],t.count_support=(e[this.RAZ7_COUNT_SUPPORT_OFFSET+1]<<8)+e[this.RAZ7_COUNT_SUPPORT_OFFSET],_=0;_=1837&&(_=!0)}this.region=new s.SapiRegionClass(e,_)}else this.region=new s.SapiRegionClass}))}_node_to_bytes(t){return this.node_base==r.SapiClassNodeIdBaseType.TYPE_16_BIT?(0,a.intToBytearrayMsbLsb)(t,2):(0,a.intToBytearrayMsbLsb)(t,1)}_load_file(t,e,_){return i(this,void 0,void 0,(function*(){let i,n,o;for(i=this.getQuantumSize(),o=0,n=0;ne.length&&(i=e.length-n),o=100*n/e.length,null!=_&&_(o);const s=yield this.nvmWrite(t,e.subarray(n,n+i));if(s!=T.OK)return s;n+=i,t+=i}return null!=_&&o<100&&_(100),T.OK}))}_isRazberry(){return this.capabilities.status==T.OK&&(277==this.capabilities.VendorID||327==this.capabilities.VendorID)}_learn_mode(t){return i(this,void 0,void 0,(function*(){const e={status:T.OK,seq:0};if(0==this._test_cmd(r.SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE))return e.status=T.UNSUPPORT_CMD,e;const _=this._set_seq(),i=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE,[t,_]);return i.status!=r.SapiClassStatus.OK?(e.status=i.status,e):1!=i.data.length?(e.status=T.WRONG_LENGTH_CALLBACK_STATUS,e):1!=i.data[0]?(e.status=T.WRONG_CALLBACK_STATUS,e):(e.seq=_,e)}))}getPower(){return i(this,void 0,void 0,(function*(){const t={status:T.OK,power_raw:0,step:1,min:1,max:247};if(0==this.isRazberry7())return t.status=T.NOT_RAZBERRY,t;const e=yield this._serial_api_setup(r.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET,[]);return e.status!=T.OK?(t.status=e.status,t):e.data.length<2?(t.status=T.WRONG_LENGTH_CMD,t):0!=e.data[1]?(t.status=T.NOT_RAZBERRY,t):(t.power_raw=e.data[0],t)}))}setPower(t){return i(this,void 0,void 0,(function*(){if(0==this.isRazberry7())return T.NOT_RAZBERRY;const e=yield this._serial_api_setup(r.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET,[t,0]);return e.status!=T.OK?e.status:e.data.length<1?T.WRONG_LENGTH_CMD:0==e.data[1]?T.INVALID_SET:T.OK}))}isLr(t){return this.region.isLr(t)}isLicenseSupportBackup(){return this.license.status==T.OK&&(null!=this.license.flags[this.LICENSE_KEY_BACKUP]&&1==this.license.flags[this.LICENSE_KEY_BACKUP].active)}getRegion(){return i(this,void 0,void 0,(function*(){let t;const e={status:T.OK,region:"",region_array:this.region.getListRegion()};if(1==this.isRazberry7()){const _=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_PROPRIETARY_2,[255]);if(_.status!=r.SapiClassStatus.OK)return e.status=_.status,e;if(_.data.length<1)return e.status=T.WRONG_LENGTH_CMD,e;if(t=this.region.getNameRegionCustom(_.data[0]),null==t)return e.status=T.WRONG_IN_DATA,e;e.region=t}else{const _=yield this._serial_api_setup(r.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_GET,[]);if(_.status!=T.OK)return e.status=_.status,e;if(_.data.length<1)return e.status=T.WRONG_LENGTH_CMD,e;if(t=this.region.getNameRegion(_.data[0]),null==t)return e.status=T.WRONG_IN_DATA,e;e.region=t}return e}))}setRegion(t){return i(this,void 0,void 0,(function*(){if(1==this.isRazberry7()){const e=this.region.getIdRegionCustom(t);if(null==e)return T.INVALID_ARG;const _=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_PROPRIETARY_2,[e]);if(_.status!=r.SapiClassStatus.OK)return _.status;const i=yield this.sapi.recvIncomingRequest(1e3);return i.status!=r.SapiClassStatus.OK?i.status:i.cmd!=r.SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED?T.NOT_SET:(yield this._begin(!1),T.OK)}if(0==this._test_cmd(r.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET))return T.UNSUPPORT_CMD;const e=this.region.getIdRegion(t);if(null==e)return T.INVALID_ARG;const _=yield this._serial_api_setup(r.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_SET,[e]);return _.status!=T.OK?_.status:_.data.length<1?T.WRONG_LENGTH_CMD:0==_.data[0]?T.NOT_SET:this.softReset()}))}softReset(){return i(this,arguments,void 0,(function*(t=3e3){const e=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET,[],3,t,r.SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED);return e.status!=r.SapiClassStatus.OK?e.status:(yield this._begin(!1),T.OK)}))}setDefault(){return i(this,void 0,void 0,(function*(){if(0==this._test_cmd(r.SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT))return T.UNSUPPORT_CMD;const t=this._set_seq(),e=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT,[t]);return e.status!=r.SapiClassStatus.OK?e.status:e.data.length<1?T.WRONG_LENGTH_SEQ:e.data[0]!=t?T.WRONG_SEQ:(yield this._begin(!1),T.OK)}))}nvmWrite(t,e){return i(this,void 0,void 0,(function*(){if(0==this._test_cmd(r.SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER))return T.UNSUPPORT_CMD;const _=[t>>16&255,t>>8&255,255&t,e.length>>8&255,255&e.length];if(e.length>this.getQuantumSize())return T.WRONG_SEND_DATA_LENGHT;const i=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER,_.concat(Array.from(e)));return i.status!=r.SapiClassStatus.OK?i.status:i.data.length<1?T.WRONG_LENGTH_CMD:1!=i.data[0]?T.NOT_SET:T.OK}))}updateFirmware(t,e,_){return i(this,void 0,void 0,(function*(){if(0==this.isRazberry7())return T.NOT_RAZBERRY;const i=yield this._load_file(237568,t,e);if(i!=T.OK)return i;const n=yield this.sapi.update(237568,_);return n.status!=r.SapiClassStatus.OK?n.status:T.OK}))}updateBotloader(t,e){return i(this,void 0,void 0,(function*(){if(0==this.isRazberry7())return T.NOT_RAZBERRY;const _=yield this._load_file(237568,t,e);if(_!=T.OK)return _;const i=this._set_seq(),n=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_PROPRIETARY_4,[i]);if(n.status!=r.SapiClassStatus.OK)return n.status;if(n.data.length<1)return T.WRONG_RESPONSE_LENGTH;if(0!=n.data[0])return T.WRONG_RESPONSE_STATUS;const o=yield this.sapi.recvIncomingRequest(1e3);return o.status!=r.SapiClassStatus.OK?o.status:o.data.length<2?T.WRONG_CALLBACK_LENGTH:o.data[0]!=i?T.WRONG_CALLBACK_SEQ:0!=o.data[1]?T.WRONG_CALLBACK_STATUS:T.OK}))}clear_node(){return i(this,void 0,void 0,(function*(){if(0==this._test_cmd(r.SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION))return T.UNSUPPORT_CMD;const t=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION,[128,2,7,0],3,0);return t.status==r.SapiClassStatus.OK||t.status==r.SapiClassStatus.TIMEOUT_RCV?T.OK:t.status}))}include_excluding(){return i(this,void 0,void 0,(function*(){return yield this._learn_mode(u.INCLUSION_EXCLUSION)}))}disabled(){return i(this,void 0,void 0,(function*(){const t=yield this._learn_mode(u.DISABLED);return t.status!=T.OK?t.status:T.OK}))}_waitLearn(t,e){return i(this,void 0,void 0,(function*(){const _=yield this.sapi.recvIncomingRequest(t);return _.status==r.SapiClassStatus.NO_SOF||_.cmd!=r.SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE?T.PROCESS:_.status!=r.SapiClassStatus.OK?_.status:_.data.length<3?T.WRONG_LENGTH_CALLBACK:_.data[0]!=e?T.WRONG_SEQ:6==_.data[1]?T.OK:1==_.data[1]?T.PROCESS:T.LEARN_MODE_FALED}))}waitLearn(t,e){return i(this,void 0,void 0,(function*(){const _=yield this._waitLearn(t,e);return _==T.OK&&(yield this._begin(!1)),_}))}GetInitData(){return i(this,void 0,void 0,(function*(){let t,e;const _={status:T.OK,node_list:[]};if(0==this._test_cmd(r.SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA))return _.status=T.UNSUPPORT_CMD,_;const i=yield this.sapi.sendCommandUnSz(r.SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA,[]);if(i.status!=r.SapiClassStatus.OK)return _.status=i.status,_;if(i.data.length<34)return _.status=T.WRONG_LENGTH_CMD,_;for(t=0;t<29;){for(e=0;e<8;)i.data[3+t]&1<{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SapiRegionClass=void 0;e.SapiRegionClass=class{isLr(t){return 0!=this.region_lr.includes(t)}_getNameRegion(t,e){let _;for(_=0;_{_.releaseLock()}),t);try{e=(yield _.read()).value}catch(t){e=new Uint8Array([])}return clearTimeout(i),_.releaseLock(),e}))}_read(t){return i(this,void 0,void 0,(function*(){let e,_,i,n;for(i=0;i<2;){if(this.queue.length>=t){for(e=[],_=0;_=this.queue.length&&(t=this.queue.length),e=[],_=0;_255){const o=[0,this.REQUEST,t].concat(e);_=[0,i>>8&255,255&i,this.REQUEST,t].concat(e);const s=(0,n.calcSigmaCRC16)(7439,o,0,o.length);return _=[this.SOF].concat(_).concat([s>>8&255,255&s]),0!=(yield this._write(_))}_=[255&i,this.REQUEST,t].concat(e);const o=(0,n.checksum)(_);return _=[this.SOF].concat(_).concat([o]),0!=(yield this._write(_))}))}_sendNack(){return i(this,void 0,void 0,(function*(){return yield this._write([this.NAK])}))}_sendAck(){return i(this,void 0,void 0,(function*(){return yield this._write([this.ACK])}))}_waitSOF(t){return i(this,void 0,void 0,(function*(){const e=Date.now()+t;for(;e>Date.now();){const t=yield this._read(1);if(0!=t.length&&t[0]==this.SOF)return!0}return!1}))}_send_cmd(t,e,_){return i(this,void 0,void 0,(function*(){let i;if(0==this.b_open)return s.PORT_NOT_OPEN;for(;;){if((yield this._recvIncomingRequest(100)).status!=s.OK)break}for(;;){if(0==(yield this._sendData(t,e)))return s.WRITE;if(i=yield this._read(1),0==i.length)return s.NO_ACK;if(i[0]==this.ACK)break;if(!(i[0]==this.CAN&&(yield this._recvIncomingRequest(500),(_-=1)>0))&&!(i[0]==this.NAK&&(_-=1)>0))return s.NO_ACK}return s.OK}))}_request(t){return i(this,void 0,void 0,(function*(){let e;const _=window.navigator;if(null!=this.port)return s.REQUEST_ONE_SHOT;try{const i={filters:t};e=yield _.serial.requestPort(i)}catch(t){return s.REQUEST_NO_SELECT}return this.port=e,s.OK}))}_open(t){return i(this,void 0,void 0,(function*(){if(null==this.port)return s.PORT_NOT_REQUEST;if(1==this.b_open)return s.PORT_NOT_OPEN;try{yield this.port.open({baudRate:t,bufferSize:8192})}catch(t){return s.PORT_USED}return this.b_open=!0,s.OK}))}_close(){return i(this,void 0,void 0,(function*(){return null==this.port?s.PORT_NOT_REQUEST:0==this.b_open?s.PORT_NOT_CLOSE:(yield this.port.close(),this.b_open=!1,s.OK)}))}_recvIncomingRequest_add(t,e){return i(this,void 0,void 0,(function*(){let _;for(_=[];;){const i=yield this._read(e-_.length);if(_=_.concat(i),_.length==e)break;if(Date.now()>=t)return yield this._sendNack(),[]}return _}))}_recvIncomingRequest(t){return i(this,void 0,void 0,(function*(){let e;const _={status:s.OK,crc:0,cmd:0,raw:[],data:[]};if(0==this.b_open)return _.status=s.PORT_NOT_OPEN,_;const i=Date.now()+t;if(0==(yield this._waitSOF(t)))return _.status=s.NO_SOF,_;if(e=yield this._recvIncomingRequest_add(i,1),1!=e.length)return _.status=s.NO_LENGHT,_;const o=e[0];return o<3?(_.status=s.WRONG_LENGHT,_):(e=yield this._recvIncomingRequest_add(i,o),e.length!=o?(_.status=s.INVALID_DATA_LEN,_):(_.crc=(0,n.checksum)([o].concat(e.slice(0,o-1))),_.crc!=e[o-1]?(yield this._sendNack(),_.status=s.INVALID_CRC,_):(yield this._sendAck(),_.raw=[this.SOF,o].concat(e),_.cmd=_.raw[3],_.data=_.raw.slice(4,_.raw.length-1),_)))}))}_sendCommandUnSz_rcv_test(t,e){return t.status==s.OK&&t.cmd==e}_sendCommandUnSz(t,e,_,n,o){return i(this,void 0,void 0,(function*(){const i={status:s.OK,crc:0,cmd:0,raw:[],data:[]};if(i.status=yield this._send_cmd(t,e,_),i.status!=s.OK)return i;const r=Date.now()+n;for(;;){const e=Date.now();if(e>=r)return i.status=s.TIMEOUT_RCV,i;const _=yield this._recvIncomingRequest(r-e);if(null==o&&(o=t),1==this._sendCommandUnSz_rcv_test(_,o))return _}}))}recvIncomingRequest(t){return i(this,void 0,void 0,(function*(){const e={status:s.OK,crc:0,cmd:0,raw:[],data:[]};if(1==this.busy())return e.status=s.PORT_BUSY,e;this.b_busy=!0;const _=yield this._recvIncomingRequest(t);return this.b_busy=!1,_}))}sendCommandUnSz(t,e){return i(this,arguments,void 0,(function*(t,e,_=3,i=2e3,n){const o={status:s.OK,crc:0,cmd:0,raw:[],data:[]};if(1==this.busy())return o.status=s.PORT_BUSY,o;this.b_busy=!0;const r=yield this._sendCommandUnSz(t,e,_,i,n);return this.b_busy=!1,r}))}lock(){this.state_lock=!0}unlock(){this.state_lock=!1}is_busy(){return 1==this.state_lock||this.busy()}busy(){return this.b_busy}static supported(){return"serial"in window.navigator}request(t){return i(this,void 0,void 0,(function*(){if(1==this.busy())return s.SERIAL_BUSY;if(0==E.supported())return s.SERIAL_UN_SUPPORT;this.b_busy=!0;const e=yield this._request(t);return this.b_busy=!1,e}))}close(){return i(this,void 0,void 0,(function*(){if(1==this.busy())return s.SERIAL_BUSY;this.b_busy=!0,yield this._sendCommandUnSz(l.FUNC_ID_SERIAL_API_SOFT_RESET,[],2,500);const t=yield this._close();return this.b_busy=!1,this.detect_type=o.UNKNOWN,this.unlock(),t}))}type(){return this.detect_type}_detect_rcv_freeze_zuno(t){return i(this,void 0,void 0,(function*(){const e=yield this._sendCommandUnSz(l.FUNC_ID_SERIAL_API_SOFT_RESET,[2],2,3e3);e.status==s.OK&&0==e.data[0]?t.type=o.ZUNO:t.status=s.ZUNO_NO_FREEZE}))}_detect_rcv(t,e){return i(this,void 0,void 0,(function*(){if(t.status!=s.OK){const t=yield this._sendCommandUnSz(l.FUNC_ID_SERIAL_API_GET_CAPABILITIES,[],1,300);return t.status==s.OK?t.data.length>=6&&1==t.data[2]&&21==t.data[3]&&2==t.data[4]&&16==t.data[5]?void(yield this._detect_rcv_freeze_zuno(e)):void(e.type=o.RAZBERRY):void(e.status=s.UPDATE_PROCESS)}if(e.status=s.OK,t.cmd==l.FUNC_ID_SERIAL_API_SOFT_RESET)return t.data.length<2?void(e.status=s.ZUNO_START_WRONG_LENG):255!=t.data[0]?void(e.status=s.ZUNO_START_WRONG_FRAME):void(yield this._detect_rcv_freeze_zuno(e));t.cmd!=l.FUNC_ID_SERIAL_API_STARTED?e.status=s.DETECTED_UNC_COMMAND:e.type=o.RAZBERRY}))}_detect_update(t){return i(this,void 0,void 0,(function*(){return t.status!=s.OK?s.UPDATE_PROCESS:t.cmd!=l.FUNC_ID_SERIAL_API_SOFT_RESET?s.DETECTED_UNC_COMMAND:t.data.length<2?s.ZUNO_START_WRONG_LENG:4!=t.data[0]&&1!=t.data[1]?s.ZUNO_START_WRONG_DATA:s.OK}))}_detect(t,e,_){return i(this,void 0,void 0,(function*(){let i,r;if(null==this.port)return void(t.status=s.PORT_NOT_REQUEST);if(1==this.b_open){if(t.status=yield this._close(),t.status!=s.OK)return;yield(0,n.sleep)(this.dtr_timeout)}const a=this.BAUDRATE;for(i=e.length;0!=i;)i--,-1!=this.BAUDRATE.indexOf(e[i])&&(a.splice(a.indexOf(e[i]),1),a.unshift(e[i]));for(i=0;i>16&255,t>>8&255,255&t];yield this._sendCommandUnSz(l.FUNC_ID_SERIAL_API_SOFT_RESET,[4].concat(e),3,100)}))}_update_wait_zuno(t,e){return i(this,void 0,void 0,(function*(){const _=Date.now()+3e4;for(;_>Date.now();){const t=yield this._recvIncomingRequest(1e3);if(e.status=yield this._detect_update(t),e.status!=s.UPDATE_PROCESS)break}if(t==o.RAZBERRY){yield(0,n.sleep)(2e4);const t={status:s.OK,type:o.UNKNOWN,baudrate:0};return yield this._detect(t,[115200],null),e.type=t.type,void(e.status=t.status)}for(;_>Date.now();){const t=yield this._recvIncomingRequest(1e3);if(yield this._detect_rcv(t,e),e.status!=s.UPDATE_PROCESS)return}e.status=s.UPDATE_TIMEOUT}))}_update_wait_razberry(t,e){return i(this,void 0,void 0,(function*(){const _=Date.now()+3e4;if(t==o.RAZBERRY){for(;_>Date.now();){const t=yield this._recvIncomingRequest(1e3);if(yield this._detect_rcv(t,e),e.status!=s.UPDATE_PROCESS)return}return void(e.status=s.UPDATE_TIMEOUT)}yield(0,n.sleep)(2e4);const i={status:s.OK,type:o.UNKNOWN,baudrate:0};yield this._detect(i,[115200],null),e.type=i.type,e.status=i.status}))}_update(t,e,_){return i(this,void 0,void 0,(function*(){switch(this.detect_type){case o.ZUNO:yield this._checkBootImage(t),yield this._update_wait_zuno(e,_);break;case o.RAZBERRY:yield this._sendCommandUnSz(l.FUNC_ID_SERIAL_API_SOFT_RESET,[],3,200),yield this._update_wait_razberry(e,_);break;default:_.status=s.UPDATE_UNK}}))}update(t,e){return i(this,void 0,void 0,(function*(){const _={status:s.OK,type:o.UNKNOWN};return 1==this.busy()?(_.status=s.PORT_BUSY,_):e==o.UNKNOWN?(_.status=s.DETECTED_UNC,_):(this.b_busy=!0,yield this._update(t,e,_),this.detect_type=_.type,this.b_busy=!1,_.status==s.OK&&_.type!=e?(_.status=s.DETECTED_TARGET_TYPE,_):_)}))}_detect_rcv_add(t){return i(this,void 0,void 0,(function*(){const e=Date.now()+3e3;for(;e>Date.now();){const e=yield this._recvIncomingRequest(1e3);if(yield this._detect_rcv(e,t),t.status!=s.UPDATE_PROCESS)return}}))}detect_rcv(){return i(this,void 0,void 0,(function*(){const t={status:s.OK,type:o.UNKNOWN};if(1==this.busy())return t.status=s.PORT_BUSY,t;if(this.detect_type==o.UNKNOWN)return t.status=s.DETECTED_UNC,t;this.b_busy=!0;const e=this.detect_type;return yield this._detect_rcv_add(t),this.detect_type=t.type,this.b_busy=!1,t.type!=e?(t.status=s.DETECTED_TARGET_TYPE,t):t}))}constructor(){this.MAX_SEND_DATA_LENGHT=160,this.SOF=1,this.ACK=6,this.NAK=21,this.CAN=24,this.REQUEST=0,this.RESPONSE=1,this.ADDITIONAL_SIZE=3,this.BAUDRATE=[115200,230400,460800,921600],this.dtr_timeout=250,this.b_busy=!1,this.state_lock=!1,this.b_open=!1,this.port=void 0,this.queue=[],this.detect_type=o.UNKNOWN}}e.SapiClass=E},218:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.controller_vendor_ids=void 0;e.controller_vendor_ids={0:{Name:"Silicon Labs",Webpage:"http://www.silabs.com"},1:{Name:"Advaned Control Solutions",Webpage:"http://www.act-solutions.com"},2:{Name:"Danfoss",Webpage:"http://www.danfoss.com"},4:{Name:"Exhausto",Webpage:"http://www.exhausto.com"},18:{Name:"Tell It Online"},30:{Name:"Express Controls",Webpage:"http://www.expresscontrols.com"},32:{Name:"Universal Electronics",Webpage:"http://www.uie.com"},51:{Name:"Hunter Douglas",Webpage:"http://www.hdl.com"},57:{Name:"Honeywell"},89:{Name:"Hostmann Controls",Webpage:"http://www.horstmann.co.uk"},96:{Name:"Everspring",Webpage:"http://www.everspring.com"},100:{Name:"Duwi",Webpage:"http://www.duewi.de"},102:{Name:"TrickleStar",Webpage:"http://www.tricklestar.com"},107:{Name:"Tricklestar (former Empower Controls Ltd.)",Webpage:"http://www.tricklestar.com"},113:{Name:"LS Control"},119:{Name:"Innovus"},122:{Name:"Merten",Webpage:"http://www.merten.de"},128:{Name:"Vero Duco"},133:{Name:"Fakro",Webpage:"http://www.fakro.com"},134:{Name:"Aeotec",Webpage:"http://www.aeotec.com"},138:{Name:"BeNeXt",Webpage:"http://benext.nl"},149:{Name:"QEES",Webpage:"http://www.qees.eu"},142:{Name:"Raritan",Webpage:"http://www.raritan.com"},146:{Name:"Martin Rentz",Webpage:"http://www.rentz-gmbh.de"},29:{Name:"Leviton",Webpage:"http://www.leviton.com"},26:{Name:"Cooper Wiring Devices",Webpage:"http://www.cooper.com"},275:{Name:"Evolve"},152:{Name:"RTCA"},293:{Name:"Motion Inc",Webpage:"http://www.cooper.com"},265:{Name:"Vision Security",Webpage:"http://www.visionsecurity.com.tw"},278:{Name:"Chromatic Technologies",Webpage:"http://www.visionsecurity.com.tw"},354:{Name:"Remotec",Webpage:"http://www.remotec.com.hk"},21076:{Name:"Remotec",Webpage:"http://www.remotec.com.hk"},277:{Name:"Z-Wave.Me",Webpage:"http://www.z-wave.me"},271:{Name:"Fibar Group (Nice)",Webpage:"http://www.fibaro.com"},129:{Name:"Siegenia-Aubi",Webpage:"http://www.siegenia-aubi.com"},132:{Name:"FortrezZ",Webpage:"http://www.fortrezz.com"},151:{Name:"Wintop",Webpage:"http://www.wintop.com"},297:{Name:"Yale",Webpage:"http://www.yalelocks.com"},311:{Name:"FollowGood",Webpage:"http://www.follow-good.com"},322:{Name:"Rademacher",Webpage:"http://rademacher.de"},327:{Name:"RaZberry by Z-Wave.Me",Webpage:"http://razpberry.z-wave.me"},328:{Name:"Eurotronic Technology",Webpage:"http://www.eurotronic.org"},140:{Name:"Mi Casa Verde (Vera Control)",Webpage:"http://www.micasaverde.com"},373:{Name:"Devolo",Webpage:"http://www.devolo.com"},340:{Name:"Popp",Webpage:"http://www.popp.eu"},624:{Name:"Ubitech",Webpage:"http://ubitech.hk"},65535:{Name:"_Not defined"},40:{Name:"2B Electronics"},155:{Name:"2gig Technologies Inc."},42:{Name:"3e Technologies"},34:{Name:"A-1 Components"},279:{Name:"Abilia"},663:{Name:"AdMobilize, LLC"},257:{Name:"ADOX, Inc."},364:{Name:"Advanced Optronic Devices Co.,Ltd"},158:{Name:"Adventure Interactive"},136:{Name:"Airvent SAM S.p.A."},148:{Name:"Alarm.com"},294:{Name:"Alertme"},59:{Name:"Allegion"},654:{Name:"Alphanetworks"},560:{Name:"Alphonsus Tech"},671:{Name:"AMADAS Co., LTD "},412:{Name:"Amdocs"},90:{Name:"American Grid, Inc."},811:{Name:"Anchor Tech "},621:{Name:"Antik Technology Ltd."},120:{Name:"anyCOMM Corporation"},324:{Name:'Applied Micro Electronics "AME" BV'},657:{Name:"Arkea"},41:{Name:"Asia Heading"},561:{Name:"ASITEQ"},650:{Name:"Askey Computer Corp."},315:{Name:"AstraLink"},308:{Name:"AT&T"},43:{Name:"Atech"},580:{Name:"Athom BV"},810:{Name:"AUCEAN TECHNOLOGY. INC"},341:{Name:"Avadesign Technology Co., Ltd."},326:{Name:"Axesstel Inc"},24:{Name:"Balboa Instruments"},566:{Name:"Bandi Comm Tech Inc."},516:{Name:"Beijing Sino-American Boyi Software Development Co., Ltd"},593:{Name:"Beijing Universal Energy Huaxia Technology Co.,Ltd"},406:{Name:"Bellatrix Systems, Inc."},813:{Name:"Benetek"},44:{Name:"BeSafer"},331:{Name:"BFT S.p.A."},82:{Name:"Bit7 Inc."},785:{Name:"Blaze Automation"},531:{Name:"BMS Evler LTD"},35:{Name:"Boca Devices"},348:{Name:"Bosch Security Systems, Inc"},312:{Name:"BRK Brands, Inc."},45:{Name:"Broadband Energy Networks Inc."},586:{Name:"BTSTAR(HK) TECHNOLOGY COMPANY LIMITED"},325:{Name:"Buffalo Inc."},400:{Name:"Building 36 Technologies"},38:{Name:"BuLogics"},361:{Name:"Bönig und Kallenbach oHG"},156:{Name:"Cameo Communications Inc."},46:{Name:"Carrier"},11:{Name:"CasaWorks"},579:{Name:"casenio AG"},358:{Name:"CBCC Domotique SAS"},582:{Name:"CentraLite Systems, Inc"},334:{Name:"Check-It Solutions Inc."},800:{Name:"China Security & Fire IOT Sensing CO., LTD "},640:{Name:"Chuango Security Technology Corporation"},130:{Name:"Cisco Consumer Business Group"},398:{Name:"Climax Technology, Ltd."},512:{Name:"Cloud Media"},47:{Name:"Color Kinetics Incorporated"},809:{Name:"COMAP"},777:{Name:"Comfortability"},320:{Name:"Computime"},283:{Name:"Connected Object"},377:{Name:"ConnectHome"},645:{Name:"CONNECTION TECHNOLOGY SYSTEMS "},605:{Name:"Contec intelligent housing "},575:{Name:"Control4 Corporation"},25:{Name:"ControlThink LC"},15:{Name:"ConvergeX Ltd."},125:{Name:"CoolGuard"},121:{Name:"Cooper Lighting"},157:{Name:"Coventive Technologies Inc."},808:{Name:"Cvnet"},20:{Name:"Cyberhouse"},103:{Name:"CyberTAN Technology, Inc."},48:{Name:"Cytech Technology Pre Ltd."},660:{Name:"D-3 Technology Co. Ltd"},396:{Name:"Dawon DNS"},522:{Name:"Decoris Intelligent System Limited"},319:{Name:"Defacontrols BV"},814:{Name:"DEFARO"},49:{Name:"Destiny Networks"},259:{Name:"Diehl AKO"},50:{Name:"Digital 5, Inc."},552:{Name:"DigitalZone"},264:{Name:"D-Link"},295:{Name:"DMP (Digital Monitoring Products)"},375:{Name:"Domino sistemi d.o.o."},526:{Name:"Domitech Products, LLC"},524:{Name:"Dongguan Zhou Da Electronics Co.,Ltd"},381:{Name:"DRACOR Inc."},388:{Name:"Dragon Tech Industrial, Ltd."},547:{Name:"DTV Research Unipessoal, Lda"},626:{Name:"Dune-HD"},795:{Name:"DVACO GROUP"},306:{Name:"DynaQuip Controls"},583:{Name:"EASY SAVER Co., Inc"},380:{Name:"EbV"},363:{Name:"Echostar"},655:{Name:"Eco Automation"},330:{Name:"Ecolink"},343:{Name:"EcoNet Controls"},799:{Name:"Eelectron SpA"},269:{Name:"e-Home AUTOMATION"},619:{Name:"Ei Electronics "},135:{Name:"Eka Systems"},543:{Name:"Elexa Consumer Products Inc."},52:{Name:"El-Gev Electronics LTD"},27:{Name:"ELK Products, Inc."},523:{Name:"Embedded System Design Limited"},53:{Name:"Embedit A/S"},644:{Name:"Empers Tech Co., Ltd."},333:{Name:"Enblink Co. Ltd"},537:{Name:"Enwox Technologies s.r.o."},111:{Name:"Erone"},352:{Name:"Essence Security"},667:{Name:"ESSENTIAL TECHNOLOGIES INC."},54:{Name:"Exceptional Innovations"},159:{Name:"Exigent Sensors"},563:{Name:"eZEX Corporation"},362:{Name:"Fantem"},661:{Name:"fifthplay nv"},397:{Name:"Flextronics"},36:{Name:"Flue Sentinel"},55:{Name:"Foard Systems"},399:{Name:"Focal Point Limited"},519:{Name:"Forest Group Nederland B.V"},285:{Name:"Foxconn"},272:{Name:"Frostdale"},773:{Name:"Future Home AS"},602:{Name:"GES"},555:{Name:"GKB Security Corporation"},394:{Name:"Globalchina-Tech"},345:{Name:"Goap"},118:{Name:"Goggin Research"},104:{Name:"Good Way Technology Co., Ltd"},153:{Name:"GreenWave Reality Inc."},395:{Name:"Grib"},365:{Name:"Guangzhou Ruixiang M&E Co., Ltd"},344:{Name:"GuangZhou Zeewave Information Technology Co., Ltd."},647:{Name:"HAB Home Intelligence, LLC"},781:{Name:"Hampoo"},520:{Name:"HANK Electronics Ltd"},588:{Name:"Hankook Gas Kiki CO.,LTD. "},604:{Name:"Hauppauge"},115:{Name:"Hawking Technologies Inc."},527:{Name:"Herald Datanetics Limited"},23:{Name:"HiTech Automation"},385:{Name:"Holion Electronic Engineering Co., Ltd"},318:{Name:"Holtec Electronics BV"},13:{Name:"Home Automated Living"},154:{Name:"Home Automation Europe"},91:{Name:"Home Automation Inc."},659:{Name:"Home controls"},56:{Name:"Home Director"},112:{Name:"Homemanageables, Inc."},80:{Name:"Homepro"},12:{Name:"HomeSeer Technologies"},629:{Name:"Honest Technology"},573:{Name:"Honest Technology Co., Ltd."},787:{Name:"Hoppe"},664:{Name:"Horus Smart Control"},545:{Name:"HOSEOTELNET"},384:{Name:"Huapin Information Technology Co.,Ltd"},607:{Name:"Huawei Device Co., Ltd. "},587:{Name:"Huawei Technologies Co., Ltd."},124:{Name:"Hunter Douglas"},536:{Name:"iAutomade Pte Ltd"},17:{Name:"iCOM Technology b.v."},262:{Name:"iControl Networks"},357:{Name:"ID-RF"},414:{Name:"iEXERGY GmbH"},796:{Name:"Ilevia srl"},86:{Name:"Impact Technologies and Products"},97:{Name:"Impact Technologies BV"},299:{Name:"Infusion Development"},108:{Name:"Ingersoll Rand (Schlage)"},287:{Name:"Ingersoll Rand (was Ecolink)"},598:{Name:"Inkel Corp."},58:{Name:"Inlon Srl"},321:{Name:"Innoband Technologies, Inc"},798:{Name:"Inovelli"},256:{Name:"Insignia"},6:{Name:"Intel"},28:{Name:"IntelliCon"},114:{Name:"Interactive Electronics Systems (IES)"},5:{Name:"Intermatic"},19:{Name:"Internet Dom"},648:{Name:"INTERSOFT"},632:{Name:"Inventec"},95:{Name:"IQ-Group"},530:{Name:"iRevo"},595:{Name:"iungo.nl B.V."},291:{Name:"IWATSU"},99:{Name:"Jasco Products"},346:{Name:"Jin Tao Bao"},356:{Name:"JSW Pacific Corporation"},532:{Name:"Kaipule Technology Co., Ltd."},145:{Name:"Kamstrup A/S"},106:{Name:"Kellendonk Elektronik"},276:{Name:"Kichler"},313:{Name:"KlickH Pvt Ltd."},609:{Name:"KOOL KONCEPTS"},372:{Name:"Kopera Development Inc."},570:{Name:"KUMHO ELECTRIC, INC"},81:{Name:"Lagotek Corporation"},371:{Name:"Leak Intelligence, LLC"},768:{Name:"LEEDARSON LIGHTING CO., LTD."},391:{Name:"LEVION Technologies GmbH"},21:{Name:"Lexel"},347:{Name:"LG Electronics"},548:{Name:"LifeShield, LLC"},60:{Name:"Lifestyle Networks"},528:{Name:"Light Engine Limited"},790:{Name:"Lite Automation"},378:{Name:"Liveguard Ltd."},314:{Name:"Living Style Enterprises, Ltd."},350:{Name:"Locstar Technology Co., Ltd"},127:{Name:"Logitech"},37:{Name:"Loudwater Technologies, LLC"},606:{Name:"LUXEASY technology company LTD."},98:{Name:"LVI Produkter AB"},402:{Name:"m2m Solution"},405:{Name:"M2M Solution"},110:{Name:"Manodo / KTC"},61:{Name:"Marmitek BV"},62:{Name:"Martec Access Products"},143:{Name:"MB Turn Key Design"},351:{Name:"McoHome Technology Co., Ltd"},546:{Name:"MCT CO., LTD"},39:{Name:"Meedio, LLC"},263:{Name:"MegaChips"},557:{Name:"Mercury Corporation"},568:{Name:"Milanity, Inc."},274:{Name:"MITSUMI"},413:{Name:"MOBILUS MOTOR Spółka z o.o. "},562:{Name:"MODACOM CO., LTD."},141:{Name:"Modstrøm"},14:{Name:"Mohito Networks"},514:{Name:"Monoprice"},126:{Name:"Monster Cable"},63:{Name:"Motorola"},290:{Name:"MSK - Miyakawa Seisakusho"},131:{Name:"MTC Maintronic Germany"},323:{Name:"myStrom"},366:{Name:"Nanjing Easthouse Electrical Co., Ltd."},289:{Name:"Napco Security Technologies, Inc."},109:{Name:"Nefit"},393:{Name:"Ness Corporation Pty Ltd"},307:{Name:"Netgear"},584:{Name:"neusta next GmbH & Co. KG"},515:{Name:"Newland Communication Science Technology Co., Ltd."},616:{Name:"Nexa Trading AB"},376:{Name:"Nexia Home Intelligence"},117:{Name:"NextEnergy"},786:{Name:"NIE Technology Co., Ltd"},389:{Name:"Ningbo Sentek Electronics Co., Ltd"},335:{Name:"Nortek Security & Control LLC "},594:{Name:"North China University of Technology"},150:{Name:"NorthQ"},64:{Name:"Novar Electrical Devices and Systems (EDS)"},525:{Name:"Novateqni HK Ltd"},662:{Name:"OBLO LIVING LLC"},281:{Name:"Omnima Limited"},332:{Name:"OnSite Pro"},65:{Name:"OpenPeak Inc."},637:{Name:"Oregon Automation "},260:{Name:"Panasonic Electric Works Co., Ltd."},794:{Name:"Panasonic ES Shin Dong-A Co., Ltd"},653:{Name:"Panodic Electric (Shenzhen) Limited"},599:{Name:"PARATECH"},370:{Name:"PassivSystems Limited"},802:{Name:"Paxton Access Ltd"},641:{Name:"PC Partner"},317:{Name:"Pella"},581:{Name:"permundo GmbH"},316:{Name:"Philio Technology Corp"},631:{Name:"Pixela Corporation "},270:{Name:"Danalock"},368:{Name:"Powerhouse Dynamics"},116:{Name:"PowerLinx"},22:{Name:"PowerLynx"},66:{Name:"Pragmatic Consulting Inc."},296:{Name:"Prodrive Technologies"},353:{Name:"Promixis, LLC"},93:{Name:"Pulse Technologies (Aspalis)"},298:{Name:"Qolsys"},304:{Name:"Quby"},355:{Name:"Queenlock Ind. Co., Ltd."},788:{Name:"Raonix Co., Ltd."},542:{Name:"Red Bee Co. Ltd"},556:{Name:"Remote Solution"},597:{Name:"Remote Technologies Incorporated"},16:{Name:"Residential Control Systems, Inc. (RCS)"},534:{Name:"RET Nanjing Intelligence System CO.,Ltd"},339:{Name:"Revolv Inc"},571:{Name:"ROC-Connect, Inc."},407:{Name:"RPE Ajax LLC (dbs Secur Ltd)"},101:{Name:"RS Scene Automation"},669:{Name:"Rubetek"},656:{Name:"S1"},572:{Name:"SafeTech Products"},513:{Name:"Samsung Electronics Co., Ltd."},558:{Name:"Samsung SDS"},147:{Name:"San Shih Electrical Enterprise Co., Ltd."},300:{Name:"SANAV"},775:{Name:"SATCO Products, Inc. "},792:{Name:"SBCK Corp. "},31:{Name:"Scientia Technologies, Inc."},666:{Name:"Scout Alarm"},286:{Name:"Secure Wireless"},359:{Name:"SecureNet Technologies"},386:{Name:"Securifi Ltd."},105:{Name:"Seluxit"},67:{Name:"Senmatic A/S"},410:{Name:"Sensative AB"},68:{Name:"Sequoia Technology LTD"},337:{Name:"Sercomm Corp"},779:{Name:"Shandong Smart Life Data System Co .LTD"},533:{Name:"Shangdong Smart Life Data System Co.,Ltd"},574:{Name:"Shanghai Dorlink Intelligent Technologies Co.,Ltd"},517:{Name:"Shanghai Longchuang Eco-energy Systems Co., Ltd"},267:{Name:"Sharp"},538:{Name:"SHENZHEN AOYA INDUSTRY CO. LTD"},646:{Name:"Shenzhen Easyhome Technology Co., Ltd."},540:{Name:"Shenzhen iSurpass Technology Co. ,Ltd"},541:{Name:"Shenzhen Kaadas Intelligent Technology Co., Ltd"},529:{Name:"Shenzhen Liao Wang Tong Da Technology Ltd"},600:{Name:"Shenzhen Neo Electronics Co., Ltd"},592:{Name:"Shenzhen Tripath Digital Audio Equipment Co.,Ltd"},608:{Name:"Shenzhen Heiman Technology Co., Ltd"},812:{Name:"Shenzhen Saykey Technology Co., Ltd "},615:{Name:"SimonTech S.L.U"},69:{Name:"Sine Wireless"},614:{Name:"Siterwell Technology HK Co., LTD "},642:{Name:"Smart Electronic Industrial (Dongguan) Co., Limited"},70:{Name:"Smart Products, Inc."},618:{Name:"SmartAll Inc."},803:{Name:"SmartHome Partner GmbH"},591:{Name:"Smartly AS"},336:{Name:"SmartThings, Inc."},258:{Name:"SMK Manufacturing Inc."},668:{Name:"SoftAtHome"},71:{Name:"Somfy"},628:{Name:"Soosan Hometech"},144:{Name:"Spectrum Brands"},622:{Name:"Springs Window Fashions"},623:{Name:"Sprue Safety Products Ltd"},292:{Name:"Square Connect"},539:{Name:"ST&T Electric Corporation"},601:{Name:"Starkoff"},613:{Name:"StarVedia"},625:{Name:"STEINEL GmbH "},569:{Name:"Stelpro"},535:{Name:"Strattec Advanced Logic,LLC"},360:{Name:"STRATTEC Security Corporation"},261:{Name:"Sumitomo"},651:{Name:"Sunjet Components Corp."},84:{Name:"Superna"},401:{Name:"Swann Communications Pty Ltd"},9:{Name:"Sylvania"},310:{Name:"Systech Corporation"},630:{Name:"Systemair Sverige AB"},565:{Name:"TAEWON Lighting Co., Ltd."},610:{Name:"Taiwan Fu Hsing Industrial Co., Ltd."},612:{Name:"Taiwan iCATCH Inc."},390:{Name:"Team Digital Limited"},137:{Name:"Team Precision PCL"},576:{Name:"Technicolor"},10:{Name:"Techniku"},303:{Name:"Tecom Co., Ltd."},374:{Name:"Telldus Technologies AB"},72:{Name:"Telsey"},382:{Name:"Telular"},92:{Name:"Terra Optima B.V. (tidligere Primair Services)"},268:{Name:"There Corporation"},411:{Name:"HeatIt"},791:{Name:"Think Simple srl"},554:{Name:"TIMEVALVE, Inc."},280:{Name:"TKB Home"},284:{Name:"TKH Group / Eminent"},807:{Name:"TMC Technology Ltd."},793:{Name:"Toledo & Co., Inc."},643:{Name:"TP-Link Technologies Co., Ltd."},139:{Name:"Trane Corporation"},85:{Name:"Tridium"},273:{Name:"Tronico Technology Co. Ltd."},73:{Name:"Twisthink"},338:{Name:"UFairy G.R. Tech"},403:{Name:"Universal Devices, Inc"},387:{Name:"Universe Future"},521:{Name:"UTC Fire and Security Americas Corp"},266:{Name:"VDA"},783:{Name:"Vemmio"},408:{Name:"Venstar Inc."},567:{Name:"Vestel Elektronik Ticaret ve Sanayi A.S."},83:{Name:"Viewsonic"},94:{Name:"ViewSonic Corporation"},7:{Name:"Vimar CRS"},392:{Name:"Vipa-Star"},74:{Name:"Visualize"},88:{Name:"Vitelec"},611:{Name:"Viva Labs AS"},342:{Name:"Vivint"},379:{Name:"Vs-Safety AS"},75:{Name:"Watt Stopper"},8:{Name:"Wayne Dalton"},415:{Name:"Webee Life"},369:{Name:"WeBeHome AB"},282:{Name:"Wenzhou MTLC Electric Appliances Co.,Ltd."},620:{Name:"Westcontrol AS"},87:{Name:"Whirlpool"},635:{Name:"White Rabbit"},329:{Name:"wiDom"},349:{Name:"Willis Electric Co., Ltd."},301:{Name:"Wilshine Holding Co., Ltd"},383:{Name:"Wink Inc."},578:{Name:"Winytechnology"},409:{Name:"Wireless Maingate AB"},76:{Name:"Woodward Labs"},617:{Name:"WOOREE Lighting Co.,Ltd."},3:{Name:"Wr@p"},559:{Name:"WRT Intelligent Technology CO., LTD."},302:{Name:"Wuhan NWD Technology Co., Ltd."},77:{Name:"Xanboo"},590:{Name:"zConnect"},78:{Name:"Zdata, LLC."},367:{Name:"Zhejiang Jiuxing Electric Co Ltd"},305:{Name:"Zipato"},288:{Name:"Zonoff"},634:{Name:"Zooz"},797:{Name:"Z-Wave Alliance"},79:{Name:"Z-Wave Technologia"},789:{Name:"zwaveproducts.com"},589:{Name:"Z-works Inc."},33:{Name:"Zykronix"},309:{Name:"ZyXEL"},816:{Name:"Sunricher"},826:{Name:"HELTUN",Webpage:"heltun.com"}}},782:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.ZunoSapiClassStatus=e.ZunoSapiClass=void 0;const n=_(963),o=_(160),s=_(33),r=_(851);var a,l;!function(t){t[t.ELEARNSTATUS_ASSIGN_COMPLETE=0]="ELEARNSTATUS_ASSIGN_COMPLETE",t[t.ELEARNSTATUS_ASSIGN_NODEID_DONE=1]="ELEARNSTATUS_ASSIGN_NODEID_DONE",t[t.ELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE=2]="ELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE",t[t.ELEARNSTATUS_ASSIGN_INFO_PENDING=3]="ELEARNSTATUS_ASSIGN_INFO_PENDING",t[t.ELEARNSTATUS_ASSIGN_WAITING_FOR_FIND=4]="ELEARNSTATUS_ASSIGN_WAITING_FOR_FIND",t[t.ELEARNSTATUS_SMART_START_IN_PROGRESS=5]="ELEARNSTATUS_SMART_START_IN_PROGRESS",t[t.ELEARNSTATUS_LEARN_IN_PROGRESS=6]="ELEARNSTATUS_LEARN_IN_PROGRESS",t[t.ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT=7]="ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT",t[t.ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED=8]="ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED",t[t.ELEARNSTATUS_PROCESS=-1]="ELEARNSTATUS_PROCESS"}(a||(a={})),function(t){t[t.OK=0]="OK",t[t.NOT_INIT=32]="NOT_INIT",t[t.WRONG_LENGTH_CMD=33]="WRONG_LENGTH_CMD",t[t.WRONG_STATUS=34]="WRONG_STATUS",t[t.WRONG_IN_DATA=35]="WRONG_IN_DATA",t[t.NO_FREEZE=36]="NO_FREEZE",t[t.INVALID_ARG=37]="INVALID_ARG",t[t.TIMEOUT=38]="TIMEOUT",t[t.UN_SUPPORT=39]="UN_SUPPORT",t[t.TIMEOUT_FORCE_RESTART=40]="TIMEOUT_FORCE_RESTART",t[t.LEARN_EXCLUDE=41]="LEARN_EXCLUDE",t[t.LEARN_INCLUDE=42]="LEARN_INCLUDE"}(l||(e.ZunoSapiClassStatus=l={}));e.ZunoSapiClass=class{_get_param_info_default(){return{status:l.NOT_INIT,freq_i:0,raw:[],main_pow:0}}_get_board_info_default(){return{status:l.NOT_INIT,version:0,build_number:0,build_ts:0,hw_rev:0,code_size:0,ram_size:0,dbg_lock:0,custom_code_offset:196608,chip_uuid:new Uint8Array,s2_pub:new Uint8Array,boot_offset:237568,boot_version:0,max_default_power:50,ext_nvm:0,chip:{chip_type:r.HardwareChipClass.CHIP_ZGM130S037HGN1,chip_family:r.HardwareChipClass.FAMILY_ZGM13,keys_hash:2384055380,se_version:0}}}compile_zwave_qrcode(t,e,_){return i(this,void 0,void 0,(function*(){let i,n;n=(0,s.conv2DecimalPadding)(t.s2_keys,3),n+=(0,s.conv2Decimal)(e,""),n=n+"0010"+(0,s.conv2DecimalPadding)(t.device_type,5)+(0,s.conv2DecimalPadding)(t.device_icon,5),n=n+"0220"+(0,s.conv2DecimalPadding)(t.vendor,5)+(0,s.conv2DecimalPadding)(t.product_type,5)+(0,s.conv2DecimalPadding)(t.product_id,5)+(0,s.conv2DecimalPadding)(_,5),i=1,1==t.LR&&(i|=2),n+="0803"+(0,s.conv2DecimalPadding)(i,3),n+="0403005";const o=Uint8Array.from(unescape(encodeURIComponent(n)),(t=>t.charCodeAt(0))).buffer,r=new Uint8Array(yield crypto.subtle.digest("SHA-1",o));return n="9001"+(0,s.conv2DecimalPadding)(r[0]<<8|r[1],5)+n,n}))}_readNVM(t,e){return i(this,void 0,void 0,(function*(){return yield this.sapi.sendCommandUnSz(n.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER,[t>>16&255,t>>8&255,255&t,e>>8&255,255&e])}))}_writeNVM(t,e){return i(this,void 0,void 0,(function*(){const _=e.length,i=[t>>16&255,t>>8&255,255&t,_>>8&255,255&_];return yield this.sapi.sendCommandUnSz(n.SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER,i.concat(e))}))}_get_param_info(){return i(this,void 0,void 0,(function*(){this.param_info=this._get_param_info_default();const t=this.param_info,e=yield this._readNVM(16769024,9);if(e.status!=n.SapiClassStatus.OK)return void(t.status=e.status);const _=e.data;_.length<3?t.status=l.WRONG_LENGTH_CMD:(t.status=l.OK,t.raw=_,t.freq_i=e.data[1],t.main_pow=e.data[2])}))}_get_board_info_add(){return i(this,void 0,void 0,(function*(){let t,e,_,i,r;this.board_info=this._get_board_info_default();const a=this.board_info,E=yield this._readNVM(16776960,1);if(E.status!=n.SapiClassStatus.OK)return void(a.status=E.status);const T=E.data;if(T.length<42)return void(a.status=l.WRONG_LENGTH_CMD);a.status=l.OK;const d=T[0]<<8|T[1];a.build_number=T[2]<<24|T[3]<<16|T[4]<<8|T[5],a.version=d<<16|65535&a.build_number,a.build_ts=T[6]<<24|T[7]<<16|T[8]<<8|T[9],a.hw_rev=T[10]<<8|T[11],a.build_number>1116?(t=1,a.code_size=(0,s.costruct_int)(T.slice(12,15),3,!1)):(t=0,a.code_size=T[12]<<8|T[13]),a.ram_size=T[14+t]<<8|T[15+t],a.chip_uuid=new Uint8Array(T.slice(16+t,16+t+8)),a.s2_pub=new Uint8Array(T.slice(24+t,24+t+16)),a.dbg_lock=T[40+t];if(T.length<46)return;if(a.home_id=(0,s.costruct_int)(T.slice(41+t,41+t+4),4,!1),a.node_id=T[45+t],a.build_number<1669){if(e=90,T.length<46+t+e)return;a.smart_qr=(0,s.toString)(T.slice(46+t,46+t+90))}else{if(e=11,T.length<46+t+e)return;a.zwdata={s2_keys:T[46+t],device_type:(0,s.costruct_int)(T.slice(47+t,47+t+2),2,!1),device_icon:(0,s.costruct_int)(T.slice(49+t,49+t+2),2,!1),vendor:(0,s.costruct_int)(T.slice(51+t,51+t+2),2,!1),product_type:(0,s.costruct_int)(T.slice(53+t,53+t+2),2,!1),product_id:(0,s.costruct_int)(T.slice(55+t,55+t+2),2,!1),version:d,LR:!1},a.smart_qr=yield this.compile_zwave_qrcode(a.zwdata,a.s2_pub,a.zwdata.version)}const u=46+t+e;if(T.length221184&&(a.boot_offset=262144);const c=u+4;if(T.length=51188299,this.region=new o.SapiRegionClass(!0,_),null!=a.zwdata&&this.param_info.status==l.OK)){const t=this.region.getNameRegion(this.param_info.freq_i);null!=t&&1==this.region.isLr(t)&&(a.zwdata.LR=!0,a.smart_qr=yield this.compile_zwave_qrcode(a.zwdata,a.s2_pub,a.zwdata.version))}const I=C+10;if(T.length=512&&(a.boot_offset=10551296+(a.ext_nvm-512<<10));const A=N+2;if(T.lengthe.length&&(i=e.length-o),s=100*o/e.length,null!=_&&_(s);const r=yield this._writeNVM(t,Array.from(e.subarray(o,o+i)));if(r.status!=n.SapiClassStatus.OK)return r.status;o+=i,t+=i}return null!=_&&s<100&&_(100),l.OK}))}updateFirmware(t,e,_){return i(this,void 0,void 0,(function*(){if(this.board_info.status!=l.OK)return this.board_info.status;const i=yield this._load_file(this.board_info.boot_offset,t,e);if(i!=l.OK)return i;const o=yield this.sapi.update(this.board_info.boot_offset,_);return o.status!=n.SapiClassStatus.OK?o.status:l.OK}))}getBoardInfo(){return this.board_info}_isSupportRegionAndPower(){return this.param_info.status!=l.OK?this.param_info.status:this.board_info.status!=l.OK?this.board_info.status:this.board_info.version<50857239?l.UN_SUPPORT:l.OK}isMustResetDefault(){return this.board_info.status!=l.OK?this.board_info.status:this.board_info.version<51188299?l.UN_SUPPORT:l.OK}isSupportResetDefault(){return this.board_info.status!=l.OK?this.board_info.status:this.board_info.version<50857239?l.UN_SUPPORT:l.OK}isSupportIncludeExclude(){return this.board_info.status!=l.OK?this.board_info.status:this.board_info.version<51122316?l.UN_SUPPORT:l.OK}isSupportUpdateBootloader(){if(this.board_info.status!=l.OK)return this.board_info.status;if(null==this.board_info.product)return l.UN_SUPPORT;if(0==this.board_info.product.prod_valid)return l.UN_SUPPORT;return new Date(1e3*this.board_info.product.prod_ts).getUTCFullYear()<=2022?l.UN_SUPPORT:l.OK}isSupportDumpKey(){return this.board_info.status!=l.OK?this.board_info.status:null==this.board_info||null==this.board_info.license?l.UN_SUPPORT:null!=this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2]&&1==this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2].active?l.OK:l.UN_SUPPORT}readS2Key(){return i(this,void 0,void 0,(function*(){const t={status:l.OK,unauth:new Uint8Array([]),auth:new Uint8Array([]),access:new Uint8Array([]),s0:new Uint8Array([])};if(t.status=this.isSupportDumpKey(),t.status!=l.OK)return t;const e=yield this._readNVM(16764096,64);return e.status!=n.SapiClassStatus.OK?(t.status=e.status,t):64!=e.data.length?(t.status=l.WRONG_LENGTH_CMD,t):(t.unauth=new Uint8Array(e.data.slice(0,16)),t.auth=new Uint8Array(e.data.slice(16,32)),t.access=new Uint8Array(e.data.slice(32,48)),t.s0=new Uint8Array(e.data.slice(48,64)),t)}))}getRegion(){const t={status:this._isSupportRegionAndPower(),region:"",region_array:this.region.getListRegion()};if(t.status!=l.OK)return t;const e=this.region.getNameRegion(this.param_info.freq_i);return null==e?(t.status=l.WRONG_IN_DATA,t):(t.region=e,t)}setRegion(t){return i(this,void 0,void 0,(function*(){const e=this._isSupportRegionAndPower();if(e!=l.OK)return e;const _=this.region.getIdRegion(t);if(null==_)return l.INVALID_ARG;if(this.param_info.status!=l.OK)return this.param_info.status;const i=this.param_info.raw;return i[1]=_,i.length>8&&(i[8]=_),yield this._apply_param(i)}))}getPower(){const t={status:this._isSupportRegionAndPower(),power_raw:this.param_info.main_pow,step:1,min:1,max:this.board_info.max_default_power};return l.OK,t}setPower(t){return i(this,void 0,void 0,(function*(){const e=this._isSupportRegionAndPower();if(e!=l.OK)return e;const _=this.param_info.raw;return _[2]=t,yield this._apply_param(_)}))}enableNif(){return i(this,void 0,void 0,(function*(){const t=yield this.sapi.sendCommandUnSz(n.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET,[10]);return t.status!=n.SapiClassStatus.OK?t.status:l.OK}))}enableEvent(){return i(this,void 0,void 0,(function*(){const t=yield this.sapi.sendCommandUnSz(n.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET,[9,1]);return t.status!=n.SapiClassStatus.OK?t.status:l.OK}))}_enableLearn_get_status(){return i(this,void 0,void 0,(function*(){const t=yield this.sapi.recvIncomingRequest(1e3);return t.status!=n.SapiClassStatus.OK||t.cmd!=n.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER||t.data.length<3||160!=t.data[1]?a.ELEARNSTATUS_PROCESS:t.data[2]}))}_enableLearn_include(){return i(this,void 0,void 0,(function*(){let t;const e=Date.now()+31e3;for(t=0;e>Date.now();){switch(yield this._enableLearn_get_status()){case a.ELEARNSTATUS_PROCESS:t++;break;case a.ELEARNSTATUS_ASSIGN_NODEID_DONE:t=0;break;default:return l.TIMEOUT_FORCE_RESTART}if(t>=3)return l.LEARN_INCLUDE}return l.TIMEOUT_FORCE_RESTART}))}_enableLearn_exlude(){return i(this,void 0,void 0,(function*(){let t;for(t=0;t<3;)switch(t++,yield this._enableLearn_get_status()){case a.ELEARNSTATUS_ASSIGN_COMPLETE:case a.ELEARNSTATUS_PROCESS:break;case a.ELEARNSTATUS_ASSIGN_NODEID_DONE:return yield this._enableLearn_include()}return l.LEARN_EXCLUDE}))}enableLearn(t){return i(this,void 0,void 0,(function*(){let e,_;t&=255;const i=yield this.sapi.sendCommandUnSz(n.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET,[7,255&t,1]);if(i.status!=n.SapiClassStatus.OK)return i.status;const o=Date.now()+1e3*(t+1);for(this.lock();o>Date.now();)switch(yield this._enableLearn_get_status()){case a.ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT:return this.unlock(),e=yield this.sapi.detect_rcv(),e.status!=n.SapiClassStatus.OK?l.TIMEOUT_FORCE_RESTART:l.TIMEOUT;case a.ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED:return this.unlock(),l.TIMEOUT_FORCE_RESTART;case a.ELEARNSTATUS_ASSIGN_COMPLETE:return _=yield this._enableLearn_exlude(),this.unlock(),_;case a.ELEARNSTATUS_ASSIGN_NODEID_DONE:return _=yield this._enableLearn_include(),this.unlock(),_}return this.unlock(),l.TIMEOUT_FORCE_RESTART}))}setDefault(){return i(this,void 0,void 0,(function*(){const t=yield this.sapi.sendCommandUnSz(n.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET,[5]);return t.status!=n.SapiClassStatus.OK?t.status:l.OK}))}getQuantumSize(){return this.sapi.getQuantumSize()}lock(){return this.sapi.lock()}unlock(){return this.sapi.unlock()}is_busy(){return this.sapi.is_busy()}connect(){return i(this,void 0,void 0,(function*(){this.region=new o.SapiRegionClass,yield this._get_param_info(),yield this._get_board_info()}))}detect(t,e){return i(this,void 0,void 0,(function*(){return yield this.sapi.detect(t,e)}))}constructor(t){this.LICENSE_KEY_DUMP_S2=1,this.LICENSE_KEY_LONG_RANGE=5,this.license_flags={0:{name:"Pti",title:"Provides Packet Trace Interface (PTI) capabilities. Turns ZUno to advanced sniffer.",active:!1},1:{name:"Key dump",title:"Enables Z-Wave network key dump using Z-Uno.",active:!1},2:{name:"Custom vendor",title:"Use custom vendor code intead of 0115 (ZME)",active:!1},3:{name:"Modem",title:"ZUno works as direct transmitter.",active:!1},4:{name:"Max power",title:"User is able to use the maximum power of radio amplifier.",active:!1},5:{name:"Long Range",title:"Enables Z-Wave LongRange technology support.",active:!1}},this.board_info=this._get_board_info_default(),this.param_info=this._get_param_info_default(),this.region=new o.SapiRegionClass,this.sapi=t}}},455:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonUiSectionHtmlClass=e.CommonUiSectionClass=void 0;const n=_(186);class o{common_button_atrr(t,e,_){if(1==_)return t.setAttribute("disabled",""),void t.removeAttribute("title");"string"!=typeof e&&(e=this.locale.getLocale(e)),t.setAttribute("title",e),t.removeAttribute("disabled")}_event_get_element(t,e){if(null==t.target)return null;const _=t.target;try{if(_.tagName.toLowerCase()!==e.toLowerCase())return null}catch(t){return null}return t.target}event_get_element_select(t){return null==this._event_get_element(t,"select")?null:t.target}event_get_element_input(t){return null==this._event_get_element(t,"input")?null:t.target}event_get_element_button(t){return null==this._event_get_element(t,"button")?null:t.target}constructor(t){this.locale=t}}e.CommonUiSectionHtmlClass=o;e.CommonUiSectionClass=class extends o{is_busy(){return 1==this.management.is_busy()&&(this.log.warning(n.ControllerUiLangClassId.MESSAGE_PLEASE_WAIT),!0)}create_tr_el(t,e,_,i){const n=document.createElement("tr"),o=document.createElement("td"),s=document.createElement("td"),r=document.createElement("td");return o.innerHTML="string"==typeof t?t:this.locale.getLocale(t),o.title="string"==typeof e?e:this.locale.getLocale(e),"string"==typeof _?s.innerHTML=_:s.appendChild(_),"string"==typeof i?r.innerHTML=i:r.appendChild(i),n.appendChild(o),n.appendChild(s),n.appendChild(r),this.el_tbody.appendChild(n),n}is_close(){return 1!=this.is_busy()}begin(){return i(this,void 0,void 0,(function*(){yield this.end(),0!=(yield this.begin_func())&&(this.el_section.style.display="")}))}end(){return i(this,void 0,void 0,(function*(){this.el_section.style.display="none",yield this.end_func(),this.el_tbody.innerHTML=""}))}quest_continue_stop(t,e,_,n,o,s,r){return i(this,void 0,void 0,(function*(){return new Promise((a=>{t.innerHTML="";const l=document.createElement("span");"string"!=typeof e&&(e=this.locale.getLocale(e)),l.innerHTML=e,"string"!=typeof _&&(_=this.locale.getLocale(_)),l.title=_,l.className="ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button";const E=document.createElement("button");if(E.textContent=this.locale.getLocale(n),E.title=this.locale.getLocale(o),E.type="button",E.className="ZUnoRazberryModalContentSection_migration_action_button",t.appendChild(l),t.appendChild(E),E.addEventListener("click",(()=>i(this,void 0,void 0,(function*(){a(!0)})))),null!=s&&null!=r){const e=document.createElement("button");e.textContent=this.locale.getLocale(s),e.title=this.locale.getLocale(r),e.type="button",e.className="ZUnoRazberryModalContentSection_migration_action_button",e.addEventListener("click",(()=>i(this,void 0,void 0,(function*(){a(!1)})))),t.appendChild(e)}}))}))}constructor(t,e,_,i,n,o,s){super(e),this.URL_LICENSE_MORE_OPTIONS="https://z-wave.me/hardware-capabilities/?uuid=",this.URL_LICENSE_SERVISE="https://service.z-wave.me/hardware/capabilities/?uuid=",this.management=_,this.log=i;const r=document.createElement("section");r.className="ZUnoRazberryModalContentSection_table",r.style.display="none";const a=document.createElement("h3");a.textContent=this.locale.getLocale(n),r.appendChild(a);const l=document.createElement("table");r.appendChild(l);const E=document.createElement("tbody");l.appendChild(E),t.appendChild(r),this.el_section=r,this.el_tbody=E,this.begin_func=o,this.end_func=s}}},385:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiSectionInfoClass=void 0;const n=_(186),o=_(148),s=_(455);class r extends s.CommonUiSectionClass{_controller_default_click(t){return i(this,void 0,void 0,(function*(){if(1==this.is_busy())return;const e=this.event_get_element_button(t);if(null==e)return;if(1!=window.confirm(this.locale.getLocale(n.ControllerUiLangClassId.DEFAULT_RESET_WARNING)))return;this.common_button_atrr(e,n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE,!0),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_DEFAULT);const _=yield this.razberry.setDefault();if(this.common_button_atrr(e,n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE,!1),_==o.ControllerSapiClassStatus.OK)return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_DEFAULT),void this.re_begin_func(!1);this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_SET_DEFAULT,_)}))}_controller_default_init(){const t=document.createElement("button");return t.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE),t.type="button",t.textContent=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON),t.addEventListener("click",(t=>{this._controller_default_click(t)})),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT,n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE,"",t),!0}_power_change(t){const e=this.event_get_element_input(t);null!=e&&(this.power_new=Number(e.value),this.common_button_atrr(this.power_el_button,n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE,this.power_new==this.power_current))}_power_click(){return i(this,void 0,void 0,(function*(){if(1==this.is_busy())return;this.common_button_atrr(this.power_el_button,n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE,!0),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_POWER);const t=yield this.razberry.setPower(this.power_new);if(t==o.ControllerSapiClassStatus.OK)return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_POWER),void(this.power_current=this.power_new);this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_SET_POWER,t),this.common_button_atrr(this.power_el_button,n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE,!1)}))}_power_init(){return i(this,void 0,void 0,(function*(){if(0==this.razberry.isRazberry7())return!1;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_POWER);const t=yield this.razberry.getPower();if(t.status!=o.ControllerSapiClassStatus.OK)return this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_POWER,t.status),!1;this.power_new=t.power_raw,this.power_current=t.power_raw;const e=document.createElement("span"),_=document.createElement("input");return _.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE),_.type="number",_.min=t.min.toString(),_.max=t.max.toString(),_.step=t.step.toString(),_.value=t.power_raw.toString(),_.addEventListener("change",(t=>{this._power_change(t)})),e.appendChild(_),e.appendChild(document.createElement("span")),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_POWER,n.ControllerUiLangClassId.TABLE_NAME_POWER_TITLE,e,this.power_el_button),this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_POWER),!0}))}_region_change(t){const e=this.event_get_element_select(t);null!=e&&(this.region_new=e.value,this.common_button_atrr(this.region_el_button,n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE,this.region_new==this.region_current))}_region_click(){return i(this,void 0,void 0,(function*(){if(1==this.is_busy())return;this.common_button_atrr(this.region_el_button,n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE,!0),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_REGION);const t=yield this.razberry.setRegion(this.region_new);if(t==o.ControllerSapiClassStatus.OK)return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_REGION),void(this.region_current=this.region_new);this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_SET_REGION,t),this.common_button_atrr(this.region_el_button,n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE,!1)}))}_region_init(){return i(this,void 0,void 0,(function*(){let t,e,_;if(1==this.razberry.isRazberry5())return!1;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_REGION);const i=yield this.razberry.getRegion();switch(i.status){case o.ControllerSapiClassStatus.OK:for(this.region_current=i.region,this.region_new=i.region,this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_REGION),t=0,e="";t'+i.region_array[t]+"":e+"",t++;return _=document.createElement("select"),_.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE),_.innerHTML=e,_.addEventListener("change",(t=>{this._region_change(t)})),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_REGION,n.ControllerUiLangClassId.TABLE_NAME_REGION_TITLE,_,this.region_el_button),!0;case o.ControllerSapiClassStatus.UNSUPPORT_CMD:this.log.errorUnsupport(n.ControllerUiLangClassId.MESSAGE_READ_REGION);break;default:this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_REGION,i.status)}return!1}))}_capabilities_init(){let t;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES);const e=this.razberry.getCapabilities();return e.status!=o.ControllerSapiClassStatus.OK?(this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES,e.status),!1):(this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_TYPE,n.ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE,this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER),""),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION,n.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE,e.ApiVersion+"."+e.ApiRevision,""),t=e.VendorIDName,null!=e.VendorIDWebpage&&(t=''+t+""),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_VENDOR,n.ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE,t,""),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID,n.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE,String(e.VendorID),""),this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES),!0)}_begin(){return i(this,void 0,void 0,(function*(){let t;return t=!1,1==this._capabilities_init()&&(t=!0),1==(yield this._region_init())&&(t=!0),1==(yield this._power_init())&&(t=!0),1==this._controller_default_init()&&(t=!0),t}))}_end(){return i(this,void 0,void 0,(function*(){this.power_el_button.disabled=!0,this.region_el_button.disabled=!0}))}_constructor_button(t,e){const _=document.createElement("button");return _.textContent=this.locale.getLocale(t),_.addEventListener("click",e),_.type="button",_}constructor(t,e,_,o,s){super(t,e,_,o,n.ControllerUiLangClassId.BOARD_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.region_current="",this.region_new="",this.power_current=0,this.power_new=0,this.razberry=_,this.power_el_button=this._constructor_button(n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON,(()=>{this._power_click()})),this.region_el_button=this._constructor_button(n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON,(()=>{this._region_click()})),this.re_begin_func=s}}e.ControllerUiSectionInfoClass=r},926:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiSectionLicenseClass=void 0;const n=_(186),o=_(148),s=_(455),r=_(33);class a extends s.CommonUiSectionClass{_license_timer_valid_data(t){return 0!=Object.hasOwn(t,"crc")&&0!=Object.hasOwn(t,"uuid")&&0!=Object.hasOwn(t,"license")&&("string"==typeof t.crc&&("string"==typeof t.license&&"string"==typeof t.uuid))}_license_timer_get_pack(t,e,_){if(e.toLowerCase()!=t.uuid.toLowerCase())return;const i=Number(t.crc);return 0!=i&&i!=_?t.license:void 0}_license_timer_init(t,e){const _=this.URL_LICENSE_SERVISE+t,s=()=>{this.license_timer_id=void 0,this.license_xhr.open("POST",_,!0),this.license_xhr.responseType="json",this.license_xhr.timeout=this.ms_timeout_get_new_license_xhr,this.license_xhr.ontimeout=()=>{this.license_timer_id=window.setTimeout(s,this.ms_timeout_get_new_license),this.log.errorXhrTimeout(_)},this.license_xhr.onerror=()=>{this.license_timer_id=window.setTimeout(s,this.ms_timeout_get_new_license),this.log.errorXhrError(_)},this.license_xhr.onload=()=>{const a=this.license_xhr.response;if(0==this._license_timer_valid_data(a))return this.license_timer_id=window.setTimeout(s,this.ms_timeout_get_new_license),void this.log.errorXhrInvalidData(_);const l=this._license_timer_get_pack(a,t,e);if(null==l)return void(this.license_timer_id=window.setTimeout(s,this.ms_timeout_get_new_license));const E=(0,r.hexToBytes)(l);if(null==E)return this.license_timer_id=window.setTimeout(s,this.ms_timeout_get_new_license),void this.log.errorXhrInvalidData(_);const T=()=>i(this,void 0,void 0,(function*(){if(this.license_timer_id=void 0,this.log.infoStart(this.locale.getLocale(n.ControllerUiLangClassId.MESSAGE_SET_LICENSE)),1==this.razberry.is_busy())return this.log.warning(this.locale.getLocale(n.ControllerUiLangClassId.MESSAGE_PLEASE_WAIT)),void(this.license_timer_id=window.setTimeout(T,this.ms_timeout_get_new_license_port));const t=yield this.razberry.setLicense(E);if(t!=o.ControllerSapiClassStatus.OK)return this.log.errorFalledCode(this.locale.getLocale(n.ControllerUiLangClassId.MESSAGE_SET_LICENSE),t),void(this.license_timer_id=window.setTimeout(T,this.ms_timeout_get_new_license_port));this.log.infoDone(this.locale.getLocale(n.ControllerUiLangClassId.MESSAGE_SET_LICENSE)),this.license_timer_id=window.setTimeout(s,this.ms_timeout_get_new_license),this.begin()}));this.license_timer_id=window.setTimeout(T,0)},this.license_xhr.send()};this.license_timer_id=window.setTimeout(s,0)}_license_init(){let t,e;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_LICENSE);const _=this.razberry.getLicense();if(_.status==o.ControllerSapiClassStatus.OK){for(t in 1==_.vallid&&(this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID,n.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE,String(_.vendor_id),""),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE,n.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE,String(_.max_nodes),""),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT,n.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE,String(_.count_support),"")),_.flags)e=1==_.flags[t].active?this.TABLE_NAME_LICENSE_YES:this.TABLE_NAME_LICENSE_NO,this.create_tr_el(_.flags[t].name+":",_.flags[t].title,e,"");return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_LICENSE),1==_.vallid?_.crc16:0}this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_LICENSE,_.status)}_board_info_init(){this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO);const t=this.razberry.getBoardInfo();if(t.status!=o.ControllerSapiClassStatus.OK)return void this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO,t.status);const e=(0,r.arrayToStringHex)(t.chip_uuid);this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID,n.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE,e,"");const _='link';return this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS,n.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE,_,""),this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO),e}_begin(){return i(this,void 0,void 0,(function*(){if(0==this.razberry.isRazberry7())return!1;const t=this._board_info_init(),e=this._license_init();return(null!=t||null!=e)&&(null!=t&&null!=e&&this._license_timer_init(t,e),!0)}))}_end(){return i(this,void 0,void 0,(function*(){null!=this.license_timer_id&&(window.clearTimeout(this.license_timer_id),this.license_timer_id=void 0),this.license_xhr.abort()}))}constructor(t,e,_,o){super(t,e,_,o,n.ControllerUiLangClassId.LICENSE_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.TABLE_NAME_LICENSE_YES='',this.TABLE_NAME_LICENSE_NO='',this.ms_timeout_get_new_license=1e4,this.ms_timeout_get_new_license_xhr=3e3,this.ms_timeout_get_new_license_port=1e3,this.license_xhr=new XMLHttpRequest,this.razberry=_}}e.ControllerUiSectionLicenseClass=a},537:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiSectionMigrationClass=void 0;const n=_(186),o=_(148),s=_(782),r=_(455),a=_(780),l=_(315),E=_(239),T=_(963),d=_(33);class u extends r.CommonUiSectionClass{_click_start_stop_include_excluding(t){return i(this,void 0,void 0,(function*(){let e,_,i,s;1==t?(_=n.ControllerUiLangClassId.MESSAGE_START_EXCLUDING,i=n.ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE,s=n.ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER):(_=n.ControllerUiLangClassId.MESSAGE_START_INCLUDE,i=n.ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE,s=n.ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER),yield this.quest_continue_stop(this.el_container,i,"",n.ControllerUiLangClassId.PROCESS_CONTINUE,n.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,void 0,void 0),this.el_container.innerHTML="",this.log.infoStart(_);const r=yield this.razberry.include_excluding();if(r.status!=o.ControllerSapiClassStatus.OK)return this._progress_faled(_,r.status),!1;const a=document.createElement("progress"),l=document.createElement("span"),E=document.createElement("span");E.title=this.locale.getLocale(s),E.appendChild(a),E.appendChild(l),a.max=this.progress_timer_id_count,this.el_container.appendChild(E),e=this.progress_timer_id_count;const T=this.locale.getLocale(n.ControllerUiLangClassId.SECONDS),d=this.progress_timer_id_count.toString().length,u=()=>{a.value=e,l.textContent=" "+e.toString().padStart(d,"0")+T,e>0?(e--,this.progress_timer_id=window.setTimeout(u,this.progress_timer_id_ms_period)):this.progress_timer_id=void 0};for(this.progress_timer_id=window.setTimeout(u,0);;){const t=yield this.razberry.waitLearn(this.progress_timer_id_ms_period,r.seq);if(t==o.ControllerSapiClassStatus.OK)return null!=this.progress_timer_id&&(window.clearTimeout(this.progress_timer_id),this.progress_timer_id=void 0),this.log.infoDone(_),!0;if(t!=o.ControllerSapiClassStatus.PROCESS)return this._progress_faled(_,t),!1;if(null==this.progress_timer_id)return yield this.razberry.disabled(),this._progress_faled(_,o.ControllerSapiClassStatus.TIMEOUT),!1}return!0}))}_click_start_stop_test_include(t){return i(this,void 0,void 0,(function*(){this._progress(n.ControllerUiLangClassId.MIGRATION_TEST_INCLUDE),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_HOME_ID);const e=yield this.razberry.GetNetworkIDs();if(e.status!=o.ControllerSapiClassStatus.OK)return void this._progress_faled(n.ControllerUiLangClassId.MESSAGE_READ_HOME_ID,e.status);if(t.home=e.home,t.node_id=e.node_id,this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_HOME_ID),1!=e.node_id)return!0;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA);const _=yield this.razberry.GetInitData();if(_.status==o.ControllerSapiClassStatus.OK)return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA),_.node_list.length>1||1!=_.node_list[0];this._progress_faled(n.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA,_.status)}))}_progress(t){this.el_container.innerHTML='
'+this.locale.getLocale(t)+"
"}_progress_error(t){this.el_container.innerHTML='
'+this.locale.getLocale(t)+"
"}_progress_faled(t,e){this.log.errorFalledCode(t,e),this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_SEE_LOG)}_update_raz_full_finware_url(t,e){let _;for(_=t.length;0!=_--;)if(0==t[_].beta&&t[_].type==e)return t[_]}_update_raz_full_boot_url(t){let e;for(e=t.length;0!=e--;)if(0==t[e].beta)return t[e]}_update_firmware_zuno(t,e,_){return i(this,void 0,void 0,(function*(){return yield this.zuno.updateFirmware(t,e,_)}))}_update_firmware_raz(t,e,_){return i(this,void 0,void 0,(function*(){return yield this.razberry.updateFirmware(t,e,_)}))}_update_bootloader_raz(t,e,_){return i(this,void 0,void 0,(function*(){return yield this.razberry.updateBotloader(t,e)}))}_update_raz_zuno_full_get_info_paket_add(t){if(null!=t)return t;this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO)}_update_raz_full_get_info_paket(){const t=a.ControllerUiSectionUpdateClass.getInfoUrlPaket(this.log,this.razberry);return this._update_raz_zuno_full_get_info_paket_add(t)}_update_zuno_full_get_info_paket(){const t=l.SlaveUiSectionUpdateClass.getInfoUrlPaket(this.log,this.zuno);return this._update_raz_zuno_full_get_info_paket_add(t)}_update_raz_full_dowload_and_update(t,e,_){return i(this,void 0,void 0,(function*(){this._progress(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE);const i=yield E.UpdateUiSectionClass.downloadFile(this.download_process,e.url,this.log);this.el_container.innerHTML="";const o=document.createElement("div"),s=document.createElement("div");s.textContent=_+" -> "+e.version_name,this.el_container.appendChild(s),this.el_container.appendChild(o);return 0!=(yield E.UpdateUiSectionClass.updateProcess(n.ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE,o,i,e.type,t,this.locale,this.log))||(this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_UPDATE),!1)}))}_update_raz_full(){return i(this,void 0,void 0,(function*(){let t;if(t=this._update_raz_full_get_info_paket(),null!=t){for(;;){this._progress(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO),yield E.UpdateUiSectionClass.downloadInfo(this.download_process,t,this.log,this.locale);const e=this._update_raz_full_finware_url(t.app.data,T.SapiClassDetectType.RAZBERRY);if(null!=e){if(0==(yield this._update_raz_full_dowload_and_update(((t,e,_)=>i(this,void 0,void 0,(function*(){return yield this._update_firmware_raz(t,e,_)}))),e,t.app.version_name)))return;if(this.sapi.type()!=T.SapiClassDetectType.RAZBERRY)return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE);if(yield this.razberry.connect(),t=this._update_raz_full_get_info_paket(),null==t)return;if(t.app.version!=e.version)return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION)}else{const e=this._update_raz_full_boot_url(t.boot.data);if(null==e)return t;if(0==(yield this._update_raz_full_dowload_and_update(((t,e,_)=>i(this,void 0,void 0,(function*(){return yield this._update_bootloader_raz(t,e,_)}))),e,t.boot.version_name)))return;if(yield this.razberry.connect(),t=this._update_raz_full_get_info_paket(),null==t)return;if(t.boot.version!=e.version)return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION)}}return t}}))}_update_raz_to_zuno(t){return i(this,void 0,void 0,(function*(){const e=this._update_raz_full_finware_url(t.app.data,T.SapiClassDetectType.ZUNO);if(null==e)return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE);if(0==(yield this._update_raz_full_dowload_and_update(((t,e,_)=>i(this,void 0,void 0,(function*(){return yield this._update_firmware_raz(t,e,_)}))),e,t.app.version_name)))return;if(this.sapi.type()!=T.SapiClassDetectType.ZUNO)return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE);yield this.zuno.connect();const _=this._update_zuno_full_get_info_paket();if(null!=_){if(_.app.version==e.version)return _;this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION)}}))}_click_start_stop_zuno_get_info_include_exlude(){return i(this,void 0,void 0,(function*(){let t;if(this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT),t=yield this.zuno.enableNif(),t!=s.ZunoSapiClassStatus.OK)return this._progress_faled(n.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT,t),!1;if(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN),t=yield this.zuno.enableEvent(),t!=s.ZunoSapiClassStatus.OK)return this._progress_faled(n.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN,t),!1;switch(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_START_LEARN),t=yield this.zuno.enableLearn(30),this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_START_LEARN),t){case s.ZunoSapiClassStatus.TIMEOUT:this.log.info(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT),this._progress_error(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT);break;case s.ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART:default:this.log.warning(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART),this._progress_error(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);break;case s.ZunoSapiClassStatus.LEARN_EXCLUDE:case s.ZunoSapiClassStatus.LEARN_INCLUDE:this.log.info(n.ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE)}yield(0,d.sleep)(2e3),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_CONNECT);const e=yield this.sapi.detect([115200],null);return e.status!=T.SapiClassStatus.OK?(this._progress_faled(n.ControllerUiLangClassId.MESSAGE_CONNECT,e.status),!1):(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_CONNECT),yield this.zuno.connect(),!0)}))}_test_dump_key(t){const e=(0,d.arrayToStringHex)(t);return"00000000000000000000000000000000"!==e&&"ffffffffffffffffffffffffffffffff"!==e}_test_dump_key_all(t){return 0!=this._test_dump_key(t.unauth)&&(0!=this._test_dump_key(t.auth)&&(0!=this._test_dump_key(t.access)&&0!=this._test_dump_key(t.s0)))}_dump_key_all_to_string(t){let e;return e="",1==this._test_dump_key(t.unauth)&&(e=e+"
unauth: "+(0,d.arrayToStringHex)(t.unauth)+"
"),1==this._test_dump_key(t.auth)&&(e=e+"
auth: "+(0,d.arrayToStringHex)(t.auth)+"
"),1==this._test_dump_key(t.access)&&(e=e+"
access: "+(0,d.arrayToStringHex)(t.access)+"
"),1==this._test_dump_key(t.s0)&&(e=e+"
s0: "+(0,d.arrayToStringHex)(t.s0)+"
"),e}_click_start_stop_zuno_get_info(t){return i(this,void 0,void 0,(function*(){let e,_;if(e=this.zuno.isSupportDumpKey(),e!=s.ZunoSapiClassStatus.OK)return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY);if(e=this.zuno.isSupportIncludeExclude(),e!=s.ZunoSapiClassStatus.OK)return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE);this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_REGION);const i=this.zuno.getRegion();if(i.status==s.ZunoSapiClassStatus.OK){if(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_REGION),t!=i.region){if(this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_REGION),e=yield this.zuno.setRegion(t),e!=s.ZunoSapiClassStatus.OK)return void this._progress_faled(n.ControllerUiLangClassId.MESSAGE_SET_REGION,e);this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_REGION)}for(_=!1;;){this.log.infoStart(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);const t=this.zuno.getBoardInfo();if(t.status!=s.ZunoSapiClassStatus.OK||null==t.node_id)return void this._progress_faled(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO,t.status);if(this.log.infoDone(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO),0!=t.node_id){if(1==_){this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_S2_KEY);const e=yield this.zuno.readS2Key();if(e.status!=s.ZunoSapiClassStatus.OK)return void this._progress_faled(n.ControllerUiLangClassId.MESSAGE_READ_S2_KEY,e.status);this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_S2_KEY);const i={zuno_node_id:t.node_id,dump_key:e};if(1==this._test_dump_key_all(e))return i;const o=this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY)+this._dump_key_all_to_string(i.dump_key);if(1==(yield this.quest_continue_stop(this.el_container,o,n.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE,n.ControllerUiLangClassId.PROCESS_CONTINUE,n.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,n.ControllerUiLangClassId.PROCESS_REPEAT,n.ControllerUiLangClassId.PROCESS_REPEAT_TITLE)))return i;if(yield this.quest_continue_stop(this.el_container,n.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE,n.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE,n.ControllerUiLangClassId.PROCESS_CONTINUE,n.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,void 0,void 0),this._progress(n.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT),0==(yield this._click_start_stop_zuno_get_info_include_exlude()))return;_=!1;continue}if(yield this.quest_continue_stop(this.el_container,n.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE,n.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE,n.ControllerUiLangClassId.PROCESS_CONTINUE,n.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,void 0,void 0),this._progress(n.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT),0==(yield this._click_start_stop_zuno_get_info_include_exlude()))return;continue}const e=this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE).replace("${dsk}",(0,d.conv2Decimal)(t.s2_pub," - ").substring(0,5));if(yield this.quest_continue_stop(this.el_container,e,n.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE,n.ControllerUiLangClassId.PROCESS_CONTINUE,n.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,void 0,void 0),this._progress(n.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT),0==(yield this._click_start_stop_zuno_get_info_include_exlude()))return;_=!0}}else this._progress_faled(n.ControllerUiLangClassId.MESSAGE_READ_REGION,i.status)}))}_update_zuno_to_raz(t){return i(this,void 0,void 0,(function*(){this._progress(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO),yield E.UpdateUiSectionClass.downloadInfo(this.download_process,t,this.log,this.locale);const e=this._update_raz_full_finware_url(t.app.data,T.SapiClassDetectType.RAZBERRY);if(null==e)return this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE),!1;if(0==(yield this._update_raz_full_dowload_and_update(((t,e,_)=>i(this,void 0,void 0,(function*(){return yield this._update_firmware_zuno(t,e,_)}))),e,t.app.version_name)))return!1;if(this.sapi.type()!=T.SapiClassDetectType.RAZBERRY)return this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE),!1;yield this.razberry.connect();const _=this._update_raz_full_get_info_paket();return null!=_&&(_.app.version==e.version||(this._progress_error(n.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION),!1))}))}_remove_node(t){return i(this,void 0,void 0,(function*(){let e;return this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_NOP),e=yield this.razberry.nop(t),e!=o.ControllerSapiClassStatus.TRANSMIT_COMPLETE_NO_ACK?(this._progress_faled(n.ControllerUiLangClassId.MESSAGE_NOP,e),!1):(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_NOP),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_REMOVE_NODE),e=yield this.razberry.removeFaledNode(t),e!=o.ControllerSapiClassStatus.OK?(this._progress_faled(n.ControllerUiLangClassId.MESSAGE_REMOVE_NODE,e),!1):(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_REMOVE_NODE),!0))}))}_click_start_stop(t){return i(this,void 0,void 0,(function*(){let e,_;if(1==this.process)return;if(null==this.event_get_element_button(t))return;if(1==this.is_busy())return;if(1!=window.confirm(this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING)))return;yield this.clear(),yield this.begin(),this.el_button.disabled=!0,this.el_button.title="",this.el_button.style.display="none",this.process=!0,this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_REGION);const i=yield this.razberry.getRegion();if(i.status!=o.ControllerSapiClassStatus.OK)return void this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_REGION,i.status);if(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_REGION),1==this.razberry.isLr(i.region))return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR);if(0==this.razberry.isLicenseSupportBackup())return void this._progress_error(n.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP);if(e=yield this._update_raz_full(),null==e)return;if(e=yield this._update_raz_to_zuno(e),null==e)return;const s=yield this._click_start_stop_zuno_get_info(i.region);if(null==s)return;if(0==(yield this._update_zuno_to_raz(e)))return;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_REGION);const r=yield this.razberry.setRegion(i.region);if(r!=o.ControllerSapiClassStatus.OK)return void this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_SET_REGION,r);this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_REGION);const a={home:0,node_id:0};for(;;){if(0==(yield this._click_start_stop_include_excluding(!1)))return;if(_=yield this._click_start_stop_test_include(a),null==_)return;if(1==_)break}this._progress(n.ControllerUiLangClassId.MIGRATION_FINALIZE),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_HOME_ID);const l=yield this.razberry.nvmWrite(this.NVM_HOMEID,(0,d.intToBytearrayMsbLsb)(a.home));if(l!=o.ControllerSapiClassStatus.OK)return void this._progress_faled(n.ControllerUiLangClassId.MESSAGE_SET_HOME_ID,l);this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SOFT_RESET);const E=yield this.razberry.softReset();E==o.ControllerSapiClassStatus.OK?(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SOFT_RESET),0!=(yield this._remove_node(a.node_id))&&0!=(yield this._remove_node(s.zuno_node_id))&&(this.el_container.innerHTML='
'+this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_SUCESS)+"
"+this._dump_key_all_to_string(s.dump_key))):this._progress_faled(n.ControllerUiLangClassId.MESSAGE_SOFT_RESET,E)}))}_begin(){return i(this,void 0,void 0,(function*(){let t;return t=1==this.razberry.isRazberry5()?this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5):1==this.razberry.isRazberry7()?this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML):this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT),this.create_tr_el(n.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER,n.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE,t,""),1!=this.razberry.isRazberry7()||(this.el_button.disabled=!1,this.el_button.style.display="",this.el_button.addEventListener("click",(t=>i(this,void 0,void 0,(function*(){yield this._click_start_stop(t)})))),this.el_button.type="button",this.el_button.textContent=this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START),this.el_button.title=this.locale.getLocale(n.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE),this.create_tr_el(n.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER,n.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE,this.el_container,this.el_button)),!0}))}_end(){return i(this,void 0,void 0,(function*(){this.process=!1,this.download_process.xhr.abort(),null!=this.download_process.timer_id&&(window.clearTimeout(this.download_process.timer_id),this.download_process.timer_id=void 0),this.el_container.innerHTML="",null!=this.progress_timer_id&&(window.clearTimeout(this.progress_timer_id),this.progress_timer_id=void 0)}))}constructor(t,e,_,o,s,r,a){super(t,e,_,o,n.ControllerUiLangClassId.MIGRATION_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.NVM_HOMEID=8,this.progress_timer_id_ms_period=1e3,this.progress_timer_id_count=30,this.el_button=document.createElement("button"),this.download_process={xhr:new XMLHttpRequest},this.process=!1,this.razberry=_,this.sapi=r,this.zuno=a,this.clear=s,this.el_container=document.createElement("span")}}e.ControllerUiSectionMigrationClass=u},780:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.ControllerUiSectionUpdateClass=void 0;const n=_(186),o=_(148),s=_(455),r=_(239),a=_(33),l=_(963),E=_(408);class T extends s.CommonUiSectionClass{static getInfoUrlPaket(t,e){t.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO);const _=e.getBoardInfo();if(_.status!=o.ControllerSapiClassStatus.OK)return void t.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO,_.status);t.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO),t.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES);const i=e.getCapabilities();if(i.status!=o.ControllerSapiClassStatus.OK)return void t.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES,i.status);t.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES);const s=i.ApiVersion<<8|i.ApiRevision;return{app:{version:s,version_name:(0,a.versionNumberToString)(s),type:l.SapiClassDetectType.RAZBERRY,update:!0,update_type:!0,data:[]},boot:{version:_.bootloader_version,version_name:(0,a.versionNumberToString)(_.bootloader_version),type:l.SapiClassDetectType.UNKNOWN,update:!0,update_type:!0,data:[]},url:"vendorId="+i.VendorID.toString()+"&appVersionMajor="+i.ApiVersion.toString()+"&appVersionMinor="+i.ApiRevision.toString()+"&uuid="+(0,a.arrayToStringHex)(_.chip_uuid)+"&bootloaderVersion="+_.bootloader_version.toString()+"&org_family="+_.keys_hash.toString()+"&fw_family="+l.SapiClassDetectType.RAZBERRY.toString()+"&chip_family="+_.chip_family.toString()+"&chip_id="+_.chip_type.toString()+"&zway="+E.ControllerUiDefineClass.NAME_APP_VERSION_FULL}}_update_init(){const t=T.getInfoUrlPaket(this.log,this.razberry);return null!=t&&(this.update.info_download_xhr(t),!0)}_begin(){return i(this,void 0,void 0,(function*(){return 0!=this.razberry.isRazberry7()&&this._update_init()}))}_end(){return i(this,void 0,void 0,(function*(){this.update.end()}))}_update_firmware(t,e,_){return i(this,void 0,void 0,(function*(){return yield this.razberry.updateFirmware(t,e,_)}))}_update_bootloader(t,e,_){return i(this,void 0,void 0,(function*(){return yield this.razberry.updateBotloader(t,e)}))}constructor(t,e,_,o,s){super(t,e,_,o,n.ControllerUiLangClassId.UPDATE_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.razberry=_,this.update=new r.UpdateUiSectionClass(o,e,this,s,((t,e,_)=>i(this,void 0,void 0,(function*(){return yield this._update_firmware(t,e,_)}))),((t,e,_)=>i(this,void 0,void 0,(function*(){return yield this._update_bootloader(t,e,_)}))))}}e.ControllerUiSectionUpdateClass=T},631:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.DetectionUiSectionClass=void 0;const n=_(186),o=_(963),s=_(455),r=_(408);class a extends s.CommonUiSectionClass{_get_detection_sync_manual(){return localStorage.getItem(r.ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL)===r.ControllerUiDefineClass.STORAGE_VALUE_TRUE}_detection_sync_manual(t){return i(this,void 0,void 0,(function*(){const e=this.event_get_element_input(t);null!=e&&localStorage.setItem(r.ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL,1==e.checked?r.ControllerUiDefineClass.STORAGE_VALUE_TRUE:r.ControllerUiDefineClass.STORAGE_VALUE_FALSE)}))}_get_baudrate_cache(){let t,e;const _=localStorage.getItem(r.ControllerUiDefineClass.KEY_BAUDRATE);if(null==_)return[];try{t=JSON.parse(_)}catch(t){return[]}if(0==Array.isArray(t))return[];for(e=0;e{this.el_container.innerHTML="";const e=document.createElement("span");e.textContent=this.locale.getLocale(n.ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC),e.className="ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button";const _=document.createElement("button");_.textContent=this.locale.getLocale(n.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE),_.title=this.locale.getLocale(n.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE),_.type="button",_.className="ZUnoRazberryModalContentSection_migration_action_button";const o=document.createElement("button");o.textContent=this.locale.getLocale(n.ControllerUiLangClassId.DETECTION_PROCESS_STOP),o.title=this.locale.getLocale(n.ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE),o.type="button",o.className="ZUnoRazberryModalContentSection_migration_action_button",o.addEventListener("click",(()=>i(this,void 0,void 0,(function*(){t(!1)})))),_.addEventListener("click",(()=>i(this,void 0,void 0,(function*(){t(!0)})))),this.el_container.appendChild(e),this.el_container.appendChild(_),this.el_container.appendChild(o)}))}))}_detection_process_sync(){return i(this,void 0,void 0,(function*(){return 0==(yield this._click_start_stop_question())?(this._constructor_struct_end(),!1):(this._constructor_struct_progress(n.ControllerUiLangClassId.DETECTION_PROCESS),!0)}))}_constructor_struct_progress(t){this.el_container.innerHTML='
'+this.locale.getLocale(t)+"
"}_click_re_sync(t){return i(this,void 0,void 0,(function*(){1!=this.is_busy()&&this.re_begin_func(!0)}))}_constructor_struct_end(){this.el_container.innerHTML="";const t=document.createElement("button");t.addEventListener("click",(t=>i(this,void 0,void 0,(function*(){yield this._click_re_sync(t)})))),t.type="button",t.textContent=this.locale.getLocale(n.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC),t.title=this.locale.getLocale(n.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE),this.el_container.appendChild(t)}detection(){return i(this,void 0,void 0,(function*(){let t;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_CONNECT);const e=this._get_baudrate_cache();t=0==this._get_detection_sync_manual()?null:()=>i(this,void 0,void 0,(function*(){return yield this._detection_process_sync()})),this._constructor_struct_progress(n.ControllerUiLangClassId.DETECTION_PROCESS);const _=yield this.sapi.detect(e,t);return _.status!=o.SapiClassStatus.OK?(this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_CONNECT,_.status),this._constructor_struct_end(),!1):(this._constructor_struct_end(),this._set_baudrate_cache(e,_.baudrate),this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_CONNECT),!0)}))}_begin(){return i(this,void 0,void 0,(function*(){const t=document.createElement("input");return t.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE),t.type="checkbox",t.checked=this._get_detection_sync_manual(),t.addEventListener("change",(t=>{this._detection_sync_manual(t)})),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL,n.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE,t,""),this.create_tr_el(n.ControllerUiLangClassId.DETECTION_PROCESS_HEADER,n.ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE,this.el_container,""),!0}))}_end(){return i(this,void 0,void 0,(function*(){this.el_container.innerHTML=""}))}constructor(t,e,_,o,s){super(t,e,_,o,n.ControllerUiLangClassId.DETECTION_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.el_container=document.createElement("span"),this.sapi=_,this.re_begin_func=s}}e.DetectionUiSectionClass=a},470:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.SlaveUiSectionInfoClass=void 0;const n=_(186),o=_(782),s=_(455),r=_(33),a=_(342),l=_(408);class E extends s.CommonUiSectionClass{_not_freeze(t,e){this.log.errorFalledCode(e,t),t==o.ZunoSapiClassStatus.NO_FREEZE&&(this.log.errorFalled(n.ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR),this.re_begin_func(!0))}_board_info(){this.log.infoStart(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);const t=this.zuno.getBoardInfo();if(t.status!=o.ZunoSapiClassStatus.OK)return this.log.errorFalledCode(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO,t.status),!1;this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_TYPE,n.ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE,this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE),""),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_VERSION,n.ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE,(0,r.versionNumberToStringSlave)(t.version),"");const e=new Date(1e3*t.build_ts);this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP,n.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE,e.toLocaleString(),""),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_UUID,n.ControllerUiLangClassId.TABLE_NAME_UUID_TITLE,(0,r.arrayToStringHex)(t.chip_uuid),""),null!=t.home_id&&this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_HOME,n.ControllerUiLangClassId.TABLE_NAME_HOME_TITLE,(0,r.numberToStringHex)(t.home_id),""),null!=t.node_id&&this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_NODE,n.ControllerUiLangClassId.TABLE_NAME_NODE_TITLE,t.node_id.toString(10),"");const _=(0,r.conv2Decimal)(t.s2_pub," - "),i=document.createElement("button");if(i.textContent=this.locale.getLocale(n.ControllerUiLangClassId.BUTTON_COPY_DSK),i.title=this.locale.getLocale(n.ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE),i.addEventListener("click",(()=>{navigator.clipboard.writeText(_)})),i.type="button",this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_DSK,n.ControllerUiLangClassId.TABLE_NAME_DSK_TITLE,""+_.substring(0,5)+""+_.substring(5),i),null!=t.smart_qr){const e=document.createElement("span"),_={text:t.smart_qr,width:128,height:128,colorDark:"#000000",colorLight:"#ffffff",correctLevel:1};try{new a.QRCode(e,_)}catch(_){e.textContent=t.smart_qr}this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_QR_CODE,n.ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE,e,"")}return this.log.infoDone(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO),!0}_region_change(t){const e=this.event_get_element_select(t);null!=e&&(this.region_new=e.value,this.common_button_atrr(this.region_el_button,n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE,this.region_new==this.region_current))}_region_click(){return i(this,void 0,void 0,(function*(){if(1==this.is_busy())return;this.common_button_atrr(this.region_el_button,n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE,!0),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_REGION);const t=yield this.zuno.setRegion(this.region_new);if(t==o.ZunoSapiClassStatus.OK)return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_REGION),void(this.region_current=this.region_new);this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_SET_REGION,t),this.common_button_atrr(this.region_el_button,n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE,!1),this._not_freeze(t,n.ControllerUiLangClassId.MESSAGE_SET_REGION)}))}_region_init(){let t,e;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_REGION);const _=this.zuno.getRegion();if(_.status!=o.ZunoSapiClassStatus.OK)return this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_REGION,_.status),!1;for(this.region_current=_.region,this.region_new=_.region,this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_REGION),t=0,e="";t<_.region_array.length;)e=_.region_array[t]==_.region?e+'":e+"",t++;const i=document.createElement("select");return i.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE),i.innerHTML=e,i.addEventListener("change",(t=>{this._region_change(t)})),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_REGION,n.ControllerUiLangClassId.TABLE_NAME_REGION_TITLE,i,this.region_el_button),this.common_button_atrr(this.region_el_button,n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE,this.region_new==this.region_current),!0}_power_change(t){const e=this.event_get_element_input(t);null!=e&&(this.power_new=Number(e.value),this.common_button_atrr(this.power_el_button,n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE,this.power_new==this.power_current))}_power_click(){return i(this,void 0,void 0,(function*(){if(1==this.is_busy())return;this.common_button_atrr(this.power_el_button,n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE,!0),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_POWER);const t=yield this.zuno.setPower(this.power_new);if(t==o.ZunoSapiClassStatus.OK)return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_POWER),void(this.power_current=this.power_new);this.common_button_atrr(this.power_el_button,n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE,!1),this._not_freeze(t,n.ControllerUiLangClassId.MESSAGE_SET_POWER)}))}_power_init(){return i(this,void 0,void 0,(function*(){this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_POWER);const t=this.zuno.getPower();if(t.status!=o.ZunoSapiClassStatus.OK)return this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_POWER,t.status),!1;this.power_new=t.power_raw,this.power_current=t.power_raw;const e=document.createElement("span"),_=document.createElement("input");return _.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE),_.type="number",_.min=t.min.toString(),_.max=t.max.toString(),_.step=t.step.toString(),_.value=t.power_raw.toString(),_.addEventListener("change",(t=>{this._power_change(t)})),e.appendChild(_),e.appendChild(document.createElement("span")),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_POWER,n.ControllerUiLangClassId.TABLE_NAME_POWER_TITLE,e,this.power_el_button),this.common_button_atrr(this.power_el_button,n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE,this.power_new==this.power_current),this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_POWER),!0}))}_controller_default_click(t){return i(this,void 0,void 0,(function*(){if(1==this.is_busy())return;const e=this.event_get_element_button(t);if(null==e)return;if(1!=window.confirm(this.locale.getLocale(n.ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING)))return;this.common_button_atrr(e,n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE,!0),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_SET_DEFAULT);const _=yield this.zuno.setDefault();if(this.common_button_atrr(e,n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE,!1),_==o.ZunoSapiClassStatus.OK)return this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_SET_DEFAULT),this.zuno.lock(),yield(0,r.sleep)(1e3),this.zuno.unlock(),void this.re_begin_func(!0);this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_SET_DEFAULT,_)}))}_include_exclude_get_test_timout(t){return this.INCLUDE_EXCLUDE_DEFAULT}_include_exclude_get_storage(){return this._include_exclude_get_test_timout(localStorage.getItem(l.ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT))}_include_exclude_change(t){const e=this.event_get_element_input(t);null!=e&&localStorage.setItem(l.ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT,this._include_exclude_get_test_timout(e.value).toString())}_include_exclude_progress(t){this.el_container_include_exlude.innerHTML='
'+this.locale.getLocale(t)+"
"}_include_exclude_message_info(t){this.el_container_include_exlude.innerHTML='
'+this.locale.getLocale(t)+"
"}_include_exclude_message_warning(t){this.el_container_include_exlude.innerHTML='
'+this.locale.getLocale(t)+"
"}_include_exclude_timout_show(){this.el_container_include_exlude.innerHTML=""}_include_exclude_click_end(t,e,_){null!=e&&this.log.errorFalledCode(e,_),this.common_button_atrr(t,n.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE,!1),this._include_exclude_timout_show()}_include_exclude_click_start_stop_question(){return i(this,void 0,void 0,(function*(){return new Promise((t=>{this.el_container_include_exlude.innerHTML="";const e=document.createElement("span");e.textContent=this.locale.getLocale(n.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE),e.title=this.locale.getLocale(n.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE),e.className="ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button";const _=document.createElement("button");_.textContent=this.locale.getLocale(n.ControllerUiLangClassId.PROCESS_CONTINUE),_.title=this.locale.getLocale(n.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE),_.type="button",_.className="ZUnoRazberryModalContentSection_migration_action_button";const o=document.createElement("button");o.textContent=this.locale.getLocale(n.ControllerUiLangClassId.PROCESS_STOP),o.title=this.locale.getLocale(n.ControllerUiLangClassId.PROCESS_STOP_TITLE),o.type="button",o.className="ZUnoRazberryModalContentSection_migration_action_button",o.addEventListener("click",(()=>i(this,void 0,void 0,(function*(){t(!1)})))),_.addEventListener("click",(()=>i(this,void 0,void 0,(function*(){t(!0)})))),this.el_container_include_exlude.appendChild(e),this.el_container_include_exlude.appendChild(_),this.el_container_include_exlude.appendChild(o)}))}))}_include_exclude_click(t){return i(this,void 0,void 0,(function*(){let e;if(1==this.is_busy())return;const _=this.event_get_element_button(t);if(null==_)return;this.common_button_atrr(_,n.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE,!0);if(0!=(yield this._include_exclude_click_start_stop_question()))if(this._include_exclude_progress(n.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT),e=yield this.zuno.enableNif(),e==o.ZunoSapiClassStatus.OK)if(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN),e=yield this.zuno.enableEvent(),e==o.ZunoSapiClassStatus.OK){switch(this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN),this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_START_LEARN),e=yield this.zuno.enableLearn(this._include_exclude_get_storage()),this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_START_LEARN),e){case o.ZunoSapiClassStatus.TIMEOUT:this.log.info(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT),this._include_exclude_message_info(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT),yield(0,r.sleep)(3e3);break;case o.ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART:default:return this.log.warning(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART),this._include_exclude_message_warning(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART),yield(0,r.sleep)(3e3),void this.re_begin_func(!0);case o.ZunoSapiClassStatus.LEARN_EXCLUDE:return this.log.info(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART),this._include_exclude_message_info(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART),yield(0,r.sleep)(3e3),void this.re_begin_func(!1);case o.ZunoSapiClassStatus.LEARN_INCLUDE:return this.log.info(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART),this._include_exclude_message_info(n.ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART),yield(0,r.sleep)(3e3),void this.re_begin_func(!1)}this._include_exclude_click_end(_,null,o.ZunoSapiClassStatus.OK)}else this._include_exclude_click_end(_,n.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN,e);else this._include_exclude_click_end(_,n.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT,e);else this._include_exclude_click_end(_,null,o.ZunoSapiClassStatus.OK)}))}_include_exclude_init(){if(this.zuno.isSupportIncludeExclude()!=o.ZunoSapiClassStatus.OK)return!1;const t=document.createElement("button");return t.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE),t.type="button",t.textContent=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON),t.addEventListener("click",(t=>{this._include_exclude_click(t)})),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE,n.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE,this.el_container_include_exlude,t),this._include_exclude_timout_show(),!0}_controller_default_init(){if(this.zuno.isSupportResetDefault()!=o.ZunoSapiClassStatus.OK)return!1;const t=document.createElement("button");return t.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE),t.type="button",t.textContent=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON),t.addEventListener("click",(t=>{this._controller_default_click(t)})),this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT,n.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE,"",t),!0}_begin(){return i(this,void 0,void 0,(function*(){let t;return t=!1,1==this._board_info()&&(t=!0),1==this._region_init()&&(t=!0),1==(yield this._power_init())&&(t=!0),1==this._include_exclude_init()&&(t=!0),1==this._controller_default_init()&&(t=!0),t}))}_end(){return i(this,void 0,void 0,(function*(){this.el_container_include_exlude.innerHTML=""}))}_constructor_button(t,e){const _=document.createElement("button");return _.textContent=this.locale.getLocale(t),_.addEventListener("click",e),_.type="button",_}constructor(t,e,_,o,s){super(t,e,_,o,n.ControllerUiLangClassId.BOARD_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.INCLUDE_EXCLUDE_DEFAULT=30,this.INCLUDE_EXCLUDE_MIN=5,this.INCLUDE_EXCLUDE_MAX=255,this.region_current="",this.region_new="",this.power_current=0,this.power_new=0,this.el_container_include_exlude=document.createElement("span"),this.el_timout_include_exlude=document.createElement("span"),this.zuno=_,this.re_begin_func=s,this.power_el_button=this._constructor_button(n.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON,(()=>{this._power_click()})),this.region_el_button=this._constructor_button(n.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON,(()=>{this._region_click()}));const r=document.createElement("input");r.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE),r.type="number",r.min=this.INCLUDE_EXCLUDE_MIN.toString(),r.max=this.INCLUDE_EXCLUDE_MAX.toString(),r.step="1",r.value=this._include_exclude_get_storage().toString(),r.addEventListener("change",(t=>{this._include_exclude_change(t)})),this.el_timout_include_exlude.appendChild(r),this.el_timout_include_exlude.appendChild(document.createElement("span"))}}e.SlaveUiSectionInfoClass=E},139:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.SlaveUiSectionLicenseClass=void 0;const n=_(186),o=_(782),s=_(455),r=_(33),a=_(408);class l extends s.CommonUiSectionClass{_license_init(){let t,e;this.log.infoStart(n.ControllerUiLangClassId.MESSAGE_READ_LICENSE);const _=this.zuno.getBoardInfo();if(_.status!=o.ZunoSapiClassStatus.OK)return this.log.errorFalledCode(n.ControllerUiLangClassId.MESSAGE_READ_LICENSE,_.status),!1;if(null==_.license)return this.log.errorUnsupport(n.ControllerUiLangClassId.MESSAGE_READ_LICENSE),!1;this.log.infoDone(n.ControllerUiLangClassId.MESSAGE_READ_LICENSE);const i=(0,r.arrayToStringHex)(_.chip_uuid),s='link';for(t in this.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS,n.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE,s,""),_.license.lic_flags)e=1==_.license.lic_flags[t].active?a.TABLE_NAME_LICENSE_YES:a.TABLE_NAME_LICENSE_NO,this.create_tr_el(_.license.lic_flags[t].name+":",_.license.lic_flags[t].title,e,"");return!0}_begin(){return i(this,void 0,void 0,(function*(){let t;return t=!1,1==this._license_init()&&(t=!0),t}))}_end(){return i(this,void 0,void 0,(function*(){}))}constructor(t,e,_,o,s){super(t,e,_,o,n.ControllerUiLangClassId.LICENSE_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.zuno=_,this.re_begin_func=s}}e.SlaveUiSectionLicenseClass=l},315:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.SlaveUiSectionUpdateClass=void 0;const n=_(186),o=_(782),s=_(455),r=_(239),a=_(33),l=_(408),E=_(963);class T extends s.CommonUiSectionClass{static getInfoUrlPaket(t,e){t.infoStart(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);const _=e.getBoardInfo();if(_.status!=o.ZunoSapiClassStatus.OK)return void t.errorFalledCode(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO,_.status);t.infoDone(n.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);return{app:{version:_.version,version_name:(0,a.versionNumberToStringSlave)(_.version),type:E.SapiClassDetectType.ZUNO,update:!0,update_type:e.isSupportUpdateBootloader()==o.ZunoSapiClassStatus.OK,data:[]},boot:{version:_.boot_version,version_name:(0,a.versionNumberToString)(_.boot_version),type:E.SapiClassDetectType.UNKNOWN,update:!1,update_type:!1,data:[]},url:"vendorId=327&appVersionMajor="+(_.version>>16&65535).toString()+"&appVersionMinor="+(65535&_.version).toString()+"&bootloaderVersion="+_.boot_version.toString()+"&org_family="+_.chip.keys_hash.toString()+"&fw_family="+E.SapiClassDetectType.ZUNO.toString()+"&chip_family="+_.chip.chip_family.toString()+"&chip_id="+_.chip.chip_type.toString()+"&zway="+l.ControllerUiDefineClass.NAME_APP_VERSION_FULL+"&uuid="+(0,a.arrayToStringHex)(_.chip_uuid)}}_update_init(){const t=T.getInfoUrlPaket(this.log,this.zuno);return null!=t&&(this.update.info_download_xhr(t),!0)}_begin(){return i(this,void 0,void 0,(function*(){return this._update_init()}))}_end(){return i(this,void 0,void 0,(function*(){this.update.end()}))}_update_firmware(t,e,_){return i(this,void 0,void 0,(function*(){return yield this.zuno.updateFirmware(t,e,_)}))}constructor(t,e,_,o,s){super(t,e,_,o,n.ControllerUiLangClassId.UPDATE_INFO_HEADER,(()=>i(this,void 0,void 0,(function*(){return yield this._begin()}))),(()=>i(this,void 0,void 0,(function*(){return yield this._end()})))),this.zuno=_,this.update=new r.UpdateUiSectionClass(o,e,this,s,((t,e,_)=>i(this,void 0,void 0,(function*(){return yield this._update_firmware(t,e,_)}))),null)}}e.SlaveUiSectionUpdateClass=T},239:function(t,e,_){"use strict";var i=this&&this.__awaiter||function(t,e,_,i){return new(_||(_=Promise))((function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function r(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof _?e:new _((function(t){t(e)}))).then(s,r)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.UpdateUiSectionClass=void 0;const n=_(186),o=_(455),s=_(408),r=_(963),a=_(33);class l extends o.CommonUiSectionHtmlClass{_update_change(t,e,_){const i=this.event_get_element_select(t);null!=i&&(_.url_new=i.value,this.common_button_atrr(_.el_button,e,_.url_new==_.url_current))}_progress(t,e){t.el_span.innerHTML='
'+this.locale.getLocale(e)+"
"}_end_struct(t){t.url_current="",t.url_new="",t.el_button.disabled=!0,this._progress(t,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO)}static updateProcess(t,e,_,o,s,a,l){return i(this,void 0,void 0,(function*(){l.infoStart(t);const i=document.createElement("progress"),E=document.createElement("span");i.setAttribute("max","100"),e.innerHTML="",e.appendChild(i),e.appendChild(E),i.setAttribute("value","00");const T=yield s(_,(t=>{i.setAttribute("value",t.toFixed().toString()),E.textContent=" "+t.toFixed(2).padStart(5,"0")+"%",t>=100&&(e.innerHTML='
'+a.getLocale(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE)+"
")}),o);return e.innerHTML="",T!=r.SapiClassStatus.OK?(l.errorFalledCode(t,T),!1):(l.infoDone(t),!0)}))}static downloadFile(t,e,_){return i(this,void 0,void 0,(function*(){return new Promise((i=>{_.infoStart(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE),e=l.URL_UPDATE+e;const o=()=>{t.timer_id=void 0,t.xhr.open("POST",e,!0),t.xhr.responseType="arraybuffer",t.xhr.timeout=l.firmware_xhr_timout,t.xhr.ontimeout=()=>{_.errorXhrTimeout(e),_.errorFalled(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE),t.timer_id=window.setTimeout(o,l.firmware_xhr_timer_timout)},t.xhr.onerror=()=>{_.errorXhrError(e),_.errorFalled(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE),t.timer_id=window.setTimeout(o,l.firmware_xhr_timer_timout)},t.xhr.onload=()=>{_.infoDone(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE);const e=new Uint8Array(t.xhr.response);i(e)},t.xhr.send()};t.timer_id=window.setTimeout(o,0)}))}))}_download_xhr_start(t,e,_){return i(this,void 0,void 0,(function*(){let o,s;if(null==e)return;const r=t.info;if(null==r)return void this.log.error(n.ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT);for(o=0;oi(this,void 0,void 0,(function*(){this.download_process.timer_id=void 0,1!=this.commom_ui.is_busy()?(yield l.updateProcess(_,t.el_span,a,s,e,this.locale,this.log),this.re_begin_func(!0)):this.download_process.timer_id=window.setTimeout(E,this.bus_timout)}));this._progress(t,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL),this.download_process.timer_id=window.setTimeout(E,0)}))}_constructor_struct(t,e,_){const i=document.createElement("span"),n=document.createElement("button");n.textContent=this.locale.getLocale(t),n.addEventListener("click",e),n.type="button";const o=document.createElement("select");o.addEventListener("change",_);return{url_current:"",url_new:"",el_span:i,el_button:n,el_select:o}}_init_select(t,e){let _,i;const o=t.info;if(null!=o){for(t.el_span.innerHTML="",t.el_span.appendChild(t.el_select),_=0,i="";_'+o.data[_].version_name+"",_++;t.el_select.innerHTML=i,this.common_button_atrr(t.el_button,"",!0),0==o.data.length?(t.el_select.innerHTML=i,t.el_select.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE),t.el_select.disabled=!0):t.el_select.title=this.locale.getLocale(e)}else this.log.error(n.ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT)}_update_beta_change_all_select(t,e,_){let i;const o=e.querySelectorAll("option");if(i=0,o.forEach((e=>{null!=e.getAttribute("selected")&&e.removeAttribute("selected"),0==t&&null!=e.getAttribute(this.SELECTOR_BETA)||(null!=e.getAttribute(this.SELECTOR_DEFAULT)&&e.setAttribute("selected",""),i++)})),0==t?e.setAttribute(this.SELECTOR_BETA,""):e.removeAttribute(this.SELECTOR_BETA),i>1)return e.title=this.locale.getLocale(_),void e.removeAttribute("disabled");e.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE),e.setAttribute("disabled","")}_update_beta_change_all(){let t;t=localStorage.getItem(s.ControllerUiDefineClass.KEY_UPDATE_BETA)===s.ControllerUiDefineClass.STORAGE_VALUE_TRUE,this._update_beta_change_all_select(t,this.firmware.el_select,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE),this.firmware.url_new="",this.common_button_atrr(this.firmware.el_button,"",!0),this._update_beta_change_all_select(t,this.bootloader.el_select,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE),this.bootloader.url_new="",this.common_button_atrr(this.bootloader.el_button,"",!0)}_update_beta_change(t){const e=this.event_get_element_input(t);null!=e&&(localStorage.setItem(s.ControllerUiDefineClass.KEY_UPDATE_BETA,1==e.checked?s.ControllerUiDefineClass.STORAGE_VALUE_TRUE:s.ControllerUiDefineClass.STORAGE_VALUE_FALSE),this._update_beta_change_all())}end(){this._end_struct(this.firmware),this._end_struct(this.bootloader),this.download_process.xhr.abort(),null!=this.download_process.timer_id&&(window.clearTimeout(this.download_process.timer_id),this.download_process.timer_id=void 0)}init_select_firmware(){this._init_select(this.firmware,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE)}init_select_bootloader(){this._init_select(this.bootloader,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE)}static _downloadInfo_process(t,e,_,i){let o,s,E,T;o=0;const d=[];for(;o{const s=l.URL_UPDATE_LIST+e.url+"&token=internal",r=()=>{t.timer_id=void 0,_.infoStart(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO),t.xhr.open("POST",s,!0),t.xhr.responseType="json",t.xhr.timeout=l.info_xhr_timeout,t.xhr.ontimeout=()=>{_.errorXhrTimeout(s),_.errorFalled(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO),t.timer_id=window.setTimeout(r,l.info_xhr_timer_timeout)},t.xhr.onerror=()=>{_.errorXhrError(s),_.errorFalled(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO),t.timer_id=window.setTimeout(r,l.info_xhr_timer_timeout)},t.xhr.onload=()=>{try{l._downloadInfo_process(t.xhr.response,e.app,e.boot,o)}catch(e){return _.errorXhrInvalidData(s),_.errorFalled(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO),void(t.timer_id=window.setTimeout(r,l.info_xhr_timer_timeout))}_.infoDone(n.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO),i()},t.xhr.send()};t.timer_id=window.setTimeout(r,0)}))}))}info_download_xhr(t){return i(this,void 0,void 0,(function*(){this.firmware.info=t.app,this.bootloader.info=t.boot;const e=localStorage.getItem(s.ControllerUiDefineClass.KEY_UPDATE_BETA),_=document.createElement("input");_.title=this.locale.getLocale(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE),_.type="checkbox",e===s.ControllerUiDefineClass.STORAGE_VALUE_TRUE&&(_.checked=!0),_.addEventListener("change",(t=>{this._update_beta_change(t)})),this.commom_ui.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE,_,""),this.commom_ui.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE,this.firmware.el_span,this.firmware.el_button),this.commom_ui.create_tr_el(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE,this.bootloader.el_span,this.bootloader.el_button),yield l.downloadInfo(this.download_process,t,this.log,this.locale),this.init_select_firmware(),this.init_select_bootloader(),this._update_beta_change_all()}))}constructor(t,e,_,i,o,s){super(e),this.SELECTOR_BETA="data-beta",this.SELECTOR_DEFAULT="data-default",this.bus_timout=3e3,this.download_process={xhr:new XMLHttpRequest},this.log=t,this.commom_ui=_,this.re_begin_func=i,this.firmware=this._constructor_struct(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON,(()=>{this._download_xhr_start(this.firmware,o,n.ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE)}),(t=>{this._update_change(t,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE,this.firmware)})),this.bootloader=this._constructor_struct(n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON,(()=>{this._download_xhr_start(this.bootloader,s,n.ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER)}),(t=>{this._update_change(t,n.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE,this.bootloader)}))}}e.UpdateUiSectionClass=l,l.URL_UPDATE="https://service.z-wave.me/expertui/uzb/",l.URL_UPDATE_LIST=l.URL_UPDATE+"?",l.JSON_UPDATE_DISABLED="disabled",l.JSON_UPDATE_TYPE_FIRMWARE="firmware",l.JSON_UPDATE_TYPE_BOOTLOADER="bootloader",l.info_xhr_timeout=5e3,l.info_xhr_timer_timeout=3e3,l.firmware_xhr_timout=1e4,l.firmware_xhr_timer_timout=3e3},408:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TABLE_NAME_LICENSE_NO=e.TABLE_NAME_LICENSE_YES=e.ControllerUiDefineClass=void 0;e.TABLE_NAME_LICENSE_YES='';var _;e.TABLE_NAME_LICENSE_NO='',function(t){t.NAME_APP="SerialAPIWebTools",t.NAME_APP_VERSION_FULL="SerialAPIWebTools 00.00.11",t.KEY_INCLUDE_EXCLUDE_TIMEOUT="SerialAPIWebTools_info_include_exlude_timout",t.KEY_BAUDRATE="SerialAPIWebTools_baudrate_cache",t.KEY_DETECTION_SYNC_MANUAL="SerialAPIWebTools_detection_sync_manual",t.KEY_UPDATE_BETA="SerialAPIWebTools_update_beta",t.STORAGE_VALUE_TRUE="true",t.STORAGE_VALUE_FALSE="false"}(_||(e.ControllerUiDefineClass=_={}))},831:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"NIL",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(e,"v1",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"v3",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"v4",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"v5",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"validate",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,"version",{enumerable:!0,get:function(){return a.default}});var i=d(_(518)),n=d(_(948)),o=d(_(73)),s=d(_(805)),r=d(_(808)),a=d(_(775)),l=d(_(37)),E=d(_(910)),T=d(_(792));function d(t){return t&&t.__esModule?t:{default:t}}},311:(t,e)=>{"use strict";function _(t){return 14+(t+64>>>9<<4)+1}function i(t,e){const _=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(_>>16)<<16|65535&_}function n(t,e,_,n,o,s){return i((r=i(i(e,t),i(n,s)))<<(a=o)|r>>>32-a,_);var r,a}function o(t,e,_,i,o,s,r){return n(e&_|~e&i,t,e,o,s,r)}function s(t,e,_,i,o,s,r){return n(e&i|_&~i,t,e,o,s,r)}function r(t,e,_,i,o,s,r){return n(e^_^i,t,e,o,s,r)}function a(t,e,_,i,o,s,r){return n(_^(e|~i),t,e,o,s,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=function(t){if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=new Uint8Array(e.length);for(let _=0;_>5]>>>n%32&255,o=parseInt(i.charAt(_>>>4&15)+i.charAt(15&_),16);e.push(o)}return e}(function(t,e){t[e>>5]|=128<>5]|=(255&t[_/8])<<_%32;return i}(t),8*t.length))};e.default=l},140:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var _={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};e.default=_},808:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default="00000000-0000-0000-0000-000000000000"},792:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,n=(i=_(37))&&i.__esModule?i:{default:i};var o=function(t){if(!(0,n.default)(t))throw TypeError("Invalid UUID");let e;const _=new Uint8Array(16);return _[0]=(e=parseInt(t.slice(0,8),16))>>>24,_[1]=e>>>16&255,_[2]=e>>>8&255,_[3]=255&e,_[4]=(e=parseInt(t.slice(9,13),16))>>>8,_[5]=255&e,_[6]=(e=parseInt(t.slice(14,18),16))>>>8,_[7]=255&e,_[8]=(e=parseInt(t.slice(19,23),16))>>>8,_[9]=255&e,_[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,_[11]=e/4294967296&255,_[12]=e>>>24&255,_[13]=e>>>16&255,_[14]=e>>>8&255,_[15]=255&e,_};e.default=o},656:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},858:(t,e)=>{"use strict";let _;Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){if(!_&&(_="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!_))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return _(i)};const i=new Uint8Array(16)},42:(t,e)=>{"use strict";function _(t,e,_,i){switch(t){case 0:return e&_^~e&i;case 1:case 3:return e^_^i;case 2:return e&_^e&i^_&i}}function i(t,e){return t<>>32-e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=function(t){const e=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let _=0;_>>0;T=E,E=l,l=i(a,30)>>>0,a=s,s=r}n[0]=n[0]+s>>>0,n[1]=n[1]+a>>>0,n[2]=n[2]+l>>>0,n[3]=n[3]+E>>>0,n[4]=n[4]+T>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]};e.default=n},910:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.unsafeStringify=s;var i,n=(i=_(37))&&i.__esModule?i:{default:i};const o=[];for(let t=0;t<256;++t)o.push((t+256).toString(16).slice(1));function s(t,e=0){return o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]}var r=function(t,e=0){const _=s(t,e);if(!(0,n.default)(_))throw TypeError("Stringified UUID is invalid");return _};e.default=r},518:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,n=(i=_(858))&&i.__esModule?i:{default:i},o=_(910);let s,r,a=0,l=0;var E=function(t,e,_){let i=e&&_||0;const E=e||new Array(16);let T=(t=t||{}).node||s,d=void 0!==t.clockseq?t.clockseq:r;if(null==T||null==d){const e=t.random||(t.rng||n.default)();null==T&&(T=s=[1|e[0],e[1],e[2],e[3],e[4],e[5]]),null==d&&(d=r=16383&(e[6]<<8|e[7]))}let u=void 0!==t.msecs?t.msecs:Date.now(),c=void 0!==t.nsecs?t.nsecs:l+1;const C=u-a+(c-l)/1e4;if(C<0&&void 0===t.clockseq&&(d=d+1&16383),(C<0||u>a)&&void 0===t.nsecs&&(c=0),c>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");a=u,l=c,r=d,u+=122192928e5;const I=(1e4*(268435455&u)+c)%4294967296;E[i++]=I>>>24&255,E[i++]=I>>>16&255,E[i++]=I>>>8&255,E[i++]=255&I;const N=u/4294967296*1e4&268435455;E[i++]=N>>>8&255,E[i++]=255&N,E[i++]=N>>>24&15|16,E[i++]=N>>>16&255,E[i++]=d>>>8|128,E[i++]=255&d;for(let t=0;t<6;++t)E[i+t]=T[t];return e||(0,o.unsafeStringify)(E)};e.default=E},948:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=o(_(25)),n=o(_(311));function o(t){return t&&t.__esModule?t:{default:t}}var s=(0,i.default)("v3",48,n.default);e.default=s},25:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.URL=e.DNS=void 0,e.default=function(t,e,_){function i(t,i,s,r){var a;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let _=0;_{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=s(_(140)),n=s(_(858)),o=_(910);function s(t){return t&&t.__esModule?t:{default:t}}var r=function(t,e,_){if(i.default.randomUUID&&!e&&!t)return i.default.randomUUID();const s=(t=t||{}).random||(t.rng||n.default)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e){_=_||0;for(let t=0;t<16;++t)e[_+t]=s[t];return e}return(0,o.unsafeStringify)(s)};e.default=r},805:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=o(_(25)),n=o(_(42));function o(t){return t&&t.__esModule?t:{default:t}}var s=(0,i.default)("v5",80,n.default);e.default=s},37:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,n=(i=_(656))&&i.__esModule?i:{default:i};var o=function(t){return"string"==typeof t&&n.default.test(t)};e.default=o},775:(t,e,_)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i,n=(i=_(37))&&i.__esModule?i:{default:i};var o=function(t){if(!(0,n.default)(t))throw TypeError("Invalid UUID");return parseInt(t.slice(14,15),16)};e.default=o},342:(t,e,_)=>{"use strict";var i;_.r(e),_.d(e,{QRCode:()=>i}),function(){function t(t){this.mode=_.MODE_8BIT_BYTE,this.data=t,this.parsedData=[];for(var e=0,i=this.data.length;e65536?(n[0]=240|(1835008&o)>>>18,n[1]=128|(258048&o)>>>12,n[2]=128|(4032&o)>>>6,n[3]=128|63&o):o>2048?(n[0]=224|(61440&o)>>>12,n[1]=128|(4032&o)>>>6,n[2]=128|63&o):o>128?(n[0]=192|(1984&o)>>>6,n[1]=128|63&o):n[0]=o,this.parsedData.push(n)}this.parsedData=Array.prototype.concat.apply([],this.parsedData),this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function e(t,e){this.typeNumber=t,this.errorCorrectLevel=e,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}t.prototype={getLength:function(t){return this.parsedData.length},write:function(t){for(var e=0,_=this.parsedData.length;e<_;e++)t.put(this.parsedData[e],8)}},e.prototype={addData:function(e){var _=new t(e);this.dataList.push(_),this.dataCache=null},isDark:function(t,e){if(t<0||this.moduleCount<=t||e<0||this.moduleCount<=e)throw new Error(t+","+e);return this.modules[t][e]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(t,_){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var i=0;i=7&&this.setupTypeNumber(t),null==this.dataCache&&(this.dataCache=e.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,_)},setupPositionProbePattern:function(t,e){for(var _=-1;_<=7;_++)if(!(t+_<=-1||this.moduleCount<=t+_))for(var i=-1;i<=7;i++)e+i<=-1||this.moduleCount<=e+i||(this.modules[t+_][e+i]=0<=_&&_<=6&&(0==i||6==i)||0<=i&&i<=6&&(0==_||6==_)||2<=_&&_<=4&&2<=i&&i<=4)},getBestMaskPattern:function(){for(var t=0,e=0,_=0;_<8;_++){this.makeImpl(!0,_);var i=u.getLostPoint(this);(0==_||t>i)&&(t=i,e=_)}return e},createMovieClip:function(t,e,_){var i=t.createEmptyMovieClip(e,_);this.make();for(var n=0;n>_&1);this.modules[Math.floor(_/3)][_%3+this.moduleCount-8-3]=i}for(_=0;_<18;_++){i=!t&&1==(e>>_&1);this.modules[_%3+this.moduleCount-8-3][Math.floor(_/3)]=i}},setupTypeInfo:function(t,e){for(var _=this.errorCorrectLevel<<3|e,i=u.getBCHTypeInfo(_),n=0;n<15;n++){var o=!t&&1==(i>>n&1);n<6?this.modules[n][8]=o:n<8?this.modules[n+1][8]=o:this.modules[this.moduleCount-15+n][8]=o}for(n=0;n<15;n++){o=!t&&1==(i>>n&1);n<8?this.modules[8][this.moduleCount-n-1]=o:n<9?this.modules[8][15-n-1+1]=o:this.modules[8][15-n-1]=o}this.modules[this.moduleCount-8][8]=!t},mapData:function(t,e){for(var _=-1,i=this.moduleCount-1,n=7,o=0,s=this.moduleCount-1;s>0;s-=2)for(6==s&&s--;;){for(var r=0;r<2;r++)if(null==this.modules[i][s-r]){var a=!1;o>>n&1)),u.getMask(e,i,s-r)&&(a=!a),this.modules[i][s-r]=a,-1==--n&&(o++,n=7)}if((i+=_)<0||this.moduleCount<=i){i-=_,_=-_;break}}}},e.PAD0=236,e.PAD1=17,e.createData=function(t,_,i){for(var n=N.getRSBlocks(t,_),o=new A,s=0;s8*a)throw new Error("code length overflow. ("+o.getLengthInBits()+">"+8*a+")");for(o.getLengthInBits()+4<=8*a&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(!1);for(;!(o.getLengthInBits()>=8*a||(o.put(e.PAD0,8),o.getLengthInBits()>=8*a));)o.put(e.PAD1,8);return e.createBytes(o,n)},e.createBytes=function(t,e){for(var _=0,i=0,n=0,o=new Array(e.length),s=new Array(e.length),r=0;r=0?d.get(c):0}}var C=0;for(E=0;E=0;)e^=u.G15<=0;)e^=u.G18<>>=1;return e},getPatternPosition:function(t){return u.PATTERN_POSITION_TABLE[t-1]},getMask:function(t,e,_){switch(t){case o:return(e+_)%2==0;case s:return e%2==0;case r:return _%3==0;case a:return(e+_)%3==0;case l:return(Math.floor(e/2)+Math.floor(_/3))%2==0;case E:return e*_%2+e*_%3==0;case T:return(e*_%2+e*_%3)%2==0;case d:return(e*_%3+(e+_)%2)%2==0;default:throw new Error("bad maskPattern:"+t)}},getErrorCorrectPolynomial:function(t){for(var e=new I([1],0),_=0;_5&&(_+=3+o-5)}for(i=0;i=256;)t-=255;return c.EXP_TABLE[t]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},C=0;C<8;C++)c.EXP_TABLE[C]=1<>>7-t%8&1)},put:function(t,e){for(var _=0;_>>e-_-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){var e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}};var S=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];function h(){var t=!1,e=navigator.userAgent;if(/android/i.test(e)){t=!0;var _=e.toString().match(/android ([0-9]\.[0-9])/i);_&&_[1]&&(t=parseFloat(_[1]))}return t}var L=function(){var t=function(t,e){this._el=t,this._htOption=e};return t.prototype.draw=function(t){var e=this._htOption,_=this._el,i=t.getModuleCount();Math.floor(e.width/i),Math.floor(e.height/i);function n(t,e){var _=document.createElementNS("http://www.w3.org/2000/svg",t);for(var i in e)e.hasOwnProperty(i)&&_.setAttribute(i,e[i]);return _}this.clear();var o=n("svg",{viewBox:"0 0 "+String(i)+" "+String(i),width:"100%",height:"100%",fill:e.colorLight});o.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),_.appendChild(o),o.appendChild(n("rect",{fill:e.colorLight,width:"100%",height:"100%"})),o.appendChild(n("rect",{fill:e.colorDark,width:"1",height:"1",id:"template"}));for(var s=0;s'],r=0;r");for(var a=0;a');s.push("")}s.push(""),_.innerHTML=s.join("");var l=_.childNodes[0],E=(e.width-l.offsetWidth)/2,T=(e.height-l.offsetHeight)/2;E>0&&T>0&&(l.style.margin=T+"px "+E+"px")},t.prototype.clear=function(){this._el.innerHTML=""},t}():function(){function t(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}if(null!=this&&this._android&&this._android<=2.1){var e=1/window.devicePixelRatio,_=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(t,i,n,o,s,r,a,l,E){if("nodeName"in t&&/img/i.test(t.nodeName))for(var T=arguments.length-1;T>=1;T--)arguments[T]=arguments[T]*e;else void 0===l&&(arguments[1]*=e,arguments[2]*=e,arguments[3]*=e,arguments[4]*=e);_.apply(this,arguments)}}function i(t,e){var _=this;if(_._fFail=e,_._fSuccess=t,null===_._bSupportDataURI){var i=document.createElement("img"),n=function(){_._bSupportDataURI=!1,_._fFail&&_._fFail.call(_)};return i.onabort=n,i.onerror=n,i.onload=function(){_._bSupportDataURI=!0,_._fSuccess&&_._fSuccess.call(_)},void(i.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==")}!0===_._bSupportDataURI&&_._fSuccess?_._fSuccess.call(_):!1===_._bSupportDataURI&&_._fFail&&_._fFail.call(_)}var n=function(t,e){this._bIsPainted=!1,this._android=h(),this._htOption=e,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=e.width,this._elCanvas.height=e.height,t.appendChild(this._elCanvas),this._el=t,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.alt="Scan me!",this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return n.prototype.draw=function(t){var e=this._elImage,_=this._oContext,i=this._htOption,n=t.getModuleCount(),o=i.width/n,s=i.height/n,r=Math.round(o),a=Math.round(s);e.style.display="none",this.clear();for(var l=0;lS.length)throw new Error("Too long data");return _}i=function(t,e){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:n.H},"string"==typeof e&&(e={text:e}),e)for(var _ in e)this._htOption[_]=e[_];"string"==typeof t&&(t=document.getElementById(t)),this._htOption.useSVG&&(R=L),this._android=h(),this._el=t,this._oQRCode=null,this._oDrawing=new R(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},i.prototype.makeCode=function(t){this._oQRCode=new e(O(t,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(t),this._oQRCode.make(),this._el.title=t,this._oDrawing.draw(this._oQRCode),this.makeImage()},i.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},i.prototype.clear=function(){this._oDrawing.clear()},i.CorrectLevel=n}()}},e={};function _(i){var n=e[i];if(void 0!==n)return n.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,_),o.exports}return _.d=(t,e)=>{for(var i in e)_.o(e,i)&&!_.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},_.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),_.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},_(783)})())); \ No newline at end of file diff --git a/controller_ui/beta/controller_ui.html b/controller_ui/beta/controller_ui.html new file mode 100644 index 0000000..994c6cd --- /dev/null +++ b/controller_ui/beta/controller_ui.html @@ -0,0 +1,8 @@ + + + + diff --git a/controller_ui/beta/controller_ui.js b/controller_ui/beta/controller_ui.js new file mode 100644 index 0000000..b6e6a53 --- /dev/null +++ b/controller_ui/beta/controller_ui.js @@ -0,0 +1,10547 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["ControllerUiLib"] = factory(); + else + root["ControllerUiLib"] = factory(); +})(self, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/aes-js/index.js": +/*!**************************************!*\ + !*** ./node_modules/aes-js/index.js ***! + \**************************************/ +/***/ (function(module) { + +/*! MIT License. Copyright 2015-2018 Richard Moore . See LICENSE.txt. */ +(function(root) { + "use strict"; + + function checkInt(value) { + return (parseInt(value) === value); + } + + function checkInts(arrayish) { + if (!checkInt(arrayish.length)) { return false; } + + for (var i = 0; i < arrayish.length; i++) { + if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) { + return false; + } + } + + return true; + } + + function coerceArray(arg, copy) { + + // ArrayBuffer view + if (arg.buffer && arg.name === 'Uint8Array') { + + if (copy) { + if (arg.slice) { + arg = arg.slice(); + } else { + arg = Array.prototype.slice.call(arg); + } + } + + return arg; + } + + // It's an array; check it is a valid representation of a byte + if (Array.isArray(arg)) { + if (!checkInts(arg)) { + throw new Error('Array contains invalid value: ' + arg); + } + + return new Uint8Array(arg); + } + + // Something else, but behaves like an array (maybe a Buffer? Arguments?) + if (checkInt(arg.length) && checkInts(arg)) { + return new Uint8Array(arg); + } + + throw new Error('unsupported array-like object'); + } + + function createArray(length) { + return new Uint8Array(length); + } + + function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) { + if (sourceStart != null || sourceEnd != null) { + if (sourceArray.slice) { + sourceArray = sourceArray.slice(sourceStart, sourceEnd); + } else { + sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd); + } + } + targetArray.set(sourceArray, targetStart); + } + + + + var convertUtf8 = (function() { + function toBytes(text) { + var result = [], i = 0; + text = encodeURI(text); + while (i < text.length) { + var c = text.charCodeAt(i++); + + // if it is a % sign, encode the following 2 bytes as a hex value + if (c === 37) { + result.push(parseInt(text.substr(i, 2), 16)) + i += 2; + + // otherwise, just the actual byte + } else { + result.push(c) + } + } + + return coerceArray(result); + } + + function fromBytes(bytes) { + var result = [], i = 0; + + while (i < bytes.length) { + var c = bytes[i]; + + if (c < 128) { + result.push(String.fromCharCode(c)); + i++; + } else if (c > 191 && c < 224) { + result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f))); + i += 2; + } else { + result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))); + i += 3; + } + } + + return result.join(''); + } + + return { + toBytes: toBytes, + fromBytes: fromBytes, + } + })(); + + var convertHex = (function() { + function toBytes(text) { + var result = []; + for (var i = 0; i < text.length; i += 2) { + result.push(parseInt(text.substr(i, 2), 16)); + } + + return result; + } + + // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html + var Hex = '0123456789abcdef'; + + function fromBytes(bytes) { + var result = []; + for (var i = 0; i < bytes.length; i++) { + var v = bytes[i]; + result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]); + } + return result.join(''); + } + + return { + toBytes: toBytes, + fromBytes: fromBytes, + } + })(); + + + // Number of rounds by keysize + var numberOfRounds = {16: 10, 24: 12, 32: 14} + + // Round constant words + var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; + + // S-box and Inverse S-box (S is for Substitution) + var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; + var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; + + // Transformations for encryption + var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; + var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; + var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; + var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; + + // Transformations for decryption + var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; + var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; + var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; + var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; + + // Transformations for decryption key expansion + var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; + var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; + var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; + var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; + + function convertToInt32(bytes) { + var result = []; + for (var i = 0; i < bytes.length; i += 4) { + result.push( + (bytes[i ] << 24) | + (bytes[i + 1] << 16) | + (bytes[i + 2] << 8) | + bytes[i + 3] + ); + } + return result; + } + + var AES = function(key) { + if (!(this instanceof AES)) { + throw Error('AES must be instanitated with `new`'); + } + + Object.defineProperty(this, 'key', { + value: coerceArray(key, true) + }); + + this._prepare(); + } + + + AES.prototype._prepare = function() { + + var rounds = numberOfRounds[this.key.length]; + if (rounds == null) { + throw new Error('invalid key size (must be 16, 24 or 32 bytes)'); + } + + // encryption round keys + this._Ke = []; + + // decryption round keys + this._Kd = []; + + for (var i = 0; i <= rounds; i++) { + this._Ke.push([0, 0, 0, 0]); + this._Kd.push([0, 0, 0, 0]); + } + + var roundKeyCount = (rounds + 1) * 4; + var KC = this.key.length / 4; + + // convert the key into ints + var tk = convertToInt32(this.key); + + // copy values into round key arrays + var index; + for (var i = 0; i < KC; i++) { + index = i >> 2; + this._Ke[index][i % 4] = tk[i]; + this._Kd[rounds - index][i % 4] = tk[i]; + } + + // key expansion (fips-197 section 5.2) + var rconpointer = 0; + var t = KC, tt; + while (t < roundKeyCount) { + tt = tk[KC - 1]; + tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ + (S[(tt >> 8) & 0xFF] << 16) ^ + (S[ tt & 0xFF] << 8) ^ + S[(tt >> 24) & 0xFF] ^ + (rcon[rconpointer] << 24)); + rconpointer += 1; + + // key expansion (for non-256 bit) + if (KC != 8) { + for (var i = 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + + // key expansion for 256-bit keys is "slightly different" (fips-197) + } else { + for (var i = 1; i < (KC / 2); i++) { + tk[i] ^= tk[i - 1]; + } + tt = tk[(KC / 2) - 1]; + + tk[KC / 2] ^= (S[ tt & 0xFF] ^ + (S[(tt >> 8) & 0xFF] << 8) ^ + (S[(tt >> 16) & 0xFF] << 16) ^ + (S[(tt >> 24) & 0xFF] << 24)); + + for (var i = (KC / 2) + 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + } + + // copy values into round key arrays + var i = 0, r, c; + while (i < KC && t < roundKeyCount) { + r = t >> 2; + c = t % 4; + this._Ke[r][c] = tk[i]; + this._Kd[rounds - r][c] = tk[i++]; + t++; + } + } + + // inverse-cipher-ify the decryption round key (fips-197 section 5.3) + for (var r = 1; r < rounds; r++) { + for (var c = 0; c < 4; c++) { + tt = this._Kd[r][c]; + this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^ + U2[(tt >> 16) & 0xFF] ^ + U3[(tt >> 8) & 0xFF] ^ + U4[ tt & 0xFF]); + } + } + } + + AES.prototype.encrypt = function(plaintext) { + if (plaintext.length != 16) { + throw new Error('invalid plaintext size (must be 16 bytes)'); + } + + var rounds = this._Ke.length - 1; + var a = [0, 0, 0, 0]; + + // convert plaintext to (ints ^ key) + var t = convertToInt32(plaintext); + for (var i = 0; i < 4; i++) { + t[i] ^= this._Ke[0][i]; + } + + // apply round transforms + for (var r = 1; r < rounds; r++) { + for (var i = 0; i < 4; i++) { + a[i] = (T1[(t[ i ] >> 24) & 0xff] ^ + T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ + T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T4[ t[(i + 3) % 4] & 0xff] ^ + this._Ke[r][i]); + } + t = a.slice(); + } + + // the last round is special + var result = createArray(16), tt; + for (var i = 0; i < 4; i++) { + tt = this._Ke[rounds][i]; + result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff; + } + + return result; + } + + AES.prototype.decrypt = function(ciphertext) { + if (ciphertext.length != 16) { + throw new Error('invalid ciphertext size (must be 16 bytes)'); + } + + var rounds = this._Kd.length - 1; + var a = [0, 0, 0, 0]; + + // convert plaintext to (ints ^ key) + var t = convertToInt32(ciphertext); + for (var i = 0; i < 4; i++) { + t[i] ^= this._Kd[0][i]; + } + + // apply round transforms + for (var r = 1; r < rounds; r++) { + for (var i = 0; i < 4; i++) { + a[i] = (T5[(t[ i ] >> 24) & 0xff] ^ + T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ + T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T8[ t[(i + 1) % 4] & 0xff] ^ + this._Kd[r][i]); + } + t = a.slice(); + } + + // the last round is special + var result = createArray(16), tt; + for (var i = 0; i < 4; i++) { + tt = this._Kd[rounds][i]; + result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff; + } + + return result; + } + + + /** + * Mode Of Operation - Electonic Codebook (ECB) + */ + var ModeOfOperationECB = function(key) { + if (!(this instanceof ModeOfOperationECB)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Electronic Code Block"; + this.name = "ecb"; + + this._aes = new AES(key); + } + + ModeOfOperationECB.prototype.encrypt = function(plaintext) { + plaintext = coerceArray(plaintext); + + if ((plaintext.length % 16) !== 0) { + throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); + } + + var ciphertext = createArray(plaintext.length); + var block = createArray(16); + + for (var i = 0; i < plaintext.length; i += 16) { + copyArray(plaintext, block, 0, i, i + 16); + block = this._aes.encrypt(block); + copyArray(block, ciphertext, i); + } + + return ciphertext; + } + + ModeOfOperationECB.prototype.decrypt = function(ciphertext) { + ciphertext = coerceArray(ciphertext); + + if ((ciphertext.length % 16) !== 0) { + throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); + } + + var plaintext = createArray(ciphertext.length); + var block = createArray(16); + + for (var i = 0; i < ciphertext.length; i += 16) { + copyArray(ciphertext, block, 0, i, i + 16); + block = this._aes.decrypt(block); + copyArray(block, plaintext, i); + } + + return plaintext; + } + + + /** + * Mode Of Operation - Cipher Block Chaining (CBC) + */ + var ModeOfOperationCBC = function(key, iv) { + if (!(this instanceof ModeOfOperationCBC)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Cipher Block Chaining"; + this.name = "cbc"; + + if (!iv) { + iv = createArray(16); + + } else if (iv.length != 16) { + throw new Error('invalid initialation vector size (must be 16 bytes)'); + } + + this._lastCipherblock = coerceArray(iv, true); + + this._aes = new AES(key); + } + + ModeOfOperationCBC.prototype.encrypt = function(plaintext) { + plaintext = coerceArray(plaintext); + + if ((plaintext.length % 16) !== 0) { + throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); + } + + var ciphertext = createArray(plaintext.length); + var block = createArray(16); + + for (var i = 0; i < plaintext.length; i += 16) { + copyArray(plaintext, block, 0, i, i + 16); + + for (var j = 0; j < 16; j++) { + block[j] ^= this._lastCipherblock[j]; + } + + this._lastCipherblock = this._aes.encrypt(block); + copyArray(this._lastCipherblock, ciphertext, i); + } + + return ciphertext; + } + + ModeOfOperationCBC.prototype.decrypt = function(ciphertext) { + ciphertext = coerceArray(ciphertext); + + if ((ciphertext.length % 16) !== 0) { + throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); + } + + var plaintext = createArray(ciphertext.length); + var block = createArray(16); + + for (var i = 0; i < ciphertext.length; i += 16) { + copyArray(ciphertext, block, 0, i, i + 16); + block = this._aes.decrypt(block); + + for (var j = 0; j < 16; j++) { + plaintext[i + j] = block[j] ^ this._lastCipherblock[j]; + } + + copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16); + } + + return plaintext; + } + + + /** + * Mode Of Operation - Cipher Feedback (CFB) + */ + var ModeOfOperationCFB = function(key, iv, segmentSize) { + if (!(this instanceof ModeOfOperationCFB)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Cipher Feedback"; + this.name = "cfb"; + + if (!iv) { + iv = createArray(16); + + } else if (iv.length != 16) { + throw new Error('invalid initialation vector size (must be 16 size)'); + } + + if (!segmentSize) { segmentSize = 1; } + + this.segmentSize = segmentSize; + + this._shiftRegister = coerceArray(iv, true); + + this._aes = new AES(key); + } + + ModeOfOperationCFB.prototype.encrypt = function(plaintext) { + if ((plaintext.length % this.segmentSize) != 0) { + throw new Error('invalid plaintext size (must be segmentSize bytes)'); + } + + var encrypted = coerceArray(plaintext, true); + + var xorSegment; + for (var i = 0; i < encrypted.length; i += this.segmentSize) { + xorSegment = this._aes.encrypt(this._shiftRegister); + for (var j = 0; j < this.segmentSize; j++) { + encrypted[i + j] ^= xorSegment[j]; + } + + // Shift the register + copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); + copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); + } + + return encrypted; + } + + ModeOfOperationCFB.prototype.decrypt = function(ciphertext) { + if ((ciphertext.length % this.segmentSize) != 0) { + throw new Error('invalid ciphertext size (must be segmentSize bytes)'); + } + + var plaintext = coerceArray(ciphertext, true); + + var xorSegment; + for (var i = 0; i < plaintext.length; i += this.segmentSize) { + xorSegment = this._aes.encrypt(this._shiftRegister); + + for (var j = 0; j < this.segmentSize; j++) { + plaintext[i + j] ^= xorSegment[j]; + } + + // Shift the register + copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); + copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); + } + + return plaintext; + } + + /** + * Mode Of Operation - Output Feedback (OFB) + */ + var ModeOfOperationOFB = function(key, iv) { + if (!(this instanceof ModeOfOperationOFB)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Output Feedback"; + this.name = "ofb"; + + if (!iv) { + iv = createArray(16); + + } else if (iv.length != 16) { + throw new Error('invalid initialation vector size (must be 16 bytes)'); + } + + this._lastPrecipher = coerceArray(iv, true); + this._lastPrecipherIndex = 16; + + this._aes = new AES(key); + } + + ModeOfOperationOFB.prototype.encrypt = function(plaintext) { + var encrypted = coerceArray(plaintext, true); + + for (var i = 0; i < encrypted.length; i++) { + if (this._lastPrecipherIndex === 16) { + this._lastPrecipher = this._aes.encrypt(this._lastPrecipher); + this._lastPrecipherIndex = 0; + } + encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++]; + } + + return encrypted; + } + + // Decryption is symetric + ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt; + + + /** + * Counter object for CTR common mode of operation + */ + var Counter = function(initialValue) { + if (!(this instanceof Counter)) { + throw Error('Counter must be instanitated with `new`'); + } + + // We allow 0, but anything false-ish uses the default 1 + if (initialValue !== 0 && !initialValue) { initialValue = 1; } + + if (typeof(initialValue) === 'number') { + this._counter = createArray(16); + this.setValue(initialValue); + + } else { + this.setBytes(initialValue); + } + } + + Counter.prototype.setValue = function(value) { + if (typeof(value) !== 'number' || parseInt(value) != value) { + throw new Error('invalid counter value (must be an integer)'); + } + + // We cannot safely handle numbers beyond the safe range for integers + if (value > Number.MAX_SAFE_INTEGER) { + throw new Error('integer value out of safe range'); + } + + for (var index = 15; index >= 0; --index) { + this._counter[index] = value % 256; + value = parseInt(value / 256); + } + } + + Counter.prototype.setBytes = function(bytes) { + bytes = coerceArray(bytes, true); + + if (bytes.length != 16) { + throw new Error('invalid counter bytes size (must be 16 bytes)'); + } + + this._counter = bytes; + }; + + Counter.prototype.increment = function() { + for (var i = 15; i >= 0; i--) { + if (this._counter[i] === 255) { + this._counter[i] = 0; + } else { + this._counter[i]++; + break; + } + } + } + + + /** + * Mode Of Operation - Counter (CTR) + */ + var ModeOfOperationCTR = function(key, counter) { + if (!(this instanceof ModeOfOperationCTR)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Counter"; + this.name = "ctr"; + + if (!(counter instanceof Counter)) { + counter = new Counter(counter) + } + + this._counter = counter; + + this._remainingCounter = null; + this._remainingCounterIndex = 16; + + this._aes = new AES(key); + } + + ModeOfOperationCTR.prototype.encrypt = function(plaintext) { + var encrypted = coerceArray(plaintext, true); + + for (var i = 0; i < encrypted.length; i++) { + if (this._remainingCounterIndex === 16) { + this._remainingCounter = this._aes.encrypt(this._counter._counter); + this._remainingCounterIndex = 0; + this._counter.increment(); + } + encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++]; + } + + return encrypted; + } + + // Decryption is symetric + ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt; + + + /////////////////////// + // Padding + + // See:https://tools.ietf.org/html/rfc2315 + function pkcs7pad(data) { + data = coerceArray(data, true); + var padder = 16 - (data.length % 16); + var result = createArray(data.length + padder); + copyArray(data, result); + for (var i = data.length; i < result.length; i++) { + result[i] = padder; + } + return result; + } + + function pkcs7strip(data) { + data = coerceArray(data, true); + if (data.length < 16) { throw new Error('PKCS#7 invalid length'); } + + var padder = data[data.length - 1]; + if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); } + + var length = data.length - padder; + for (var i = 0; i < padder; i++) { + if (data[length + i] !== padder) { + throw new Error('PKCS#7 invalid padding byte'); + } + } + + var result = createArray(length); + copyArray(data, result, 0, 0, length); + return result; + } + + /////////////////////// + // Exporting + + + // The block cipher + var aesjs = { + AES: AES, + Counter: Counter, + + ModeOfOperation: { + ecb: ModeOfOperationECB, + cbc: ModeOfOperationCBC, + cfb: ModeOfOperationCFB, + ofb: ModeOfOperationOFB, + ctr: ModeOfOperationCTR + }, + + utils: { + hex: convertHex, + utf8: convertUtf8 + }, + + padding: { + pkcs7: { + pad: pkcs7pad, + strip: pkcs7strip + } + }, + + _arrayTest: { + coerceArray: coerceArray, + createArray: createArray, + copyArray: copyArray, + } + }; + + + // node.js + if (true) { + module.exports = aesjs + + // RequireJS/AMD + // http://www.requirejs.org/docs/api.html + // https://github.com/amdjs/amdjs-api/wiki/AMD + } else {} + + +})(this); + + +/***/ }), + +/***/ "./src/other/style.scss": +/*!******************************!*\ + !*** ./src/other/style.scss ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./src/controller_ui.ts": +/*!******************************!*\ + !*** ./src/controller_ui.ts ***! + \******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiClass = void 0; +__webpack_require__(/*! ./other/style.scss */ "./src/other/style.scss"); +const ui_log_1 = __webpack_require__(/*! ./log/ui_log */ "./src/log/ui_log.ts"); +const ui_lang_define_1 = __webpack_require__(/*! ./lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const ui_lang_1 = __webpack_require__(/*! ./lang/ui_lang */ "./src/lang/ui_lang.ts"); +const info_1 = __webpack_require__(/*! ./section/controller/info */ "./src/section/controller/info.ts"); +const license_1 = __webpack_require__(/*! ./section/controller/license */ "./src/section/controller/license.ts"); +const update_1 = __webpack_require__(/*! ./section/controller/update */ "./src/section/controller/update.ts"); +const migration_1 = __webpack_require__(/*! ./section/controller/migration */ "./src/section/controller/migration.ts"); +const detection_1 = __webpack_require__(/*! ./section/detection */ "./src/section/detection.ts"); +const info_2 = __webpack_require__(/*! ./section/slave/info */ "./src/section/slave/info.ts"); +const license_2 = __webpack_require__(/*! ./section/slave/license */ "./src/section/slave/license.ts"); +const update_2 = __webpack_require__(/*! ./section/slave/update */ "./src/section/slave/update.ts"); +const ui_define_1 = __webpack_require__(/*! ./ui_define */ "./src/ui_define.ts"); +const controller_sapi_1 = __webpack_require__(/*! ./sapi/controller_sapi */ "./src/sapi/controller_sapi.ts"); +const zuno_sapi_1 = __webpack_require__(/*! ./sapi/zuno_sapi */ "./src/sapi/zuno_sapi.ts"); +const sapi_1 = __webpack_require__(/*! ./sapi/sapi */ "./src/sapi/sapi.ts"); +class ControllerUiClass { + _get_all_array_type() { + let out; + switch (this.detect_type) { + case sapi_1.SapiClassDetectType.RAZBERRY: + out = this.controller; + break; + case sapi_1.SapiClassDetectType.ZUNO: + out = this.slave; + break; + default: + out = []; + break; + } + return (out); + } + _clear() { + return __awaiter(this, void 0, void 0, function* () { + let i; + const array_type = this._get_all_array_type(); + i = 0x0; + while (i < array_type.length) { + yield array_type[i].end(); + i++; + } + }); + } + _begin(detection) { + return __awaiter(this, void 0, void 0, function* () { + let i; + yield this._clear(); + if (detection == true) { + yield this.detection.begin(); + if ((yield this.detection.detection()) == false) + return; + } + this.detect_type = this.sapi.type(); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + switch (this.detect_type) { + case sapi_1.SapiClassDetectType.ZUNO: + yield this.zuno.connect(); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + break; + case sapi_1.SapiClassDetectType.RAZBERRY: + yield this.razberry.connect(); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + break; + default: + this.log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + break; + } + const array_type = this._get_all_array_type(); + i = 0x0; + while (i < array_type.length) { + yield array_type[i].begin(); + i++; + } + }); + } + _start() { + return __awaiter(this, void 0, void 0, function* () { + this.log.info(ui_define_1.NAME_APP_VERSION_FULL); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT); + const status = yield this.sapi.request(this.filters); + if (status == sapi_1.SapiClassStatus.SERIAL_UN_SUPPORT) + return (this.log.error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER)); + if (status == sapi_1.SapiClassStatus.REQUEST_NO_SELECT) + return (this.log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT)); + if (status != sapi_1.SapiClassStatus.OK) + return (this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT, status)); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT); + yield this._begin(true); + }); + } + _constructor_button_create(el_section_button, func, text, title) { + const el_button = document.createElement("button"); + el_button.type = "button"; + el_button.textContent = text; + el_button.title = title; + el_button.addEventListener("click", func); + el_section_button.appendChild(el_button); + } + _constructor_button() { + const el_section_button = document.createElement("section"); + el_section_button.className = "ZUnoRazberryModalContentSectionButton"; + const event_copy = () => { + navigator.clipboard.writeText(this.log.getLog()); + }; + const event_close = () => __awaiter(this, void 0, void 0, function* () { + let i; + const array_type = this._get_all_array_type(); + i = 0x0; + while (i < array_type.length) { + if (array_type[i].is_close() == false) + return; + i++; + } + yield this.sapi.close(); + this.el_modal.remove(); + }); + this._constructor_button_create(el_section_button, event_copy, this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_TEXT), this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_TITLE)); + this._constructor_button_create(el_section_button, event_close, this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.BUTTON_CLOSE_TEXT), this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.BUTTON_CLOSE_TITLE)); + this.el_section.appendChild(el_section_button); + } + constructor(el, filters) { + this.sapi = new sapi_1.SapiClass(); + this.razberry = new controller_sapi_1.ControllerSapiClass(this.sapi); + this.zuno = new zuno_sapi_1.ZunoSapiClass(this.sapi); + this.locale = new ui_lang_1.ControllerUiLangClass(); + this.el_modal = document.createElement("div"); + this.el_section = document.createElement("section"); + this.log = new ui_log_1.ControllerUiLogClass(this.el_section, this.locale); + this.controller = []; + this.slave = []; + this.detect_type = sapi_1.SapiClassDetectType.UNKNOWN; + this.filters = filters; + this.el_modal.className = "ZUnoRazberryModal"; + this.el_modal.appendChild(this.el_section); + this._constructor_button(); + const re_begin = (detection) => __awaiter(this, void 0, void 0, function* () { yield this._begin(detection); }); + this.detection = new detection_1.DetectionUiSectionClass(this.el_section, this.locale, this.sapi, this.log, re_begin); + this.controller.push(new info_1.ControllerUiSectionInfoClass(this.el_section, this.locale, this.razberry, this.log, re_begin)); + this.controller.push(new license_1.ControllerUiSectionLicenseClass(this.el_section, this.locale, this.razberry, this.log)); + this.controller.push(new update_1.ControllerUiSectionUpdateClass(this.el_section, this.locale, this.razberry, this.log, re_begin)); + this.controller.push(new migration_1.ControllerUiSectionMigrationClass(this.el_section, this.locale, this.razberry, this.log, () => __awaiter(this, void 0, void 0, function* () { yield this._clear(); }), this.sapi, this.zuno)); + this.slave.push(new info_2.SlaveUiSectionInfoClass(this.el_section, this.locale, this.zuno, this.log, re_begin)); + this.slave.push(new license_2.SlaveUiSectionLicenseClass(this.el_section, this.locale, this.zuno, this.log, re_begin)); + this.slave.push(new update_2.SlaveUiSectionUpdateClass(this.el_section, this.locale, this.zuno, this.log, re_begin)); + el.appendChild(this.el_modal); + this._start(); + } +} +exports.ControllerUiClass = ControllerUiClass; + + +/***/ }), + +/***/ "./src/hardware/chip.ts": +/*!******************************!*\ + !*** ./src/hardware/chip.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HardwareChipClass = void 0; +class HardwareChipClass { + constructor() { + } +} +exports.HardwareChipClass = HardwareChipClass; +HardwareChipClass.FAMILY_ZGM13 = 0x00; +HardwareChipClass.CHIP_ZGM130S037HGN = 0x01; +HardwareChipClass.CHIP_ZGM130S037HGN1 = 0x02; +HardwareChipClass.FAMILY_EFR32MG21 = 0x01; +HardwareChipClass.CHIP_EFR32MG21A010F1024IM32 = 0x01; +HardwareChipClass.CHIP_EFR32MG21A010F512IM32 = 0x02; +HardwareChipClass.CHIP_EFR32MG21A010F768IM32 = 0x03; +HardwareChipClass.CHIP_EFR32MG21A020F1024IM32 = 0x04; +HardwareChipClass.CHIP_EFR32MG21A020F512IM32 = 0x05; +HardwareChipClass.CHIP_EFR32MG21A020F768IM32 = 0x06; +HardwareChipClass.CHIP_EFR32MG21B010F1024IM32 = 0x07; +HardwareChipClass.CHIP_EFR32MG21B010F512IM32 = 0x08; +HardwareChipClass.CHIP_EFR32MG21B010F768IM32 = 0x09; +HardwareChipClass.CHIP_EFR32MG21B020F1024IM32 = 0x0A; +HardwareChipClass.CHIP_EFR32MG21B020F512IM32 = 0x0B; +HardwareChipClass.CHIP_EFR32MG21B020F768IM32 = 0x0C; +HardwareChipClass.FAMILY_ZGM23 = 0x02; +HardwareChipClass.CHIP_ZGM230SA27HGN = 0x01; +HardwareChipClass.CHIP_ZGM230SA27HNN = 0x02; +HardwareChipClass.CHIP_ZGM230SB27HGN = 0x03; +HardwareChipClass.CHIP_ZGM230SB27HNN = 0x04; +HardwareChipClass.FAMILY_MGM21 = 0x03; +HardwareChipClass.CHIP_MGM210L022JIF = 0x01; +HardwareChipClass.CHIP_MGM210L022JNF = 0x02; +HardwareChipClass.CHIP_MGM210LA22JIF = 0x03; +HardwareChipClass.CHIP_MGM210LA22JNF = 0x04; +HardwareChipClass.CHIP_MGM210P022JIA = 0x05; +HardwareChipClass.CHIP_MGM210P032JIA = 0x06; +HardwareChipClass.CHIP_MGM210PA22JIA = 0x07; +HardwareChipClass.CHIP_MGM210PA32JIA = 0x08; +HardwareChipClass.CHIP_MGM210PB22JIA = 0x09; +HardwareChipClass.CHIP_MGM210PB32JIA = 0x0A; +HardwareChipClass.CHIP_MGM211LA02JNF = 0x0B; +HardwareChipClass.FAMILY_EFR32ZG23 = 0x04; +HardwareChipClass.CHIP_EFR32ZG23A010F512GM40 = 0x01; +HardwareChipClass.CHIP_EFR32ZG23A010F512GM48 = 0x02; +HardwareChipClass.CHIP_EFR32ZG23A020F512GM40 = 0x03; +HardwareChipClass.CHIP_EFR32ZG23A020F512GM48 = 0x04; +HardwareChipClass.CHIP_EFR32ZG23B010F512IM40 = 0x05; +HardwareChipClass.CHIP_EFR32ZG23B010F512IM48 = 0x06; +HardwareChipClass.CHIP_EFR32ZG23B011F512IM40 = 0x07; +HardwareChipClass.CHIP_EFR32ZG23B020F512IM40 = 0x08; +HardwareChipClass.CHIP_EFR32ZG23B020F512IM48 = 0x09; +HardwareChipClass.CHIP_EFR32ZG23B021F512IM40 = 0x0A; +HardwareChipClass.FAMILY_EFR32MG24 = 0x05; +HardwareChipClass.CHIP_EFR32MG24A010F1024IM40 = 0x01; +HardwareChipClass.CHIP_EFR32MG24A010F1024IM48 = 0x02; +HardwareChipClass.CHIP_EFR32MG24A010F1536GM40 = 0x03; +HardwareChipClass.CHIP_EFR32MG24A010F1536GM48 = 0x04; +HardwareChipClass.CHIP_EFR32MG24A010F1536IM40 = 0x05; +HardwareChipClass.CHIP_EFR32MG24A010F1536IM48 = 0x06; +HardwareChipClass.CHIP_EFR32MG24A010F768IM40 = 0x07; +HardwareChipClass.CHIP_EFR32MG24A010F768IM48 = 0x08; +HardwareChipClass.CHIP_EFR32MG24A020F1024IM40 = 0x09; +HardwareChipClass.CHIP_EFR32MG24A020F1024IM48 = 0x0A; +HardwareChipClass.CHIP_EFR32MG24A020F1536GM40 = 0x0B; +HardwareChipClass.CHIP_EFR32MG24A020F1536GM48 = 0x0C; +HardwareChipClass.CHIP_EFR32MG24A020F1536IM40 = 0x0D; +HardwareChipClass.CHIP_EFR32MG24A020F1536IM48 = 0x0E; +HardwareChipClass.CHIP_EFR32MG24A020F768IM40 = 0x0F; +HardwareChipClass.CHIP_EFR32MG24A021F1024IM40 = 0x10; +HardwareChipClass.CHIP_EFR32MG24A110F1024IM48 = 0x11; +HardwareChipClass.CHIP_EFR32MG24A110F1536GM48 = 0x12; +HardwareChipClass.CHIP_EFR32MG24A111F1536GM48 = 0x13; +HardwareChipClass.CHIP_EFR32MG24A120F1536GM48 = 0x14; +HardwareChipClass.CHIP_EFR32MG24A121F1536GM48 = 0x15; +HardwareChipClass.CHIP_EFR32MG24A410F1536IM40 = 0x16; +HardwareChipClass.CHIP_EFR32MG24A410F1536IM48 = 0x17; +HardwareChipClass.CHIP_EFR32MG24A420F1536IM40 = 0x18; +HardwareChipClass.CHIP_EFR32MG24A420F1536IM48 = 0x19; +HardwareChipClass.CHIP_EFR32MG24A610F1536IM40 = 0x1A; +HardwareChipClass.CHIP_EFR32MG24A620F1536IM40 = 0x1B; +HardwareChipClass.CHIP_EFR32MG24B010F1024IM48 = 0x1C; +HardwareChipClass.CHIP_EFR32MG24B010F1536IM40 = 0x1D; +HardwareChipClass.CHIP_EFR32MG24B010F1536IM48 = 0x1E; +HardwareChipClass.CHIP_EFR32MG24B020F1024IM48 = 0x1F; +HardwareChipClass.CHIP_EFR32MG24B020F1536IM40 = 0x20; +HardwareChipClass.CHIP_EFR32MG24B020F1536IM48 = 0x21; +HardwareChipClass.CHIP_EFR32MG24B110F1536GM48 = 0x22; +HardwareChipClass.CHIP_EFR32MG24B110F1536IM48 = 0x23; +HardwareChipClass.CHIP_EFR32MG24B120F1536IM48 = 0x24; +HardwareChipClass.CHIP_EFR32MG24B210F1536IM40 = 0x25; +HardwareChipClass.CHIP_EFR32MG24B210F1536IM48 = 0x26; +HardwareChipClass.CHIP_EFR32MG24B220F1536IM48 = 0x27; +HardwareChipClass.CHIP_EFR32MG24B310F1536IM48 = 0x28; +HardwareChipClass.CHIP_EFR32MG24B610F1536IM40 = 0x29; + + +/***/ }), + +/***/ "./src/lang/ui_lang.ts": +/*!*****************************!*\ + !*** ./src/lang/ui_lang.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiLangClass = void 0; +const ui_lang_en_1 = __webpack_require__(/*! ./ui_lang_en */ "./src/lang/ui_lang_en.ts"); +class ControllerUiLangClass { + getLocale(id) { + if (this.locale[id] != undefined) + return (this.locale[id]); + return (""); + } + constructor() { + this.locale = ui_lang_en_1.controller_lang_en; + } +} +exports.ControllerUiLangClass = ControllerUiLangClass; + + +/***/ }), + +/***/ "./src/lang/ui_lang_define.ts": +/*!************************************!*\ + !*** ./src/lang/ui_lang_define.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiLangClassId = void 0; +var ControllerUiLangClassId; +(function (ControllerUiLangClassId) { + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PORT_NOT_SELECT"] = 0] = "MESSAGE_PORT_NOT_SELECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_NOT_SUPPORT_BROWSER"] = 1] = "MESSAGE_NOT_SUPPORT_BROWSER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PORT_USE"] = 2] = "MESSAGE_PORT_USE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_CONNECT"] = 3] = "MESSAGE_CONNECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_DETECTION"] = 4] = "MESSAGE_DETECTION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_CAPABILITIES"] = 5] = "MESSAGE_READ_CAPABILITIES"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_REGION"] = 6] = "MESSAGE_READ_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_SEC"] = 7] = "MESSAGE_READ_SEC"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_POWER"] = 8] = "MESSAGE_READ_POWER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_LICENSE"] = 9] = "MESSAGE_READ_LICENSE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_LICENSE"] = 10] = "MESSAGE_SET_LICENSE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_BOARD_INFO"] = 11] = "MESSAGE_READ_BOARD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_REGION"] = 12] = "MESSAGE_SET_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_POWER"] = 13] = "MESSAGE_SET_POWER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_SEC"] = 14] = "MESSAGE_SET_SEC"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_DEFAULT"] = 15] = "MESSAGE_SET_DEFAULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PLEASE_WAIT"] = 16] = "MESSAGE_PLEASE_WAIT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_DOWNLOAD_INFO"] = 17] = "MESSAGE_UPDATE_DOWNLOAD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_DOWNLOAD_FILE"] = 18] = "MESSAGE_UPDATE_DOWNLOAD_FILE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_START_FIRMWARE"] = 19] = "MESSAGE_UPDATE_START_FIRMWARE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_START_BOOTLOADER"] = 20] = "MESSAGE_UPDATE_START_BOOTLOADER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_SERIAL_API_VERSION"] = 21] = "TABLE_NAME_SERIAL_API_VERSION"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_SERIAL_API_VERSION_TITLE"] = 22] = "TABLE_NAME_SERIAL_API_VERSION_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR"] = 23] = "TABLE_NAME_VENDOR"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR_TITLE"] = 24] = "TABLE_NAME_VENDOR_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR_ID"] = 25] = "TABLE_NAME_VENDOR_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR_ID_TITLE"] = 26] = "TABLE_NAME_VENDOR_ID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION"] = 27] = "TABLE_NAME_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_TITLE"] = 28] = "TABLE_NAME_REGION_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_SELECT_TITLE"] = 29] = "TABLE_NAME_REGION_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_BUTTON"] = 30] = "TABLE_NAME_REGION_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_BUTTON_TITLE"] = 31] = "TABLE_NAME_REGION_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT"] = 32] = "TABLE_NAME_RESET_DEFAULT"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT_TITLE"] = 33] = "TABLE_NAME_RESET_DEFAULT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT_BUTTON"] = 34] = "TABLE_NAME_RESET_DEFAULT_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE"] = 35] = "TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER"] = 36] = "TABLE_NAME_POWER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_TITLE"] = 37] = "TABLE_NAME_POWER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_SELECT_TITLE"] = 38] = "TABLE_NAME_POWER_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_BUTTON"] = 39] = "TABLE_NAME_POWER_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_BUTTON_TITLE"] = 40] = "TABLE_NAME_POWER_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_BUTTON"] = 41] = "TABLE_NAME_UPDATE_FIRMWARE_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE"] = 42] = "TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_BUTTON"] = 43] = "TABLE_NAME_UPDATE_BOOTLOADER_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE"] = 44] = "TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_UUID"] = 45] = "TABLE_NAME_LICENSE_UUID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_UUID_TITLE"] = 46] = "TABLE_NAME_LICENSE_UUID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MORE_OPTIONS"] = 47] = "TABLE_NAME_LICENSE_MORE_OPTIONS"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE"] = 48] = "TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUBVENDOR_ID"] = 49] = "TABLE_NAME_LICENSE_SUBVENDOR_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE"] = 50] = "TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MAX_NODE"] = 51] = "TABLE_NAME_LICENSE_MAX_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MAX_NODE_TITLE"] = 52] = "TABLE_NAME_LICENSE_MAX_NODE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUPPORT"] = 53] = "TABLE_NAME_LICENSE_SUPPORT"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUPPORT_TITLE"] = 54] = "TABLE_NAME_LICENSE_SUPPORT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BETA"] = 55] = "TABLE_NAME_UPDATE_BETA"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BETA_SELECT_TITLE"] = 56] = "TABLE_NAME_UPDATE_BETA_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BETA_TITLE"] = 57] = "TABLE_NAME_UPDATE_BETA_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE"] = 58] = "TABLE_NAME_UPDATE_FIRMWARE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_TITLE"] = 59] = "TABLE_NAME_UPDATE_FIRMWARE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE"] = 60] = "TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE"] = 61] = "TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER"] = 62] = "TABLE_NAME_UPDATE_BOOTLOADER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_TITLE"] = 63] = "TABLE_NAME_UPDATE_BOOTLOADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE"] = 64] = "TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_DOWNLOAD_INFO"] = 65] = "TABLE_NAME_UPDATE_DOWNLOAD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_DOWNLOAD_FILE"] = 66] = "TABLE_NAME_UPDATE_DOWNLOAD_FILE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_WAIT_BUS_SERIAL"] = 67] = "TABLE_NAME_UPDATE_WAIT_BUS_SERIAL"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_WAIT_UPDATE"] = 68] = "TABLE_NAME_UPDATE_WAIT_UPDATE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DETECTION_SYNC_MANUAL"] = 69] = "TABLE_NAME_DETECTION_SYNC_MANUAL"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE"] = 70] = "TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE"] = 71] = "TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_HEADER"] = 72] = "LOG_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_DONE"] = 73] = "LOG_DONE"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_FAILED"] = 74] = "LOG_FAILED"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_FAILED_CODE"] = 75] = "LOG_FAILED_CODE"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_UNSUPPORTED"] = 76] = "LOG_UNSUPPORTED"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_NOT_FIND_ELEMENT"] = 77] = "LOG_NOT_FIND_ELEMENT"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_XHR_TIMEOUT"] = 78] = "LOG_XHR_TIMEOUT"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_XHR_ERROR"] = 79] = "LOG_XHR_ERROR"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_XHR_INVALID_DATA"] = 80] = "LOG_XHR_INVALID_DATA"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_TEXT"] = 81] = "BUTTON_COPY_TEXT"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_TITLE"] = 82] = "BUTTON_COPY_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_CLOSE_TEXT"] = 83] = "BUTTON_CLOSE_TEXT"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_CLOSE_TITLE"] = 84] = "BUTTON_CLOSE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_DSK"] = 85] = "BUTTON_COPY_DSK"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_DSK_TITLE"] = 86] = "BUTTON_COPY_DSK_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["BOARD_INFO_HEADER"] = 87] = "BOARD_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["LICENSE_INFO_HEADER"] = 88] = "LICENSE_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["UPDATE_INFO_HEADER"] = 89] = "UPDATE_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["DEFAULT_RESET_WARNING"] = 90] = "DEFAULT_RESET_WARNING"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_INFO_HEADER"] = 91] = "MIGRATION_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER"] = 92] = "MIGRATION_ABOUT_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TITLE"] = 93] = "MIGRATION_ABOUT_HEADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TEXT_HTML"] = 94] = "MIGRATION_ABOUT_HEADER_TEXT_HTML"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5"] = 95] = "MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT"] = 96] = "MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_HEADER"] = 97] = "MIGRATION_PROCESS_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_HEADER_TITLE"] = 98] = "MIGRATION_PROCESS_HEADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_BUTTON_START"] = 99] = "MIGRATION_PROCESS_BUTTON_START"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_BUTTON_START_TITLE"] = 100] = "MIGRATION_PROCESS_BUTTON_START_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_BUTTON_START_WARNING"] = 101] = "MIGRATION_PROCESS_BUTTON_START_WARNING"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_TEST_INCLUDE"] = 102] = "MIGRATION_TEST_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_HOME_ID"] = 103] = "MESSAGE_READ_HOME_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_UNKNOWN_ERROR"] = 104] = "MIGRATION_UNKNOWN_ERROR"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_GOOD_RESULT"] = 105] = "MIGRATION_GOOD_RESULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_STOP"] = 106] = "MIGRATION_ACTION_STOP"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_CONTINUE"] = 107] = "MIGRATION_ACTION_CONTINUE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_STOP_TITLE"] = 108] = "MIGRATION_ACTION_STOP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_CONTINUE_TITLE"] = 109] = "MIGRATION_ACTION_CONTINUE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUESTION_EXCLUDE"] = 110] = "MIGRATION_QUESTION_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_STOP_RESULT"] = 111] = "MIGRATION_STOP_RESULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_INIT_DATA"] = 112] = "MESSAGE_READ_INIT_DATA"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_EXCLUDING"] = 113] = "MESSAGE_START_EXCLUDING"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_WIDE_EXCLUDING"] = 114] = "MESSAGE_START_WIDE_EXCLUDING"; + ControllerUiLangClassId[ControllerUiLangClassId["SECONDS"] = 115] = "SECONDS"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_WAIT_EXCLUDE_START_MASTER"] = 116] = "MIGRATION_WAIT_EXCLUDE_START_MASTER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_CLEAR_NODE"] = 117] = "MESSAGE_CLEAR_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_INCLUDE"] = 118] = "MESSAGE_START_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_WIDE_INCLUDE"] = 119] = "MESSAGE_START_WIDE_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUESTION_INCLUDE"] = 120] = "MIGRATION_QUESTION_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_WAIT_INCLUDE_START_MASTER"] = 121] = "MIGRATION_WAIT_INCLUDE_START_MASTER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FINALIZE"] = 122] = "MIGRATION_FINALIZE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_DETECTION"] = 123] = "MIGRATION_DETECTION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_HOME_ID"] = 124] = "MESSAGE_SET_HOME_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_REMOVE_NODE"] = 125] = "MESSAGE_REMOVE_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SOFT_RESET"] = 126] = "MESSAGE_SOFT_RESET"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_NOP"] = 127] = "MESSAGE_NOP"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PORT_SELECT"] = 128] = "MESSAGE_PORT_SELECT"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_INFO_HEADER"] = 129] = "DETECTION_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_HEADER"] = 130] = "DETECTION_PROCESS_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_HEADER_TITLE"] = 131] = "DETECTION_PROCESS_HEADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS"] = 132] = "DETECTION_PROCESS"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_STOP"] = 133] = "DETECTION_PROCESS_STOP"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_CONTINUE"] = 134] = "DETECTION_PROCESS_CONTINUE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_STOP_TITLE"] = 135] = "DETECTION_PROCESS_STOP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_CONTINUE_TITLE"] = 136] = "DETECTION_PROCESS_CONTINUE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_QUEST_SYNC"] = 137] = "DETECTION_PROCESS_QUEST_SYNC"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_BUTTON_RE_SYNC"] = 138] = "DETECTION_PROCESS_BUTTON_RE_SYNC"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE"] = 139] = "DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["SLAVE_MESSAGE_READ_BOARD_INFO"] = 140] = "SLAVE_MESSAGE_READ_BOARD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VERSION"] = 141] = "TABLE_NAME_VERSION"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VERSION_TITLE"] = 142] = "TABLE_NAME_VERSION_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_BUILD_TIME_STAMP"] = 143] = "TABLE_NAME_BUILD_TIME_STAMP"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_BUILD_TIME_STAMP_TITLE"] = 144] = "TABLE_NAME_BUILD_TIME_STAMP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UUID"] = 145] = "TABLE_NAME_UUID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UUID_TITLE"] = 146] = "TABLE_NAME_UUID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_HOME"] = 147] = "TABLE_NAME_HOME"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_HOME_TITLE"] = 148] = "TABLE_NAME_HOME_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_NODE"] = 149] = "TABLE_NAME_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_NODE_TITLE"] = 150] = "TABLE_NAME_NODE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DSK"] = 151] = "TABLE_NAME_DSK"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DSK_TITLE"] = 152] = "TABLE_NAME_DSK_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_QR_CODE"] = 153] = "TABLE_NAME_QR_CODE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_QR_CODE_TITLE"] = 154] = "TABLE_NAME_QR_CODE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["SLAVE_MESSAGE_FREEZE_ERROR"] = 155] = "SLAVE_MESSAGE_FREEZE_ERROR"; + ControllerUiLangClassId[ControllerUiLangClassId["SLAVE_DEFAULT_RESET_WARNING"] = 156] = "SLAVE_DEFAULT_RESET_WARNING"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE"] = 157] = "TABLE_NAME_TYPE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE_TITLE"] = 158] = "TABLE_NAME_TYPE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE_CONTROLER"] = 159] = "TABLE_NAME_TYPE_CONTROLER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE_SLAVE"] = 160] = "TABLE_NAME_TYPE_SLAVE"; + ControllerUiLangClassId[ControllerUiLangClassId["ERROR_ARGUMENT_FOR_UPDATE_SELECT"] = 161] = "ERROR_ARGUMENT_FOR_UPDATE_SELECT"; + ControllerUiLangClassId[ControllerUiLangClassId["ERROR_ARGUMENT_FIND_TYPE"] = 162] = "ERROR_ARGUMENT_FIND_TYPE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE"] = 163] = "TABLE_NAME_INCLUDE_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE_TITLE"] = 164] = "TABLE_NAME_INCLUDE_EXCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE_BUTTON"] = 165] = "TABLE_NAME_INCLUDE_EXCLUDE_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE"] = 166] = "TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["INCLUDE_EXCLUDE_WAIT"] = 167] = "INCLUDE_EXCLUDE_WAIT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_ENABLE_NIF_DEFAULT"] = 168] = "MESSAGE_ENABLE_NIF_DEFAULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_ENABLE_EVENT_FOR_LEARN"] = 169] = "MESSAGE_ENABLE_EVENT_FOR_LEARN"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_LEARN"] = 170] = "MESSAGE_START_LEARN"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_TIMEOUT"] = 171] = "MESSAGE_LEARN_INFO_TIMEOUT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART"] = 172] = "MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_INCLUDE_RESTART"] = 173] = "MESSAGE_LEARN_INFO_INCLUDE_RESTART"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_EXCLUDE_RESTART"] = 174] = "MESSAGE_LEARN_INFO_EXCLUDE_RESTART"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_CONTINUE"] = 175] = "PROCESS_CONTINUE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_CONTINUE_TITLE"] = 176] = "PROCESS_CONTINUE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_STOP"] = 177] = "PROCESS_STOP"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_STOP_TITLE"] = 178] = "PROCESS_STOP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_REPEAT"] = 179] = "PROCESS_REPEAT"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_REPEAT_TITLE"] = 180] = "PROCESS_REPEAT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_ABORT"] = 181] = "PROCESS_ABORT"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_ABORT_TITLE"] = 182] = "PROCESS_ABORT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE"] = 183] = "LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE"] = 184] = "LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_GET_URL_INFO"] = 185] = "MIGRATION_NOT_GET_URL_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_UPDATE"] = 186] = "MIGRATION_NOT_UPDATE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LAST_UPDATE_DETECT"] = 187] = "MIGRATION_LAST_UPDATE_DETECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_UPDATE_TYPE"] = 188] = "MIGRATION_FAILED_UPDATE_TYPE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_UPDATE_VERSION"] = 189] = "MIGRATION_FAILED_UPDATE_VERSION"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_CHANGE_REGION"] = 190] = "MIGRATION_FAILED_CHANGE_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE"] = 191] = "MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE"] = 192] = "LEARN_PROCESS_QUEST_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE_TITLE"] = 193] = "LEARN_PROCESS_QUEST_EXCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE"] = 194] = "MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_DETECT"] = 195] = "MIGRATION_FAILED_DETECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_QUEST_INCLUDE"] = 196] = "MIGRATION_PROCESS_QUEST_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_QUEST_INCLUDE_TITLE"] = 197] = "MIGRATION_PROCESS_QUEST_INCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_DUMP_KEY"] = 198] = "MIGRATION_NOT_SUPPORT_DUMP_KEY"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_S2_KEY"] = 199] = "MESSAGE_READ_S2_KEY"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_AVIABLE_FIRMWARE"] = 200] = "MIGRATION_NOT_AVIABLE_FIRMWARE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_LR"] = 201] = "MIGRATION_NOT_SUPPORT_LR"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_BACKUP"] = 202] = "MIGRATION_NOT_SUPPORT_BACKUP"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_SEE_LOG"] = 203] = "MIGRATION_FAILED_SEE_LOG"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER"] = 204] = "MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE"] = 205] = "MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_SUCESS"] = 206] = "MIGRATION_SUCESS"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_REPEATER_ALL_KEY"] = 207] = "MIGRATION_QUEST_REPEATER_ALL_KEY"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE"] = 208] = "MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_ABORT_STEP"] = 209] = "MIGRATION_QUEST_ABORT_STEP"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_ABORT_STEP_TITLE"] = 210] = "MIGRATION_QUEST_ABORT_STEP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_REPEAR_TYPE"] = 211] = "MIGRATION_FAILED_REPEAR_TYPE"; +})(ControllerUiLangClassId || (exports.ControllerUiLangClassId = ControllerUiLangClassId = {})); + + +/***/ }), + +/***/ "./src/lang/ui_lang_en.ts": +/*!********************************!*\ + !*** ./src/lang/ui_lang_en.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.controller_lang_en = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ./ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const controller_lang_en = { + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_NOT_SELECT]: "No port selected", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER]: "Sorry, this feature is supported only on Chrome, Edge and Opera", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_USE]: "Check yours, maybe another application is using it", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT]: "Connect device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION]: "Detection device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES]: "Read capabilities the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION]: "Read region the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_SEC]: "Read securite the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER]: "Read power the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE]: "Read license the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_LICENSE]: "Set license the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO]: "Read board info the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION]: "Set region the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER]: "Set power the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_SEC]: "Set securite the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT]: "Set default the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PLEASE_WAIT]: "Please wait until the previous operation is completed.", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO]: "Download update info", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE]: "Download update file", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE]: "Start firmware update", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER]: "Start bootloader update", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION]: "Serial API Version:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE]: "It is specific to Z-Wave.Me", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR]: "Vendor:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID]: "Vendor ID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION]: "Region:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_TITLE]: "Z-Wave frequency", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE]: "Select region", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON]: "Apply", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE]: "Apply the selected region", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT]: "Reset default:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE]: "Reset to factory default settings", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON]: "Reset", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER]: "TX power level:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE]: "Select the TX power level", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON]: "Apply", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE]: "Apply the selected TX power", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON]: "Update", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON]: "Update", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID]: "UUID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE]: "Unique ID of your Z-Wave hardware", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS]: "More options:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE]: "Additional features available for your hardware", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID]: "Subvendor:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE]: "Nodes limit:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT]: "Support:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA]: 'Beta:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE]: 'Firmware:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE]: "Not updated", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER]: 'Bootloader:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO]: "Download info...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE]: "Download file...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL]: "Wait bus serial...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE]: "Wait update...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL]: 'Sync manual:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.LOG_HEADER]: "Log", + [ui_lang_define_1.ControllerUiLangClassId.LOG_DONE]: " done", + [ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED]: " failed", + [ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED_CODE]: " failed: {{code}}", + [ui_lang_define_1.ControllerUiLangClassId.LOG_UNSUPPORTED]: " unsupported", + [ui_lang_define_1.ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT]: "Not find element: {{element}}", + [ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_TIMEOUT]: "
Internet request - timeout {{url}}
", + [ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_ERROR]: "
Internet request - error {{url}}
", + [ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_INVALID_DATA]: "
Internet request - invalid data {{url}}
", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_TEXT]: "Copy log", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_TITLE]: "Copy the log to clipboard", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_CLOSE_TEXT]: "Close", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_CLOSE_TITLE]: "Closes and stops working with the port", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_DSK]: "Copy", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE]: "Copy the dsk to clipboard", + [ui_lang_define_1.ControllerUiLangClassId.BOARD_INFO_HEADER]: "Board Info", + [ui_lang_define_1.ControllerUiLangClassId.LICENSE_INFO_HEADER]: "License Info", + [ui_lang_define_1.ControllerUiLangClassId.UPDATE_INFO_HEADER]: "Update Info", + [ui_lang_define_1.ControllerUiLangClassId.DEFAULT_RESET_WARNING]: "The Controller Reset will delete all included devices from your network without excluding them. You will need to manually exclude and include all of them. Do you really want to do this?", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_INFO_HEADER]: "Migration Info", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER]: "About", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML]: "
Porting from your old controllerto your new Z-Wave.Me hardware
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5]: "
You have an old stickneed a newer one
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT]: "
Your stick is not supportedmigration works only to Z-Wave.Me hardware
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER]: "Migration:", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START]: "Start", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING]: "Are you sure you want to start the migration process? - During this process, all data will be lost.\nAlso make sure there are no power issues to avoid problems.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_TEST_INCLUDE]: "Checking whether it is on...", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_HOME_ID]: "Read home and node id the controller", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_UNKNOWN_ERROR]: "An unexpected error occurred, please try again.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_GOOD_RESULT]: "Migration was successful.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_STOP]: "Stop", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE]: "Continue", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_STOP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE]: "You need to excluding first - click when you're ready", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_STOP_RESULT]: "Migration was stoping.", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA]: "Read init data the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_EXCLUDING]: "Start excluding controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING]: "Start wide excluding controller", + [ui_lang_define_1.ControllerUiLangClassId.SECONDS]: "s", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER]: "We are waiting for you to begin the elimination process.", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CLEAR_NODE]: "Start clear node the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_INCLUDE]: "Start include controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE]: "Start wide include controller", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE]: "You need to turn on the controller", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER]: "We are waiting for you to begin the inclusion process.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FINALIZE]: "Finishing...", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_DETECTION]: "Detection...", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_HOME_ID]: "Set home and node id the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_REMOVE_NODE]: "Remove node the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SOFT_RESET]: "Soft reset", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOP]: "Send nop", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT]: "Port selection", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_INFO_HEADER]: "Detection", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_HEADER]: "Sync:", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS]: "Sync...", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_STOP]: "Stop", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE]: "Continue", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC]: "Reset your hardware and try again", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC]: "Try to sync again", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO]: "Read hardware information", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VERSION]: "Version:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP]: "Build date and time:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UUID]: "UUID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UUID_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_HOME]: "Home ID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_HOME_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_NODE]: "Node ID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_NODE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DSK]: "DSK:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DSK_TITLE]: "Key used to securely include your device", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_QR_CODE]: "QR-code:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE]: "QR-code used to securely include your device", + [ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR]: "Failed to pause slave", + [ui_lang_define_1.ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING]: "Do you really want to do this?", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE]: "Type:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER]: "Controller", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE]: "Z-Uno / repeater", + [ui_lang_define_1.ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT]: "error arg for update select", + [ui_lang_define_1.ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE]: "error arg find type", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE]: "Include/Exclude:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON]: "Start", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT]: "Wait...", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT]: "Enable default NIF", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN]: "Enable event for learn mode", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_LEARN]: "Start learn mode", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT]: "Learn timout", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART]: "Learn timeout. Reloading", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART]: "Included. Reloading", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART]: "Excluded. Reloading", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE]: "Continue", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_STOP]: "Stop", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_STOP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT]: "Repeat", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_ABORT]: "Abort", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_ABORT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE]: "Ready for inclusion/exclusion by you controller", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO]: "Could not get a link to the information needed for migration", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_UPDATE]: "Failed to update", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LAST_UPDATE_DETECT]: "After the update, the firmware could not be detected", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE]: "The type of the updated firmware does not match", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION]: "After the update the version is not what it should be", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_CHANGE_REGION]: "Failed to change frequency", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE]: "No support for exclusion/inclusion", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE]: "Turn on exclusion mode on you controller", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE]: "Learn completed", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_DETECT]: "Сould not be detected", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE]: "
Turn on inclusion mode on you controller
When inclusion starts, you have to select all the supported security keys and use the following security code:
${dsk}
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY]: "No support for dump key", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_S2_KEY]: "Reading S2 keys", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE]: "The required firmware is not in the database", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR]: "Long Range is not supported", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP]: "Backup is not supported", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_SEE_LOG]: "Failed - see log", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER]: "
The inclusion happeded without the required keys.
Please turn on exclusion mode on you controller
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_SUCESS]: "Success", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY]: "
These are all the keys that we were able to read, is everything correct or will you try again?
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP]: "An error occurred, would you like to try this step again or abort?", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE]: "The type of the firmware does not match", +}; +exports.controller_lang_en = controller_lang_en; + + +/***/ }), + +/***/ "./src/log/ui_log.ts": +/*!***************************!*\ + !*** ./src/log/ui_log.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiLogClass = void 0; +const define_1 = __webpack_require__(/*! ../other/define */ "./src/other/define.ts"); +const ui_lang_define_1 = __webpack_require__(/*! ../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +class ControllerUiLogClass { + _log(txt) { + this.el_log.innerHTML += txt; + this.el_log.scrollTop = this.el_log.scrollHeight; + } + getLog() { + let i, txt; + const childNodes = this.el_log.childNodes; + i = 0x0; + txt = ""; + while (i < childNodes.length) { + const child = childNodes[i]; + txt = txt + child.textContent + "\n"; + i++; + } + return (txt); + } + info(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this._log('
' + txt + "
"); + } + warning(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this._log('
' + txt + "
"); + } + error(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this._log('
' + txt + "
"); + if (define_1.WEB_TOOLS_BETA == true) + console.error(txt); + } + infoStart(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this.info(txt + "..."); + } + infoDone(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this.info(txt + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_DONE)); + } + errorFalled(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this.error(txt + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED)); + } + errorFalledCode(txt, code) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this.error(txt + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED_CODE).replace('{{code}}', code.toString())); + } + errorUnsupport(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this.error(txt + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_UNSUPPORTED)); + } + errorNotFindElement(txt) { + this.error(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT).replace('{{element}}', txt)); + } + errorXhrTimeout(url) { + this.error(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_TIMEOUT).replace('{{url}}', url)); + } + errorXhrError(url) { + this.error(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_ERROR).replace('{{url}}', url)); + } + errorXhrInvalidData(url) { + this.error(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', url)); + } + constructor(el_section, locale) { + this.locale = locale; + const el = document.createElement("section"); + el.className = "ZUnoRazberryModalContentSection_table"; + const el_section_log_header = document.createElement("h3"); + el_section_log_header.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_HEADER); + el.appendChild(el_section_log_header); + const el_text = document.createElement("section"); + el_text.className = "ZUnoRazberryModalContentSectionLog_section_txt"; + el.appendChild(el_text); + this.el_log = el_text; + el_section.appendChild(el); + } +} +exports.ControllerUiLogClass = ControllerUiLogClass; + + +/***/ }), + +/***/ "./src/other/define.ts": +/*!*****************************!*\ + !*** ./src/other/define.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.WEB_TOOLS_BETA = exports.WEB_TOOLS_VERSION = void 0; +const WEB_TOOLS_VERSION = "00.00.23"; +exports.WEB_TOOLS_VERSION = WEB_TOOLS_VERSION; +const WEB_TOOLS_BETA = true; +exports.WEB_TOOLS_BETA = WEB_TOOLS_BETA; + + +/***/ }), + +/***/ "./src/other/utilities.ts": +/*!********************************!*\ + !*** ./src/other/utilities.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.sleep = sleep; +exports.checksum = checksum; +exports.calcSigmaCRC16 = calcSigmaCRC16; +exports.costruct_int = costruct_int; +exports.hexToBytes = hexToBytes; +exports.arrayToStringHex = arrayToStringHex; +exports.versionNumberToString = versionNumberToString; +exports.intToBytearrayLsbMsb = intToBytearrayLsbMsb; +exports.intToBytearrayMsbLsb = intToBytearrayMsbLsb; +exports.versionNumberToStringSlave = versionNumberToStringSlave; +exports.numberToStringHex = numberToStringHex; +exports.conv2Decimal = conv2Decimal; +exports.toString = toString; +exports.conv2DecimalPadding = conv2DecimalPadding; +exports.version_str_to_int = version_str_to_int; +exports.version_int_to_str = version_int_to_str; +exports.splitHexBuff = splitHexBuff; +function toString(array) { + let result; + result = ""; + for (let i = 0; i < array.length; i++) { + result += String.fromCharCode(array[i]); + } + return result; +} +function numberToStringHex(num) { + return (((num >> 24) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 16) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 8) & 0xFF).toString(0x10).padStart(2, '0') + ((num) & 0xFF).toString(0x10).padStart(2, '0')); +} +function versionNumberToString(version) { + const txt = String((version >> 24) & 0xFF).padStart(2, '0') + "." + String((version >> 16) & 0xFF).padStart(2, '0') + "." + String((version >> 0x8) & 0xFF).padStart(2, '0') + "." + String((version) & 0xFF).padStart(2, '0'); + return (txt); +} +function versionNumberToStringSlave(version) { + const txt = String((version >> 24) & 0xFF).padStart(2, '0') + "." + String((version >> 16) & 0xFF).padStart(2, '0') + "." + String((version) & 0xFFFF); + return (txt); +} +function arrayToStringHex(data) { + let str_hex, i; + str_hex = ""; + i = 0x0; + while (i < data.length) { + str_hex = str_hex + data[i].toString(0x10).padStart(2, '0'); + i++; + } + return (str_hex); +} +function splitHexBuff(data) { + let str_hex, i; + str_hex = ""; + i = 0x0; + while (true) { + str_hex = str_hex + data[i].toString(0x10).padStart(2, '0').toUpperCase(); + i++; + if (i >= data.length) + break; + str_hex = str_hex + " "; + } + return (str_hex); +} +function hexToBytes(hex) { + let i; + if (hex.length == 0x0) + return (undefined); + if ((hex.length & 0x1) != 0x0) + return (undefined); + const bytes = []; + i = 0x0; + while (i < hex.length) { + try { + bytes.push(parseInt(hex.substring(i, i + 0x2), 0x10)); + } + catch (error) { + return (undefined); + } + i = i + 0x2; + } + return (bytes); +} +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} +function checksum(data) { + let ret = 0xff; + let i = 0x0; + while (i < data.length) { + ret = ret ^ data[i]; + i++; + } + return (ret); +} +function calcSigmaCRC16(crc, data, offset, llen) { + let new_bit, wrk_data, b, a, bit_mask; + const bin_data = data; + const CRC_POLY = 0x1021; + while (llen != 0) { + llen -= 1; + if (offset >= bin_data.length) + wrk_data = 0xFF; + else + wrk_data = bin_data[offset]; + offset += 1; + bit_mask = 0x80; + while (bit_mask != 0) { + a = 0; + b = 0; + if ((wrk_data & bit_mask) != 0) + a = 1; + if ((crc & 0x8000) != 0) + b = 1; + new_bit = a ^ b; + crc <<= 1; + crc = crc & 0xffff; + if (new_bit == 1) { + crc ^= CRC_POLY; + } + bit_mask >>= 1; + } + } + return (crc); +} +function costruct_int(arr, n, inv = true) { + let val, i, indx; + val = 0; + i = 0x0; + while (i < arr.length) { + val <<= 8; + indx = i; + if (inv == true) + indx = n - 1 - i; + if ((indx < arr.length) && (indx >= 0)) + val += arr[indx]; + i++; + } + val = val >>> 0x0; //The only JavaScript operator that works using unsigned 32-bit integers is >>>. You can exploit this to convert a signed-integer-in-Number you've been working on with the other bitwise operators to an unsigned-integer-in-Number: + return (val); +} +function intToBytearrayLsbMsb(data, size = 0x4) { + let i; + const array = new Uint8Array(size); + i = 0x0; + while (i < array.length) { + array[i] = data & 0xFF; + data = data >> 8; + i = i + 1; + } + return (array); +} +function intToBytearrayMsbLsb(data, size = 0x4) { + let i; + const array = new Uint8Array(size); + i = 0x0; + while (size != 0) { + size--; + array[i] = (data >> (8 * size)) & 0xFF; + i++; + } + return (array); +} +function conv2DecimalPadding(num, max) { + let num_str = num.toString(0xA); + while (num_str.length < max) + num_str = '0' + num_str; + return (num_str); +} +function conv2Decimal(buff, separator = "-") { + let i, text, v; + text = ""; + i = 0x0; + while (i < (buff.length / 2)) { + v = buff[(i * 2)]; + v <<= 8; + v += buff[(i * 2) + 1]; + if (i != 0) + text += separator; + text += conv2DecimalPadding(v, 5); + i = i + 1; + } + return (text); +} +function version_str_to_int(version) { + let i, out; + const version_list = version.split("."); + i = version_list.length; + out = 0x0; + while (i != 0x0) { + out = out | (Number(version_list[i - 0x1]) << (0x8 * (version_list.length - i))); + i--; + } + return (out); +} +function version_int_to_str(version, min) { + let out, i; + const list = []; + while (version != 0x0) { + list.unshift(version & 0xFF); + version = version >> 0x8; + } + while (list.length < min) { + list.unshift(0x0); + } + out = ""; + i = 0x0; + while (true) { + out = out + String(list[i]).padStart(2, '0'); + i++; + if (i < list.length) { + out = out + "."; + continue; + } + break; + } + return (out); +} + + +/***/ }), + +/***/ "./src/sapi/controller_sapi.ts": +/*!*************************************!*\ + !*** ./src/sapi/controller_sapi.ts ***! + \*************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerSapiClassStatus = exports.ControllerSapiClass = void 0; +const aes_js_1 = __webpack_require__(/*! aes-js */ "./node_modules/aes-js/index.js"); +const uuid_1 = __webpack_require__(/*! uuid */ "./node_modules/uuid/dist/commonjs-browser/index.js"); +const region_1 = __webpack_require__(/*! ./region */ "./src/sapi/region.ts"); +const sapi_1 = __webpack_require__(/*! ./sapi */ "./src/sapi/sapi.ts"); +const utilities_1 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +const vendorIds_1 = __webpack_require__(/*! ./vendorIds */ "./src/sapi/vendorIds.ts"); +const chip_1 = __webpack_require__(/*! ../hardware/chip */ "./src/hardware/chip.ts"); +var ControllerSapiClassStatus; +(function (ControllerSapiClassStatus) { + ControllerSapiClassStatus[ControllerSapiClassStatus["OK"] = 0] = "OK"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_LENGTH_CMD"] = 35] = "WRONG_LENGTH_CMD"; + ControllerSapiClassStatus[ControllerSapiClassStatus["UNSUPPORT_CMD"] = 36] = "UNSUPPORT_CMD"; + ControllerSapiClassStatus[ControllerSapiClassStatus["UNSUPPORT_SUB_CMD"] = 37] = "UNSUPPORT_SUB_CMD"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_IN_DATA"] = 38] = "WRONG_IN_DATA"; + ControllerSapiClassStatus[ControllerSapiClassStatus["INVALID_ARG"] = 39] = "INVALID_ARG"; + ControllerSapiClassStatus[ControllerSapiClassStatus["NOT_SET"] = 40] = "NOT_SET"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_OUT_STATUS"] = 41] = "WRONG_OUT_STATUS"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_OUT_SUB_CMD"] = 42] = "WRONG_OUT_SUB_CMD"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_SEQ"] = 43] = "WRONG_SEQ"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_CRC"] = 44] = "WRONG_CRC"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_LENGTH_SEQ"] = 45] = "WRONG_LENGTH_SEQ"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_LENGTH_CALLBACK_STATUS"] = 46] = "WRONG_LENGTH_CALLBACK_STATUS"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_LENGTH_CALLBACK"] = 47] = "WRONG_LENGTH_CALLBACK"; + ControllerSapiClassStatus[ControllerSapiClassStatus["NOT_INIT"] = 48] = "NOT_INIT"; + ControllerSapiClassStatus[ControllerSapiClassStatus["NOT_RAZBERRY"] = 49] = "NOT_RAZBERRY"; + ControllerSapiClassStatus[ControllerSapiClassStatus["INVALID_SET"] = 50] = "INVALID_SET"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_SEND_DATA_LENGHT"] = 51] = "WRONG_SEND_DATA_LENGHT"; + ControllerSapiClassStatus[ControllerSapiClassStatus["UNKNOWN"] = 52] = "UNKNOWN"; + ControllerSapiClassStatus[ControllerSapiClassStatus["TIMEOUT"] = 53] = "TIMEOUT"; + ControllerSapiClassStatus[ControllerSapiClassStatus["PROCESS"] = 54] = "PROCESS"; + ControllerSapiClassStatus[ControllerSapiClassStatus["LEARN_MODE_FALED"] = 55] = "LEARN_MODE_FALED"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_RESPONSE_STATUS"] = 56] = "WRONG_RESPONSE_STATUS"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_RESPONSE_LENGTH"] = 57] = "WRONG_RESPONSE_LENGTH"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_CALLBACK_LENGTH"] = 58] = "WRONG_CALLBACK_LENGTH"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_CALLBACK_SEQ"] = 59] = "WRONG_CALLBACK_SEQ"; + ControllerSapiClassStatus[ControllerSapiClassStatus["WRONG_CALLBACK_STATUS"] = 60] = "WRONG_CALLBACK_STATUS"; + ControllerSapiClassStatus[ControllerSapiClassStatus["TRANSMIT_COMPLETE_NO_ACK"] = 61] = "TRANSMIT_COMPLETE_NO_ACK"; +})(ControllerSapiClassStatus || (exports.ControllerSapiClassStatus = ControllerSapiClassStatus = {})); +var ControllerSapiClassLockStatus; +(function (ControllerSapiClassLockStatus) { + ControllerSapiClassLockStatus[ControllerSapiClassLockStatus["UNLOCKED"] = 0] = "UNLOCKED"; + ControllerSapiClassLockStatus[ControllerSapiClassLockStatus["DBG_LOCKED"] = 1] = "DBG_LOCKED"; + ControllerSapiClassLockStatus[ControllerSapiClassLockStatus["APP_LOCKED"] = 2] = "APP_LOCKED"; + ControllerSapiClassLockStatus[ControllerSapiClassLockStatus["FULL_LOCKED"] = 3] = "FULL_LOCKED"; +})(ControllerSapiClassLockStatus || (ControllerSapiClassLockStatus = {})); +var ControllerSapiClassLearMode; +(function (ControllerSapiClassLearMode) { + ControllerSapiClassLearMode[ControllerSapiClassLearMode["DISABLED"] = 0] = "DISABLED"; + ControllerSapiClassLearMode[ControllerSapiClassLearMode["INCLUSION_EXCLUSION"] = 1] = "INCLUSION_EXCLUSION"; + ControllerSapiClassLearMode[ControllerSapiClassLearMode["WIDE_INCLUSION"] = 2] = "WIDE_INCLUSION"; + ControllerSapiClassLearMode[ControllerSapiClassLearMode["WIDE_EXCLUSION"] = 3] = "WIDE_EXCLUSION"; +})(ControllerSapiClassLearMode || (ControllerSapiClassLearMode = {})); +class ControllerSapiClass { + _set_seq() { + const seq = this.seqNo; + this.seqNo += 1; + this.seqNo &= 0XFF; // 1 byte + if (this.seqNo == 0x0) + this.seqNo++; + return (seq); + } + _test_cmd(cmd) { + if (this.capabilities.status != ControllerSapiClassStatus.OK) + return (false); + if (cmd <= 0x0) + return (false); + cmd--; + if ((cmd / 0x8) >= this.capabilities.cmd_mask.length) + return (false); + if ((this.capabilities.cmd_mask[(cmd - (cmd % 0x8)) / 0x8] & (0x1 << (cmd % 0x8))) == 0x0) + return (false); + return (true); + } + _serial_api_setup(sub, args) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: ControllerSapiClassStatus.OK, data: [] }; + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SETUP) == false) { + out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; + return (out); + } + const serial_api_setup = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SETUP, [sub].concat(args)); + if (serial_api_setup.status != sapi_1.SapiClassStatus.OK) { + out.status = serial_api_setup.status; + return (out); + } + if (serial_api_setup.data.length < 0x1) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return (out); + } + if (serial_api_setup.data[0x0] == sapi_1.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_UNSUPPORTED) { + out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; + return (out); + } + if (serial_api_setup.data[0x0] != sub) { + out.status = ControllerSapiClassStatus.UNSUPPORT_SUB_CMD; + return (out); + } + out.data = serial_api_setup.data.slice(0x1, serial_api_setup.data.length); + return (out); + }); + } + _get_capabilities(out) { + return __awaiter(this, void 0, void 0, function* () { + const capabilities_info = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, []); + if (capabilities_info.status != sapi_1.SapiClassStatus.OK) { + out.status = capabilities_info.status; + return; + } + if (capabilities_info.data.length <= 0x8) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return; + } + out.status = ControllerSapiClassStatus.OK; + out.ApiVersion = capabilities_info.data[0x0]; + out.ApiRevision = capabilities_info.data[0x1]; + out.VendorID = capabilities_info.data[0x2] << 0x8 | capabilities_info.data[0x3]; + out.cmd_mask = capabilities_info.data.slice(0x8, capabilities_info.data.length); + if (vendorIds_1.controller_vendor_ids[out.VendorID] != undefined) { + out.VendorIDName = vendorIds_1.controller_vendor_ids[out.VendorID].Name; + out.VendorIDWebpage = vendorIds_1.controller_vendor_ids[out.VendorID].Webpage; + } + }); + } + _readNVM(addr, size) { + return __awaiter(this, void 0, void 0, function* () { + return (yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF])); + }); + } + _license_send(out, data) { + return __awaiter(this, void 0, void 0, function* () { + let nonse_info; + const seq = this._set_seq(); + nonse_info = yield this.sapi.sendCommandUnSz(this.RAZ7_LICENSE_CMD, data.concat([seq])); + if (nonse_info.status != sapi_1.SapiClassStatus.OK) + return nonse_info.status; + if (nonse_info.data.length < 0x1) + return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); + if (nonse_info.data[0x0] != this.RAZ7_LICENSE_STATUS_OK) + return (ControllerSapiClassStatus.WRONG_OUT_STATUS); + nonse_info = yield this.sapi.recvIncomingRequest(1000, this.RAZ7_LICENSE_CMD); + if (nonse_info.status != sapi_1.SapiClassStatus.OK) + return nonse_info.status; + if (nonse_info.data.length < 0x1) //0x1 seq + return (ControllerSapiClassStatus.WRONG_LENGTH_SEQ); + if (nonse_info.data[0x0] != seq) + return (ControllerSapiClassStatus.WRONG_SEQ); + out.data = nonse_info.data.slice(0x1, nonse_info.data.length); + return (ControllerSapiClassStatus.OK); + }); + } + _license_decrypt(data, iv) { + const aesCtr = new aes_js_1.ModeOfOperation.ofb(this.raz_key, iv); + const decryptedBytes = aesCtr.decrypt(data); + const crc16 = decryptedBytes[decryptedBytes.length - 0x2] | (decryptedBytes[decryptedBytes.length - 0x1] << 0x8); + if ((0, utilities_1.calcSigmaCRC16)(this.RAZ7_LICENSE_CRC, decryptedBytes, 0x0, decryptedBytes.length - 0x2) != crc16) + return (undefined); + return (Array.from(decryptedBytes)); + } + _license_encrypt(sub_cmd, data, iv) { + const pack = [sub_cmd].concat(data); + while (pack.length < (this.RAZ7_LICENSE_CMD_LEN - 0x2)) + pack.push(0xFF); + const crc = (0, utilities_1.calcSigmaCRC16)(this.RAZ7_LICENSE_CRC, pack, 0, pack.length); + pack.push(crc & 0xFF); + pack.push((crc >> 0x8) & 0xFF); + const aesCtr = new aes_js_1.ModeOfOperation.ofb(this.raz_key, iv); + const crypted = Array.from(aesCtr.encrypt(pack)); + return (crypted); + } + _license_get_nonce(out) { + return __awaiter(this, void 0, void 0, function* () { + const status = yield this._license_send(out, []); + if (status != ControllerSapiClassStatus.OK) + return (status); + if (out.data.length != this.RAZ7_LICENSE_CMD_LEN + this.RAZ7_LICENSE_IV_LEN) + return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); + const decrypt = this._license_decrypt(out.data.slice(0x0, 0x0 + this.RAZ7_LICENSE_CMD_LEN), out.data.slice(this.RAZ7_LICENSE_CMD_LEN, this.RAZ7_LICENSE_CMD_LEN + this.RAZ7_LICENSE_IV_LEN)); + if (decrypt == undefined) + return (ControllerSapiClassStatus.WRONG_CRC); + if (decrypt.length < 0x2 + this.RAZ7_LICENSE_NONCE_LEN) + return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); + if (decrypt[0x0] != this.RAZ7_LICENSE_NONCE_SUBCMD) + return (ControllerSapiClassStatus.WRONG_OUT_STATUS); + if (decrypt[0x1] != this.RAZ7_LICENSE_STATUS_OK) + return (ControllerSapiClassStatus.WRONG_OUT_STATUS); + out.data = decrypt.slice(0x2, 0x2 + this.RAZ7_LICENSE_NONCE_LEN); + return (ControllerSapiClassStatus.OK); + }); + } + _license(sub_cmd, data, out) { + return __awaiter(this, void 0, void 0, function* () { + let status; + if (this._test_cmd(this.RAZ7_LICENSE_CMD) == false) + return (ControllerSapiClassStatus.UNSUPPORT_CMD); + if (this.isRazberry7() == false) + return (ControllerSapiClassStatus.NOT_RAZBERRY); + status = yield this._license_get_nonce(out); + if (status != ControllerSapiClassStatus.OK) + return (status); + const iv_y = Array.from((0, uuid_1.parse)((0, uuid_1.v4)())).slice(0x0, 0x8); + const iv = out.data.concat(iv_y); + const crypted = this._license_encrypt(sub_cmd, data, iv); + status = yield this._license_send(out, crypted.concat(iv_y)); + if (status != ControllerSapiClassStatus.OK) + return (status); + const decrypt = this._license_decrypt(out.data, iv); + if (decrypt == undefined) + return (ControllerSapiClassStatus.WRONG_CRC); + if (decrypt.length < 0x2) + return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); + if (decrypt[0x0] != sub_cmd) + return (ControllerSapiClassStatus.WRONG_OUT_SUB_CMD); + if (decrypt[0x1] != this.RAZ7_LICENSE_STATUS_OK) + return (ControllerSapiClassStatus.WRONG_OUT_STATUS); + out.data = decrypt.slice(0x2, decrypt.length); + return (ControllerSapiClassStatus.OK); + }); + } + _license_decode(license_info, raw_license) { + let byte_i, bit_i; + if (raw_license.length < 32) + return; + raw_license = raw_license.slice(0, 32); + const crc16 = raw_license[raw_license.length - 0x2] | (raw_license[raw_license.length - 0x1] << 0x8); + if ((0, utilities_1.calcSigmaCRC16)(this.RAZ7_LICENSE_CRC, raw_license, 0x0, raw_license.length - 0x2) != crc16) + return; + license_info.crc16 = crc16; + license_info.vallid = true; + license_info.vendor_id = (raw_license[0x0] << 0x8) | raw_license[0x1]; + license_info.max_nodes = raw_license[0x2]; + license_info.count_support = (raw_license[this.RAZ7_COUNT_SUPPORT_OFFSET + 1] << 8) + raw_license[this.RAZ7_COUNT_SUPPORT_OFFSET]; + byte_i = 0x0; + while (byte_i < this.RAZ7_FLAGS_SIZE) { + bit_i = 0x0; + while (bit_i < 0x8) { + if ((raw_license[this.RAZ7_FLAG_OFFSET + byte_i] & (0x1 << bit_i)) != 0x0) { + if (license_info.flags[byte_i * 0x8 + bit_i] != undefined) + license_info.flags[byte_i * 0x8 + bit_i].active = true; + } + bit_i++; + } + byte_i++; + } + return; + } + _license_get(license_info) { + return __awaiter(this, void 0, void 0, function* () { + const out = { data: [] }; + license_info.flags = this.license_flags; + license_info.status = yield this._license(this.RAZ7_LICENSE_GET_SUBCMD, [], out); + if (license_info.status != ControllerSapiClassStatus.OK) + return; + this._license_decode(license_info, out.data); + return; + }); + } + _get_board_info(out) { + return __awaiter(this, void 0, void 0, function* () { + let lock_status_name; + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER) == false) { + out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; + return; + } + const board_info = yield this._readNVM(0xFFFF00, 0x31); + if (board_info.status != sapi_1.SapiClassStatus.OK) { + out.status = board_info.status; + return; + } + const data = board_info.data; + if (data.length < 49) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return; + } + out.status = ControllerSapiClassStatus.OK; + out.core_version = (0, utilities_1.costruct_int)(data.slice(0, 0 + 2), 2, false); + out.build_seq = (0, utilities_1.costruct_int)(data.slice(2, 2 + 4), 4, false); + out.build_ts = (0, utilities_1.costruct_int)(data.slice(6, 6 + 4), 4, false); + out.hw_revision = (0, utilities_1.costruct_int)(data.slice(10, 10 + 2), 2, false); + out.sdk_version = (0, utilities_1.costruct_int)(data.slice(12, 12 + 4), 4, false); + out.chip_uuid = data.slice(16, 16 + 8); + out.sn_raw = data.slice(24, 40); + out.bootloader_version = (0, utilities_1.costruct_int)(data.slice(40, 44), 4, false); + out.bootloader_crc32 = (0, utilities_1.costruct_int)(data.slice(44, 48), 4, false); + out.lock_status = data[48]; + switch (data[48]) { + case ControllerSapiClassLockStatus.UNLOCKED: + lock_status_name = "UNLOCKED"; + break; + case ControllerSapiClassLockStatus.DBG_LOCKED: + lock_status_name = "DBG_LOCKED"; + break; + case ControllerSapiClassLockStatus.APP_LOCKED: + lock_status_name = "APP_LOCKED"; + break; + case ControllerSapiClassLockStatus.FULL_LOCKED: + lock_status_name = "FULL_LOCKED"; + break; + default: + lock_status_name = "UNKNOWN"; + break; + } + out.lock_status_name = lock_status_name; + const se_version_offset = 49; + const se_version_size = 0x4; + if (data.length < se_version_offset + se_version_size) + return; + out.se_version = (0, utilities_1.costruct_int)(data.slice(se_version_offset, se_version_offset + se_version_size), se_version_size, false); + const chip_offset = se_version_offset + se_version_size; + const chip_size = 0x2; + if (data.length < chip_offset + chip_size) + return; + out.chip_family = data[chip_offset]; + out.chip_type = data[chip_offset + 0x1]; + const key_hash_offset = chip_offset + chip_size; + const key_hash_size = 0x4; + if (data.length < key_hash_offset + key_hash_size) + return; + out.keys_hash = (0, utilities_1.costruct_int)(data.slice(key_hash_offset, key_hash_offset + key_hash_size), key_hash_size, false); + }); + } + _begin(test) { + return __awaiter(this, void 0, void 0, function* () { + let us_lr, eu_lr; + yield this._get_capabilities(this.capabilities); + if (test == true && this.capabilities.status != ControllerSapiClassStatus.OK) + return; + const node_base_type = yield this._serial_api_setup(sapi_1.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET, [sapi_1.SapiClassNodeIdBaseType.TYPE_16_BIT]); + if (node_base_type.data.length < 0x1 || node_base_type.data[0x0] == 0x0) + this.node_base = sapi_1.SapiClassNodeIdBaseType.TYPE_8_BIT; + else + this.node_base = sapi_1.SapiClassNodeIdBaseType.TYPE_16_BIT; + if (this.isRazberry7() == true) { + yield this._license_get(this.license); + yield this._get_board_info(this.board_info); + us_lr = false; + eu_lr = false; + if (this.license.status == ControllerSapiClassStatus.OK) { + if (this.license.flags[this.LICENSE_KEY_LONG_RANGE] != undefined && this.license.flags[this.LICENSE_KEY_LONG_RANGE].active == true) { + us_lr = true; + const version = (this.capabilities.ApiVersion << 0x8) | this.capabilities.ApiRevision; + if (this.capabilities.status == ControllerSapiClassStatus.OK && version >= 0x72D) + eu_lr = true; + } + } + this.region = new region_1.SapiRegionClass(us_lr, eu_lr); + } + else + this.region = new region_1.SapiRegionClass(); + return; + }); + } + _node_to_bytes(node) { + if (this.node_base == sapi_1.SapiClassNodeIdBaseType.TYPE_16_BIT) + return ((0, utilities_1.intToBytearrayMsbLsb)(node, 0x2)); + return ((0, utilities_1.intToBytearrayMsbLsb)(node, 0x1)); + } + _load_file(addr, data, process) { + return __awaiter(this, void 0, void 0, function* () { + let step, i, percentage; + step = this.getQuantumSize(); + percentage = 0x0; + i = 0x0; + while (i < data.length) { + if (i + step > data.length) + step = data.length - i; + percentage = (i * 100.0) / data.length; + if (process != null) + process(percentage); + const status = yield this.nvmWrite(addr, data.subarray(i, i + step)); + if (status != ControllerSapiClassStatus.OK) + return (status); + i = i + step; + addr = addr + step; + } + if (process != null && percentage < 100.00) + process(100.00); + return (ControllerSapiClassStatus.OK); + }); + } + _isRazberry() { + if (this.capabilities.status != ControllerSapiClassStatus.OK) + return (false); + if (this.capabilities.VendorID == 0x0115 || this.capabilities.VendorID == 0x0147) + return (true); + return (false); + } + _learn_mode(mode) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: ControllerSapiClassStatus.OK, seq: 0x0 }; + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE) == false) { + out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; + return (out); + } + const seq = this._set_seq(); + const send_mode = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE, [mode, seq]); + if (send_mode.status != sapi_1.SapiClassStatus.OK) { + out.status = send_mode.status; + return (out); + } + if (send_mode.data.length != 0x1) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK_STATUS; + return (out); + } + if (send_mode.data[0x0] != 0x1) { + out.status = ControllerSapiClassStatus.WRONG_CALLBACK_STATUS; + return (out); + } + out.seq = seq; + return (out); + }); + } + getPower() { + return __awaiter(this, void 0, void 0, function* () { + const power_get_out = { status: ControllerSapiClassStatus.OK, power_raw: 0x0, step: 0x1, min: 1, max: 247 }; + if (this.isRazberry7() == false) { + power_get_out.status = ControllerSapiClassStatus.NOT_RAZBERRY; + return (power_get_out); + } + const power_get = yield this._serial_api_setup(sapi_1.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET, []); + if (power_get.status != ControllerSapiClassStatus.OK) { + power_get_out.status = power_get.status; + return (power_get_out); + } + if (power_get.data.length < 0x2) { + power_get_out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return (power_get_out); + } + if (power_get.data[0x1] != 0x0) { + power_get_out.status = ControllerSapiClassStatus.NOT_RAZBERRY; + return (power_get_out); + } + power_get_out.power_raw = power_get.data[0x0]; + return (power_get_out); + }); + } + setPower(power_raw) { + return __awaiter(this, void 0, void 0, function* () { + if (this.isRazberry7() == false) + return (ControllerSapiClassStatus.NOT_RAZBERRY); + const power_set = yield this._serial_api_setup(sapi_1.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET, [power_raw, 0x0]); + if (power_set.status != ControllerSapiClassStatus.OK) + return (power_set.status); + if (power_set.data.length < 0x1) + return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); + if (power_set.data[0x1] == 0x0) + return (ControllerSapiClassStatus.INVALID_SET); + return (ControllerSapiClassStatus.OK); + }); + } + isLr(region) { + return (this.region.isLr(region)); + } + isLicenseSupportBackup() { + if (this.license.status != ControllerSapiClassStatus.OK) + return (false); + if (this.license.flags[this.LICENSE_KEY_BACKUP] != undefined && this.license.flags[this.LICENSE_KEY_BACKUP].active == true) + return (true); + return (false); + } + getRegion() { + return __awaiter(this, void 0, void 0, function* () { + let region; + const out = { status: ControllerSapiClassStatus.OK, region: "", region_array: this.region.getListRegion() }; + if (this.isRazberry7() == true) { + const custom_region_info = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_PROPRIETARY_2, [0xFF]); + if (custom_region_info.status != sapi_1.SapiClassStatus.OK) { + out.status = custom_region_info.status; + return (out); + } + if (custom_region_info.data.length < 0x1) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return (out); + } + region = this.region.getNameRegionCustom(custom_region_info.data[0x0]); + if (region == undefined) { + out.status = ControllerSapiClassStatus.WRONG_IN_DATA; + return (out); + } + out.region = region; + } + else { + const rerion_get = yield this._serial_api_setup(sapi_1.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_GET, []); + if (rerion_get.status != ControllerSapiClassStatus.OK) { + out.status = rerion_get.status; + return (out); + } + if (rerion_get.data.length < 0x1) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return (out); + } + region = this.region.getNameRegion(rerion_get.data[0x0]); + if (region == undefined) { + out.status = ControllerSapiClassStatus.WRONG_IN_DATA; + return (out); + } + out.region = region; + } + return (out); + }); + } + setRegion(region) { + return __awaiter(this, void 0, void 0, function* () { + if (this.isRazberry7() == true) { + const custom_region_id = this.region.getIdRegionCustom(region); + if (custom_region_id == undefined) + return (ControllerSapiClassStatus.INVALID_ARG); + const custom_region_set = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_PROPRIETARY_2, [custom_region_id]); + if (custom_region_set.status != sapi_1.SapiClassStatus.OK) + return custom_region_set.status; + const res = yield this.sapi.recvIncomingRequest(1000, sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + yield this._begin(false); + return (ControllerSapiClassStatus.OK); + } + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) == false) + return (ControllerSapiClassStatus.UNSUPPORT_CMD); + const region_id = this.region.getIdRegion(region); + if (region_id == undefined) + return (ControllerSapiClassStatus.INVALID_ARG); + const rerion_get = yield this._serial_api_setup(sapi_1.SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_SET, [region_id]); + if (rerion_get.status != ControllerSapiClassStatus.OK) + return (rerion_get.status); + if (rerion_get.data.length < 0x1) + return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); + if (rerion_get.data[0x0] == 0x0) + return (ControllerSapiClassStatus.NOT_SET); + return (this.softReset()); + }); + } + softReset() { + return __awaiter(this, arguments, void 0, function* (timeout = 3000) { + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], timeout, sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + yield this._begin(false); + return (ControllerSapiClassStatus.OK); + }); + } + setDefault() { + return __awaiter(this, void 0, void 0, function* () { + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT) == false) + return (ControllerSapiClassStatus.UNSUPPORT_CMD); + const seq = this._set_seq(); + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT, [seq]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + if (res.data.length < 0x1) //0x1 seq + return (ControllerSapiClassStatus.WRONG_LENGTH_SEQ); + if (res.data[0x0] != seq) + return (ControllerSapiClassStatus.WRONG_SEQ); + yield this._begin(false); + return (ControllerSapiClassStatus.OK); + }); + } + nvmWrite(addr, data) { + return __awaiter(this, void 0, void 0, function* () { + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER) == false) + return (ControllerSapiClassStatus.UNSUPPORT_CMD); + const data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (data.length >> 8) & 0xFF, data.length & 0xFF]; + if (data.length > this.getQuantumSize()) + return (ControllerSapiClassStatus.WRONG_SEND_DATA_LENGHT); + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(Array.from(data))); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + if (res.data.length < 0x1) + return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); + if (res.data[0x0] != 0x1) + return (ControllerSapiClassStatus.NOT_SET); + return (ControllerSapiClassStatus.OK); + }); + } + updateFirmware(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + if (this.isRazberry7() == false) + return (ControllerSapiClassStatus.NOT_RAZBERRY); + const status = yield this._load_file(0x3A000, data, process); + if (status != ControllerSapiClassStatus.OK) + return (status); + const res = yield this.sapi.update(0x3A000, target_type); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ControllerSapiClassStatus.OK); + }); + } + updateBotloader(data, process) { + return __awaiter(this, void 0, void 0, function* () { + if (this.isRazberry7() == false) + return (ControllerSapiClassStatus.NOT_RAZBERRY); + const status = yield this._load_file(0x3A000, data, process); + if (status != ControllerSapiClassStatus.OK) + return (status); + const seq = this._set_seq(); + const response = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_PROPRIETARY_4, [seq]); + if (response.status != sapi_1.SapiClassStatus.OK) + return response.status; + if (response.data.length < 0x1) + return (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH); + if (response.data[0x0] != 0x00) + return (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS); + const callback = yield this.sapi.recvIncomingRequest(1000, sapi_1.SapiClassFuncId.FUNC_ID_PROPRIETARY_4); + if (callback.status != sapi_1.SapiClassStatus.OK) + return callback.status; + if (callback.data.length < 0x2) //0x1 seq + return (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH); + if (callback.data[0x0] != seq) + return (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ); + if (callback.data[0x1] != 0x0) + return (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS); + return (ControllerSapiClassStatus.OK); + }); + } + clear_node() { + return __awaiter(this, void 0, void 0, function* () { + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION) == false) + return (ControllerSapiClassStatus.UNSUPPORT_CMD); + const send_mode = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION, [0x80, 2, 7, 0], 200); + if (send_mode.status == sapi_1.SapiClassStatus.OK || send_mode.status == sapi_1.SapiClassStatus.TIMEOUT_RCV) + return (ControllerSapiClassStatus.OK); + return send_mode.status; + }); + } + includeWide() { + return __awaiter(this, void 0, void 0, function* () { + return (yield this._learn_mode(ControllerSapiClassLearMode.WIDE_INCLUSION)); + }); + } + excludingWide() { + return __awaiter(this, void 0, void 0, function* () { + return (yield this._learn_mode(ControllerSapiClassLearMode.WIDE_EXCLUSION)); + }); + } + include_excluding() { + return __awaiter(this, void 0, void 0, function* () { + return (yield this._learn_mode(ControllerSapiClassLearMode.INCLUSION_EXCLUSION)); + }); + } + disabled() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._learn_mode(ControllerSapiClassLearMode.DISABLED); + if (res.status != ControllerSapiClassStatus.OK) + return (res.status); + return (ControllerSapiClassStatus.OK); + }); + } + _waitLearn(timeout, seq) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.recvIncomingRequest(timeout); + if (res.status == sapi_1.SapiClassStatus.NO_SOF) + return (ControllerSapiClassStatus.PROCESS); + if (res.cmd != sapi_1.SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE) + return (ControllerSapiClassStatus.PROCESS); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + if (res.data.length < 0x3) + return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); + if (res.data[0x0] != seq) + return (ControllerSapiClassStatus.WRONG_SEQ); + if (res.data[0x1] == 0x6) + return (ControllerSapiClassStatus.OK); + if (res.data[0x1] == 0x1) + return (ControllerSapiClassStatus.PROCESS); + return (ControllerSapiClassStatus.LEARN_MODE_FALED); + }); + } + waitLearn(timeout, seq) { + return __awaiter(this, void 0, void 0, function* () { + const status = yield this._waitLearn(timeout, seq); + if (status == ControllerSapiClassStatus.OK) + yield this._begin(false); + return (status); + }); + } + GetInitData() { + return __awaiter(this, void 0, void 0, function* () { + let byte_i, bit_i; + const out = { status: ControllerSapiClassStatus.OK, node_list: [] }; + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA) == false) { + out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; + return (out); + } + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA, []); + if (res.status != sapi_1.SapiClassStatus.OK) { + out.status = res.status; + return (out); + } + if (res.data.length < 0x5 + 29) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return (out); + } + byte_i = 0x0; + while (byte_i < 29) { + bit_i = 0x0; + while (bit_i < 0x8) { + if ((res.data[0x3 + byte_i] & (0x1 << bit_i)) != 0x0) + out.node_list.push(byte_i * 0x8 + bit_i + 0x1); + bit_i++; + } + byte_i++; + } + return (out); + }); + } + GetNetworkIDs() { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: ControllerSapiClassStatus.OK, home: 0x0, node_id: 0x0 }; + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_MEMORY_GET_ID) == false) { + out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; + return (out); + } + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_MEMORY_GET_ID, []); + if (res.status != sapi_1.SapiClassStatus.OK) { + out.status = res.status; + return (out); + } + if (res.data.length < 0x4 + this.node_base) { + out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; + return (out); + } + out.home = (0, utilities_1.costruct_int)(res.data.slice(0x0, 0x4), 0x4, false); + out.node_id = (0, utilities_1.costruct_int)(res.data.slice(0x4, 0x4 + this.node_base), this.node_base, false); + return (out); + }); + } + removeFaledNode(node) { + return __awaiter(this, void 0, void 0, function* () { + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID) == false) + return (ControllerSapiClassStatus.UNSUPPORT_CMD); + const seq = this._set_seq(); + const response = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID, Array.from(this._node_to_bytes(node)).concat([seq])); + if (response.status != sapi_1.SapiClassStatus.OK) + return response.status; + if (response.data.length < 0x1) + return (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH); + if (response.data[0x0] != 0x00) + return (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS); + const callback = yield this.sapi.recvIncomingRequest(1000, sapi_1.SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID); + if (callback.status != sapi_1.SapiClassStatus.OK) + return callback.status; + if (callback.data.length < 0x2) //0x1 seq + return (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH); + if (callback.data[0x0] != seq) + return (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ); + if (callback.data[0x1] != 0x1) + return (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS); + return (ControllerSapiClassStatus.OK); + }); + } + nop(node) { + return __awaiter(this, void 0, void 0, function* () { + if (this._test_cmd(sapi_1.SapiClassFuncId.FUNC_ID_ZW_SEND_DATA) == false) + return (ControllerSapiClassStatus.UNSUPPORT_CMD); + const seq = this._set_seq(); + const response = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_ZW_SEND_DATA, Array.from(this._node_to_bytes(node)).concat([0x1, 0x0, 0x1, seq])); + if (response.status != sapi_1.SapiClassStatus.OK) + return response.status; + if (response.data.length < 0x1) + return (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH); + if (response.data[0x0] != 0x01) + return (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS); + const callback = yield this.sapi.recvIncomingRequest(1000, sapi_1.SapiClassFuncId.FUNC_ID_ZW_SEND_DATA); + if (callback.status != sapi_1.SapiClassStatus.OK) + return callback.status; + if (callback.data.length < 0x2) //0x1 seq + return (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH); + if (callback.data[0x0] != seq) + return (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ); + if (callback.data[0x1] == 0x1) + return (ControllerSapiClassStatus.TRANSMIT_COMPLETE_NO_ACK); + if (callback.data[0x1] != 0x0) + return (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS); + return (ControllerSapiClassStatus.OK); + }); + } + getBoardInfo() { + return (this.board_info); + } + setLicense(license) { + return __awaiter(this, void 0, void 0, function* () { + const out = { data: [] }; + const status = yield this._license(this.RAZ7_LICENSE_SET_SUBCMD, license, out); + if (status != ControllerSapiClassStatus.OK) + return (status); + yield this._license_get(this.license); + return (this.license.status); + }); + } + getLicense() { + return (this.license); + } + getCapabilities() { + return (this.capabilities); + } + isRazberry5() { + if (this._isRazberry() == false) + return (false); + if (this.capabilities.ApiVersion == 0x5) + return (true); + return (false); + } + isRazberry7() { + if (this._isRazberry() == false) + return (false); + if (this.capabilities.ApiVersion == 0x7) + return (true); + return (false); + } + connect() { + return __awaiter(this, void 0, void 0, function* () { + this.node_base = sapi_1.SapiClassNodeIdBaseType.TYPE_8_BIT; + this.capabilities.status = ControllerSapiClassStatus.NOT_INIT; + this.license.status = ControllerSapiClassStatus.NOT_INIT; + this.board_info.status = ControllerSapiClassStatus.NOT_INIT; + yield this._begin(true); + }); + } + getQuantumSize() { + return (this.sapi.getQuantumSize()); + } + lock() { + return (this.sapi.lock()); + } + unlock() { + return (this.sapi.unlock()); + } + is_busy() { + return (this.sapi.is_busy()); + } + constructor(sapi) { + this.RAZ7_LICENSE_CMD = 0xF5; + this.RAZ7_LICENSE_CRC = 0x1D0F; + this.RAZ7_LICENSE_STATUS_OK = 0x00; + this.RAZ7_LICENSE_GET_SUBCMD = 0x00; + this.RAZ7_LICENSE_NONCE_SUBCMD = 0x02; + this.RAZ7_LICENSE_SET_SUBCMD = 0x01; + this.RAZ7_LICENSE_CMD_LEN = 0x30; + this.RAZ7_LICENSE_NONCE_LEN = 0x08; + this.RAZ7_LICENSE_IV_LEN = 0x10; + this.RAZ7_FLAG_OFFSET = 0x03; + this.RAZ7_FLAGS_SIZE = 0x08; + this.RAZ7_COUNT_SUPPORT_OFFSET = this.RAZ7_FLAG_OFFSET + this.RAZ7_FLAGS_SIZE; + this.LICENSE_KEY_LONG_RANGE = 0x5; + this.LICENSE_KEY_BACKUP = 0x2; + this.license_flags = { + 0x00: { name: "Controller Static API", title: "Enables static cotroller mode. User can switch Razberry to \"staic\" mode instead of default \"bridge\"", active: false }, + 0x01: { name: "Allow max RF power", title: "If set user can increase power amplifier up to 24dBm. Without that flag the user is limited by 7dBm", active: false }, + 0x02: { name: "Backup/Restore", title: "Enables backup/restore operations", active: false }, + 0x03: { name: "Battery save on sleeping", title: "If controller doesn't respond to WakeUp Notification, razberry responds itself with WakUp No more information. This prevents device battery discharge", active: false }, + 0x04: { name: "Advanced network diagnostics", title: "Enables backward RSSI dump and other extendended ZME features", active: false }, + 0x05: { name: "Z-Wave Long Range", title: "Enables Z-Wave Long Range support", active: false }, + 0x06: { name: "Fast communications", title: "Enables UART baudrate setting command", active: false }, + 0x07: { name: "Change vendor ID", title: "Maps subvendor to vendor field in controller information", active: false }, + 0x08: { name: "Promiscuous mode (Zniffer)", title: "Enables promisc functionality. Controller dumps all the packages in its network", active: false }, + 0x0A: { name: "RF jamming detection", title: "Enables jamming detection notifications", active: false }, + 0x0B: { name: "Zniffer in PTI mode", title: "Enables Packet Trace Interface. Device dumps all the packets it sends and receives. This uses external UART interface and doesn't consume time of the main core", active: false }, + 0x0C: { name: "Zniffer and Advanced Radio Tool", title: "Razberry works as direct transmitter", active: false }, + }; + this.raz_key = [0x86, 0x78, 0x02, 0x09, 0x8D, 0x89, 0x4D, 0x41, 0x8F, 0x3F, 0xD2, 0x04, 0x2E, 0xEC, 0xF5, 0xC4, 0x05, 0x8C, 0xB9, 0x36, 0xA9, 0xCC, 0x4B, 0x87, 0x91, 0x39, 0x36, 0xB7, 0x43, 0x18, 0x37, 0x42]; + this.region = new region_1.SapiRegionClass(); + this.node_base = sapi_1.SapiClassNodeIdBaseType.TYPE_8_BIT; + this.seqNo = 0x1; + this.capabilities = { status: ControllerSapiClassStatus.NOT_INIT, ApiVersion: 0x0, ApiRevision: 0x0, VendorID: 0x0, VendorIDName: "Unknown", cmd_mask: [] }; + this.license = { status: ControllerSapiClassStatus.NOT_INIT, vallid: false, vendor_id: 0x0, max_nodes: 0x0, count_support: 0x0, flags: [], crc16: 0x0 }; + this.board_info = { status: ControllerSapiClassStatus.NOT_INIT, core_version: 0x0, build_seq: 0x0, build_ts: 0x0, hw_revision: 0x0, sdk_version: 0x0, chip_uuid: [], sn_raw: [], bootloader_version: 0x0, bootloader_crc32: 0x0, lock_status: 0x0, + lock_status_name: "", se_version: 0x0, chip_type: chip_1.HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family: chip_1.HardwareChipClass.FAMILY_ZGM13, keys_hash: 0x2C6FAF52 }; + this.sapi = sapi; + } +} +exports.ControllerSapiClass = ControllerSapiClass; + + +/***/ }), + +/***/ "./src/sapi/region.ts": +/*!****************************!*\ + !*** ./src/sapi/region.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SapiRegionClass = void 0; +class SapiRegionClass { + isLr(region) { + if (this.region_lr.includes(region) == false) + return (false); + return (true); + } + _getNameRegion(region, region_conv) { + let i; + i = 0x0; + while (i < region_conv.length) { + if (region_conv[i].id == region) { + const region_list = this.getListRegion(); + if (region_list.includes(region_conv[i].name) == false) + return (undefined); + return (region_conv[i].name); + } + i++; + } + return (undefined); + } + _getIdRegion(region, region_conv) { + let i; + const region_list = this.getListRegion(); + if (region_list.includes(region) == false) + return (undefined); + i = 0x0; + while (i < region_conv.length) { + if (region_conv[i].name == region) + return (region_conv[i].id); + i++; + } + return (undefined); + } + getNameRegion(region) { + return (this._getNameRegion(region, this.region_string_to_number)); + } + getNameRegionCustom(region) { + return (this._getNameRegion(region, this.region_custom_string_to_number)); + } + getIdRegion(region) { + return (this._getIdRegion(region, this.region_string_to_number)); + } + getIdRegionCustom(region) { + return (this._getIdRegion(region, this.region_custom_string_to_number)); + } + getListRegion() { + let out; + out = this.region_standart; + if (this.us_lr == true) + out = out.concat([this.REGION_US_LR]); + if (this.eu_lr == true) + out = out.concat([this.REGION_EU_LR]); + out = out.sort(); + return (out); + } + constructor(us_lr, eu_lr) { + this.REGION_EU = "EU"; + this.REGION_US = "US"; + this.REGION_ANZ = "ANZ"; + this.REGION_HK = "HK"; + this.REGION_IN = "IN"; + this.REGION_IL = "IL"; + this.REGION_RU = "RU"; + this.REGION_CN = "CN"; + this.REGION_JP = "JP"; + this.REGION_KR = "KR"; + this.REGION_EU_LR = "EU_LR"; + this.REGION_US_LR = "US_LR"; + this.region_lr = [ + this.REGION_EU_LR, this.REGION_US_LR + ]; + this.region_standart = [ + this.REGION_EU, this.REGION_US, this.REGION_ANZ, this.REGION_HK, this.REGION_IN, + this.REGION_IL, this.REGION_RU, this.REGION_CN, this.REGION_JP, this.REGION_KR, + ]; + this.region_string_to_number = [ + { name: this.REGION_EU, id: 0x0 }, { name: this.REGION_US, id: 0x01 }, { name: this.REGION_ANZ, id: 0x02 }, + { name: this.REGION_HK, id: 0x3 }, { name: this.REGION_IN, id: 0x5 }, { name: this.REGION_IL, id: 0x6 }, + { name: this.REGION_RU, id: 0x7 }, { name: this.REGION_CN, id: 0x8 }, { name: this.REGION_JP, id: 0x20 }, + { name: this.REGION_KR, id: 0x21 }, { name: this.REGION_US_LR, id: 0x9 }, { name: this.REGION_EU_LR, id: 0xB }, + { name: this.REGION_EU, id: 0xFF } + ]; + this.region_custom_string_to_number = [ + { name: this.REGION_EU, id: 0x0 }, { name: this.REGION_US, id: 0x03 }, { name: this.REGION_ANZ, id: 0x04 }, + { name: this.REGION_HK, id: 0x05 }, { name: this.REGION_IN, id: 0x02 }, { name: this.REGION_IL, id: 0x09 }, + { name: this.REGION_RU, id: 0x01 }, { name: this.REGION_CN, id: 0x06 }, { name: this.REGION_JP, id: 0x07 }, + { name: this.REGION_KR, id: 0x08 }, { name: this.REGION_US_LR, id: 0x0B }, { name: this.REGION_EU_LR, id: 0x0C }, + ]; + if (us_lr == undefined) + us_lr = false; + if (eu_lr == undefined) + eu_lr = false; + this.us_lr = us_lr; + this.eu_lr = eu_lr; + } +} +exports.SapiRegionClass = SapiRegionClass; + + +/***/ }), + +/***/ "./src/sapi/sapi.ts": +/*!**************************!*\ + !*** ./src/sapi/sapi.ts ***! + \**************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SapiClassDetectType = exports.SapiClassNodeIdBaseType = exports.SapiClassSerialAPISetupCmd = exports.SapiClassFuncId = exports.SapiClassStatus = exports.SapiClass = void 0; +const utilities_1 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +const define_1 = __webpack_require__(/*! ../other/define */ "./src/other/define.ts"); +const utilities_2 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +var SapiClassDetectType; +(function (SapiClassDetectType) { + SapiClassDetectType[SapiClassDetectType["RAZBERRY"] = 0] = "RAZBERRY"; + SapiClassDetectType[SapiClassDetectType["ZUNO"] = 1] = "ZUNO"; + SapiClassDetectType[SapiClassDetectType["UNKNOWN"] = 2] = "UNKNOWN"; +})(SapiClassDetectType || (exports.SapiClassDetectType = SapiClassDetectType = {})); +var SapiClassStatus; +(function (SapiClassStatus) { + SapiClassStatus[SapiClassStatus["OK"] = 0] = "OK"; + SapiClassStatus[SapiClassStatus["NO_ACK"] = 1] = "NO_ACK"; + SapiClassStatus[SapiClassStatus["INVALID_DATA_LEN"] = 2] = "INVALID_DATA_LEN"; + SapiClassStatus[SapiClassStatus["INVALID_CRC"] = 3] = "INVALID_CRC"; + SapiClassStatus[SapiClassStatus["NO_SOF"] = 4] = "NO_SOF"; + SapiClassStatus[SapiClassStatus["NO_LENGHT"] = 5] = "NO_LENGHT"; + SapiClassStatus[SapiClassStatus["WRITE"] = 6] = "WRITE"; + SapiClassStatus[SapiClassStatus["WRONG_LENGHT"] = 7] = "WRONG_LENGHT"; + SapiClassStatus[SapiClassStatus["WRONG_CMD"] = 8] = "WRONG_CMD"; + SapiClassStatus[SapiClassStatus["PORT_NOT_OPEN"] = 9] = "PORT_NOT_OPEN"; + SapiClassStatus[SapiClassStatus["PORT_NOT_CLOSE"] = 10] = "PORT_NOT_CLOSE"; + SapiClassStatus[SapiClassStatus["PORT_NOT_REQUEST"] = 11] = "PORT_NOT_REQUEST"; + SapiClassStatus[SapiClassStatus["PORT_USED"] = 12] = "PORT_USED"; + SapiClassStatus[SapiClassStatus["PORT_BUSY"] = 13] = "PORT_BUSY"; + SapiClassStatus[SapiClassStatus["TIMEOUT_RCV"] = 14] = "TIMEOUT_RCV"; + SapiClassStatus[SapiClassStatus["SERIAL_UN_SUPPORT"] = 15] = "SERIAL_UN_SUPPORT"; + SapiClassStatus[SapiClassStatus["SERIAL_BUSY"] = 16] = "SERIAL_BUSY"; + SapiClassStatus[SapiClassStatus["REQUEST_ONE_SHOT"] = 17] = "REQUEST_ONE_SHOT"; + SapiClassStatus[SapiClassStatus["REQUEST_NO_SELECT"] = 18] = "REQUEST_NO_SELECT"; + SapiClassStatus[SapiClassStatus["ZUNO_NO_FREEZE"] = 19] = "ZUNO_NO_FREEZE"; + SapiClassStatus[SapiClassStatus["ZUNO_START_WRONG_LENG"] = 20] = "ZUNO_START_WRONG_LENG"; + SapiClassStatus[SapiClassStatus["ZUNO_START_WRONG_DATA"] = 21] = "ZUNO_START_WRONG_DATA"; + SapiClassStatus[SapiClassStatus["ZUNO_START_WRONG_FRAME"] = 22] = "ZUNO_START_WRONG_FRAME"; + SapiClassStatus[SapiClassStatus["DETECTED_UNC_COMMAND"] = 23] = "DETECTED_UNC_COMMAND"; + SapiClassStatus[SapiClassStatus["DETECTED_NOT_FIND"] = 24] = "DETECTED_NOT_FIND"; + SapiClassStatus[SapiClassStatus["DETECTED_CANCEL"] = 25] = "DETECTED_CANCEL"; + SapiClassStatus[SapiClassStatus["DETECTED_UNC"] = 26] = "DETECTED_UNC"; + SapiClassStatus[SapiClassStatus["DETECTED_TARGET_TYPE"] = 27] = "DETECTED_TARGET_TYPE"; + SapiClassStatus[SapiClassStatus["UPDATE_UNK"] = 28] = "UPDATE_UNK"; + SapiClassStatus[SapiClassStatus["UPDATE_TIMEOUT"] = 29] = "UPDATE_TIMEOUT"; + SapiClassStatus[SapiClassStatus["UPDATE_PROCESS"] = 30] = "UPDATE_PROCESS"; + SapiClassStatus[SapiClassStatus["UPDATE_STEP_FAILL"] = 31] = "UPDATE_STEP_FAILL"; + SapiClassStatus[SapiClassStatus["WRONG_RETRIES_CAN"] = 32] = "WRONG_RETRIES_CAN"; + SapiClassStatus[SapiClassStatus["WRONG_RETRIES_NAK"] = 33] = "WRONG_RETRIES_NAK"; + SapiClassStatus[SapiClassStatus["TIMEOUT_RCV_I"] = 34] = "TIMEOUT_RCV_I"; + SapiClassStatus[SapiClassStatus["LAST_STATUS"] = 35] = "LAST_STATUS"; +})(SapiClassStatus || (exports.SapiClassStatus = SapiClassStatus = {})); +var SapiClassNodeIdBaseType; +(function (SapiClassNodeIdBaseType) { + SapiClassNodeIdBaseType[SapiClassNodeIdBaseType["TYPE_8_BIT"] = 1] = "TYPE_8_BIT"; + SapiClassNodeIdBaseType[SapiClassNodeIdBaseType["TYPE_16_BIT"] = 2] = "TYPE_16_BIT"; +})(SapiClassNodeIdBaseType || (exports.SapiClassNodeIdBaseType = SapiClassNodeIdBaseType = {})); +var SapiClassSerialAPISetupCmd; +(function (SapiClassSerialAPISetupCmd) { + // /** + // * The first 8 commands are given as bit-flags, and when all bits were consumed, a byte-array was created to give + // * more room. + // * The first 8 flags are the only ones that shall be used to fill the first byte when generating the response in + // * pOutputBuffer for the command, SERIAL_API_SETUP_CMD_SUPPORTED. + // * This is kept for backwards compatibility. + // */ + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_UNSUPPORTED"] = 0] = "SERIAL_API_SETUP_CMD_UNSUPPORTED"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_SUPPORTED"] = 1] = "SERIAL_API_SETUP_CMD_SUPPORTED"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_STATUS_REPORT"] = 2] = "SERIAL_API_SETUP_CMD_TX_STATUS_REPORT"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET"] = 4] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET"] = 8] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_GET_MAX_PAYLOAD_SIZE"] = 16] = "SERIAL_API_SETUP_CMD_TX_GET_MAX_PAYLOAD_SIZE"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_RF_REGION_GET"] = 32] = "SERIAL_API_SETUP_CMD_RF_REGION_GET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_RF_REGION_SET"] = 64] = "SERIAL_API_SETUP_CMD_RF_REGION_SET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET"] = 128] = "SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET"; + // /** + // * The below values are not flags and shall only be used with BITMASK_ADD_CMD() when generating + // * the response for the command, SERIAL_API_SETUP_CMD_SUPPORTED. + // */ + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_SET"] = 3] = "SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_SET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_GET"] = 5] = "SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_GET"; + // The values 6 and 7 are unused, but not reserved. + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_GET_MAX_LR_PAYLOAD_SIZE"] = 17] = "SERIAL_API_SETUP_CMD_TX_GET_MAX_LR_PAYLOAD_SIZE"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET_16_BIT"] = 18] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET_16_BIT"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET_16_BIT"] = 19] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET_16_BIT"; +})(SapiClassSerialAPISetupCmd || (exports.SapiClassSerialAPISetupCmd = SapiClassSerialAPISetupCmd = {})); +var SapiClassFuncId; +(function (SapiClassFuncId) { + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_INIT_DATA"] = 2] = "FUNC_ID_SERIAL_API_GET_INIT_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION"] = 3] = "FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_COMMAND_HANDLER"] = 4] = "FUNC_ID_APPLICATION_COMMAND_HANDLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_CONTROLLER_CAPABILITIES"] = 5] = "FUNC_ID_ZW_GET_CONTROLLER_CAPABILITIES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_SET_TIMEOUTS"] = 6] = "FUNC_ID_SERIAL_API_SET_TIMEOUTS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_CAPABILITIES"] = 7] = "FUNC_ID_SERIAL_API_GET_CAPABILITIES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_SOFT_RESET"] = 8] = "FUNC_ID_SERIAL_API_SOFT_RESET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_PROTOCOL_VERSION"] = 9] = "FUNC_ID_ZW_GET_PROTOCOL_VERSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_STARTED"] = 10] = "FUNC_ID_SERIAL_API_STARTED"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_SETUP"] = 11] = "FUNC_ID_SERIAL_API_SETUP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION_CMD_CLASSES"] = 12] = "FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION_CMD_CLASSES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_EX"] = 14] = "FUNC_ID_ZW_SEND_DATA_EX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_MULTI_EX"] = 15] = "FUNC_ID_ZW_SEND_DATA_MULTI_EX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_RF_RECEIVE_MODE"] = 16] = "FUNC_ID_ZW_SET_RF_RECEIVE_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_SLEEP_MODE"] = 17] = "FUNC_ID_ZW_SET_SLEEP_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_NODE_INFORMATION"] = 18] = "FUNC_ID_ZW_SEND_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA"] = 19] = "FUNC_ID_ZW_SEND_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_MULTI"] = 20] = "FUNC_ID_ZW_SEND_DATA_MULTI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_VERSION"] = 21] = "FUNC_ID_ZW_GET_VERSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_ABORT"] = 22] = "FUNC_ID_ZW_SEND_DATA_ABORT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RF_POWER_LEVEL_SET"] = 23] = "FUNC_ID_ZW_RF_POWER_LEVEL_SET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_META"] = 24] = "FUNC_ID_ZW_SEND_DATA_META"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SD"] = 25] = "FUNC_ID_ZW_RESERVED_SD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SDM"] = 26] = "FUNC_ID_ZW_RESERVED_SDM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SRI"] = 27] = "FUNC_ID_ZW_RESERVED_SRI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_RANDOM"] = 28] = "FUNC_ID_ZW_GET_RANDOM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RANDOM"] = 29] = "FUNC_ID_ZW_RANDOM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RF_POWER_LEVEL_REDISCOVERY_SET"] = 30] = "FUNC_ID_ZW_RF_POWER_LEVEL_REDISCOVERY_SET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_GET_ID"] = 32] = "FUNC_ID_MEMORY_GET_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_GET_BYTE"] = 33] = "FUNC_ID_MEMORY_GET_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_PUT_BYTE"] = 34] = "FUNC_ID_MEMORY_PUT_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_GET_BUFFER"] = 35] = "FUNC_ID_MEMORY_GET_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_PUT_BUFFER"] = 36] = "FUNC_ID_MEMORY_PUT_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_APPL_HOST_MEMORY_OFFSET"] = 37] = "FUNC_ID_SERIAL_API_GET_APPL_HOST_MEMORY_OFFSET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_DEBUG_OUTPUT"] = 38] = "FUNC_ID_DEBUG_OUTPUT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_AUTO_PROGRAMMING"] = 39] = "FUNC_ID_AUTO_PROGRAMMING"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVR_GET_VALUE"] = 40] = "FUNC_ID_NVR_GET_VALUE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_GET_ID"] = 41] = "FUNC_ID_NVM_GET_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_READ_LONG_BUFFER"] = 42] = "FUNC_ID_NVM_EXT_READ_LONG_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER"] = 43] = "FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_READ_LONG_BYTE"] = 44] = "FUNC_ID_NVM_EXT_READ_LONG_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_WRITE_LONG_BYTE"] = 45] = "FUNC_ID_NVM_EXT_WRITE_LONG_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_BACKUP_RESTORE"] = 46] = "FUNC_ID_NVM_BACKUP_RESTORE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NVR_GET_APP_VALUE"] = 47] = "FUNC_ID_ZW_NVR_GET_APP_VALUE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLOCK_SET"] = 48] = "FUNC_ID_CLOCK_SET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLOCK_GET"] = 49] = "FUNC_ID_CLOCK_GET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLOCK_CMP"] = 50] = "FUNC_ID_CLOCK_CMP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_CREATE"] = 51] = "FUNC_ID_RTC_TIMER_CREATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_READ"] = 52] = "FUNC_ID_RTC_TIMER_READ"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_DELETE"] = 53] = "FUNC_ID_RTC_TIMER_DELETE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_CALL"] = 54] = "FUNC_ID_RTC_TIMER_CALL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLEAR_TX_TIMERS"] = 55] = "FUNC_ID_CLEAR_TX_TIMERS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_TX_TIMERS"] = 56] = "FUNC_ID_GET_TX_TIMERS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_CLEAR_NETWORK_STATS"] = 57] = "FUNC_ID_ZW_CLEAR_NETWORK_STATS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_NETWORK_STATS"] = 58] = "FUNC_ID_ZW_GET_NETWORK_STATS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_BACKGROUND_RSSI"] = 59] = "FUNC_ID_ZW_GET_BACKGROUND_RSSI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LISTEN_BEFORE_TALK_THRESHOLD"] = 60] = "FUNC_ID_ZW_SET_LISTEN_BEFORE_TALK_THRESHOLD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REMOVE_NODE_ID_FROM_NETWORK"] = 63] = "FUNC_ID_ZW_REMOVE_NODE_ID_FROM_NETWORK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LEARN_NODE_STATE"] = 64] = "FUNC_ID_ZW_SET_LEARN_NODE_STATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_NODE_PROTOCOL_INFO"] = 65] = "FUNC_ID_ZW_GET_NODE_PROTOCOL_INFO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_DEFAULT"] = 66] = "FUNC_ID_ZW_SET_DEFAULT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NEW_CONTROLLER"] = 67] = "FUNC_ID_ZW_NEW_CONTROLLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE"] = 68] = "FUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REPLICATION_SEND_DATA"] = 69] = "FUNC_ID_ZW_REPLICATION_SEND_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_RETURN_ROUTE"] = 70] = "FUNC_ID_ZW_ASSIGN_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_DELETE_RETURN_ROUTE"] = 71] = "FUNC_ID_ZW_DELETE_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE"] = 72] = "FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODETYPE_NEIGHBOR_UPDATE"] = 104] = "FUNC_ID_ZW_REQUEST_NODETYPE_NEIGHBOR_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_APPLICATION_UPDATE"] = 73] = "FUNC_ID_ZW_APPLICATION_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ADD_NODE_TO_NETWORK"] = 74] = "FUNC_ID_ZW_ADD_NODE_TO_NETWORK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REMOVE_NODE_FROM_NETWORK"] = 75] = "FUNC_ID_ZW_REMOVE_NODE_FROM_NETWORK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_CREATE_NEW_PRIMARY"] = 76] = "FUNC_ID_ZW_CREATE_NEW_PRIMARY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_CONTROLLER_CHANGE"] = 77] = "FUNC_ID_ZW_CONTROLLER_CHANGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_FN"] = 78] = "FUNC_ID_ZW_RESERVED_FN"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_PRIORITY_RETURN_ROUTE"] = 79] = "FUNC_ID_ZW_ASSIGN_PRIORITY_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LEARN_MODE"] = 80] = "FUNC_ID_ZW_SET_LEARN_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_SUC_RETURN_ROUTE"] = 81] = "FUNC_ID_ZW_ASSIGN_SUC_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ENABLE_SUC"] = 82] = "FUNC_ID_ZW_ENABLE_SUC"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NETWORK_UPDATE"] = 83] = "FUNC_ID_ZW_REQUEST_NETWORK_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_SUC_NODE_ID"] = 84] = "FUNC_ID_ZW_SET_SUC_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_DELETE_SUC_RETURN_ROUTE"] = 85] = "FUNC_ID_ZW_DELETE_SUC_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_SUC_NODE_ID"] = 86] = "FUNC_ID_ZW_GET_SUC_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_SUC_ID"] = 87] = "FUNC_ID_ZW_SEND_SUC_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE"] = 88] = "FUNC_ID_ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REDISCOVERY_NEEDED"] = 89] = "FUNC_ID_ZW_REDISCOVERY_NEEDED"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE_OPTION"] = 90] = "FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE_OPTION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SUPPORT9600_ONLY"] = 91] = "FUNC_ID_ZW_SUPPORT9600_ONLY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NEW_ROUTE_DESTINATIONS"] = 92] = "FUNC_ID_ZW_REQUEST_NEW_ROUTE_DESTINATIONS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_NODE_WITHIN_DIRECT_RANGE"] = 93] = "FUNC_ID_ZW_IS_NODE_WITHIN_DIRECT_RANGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION"] = 94] = "FUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_EXPLORE_REQUEST_EXCLUSION"] = 95] = "FUNC_ID_ZW_EXPLORE_REQUEST_EXCLUSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODE_INFO"] = 96] = "FUNC_ID_ZW_REQUEST_NODE_INFO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REMOVE_FAILED_NODE_ID"] = 97] = "FUNC_ID_ZW_REMOVE_FAILED_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_FAILED_NODE_ID"] = 98] = "FUNC_ID_ZW_IS_FAILED_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REPLACE_FAILED_NODE"] = 99] = "FUNC_ID_ZW_REPLACE_FAILED_NODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_ROUTING_MAX_6_00"] = 101] = "FUNC_ID_ZW_SET_ROUTING_MAX_6_00"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_PRIMARY_CTRL"] = 102] = "FUNC_ID_ZW_IS_PRIMARY_CTRL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_AES_ECB"] = 103] = "FUNC_ID_ZW_AES_ECB"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_START"] = 112] = "FUNC_ID_TIMER_START"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_RESTART"] = 113] = "FUNC_ID_TIMER_RESTART"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_CANCEL"] = 114] = "FUNC_ID_TIMER_CANCEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_CALL"] = 115] = "FUNC_ID_TIMER_CALL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_FIRMWARE_UPDATE_NVM"] = 120] = "FUNC_ID_ZW_FIRMWARE_UPDATE_NVM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_ROUTING_TABLE_LINE"] = 128] = "FUNC_ID_GET_ROUTING_TABLE_LINE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_TX_COUNTER"] = 129] = "FUNC_ID_GET_TX_COUNTER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RESET_TX_COUNTER"] = 130] = "FUNC_ID_RESET_TX_COUNTER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_STORE_NODEINFO"] = 131] = "FUNC_ID_STORE_NODEINFO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_STORE_HOMEID"] = 132] = "FUNC_ID_STORE_HOMEID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_LOCK_ROUTE_RESPONSE"] = 144] = "FUNC_ID_LOCK_ROUTE_RESPONSE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_ROUTE_DEMO"] = 145] = "FUNC_ID_ZW_SEND_DATA_ROUTE_DEMO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_PRIORITY_ROUTE"] = 146] = "FUNC_ID_ZW_GET_PRIORITY_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_PRIORITY_ROUTE"] = 147] = "FUNC_ID_ZW_SET_PRIORITY_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_TEST"] = 149] = "FUNC_ID_SERIAL_API_TEST"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_EXT"] = 152] = "FUNC_ID_SERIAL_API_EXT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SECURITY_SETUP"] = 156] = "FUNC_ID_ZW_SECURITY_SETUP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_SECURITY_EVENT"] = 157] = "FUNC_ID_APPLICATION_SECURITY_EVENT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_APPL_SLAVE_NODE_INFORMATION"] = 160] = "FUNC_ID_SERIAL_API_APPL_SLAVE_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER"] = 161] = "FUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_SLAVE_NODE_INFORMATION"] = 162] = "FUNC_ID_ZW_SEND_SLAVE_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_SLAVE_DATA"] = 163] = "FUNC_ID_ZW_SEND_SLAVE_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_SLAVE_LEARN_MODE"] = 164] = "FUNC_ID_ZW_SET_SLAVE_LEARN_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_VIRTUAL_NODES"] = 165] = "FUNC_ID_ZW_GET_VIRTUAL_NODES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_VIRTUAL_NODE"] = 166] = "FUNC_ID_ZW_IS_VIRTUAL_NODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SSD"] = 167] = "FUNC_ID_ZW_RESERVED_SSD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_COMMAND_HANDLER_BRIDGE"] = 168] = "FUNC_ID_APPLICATION_COMMAND_HANDLER_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_BRIDGE"] = 169] = "FUNC_ID_ZW_SEND_DATA_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_META_BRIDGE"] = 170] = "FUNC_ID_ZW_SEND_DATA_META_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_MULTI_BRIDGE"] = 171] = "FUNC_ID_ZW_SEND_DATA_MULTI_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_SETSTOPMODE"] = 176] = "FUNC_ID_PWR_SETSTOPMODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_CLK_PD"] = 177] = "FUNC_ID_PWR_CLK_PD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_CLK_PUP"] = 178] = "FUNC_ID_PWR_CLK_PUP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_SELECT_CLK"] = 179] = "FUNC_ID_PWR_SELECT_CLK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_WUT_TIMEOUT"] = 180] = "FUNC_ID_ZW_SET_WUT_TIMEOUT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_WUT_KICKED"] = 181] = "FUNC_ID_ZW_IS_WUT_KICKED"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_ENABLE"] = 182] = "FUNC_ID_ZW_WATCHDOG_ENABLE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_DISABLE"] = 183] = "FUNC_ID_ZW_WATCHDOG_DISABLE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_KICK"] = 184] = "FUNC_ID_ZW_WATCHDOG_KICK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_EXT_INT_LEVEL"] = 185] = "FUNC_ID_ZW_SET_EXT_INT_LEVEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RF_POWER_LEVEL_GET"] = 186] = "FUNC_ID_ZW_RF_POWER_LEVEL_GET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_NEIGHBOR_COUNT"] = 187] = "FUNC_ID_ZW_GET_NEIGHBOR_COUNT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ARE_NODES_NEIGHBOURS"] = 188] = "FUNC_ID_ZW_ARE_NODES_NEIGHBOURS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_TYPE_LIBRARY"] = 189] = "FUNC_ID_ZW_TYPE_LIBRARY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_TEST_FRAME"] = 190] = "FUNC_ID_ZW_SEND_TEST_FRAME"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_PROTOCOL_STATUS"] = 191] = "FUNC_ID_ZW_GET_PROTOCOL_STATUS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_PROMISCUOUS_MODE"] = 208] = "FUNC_ID_ZW_SET_PROMISCUOUS_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER"] = 209] = "FUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_START"] = 210] = "FUNC_ID_ZW_WATCHDOG_START"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_STOP"] = 211] = "FUNC_ID_ZW_WATCHDOG_STOP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_ROUTING_MAX"] = 212] = "FUNC_ID_ZW_SET_ROUTING_MAX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_ROUTING_MAX"] = 213] = "FUNC_ID_ZW_GET_ROUTING_MAX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PM_STAY_AWAKE"] = 215] = "FUNC_ID_PM_STAY_AWAKE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PM_CANCEL"] = 216] = "FUNC_ID_PM_CANCEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NETWORK_MANAGEMENT_SET_MAX_INCLUSION_REQUEST_INTERVALS"] = 214] = "FUNC_ID_ZW_NETWORK_MANAGEMENT_SET_MAX_INCLUSION_REQUEST_INTERVALS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_INITIATE_SHUTDOWN"] = 217] = "FUNC_ID_ZW_INITIATE_SHUTDOWN"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_LR_NODES"] = 218] = "FUNC_ID_SERIAL_API_GET_LR_NODES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_LR_CHANNEL"] = 219] = "FUNC_ID_GET_LR_CHANNEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SET_LR_CHANNEL"] = 220] = "FUNC_ID_SET_LR_CHANNEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LR_VIRTUAL_IDS"] = 221] = "FUNC_ID_ZW_SET_LR_VIRTUAL_IDS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_DCDC_CONFIG"] = 222] = "FUNC_ID_GET_DCDC_CONFIG"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SET_DCDC_CONFIG"] = 223] = "FUNC_ID_SET_DCDC_CONFIG"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_CMD"] = 224] = "FUNC_ID_ZW_NUNIT_CMD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_INIT"] = 225] = "FUNC_ID_ZW_NUNIT_INIT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_LIST"] = 226] = "FUNC_ID_ZW_NUNIT_LIST"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_RUN"] = 227] = "FUNC_ID_ZW_NUNIT_RUN"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_END"] = 228] = "FUNC_ID_ZW_NUNIT_END"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ENABLE_RADIO_PTI"] = 231] = "FUNC_ID_ENABLE_RADIO_PTI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_RADIO_PTI"] = 232] = "FUNC_ID_GET_RADIO_PTI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SEND_NOP"] = 233] = "FUNC_ID_SEND_NOP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_POWER_MANAGEMENT"] = 238] = "FUNC_ID_SERIAL_API_POWER_MANAGEMENT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_READY"] = 239] = "FUNC_ID_SERIAL_API_READY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_0"] = 240] = "FUNC_ID_PROPRIETARY_0"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_1"] = 241] = "FUNC_ID_PROPRIETARY_1"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_2"] = 242] = "FUNC_ID_PROPRIETARY_2"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_3"] = 243] = "FUNC_ID_PROPRIETARY_3"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_4"] = 244] = "FUNC_ID_PROPRIETARY_4"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_5"] = 245] = "FUNC_ID_PROPRIETARY_5"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_6"] = 246] = "FUNC_ID_PROPRIETARY_6"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_7"] = 247] = "FUNC_ID_PROPRIETARY_7"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_8"] = 248] = "FUNC_ID_PROPRIETARY_8"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_9"] = 249] = "FUNC_ID_PROPRIETARY_9"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_A"] = 250] = "FUNC_ID_PROPRIETARY_A"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_B"] = 251] = "FUNC_ID_PROPRIETARY_B"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_C"] = 252] = "FUNC_ID_PROPRIETARY_C"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_D"] = 253] = "FUNC_ID_PROPRIETARY_D"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_E"] = 254] = "FUNC_ID_PROPRIETARY_E"; +})(SapiClassFuncId || (exports.SapiClassFuncId = SapiClassFuncId = {})); +class SapiClass { + _readWithTimeout(timeout) { + return __awaiter(this, void 0, void 0, function* () { + let out; + if (this.port == undefined || this.port.readable == null) + return (new Uint8Array([])); + const reader = this.port.readable.getReader(); + const timer = setTimeout(() => { + reader.releaseLock(); + }, timeout); + try { + out = (yield reader.read()).value; + } + catch (err) { + out = new Uint8Array([]); + } + clearTimeout(timer); + reader.releaseLock(); + return (out); + }); + } + _read(num) { + return __awaiter(this, void 0, void 0, function* () { + let out, i, rep, tempos; + rep = 0x0; + while (rep < 1) { + if (this.queue.length >= num) { + out = []; + i = 0x0; + while (i < num) { + tempos = this.queue.shift(); + if (tempos == undefined) + break; + out.push(tempos); + i++; + } + return (out); + } + const value = yield this._readWithTimeout(20); + i = 0x0; + while (i < value.byteLength) { + this.queue.push(value[i]); + i++; + } + rep++; + } + if (num >= this.queue.length) + num = this.queue.length; + out = []; + i = 0x0; + while (i < num) { + tempos = this.queue.shift(); + if (tempos == undefined) + break; + out.push(tempos); + i++; + } + return (out); + }); + } + _write(data) { + return __awaiter(this, void 0, void 0, function* () { + if (this.port == undefined || this.port.writable == null) + return (false); + const data_uint8 = new Uint8Array(data); + const writer = this.port.writable.getWriter(); + yield writer.write(data_uint8); + writer.releaseLock(); + if (define_1.WEB_TOOLS_BETA == true) + console.log(">> ", (0, utilities_2.splitHexBuff)(data_uint8)); + return (true); + }); + } + _recv_async() { + return __awaiter(this, void 0, void 0, function* () { + for (;;) { + if ((yield this._recvIncomingRequestAsyn(100)) == false) + break; + } + }); + } + _clear() { + return __awaiter(this, void 0, void 0, function* () { + yield this._recv_async(); + this.queue = []; + for (;;) { + const value = yield this._read(50); + if (value.length == 0x0) + return; + } + }); + } + _sendData(cmd, databuff) { + return __awaiter(this, void 0, void 0, function* () { + let final_data; + const data_len = databuff.length + this.ADDITIONAL_SIZE; + if (data_len > 255) { + const crc_data = [0x00, this.REQUEST, cmd].concat(databuff); + final_data = [0x00, (data_len >> 8) & 0x0FF, data_len & 0x0FF, this.REQUEST, cmd].concat(databuff); + const crc16 = (0, utilities_1.calcSigmaCRC16)(0x1D0F, crc_data, 0, crc_data.length); + final_data = [this.SOF].concat(final_data).concat([(crc16 >> 8) & 0xFF, (crc16) & 0xFF]); + if ((yield this._write(final_data)) == false) + return (false); + return (true); + } + final_data = [data_len & 0x0FF, this.REQUEST, cmd].concat(databuff); + const crc = (0, utilities_1.checksum)(final_data); + final_data = [this.SOF].concat(final_data).concat([crc]); + if ((yield this._write(final_data)) == false) + return (false); + return (true); + }); + } + _sendNack() { + return __awaiter(this, void 0, void 0, function* () { + return (yield (this._write([this.NAK]))); + }); + } + _sendAck() { + return __awaiter(this, void 0, void 0, function* () { + return (yield (this._write([this.ACK]))); + }); + } + _waitSOF(timeout) { + return __awaiter(this, void 0, void 0, function* () { + const sof_timeout = Date.now() + timeout; + while (sof_timeout > Date.now()) { + const sof = yield this._read(0x1); + if (sof.length == 0x0) { + continue; + } + if (sof[0x0] == this.SOF) + return (true); + } + return (false); + }); + } + _send_cmd(cmd, databuff) { + return __awaiter(this, void 0, void 0, function* () { + let rbuff, retries_nak, retries_can, retries_ack; + if (this.b_open == false) + return (SapiClassStatus.PORT_NOT_OPEN); + yield this._recv_async(); + retries_nak = 0x3; + retries_can = this.RETRIES_CAN; + retries_ack = 0x6; + for (;;) { + if (retries_nak < 0x0) + return (SapiClassStatus.WRONG_RETRIES_NAK); + if (retries_can < 0x0) + return (SapiClassStatus.WRONG_RETRIES_CAN); + if ((yield this._sendData(cmd, databuff)) == false) + return (SapiClassStatus.WRITE); + for (;;) { + if (retries_ack < 0x0) + return (SapiClassStatus.NO_ACK); + rbuff = yield this._read(0x1); + if (rbuff.length == 0x0) { + retries_ack--; + continue; + } + if (rbuff[0] == this.SOF) { + yield this._recvIncomingRequestAsyn(100, false); + continue; + } + break; + } + if (rbuff[0] == this.ACK) + break; + if (rbuff[0] == this.CAN) { + yield this._recv_async(); + retries_can--; + continue; + } + if (rbuff[0] == this.NAK) { + retries_nak--; + continue; + } + } + return (SapiClassStatus.OK); + }); + } + _request(filters) { + return __awaiter(this, void 0, void 0, function* () { + let port; + const nav_ext_serial = window.navigator; + if (this.port != undefined) + return (SapiClassStatus.REQUEST_ONE_SHOT); + try { + const options = { filters: filters }; + port = yield nav_ext_serial.serial.requestPort(options); + } + catch (e) { + return (SapiClassStatus.REQUEST_NO_SELECT); + } + this.port = port; + return (SapiClassStatus.OK); + }); + } + _open(baudRate) { + return __awaiter(this, void 0, void 0, function* () { + if (this.port == undefined) + return (SapiClassStatus.PORT_NOT_REQUEST); + if (this.b_open == true) + return (SapiClassStatus.PORT_NOT_OPEN); + try { + yield this.port.open({ baudRate, bufferSize: 8192 }); + } + catch (e) { + return (SapiClassStatus.PORT_USED); + } + this.b_open = true; + return (SapiClassStatus.OK); + }); + } + _close() { + return __awaiter(this, void 0, void 0, function* () { + if (this.port == undefined) + return (SapiClassStatus.PORT_NOT_REQUEST); + if (this.b_open == false) + return (SapiClassStatus.PORT_NOT_CLOSE); + yield this.port.close(); + this.b_open = false; + return (SapiClassStatus.OK); + }); + } + _recvIncomingRequest_add(lenght) { + return __awaiter(this, void 0, void 0, function* () { + let buff_data, wait_timeout; + const timout = 100; + buff_data = []; + wait_timeout = Date.now() + timout; + for (;;) { + const buffer = yield this._read(lenght - buff_data.length); + buff_data = buff_data.concat(buffer); + if (buff_data.length == lenght) + break; + if (buffer.length > 0x0) { + wait_timeout = Date.now() + timout; + continue; + } + if (Date.now() >= wait_timeout) { + yield this._sendNack(); + return ([]); + } + } + return (buff_data); + }); + } + _recvIncomingRequest(timeout_1) { + return __awaiter(this, arguments, void 0, function* (timeout, wait_sof = true) { + let buff_data; + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + if (this.b_open == false) { + out.status = SapiClassStatus.PORT_NOT_OPEN; + return (out); + } + if (wait_sof == true) { + if ((yield this._waitSOF(timeout)) == false) { + out.status = SapiClassStatus.NO_SOF; + return (out); + } + } + buff_data = yield this._recvIncomingRequest_add(0x1); + if (buff_data.length != 0x1) { + out.status = SapiClassStatus.NO_LENGHT; + return (out); + } + const len_data = buff_data[0x0]; + if (len_data < 0x3) { + out.status = SapiClassStatus.WRONG_LENGHT; + return (out); + } + buff_data = yield this._recvIncomingRequest_add(len_data); + if (buff_data.length != len_data) { + out.status = SapiClassStatus.INVALID_DATA_LEN; + return (out); + } + out.crc = (0, utilities_1.checksum)([len_data].concat(buff_data.slice(0, len_data - 0x1))); + if (out.crc != buff_data[len_data - 1]) { + yield this._sendNack(); + out.status = SapiClassStatus.INVALID_CRC; + return (out); + } + yield this._sendAck(); + out.raw = [this.SOF, len_data].concat(buff_data); + if (define_1.WEB_TOOLS_BETA == true) + console.log("<< ", (0, utilities_2.splitHexBuff)(out.raw)); + out.cmd = out.raw[0x3]; + out.data = out.raw.slice(0x4, out.raw.length - 0x1); + return (out); + }); + } + _recvIncomingRequestAsyn(timeout_1) { + return __awaiter(this, arguments, void 0, function* (timeout, wait_sof = true) { + const res = yield this._recvIncomingRequest(timeout, wait_sof); + if (res.status != SapiClassStatus.OK) + return (false); + // this.async_ret.push(res); + return (true); + }); + } + _sendCommandUnSz_rcv_test(res, cmd) { + if (res.status != SapiClassStatus.OK) + return (false); + if (res.cmd != cmd) + return (false); + return (true); + } + _sendCommandUnSz(cmd, args, timeout, cmd_ret) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + out.status = yield this._send_cmd(cmd, args); + if (out.status != SapiClassStatus.OK) { + return (out); + } + const wait_timeout = Date.now() + timeout; + for (;;) { + const current_timeout = Date.now(); + if (current_timeout >= wait_timeout) { + out.status = SapiClassStatus.TIMEOUT_RCV; + return (out); + } + const res = yield this._recvIncomingRequest(wait_timeout - current_timeout); + if (cmd_ret == undefined) + cmd_ret = cmd; + if (this._sendCommandUnSz_rcv_test(res, cmd_ret) == true) + return (res); + } + }); + } + _recvIncomingRequest_wait(timeout, cmd_ret) { + return __awaiter(this, void 0, void 0, function* () { + let res, i; + res = yield this._recvIncomingRequest(timeout); + if (cmd_ret == undefined) + return (res); + i = this.RETRIES_CAN; + for (;;) { + if (res.status != SapiClassStatus.OK) + break; + if (res.cmd == cmd_ret) + break; + if (i < 0x0) { + res.status = SapiClassStatus.TIMEOUT_RCV_I; + break; + } + res = yield this._recvIncomingRequest(100); + i--; + } + return (res); + }); + } + recvIncomingRequest(timeout, cmd_ret) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + this.b_busy = true; + const res = yield this._recvIncomingRequest_wait(timeout, cmd_ret); + this.b_busy = false; + return (res); + }); + } + sendCommandUnSz(cmd_1, args_1) { + return __awaiter(this, arguments, void 0, function* (cmd, args, timeout = 2000, cmd_ret) { + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + this.b_busy = true; + const res = yield this._sendCommandUnSz(cmd, args, timeout, cmd_ret); + this.b_busy = false; + return (res); + }); + } + lock() { + this.state_lock = true; + } + unlock() { + this.state_lock = false; + } + is_busy() { + if (this.state_lock == true) + return (true); + return (this.busy()); + } + busy() { + return (this.b_busy); + } + static supported() { + if (!("serial" in window.navigator)) + return (false); + return (true); + } + request(filters) { + return __awaiter(this, void 0, void 0, function* () { + if (this.busy() == true) + return (SapiClassStatus.SERIAL_BUSY); + if (SapiClass.supported() == false) + return (SapiClassStatus.SERIAL_UN_SUPPORT); + this.b_busy = true; + const out = yield this._request(filters); + this.b_busy = false; + return (out); + }); + } + close() { + return __awaiter(this, void 0, void 0, function* () { + if (this.busy() == true) + return (SapiClassStatus.SERIAL_BUSY); + this.b_busy = true; + yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 500); + const out = yield this._close(); + this.b_busy = false; + this.detect_type = SapiClassDetectType.UNKNOWN; + this.unlock(); + return (out); + }); + } + type() { + return (this.detect_type); + } + _detect_rcv_freeze_zuno(out) { + return __awaiter(this, void 0, void 0, function* () { + const freeze_zuno_info = yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000); + if (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) { + out.status = SapiClassStatus.ZUNO_NO_FREEZE; + return; + } + out.type = SapiClassDetectType.ZUNO; + return; + }); + } + _detect_rcv_timout_async(out, timout) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._recvIncomingRequest(timout); + if (res.status != SapiClassStatus.OK) + return (false); + if (res.status == SapiClassStatus.OK && res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) { + if (res.data.length < 0x2) { + out.status = SapiClassStatus.ZUNO_START_WRONG_LENG; + return (true); + } + if (res.data[0x0] != 0xFF) { + out.status = SapiClassStatus.ZUNO_START_WRONG_FRAME; + return (true); + } + yield this._detect_rcv_freeze_zuno(out); + return (true); + } + if (res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED) { + out.type = SapiClassDetectType.RAZBERRY; + return (true); + } + return (false); + }); + } + _detect_rcv_timout(out, timout) { + return __awaiter(this, void 0, void 0, function* () { + const wait_timeout = Date.now() + timout; + while (wait_timeout > Date.now()) { + out.status = SapiClassStatus.OK; + if ((yield this._detect_rcv_timout_async(out, 200)) == true) + return; + const capabilities_info = yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, [], 300); + if (capabilities_info.status == SapiClassStatus.OK) { + //VendorID = 0x0115 and ProductTypeID = 0x0210 + if (capabilities_info.data.length >= 0x6 && capabilities_info.data[0x2] == 0x1 && capabilities_info.data[0x3] == 0x15 && capabilities_info.data[0x4] == 0x2 && capabilities_info.data[0x5] == 0x10) { + yield this._detect_rcv_freeze_zuno(out); + return; + } + out.type = SapiClassDetectType.RAZBERRY; + return; + } + if ((yield this._detect_rcv_timout_async(out, 200)) == true) //for old zuno + return; + } + out.status = SapiClassStatus.UPDATE_TIMEOUT; + }); + } + _detect_update(res) { + return __awaiter(this, void 0, void 0, function* () { + if (res.status != SapiClassStatus.OK) + return (SapiClassStatus.UPDATE_PROCESS); + if (res.cmd != SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) + return (SapiClassStatus.DETECTED_UNC_COMMAND); + if (res.data.length < 0x2) + return (SapiClassStatus.ZUNO_START_WRONG_LENG); + if (res.data[0x0] != 0x4 && res.data[0x1] != 0x1) + return (SapiClassStatus.ZUNO_START_WRONG_DATA); + return (SapiClassStatus.OK); + }); + } + _detect(out, baudrate, func) { + return __awaiter(this, void 0, void 0, function* () { + let i, res; + if (this.port == undefined) { + out.status = SapiClassStatus.PORT_NOT_REQUEST; + return; + } + if (this.b_open == true) { + out.status = yield this._close(); + if (out.status != SapiClassStatus.OK) + return; + yield (0, utilities_1.sleep)(this.dtr_timeout); + } + const baudrate_array = this.BAUDRATE; + i = baudrate.length; + while (i != 0x0) { + i--; + if (this.BAUDRATE.indexOf(baudrate[i]) != -1) { + baudrate_array.splice(baudrate_array.indexOf(baudrate[i]), 0x1); + baudrate_array.unshift(baudrate[i]); + } + } + i = 0x0; + while (i < baudrate_array.length) { + out.baudrate = baudrate_array[i]; + out.status = yield this._open(baudrate_array[i]); + if (out.status != SapiClassStatus.OK) + return; + const wait = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + yield this._detect_rcv_timout(wait, 1000); + if (wait.status == SapiClassStatus.OK) { + out.type = wait.type; + return; + } + if (wait.status != SapiClassStatus.UPDATE_TIMEOUT) { + out.status = wait.status; + return; + } + if (func != null) { + yield this._clear(); + if ((yield func()) == false) { + out.status = SapiClassStatus.DETECTED_CANCEL; + return; + } + const wait = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + yield this._detect_rcv_timout(wait, 2000); + if (wait.status == SapiClassStatus.OK) { + out.type = wait.type; + return; + } + if (wait.status != SapiClassStatus.UPDATE_TIMEOUT) { + out.status = wait.status; + return; + } + } + out.status = yield this._close(); + if (out.status != SapiClassStatus.OK) + return; + yield (0, utilities_1.sleep)(this.dtr_timeout); + i++; + } + out.status = SapiClassStatus.DETECTED_NOT_FIND; + }); + } + detect(baudrate, func) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate: 0x0 }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + this.b_busy = true; + yield this._detect(out, baudrate, func); + this.detect_type = out.type; + this.b_busy = false; + return (out); + }); + } + getQuantumSize() { + return (this.MAX_SEND_DATA_LENGHT); + } + _checkBootImage(addr) { + return __awaiter(this, void 0, void 0, function* () { + const data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF]; + yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x04].concat(data_addr), 100); + }); + } + _update_wait_zuno(target_type, out) { + return __awaiter(this, void 0, void 0, function* () { + const wait_timeout = Date.now() + 30000; + while (wait_timeout > Date.now()) { + const res = yield this._recvIncomingRequest(1000); + out.status = yield this._detect_update(res); + if (out.status == SapiClassStatus.UPDATE_TIMEOUT) + continue; + break; + } + if (target_type == SapiClassDetectType.RAZBERRY) { + yield (0, utilities_1.sleep)(20000); + const out_detect = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate: 0x0 }; + yield this._detect(out_detect, [115200], null); + out.type = out_detect.type; + out.status = out_detect.status; + return; + } + if (wait_timeout > Date.now()) { + yield this._detect_rcv_timout(out, wait_timeout - Date.now()); + return; + } + out.status = SapiClassStatus.UPDATE_TIMEOUT; + }); + } + _update_wait_razberry(target_type, out) { + return __awaiter(this, void 0, void 0, function* () { + if (target_type == SapiClassDetectType.RAZBERRY) { + yield this._detect_rcv_timout(out, 30000); + return; + } + yield (0, utilities_1.sleep)(20000); + const out_detect = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate: 0x0 }; + yield this._detect(out_detect, [115200], null); + out.type = out_detect.type; + out.status = out_detect.status; + }); + } + _update(addr, target_type, out) { + return __awaiter(this, void 0, void 0, function* () { + switch (this.detect_type) { + case SapiClassDetectType.ZUNO: + yield this._checkBootImage(addr); + yield this._update_wait_zuno(target_type, out); + break; + case SapiClassDetectType.RAZBERRY: + yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 200); + yield this._update_wait_razberry(target_type, out); + break; + default: + out.status = SapiClassStatus.UPDATE_UNK; + break; + } + }); + } + update(addr, target_type) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + if (target_type == SapiClassDetectType.UNKNOWN) { + out.status = SapiClassStatus.DETECTED_UNC; + return (out); + } + this.b_busy = true; + yield this._update(addr, target_type, out); + this.detect_type = out.type; + this.b_busy = false; + if (out.status == SapiClassStatus.OK && out.type != target_type) { + out.status = SapiClassStatus.DETECTED_TARGET_TYPE; + return (out); + } + return (out); + }); + } + detect_rcv() { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + if (this.detect_type == SapiClassDetectType.UNKNOWN) { + out.status = SapiClassStatus.DETECTED_UNC; + return (out); + } + this.b_busy = true; + const detect_type = this.detect_type; + yield this._detect_rcv_timout(out, 3000); + this.detect_type = out.type; + this.b_busy = false; + if (out.type != detect_type) { + out.status = SapiClassStatus.DETECTED_TARGET_TYPE; + return (out); + } + return (out); + }); + } + constructor() { + this.MAX_SEND_DATA_LENGHT = 0xA0; + this.SOF = 0x01; + this.ACK = 0x06; + this.NAK = 0x15; + this.CAN = 0x18; + this.REQUEST = 0x00; + this.RESPONSE = 0x01; + this.ADDITIONAL_SIZE = 0x03; + this.BAUDRATE = [115200, 230400, 460800, 921600]; + this.dtr_timeout = 250; // The time for the capacitor on the DTR line to recharge + this.RETRIES_CAN = 100; + this.b_busy = false; + this.state_lock = false; + this.b_open = false; + this.port = undefined; + this.queue = []; + this.async_ret = []; + this.detect_type = SapiClassDetectType.UNKNOWN; + } +} +exports.SapiClass = SapiClass; + + +/***/ }), + +/***/ "./src/sapi/vendorIds.ts": +/*!*******************************!*\ + !*** ./src/sapi/vendorIds.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.controller_vendor_ids = void 0; +const controller_vendor_ids = { + 0x0000: { + Name: 'Silicon Labs', + Webpage: 'http://www.silabs.com', + }, + 0x0001: { + Name: 'Advaned Control Solutions', + Webpage: 'http://www.act-solutions.com', + }, + 0x0002: { + Name: 'Danfoss', + Webpage: 'http://www.danfoss.com', + }, + 0x0004: { + Name: 'Exhausto', + Webpage: 'http://www.exhausto.com', + }, + 0x0012: { + Name: 'Tell It Online', + }, + 0x001e: { + Name: 'Express Controls', + Webpage: 'http://www.expresscontrols.com', + }, + 0x0020: { + Name: 'Universal Electronics', + Webpage: 'http://www.uie.com', + }, + 0x0033: { + Name: 'Hunter Douglas', + Webpage: 'http://www.hdl.com', + }, + 0x0039: { + Name: 'Honeywell', + }, + 0x0059: { + Name: 'Hostmann Controls', + Webpage: 'http://www.horstmann.co.uk', + }, + 0x0060: { + Name: 'Everspring', + Webpage: 'http://www.everspring.com', + }, + 0x0064: { + Name: 'Duwi', + Webpage: 'http://www.duewi.de', + }, + 0x0066: { + Name: 'TrickleStar', + Webpage: 'http://www.tricklestar.com', + }, + 0x006b: { + Name: 'Tricklestar (former Empower Controls Ltd.)', + Webpage: 'http://www.tricklestar.com', + }, + 0x0071: { + Name: 'LS Control', + }, + 0x0077: { + Name: 'Innovus', + }, + 0x007a: { + Name: 'Merten', + Webpage: 'http://www.merten.de', + }, + 0x0080: { + Name: 'Vero Duco', + }, + 0x0085: { + Name: 'Fakro', + Webpage: 'http://www.fakro.com', + }, + 0x0086: { + Name: 'Aeotec', + Webpage: 'http://www.aeotec.com', + }, + 0x008a: { + Name: 'BeNeXt', + Webpage: 'http://benext.nl', + }, + 0x0095: { + Name: 'QEES', + Webpage: 'http://www.qees.eu', + }, + 0x008e: { + Name: 'Raritan', + Webpage: 'http://www.raritan.com', + }, + 0x0092: { + Name: 'Martin Rentz', + Webpage: 'http://www.rentz-gmbh.de', + }, + 0x001d: { + Name: 'Leviton', + Webpage: 'http://www.leviton.com', + }, + 0x001a: { + Name: 'Cooper Wiring Devices', + Webpage: 'http://www.cooper.com', + }, + 0x0113: { + Name: 'Evolve', + }, + 0x0098: { + Name: 'RTCA', + }, + 0x0125: { + Name: 'Motion Inc', + Webpage: 'http://www.cooper.com', + }, + 0x0109: { + Name: 'Vision Security', + Webpage: 'http://www.visionsecurity.com.tw', + }, + 0x0116: { + Name: 'Chromatic Technologies', + Webpage: 'http://www.visionsecurity.com.tw', + }, + 0x0162: { + Name: 'Remotec', + Webpage: 'http://www.remotec.com.hk', + }, + 0x5254: { + Name: 'Remotec', + Webpage: 'http://www.remotec.com.hk', + }, + 0x0115: { + Name: 'Z-Wave.Me', + Webpage: 'http://www.z-wave.me', + }, + 0x010f: { + Name: 'Fibar Group (Nice)', + Webpage: 'http://www.fibaro.com', + }, + 0x0081: { + Name: 'Siegenia-Aubi', + Webpage: 'http://www.siegenia-aubi.com', + }, + 0x0084: { + Name: 'FortrezZ', + Webpage: 'http://www.fortrezz.com', + }, + 0x0097: { + Name: 'Wintop', + Webpage: 'http://www.wintop.com', + }, + 0x0129: { + Name: 'Yale', + Webpage: 'http://www.yalelocks.com', + }, + 0x0137: { + Name: 'FollowGood', + Webpage: 'http://www.follow-good.com', + }, + 0x0142: { + Name: 'Rademacher', + Webpage: 'http://rademacher.de', + }, + 0x0147: { + Name: 'RaZberry by Z-Wave.Me', + Webpage: 'http://razpberry.z-wave.me', + }, + 0x0148: { + Name: 'Eurotronic Technology', + Webpage: 'http://www.eurotronic.org', + }, + 0x008c: { + Name: 'Mi Casa Verde (Vera Control)', + Webpage: 'http://www.micasaverde.com', + }, + 0x0175: { + Name: 'Devolo', + Webpage: 'http://www.devolo.com', + }, + 0x0154: { + Name: 'Popp', + Webpage: 'http://www.popp.eu', + }, + 0x0270: { + Name: 'Ubitech', + Webpage: 'http://ubitech.hk', + }, + 0xFFFF: { + Name: '_Not defined', + }, + 0x0028: { + Name: '2B Electronics', + }, + 0x009B: { + Name: '2gig Technologies Inc.', + }, + 0x002A: { + Name: '3e Technologies', + }, + 0x0022: { + Name: 'A-1 Components', + }, + 0x0117: { + Name: 'Abilia', + }, + 0x0297: { + Name: 'AdMobilize, LLC', + }, + 0x0101: { + Name: 'ADOX, Inc.', + }, + 0x016C: { + Name: 'Advanced Optronic Devices Co.,Ltd', + }, + 0x009E: { + Name: 'Adventure Interactive', + }, + 0x0088: { + Name: 'Airvent SAM S.p.A.', + }, + 0x0094: { + Name: 'Alarm.com', + }, + 0x0126: { + Name: 'Alertme', + }, + 0x003B: { + Name: 'Allegion', + }, + 0x028E: { + Name: 'Alphanetworks', + }, + 0x0230: { + Name: 'Alphonsus Tech', + }, + 0x029F: { + Name: 'AMADAS Co., LTD ', + }, + 0x019C: { + Name: 'Amdocs', + }, + 0x005A: { + Name: 'American Grid, Inc.', + }, + 0x032B: { + Name: 'Anchor Tech ', + }, + 0x026D: { + Name: 'Antik Technology Ltd.', + }, + 0x0078: { + Name: 'anyCOMM Corporation', + }, + 0x0144: { + Name: 'Applied Micro Electronics "AME" BV', + }, + 0x0291: { + Name: 'Arkea', + }, + 0x0029: { + Name: 'Asia Heading', + }, + 0x0231: { + Name: 'ASITEQ', + }, + 0x028A: { + Name: 'Askey Computer Corp.', + }, + 0x013B: { + Name: 'AstraLink', + }, + 0x0134: { + Name: 'AT&T', + }, + 0x002B: { + Name: 'Atech', + }, + 0x0244: { + Name: 'Athom BV', + }, + 0x032A: { + Name: 'AUCEAN TECHNOLOGY. INC', + }, + 0x0155: { + Name: 'Avadesign Technology Co., Ltd.', + }, + 0x0146: { + Name: 'Axesstel Inc', + }, + 0x0018: { + Name: 'Balboa Instruments', + }, + 0x0236: { + Name: 'Bandi Comm Tech Inc.', + }, + 0x0204: { + Name: 'Beijing Sino-American Boyi Software Development Co., Ltd', + }, + 0x0251: { + Name: 'Beijing Universal Energy Huaxia Technology Co.,Ltd', + }, + 0x0196: { + Name: 'Bellatrix Systems, Inc.', + }, + 0x032D: { + Name: 'Benetek', + }, + 0x002C: { + Name: 'BeSafer', + }, + 0x014B: { + Name: 'BFT S.p.A.', + }, + 0x0052: { + Name: 'Bit7 Inc.', + }, + 0x0311: { + Name: 'Blaze Automation', + }, + 0x0213: { + Name: 'BMS Evler LTD', + }, + 0x0023: { + Name: 'Boca Devices', + }, + 0x015C: { + Name: 'Bosch Security Systems, Inc', + }, + 0x0138: { + Name: 'BRK Brands, Inc.', + }, + 0x002D: { + Name: 'Broadband Energy Networks Inc.', + }, + 0x024A: { + Name: 'BTSTAR(HK) TECHNOLOGY COMPANY LIMITED', + }, + 0x0145: { + Name: 'Buffalo Inc.', + }, + 0x0190: { + Name: 'Building 36 Technologies', + }, + 0x0026: { + Name: 'BuLogics', + }, + 0x0169: { + Name: 'Bönig und Kallenbach oHG', + }, + 0x009C: { + Name: 'Cameo Communications Inc.', + }, + 0x002E: { + Name: 'Carrier', + }, + 0x000B: { + Name: 'CasaWorks', + }, + 0x0243: { + Name: 'casenio AG', + }, + 0x0166: { + Name: 'CBCC Domotique SAS', + }, + 0x0246: { + Name: 'CentraLite Systems, Inc', + }, + 0x014E: { + Name: 'Check-It Solutions Inc.', + }, + 0x0320: { + Name: 'China Security & Fire IOT Sensing CO., LTD ', + }, + 0x0280: { + Name: 'Chuango Security Technology Corporation', + }, + 0x0082: { + Name: 'Cisco Consumer Business Group', + }, + 0x018E: { + Name: 'Climax Technology, Ltd.', + }, + 0x0200: { + Name: 'Cloud Media', + }, + 0x002F: { + Name: 'Color Kinetics Incorporated', + }, + 0x0329: { + Name: 'COMAP', + }, + 0x0309: { + Name: 'Comfortability', + }, + 0x0140: { + Name: 'Computime', + }, + 0x011B: { + Name: 'Connected Object', + }, + 0x0179: { + Name: 'ConnectHome', + }, + 0x0285: { + Name: 'CONNECTION TECHNOLOGY SYSTEMS ', + }, + 0x025D: { + Name: 'Contec intelligent housing ', + }, + 0x023F: { + Name: 'Control4 Corporation', + }, + 0x0019: { + Name: 'ControlThink LC', + }, + 0x000F: { + Name: 'ConvergeX Ltd.', + }, + 0x007D: { + Name: 'CoolGuard', + }, + 0x0079: { + Name: 'Cooper Lighting', + }, + 0x009D: { + Name: 'Coventive Technologies Inc.', + }, + 0x0328: { + Name: 'Cvnet', + }, + 0x0014: { + Name: 'Cyberhouse', + }, + 0x0067: { + Name: 'CyberTAN Technology, Inc.', + }, + 0x0030: { + Name: 'Cytech Technology Pre Ltd.', + }, + 0x0294: { + Name: 'D-3 Technology Co. Ltd', + }, + 0x018C: { + Name: 'Dawon DNS', + }, + 0x020A: { + Name: 'Decoris Intelligent System Limited', + }, + 0x013F: { + Name: 'Defacontrols BV', + }, + 0x032E: { + Name: 'DEFARO', + }, + 0x0031: { + Name: 'Destiny Networks', + }, + 0x0103: { + Name: 'Diehl AKO', + }, + 0x0032: { + Name: 'Digital 5, Inc.', + }, + 0x0228: { + Name: 'DigitalZone', + }, + 0x0108: { + Name: 'D-Link', + }, + 0x0127: { + Name: 'DMP (Digital Monitoring Products)', + }, + 0x0177: { + Name: 'Domino sistemi d.o.o.', + }, + 0x020E: { + Name: 'Domitech Products, LLC', + }, + 0x020C: { + Name: 'Dongguan Zhou Da Electronics Co.,Ltd', + }, + 0x017D: { + Name: 'DRACOR Inc.', + }, + 0x0184: { + Name: 'Dragon Tech Industrial, Ltd.', + }, + 0x0223: { + Name: 'DTV Research Unipessoal, Lda', + }, + 0x0272: { + Name: 'Dune-HD', + }, + 0x031B: { + Name: 'DVACO GROUP', + }, + 0x0132: { + Name: 'DynaQuip Controls', + }, + 0x0247: { + Name: 'EASY SAVER Co., Inc', + }, + 0x017C: { + Name: 'EbV', + }, + 0x016B: { + Name: 'Echostar', + }, + 0x028F: { + Name: 'Eco Automation', + }, + 0x014A: { + Name: 'Ecolink', + }, + 0x0157: { + Name: 'EcoNet Controls', + }, + 0x031F: { + Name: 'Eelectron SpA', + }, + 0x010D: { + Name: 'e-Home AUTOMATION', + }, + 0x026B: { + Name: 'Ei Electronics ', + }, + 0x0087: { + Name: 'Eka Systems', + }, + 0x021F: { + Name: 'Elexa Consumer Products Inc.', + }, + 0x0034: { + Name: 'El-Gev Electronics LTD', + }, + 0x001B: { + Name: 'ELK Products, Inc.', + }, + 0x020B: { + Name: 'Embedded System Design Limited', + }, + 0x0035: { + Name: 'Embedit A/S', + }, + 0x0284: { + Name: 'Empers Tech Co., Ltd.', + }, + 0x014D: { + Name: 'Enblink Co. Ltd', + }, + 0x0219: { + Name: 'Enwox Technologies s.r.o.', + }, + 0x006F: { + Name: 'Erone', + }, + 0x0160: { + Name: 'Essence Security', + }, + 0x029B: { + Name: 'ESSENTIAL TECHNOLOGIES INC.', + }, + 0x0036: { + Name: 'Exceptional Innovations', + }, + 0x009F: { + Name: 'Exigent Sensors', + }, + 0x0233: { + Name: 'eZEX Corporation', + }, + 0x016A: { + Name: 'Fantem', + }, + 0x0295: { + Name: 'fifthplay nv', + }, + 0x018D: { + Name: 'Flextronics', + }, + 0x0024: { + Name: 'Flue Sentinel', + }, + 0x0037: { + Name: 'Foard Systems', + }, + 0x018F: { + Name: 'Focal Point Limited', + }, + 0x0207: { + Name: 'Forest Group Nederland B.V', + }, + 0x011D: { + Name: 'Foxconn', + }, + 0x0110: { + Name: 'Frostdale', + }, + 0x0305: { + Name: 'Future Home AS', + }, + 0x025A: { + Name: 'GES', + }, + 0x022B: { + Name: 'GKB Security Corporation', + }, + 0x018A: { + Name: 'Globalchina-Tech', + }, + 0x0159: { + Name: 'Goap', + }, + 0x0076: { + Name: 'Goggin Research', + }, + 0x0068: { + Name: 'Good Way Technology Co., Ltd', + }, + 0x0099: { + Name: 'GreenWave Reality Inc.', + }, + 0x018B: { + Name: 'Grib', + }, + 0x016D: { + Name: 'Guangzhou Ruixiang M&E Co., Ltd', + }, + 0x0158: { + Name: 'GuangZhou Zeewave Information Technology Co., Ltd.', + }, + 0x0287: { + Name: 'HAB Home Intelligence, LLC', + }, + 0x030D: { + Name: 'Hampoo', + }, + 0x0208: { + Name: 'HANK Electronics Ltd', + }, + 0x024C: { + Name: 'Hankook Gas Kiki CO.,LTD. ', + }, + 0x025C: { + Name: 'Hauppauge', + }, + 0x0073: { + Name: 'Hawking Technologies Inc.', + }, + 0x020F: { + Name: 'Herald Datanetics Limited', + }, + 0x0017: { + Name: 'HiTech Automation', + }, + 0x0181: { + Name: 'Holion Electronic Engineering Co., Ltd', + }, + 0x013E: { + Name: 'Holtec Electronics BV', + }, + 0x000D: { + Name: 'Home Automated Living', + }, + 0x009A: { + Name: 'Home Automation Europe', + }, + 0x005B: { + Name: 'Home Automation Inc.', + }, + 0x0293: { + Name: 'Home controls', + }, + 0x0038: { + Name: 'Home Director', + }, + 0x0070: { + Name: 'Homemanageables, Inc.', + }, + 0x0050: { + Name: 'Homepro', + }, + 0x000C: { + Name: 'HomeSeer Technologies', + }, + 0x0275: { + Name: 'Honest Technology', + }, + 0x023D: { + Name: 'Honest Technology Co., Ltd.', + }, + 0x0313: { + Name: 'Hoppe', + }, + 0x0298: { + Name: 'Horus Smart Control', + }, + 0x0221: { + Name: 'HOSEOTELNET', + }, + 0x0180: { + Name: 'Huapin Information Technology Co.,Ltd', + }, + 0x025F: { + Name: 'Huawei Device Co., Ltd. ', + }, + 0x024B: { + Name: 'Huawei Technologies Co., Ltd.', + }, + 0x007C: { + Name: 'Hunter Douglas', + }, + 0x0218: { + Name: 'iAutomade Pte Ltd', + }, + 0x0011: { + Name: 'iCOM Technology b.v.', + }, + 0x0106: { + Name: 'iControl Networks', + }, + 0x0165: { + Name: 'ID-RF', + }, + 0x019E: { + Name: 'iEXERGY GmbH', + }, + 0x031C: { + Name: 'Ilevia srl', + }, + 0x0056: { + Name: 'Impact Technologies and Products', + }, + 0x0061: { + Name: 'Impact Technologies BV', + }, + 0x012B: { + Name: 'Infusion Development', + }, + 0x006C: { + Name: 'Ingersoll Rand (Schlage)', + }, + 0x011F: { + Name: 'Ingersoll Rand (was Ecolink)', + }, + 0x0256: { + Name: 'Inkel Corp.', + }, + 0x003A: { + Name: 'Inlon Srl', + }, + 0x0141: { + Name: 'Innoband Technologies, Inc', + }, + 0x031E: { + Name: 'Inovelli', + }, + 0x0100: { + Name: 'Insignia', + }, + 0x0006: { + Name: 'Intel', + }, + 0x001C: { + Name: 'IntelliCon', + }, + 0x0072: { + Name: 'Interactive Electronics Systems (IES)', + }, + 0x0005: { + Name: 'Intermatic', + }, + 0x0013: { + Name: 'Internet Dom', + }, + 0x0288: { + Name: 'INTERSOFT', + }, + 0x0278: { + Name: 'Inventec', + }, + 0x005F: { + Name: 'IQ-Group', + }, + 0x0212: { + Name: 'iRevo', + }, + 0x0253: { + Name: 'iungo.nl B.V.', + }, + 0x0123: { + Name: 'IWATSU', + }, + 0x0063: { + Name: 'Jasco Products', + }, + 0x015A: { + Name: 'Jin Tao Bao', + }, + 0x0164: { + Name: 'JSW Pacific Corporation', + }, + 0x0214: { + Name: 'Kaipule Technology Co., Ltd.', + }, + 0x0091: { + Name: 'Kamstrup A/S', + }, + 0x006A: { + Name: 'Kellendonk Elektronik', + }, + 0x0114: { + Name: 'Kichler', + }, + 0x0139: { + Name: 'KlickH Pvt Ltd.', + }, + 0x0261: { + Name: 'KOOL KONCEPTS', + }, + 0x0174: { + Name: 'Kopera Development Inc.', + }, + 0x023A: { + Name: 'KUMHO ELECTRIC, INC', + }, + 0x0051: { + Name: 'Lagotek Corporation', + }, + 0x0173: { + Name: 'Leak Intelligence, LLC', + }, + 0x0300: { + Name: 'LEEDARSON LIGHTING CO., LTD.', + }, + 0x0187: { + Name: 'LEVION Technologies GmbH', + }, + 0x0015: { + Name: 'Lexel', + }, + 0x015B: { + Name: 'LG Electronics', + }, + 0x0224: { + Name: 'LifeShield, LLC', + }, + 0x003C: { + Name: 'Lifestyle Networks', + }, + 0x0210: { + Name: 'Light Engine Limited', + }, + 0x0316: { + Name: 'Lite Automation', + }, + 0x017A: { + Name: 'Liveguard Ltd.', + }, + 0x013A: { + Name: 'Living Style Enterprises, Ltd.', + }, + 0x015E: { + Name: 'Locstar Technology Co., Ltd', + }, + 0x007F: { + Name: 'Logitech', + }, + 0x0025: { + Name: 'Loudwater Technologies, LLC', + }, + 0x025E: { + Name: 'LUXEASY technology company LTD.', + }, + 0x0062: { + Name: 'LVI Produkter AB', + }, + 0x0192: { + Name: 'm2m Solution', + }, + 0x0195: { + Name: 'M2M Solution', + }, + 0x006E: { + Name: 'Manodo / KTC', + }, + 0x003D: { + Name: 'Marmitek BV', + }, + 0x003E: { + Name: 'Martec Access Products', + }, + 0x008F: { + Name: 'MB Turn Key Design', + }, + 0x015F: { + Name: 'McoHome Technology Co., Ltd', + }, + 0x0222: { + Name: 'MCT CO., LTD', + }, + 0x0027: { + Name: 'Meedio, LLC', + }, + 0x0107: { + Name: 'MegaChips', + }, + 0x022D: { + Name: 'Mercury Corporation', + }, + 0x0238: { + Name: 'Milanity, Inc.', + }, + 0x0112: { + Name: 'MITSUMI', + }, + 0x019D: { + Name: 'MOBILUS MOTOR Spółka z o.o. ', + }, + 0x0232: { + Name: 'MODACOM CO., LTD.', + }, + 0x008D: { + Name: 'Modstrøm', + }, + 0x000E: { + Name: 'Mohito Networks', + }, + 0x0202: { + Name: 'Monoprice', + }, + 0x007E: { + Name: 'Monster Cable', + }, + 0x003F: { + Name: 'Motorola', + }, + 0x0122: { + Name: 'MSK - Miyakawa Seisakusho', + }, + 0x0083: { + Name: 'MTC Maintronic Germany', + }, + 0x0143: { + Name: 'myStrom', + }, + 0x016E: { + Name: 'Nanjing Easthouse Electrical Co., Ltd.', + }, + 0x0121: { + Name: 'Napco Security Technologies, Inc.', + }, + 0x006D: { + Name: 'Nefit', + }, + 0x0189: { + Name: 'Ness Corporation Pty Ltd', + }, + 0x0133: { + Name: 'Netgear', + }, + 0x0248: { + Name: 'neusta next GmbH & Co. KG', + }, + 0x0203: { + Name: 'Newland Communication Science Technology Co., Ltd.', + }, + 0x0268: { + Name: 'Nexa Trading AB', + }, + 0x0178: { + Name: 'Nexia Home Intelligence', + }, + 0x0075: { + Name: 'NextEnergy', + }, + 0x0312: { + Name: 'NIE Technology Co., Ltd', + }, + 0x0185: { + Name: 'Ningbo Sentek Electronics Co., Ltd', + }, + 0x014F: { + Name: 'Nortek Security & Control LLC ', + }, + 0x0252: { + Name: 'North China University of Technology', + }, + 0x0096: { + Name: 'NorthQ', + }, + 0x0040: { + Name: 'Novar Electrical Devices and Systems (EDS)', + }, + 0x020D: { + Name: 'Novateqni HK Ltd', + }, + 0x0296: { + Name: 'OBLO LIVING LLC', + }, + 0x0119: { + Name: 'Omnima Limited', + }, + 0x014C: { + Name: 'OnSite Pro', + }, + 0x0041: { + Name: 'OpenPeak Inc.', + }, + 0x027D: { + Name: 'Oregon Automation ', + }, + 0x0104: { + Name: 'Panasonic Electric Works Co., Ltd.', + }, + 0x031A: { + Name: 'Panasonic ES Shin Dong-A Co., Ltd', + }, + 0x028D: { + Name: 'Panodic Electric (Shenzhen) Limited', + }, + 0x0257: { + Name: 'PARATECH', + }, + 0x0172: { + Name: 'PassivSystems Limited', + }, + 0x0322: { + Name: 'Paxton Access Ltd', + }, + 0x0281: { + Name: 'PC Partner', + }, + 0x013D: { + Name: 'Pella', + }, + 0x0245: { + Name: 'permundo GmbH', + }, + 0x013C: { + Name: 'Philio Technology Corp', + }, + 0x0277: { + Name: 'Pixela Corporation ', + }, + 0x010E: { + Name: 'Danalock', + }, + 0x0170: { + Name: 'Powerhouse Dynamics', + }, + 0x0074: { + Name: 'PowerLinx', + }, + 0x0016: { + Name: 'PowerLynx', + }, + 0x0042: { + Name: 'Pragmatic Consulting Inc.', + }, + 0x0128: { + Name: 'Prodrive Technologies', + }, + 0x0161: { + Name: 'Promixis, LLC', + }, + 0x005D: { + Name: 'Pulse Technologies (Aspalis)', + }, + 0x012A: { + Name: 'Qolsys', + }, + 0x0130: { + Name: 'Quby', + }, + 0x0163: { + Name: 'Queenlock Ind. Co., Ltd.', + }, + 0x0314: { + Name: 'Raonix Co., Ltd.', + }, + 0x021E: { + Name: 'Red Bee Co. Ltd', + }, + 0x022C: { + Name: 'Remote Solution', + }, + 0x0255: { + Name: 'Remote Technologies Incorporated', + }, + 0x0010: { + Name: 'Residential Control Systems, Inc. (RCS)', + }, + 0x0216: { + Name: 'RET Nanjing Intelligence System CO.,Ltd', + }, + 0x0153: { + Name: 'Revolv Inc', + }, + 0x023B: { + Name: 'ROC-Connect, Inc.', + }, + 0x0197: { + Name: 'RPE Ajax LLC (dbs Secur Ltd)', + }, + 0x0065: { + Name: 'RS Scene Automation', + }, + 0x029D: { + Name: 'Rubetek', + }, + 0x0290: { + Name: 'S1', + }, + 0x023C: { + Name: 'SafeTech Products', + }, + 0x0201: { + Name: 'Samsung Electronics Co., Ltd.', + }, + 0x022E: { + Name: 'Samsung SDS', + }, + 0x0093: { + Name: 'San Shih Electrical Enterprise Co., Ltd.', + }, + 0x012C: { + Name: 'SANAV', + }, + 0x0307: { + Name: 'SATCO Products, Inc. ', + }, + 0x0318: { + Name: 'SBCK Corp. ', + }, + 0x001F: { + Name: 'Scientia Technologies, Inc.', + }, + 0x029A: { + Name: 'Scout Alarm', + }, + 0x011E: { + Name: 'Secure Wireless', + }, + 0x0167: { + Name: 'SecureNet Technologies', + }, + 0x0182: { + Name: 'Securifi Ltd.', + }, + 0x0069: { + Name: 'Seluxit', + }, + 0x0043: { + Name: 'Senmatic A/S', + }, + 0x019A: { + Name: 'Sensative AB', + }, + 0x0044: { + Name: 'Sequoia Technology LTD', + }, + 0x0151: { + Name: 'Sercomm Corp', + }, + 0x030B: { + Name: 'Shandong Smart Life Data System Co .LTD', + }, + 0x0215: { + Name: 'Shangdong Smart Life Data System Co.,Ltd', + }, + 0x023E: { + Name: 'Shanghai Dorlink Intelligent Technologies Co.,Ltd', + }, + 0x0205: { + Name: 'Shanghai Longchuang Eco-energy Systems Co., Ltd', + }, + 0x010B: { + Name: 'Sharp', + }, + 0x021A: { + Name: 'SHENZHEN AOYA INDUSTRY CO. LTD', + }, + 0x0286: { + Name: 'Shenzhen Easyhome Technology Co., Ltd.', + }, + 0x021C: { + Name: 'Shenzhen iSurpass Technology Co. ,Ltd', + }, + 0x021D: { + Name: 'Shenzhen Kaadas Intelligent Technology Co., Ltd', + }, + 0x0211: { + Name: 'Shenzhen Liao Wang Tong Da Technology Ltd', + }, + 0x0258: { + Name: 'Shenzhen Neo Electronics Co., Ltd', + }, + 0x0250: { + Name: 'Shenzhen Tripath Digital Audio Equipment Co.,Ltd', + }, + 0x0260: { + Name: 'Shenzhen Heiman Technology Co., Ltd', + }, + 0x032C: { + Name: 'Shenzhen Saykey Technology Co., Ltd ', + }, + 0x0267: { + Name: 'SimonTech S.L.U', + }, + 0x0045: { + Name: 'Sine Wireless', + }, + 0x0266: { + Name: 'Siterwell Technology HK Co., LTD ', + }, + 0x0282: { + Name: 'Smart Electronic Industrial (Dongguan) Co., Limited', + }, + 0x0046: { + Name: 'Smart Products, Inc.', + }, + 0x026A: { + Name: 'SmartAll Inc.', + }, + 0x0323: { + Name: 'SmartHome Partner GmbH', + }, + 0x024F: { + Name: 'Smartly AS', + }, + 0x0150: { + Name: 'SmartThings, Inc.', + }, + 0x0102: { + Name: 'SMK Manufacturing Inc.', + }, + 0x029C: { + Name: 'SoftAtHome', + }, + 0x0047: { + Name: 'Somfy', + }, + 0x0274: { + Name: 'Soosan Hometech', + }, + 0x0090: { + Name: 'Spectrum Brands', + }, + 0x026E: { + Name: 'Springs Window Fashions', + }, + 0x026F: { + Name: 'Sprue Safety Products Ltd', + }, + 0x0124: { + Name: 'Square Connect', + }, + 0x021B: { + Name: 'ST&T Electric Corporation', + }, + 0x0259: { + Name: 'Starkoff', + }, + 0x0265: { + Name: 'StarVedia', + }, + 0x0271: { + Name: 'STEINEL GmbH ', + }, + 0x0239: { + Name: 'Stelpro', + }, + 0x0217: { + Name: 'Strattec Advanced Logic,LLC', + }, + 0x0168: { + Name: 'STRATTEC Security Corporation', + }, + 0x0105: { + Name: 'Sumitomo', + }, + 0x028B: { + Name: 'Sunjet Components Corp.', + }, + 0x0054: { + Name: 'Superna', + }, + 0x0191: { + Name: 'Swann Communications Pty Ltd', + }, + 0x0009: { + Name: 'Sylvania', + }, + 0x0136: { + Name: 'Systech Corporation', + }, + 0x0276: { + Name: 'Systemair Sverige AB', + }, + 0x0235: { + Name: 'TAEWON Lighting Co., Ltd.', + }, + 0x0262: { + Name: 'Taiwan Fu Hsing Industrial Co., Ltd.', + }, + 0x0264: { + Name: 'Taiwan iCATCH Inc.', + }, + 0x0186: { + Name: 'Team Digital Limited', + }, + 0x0089: { + Name: 'Team Precision PCL', + }, + 0x0240: { + Name: 'Technicolor', + }, + 0x000A: { + Name: 'Techniku', + }, + 0x012F: { + Name: 'Tecom Co., Ltd.', + }, + 0x0176: { + Name: 'Telldus Technologies AB', + }, + 0x0048: { + Name: 'Telsey', + }, + 0x017E: { + Name: 'Telular', + }, + 0x005C: { + Name: 'Terra Optima B.V. (tidligere Primair Services)', + }, + 0x010C: { + Name: 'There Corporation', + }, + 0x019B: { + Name: 'HeatIt', + }, + 0x0317: { + Name: 'Think Simple srl', + }, + 0x022A: { + Name: 'TIMEVALVE, Inc.', + }, + 0x0118: { + Name: 'TKB Home', + }, + 0x011C: { + Name: 'TKH Group / Eminent', + }, + 0x0327: { + Name: 'TMC Technology Ltd.', + }, + 0x0319: { + Name: 'Toledo & Co., Inc.', + }, + 0x0283: { + Name: 'TP-Link Technologies Co., Ltd.', + }, + 0x008B: { + Name: 'Trane Corporation', + }, + 0x0055: { + Name: 'Tridium', + }, + 0x0111: { + Name: 'Tronico Technology Co. Ltd.', + }, + 0x0049: { + Name: 'Twisthink', + }, + 0x0152: { + Name: 'UFairy G.R. Tech', + }, + 0x0193: { + Name: 'Universal Devices, Inc', + }, + 0x0183: { + Name: 'Universe Future', + }, + 0x0209: { + Name: 'UTC Fire and Security Americas Corp', + }, + 0x010A: { + Name: 'VDA', + }, + 0x030F: { + Name: 'Vemmio', + }, + 0x0198: { + Name: 'Venstar Inc.', + }, + 0x0237: { + Name: 'Vestel Elektronik Ticaret ve Sanayi A.S.', + }, + 0x0053: { + Name: 'Viewsonic', + }, + 0x005E: { + Name: 'ViewSonic Corporation', + }, + 0x0007: { + Name: 'Vimar CRS', + }, + 0x0188: { + Name: 'Vipa-Star', + }, + 0x004A: { + Name: 'Visualize', + }, + 0x0058: { + Name: 'Vitelec', + }, + 0x0263: { + Name: 'Viva Labs AS', + }, + 0x0156: { + Name: 'Vivint', + }, + 0x017B: { + Name: 'Vs-Safety AS', + }, + 0x004B: { + Name: 'Watt Stopper', + }, + 0x0008: { + Name: 'Wayne Dalton', + }, + 0x019F: { + Name: 'Webee Life', + }, + 0x0171: { + Name: 'WeBeHome AB', + }, + 0x011A: { + Name: 'Wenzhou MTLC Electric Appliances Co.,Ltd.', + }, + 0x026C: { + Name: 'Westcontrol AS', + }, + 0x0057: { + Name: 'Whirlpool', + }, + 0x027B: { + Name: 'White Rabbit', + }, + 0x0149: { + Name: 'wiDom', + }, + 0x015D: { + Name: 'Willis Electric Co., Ltd.', + }, + 0x012D: { + Name: 'Wilshine Holding Co., Ltd', + }, + 0x017F: { + Name: 'Wink Inc.', + }, + 0x0242: { + Name: 'Winytechnology', + }, + 0x0199: { + Name: 'Wireless Maingate AB', + }, + 0x004C: { + Name: 'Woodward Labs', + }, + 0x0269: { + Name: 'WOOREE Lighting Co.,Ltd.', + }, + 0x0003: { + Name: 'Wr@p', + }, + 0x022F: { + Name: 'WRT Intelligent Technology CO., LTD.', + }, + 0x012E: { + Name: 'Wuhan NWD Technology Co., Ltd.', + }, + 0x004D: { + Name: 'Xanboo', + }, + 0x024E: { + Name: 'zConnect', + }, + 0x004E: { + Name: 'Zdata, LLC.', + }, + 0x016F: { + Name: 'Zhejiang Jiuxing Electric Co Ltd', + }, + 0x0131: { + Name: 'Zipato', + }, + 0x0120: { + Name: 'Zonoff', + }, + 0x027A: { + Name: 'Zooz', + }, + 0x031D: { + Name: 'Z-Wave Alliance', + }, + 0x004F: { + Name: 'Z-Wave Technologia', + }, + 0x0315: { + Name: 'zwaveproducts.com', + }, + 0x024D: { + Name: 'Z-works Inc.', + }, + 0x0021: { + Name: 'Zykronix', + }, + 0x0135: { + Name: 'ZyXEL', + }, + 0x0330: { + Name: 'Sunricher', + }, + 0x033A: { + Name: 'HELTUN', + Webpage: 'heltun.com', + } +}; +exports.controller_vendor_ids = controller_vendor_ids; + + +/***/ }), + +/***/ "./src/sapi/zuno_sapi.ts": +/*!*******************************!*\ + !*** ./src/sapi/zuno_sapi.ts ***! + \*******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ZunoSapiClassStatus = exports.ZunoSapiClass = void 0; +const define_1 = __webpack_require__(/*! ../other/define */ "./src/other/define.ts"); +const sapi_1 = __webpack_require__(/*! ./sapi */ "./src/sapi/sapi.ts"); +const region_1 = __webpack_require__(/*! ./region */ "./src/sapi/region.ts"); +const utilities_1 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +const chip_1 = __webpack_require__(/*! ../hardware/chip */ "./src/hardware/chip.ts"); +var ELearnStatus; +(function (ELearnStatus) { + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_COMPLETE"] = 0] = "ELEARNSTATUS_ASSIGN_COMPLETE"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_NODEID_DONE"] = 1] = "ELEARNSTATUS_ASSIGN_NODEID_DONE"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE"] = 2] = "ELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_INFO_PENDING"] = 3] = "ELEARNSTATUS_ASSIGN_INFO_PENDING"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_WAITING_FOR_FIND"] = 4] = "ELEARNSTATUS_ASSIGN_WAITING_FOR_FIND"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_SMART_START_IN_PROGRESS"] = 5] = "ELEARNSTATUS_SMART_START_IN_PROGRESS"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_LEARN_IN_PROGRESS"] = 6] = "ELEARNSTATUS_LEARN_IN_PROGRESS"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT"] = 7] = "ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED"] = 8] = "ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_PROCESS"] = -1] = "ELEARNSTATUS_PROCESS"; +})(ELearnStatus || (ELearnStatus = {})); +var ZunoSapiClassStatus; +(function (ZunoSapiClassStatus) { + ZunoSapiClassStatus[ZunoSapiClassStatus["OK"] = 0] = "OK"; + ZunoSapiClassStatus[ZunoSapiClassStatus["NOT_INIT"] = 35] = "NOT_INIT"; + ZunoSapiClassStatus[ZunoSapiClassStatus["WRONG_LENGTH_CMD"] = 36] = "WRONG_LENGTH_CMD"; + ZunoSapiClassStatus[ZunoSapiClassStatus["WRONG_STATUS"] = 37] = "WRONG_STATUS"; + ZunoSapiClassStatus[ZunoSapiClassStatus["WRONG_IN_DATA"] = 38] = "WRONG_IN_DATA"; + ZunoSapiClassStatus[ZunoSapiClassStatus["NO_FREEZE"] = 39] = "NO_FREEZE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["INVALID_ARG"] = 40] = "INVALID_ARG"; + ZunoSapiClassStatus[ZunoSapiClassStatus["TIMEOUT"] = 41] = "TIMEOUT"; + ZunoSapiClassStatus[ZunoSapiClassStatus["UN_SUPPORT"] = 42] = "UN_SUPPORT"; + ZunoSapiClassStatus[ZunoSapiClassStatus["TIMEOUT_FORCE_RESTART"] = 43] = "TIMEOUT_FORCE_RESTART"; + ZunoSapiClassStatus[ZunoSapiClassStatus["LEARN_EXCLUDE"] = 44] = "LEARN_EXCLUDE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["LEARN_INCLUDE"] = 45] = "LEARN_INCLUDE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_TOO_LONG"] = 46] = "SCETCH_TOO_LONG"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_PRIAMLE"] = 47] = "SCETCH_FALLED_PRIAMLE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_CORE_VERSION"] = 48] = "SCETCH_FALLED_CORE_VERSION"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_REVISION"] = 49] = "SCETCH_FALLED_REVISION"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_CRC16"] = 50] = "SCETCH_FALLED_CRC16"; +})(ZunoSapiClassStatus || (exports.ZunoSapiClassStatus = ZunoSapiClassStatus = {})); +// ------------------------------------------------------------------------------------------------------ +class ZunoSapiClass { + _get_param_info_default() { + const param_info = { + status: ZunoSapiClassStatus.NOT_INIT, freq_i: 0x0, raw: [], main_pow: 0x0, sec: false + }; + return (param_info); + } + _get_board_info_default() { + const board_info = { + status: ZunoSapiClassStatus.NOT_INIT, version: 0x0, build_number: 0x0, build_ts: 0x0, hw_rev: 0x0, code_size: 0x0, ram_size: 0x0, dbg_lock: 0x0, custom_code_offset: 0x30000, chip_uuid: new Uint8Array(), s2_pub: new Uint8Array(), + boot_offset: 0x3a000, boot_version: 0x0, max_default_power: 50, ext_nvm: 0x0, chip: { chip_type: chip_1.HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family: chip_1.HardwareChipClass.FAMILY_ZGM13, keys_hash: 0x8E19CC54, se_version: 0x0 }, + core_version: 0x0 + }; + return (board_info); + } + compile_zwave_qrcode(product_data, dsk, version) { + return __awaiter(this, void 0, void 0, function* () { + let protocol_map, text; + text = (0, utilities_1.conv2DecimalPadding)(product_data["s2_keys"], 3); + text = text + (0, utilities_1.conv2Decimal)(dsk, ""); + // #ProductType + text = text + "0010" + (0, utilities_1.conv2DecimalPadding)(product_data["device_type"], 5) + (0, utilities_1.conv2DecimalPadding)(product_data["device_icon"], 5); + // #ProductID + text = text + "0220" + (0, utilities_1.conv2DecimalPadding)(product_data["vendor"], 5) + (0, utilities_1.conv2DecimalPadding)(product_data["product_type"], 5) + (0, utilities_1.conv2DecimalPadding)(product_data["product_id"], 5) + (0, utilities_1.conv2DecimalPadding)(version, 5); + // # Supported Protocols + protocol_map = 0x01; + if (product_data["LR"] == true) + protocol_map = protocol_map | 0x02; + text += "0803" + (0, utilities_1.conv2DecimalPadding)(protocol_map, 3); + // # MaxInclusionInterval + text = text + "0403005"; // # ==5*128=640 + const buf = Uint8Array.from(unescape(encodeURIComponent(text)), c => c.charCodeAt(0)).buffer; + const digest = new Uint8Array(yield crypto.subtle.digest('SHA-1', buf)); + text = "9001" + (0, utilities_1.conv2DecimalPadding)((digest[0x0] << 0x8) | digest[0x1], 5) + text; + return (text); + }); + } + _readNVM(addr, size) { + return __awaiter(this, void 0, void 0, function* () { + return (yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF])); + }); + } + _writeNVM(addr, buff) { + return __awaiter(this, void 0, void 0, function* () { + const size = buff.length; + const data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF]; + return (yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(buff))); + }); + } + _get_param_info() { + return __awaiter(this, void 0, void 0, function* () { + this.param_info = this._get_param_info_default(); + const out = this.param_info; + const param_info = yield this._readNVM(0xFFE000, 0x09); + if (param_info.status != sapi_1.SapiClassStatus.OK) { + out.status = param_info.status; + return; + } + const param = param_info.data; + if (param.length < 0x5) { + out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; + return; + } + out.status = ZunoSapiClassStatus.OK; + out.raw = param; + out.freq_i = param_info.data[1]; + out.main_pow = param_info.data[2]; + if (param_info.data[4] != 0x0) + out.sec = true; + }); + } + _get_board_info_add() { + return __awaiter(this, void 0, void 0, function* () { + let code_sz_shift, shift_smrt, eu_lr, byte_i, bit_i; + this.board_info = this._get_board_info_default(); + const out = this.board_info; + const board_info = yield this._readNVM(0xFFFF00, 0x01); + if (board_info.status != sapi_1.SapiClassStatus.OK) { + out.status = board_info.status; + return; + } + const info = board_info.data; + if (info.length < 42) { + out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; + return; + } + out.status = ZunoSapiClassStatus.OK; + const version = ((info[0] << 8) | (info[1])); + out.core_version = version; + out.build_number = (info[2] << 24) | (info[3] << 16) | (info[4] << 8) | (info[5]); + out.version = (version << 16 | (out.build_number & 0xFFFF)); + out.build_ts = (info[6] << 24) | (info[7] << 16) | (info[8] << 8) | (info[9]); + out.hw_rev = (info[10] << 8) | (info[11]); + if (out.build_number > 1116) { + code_sz_shift = 0x1; + out.code_size = (0, utilities_1.costruct_int)(info.slice(12, 12 + 3), 3, false); + } + else { + code_sz_shift = 0x0; + out.code_size = (info[12] << 8) | (info[13]); + } + out.ram_size = (info[14 + code_sz_shift] << 8) | (info[15 + code_sz_shift]); + out.chip_uuid = new Uint8Array(info.slice(16 + code_sz_shift, 16 + code_sz_shift + 8)); + out.s2_pub = new Uint8Array(info.slice(24 + code_sz_shift, 24 + code_sz_shift + 16)); + out.dbg_lock = info[40 + code_sz_shift]; + const offset_base = 46; + if (info.length < offset_base) + return; + out.home_id = (0, utilities_1.costruct_int)(info.slice(41 + code_sz_shift, 41 + code_sz_shift + 4), 4, false); + out.node_id = info[45 + code_sz_shift]; + if (out.build_number < 1669) { + shift_smrt = 90; + if (info.length < (offset_base + code_sz_shift + shift_smrt)) + return; + out.smart_qr = (0, utilities_1.toString)(info.slice(46 + code_sz_shift, 46 + code_sz_shift + 90)); + } + else { + shift_smrt = 11; + if (info.length < (offset_base + code_sz_shift + shift_smrt)) + return; + out.zwdata = + { + s2_keys: info[46 + code_sz_shift], + device_type: (0, utilities_1.costruct_int)(info.slice(47 + code_sz_shift, 47 + code_sz_shift + 2), 2, false), + device_icon: (0, utilities_1.costruct_int)(info.slice(49 + code_sz_shift, 49 + code_sz_shift + 2), 2, false), + vendor: (0, utilities_1.costruct_int)(info.slice(51 + code_sz_shift, 51 + code_sz_shift + 2), 2, false), + product_type: (0, utilities_1.costruct_int)(info.slice(53 + code_sz_shift, 53 + code_sz_shift + 2), 2, false), + product_id: (0, utilities_1.costruct_int)(info.slice(55 + code_sz_shift, 55 + code_sz_shift + 2), 2, false), + version: version, + LR: false, + }; + out.smart_qr = yield this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version); + } + const offset_code = offset_base + code_sz_shift + shift_smrt; + if (info.length < (offset_code + 0x4)) + return; + out.custom_code_offset = (0, utilities_1.costruct_int)(info.slice(offset_code, offset_code + 0x4), 0x4, false); + if (out.custom_code_offset > 0x36000) + out.boot_offset = 0x40000; + const offset_prod = offset_code + 0x4; + if (info.length < (offset_prod + 0x10)) + return; + out.product = + { + prod_raw: new Uint8Array(info.slice(offset_prod, offset_prod + 0x10)), + prod_parent_uuid: new Uint8Array(info.slice(offset_prod, offset_prod + 0x8)), + prod_ts: (0, utilities_1.costruct_int)(info.slice(offset_prod + 0x8, offset_prod + 0x8 + 0x4), 0x4, true), + prod_sn: (0, utilities_1.costruct_int)(info.slice(offset_prod + 0x8 + 0x4, offset_prod + 0x8 + 0x4 + 0x3), 0x3, true), + prod_crc8: info[offset_prod + 0x8 + 0x4 + 0x3], + prod_valid: (info[offset_prod + 0x8 + 0x4 + 0x3] == (0, utilities_1.checksum)(info.slice(offset_prod, offset_prod + 0x10 - 0x1))) ? true : false + }; + const offset_license = offset_prod + 0x10; + if (info.length < (offset_license + 0xA)) + return; + out.license = + { + lic_subvendor: (0, utilities_1.costruct_int)(info.slice(offset_license, offset_license + 0x2), 0x2, false), + lic_flags_raw: new Uint8Array(info.slice(offset_license + 0x2, offset_license + 0x2 + 0x8)), + lic_flags: this.license_flags, + }; + byte_i = 0x0; + while (byte_i < out.license.lic_flags_raw.length) { + bit_i = 0x0; + while (bit_i < 0x8) { + if ((out.license.lic_flags_raw[byte_i] & (0x1 << bit_i)) != 0x0) { + if (out.license.lic_flags[byte_i * 0x8 + bit_i] != undefined) + out.license.lic_flags[byte_i * 0x8 + bit_i].active = true; + } + bit_i++; + } + byte_i++; + } + if (out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE] != undefined && out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE].active == true) { + if (out.version >= 0x30D124B) + eu_lr = true; + else + eu_lr = false; + this.region = new region_1.SapiRegionClass(true, eu_lr); + if (out.zwdata != undefined && this.param_info.status == ZunoSapiClassStatus.OK) { + const region = this.region.getNameRegion(this.param_info.freq_i); + if (region != undefined && this.region.isLr(region) == true) { + out.zwdata.LR = true; + out.smart_qr = yield this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version); + } + } + } + const offset_power = offset_license + 0xA; + if (info.length < (offset_power + 0x1)) + return; + out.max_default_power = info[offset_power]; + const offset_ext_nvm = offset_power + 0x1; + if (info.length < (offset_ext_nvm + 0x2)) + return; + out.ext_nvm = (0, utilities_1.costruct_int)(info.slice(offset_ext_nvm, offset_ext_nvm + 0x2), 0x2, false); + if (out.ext_nvm >= 512) + out.boot_offset = 0xA10000 + ((out.ext_nvm - 512) << 10); + const offset_chip = offset_ext_nvm + 0x2; + const size_chip = 0xA; + if (info.length < (offset_chip + size_chip)) + return; + out.chip = + { + chip_family: info[offset_chip], + chip_type: info[offset_chip + 0x1], + keys_hash: (0, utilities_1.costruct_int)(info.slice(offset_chip + 0x2, offset_chip + 0x2 + 0x4), 0x4, false), + se_version: (0, utilities_1.costruct_int)(info.slice(offset_chip + 0x2 + 0x4, offset_chip + 0x2 + 0x4 + 0x4), 0x4, false) + }; + const offset_boot_version = offset_chip + size_chip; + const size_boot_version = 0x4; + if (info.length < (offset_boot_version + size_boot_version)) + return; + out.boot_version = (0, utilities_1.costruct_int)(info.slice(offset_boot_version, offset_boot_version + size_boot_version), size_boot_version, false); + }); + } + _get_board_info() { + return __awaiter(this, void 0, void 0, function* () { + yield this._get_board_info_add(); + if (this.board_info.status != ZunoSapiClassStatus.OK) + return; + if (this.board_info.boot_version == 0x0) { + this.board_info.boot_version = 0x01090001; + } + if (this.board_info.chip.keys_hash == 0x0) { + this.board_info.chip.keys_hash = 0x8E19CC54; + this.board_info.chip.chip_type = chip_1.HardwareChipClass.CHIP_ZGM130S037HGN1; + this.board_info.chip.chip_family = chip_1.HardwareChipClass.FAMILY_ZGM13; + } + }); + } + _apply_param(raw) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._writeNVM(0xFFE000, raw); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + if (res.data.length < 0x1) + return (ZunoSapiClassStatus.WRONG_LENGTH_CMD); + if (res.data[0x0] != 0x1) + return (ZunoSapiClassStatus.WRONG_STATUS); + const soft_reset = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, []); + if (soft_reset.status != sapi_1.SapiClassStatus.OK) + return soft_reset.status; + const freeze_zuno_info = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000); + if (freeze_zuno_info.status != sapi_1.SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) + return (ZunoSapiClassStatus.NO_FREEZE); + return (ZunoSapiClassStatus.OK); + }); + } + _load_file(addr, data, process) { + return __awaiter(this, void 0, void 0, function* () { + let step, i, percentage, i_ask; + step = this.getQuantumSize(); + percentage = 0x0; + i = 0x0; + while (i < data.length) { + if (i + step > data.length) + step = data.length - i; + percentage = (i * 100.0) / data.length; + if (process != null) + process(percentage); + i_ask = 0x0; + for (;;) { + const status = yield this._writeNVM(addr, Array.from(data.subarray(i, i + step))); + if (status.status == sapi_1.SapiClassStatus.OK) + break; + if (i_ask >= 0x2) + return status.status; + if (status.status != sapi_1.SapiClassStatus.NO_ACK) + return status.status; + if (define_1.WEB_TOOLS_BETA == true) + console.error("second wind in renewal"); + i_ask++; + } + i = i + step; + addr = addr + step; + } + if (process != null && percentage < 100.00) + process(100.00); + return (ZunoSapiClassStatus.OK); + }); + } + updateFirmware(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + const status = yield this._load_file(this.board_info.boot_offset, data, process); + if (status != ZunoSapiClassStatus.OK) + return (status); + const res = yield this.sapi.update(this.board_info.boot_offset, target_type); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + _pushSketch(addr, size, crc16) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(0x08, [0x01, (addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF, (crc16 >> 8) & 0xFF, (crc16) & 0xFF]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + if (res.data.length < 0x1) + return (ZunoSapiClassStatus.WRONG_LENGTH_CMD); + if (res.data[0x0] == 0xFE) + return (ZunoSapiClassStatus.SCETCH_FALLED_CRC16); + return (ZunoSapiClassStatus.OK); + }); + } + updateSketch(scetch, process) { + return __awaiter(this, void 0, void 0, function* () { + let status; + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (scetch.length > this.board_info.code_size) + return (ZunoSapiClassStatus.SCETCH_TOO_LONG); + const data_uint8 = scetch.slice(0, this.ZUNO_HEADER_PREAMBL.length); + const preamble = new TextDecoder().decode(data_uint8); + if (this.ZUNO_HEADER_PREAMBL != preamble) + return (ZunoSapiClassStatus.SCETCH_FALLED_PRIAMLE); + const header_version = (scetch[this.SK_HEADER_VERSION_MSB_OFFSET] << 8) | scetch[this.SK_HEADER_VERSION_LSB_OFFSET]; + if (header_version != this.board_info.core_version) + return (ZunoSapiClassStatus.SCETCH_FALLED_CORE_VERSION); + if (this.board_info.hw_rev != -1 && this.board_info.build_number >= 2849) { + const header_hw_rev = (0, utilities_1.costruct_int)(scetch.slice(this.SK_HEADER_HWREW_OFFSET, this.SK_HEADER_HWREW_OFFSET + 0x2), 2); + if (this.board_info.hw_rev != header_hw_rev) + return (ZunoSapiClassStatus.SCETCH_FALLED_REVISION); + } + status = yield this._load_file(this.board_info.custom_code_offset, scetch, process); + if (status != ZunoSapiClassStatus.OK) + return (status); + const crc16 = (0, utilities_1.calcSigmaCRC16)(0x1D0F, scetch, 0, scetch.length); + status = yield this._pushSketch(this.board_info.custom_code_offset, scetch.length, crc16); + return (status); + }); + } + getBoardInfo() { + return (this.board_info); + } + _isSupportRegionAndPower() { + if (this.param_info.status != ZunoSapiClassStatus.OK) + return (this.param_info.status); + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x3080517) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isMustResetDefault() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x30D124B) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportResetDefault() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x3080517) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportIncludeExclude() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x30C108C) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportUpdateBootloader() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.product == undefined) + return (ZunoSapiClassStatus.UN_SUPPORT); + if (this.board_info.product.prod_valid == false) + return (ZunoSapiClassStatus.UN_SUPPORT); + const prod_date = new Date(this.board_info.product.prod_ts * 1000); + if (prod_date.getUTCFullYear() <= 2022) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportDumpKey() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info == undefined) + return (ZunoSapiClassStatus.UN_SUPPORT); + if (this.board_info.license == undefined) + return (ZunoSapiClassStatus.UN_SUPPORT); + if (this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2] != undefined && this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2].active == true) + return (ZunoSapiClassStatus.OK); + return (ZunoSapiClassStatus.UN_SUPPORT); + } + _test_dump_key(array) { + const empty_v1 = "00000000000000000000000000000000"; + const empty_v2 = "ffffffffffffffffffffffffffffffff"; + const key = (0, utilities_1.arrayToStringHex)(array); + if (key === empty_v1 || key === empty_v2) + return (false); + return (true); + } + readS2Key() { + return __awaiter(this, void 0, void 0, function* () { + let i; + const out = { status: ZunoSapiClassStatus.OK, list: [] }; + out.status = this.isSupportDumpKey(); + if (out.status != ZunoSapiClassStatus.OK) + return (out); + const dump_key_info = yield this._readNVM(0xFFCCC0, 0x40); + if (dump_key_info.status != sapi_1.SapiClassStatus.OK) { + out.status = dump_key_info.status; + return (out); + } + if (dump_key_info.data.length != 0x40) { + out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; + return (out); + } + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(0, 16)), name: this.KEY_UNAUTH_NAME }); + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(16, 32)), name: this.KEY_AUTH_NAME }); + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(32, 48)), name: this.KEY_ACCESS_NAME }); + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(48, 64)), name: this.KEY_S0_NAME }); + i = 0x0; + while (i < out.list.length) { + if (this._test_dump_key(out.list[i].key) == false) + out.list[i].key = new Uint8Array([]); + i++; + } + return (out); + }); + } + getRegion() { + const out = { status: this._isSupportRegionAndPower(), region: "", region_array: this.region.getListRegion() }; + if (out.status != ZunoSapiClassStatus.OK) + return (out); + const region = this.region.getNameRegion(this.param_info.freq_i); + if (region == undefined) { + out.status = ZunoSapiClassStatus.WRONG_IN_DATA; + return (out); + } + out.region = region; + return (out); + } + setRegion(region) { + return __awaiter(this, void 0, void 0, function* () { + const status = this._isSupportRegionAndPower(); + if (status != ZunoSapiClassStatus.OK) + return (status); + const region_id = this.region.getIdRegion(region); + if (region_id == undefined) + return (ZunoSapiClassStatus.INVALID_ARG); + if (this.param_info.status != ZunoSapiClassStatus.OK) + return (this.param_info.status); + const raw = this.param_info.raw; + raw[0x1] = region_id; + if (raw.length > 0x8) + raw[0x8] = region_id; + return (yield this._apply_param(raw)); + }); + } + getPower() { + const out = { + status: this._isSupportRegionAndPower(), + power_raw: this.param_info.main_pow, + step: 0x1, + min: 1, + max: this.board_info.max_default_power, + }; + if (out.status != ZunoSapiClassStatus.OK) + return (out); + return (out); + } + getSec() { + const out = { + status: this._isSupportRegionAndPower(), + sec: this.param_info.sec, + }; + if (out.status != ZunoSapiClassStatus.OK) + return (out); + return (out); + } + setSec(sec) { + return __awaiter(this, void 0, void 0, function* () { + const status = this._isSupportRegionAndPower(); + if (status != ZunoSapiClassStatus.OK) + return (status); + const raw = this.param_info.raw; + if (sec == true) + raw[0x4] = 0x1; + else + raw[0x4] = 0x0; + return (yield this._apply_param(raw)); + }); + } + setPower(power) { + return __awaiter(this, void 0, void 0, function* () { + const status = this._isSupportRegionAndPower(); + if (status != ZunoSapiClassStatus.OK) + return (status); + const raw = this.param_info.raw; + raw[0x2] = power; + return (yield this._apply_param(raw)); + }); + } + enableNif() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x0A]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + enableEvent() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x09, 0x1]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + _enableLearn_get_status() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.recvIncomingRequest(1000); + if (res.status != sapi_1.SapiClassStatus.OK) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + if (res.cmd != sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + if (res.data.length < 0x3) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + if (res.data[0x1] != 0xA0) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + return (res.data[0x2]); + }); + } + _enableLearn_include() { + return __awaiter(this, void 0, void 0, function* () { + let retries; + const wait_timeout = Date.now() + ((30 + 0x1) * 1000); + retries = 0x0; + while (wait_timeout > Date.now()) { + switch (yield this._enableLearn_get_status()) { + case ELearnStatus.ELEARNSTATUS_PROCESS: + retries++; + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: + retries = 0x0; + break; + default: + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + break; + } + if (retries >= 0x3) + return (ZunoSapiClassStatus.LEARN_INCLUDE); + } + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + }); + } + _enableLearn_exlude() { + return __awaiter(this, void 0, void 0, function* () { + let retries; + retries = 0x0; + while (retries < 0x3) { + retries++; + switch (yield this._enableLearn_get_status()) { + case ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE: + break; + case ELearnStatus.ELEARNSTATUS_PROCESS: + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: + return (yield this._enableLearn_include()); + break; + } + } + return (ZunoSapiClassStatus.LEARN_EXCLUDE); + }); + } + enableLearn(timeout) { + return __awaiter(this, void 0, void 0, function* () { + let detect_wait, status; + timeout = timeout & 0xFF; + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x07, timeout & 0xFF, 0x1 & 0xFF]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + const wait_timeout = Date.now() + ((timeout + 0x1) * 1000); + this.lock(); + while (wait_timeout > Date.now()) { + switch (yield this._enableLearn_get_status()) { + case ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT: + this.unlock(); + detect_wait = yield this.sapi.detect_rcv(); + if (detect_wait.status != sapi_1.SapiClassStatus.OK) + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + return (ZunoSapiClassStatus.TIMEOUT); + break; + case ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED: + this.unlock(); + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE: + status = yield this._enableLearn_exlude(); + this.unlock(); + return (status); + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: + status = yield this._enableLearn_include(); + this.unlock(); + return (status); + break; + } + } + this.unlock(); + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + }); + } + setDefault() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x5]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + getQuantumSize() { + return (this.sapi.getQuantumSize()); + } + lock() { + return (this.sapi.lock()); + } + unlock() { + return (this.sapi.unlock()); + } + is_busy() { + return (this.sapi.is_busy()); + } + connect() { + return __awaiter(this, void 0, void 0, function* () { + this.region = new region_1.SapiRegionClass(); + yield this._get_param_info(); + yield this._get_board_info(); + // await this._begin(true); + }); + } + detect(baudrate, func) { + return __awaiter(this, void 0, void 0, function* () { + return (yield this.sapi.detect(baudrate, func)); + }); + } + constructor(sapi) { + this.KEY_UNAUTH_NAME = "unauth"; + this.KEY_AUTH_NAME = "auth"; + this.KEY_ACCESS_NAME = "access"; + this.KEY_S0_NAME = "s0"; + this.ZUNO_HEADER_PREAMBL = "ZMEZUNOC"; + this.SK_HEADER_SIZE = 0xC0; + this.SK_HEADER_VERSION_MSB_OFFSET = 0x08; + this.SK_HEADER_VERSION_LSB_OFFSET = 0x09; + this.SK_HEADER_NAME_START = 56; + this.SK_HEADER_MAX_NAME = 47; + this.SK_HEADER_HWREW_OFFSET = this.SK_HEADER_NAME_START + this.SK_HEADER_MAX_NAME + 1; + this.LICENSE_KEY_DUMP_S2 = 0x1; + this.LICENSE_KEY_LONG_RANGE = 0x5; + this.license_flags = { + 0x00: { name: "Pti", title: "Provides Packet Trace Interface (PTI) capabilities. Turns ZUno to advanced sniffer.", active: false }, + 0x01: { name: "Key dump", title: "Enables Z-Wave network key dump using Z-Uno.", active: false }, + 0x02: { name: "Custom vendor", title: "Use custom vendor code intead of 0115 (ZME)", active: false }, + 0x03: { name: "Modem", title: "ZUno works as direct transmitter.", active: false }, + 0x04: { name: "Max power", title: "User is able to use the maximum power of radio amplifier.", active: false }, + 0x05: { name: "Long Range", title: "Enables Z-Wave LongRange technology support.", active: false }, + }; + this.board_info = this._get_board_info_default(); + this.param_info = this._get_param_info_default(); + this.region = new region_1.SapiRegionClass(); + this.sapi = sapi; + } +} +exports.ZunoSapiClass = ZunoSapiClass; + + +/***/ }), + +/***/ "./src/section/common.ts": +/*!*******************************!*\ + !*** ./src/section/common.ts ***! + \*******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CommonUiSectionHtmlClass = exports.CommonUiSectionClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +class CommonUiSectionHtmlClass { + common_button_atrr(el_button, title, hide) { + if (hide == true) { + el_button.setAttribute("disabled", ""); + el_button.removeAttribute("title"); + return; + } + if (typeof title !== "string") + title = this.locale.getLocale(title); + el_button.setAttribute("title", title); + el_button.removeAttribute("disabled"); + } + _event_get_element(event, tag) { + if (event.target == null) + return (null); + const el_target = event.target; + try { + if (el_target.tagName.toLowerCase() !== tag.toLowerCase()) + return (null); + } + catch (error) { + return (null); + } + return (event.target); + } + event_get_element_select(event) { + const el_target = this._event_get_element(event, "select"); + if (el_target == null) + return (null); + return event.target; + } + event_get_element_input(event) { + const el_target = this._event_get_element(event, "input"); + if (el_target == null) + return (null); + return event.target; + } + event_get_element_button(event) { + const el_target = this._event_get_element(event, "button"); + if (el_target == null) + return (null); + return event.target; + } + constructor(locale) { + this.locale = locale; + } +} +exports.CommonUiSectionHtmlClass = CommonUiSectionHtmlClass; +class CommonUiSectionClass extends CommonUiSectionHtmlClass { + is_busy() { + if (this.management.is_busy() == true) { + this.log.warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PLEASE_WAIT); + return (true); + } + return (false); + } + create_tr_el(name, title, value, action) { + const el_tr = document.createElement("tr"); + const el_td_1 = document.createElement("td"); + const el_td_2 = document.createElement("td"); + const el_td_3 = document.createElement("td"); + if (typeof name === "string") + el_td_1.innerHTML = name; + else + el_td_1.innerHTML = this.locale.getLocale(name); + if (typeof title === "string") + el_td_1.title = title; + else + el_td_1.title = this.locale.getLocale(title); + if (typeof value === "string") + el_td_2.innerHTML = value; + else + el_td_2.appendChild(value); + if (typeof action === "string") + el_td_3.innerHTML = action; + else + el_td_3.appendChild(action); + el_tr.appendChild(el_td_1); + el_tr.appendChild(el_td_2); + el_tr.appendChild(el_td_3); + this.el_tbody.appendChild(el_tr); + return (el_tr); + } + is_close() { + if (this.is_busy() == true) + return (false); + return (true); + } + begin() { + return __awaiter(this, void 0, void 0, function* () { + yield this.end(); + if ((yield this.begin_func()) == false) + return; + this.el_section.style.display = ''; + }); + } + end() { + return __awaiter(this, void 0, void 0, function* () { + this.el_section.style.display = 'none'; + yield this.end_func(); + this.el_tbody.innerHTML = ''; + }); + } + quest_continue_stop(el, quest, quest_title, run, run_title, stop, stop_title) { + return __awaiter(this, void 0, void 0, function* () { + const promise = new Promise((resolve) => { + el.innerHTML = ''; + const el_span = document.createElement("span"); + if (typeof quest !== "string") + quest = this.locale.getLocale(quest); + el_span.innerHTML = quest; + if (typeof quest_title !== "string") + quest_title = this.locale.getLocale(quest_title); + el_span.title = quest_title; + el_span.className = "ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button"; + const el_button_continue = document.createElement("button"); + el_button_continue.textContent = this.locale.getLocale(run); + el_button_continue.title = this.locale.getLocale(run_title); + el_button_continue.type = "button"; + el_button_continue.className = "ZUnoRazberryModalContentSection_migration_action_button"; + el.appendChild(el_span); + el.appendChild(el_button_continue); + el_button_continue.addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { resolve(true); })); + if (stop != undefined && stop_title != undefined) { + const el_button_stop = document.createElement("button"); + el_button_stop.textContent = this.locale.getLocale(stop); + el_button_stop.title = this.locale.getLocale(stop_title); + el_button_stop.type = "button"; + el_button_stop.className = "ZUnoRazberryModalContentSection_migration_action_button"; + el_button_stop.addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { resolve(false); })); + el.appendChild(el_button_stop); + } + }); + return (promise); + }); + } + constructor(el_section, locale, management, log, id, begin_func, end_func) { + super(locale); + this.URL_LICENSE_MORE_OPTIONS = "https://z-wave.me/hardware-capabilities/?uuid="; + this.URL_LICENSE_SERVISE = "https://service.z-wave.me/hardware/capabilities/?uuid="; + this.management = management; + this.log = log; + const el = document.createElement("section"); + el.className = "ZUnoRazberryModalContentSection_table"; + el.style.display = 'none'; + const el_header = document.createElement("h3"); + el_header.textContent = this.locale.getLocale(id); + el.appendChild(el_header); + const el_table = document.createElement("table"); + el.appendChild(el_table); + const el_tbody = document.createElement("tbody"); + el_table.appendChild(el_tbody); + el_section.appendChild(el); + this.el_section = el; + this.el_tbody = el_tbody; + this.begin_func = begin_func; + this.end_func = end_func; + } +} +exports.CommonUiSectionClass = CommonUiSectionClass; + + +/***/ }), + +/***/ "./src/section/controller/info.ts": +/*!****************************************!*\ + !*** ./src/section/controller/info.ts ***! + \****************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiSectionInfoClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const controller_sapi_1 = __webpack_require__(/*! ../../sapi/controller_sapi */ "./src/sapi/controller_sapi.ts"); +const common_1 = __webpack_require__(/*! ../common */ "./src/section/common.ts"); +class ControllerUiSectionInfoClass extends common_1.CommonUiSectionClass { + _controller_default_click(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.is_busy() == true) + return; + const el_target = this.event_get_element_button(event); + if (el_target == null) + return; + const out = window.confirm(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DEFAULT_RESET_WARNING)); + if (out != true) + return; + this.common_button_atrr(el_target, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, true); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT); + const status = yield this.razberry.setDefault(); + this.common_button_atrr(el_target, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, false); + if (status == controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT); + this.re_begin_func(false); + return; + } + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status); + }); + } + _controller_default_init() { + const el_button = document.createElement("button"); + el_button.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE); + el_button.type = "button"; + el_button.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON); + el_button.addEventListener("click", (event) => { this._controller_default_click(event); }); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE, "", el_button); + return (true); + } + _power_change(event) { + const el_target = this.event_get_element_input(event); + if (el_target == null) + return; + this.power_new = Number(el_target.value); + this.common_button_atrr(this.power_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true : false); + } + _power_click() { + return __awaiter(this, void 0, void 0, function* () { + if (this.is_busy() == true) + return; + this.common_button_atrr(this.power_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, true); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER); + const status = yield this.razberry.setPower(this.power_new); + if (status == controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER); + this.power_current = this.power_new; + return; + } + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER, status); + this.common_button_atrr(this.power_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, false); + }); + } + _power_init() { + return __awaiter(this, void 0, void 0, function* () { + if (this.razberry.isRazberry7() == false) + return (false); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER); + const power = yield this.razberry.getPower(); + if (power.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER, power.status); + return (false); + } + this.power_new = power.power_raw; + this.power_current = power.power_raw; + const el_value = document.createElement("span"); + const el_input = document.createElement("input"); + el_input.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE); + el_input.type = "number"; + el_input.min = power.min.toString(); + el_input.max = power.max.toString(); + el_input.step = power.step.toString(); + el_input.value = power.power_raw.toString(); + el_input.addEventListener("change", (event) => { this._power_change(event); }); + el_value.appendChild(el_input); + el_value.appendChild(document.createElement("span")); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_TITLE, el_value, this.power_el_button); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER); + return (true); + }); + } + _region_change(event) { + const el_target = this.event_get_element_select(event); + if (el_target == null) + return; + this.region_new = el_target.value; + this.common_button_atrr(this.region_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true : false); + } + _region_click() { + return __awaiter(this, void 0, void 0, function* () { + if (this.is_busy() == true) + return; + this.common_button_atrr(this.region_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, true); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + const status = yield this.razberry.setRegion(this.region_new); + if (status == controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + this.region_current = this.region_new; + return; + } + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION, status); + this.common_button_atrr(this.region_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, false); + }); + } + _region_init() { + return __awaiter(this, void 0, void 0, function* () { + let i, el_option_str, el_select; + if (this.razberry.isRazberry5() == true) + return (false); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + const region_info = yield this.razberry.getRegion(); + switch (region_info.status) { + case controller_sapi_1.ControllerSapiClassStatus.OK: + this.region_current = region_info.region; + this.region_new = region_info.region; + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + i = 0x0; + el_option_str = ""; + while (i < region_info.region_array.length) { + if (region_info.region_array[i] == region_info.region) { + el_option_str = el_option_str + ''; + } + else { + el_option_str = el_option_str + ''; + } + i++; + } + el_select = document.createElement("select"); + el_select.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE); + el_select.innerHTML = el_option_str; + el_select.addEventListener("change", (event) => { this._region_change(event); }); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_TITLE, el_select, this.region_el_button); + return (true); + break; + case controller_sapi_1.ControllerSapiClassStatus.UNSUPPORT_CMD: + this.log.errorUnsupport(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + break; + default: + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); + break; + } + return (false); + }); + } + _capabilities_init() { + let value; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); + const capabilities_info = this.razberry.getCapabilities(); + if (capabilities_info.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES, capabilities_info.status); + return (false); + } + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE, this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER), ""); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE, capabilities_info.ApiVersion + "." + capabilities_info.ApiRevision, ""); + value = capabilities_info.VendorIDName; + if (capabilities_info.VendorIDWebpage != undefined) + value = '' + value + ''; + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE, value, ""); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE, String(capabilities_info.VendorID), ""); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); + return (true); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + let display; + display = false; + if (this._capabilities_init() == true) + display = true; + if ((yield this._region_init()) == true) + display = true; + if ((yield this._power_init()) == true) + display = true; + if (this._controller_default_init() == true) + display = true; + return (display); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + this.power_el_button.disabled = true; + this.region_el_button.disabled = true; + }); + } + _constructor_button(text, click) { + const el_button = document.createElement("button"); + el_button.textContent = this.locale.getLocale(text); + el_button.addEventListener("click", click); + el_button.type = "button"; + return (el_button); + } + constructor(el_section, locale, razberry, log, re_begin_func) { + super(el_section, locale, razberry, log, ui_lang_define_1.ControllerUiLangClassId.BOARD_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.region_current = ''; + this.region_new = ''; + this.power_current = 0x0; + this.power_new = 0x0; + this.razberry = razberry; + this.power_el_button = this._constructor_button(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON, () => { this._power_click(); }); + this.region_el_button = this._constructor_button(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON, () => { this._region_click(); }); + this.re_begin_func = re_begin_func; + } +} +exports.ControllerUiSectionInfoClass = ControllerUiSectionInfoClass; + + +/***/ }), + +/***/ "./src/section/controller/license.ts": +/*!*******************************************!*\ + !*** ./src/section/controller/license.ts ***! + \*******************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiSectionLicenseClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const controller_sapi_1 = __webpack_require__(/*! ../../sapi/controller_sapi */ "./src/sapi/controller_sapi.ts"); +const common_1 = __webpack_require__(/*! ../common */ "./src/section/common.ts"); +const utilities_1 = __webpack_require__(/*! ../../other/utilities */ "./src/other/utilities.ts"); +class ControllerUiSectionLicenseClass extends common_1.CommonUiSectionClass { + _license_timer_valid_data(in_json) { + if (in_json.crc == undefined || in_json.uuid == undefined || in_json.license == undefined) + return (false); + if (typeof (in_json.crc) != "string") + return (false); + if (typeof (in_json.license) != "string") + return (false); + if (typeof (in_json.uuid) != "string") + return (false); + return (true); + } + _license_timer_get_pack(in_json, uuid, crc16_old) { + if (uuid.toLowerCase().padStart(16, '0') != in_json.uuid.toLowerCase().padStart(16, '0')) + return (undefined); + const crc16 = Number(in_json.crc); + if (crc16 == 0x0) + return (undefined); + if (crc16 == crc16_old) + return (undefined); + return (in_json.license); + } + _license_timer_init(uuid, crc16) { + const url = this.URL_LICENSE_SERVISE + uuid; + const fun_xhr_timer = () => { + this.license_timer_id = undefined; + this.license_xhr.open("POST", url, true); + this.license_xhr.responseType = 'json'; + this.license_xhr.timeout = this.ms_timeout_get_new_license_xhr; + this.license_xhr.ontimeout = () => { + this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); + this.log.errorXhrTimeout(url); + }; + this.license_xhr.onerror = () => { + this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); + this.log.errorXhrError(url); + }; + this.license_xhr.onload = () => { + const in_json = this.license_xhr.response; + if (this._license_timer_valid_data(in_json) == false) { + this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); + this.log.errorXhrInvalidData(url); + return; + } + const pack = this._license_timer_get_pack(in_json, uuid, crc16); + if (pack == undefined) { + this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); + return; + } + const pack_array = (0, utilities_1.hexToBytes)(pack); + if (pack_array == undefined) { + this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); + this.log.errorXhrInvalidData(url); + return; + } + const fun_controller_timer = () => __awaiter(this, void 0, void 0, function* () { + this.license_timer_id = undefined; + this.log.infoStart(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_LICENSE)); + if (this.razberry.is_busy() == true) { + this.log.warning(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PLEASE_WAIT)); + this.license_timer_id = window.setTimeout(fun_controller_timer, this.ms_timeout_get_new_license_port); + return; + } + const status = yield this.razberry.setLicense(pack_array); + if (status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_LICENSE), status); + this.license_timer_id = window.setTimeout(fun_controller_timer, this.ms_timeout_get_new_license_port); + return; + } + this.log.infoDone(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_LICENSE)); + this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); + this.begin(); + }); + this.license_timer_id = window.setTimeout(fun_controller_timer, 0x0); + }; + this.license_xhr.send(); + }; + this.license_timer_id = window.setTimeout(fun_xhr_timer, 0x0); + } + _license_init() { + let key, flag_status; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE); + const license = this.razberry.getLicense(); + if (license.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE, license.status); + return (undefined); + } + if (license.vallid == true) { + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE, String(license.vendor_id), ""); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE, String(license.max_nodes), ""); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE, String(license.count_support), ""); + } + for (key in license.flags) { + if (license.flags[key].active == true) + flag_status = this.TABLE_NAME_LICENSE_YES; + else + flag_status = this.TABLE_NAME_LICENSE_NO; + this.create_tr_el(license.flags[key].name + ":", license.flags[key].title, flag_status, ""); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE); + if (license.vallid == true) + return (license.crc16); + return (0x0); + } + _board_info_init() { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); + const board_info = this.razberry.getBoardInfo(); + if (board_info.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO, board_info.status); + return (undefined); + } + const uuid_str_hex = (0, utilities_1.arrayToStringHex)(board_info.chip_uuid); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE, uuid_str_hex, ""); + const more_options_link = '' + 'link' + ''; + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE, more_options_link, ""); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); + return (uuid_str_hex); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + if (this.razberry.isRazberry7() == false) + return (false); + const uuid_str_hex = this._board_info_init(); + const crc16 = this._license_init(); + if (uuid_str_hex == undefined && crc16 == undefined) + return (false); + if (uuid_str_hex != undefined && crc16 != undefined) + this._license_timer_init(uuid_str_hex, crc16); + return (true); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + if (this.license_timer_id != undefined) { + window.clearTimeout(this.license_timer_id); + this.license_timer_id = undefined; + } + this.license_xhr.abort(); + }); + } + constructor(el_section, locale, razberry, log) { + super(el_section, locale, razberry, log, ui_lang_define_1.ControllerUiLangClassId.LICENSE_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.TABLE_NAME_LICENSE_YES = ''; + this.TABLE_NAME_LICENSE_NO = ''; + this.ms_timeout_get_new_license = 10000; + this.ms_timeout_get_new_license_xhr = 3000; + this.ms_timeout_get_new_license_port = 1000; + this.license_xhr = new XMLHttpRequest(); + this.razberry = razberry; + } +} +exports.ControllerUiSectionLicenseClass = ControllerUiSectionLicenseClass; + + +/***/ }), + +/***/ "./src/section/controller/migration.ts": +/*!*********************************************!*\ + !*** ./src/section/controller/migration.ts ***! + \*********************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiSectionMigrationClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const controller_sapi_1 = __webpack_require__(/*! ../../sapi/controller_sapi */ "./src/sapi/controller_sapi.ts"); +const zuno_sapi_1 = __webpack_require__(/*! ../../sapi/zuno_sapi */ "./src/sapi/zuno_sapi.ts"); +const common_1 = __webpack_require__(/*! ../common */ "./src/section/common.ts"); +const update_1 = __webpack_require__(/*! ./update */ "./src/section/controller/update.ts"); +const update_2 = __webpack_require__(/*! ../slave/update */ "./src/section/slave/update.ts"); +const update_3 = __webpack_require__(/*! ../update */ "./src/section/update.ts"); +const sapi_1 = __webpack_require__(/*! ../../sapi/sapi */ "./src/sapi/sapi.ts"); +const utilities_1 = __webpack_require__(/*! ../../other/utilities */ "./src/other/utilities.ts"); +class ControllerUiSectionMigrationClass extends common_1.CommonUiSectionClass { + _raz_include_excluding_wait(progress_timer_id_count, start_id, wait_id, include_excluding) { + return __awaiter(this, void 0, void 0, function* () { + let index_timout; + const el_progress = document.createElement('progress'); + const el_span = document.createElement('span'); + const el_container = document.createElement('span'); + el_container.title = this.locale.getLocale(wait_id); + el_container.appendChild(el_progress); + el_container.appendChild(el_span); + el_progress.max = progress_timer_id_count; + this.el_container.appendChild(el_container); + index_timout = progress_timer_id_count; + const seconds = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.SECONDS); + const max_lenght = progress_timer_id_count.toString().length; + const fun_timer = () => { + el_progress.value = index_timout; + el_span.textContent = ' ' + index_timout.toString().padStart(max_lenght, '0') + seconds; + if (index_timout > 0x0) { + index_timout--; + this.progress_timer_id = window.setTimeout(fun_timer, this.progress_timer_id_ms_period); + } + else + this.progress_timer_id = undefined; + }; + this.progress_timer_id = window.setTimeout(fun_timer, 0x0); + for (;;) { + const wait = yield this.razberry.waitLearn(this.progress_timer_id_ms_period, include_excluding.seq); + if (wait == controller_sapi_1.ControllerSapiClassStatus.OK) { + if (this.progress_timer_id != undefined) { + window.clearTimeout(this.progress_timer_id); + this.progress_timer_id = undefined; + } + this.log.infoDone(start_id); + return (true); + } + if (wait != controller_sapi_1.ControllerSapiClassStatus.PROCESS) { + this.log.errorFalledCode(start_id, wait); + return (false); + } + if (this.progress_timer_id == undefined) { + yield this.razberry.disabled(); + this.log.errorFalledCode(start_id, controller_sapi_1.ControllerSapiClassStatus.TIMEOUT); + return (undefined); + } + } + }); + } + _click_start_stop_include_excluding(excluding) { + return __awaiter(this, void 0, void 0, function* () { + let out_progress, start_id, question_id, wait_id, include_excluding; + if (excluding == true) { + start_id = ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_EXCLUDING; + question_id = ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE; + wait_id = ui_lang_define_1.ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER; + } + else { + start_id = ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_INCLUDE; + question_id = ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE; + wait_id = ui_lang_define_1.ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER; + } + yield this.quest_continue_stop(this.el_container, question_id, "", ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, undefined, undefined); + this.el_container.innerHTML = ''; + this.log.infoStart(start_id); + include_excluding = yield this.razberry.include_excluding(); + if (include_excluding.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(start_id, include_excluding.status); + return (false); + } + out_progress = yield this._raz_include_excluding_wait(10, start_id, wait_id, include_excluding); + if (out_progress != undefined) + return (out_progress); + this.el_container.innerHTML = ''; + this.log.infoStart(start_id); + if (excluding == true) { + start_id = ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING; + include_excluding = yield this.razberry.excludingWide(); + } + else { + start_id = ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE; + include_excluding = yield this.razberry.includeWide(); + } + if (include_excluding.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(start_id, include_excluding.status); + return (false); + } + out_progress = yield this._raz_include_excluding_wait(30, start_id, wait_id, include_excluding); + if (out_progress == undefined) + return (false); + return (out_progress); + }); + } + _click_start_stop_test_include(home) { + return __awaiter(this, void 0, void 0, function* () { + this._progress(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_TEST_INCLUDE); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_HOME_ID); + const home_id = yield this.razberry.GetNetworkIDs(); + if (home_id.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_HOME_ID, home_id.status); + return (undefined); + } + home.home = home_id.home; + home.node_id = home_id.node_id; + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_HOME_ID); + if (home_id.node_id != 0x1) + return (true); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA); + const get_init_data = yield this.razberry.GetInitData(); + if (get_init_data.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA, get_init_data.status); + return (undefined); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA); + if (get_init_data.node_list.length > 0x1 || get_init_data.node_list[0x0] != 0x1) + return (true); + return (false); + }); + } + _progress(text) { + this.el_container.innerHTML = '
' + this.locale.getLocale(text) + '
'; + } + _progress_error(text) { + this.el_container.innerHTML = '
' + this.locale.getLocale(text) + '
'; + } + _update_raz_full_finware_url(data, target_type) { + let i; + i = data.length; + while (i-- != 0x0) { + if (data[i].beta == false && data[i].type == target_type) + return (data[i]); + } + return (undefined); + } + _update_raz_full_boot_url(data) { + let i; + i = data.length; + while (i-- != 0x0) { + if (data[i].beta == false) + return (data[i]); + } + return (undefined); + } + _update_firmware_zuno(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + const status = yield this.zuno.updateFirmware(data, process, target_type); + return status; + }); + } + _update_firmware_raz(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + const status = yield this.razberry.updateFirmware(data, process, target_type); + return status; + }); + } + _update_bootloader_raz(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + const status = yield this.razberry.updateBotloader(data, process); + return status; + }); + } + _update_raz_zuno_full_get_info_paket_add(paket) { + if (paket == undefined) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO); + return (undefined); + } + return (paket); + } + _update_raz_full_get_info_paket() { + const paket = update_1.ControllerUiSectionUpdateClass.getInfoUrlPaket(this.log, this.razberry); + return (this._update_raz_zuno_full_get_info_paket_add(paket)); + } + _update_zuno_full_get_info_paket() { + const paket = update_2.SlaveUiSectionUpdateClass.getInfoUrlPaket(this.log, this.zuno); + return (this._update_raz_zuno_full_get_info_paket_add(paket)); + } + _update_raz_full_dowload_and_update(update_firmware, data, version_name) { + return __awaiter(this, void 0, void 0, function* () { + this._progress(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE); + const finware = yield update_3.UpdateUiSectionClass.downloadFile(this.download_process, data.url, this.log); + this.el_container.innerHTML = ''; + const el_div_progress = document.createElement("div"); + const el_div_text = document.createElement("div"); + el_div_text.textContent = version_name + " -> " + data.version_name; + this.el_container.appendChild(el_div_text); + this.el_container.appendChild(el_div_progress); + const finware_status = yield update_3.UpdateUiSectionClass.updateProcess(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE, el_div_progress, finware, data.type, update_firmware, this.locale, this.log); + if (finware_status == false) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_UPDATE); + return (false); + } + return (true); + }); + } + _update_raz_full() { + return __awaiter(this, void 0, void 0, function* () { + let paket; + paket = this._update_raz_full_get_info_paket(); + if (paket == undefined) + return (undefined); + for (;;) { + this._progress(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO); + yield update_3.UpdateUiSectionClass.downloadInfo(this.download_process, paket, this.log, this.locale); + const data_raz = this._update_raz_full_finware_url(paket.app.data, sapi_1.SapiClassDetectType.RAZBERRY); + if (data_raz == undefined) { + const data_boot = this._update_raz_full_boot_url(paket.boot.data); + if (data_boot == undefined) + return (paket); + if ((yield this._update_raz_full_dowload_and_update((data, process, target_type) => __awaiter(this, void 0, void 0, function* () { return (yield this._update_bootloader_raz(data, process, target_type)); }), data_boot, paket.boot.version_name)) == false) { + return (undefined); + } + yield this.razberry.connect(); + paket = this._update_raz_full_get_info_paket(); + if (paket == undefined) + return (undefined); + if (paket.boot.version != data_boot.version) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); + return (undefined); + } + continue; + } + if ((yield this._update_raz_full_dowload_and_update((data, process, target_type) => __awaiter(this, void 0, void 0, function* () { return (yield this._update_firmware_raz(data, process, target_type)); }), data_raz, paket.app.version_name)) == false) { + return (undefined); + } + if (this.sapi.type() != sapi_1.SapiClassDetectType.RAZBERRY) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE); + return (undefined); + } + yield this.razberry.connect(); + paket = this._update_raz_full_get_info_paket(); + if (paket == undefined) + return (undefined); + if (paket.app.version != data_raz.version) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); + return (undefined); + } + } + return (paket); + }); + } + _update_raz_to_zuno(paket) { + return __awaiter(this, void 0, void 0, function* () { + const data_zuno = this._update_raz_full_finware_url(paket.app.data, sapi_1.SapiClassDetectType.ZUNO); + if (data_zuno == undefined) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE); + return (undefined); + } + if ((yield this._update_raz_full_dowload_and_update((data, process, target_type) => __awaiter(this, void 0, void 0, function* () { return (yield this._update_firmware_raz(data, process, target_type)); }), data_zuno, paket.app.version_name)) == false) { + return (undefined); + } + if (this.sapi.type() != sapi_1.SapiClassDetectType.ZUNO) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE); + return (undefined); + } + yield this.zuno.connect(); + const paket_new = this._update_zuno_full_get_info_paket(); + if (paket_new == undefined) + return (undefined); + if (paket_new.app.version != data_zuno.version) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); + return (undefined); + } + return (paket_new); + }); + } + _click_start_stop_zuno_get_info_include_exlude() { + return __awaiter(this, void 0, void 0, function* () { + let status; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); + status = yield this.zuno.enableNif(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT, status); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); + status = yield this.zuno.enableEvent(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN, status); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_LEARN); + status = yield this.zuno.enableLearn(30); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_LEARN); + switch (status) { + case zuno_sapi_1.ZunoSapiClassStatus.TIMEOUT: + this.log.warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); + break; + case zuno_sapi_1.ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART: + this.log.warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + break; + default: + this.log.warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + break; + case zuno_sapi_1.ZunoSapiClassStatus.LEARN_EXCLUDE: + case zuno_sapi_1.ZunoSapiClassStatus.LEARN_INCLUDE: + this.log.info(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE); + break; + } + yield (0, utilities_1.sleep)(2000); //что бы точно ресетнулось + if ((yield this._detection(sapi_1.SapiClassDetectType.ZUNO)) == false) + return (false); + return (true); + }); + } + _test_dump_key_all(dump_key) { + let i; + i = 0x0; + while (i < dump_key.list.length) { + if (dump_key.list[i].key.length <= 0x0) + return (false); + i++; + } + return (true); + } + _dump_key_all_to_string(dump_key) { + let out, i, lenght, index; + i = 0x0; + lenght = 0x0; + while (i < dump_key.list.length) { + if (dump_key.list[i].key.length > 0x0 && dump_key.list[i].name.length > lenght) + lenght = dump_key.list[i].name.length; + i++; + } + out = '

' + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_SUCESS) + '

'; + i = 0x0; + lenght++; + while (i < dump_key.list.length) { + if (dump_key.list[i].key.length > 0x0) { + out = out + '
' + "" + dump_key.list[i].name + ":"; + index = dump_key.list[i].name.length; + while (index < lenght) { + out = out + ' '; + index++; + } + out = out + "" + (0, utilities_1.arrayToStringHex)(dump_key.list[i].key) + '
'; + } + i++; + } + out = out + "
"; + return (out); + } + _key_all_to_string_quest(dump_key) { + let out, i; + out = "
" + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY) + "
"; + i = 0x0; + while (i < dump_key.list.length) { + out = out + ""; + i++; + } + out = out + "
" + dump_key.list[i].name + "✘"; + else + out = out + "class='ZUnoRazberryModal_color_sucess'>✔"; + out = out + "
"; + return (out); + } + _click_start_stop_zuno_get_info(region) { + return __awaiter(this, void 0, void 0, function* () { + let status, final; + status = this.zuno.isSupportDumpKey(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY); + return (undefined); + } + status = this.zuno.isSupportIncludeExclude(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE); + return (undefined); + } + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + const region_info = this.zuno.getRegion(); + if (region_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); + return (undefined); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + if (region != region_info.region) { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + status = yield this.zuno.setRegion(region); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION, status); + return (undefined); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + } + final = false; + for (;;) { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + const board_info = this.zuno.getBoardInfo(); + if (board_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK || board_info.node_id == undefined) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); + return (undefined); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + if (board_info.node_id != 0x0) { + if (final == true) { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_S2_KEY); + const dump_key = yield this.zuno.readS2Key(); + if (dump_key.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_S2_KEY, dump_key.status); + return; + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_S2_KEY); + const zuno_node_id_dump_key = { zuno_node_id: board_info.node_id, dump_key: dump_key }; + if (this._test_dump_key_all(dump_key) == true) + return (zuno_node_id_dump_key); + if ((yield this.quest_continue_stop(this.el_container, this._key_all_to_string_quest(zuno_node_id_dump_key.dump_key), ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT, ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT_TITLE)) == true) + return (zuno_node_id_dump_key); + yield this.quest_continue_stop(this.el_container, ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE, ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, undefined, undefined); + this._progress(ui_lang_define_1.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); + if ((yield this._click_start_stop_zuno_get_info_include_exlude()) == false) + return (undefined); + final = false; + continue; + } + yield this.quest_continue_stop(this.el_container, ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE, ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, undefined, undefined); + this._progress(ui_lang_define_1.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); + if ((yield this._click_start_stop_zuno_get_info_include_exlude()) == false) + return (undefined); + continue; + } + const dsk = (0, utilities_1.conv2Decimal)(board_info.s2_pub, " - "); + const quest_include = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE).replace("${dsk}", "" + dsk.substring(0x0, 0x5) + "" + dsk.substring(0x5)); + yield this.quest_continue_stop(this.el_container, quest_include, ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, undefined, undefined); + this._progress(ui_lang_define_1.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); + if ((yield this._click_start_stop_zuno_get_info_include_exlude()) == false) + return (undefined); + final = true; + } + return (undefined); + }); + } + _update_zuno_to_raz(paket) { + return __awaiter(this, void 0, void 0, function* () { + this._progress(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO); + yield update_3.UpdateUiSectionClass.downloadInfo(this.download_process, paket, this.log, this.locale); + const data_raz = this._update_raz_full_finware_url(paket.app.data, sapi_1.SapiClassDetectType.RAZBERRY); + if (data_raz == undefined) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE); + return (false); + } + if ((yield this._update_raz_full_dowload_and_update((data, process, target_type) => __awaiter(this, void 0, void 0, function* () { return (yield this._update_firmware_zuno(data, process, target_type)); }), data_raz, paket.app.version_name)) == false) { + return (false); + } + if (this.sapi.type() != sapi_1.SapiClassDetectType.RAZBERRY) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE); + return (false); + } + yield this.razberry.connect(); + const paket_new = this._update_raz_full_get_info_paket(); + if (paket_new == undefined) + return (false); + if (paket_new.app.version != data_raz.version) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); + return (false); + } + return (true); + }); + } + _remove_node(node_id) { + return __awaiter(this, void 0, void 0, function* () { + let status; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOP); + status = yield this.razberry.nop(node_id); + if (status != controller_sapi_1.ControllerSapiClassStatus.TRANSMIT_COMPLETE_NO_ACK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOP, status); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOP); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_REMOVE_NODE); + status = yield this.razberry.removeFaledNode(node_id); + if (status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_REMOVE_NODE, status); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_REMOVE_NODE); + return (true); + }); + } + _detection(type) { + return __awaiter(this, void 0, void 0, function* () { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION); + const detect_dict = yield this.sapi.detect([115200], null); + if (detect_dict.status != sapi_1.SapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); + return (false); + } + if (this.sapi.type() != type) { + this.log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION); + switch (type) { + case sapi_1.SapiClassDetectType.RAZBERRY: + yield this.razberry.connect(); + break; + case sapi_1.SapiClassDetectType.ZUNO: + yield this.zuno.connect(); + break; + } + return (true); + }); + } + _second_chance(type) { + return __awaiter(this, void 0, void 0, function* () { + if ((yield this.quest_continue_stop(this.el_container, ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP, ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT, ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT_TITLE, ui_lang_define_1.ControllerUiLangClassId.PROCESS_ABORT, ui_lang_define_1.ControllerUiLangClassId.PROCESS_ABORT_TITLE)) == false) + return (false); + this._progress(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_DETECTION); + if ((yield this._detection(type)) == false) + return (false); + return (true); + }); + } + _raz_region_inc_exl(home, region) { + return __awaiter(this, void 0, void 0, function* () { + let result_test_include; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + const region_set_status = yield this.razberry.setRegion(region); + if (region_set_status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION, region_set_status); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + for (;;) { + if ((yield this._click_start_stop_include_excluding(false)) == false) + return (false); + result_test_include = yield this._click_start_stop_test_include(home); + if (result_test_include == undefined) + return (false); + if (result_test_include == true) + break; + } + return (true); + }); + } + _raz_home_set(home) { + return __awaiter(this, void 0, void 0, function* () { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_HOME_ID); + const set_home_id = yield this.razberry.nvmWrite(this.NVM_HOMEID, (0, utilities_1.intToBytearrayMsbLsb)(home.home)); + if (set_home_id != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_HOME_ID, set_home_id); + return (false); + } + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SOFT_RESET); + const soft_reset = yield this.razberry.softReset(); + if (soft_reset != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SOFT_RESET, soft_reset); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SOFT_RESET); + return (true); + }); + } + _click_start_stop(event) { + return __awaiter(this, void 0, void 0, function* () { + let paket, result_test_include, zuno_node_id_dump_key; + if (this.process == true) + return; + const el_target = this.event_get_element_button(event); + if (el_target == null) + return; + if (this.is_busy() == true) + return; + const out_confirm = window.confirm(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING)); + if (out_confirm != true) + return; + yield this.clear(); + yield this.begin(); + this.el_button.disabled = true; + this.el_button.title = ''; + this.el_button.style.display = 'none'; + this.process = true; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + const region_info = yield this.razberry.getRegion(); + if (region_info.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); + return; + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + if (this.razberry.isLr(region_info.region) == true) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR); + return; + } + if (this.razberry.isLicenseSupportBackup() == false) { + this._progress_error(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP); + return; + } + paket = yield this._update_raz_full(); + if (paket == undefined) + return; + paket = yield this._update_raz_to_zuno(paket); + if (paket == undefined) + return; + for (;;) { + zuno_node_id_dump_key = yield this._click_start_stop_zuno_get_info(region_info.region); + if (zuno_node_id_dump_key != undefined) + break; + if ((yield this._second_chance(sapi_1.SapiClassDetectType.ZUNO)) == false) + return; + } + for (;;) { + if ((yield this._update_zuno_to_raz(paket)) == true) + break; + if ((yield this._second_chance(sapi_1.SapiClassDetectType.ZUNO)) == false) + return; + } + const home = { home: 0x0, node_id: 0x0 }; + for (;;) { + if ((yield this._raz_region_inc_exl(home, region_info.region)) == true) + break; + if ((yield this._second_chance(sapi_1.SapiClassDetectType.RAZBERRY)) == false) + return; + } + this._progress(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FINALIZE); + for (;;) { + if ((yield this._raz_home_set(home)) == true) + break; + if ((yield this._second_chance(sapi_1.SapiClassDetectType.RAZBERRY)) == false) + return; + this._progress(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FINALIZE); + } + for (;;) { + if ((yield this._remove_node(home.node_id)) == true) + break; + if ((yield this._second_chance(sapi_1.SapiClassDetectType.RAZBERRY)) == false) + return; + this._progress(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FINALIZE); + } + for (;;) { + if ((yield this._remove_node(zuno_node_id_dump_key.zuno_node_id)) == true) + break; + if ((yield this._second_chance(sapi_1.SapiClassDetectType.RAZBERRY)) == false) + return; + this._progress(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FINALIZE); + } + this.el_container.innerHTML = this._dump_key_all_to_string(zuno_node_id_dump_key.dump_key); + }); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + let about_str; + if (this.razberry.isRazberry5() == true) + about_str = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5); + else if (this.razberry.isRazberry7() == true) + about_str = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML); + else + about_str = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER, ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE, about_str, ""); + if (this.razberry.isRazberry7() != true) + return (true); + this.el_button.disabled = false; + this.el_button.style.display = ''; + this.el_button.addEventListener("click", (event) => __awaiter(this, void 0, void 0, function* () { yield this._click_start_stop(event); })); + this.el_button.type = "button"; + this.el_button.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START); + this.el_button.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER, ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE, this.el_container, this.el_button); + return (true); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + this.process = false; + this.download_process.xhr.abort(); + if (this.download_process.timer_id != undefined) { + window.clearTimeout(this.download_process.timer_id); + this.download_process.timer_id = undefined; + } + this.el_container.innerHTML = ""; + if (this.progress_timer_id != undefined) { + window.clearTimeout(this.progress_timer_id); + this.progress_timer_id = undefined; + } + }); + } + constructor(el_section, locale, razberry, log, clear, sapi, zuno) { + super(el_section, locale, razberry, log, ui_lang_define_1.ControllerUiLangClassId.MIGRATION_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.NVM_HOMEID = 0x8; + this.progress_timer_id_ms_period = 1000; + this.el_button = document.createElement("button"); + this.download_process = { xhr: new XMLHttpRequest() }; + this.process = false; + this.razberry = razberry; + this.sapi = sapi; + this.zuno = zuno; + this.clear = clear; + this.el_container = document.createElement("span"); + } +} +exports.ControllerUiSectionMigrationClass = ControllerUiSectionMigrationClass; + + +/***/ }), + +/***/ "./src/section/controller/update.ts": +/*!******************************************!*\ + !*** ./src/section/controller/update.ts ***! + \******************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiSectionUpdateClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const controller_sapi_1 = __webpack_require__(/*! ../../sapi/controller_sapi */ "./src/sapi/controller_sapi.ts"); +const common_1 = __webpack_require__(/*! ../common */ "./src/section/common.ts"); +const update_1 = __webpack_require__(/*! ../update */ "./src/section/update.ts"); +const utilities_1 = __webpack_require__(/*! ../../other/utilities */ "./src/other/utilities.ts"); +const sapi_1 = __webpack_require__(/*! ./../../sapi/sapi */ "./src/sapi/sapi.ts"); +const ui_define_1 = __webpack_require__(/*! ../../ui_define */ "./src/ui_define.ts"); +class ControllerUiSectionUpdateClass extends common_1.CommonUiSectionClass { + static getInfoUrlPaket(log, razberry) { + log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); + const board_info = razberry.getBoardInfo(); + if (board_info.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO, board_info.status); + return (undefined); + } + log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); + log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); + const capabilities_info = razberry.getCapabilities(); + if (capabilities_info.status != controller_sapi_1.ControllerSapiClassStatus.OK) { + log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES, capabilities_info.status); + return (undefined); + } + log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); + const version = (capabilities_info.ApiVersion << 0x8) | capabilities_info.ApiRevision; + const paket = { + app: { version: version, version_name: (0, utilities_1.versionNumberToString)(version), type: sapi_1.SapiClassDetectType.RAZBERRY, + update: true, update_type: true, data: [] }, + boot: { version: board_info.bootloader_version, version_name: (0, utilities_1.versionNumberToString)(board_info.bootloader_version), type: sapi_1.SapiClassDetectType.UNKNOWN, + update: true, update_type: true, data: [] }, + url: 'vendorId=' + capabilities_info.VendorID.toString() + '&appVersionMajor=' + capabilities_info.ApiVersion.toString() + '&appVersionMinor=' + capabilities_info.ApiRevision.toString() + + '&uuid=' + (0, utilities_1.arrayToStringHex)(board_info.chip_uuid) + "&bootloaderVersion=" + board_info.bootloader_version.toString() + + '&org_family=' + board_info.keys_hash.toString() + '&fw_family=' + sapi_1.SapiClassDetectType.RAZBERRY.toString() + '&chip_family=' + board_info.chip_family.toString() + + '&chip_id=' + board_info.chip_type.toString() + '&zway=' + ui_define_1.NAME_APP_VERSION_FULL + }; + return (paket); + } + _update_init() { + const paket = ControllerUiSectionUpdateClass.getInfoUrlPaket(this.log, this.razberry); + if (paket == undefined) + return (false); + this.update.info_download_xhr(paket); + return (true); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + if (this.razberry.isRazberry7() == false) + return (false); + return (this._update_init()); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + this.update.end(); + }); + } + _update_firmware(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + const status = yield this.razberry.updateFirmware(data, process, target_type); + return status; + }); + } + _update_bootloader(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + const status = yield this.razberry.updateBotloader(data, process); + return status; + }); + } + constructor(el_section, locale, razberry, log, re_begin_func) { + super(el_section, locale, razberry, log, ui_lang_define_1.ControllerUiLangClassId.UPDATE_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.razberry = razberry; + this.update = new update_1.UpdateUiSectionClass(log, locale, this, re_begin_func, (data, process, target_type) => __awaiter(this, void 0, void 0, function* () { return (yield this._update_firmware(data, process, target_type)); }), (data, process, target_type) => __awaiter(this, void 0, void 0, function* () { return (yield this._update_bootloader(data, process, target_type)); })); + } +} +exports.ControllerUiSectionUpdateClass = ControllerUiSectionUpdateClass; + + +/***/ }), + +/***/ "./src/section/detection.ts": +/*!**********************************!*\ + !*** ./src/section/detection.ts ***! + \**********************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DetectionUiSectionClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const sapi_1 = __webpack_require__(/*! ../sapi/sapi */ "./src/sapi/sapi.ts"); +const common_1 = __webpack_require__(/*! ./common */ "./src/section/common.ts"); +const ui_define_1 = __webpack_require__(/*! ../ui_define */ "./src/ui_define.ts"); +class DetectionUiSectionClass extends common_1.CommonUiSectionClass { + _get_detection_sync_manual() { + const detection_sync_manual = localStorage.getItem(ui_define_1.ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL); + if (detection_sync_manual === ui_define_1.ControllerUiDefineClass.STORAGE_VALUE_TRUE) + return (true); + return (false); + } + _detection_sync_manual(event) { + return __awaiter(this, void 0, void 0, function* () { + const el_target = this.event_get_element_input(event); + if (el_target == null) + return; + localStorage.setItem(ui_define_1.ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL, ((el_target.checked == true) ? ui_define_1.ControllerUiDefineClass.STORAGE_VALUE_TRUE : ui_define_1.ControllerUiDefineClass.STORAGE_VALUE_FALSE)); + }); + } + _get_baudrate_cache() { + let baudrate, i; + const baudrate_str = localStorage.getItem(ui_define_1.ControllerUiDefineClass.KEY_BAUDRATE); + if (baudrate_str == null) + return ([]); + try { + baudrate = JSON.parse(baudrate_str); + } + catch (error) { + return ([]); + } + if (Array.isArray(baudrate) == false) + return ([]); + i = 0x0; + while (i < baudrate.length) { + if (this.sapi.BAUDRATE.indexOf(baudrate[i]) == -1) + baudrate.splice(i, 0x1); + i++; + } + return (baudrate); + } + _set_baudrate_cache(baudrate_array, baudrate) { + const i = baudrate_array.indexOf(baudrate); + if (i != -1) + baudrate_array.splice(i, 0x1); + baudrate_array.unshift(baudrate); + localStorage.setItem(ui_define_1.ControllerUiDefineClass.KEY_BAUDRATE, JSON.stringify(baudrate_array)); + } + _click_start_stop_question() { + return __awaiter(this, void 0, void 0, function* () { + const promise = new Promise((resolve) => { + this.el_container.innerHTML = ''; + const el_span = document.createElement("span"); + el_span.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC); + el_span.className = "ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button"; + const el_button_continue = document.createElement("button"); + el_button_continue.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE); + el_button_continue.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE); + el_button_continue.type = "button"; + el_button_continue.className = "ZUnoRazberryModalContentSection_migration_action_button"; + const el_button_stop = document.createElement("button"); + el_button_stop.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_STOP); + el_button_stop.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE); + el_button_stop.type = "button"; + el_button_stop.className = "ZUnoRazberryModalContentSection_migration_action_button"; + el_button_stop.addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { resolve(false); })); + el_button_continue.addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { resolve(true); })); + this.el_container.appendChild(el_span); + this.el_container.appendChild(el_button_continue); + this.el_container.appendChild(el_button_stop); + }); + return (promise); + }); + } + _detection_process_sync() { + return __awaiter(this, void 0, void 0, function* () { + const excluding_question = yield this._click_start_stop_question(); + if (excluding_question == false) { + this._constructor_struct_end(); + return (false); + } + this._constructor_struct_progress(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS); + return (true); + }); + } + _constructor_struct_progress(text) { + this.el_container.innerHTML = '
' + this.locale.getLocale(text) + '
'; + } + _click_re_sync(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.is_busy() == true) + return; + this.re_begin_func(true); + }); + } + _constructor_struct_end() { + this.el_container.innerHTML = ''; + const el_button = document.createElement("button"); + el_button.addEventListener("click", (event) => __awaiter(this, void 0, void 0, function* () { yield this._click_re_sync(event); })); + el_button.type = "button"; + el_button.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC); + el_button.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE); + this.el_container.appendChild(el_button); + } + detection() { + return __awaiter(this, void 0, void 0, function* () { + let func; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION); + const baudrate_array = this._get_baudrate_cache(); + if (this._get_detection_sync_manual() == false) + func = null; + else + func = () => __awaiter(this, void 0, void 0, function* () { return (yield this._detection_process_sync()); }); + this._constructor_struct_progress(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS); + const detect_dict = yield this.sapi.detect(baudrate_array, func); + if (detect_dict.status != sapi_1.SapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); + this._constructor_struct_end(); + return (false); + } + this._constructor_struct_end(); + this._set_baudrate_cache(baudrate_array, detect_dict.baudrate); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION); + return (true); + }); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + const el_input = document.createElement("input"); + el_input.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE); + el_input.type = "checkbox"; + el_input.checked = this._get_detection_sync_manual(); + el_input.addEventListener("change", (event) => { this._detection_sync_manual(event); }); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE, el_input, ""); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_HEADER, ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE, this.el_container, ""); + return (true); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + this.el_container.innerHTML = ""; + }); + } + constructor(el_section, locale, sapi, log, re_begin_func) { + super(el_section, locale, sapi, log, ui_lang_define_1.ControllerUiLangClassId.DETECTION_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.el_container = document.createElement("span"); + this.sapi = sapi; + this.re_begin_func = re_begin_func; + } +} +exports.DetectionUiSectionClass = DetectionUiSectionClass; + + +/***/ }), + +/***/ "./src/section/slave/info.ts": +/*!***********************************!*\ + !*** ./src/section/slave/info.ts ***! + \***********************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SlaveUiSectionInfoClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const zuno_sapi_1 = __webpack_require__(/*! ../../sapi/zuno_sapi */ "./src/sapi/zuno_sapi.ts"); +const common_1 = __webpack_require__(/*! ../common */ "./src/section/common.ts"); +const utilities_1 = __webpack_require__(/*! ../../other/utilities */ "./src/other/utilities.ts"); +const qrcode_1 = __webpack_require__(/*! ./../../qr_code/qrcode */ "./src/qr_code/qrcode.js"); +const ui_define_1 = __webpack_require__(/*! ../../ui_define */ "./src/ui_define.ts"); +class SlaveUiSectionInfoClass extends common_1.CommonUiSectionClass { + _not_freeze(status, title) { + this.log.errorFalledCode(title, status); + if (status != zuno_sapi_1.ZunoSapiClassStatus.NO_FREEZE) + return; + this.log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR); + this.re_begin_func(true); + } + _board_info() { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + const board_info = this.zuno.getBoardInfo(); + if (board_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); + return (false); + } + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE, this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE), ""); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VERSION, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE, (0, utilities_1.versionNumberToStringSlave)(board_info.version), ""); + const build_data_time = new Date(board_info.build_ts * 1000); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE, build_data_time.toLocaleString(), ""); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UUID, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UUID_TITLE, (0, utilities_1.arrayToStringHex)(board_info.chip_uuid), ""); + if (board_info.home_id != undefined) + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_HOME, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_HOME_TITLE, (0, utilities_1.numberToStringHex)(board_info.home_id), ""); + if (board_info.node_id != undefined) + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_NODE, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_NODE_TITLE, board_info.node_id.toString(0xA), ""); + const dsk = (0, utilities_1.conv2Decimal)(board_info.s2_pub, " - "); + const event_copy = () => { + navigator.clipboard.writeText(dsk); + }; + const el_button = document.createElement("button"); + el_button.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_DSK); + el_button.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE); + el_button.addEventListener("click", event_copy); + el_button.type = "button"; + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DSK, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DSK_TITLE, "" + dsk.substring(0x0, 0x5) + "" + dsk.substring(0x5), el_button); + if (board_info.smart_qr != undefined) { + const el_span = document.createElement("span"); + const option = { + text: board_info.smart_qr, + width: 128, + height: 128, + colorDark: "#000000", + colorLight: "#ffffff", + correctLevel: 1 /* QRErrorCorrectLevel.L */, + }; + try { + new qrcode_1.QRCode(el_span, option); + } + catch (e) { + el_span.textContent = board_info.smart_qr; + } + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_QR_CODE, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE, el_span, ""); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + return (true); + } + _region_change(event) { + const el_target = this.event_get_element_select(event); + if (el_target == null) + return; + this.region_new = el_target.value; + this.common_button_atrr(this.region_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true : false); + } + _region_click() { + return __awaiter(this, void 0, void 0, function* () { + if (this.is_busy() == true) + return; + this.common_button_atrr(this.region_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, true); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + const status = yield this.zuno.setRegion(this.region_new); + if (status == zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + this.region_current = this.region_new; + return; + } + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION, status); + this.common_button_atrr(this.region_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, false); + this._not_freeze(status, ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + }); + } + _region_init() { + let i, el_option_str; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + const region_info = this.zuno.getRegion(); + if (region_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); + return (false); + } + this.region_current = region_info.region; + this.region_new = region_info.region; + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + i = 0x0; + el_option_str = ""; + while (i < region_info.region_array.length) { + if (region_info.region_array[i] == region_info.region) { + el_option_str = el_option_str + ''; + } + else { + el_option_str = el_option_str + ''; + } + i++; + } + const el_select = document.createElement("select"); + el_select.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE); + el_select.innerHTML = el_option_str; + el_select.addEventListener("change", (event) => { this._region_change(event); }); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_TITLE, el_select, this.region_el_button); + this.common_button_atrr(this.region_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true : false); + return (true); + } + _power_change(event) { + const el_target = this.event_get_element_input(event); + if (el_target == null) + return; + this.power_new = Number(el_target.value); + this.common_button_atrr(this.power_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true : false); + } + _power_click() { + return __awaiter(this, void 0, void 0, function* () { + if (this.is_busy() == true) + return; + this.common_button_atrr(this.power_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, true); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER); + const status = yield this.zuno.setPower(this.power_new); + if (status == zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER); + this.power_current = this.power_new; + return; + } + this.common_button_atrr(this.power_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, false); + this._not_freeze(status, ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER); + }); + } + _power_init() { + return __awaiter(this, void 0, void 0, function* () { + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER); + const power = this.zuno.getPower(); + if (power.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER, power.status); + return (false); + } + this.power_new = power.power_raw; + this.power_current = power.power_raw; + const el_value = document.createElement("span"); + const el_input = document.createElement("input"); + el_input.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE); + el_input.type = "number"; + el_input.min = power.min.toString(); + el_input.max = power.max.toString(); + el_input.step = power.step.toString(); + el_input.value = power.power_raw.toString(); + el_input.addEventListener("change", (event) => { this._power_change(event); }); + el_value.appendChild(el_input); + el_value.appendChild(document.createElement("span")); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_TITLE, el_value, this.power_el_button); + this.common_button_atrr(this.power_el_button, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true : false); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER); + return (true); + }); + } + _controller_default_click(event) { + return __awaiter(this, void 0, void 0, function* () { + if (this.is_busy() == true) + return; + const el_target = this.event_get_element_button(event); + if (el_target == null) + return; + const out = window.confirm(this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING)); + if (out != true) + return; + this.common_button_atrr(el_target, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, true); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT); + const status = yield this.zuno.setDefault(); + this.common_button_atrr(el_target, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, false); + if (status == zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT); + this.zuno.lock(); + yield (0, utilities_1.sleep)(1000); + this.zuno.unlock(); + this.re_begin_func(true); + return; + } + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status); + }); + } + _include_exclude_get_test_timout(info_timout) { + return (this.INCLUDE_EXCLUDE_DEFAULT); + let value; + if (info_timout == null) + return (this.INCLUDE_EXCLUDE_DEFAULT); + try { + value = Number(info_timout); + } + catch (error) { + return (this.INCLUDE_EXCLUDE_DEFAULT); + } + if (value < this.INCLUDE_EXCLUDE_MIN) + value = this.INCLUDE_EXCLUDE_MIN; + else if (value > this.INCLUDE_EXCLUDE_MAX) + value = this.INCLUDE_EXCLUDE_MAX; + return (value); + } + _include_exclude_get_storage() { + return (this._include_exclude_get_test_timout(localStorage.getItem(ui_define_1.ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT))); + } + _include_exclude_change(event) { + const el_target = this.event_get_element_input(event); + if (el_target == null) + return; + localStorage.setItem(ui_define_1.ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT, this._include_exclude_get_test_timout(el_target.value).toString()); + } + _include_exclude_progress(text) { + this.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) + '
'; + } + _include_exclude_message_info(text) { + this.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) + '
'; + } + _include_exclude_message_warning(text) { + this.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) + '
'; + } + _include_exclude_timout_show() { + this.el_container_include_exlude.innerHTML = ''; + // this.el_container_include_exlude.appendChild(this.el_timout_include_exlude); + } + _include_exclude_click_end(el_target, txt, status) { + if (txt != null) + this.log.errorFalledCode(txt, status); + this.common_button_atrr(el_target, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE, false); + this._include_exclude_timout_show(); + } + _include_exclude_click_start_stop_question() { + return __awaiter(this, void 0, void 0, function* () { + const promise = new Promise((resolve) => { + this.el_container_include_exlude.innerHTML = ''; + const el_span = document.createElement("span"); + el_span.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE); + el_span.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE); + el_span.className = "ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button"; + const el_button_continue = document.createElement("button"); + el_button_continue.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE); + el_button_continue.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE); + el_button_continue.type = "button"; + el_button_continue.className = "ZUnoRazberryModalContentSection_migration_action_button"; + const el_button_stop = document.createElement("button"); + el_button_stop.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.PROCESS_STOP); + el_button_stop.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.PROCESS_STOP_TITLE); + el_button_stop.type = "button"; + el_button_stop.className = "ZUnoRazberryModalContentSection_migration_action_button"; + el_button_stop.addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { resolve(false); })); + el_button_continue.addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { resolve(true); })); + this.el_container_include_exlude.appendChild(el_span); + this.el_container_include_exlude.appendChild(el_button_continue); + this.el_container_include_exlude.appendChild(el_button_stop); + }); + return (promise); + }); + } + _include_exclude_click(event) { + return __awaiter(this, void 0, void 0, function* () { + let status; + if (this.is_busy() == true) + return; + const el_target = this.event_get_element_button(event); + if (el_target == null) + return; + this.common_button_atrr(el_target, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE, true); + const excluding_question = yield this._include_exclude_click_start_stop_question(); + if (excluding_question == false) { + this._include_exclude_click_end(el_target, null, zuno_sapi_1.ZunoSapiClassStatus.OK); + return; + } + this._include_exclude_progress(ui_lang_define_1.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); + status = yield this.zuno.enableNif(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._include_exclude_click_end(el_target, ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT, status); + return; + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); + status = yield this.zuno.enableEvent(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._include_exclude_click_end(el_target, ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN, status); + return; + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_LEARN); + status = yield this.zuno.enableLearn(this._include_exclude_get_storage()); + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_LEARN); + switch (status) { + case zuno_sapi_1.ZunoSapiClassStatus.TIMEOUT: + this.log.info(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); + this._include_exclude_message_info(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); + yield (0, utilities_1.sleep)(3000); + break; + case zuno_sapi_1.ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART: + this.log.warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + this._include_exclude_message_warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + yield (0, utilities_1.sleep)(3000); + this.re_begin_func(true); + return; + break; + default: + this.log.warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + this._include_exclude_message_warning(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); + yield (0, utilities_1.sleep)(3000); + this.re_begin_func(true); + return; + break; + case zuno_sapi_1.ZunoSapiClassStatus.LEARN_EXCLUDE: + this.log.info(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART); + this._include_exclude_message_info(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART); + yield (0, utilities_1.sleep)(3000); + this.re_begin_func(false); + return; + break; + case zuno_sapi_1.ZunoSapiClassStatus.LEARN_INCLUDE: + this.log.info(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART); + this._include_exclude_message_info(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART); + yield (0, utilities_1.sleep)(3000); + this.re_begin_func(false); + return; + break; + } + this._include_exclude_click_end(el_target, null, zuno_sapi_1.ZunoSapiClassStatus.OK); + }); + } + _include_exclude_init() { + const status = this.zuno.isSupportIncludeExclude(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) + return (false); + const el_button = document.createElement("button"); + el_button.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE); + el_button.type = "button"; + el_button.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON); + el_button.addEventListener("click", (event) => { this._include_exclude_click(event); }); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE, this.el_container_include_exlude, el_button); + this._include_exclude_timout_show(); + return (true); + } + _controller_default_init() { + const status = this.zuno.isSupportResetDefault(); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) + return (false); + const el_button = document.createElement("button"); + el_button.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE); + el_button.type = "button"; + el_button.textContent = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON); + el_button.addEventListener("click", (event) => { this._controller_default_click(event); }); + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE, "", el_button); + return (true); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + let display; + display = false; + if (this._board_info() == true) + display = true; + if (this._region_init() == true) + display = true; + if ((yield this._power_init()) == true) + display = true; + if (this._include_exclude_init() == true) + display = true; + if (this._controller_default_init() == true) + display = true; + return (display); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + this.el_container_include_exlude.innerHTML = ""; + }); + } + _constructor_button(text, click) { + const el_button = document.createElement("button"); + el_button.textContent = this.locale.getLocale(text); + el_button.addEventListener("click", click); + el_button.type = "button"; + return (el_button); + } + constructor(el_section, locale, zuno, log, re_begin_func) { + super(el_section, locale, zuno, log, ui_lang_define_1.ControllerUiLangClassId.BOARD_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.INCLUDE_EXCLUDE_DEFAULT = 30; + this.INCLUDE_EXCLUDE_MIN = 5; + this.INCLUDE_EXCLUDE_MAX = 255; + this.region_current = ''; + this.region_new = ''; + this.power_current = 0x0; + this.power_new = 0x0; + this.el_container_include_exlude = document.createElement("span"); + this.el_timout_include_exlude = document.createElement("span"); + this.zuno = zuno; + this.re_begin_func = re_begin_func; + this.power_el_button = this._constructor_button(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON, () => { this._power_click(); }); + this.region_el_button = this._constructor_button(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON, () => { this._region_click(); }); + const el_input = document.createElement("input"); + el_input.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE); + el_input.type = "number"; + el_input.min = this.INCLUDE_EXCLUDE_MIN.toString(); + el_input.max = this.INCLUDE_EXCLUDE_MAX.toString(); + el_input.step = "1"; + el_input.value = this._include_exclude_get_storage().toString(); + el_input.addEventListener("change", (event) => { this._include_exclude_change(event); }); + this.el_timout_include_exlude.appendChild(el_input); + this.el_timout_include_exlude.appendChild(document.createElement("span")); + } +} +exports.SlaveUiSectionInfoClass = SlaveUiSectionInfoClass; + + +/***/ }), + +/***/ "./src/section/slave/license.ts": +/*!**************************************!*\ + !*** ./src/section/slave/license.ts ***! + \**************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SlaveUiSectionLicenseClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const zuno_sapi_1 = __webpack_require__(/*! ../../sapi/zuno_sapi */ "./src/sapi/zuno_sapi.ts"); +const common_1 = __webpack_require__(/*! ../common */ "./src/section/common.ts"); +const utilities_1 = __webpack_require__(/*! ../../other/utilities */ "./src/other/utilities.ts"); +const ui_define_1 = __webpack_require__(/*! ../../ui_define */ "./src/ui_define.ts"); +class SlaveUiSectionLicenseClass extends common_1.CommonUiSectionClass { + _license_init() { + let key, flag_status; + this.log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE); + const board_info = this.zuno.getBoardInfo(); + if (board_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this.log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE, board_info.status); + return (false); + } + if (board_info.license == undefined) { + this.log.errorUnsupport(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE); + return (false); + } + this.log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE); + const uuid_str_hex = (0, utilities_1.arrayToStringHex)(board_info.chip_uuid); + const more_options_link = '' + 'link' + ''; + this.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE, more_options_link, ""); + for (key in board_info.license.lic_flags) { + if (board_info.license.lic_flags[key].active == true) + flag_status = ui_define_1.TABLE_NAME_LICENSE_YES; + else + flag_status = ui_define_1.TABLE_NAME_LICENSE_NO; + this.create_tr_el(board_info.license.lic_flags[key].name + ":", board_info.license.lic_flags[key].title, flag_status, ""); + } + return (true); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + let display; + display = false; + if (this._license_init() == true) + display = true; + return (display); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + }); + } + constructor(el_section, locale, zuno, log, re_begin_func) { + super(el_section, locale, zuno, log, ui_lang_define_1.ControllerUiLangClassId.LICENSE_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.zuno = zuno; + this.re_begin_func = re_begin_func; + } +} +exports.SlaveUiSectionLicenseClass = SlaveUiSectionLicenseClass; + + +/***/ }), + +/***/ "./src/section/slave/update.ts": +/*!*************************************!*\ + !*** ./src/section/slave/update.ts ***! + \*************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SlaveUiSectionUpdateClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const zuno_sapi_1 = __webpack_require__(/*! ../../sapi/zuno_sapi */ "./src/sapi/zuno_sapi.ts"); +const common_1 = __webpack_require__(/*! ../common */ "./src/section/common.ts"); +const update_1 = __webpack_require__(/*! ../update */ "./src/section/update.ts"); +const utilities_1 = __webpack_require__(/*! ../../other/utilities */ "./src/other/utilities.ts"); +const ui_define_1 = __webpack_require__(/*! ../../ui_define */ "./src/ui_define.ts"); +const sapi_1 = __webpack_require__(/*! ./../../sapi/sapi */ "./src/sapi/sapi.ts"); +class SlaveUiSectionUpdateClass extends common_1.CommonUiSectionClass { + static getInfoUrlPaket(log, zuno) { + log.infoStart(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + const board_info = zuno.getBoardInfo(); + if (board_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + log.errorFalledCode(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); + return (undefined); + } + log.infoDone(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + const paket = { + app: { version: board_info.version, version_name: (0, utilities_1.versionNumberToStringSlave)(board_info.version), type: sapi_1.SapiClassDetectType.ZUNO, + update: true, update_type: (zuno.isSupportUpdateBootloader() == zuno_sapi_1.ZunoSapiClassStatus.OK) ? true : false, data: [] }, + boot: { version: board_info.boot_version, version_name: (0, utilities_1.versionNumberToString)(board_info.boot_version), type: sapi_1.SapiClassDetectType.UNKNOWN, + update: false, update_type: false, data: [] }, + url: 'vendorId=327&appVersionMajor=' + ((board_info.version >> 16) & 0xFFFF).toString() + '&appVersionMinor=' + (board_info.version & 0xFFFF).toString() + + "&bootloaderVersion=" + board_info.boot_version.toString() + '&org_family=' + board_info.chip.keys_hash.toString() + '&fw_family=' + sapi_1.SapiClassDetectType.ZUNO.toString() + + '&chip_family=' + board_info.chip.chip_family.toString() + '&chip_id=' + board_info.chip.chip_type.toString() + '&zway=' + ui_define_1.NAME_APP_VERSION_FULL + '&uuid=' + + (0, utilities_1.arrayToStringHex)(board_info.chip_uuid) + }; + return (paket); + } + _update_init() { + const paket = SlaveUiSectionUpdateClass.getInfoUrlPaket(this.log, this.zuno); + if (paket == undefined) + return (false); + this.update.info_download_xhr(paket); + return (true); + } + _begin() { + return __awaiter(this, void 0, void 0, function* () { + return (this._update_init()); + }); + } + _end() { + return __awaiter(this, void 0, void 0, function* () { + this.update.end(); + }); + } + _update_firmware(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + // if (this.zuno.isMustResetDefault() == ZunoSapiClassStatus.OK && this.zuno.isSupportResetDefault() == ZunoSapiClassStatus.OK) { + // this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); + // const status:ZunoSapiClassStatus = await this.zuno.setDefault(); + // if (status != ZunoSapiClassStatus.OK) { + // this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status); + // return ((status as unknown) as SapiClassStatus); + // } + // this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); + // await sleep(1000); + // this.log.infoStart(ControllerUiLangClassId.MESSAGE_DETECTION); + // const detect_dict:SapiClassDetect = await this.zuno.detect([115200], null); + // if (detect_dict.status != SapiClassStatus.OK) { + // this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); + // return ((detect_dict.status as unknown) as SapiClassStatus); + // } + // this.log.infoDone(ControllerUiLangClassId.MESSAGE_DETECTION); + // await this.zuno.connect(); + // } + const status = yield this.zuno.updateFirmware(data, process, target_type); + return status; + }); + } + constructor(el_section, locale, zuno, log, re_begin_func) { + super(el_section, locale, zuno, log, ui_lang_define_1.ControllerUiLangClassId.UPDATE_INFO_HEADER, () => __awaiter(this, void 0, void 0, function* () { return (yield this._begin()); }), () => __awaiter(this, void 0, void 0, function* () { return (yield this._end()); })); + this.zuno = zuno; + this.update = new update_1.UpdateUiSectionClass(log, locale, this, re_begin_func, (data, process, target_type) => __awaiter(this, void 0, void 0, function* () { return (yield this._update_firmware(data, process, target_type)); }), null); + } +} +exports.SlaveUiSectionUpdateClass = SlaveUiSectionUpdateClass; + + +/***/ }), + +/***/ "./src/section/update.ts": +/*!*******************************!*\ + !*** ./src/section/update.ts ***! + \*******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateUiSectionClass = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ../lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const common_1 = __webpack_require__(/*! ./common */ "./src/section/common.ts"); +const ui_define_1 = __webpack_require__(/*! ../ui_define */ "./src/ui_define.ts"); +const sapi_1 = __webpack_require__(/*! ./../sapi/sapi */ "./src/sapi/sapi.ts"); +const utilities_1 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +class UpdateUiSectionClass extends common_1.CommonUiSectionHtmlClass { + _update_change(event, title, info) { + const el_target = this.event_get_element_select(event); + if (el_target == null) + return; + info.url_new = el_target.value; + this.common_button_atrr(info.el_button, title, (info.url_new == info.url_current) ? true : false); + } + _progress(info, text) { + info.el_span.innerHTML = '
' + this.locale.getLocale(text) + '
'; + } + _end_struct(info) { + info.url_current = ""; + info.url_new = ""; + info.el_button.disabled = true; + this._progress(info, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO); + } + static updateProcess(txt, el, data, target_type, update_firmware, locale, log) { + return __awaiter(this, void 0, void 0, function* () { + log.infoStart(txt); + const el_progress = document.createElement('progress'); + const el_span = document.createElement('span'); + el_progress.setAttribute('max', '100'); + el.innerHTML = ''; + el.appendChild(el_progress); + el.appendChild(el_span); + el_progress.setAttribute('value', "00"); + const status = yield update_firmware(data, (percentage) => { + el_progress.setAttribute('value', percentage.toFixed().toString()); + el_span.textContent = ' ' + percentage.toFixed(0x2).padStart(5, '0') + '%'; + if (percentage >= 100.00) { + el.innerHTML = '
' + locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE) + '
'; + } + }, target_type); + el.innerHTML = ''; + if (status != sapi_1.SapiClassStatus.OK) { + log.errorFalledCode(txt, status); + return (false); + } + log.infoDone(txt); + return (true); + }); + } + static downloadFile(file_process, url, log) { + return __awaiter(this, void 0, void 0, function* () { + const promise = new Promise((resolve) => { + log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); + url = UpdateUiSectionClass.URL_UPDATE + url; + const fun_xhr_timer = () => { + file_process.timer_id = undefined; + file_process.xhr.open("POST", url, true); + file_process.xhr.responseType = "arraybuffer"; + file_process.xhr.timeout = UpdateUiSectionClass.firmware_xhr_timout; + file_process.xhr.ontimeout = () => { + log.errorXhrTimeout(url); + log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); + file_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.firmware_xhr_timer_timout); + }; + file_process.xhr.onerror = () => { + log.errorXhrError(url); + log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); + file_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.firmware_xhr_timer_timout); + }; + file_process.xhr.onload = () => { + log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); + const gbl = new Uint8Array(file_process.xhr.response); + resolve(gbl); + }; + file_process.xhr.send(); + }; + file_process.timer_id = window.setTimeout(fun_xhr_timer, 0x0); + }); + return (promise); + }); + } + _download_xhr_start(paket, update_firmware, txt) { + return __awaiter(this, void 0, void 0, function* () { + let i, type; + if (update_firmware == null) + return; + const info = paket.info; + if (info == undefined) { + this.log.error(ui_lang_define_1.ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT); + return; + } + i = 0x0; + while (i < info.data.length) { + if (paket.url_new == info.data[i].url) { + type = info.data[i].type; + break; + } + i++; + } + if (type == undefined) { + this.log.error(ui_lang_define_1.ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE); + return; + } + this._progress(paket, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE); + this.common_button_atrr(paket.el_button, '', true); + const gbl = yield UpdateUiSectionClass.downloadFile(this.download_process, paket.url_new, this.log); + const fun_bus_timer = () => __awaiter(this, void 0, void 0, function* () { + this.download_process.timer_id = undefined; + if (this.commom_ui.is_busy() == true) { + this.download_process.timer_id = window.setTimeout(fun_bus_timer, this.bus_timout); + return; + } + if (type != undefined) + yield UpdateUiSectionClass.updateProcess(txt, paket.el_span, gbl, type, update_firmware, this.locale, this.log); + this.re_begin_func(true); + return; + }); + this._progress(paket, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL); + this.download_process.timer_id = window.setTimeout(fun_bus_timer, 0x0); + }); + } + _constructor_struct(button_text, click, change) { + const el_span = document.createElement("span"); + const el_button = document.createElement("button"); + el_button.textContent = this.locale.getLocale(button_text); + el_button.addEventListener("click", click); + el_button.type = "button"; + const el_select = document.createElement("select"); + el_select.addEventListener("change", change); + const info = { url_current: '', url_new: '', el_span: el_span, el_button: el_button, el_select: el_select }; + return (info); + } + _init_select(paket, title) { + let i, el_option_str; + const info = paket.info; + if (info == undefined) { + this.log.error(ui_lang_define_1.ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT); + return; + } + paket.el_span.innerHTML = ""; + paket.el_span.appendChild(paket.el_select); + i = 0x0; + el_option_str = ''; + while (i < info.data.length) { + el_option_str = el_option_str + ''; + i++; + } + paket.el_select.innerHTML = el_option_str; + this.common_button_atrr(paket.el_button, '', true); + if (info.data.length != 0x0) { + paket.el_select.title = this.locale.getLocale(title); + return; + } + paket.el_select.innerHTML = el_option_str; + paket.el_select.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE); + paket.el_select.disabled = true; + } + _update_beta_change_all_select(beta, el_select, title) { + let number; + const list_option = el_select.querySelectorAll('option'); + number = 0x0; + list_option.forEach((item) => { + if (item.getAttribute('selected') != null) { + item.removeAttribute("selected"); + } + if (beta == false && item.getAttribute(this.SELECTOR_BETA) != null) + return; + if (item.getAttribute(this.SELECTOR_DEFAULT) != null) { + item.setAttribute("selected", ""); + } + number++; + }); + if (beta == false) + el_select.setAttribute(this.SELECTOR_BETA, ""); + else + el_select.removeAttribute(this.SELECTOR_BETA); + if (number > 0x1) { + el_select.title = this.locale.getLocale(title); + el_select.removeAttribute("disabled"); + return; + } + el_select.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE); + el_select.setAttribute("disabled", ""); + } + _update_beta_change_all() { + let beta; + const update_beta = localStorage.getItem(ui_define_1.ControllerUiDefineClass.KEY_UPDATE_BETA); + if (update_beta === ui_define_1.ControllerUiDefineClass.STORAGE_VALUE_TRUE) + beta = true; + else + beta = false; + this._update_beta_change_all_select(beta, this.firmware.el_select, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE); + this.firmware.url_new = ""; + this.common_button_atrr(this.firmware.el_button, '', true); + this._update_beta_change_all_select(beta, this.bootloader.el_select, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE); + this.bootloader.url_new = ""; + this.common_button_atrr(this.bootloader.el_button, '', true); + } + _update_beta_change(event) { + const el_target = this.event_get_element_input(event); + if (el_target == null) + return; + localStorage.setItem(ui_define_1.ControllerUiDefineClass.KEY_UPDATE_BETA, ((el_target.checked == true) ? ui_define_1.ControllerUiDefineClass.STORAGE_VALUE_TRUE : ui_define_1.ControllerUiDefineClass.STORAGE_VALUE_FALSE)); + this._update_beta_change_all(); + } + end() { + this._end_struct(this.firmware); + this._end_struct(this.bootloader); + this.download_process.xhr.abort(); + if (this.download_process.timer_id != undefined) { + window.clearTimeout(this.download_process.timer_id); + this.download_process.timer_id = undefined; + } + } + init_select_firmware() { + this._init_select(this.firmware, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE); + } + init_select_bootloader() { + this._init_select(this.bootloader, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE); + } + static _downloadInfo_process(response, app, boot, locale) { + let i, version, version_name, temp_data; + i = 0x0; + const add_data = []; + while (i < response.data.length) { + const target_fw_family = Number(response.data[i].target_fw_family); + switch (response.data[i].type) { + case UpdateUiSectionClass.JSON_UPDATE_TYPE_FIRMWARE: + if (app.update == false) { + i++; + continue; + } + if (app.update_type == false && app.type != target_fw_family) { + i++; + continue; + } + switch (target_fw_family) { + case sapi_1.SapiClassDetectType.ZUNO: + version = (Number(response.data[i].targetAppVersionMajor) << 0x10) | Number(response.data[i].targetAppVersionMinor); + if (app.type == sapi_1.SapiClassDetectType.ZUNO && version <= app.version) { + i++; + continue; + } + version_name = (0, utilities_1.versionNumberToStringSlave)(version) + " - " + locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE); + temp_data = { version: version, version_name: version_name, url: response.data[i].fileURL, type: sapi_1.SapiClassDetectType.ZUNO, beta: ((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true : false)) }; + if (app.type == sapi_1.SapiClassDetectType.ZUNO) + app.data.push(temp_data); + else + add_data.push(temp_data); + break; + case sapi_1.SapiClassDetectType.RAZBERRY: + version = (Number(response.data[i].targetAppVersionMajor) << 0x8) | Number(response.data[i].targetAppVersionMinor); + if (app.type == sapi_1.SapiClassDetectType.RAZBERRY && version <= app.version) { + i++; + continue; + } + version_name = (0, utilities_1.versionNumberToString)(version) + " - " + locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER); + temp_data = { version: version, version_name: version_name, url: response.data[i].fileURL, type: sapi_1.SapiClassDetectType.RAZBERRY, beta: ((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true : false)) }; + if (app.type == sapi_1.SapiClassDetectType.RAZBERRY) + app.data.push(temp_data); + else + add_data.push(temp_data); + break; + } + break; + case UpdateUiSectionClass.JSON_UPDATE_TYPE_BOOTLOADER: + if (boot.update == false) { + i++; + continue; + } + version = Number(response.data[i].targetBootloaderVersion); + if (version <= boot.version) { + i++; + continue; + } + version_name = (0, utilities_1.versionNumberToString)(version); + temp_data = { version: version, version_name: version_name, url: response.data[i].fileURL, type: sapi_1.SapiClassDetectType.UNKNOWN, beta: ((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true : false)) }; + boot.data.push(temp_data); + break; + } + i++; + } + boot.data.sort(function (a, b) { + return (a.version - b.version); + }); + app.data.sort(function (a, b) { + return (a.version - b.version); + }); + add_data.sort(function (a, b) { + return (a.version - b.version); + }); + i = 0x0; + while (i < add_data.length) { + app.data.push(add_data[i]); + i++; + } + } + static downloadInfo(info_process, in_paket, log, locale) { + return __awaiter(this, void 0, void 0, function* () { + const promise = new Promise((resolve) => { + const url = UpdateUiSectionClass.URL_UPDATE_LIST + in_paket.url + '&token=internal'; //'&token=internal' '&token=all'; + const fun_xhr_timer = () => { + info_process.timer_id = undefined; + log.infoStart(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); + info_process.xhr.open("POST", url, true); + info_process.xhr.responseType = 'json'; + info_process.xhr.timeout = UpdateUiSectionClass.info_xhr_timeout; + info_process.xhr.ontimeout = () => { + log.errorXhrTimeout(url); + log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); + info_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout); + }; + info_process.xhr.onerror = () => { + log.errorXhrError(url); + log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); + info_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout); + }; + info_process.xhr.onload = () => { + try { + UpdateUiSectionClass._downloadInfo_process(info_process.xhr.response, in_paket.app, in_paket.boot, locale); + } + catch (error) { + log.errorXhrInvalidData(url); + log.errorFalled(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); + info_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout); + return; + } + log.infoDone(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); + resolve(); + }; + info_process.xhr.send(); + }; + info_process.timer_id = window.setTimeout(fun_xhr_timer, 0x0); + }); + return (promise); + }); + } + info_download_xhr(in_paket) { + return __awaiter(this, void 0, void 0, function* () { + this.firmware.info = in_paket.app; + this.bootloader.info = in_paket.boot; + const update_beta = localStorage.getItem(ui_define_1.ControllerUiDefineClass.KEY_UPDATE_BETA); + const el_input = document.createElement("input"); + el_input.title = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE); + el_input.type = "checkbox"; + if (update_beta === ui_define_1.ControllerUiDefineClass.STORAGE_VALUE_TRUE) + el_input.checked = true; + el_input.addEventListener("change", (event) => { this._update_beta_change(event); }); + this.commom_ui.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE, el_input, ""); + this.commom_ui.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE, this.firmware.el_span, this.firmware.el_button); + this.commom_ui.create_tr_el(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE, this.bootloader.el_span, this.bootloader.el_button); + yield UpdateUiSectionClass.downloadInfo(this.download_process, in_paket, this.log, this.locale); + this.init_select_firmware(); + this.init_select_bootloader(); + this._update_beta_change_all(); + }); + } + constructor(log, locale, commom_ui, re_begin_func, update_firmware, update_bootloader) { + super(locale); + this.SELECTOR_BETA = 'data-beta'; + this.SELECTOR_DEFAULT = 'data-default'; + this.bus_timout = 3000; + this.download_process = { xhr: new XMLHttpRequest() }; + this.log = log; + this.commom_ui = commom_ui; + this.re_begin_func = re_begin_func; + this.firmware = this._constructor_struct(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON, () => { this._download_xhr_start(this.firmware, update_firmware, ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE); }, (event) => { this._update_change(event, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE, this.firmware); }); + this.bootloader = this._constructor_struct(ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON, () => { this._download_xhr_start(this.bootloader, update_bootloader, ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER); }, (event) => { this._update_change(event, ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE, this.bootloader); }); + } +} +exports.UpdateUiSectionClass = UpdateUiSectionClass; +UpdateUiSectionClass.URL_UPDATE = "https://service.z-wave.me/expertui/uzb/"; +UpdateUiSectionClass.URL_UPDATE_LIST = UpdateUiSectionClass.URL_UPDATE + "?"; +UpdateUiSectionClass.JSON_UPDATE_DISABLED = "disabled"; +UpdateUiSectionClass.JSON_UPDATE_TYPE_FIRMWARE = "firmware"; +UpdateUiSectionClass.JSON_UPDATE_TYPE_BOOTLOADER = "bootloader"; +UpdateUiSectionClass.info_xhr_timeout = 5000; +UpdateUiSectionClass.info_xhr_timer_timeout = 3000; +UpdateUiSectionClass.firmware_xhr_timout = 10000; +UpdateUiSectionClass.firmware_xhr_timer_timout = 3000; + + +/***/ }), + +/***/ "./src/ui_define.ts": +/*!**************************!*\ + !*** ./src/ui_define.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.NAME_APP_VERSION_FULL = exports.TABLE_NAME_LICENSE_NO = exports.TABLE_NAME_LICENSE_YES = exports.ControllerUiDefineClass = void 0; +const define_1 = __webpack_require__(/*! ./other/define */ "./src/other/define.ts"); +const TABLE_NAME_LICENSE_YES = ''; +exports.TABLE_NAME_LICENSE_YES = TABLE_NAME_LICENSE_YES; +const TABLE_NAME_LICENSE_NO = ''; +exports.TABLE_NAME_LICENSE_NO = TABLE_NAME_LICENSE_NO; +var ControllerUiDefineClass; +(function (ControllerUiDefineClass) { + ControllerUiDefineClass["NAME_APP"] = "SerialAPIWebTools"; + ControllerUiDefineClass["KEY_INCLUDE_EXCLUDE_TIMEOUT"] = "SerialAPIWebTools_info_include_exlude_timout"; + ControllerUiDefineClass["KEY_BAUDRATE"] = "SerialAPIWebTools_baudrate_cache"; + ControllerUiDefineClass["KEY_DETECTION_SYNC_MANUAL"] = "SerialAPIWebTools_detection_sync_manual"; + ControllerUiDefineClass["KEY_UPDATE_BETA"] = "SerialAPIWebTools_update_beta"; + ControllerUiDefineClass["STORAGE_VALUE_TRUE"] = "true"; + ControllerUiDefineClass["STORAGE_VALUE_FALSE"] = "false"; +})(ControllerUiDefineClass || (exports.ControllerUiDefineClass = ControllerUiDefineClass = {})); +const NAME_APP_VERSION_FULL = ControllerUiDefineClass.NAME_APP + " " + define_1.WEB_TOOLS_VERSION; +exports.NAME_APP_VERSION_FULL = NAME_APP_VERSION_FULL; + + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/index.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +Object.defineProperty(exports, "NIL", ({ + enumerable: true, + get: function get() { + return _nil.default; + } +})); +Object.defineProperty(exports, "parse", ({ + enumerable: true, + get: function get() { + return _parse.default; + } +})); +Object.defineProperty(exports, "stringify", ({ + enumerable: true, + get: function get() { + return _stringify.default; + } +})); +Object.defineProperty(exports, "v1", ({ + enumerable: true, + get: function get() { + return _v.default; + } +})); +Object.defineProperty(exports, "v3", ({ + enumerable: true, + get: function get() { + return _v2.default; + } +})); +Object.defineProperty(exports, "v4", ({ + enumerable: true, + get: function get() { + return _v3.default; + } +})); +Object.defineProperty(exports, "v5", ({ + enumerable: true, + get: function get() { + return _v4.default; + } +})); +Object.defineProperty(exports, "validate", ({ + enumerable: true, + get: function get() { + return _validate.default; + } +})); +Object.defineProperty(exports, "version", ({ + enumerable: true, + get: function get() { + return _version.default; + } +})); + +var _v = _interopRequireDefault(__webpack_require__(/*! ./v1.js */ "./node_modules/uuid/dist/commonjs-browser/v1.js")); + +var _v2 = _interopRequireDefault(__webpack_require__(/*! ./v3.js */ "./node_modules/uuid/dist/commonjs-browser/v3.js")); + +var _v3 = _interopRequireDefault(__webpack_require__(/*! ./v4.js */ "./node_modules/uuid/dist/commonjs-browser/v4.js")); + +var _v4 = _interopRequireDefault(__webpack_require__(/*! ./v5.js */ "./node_modules/uuid/dist/commonjs-browser/v5.js")); + +var _nil = _interopRequireDefault(__webpack_require__(/*! ./nil.js */ "./node_modules/uuid/dist/commonjs-browser/nil.js")); + +var _version = _interopRequireDefault(__webpack_require__(/*! ./version.js */ "./node_modules/uuid/dist/commonjs-browser/version.js")); + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +var _stringify = _interopRequireDefault(__webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js")); + +var _parse = _interopRequireDefault(__webpack_require__(/*! ./parse.js */ "./node_modules/uuid/dist/commonjs-browser/parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/md5.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/md5.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +var _default = md5; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/native.js": +/*!***********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/native.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); +var _default = { + randomUUID +}; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/nil.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/nil.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _default = '00000000-0000-0000-0000-000000000000'; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/parse.js": +/*!**********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/parse.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function parse(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +var _default = parse; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/regex.js": +/*!**********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/regex.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/rng.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/rng.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = rng; +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); + +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/sha1.js": +/*!*********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/sha1.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + + M[i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +var _default = sha1; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/stringify.js": +/*!**************************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/stringify.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +exports.unsafeStringify = unsafeStringify; + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0, _validate.default)(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +var _default = stringify; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v1.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v1.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _rng = _interopRequireDefault(__webpack_require__(/*! ./rng.js */ "./node_modules/uuid/dist/commonjs-browser/rng.js")); + +var _stringify = __webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || _rng.default)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || (0, _stringify.unsafeStringify)(b); +} + +var _default = v1; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v3.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v3.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _v = _interopRequireDefault(__webpack_require__(/*! ./v35.js */ "./node_modules/uuid/dist/commonjs-browser/v35.js")); + +var _md = _interopRequireDefault(__webpack_require__(/*! ./md5.js */ "./node_modules/uuid/dist/commonjs-browser/md5.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v3 = (0, _v.default)('v3', 0x30, _md.default); +var _default = v3; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v35.js": +/*!********************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v35.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.URL = exports.DNS = void 0; +exports["default"] = v35; + +var _stringify = __webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js"); + +var _parse = _interopRequireDefault(__webpack_require__(/*! ./parse.js */ "./node_modules/uuid/dist/commonjs-browser/parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +exports.DNS = DNS; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +exports.URL = URL; + +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = (0, _parse.default)(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v4.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v4.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _native = _interopRequireDefault(__webpack_require__(/*! ./native.js */ "./node_modules/uuid/dist/commonjs-browser/native.js")); + +var _rng = _interopRequireDefault(__webpack_require__(/*! ./rng.js */ "./node_modules/uuid/dist/commonjs-browser/rng.js")); + +var _stringify = __webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/commonjs-browser/stringify.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function v4(options, buf, offset) { + if (_native.default.randomUUID && !buf && !options) { + return _native.default.randomUUID(); + } + + options = options || {}; + + const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return (0, _stringify.unsafeStringify)(rnds); +} + +var _default = v4; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/v5.js": +/*!*******************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/v5.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _v = _interopRequireDefault(__webpack_require__(/*! ./v35.js */ "./node_modules/uuid/dist/commonjs-browser/v35.js")); + +var _sha = _interopRequireDefault(__webpack_require__(/*! ./sha1.js */ "./node_modules/uuid/dist/commonjs-browser/sha1.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v5 = (0, _v.default)('v5', 0x50, _sha.default); +var _default = v5; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/validate.js": +/*!*************************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/validate.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _regex = _interopRequireDefault(__webpack_require__(/*! ./regex.js */ "./node_modules/uuid/dist/commonjs-browser/regex.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function validate(uuid) { + return typeof uuid === 'string' && _regex.default.test(uuid); +} + +var _default = validate; +exports["default"] = _default; + +/***/ }), + +/***/ "./node_modules/uuid/dist/commonjs-browser/version.js": +/*!************************************************************!*\ + !*** ./node_modules/uuid/dist/commonjs-browser/version.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; + +var _validate = _interopRequireDefault(__webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/commonjs-browser/validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function version(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.slice(14, 15), 16); +} + +var _default = version; +exports["default"] = _default; + +/***/ }), + +/***/ "./src/qr_code/qrcode.js": +/*!*******************************!*\ + !*** ./src/qr_code/qrcode.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ QRCode: () => (/* binding */ QRCode) +/* harmony export */ }); +/** + * @fileoverview + * - Using the 'QRCode for Javascript library' + * - Fixed dataset of 'QRCode for Javascript library' for support full-spec. + * - this library has no dependencies. + * + * @author davidshimjs + * @see http://www.d-project.com/ + * @see http://jeromeetienne.github.com/jquery-qrcode/ + */ + +var QRCode; + +(function () { + //--------------------------------------------------------------------- + // QRCode for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word "QR Code" is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + this.parsedData = []; + + // Added to support UTF-8 Characters + for (var i = 0, l = this.data.length; i < l; i++) { + var byteArray = []; + var code = this.data.charCodeAt(i); + + if (code > 0x10000) { + byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); + byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); + byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[3] = 0x80 | (code & 0x3F); + } else if (code > 0x800) { + byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); + byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[2] = 0x80 | (code & 0x3F); + } else if (code > 0x80) { + byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); + byteArray[1] = 0x80 | (code & 0x3F); + } else { + byteArray[0] = code; + } + + this.parsedData.push(byteArray); + } + + this.parsedData = Array.prototype.concat.apply([], this.parsedData); + + if (this.parsedData.length != this.data.length) { + this.parsedData.unshift(191); + this.parsedData.unshift(187); + this.parsedData.unshift(239); + } + } + + QR8bitByte.prototype = { + getLength: function (buffer) { + return this.parsedData.length; + }, + write: function (buffer) { + for (var i = 0, l = this.parsedData.length; i < l; i++) { + buffer.put(this.parsedData[i], 8); + } + } + }; + + function QRCodeModel(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = []; + } + + QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);} + return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);} + if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);} + this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}} + return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;} + for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}} + for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}} + this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);} + var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;} + this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}} + row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error("code length overflow. (" + +buffer.getLengthInBits() + +">" + +totalDataCount*8 + +")");} + if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);} + while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);} + while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;} + buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;} + buffer.put(QRCodeModel.PAD1,8);} + return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}} + var totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));} + return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));} + return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;} + return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}} + for(var row=0;row=256){n-=255;} + return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);} + if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));} + this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]]; + + function _isSupportCanvas() { + return typeof CanvasRenderingContext2D != "undefined"; + } + + // android 2.x doesn't support Data-URI spec + function _getAndroid() { + var android = false; + var sAgent = navigator.userAgent; + + if (/android/i.test(sAgent)) { // android + android = true; + var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i); + + if (aMat && aMat[1]) { + android = parseFloat(aMat[1]); + } + } + + return android; + } + + var svgDrawer = (function() { + + var Drawing = function (el, htOption) { + this._el = el; + this._htOption = htOption; + }; + + Drawing.prototype.draw = function (oQRCode) { + var _htOption = this._htOption; + var _el = this._el; + var nCount = oQRCode.getModuleCount(); + var nWidth = Math.floor(_htOption.width / nCount); + var nHeight = Math.floor(_htOption.height / nCount); + + this.clear(); + + function makeSVG(tag, attrs) { + var el = document.createElementNS('http://www.w3.org/2000/svg', tag); + for (var k in attrs) + if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]); + return el; + } + + var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight}); + svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + _el.appendChild(svg); + + svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"})); + svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"})); + + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + if (oQRCode.isDark(row, col)) { + var child = makeSVG("use", {"x": String(row), "y": String(col)}); + child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template") + svg.appendChild(child); + } + } + } + }; + Drawing.prototype.clear = function () { + while (this._el.hasChildNodes()) + this._el.removeChild(this._el.lastChild); + }; + return Drawing; + })(); + + var useSVG = document.documentElement.tagName.toLowerCase() === "svg"; + + // Drawing in DOM by using Table tag + var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () { + var Drawing = function (el, htOption) { + this._el = el; + this._htOption = htOption; + }; + + /** + * Draw the QRCode + * + * @param {QRCode} oQRCode + */ + Drawing.prototype.draw = function (oQRCode) { + var _htOption = this._htOption; + var _el = this._el; + var nCount = oQRCode.getModuleCount(); + var nWidth = Math.floor(_htOption.width / nCount); + var nHeight = Math.floor(_htOption.height / nCount); + var aHTML = ['']; + + for (var row = 0; row < nCount; row++) { + aHTML.push(''); + + for (var col = 0; col < nCount; col++) { + aHTML.push(''); + } + + aHTML.push(''); + } + + aHTML.push('
'); + _el.innerHTML = aHTML.join(''); + + // Fix the margin values as real size. + var elTable = _el.childNodes[0]; + var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2; + var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2; + + if (nLeftMarginTable > 0 && nTopMarginTable > 0) { + elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px"; + } + }; + + /** + * Clear the QRCode + */ + Drawing.prototype.clear = function () { + this._el.innerHTML = ''; + }; + + return Drawing; + })() : (function () { // Drawing in Canvas + function _onMakeImage() { + this._elImage.src = this._elCanvas.toDataURL("image/png"); + this._elImage.style.display = "block"; + this._elCanvas.style.display = "none"; + } + + // Android 2.1 bug workaround + // http://code.google.com/p/android/issues/detail?id=5141 + if (this != undefined && this._android && this._android <= 2.1) { + var factor = 1 / window.devicePixelRatio; + var drawImage = CanvasRenderingContext2D.prototype.drawImage; + CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) { + if (("nodeName" in image) && /img/i.test(image.nodeName)) { + for (var i = arguments.length - 1; i >= 1; i--) { + arguments[i] = arguments[i] * factor; + } + } else if (typeof dw == "undefined") { + arguments[1] *= factor; + arguments[2] *= factor; + arguments[3] *= factor; + arguments[4] *= factor; + } + + drawImage.apply(this, arguments); + }; + } + + /** + * Check whether the user's browser supports Data URI or not + * + * @private + * @param {Function} fSuccess Occurs if it supports Data URI + * @param {Function} fFail Occurs if it doesn't support Data URI + */ + function _safeSetDataURI(fSuccess, fFail) { + var self = this; + self._fFail = fFail; + self._fSuccess = fSuccess; + + // Check it just once + if (self._bSupportDataURI === null) { + var el = document.createElement("img"); + var fOnError = function() { + self._bSupportDataURI = false; + + if (self._fFail) { + self._fFail.call(self); + } + }; + var fOnSuccess = function() { + self._bSupportDataURI = true; + + if (self._fSuccess) { + self._fSuccess.call(self); + } + }; + + el.onabort = fOnError; + el.onerror = fOnError; + el.onload = fOnSuccess; + el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data. + return; + } else if (self._bSupportDataURI === true && self._fSuccess) { + self._fSuccess.call(self); + } else if (self._bSupportDataURI === false && self._fFail) { + self._fFail.call(self); + } + }; + + /** + * Drawing QRCode by using canvas + * + * @constructor + * @param {HTMLElement} el + * @param {Object} htOption QRCode Options + */ + var Drawing = function (el, htOption) { + this._bIsPainted = false; + this._android = _getAndroid(); + + this._htOption = htOption; + this._elCanvas = document.createElement("canvas"); + this._elCanvas.width = htOption.width; + this._elCanvas.height = htOption.height; + el.appendChild(this._elCanvas); + this._el = el; + this._oContext = this._elCanvas.getContext("2d"); + this._bIsPainted = false; + this._elImage = document.createElement("img"); + this._elImage.alt = "Scan me!"; + this._elImage.style.display = "none"; + this._el.appendChild(this._elImage); + this._bSupportDataURI = null; + }; + + /** + * Draw the QRCode + * + * @param {QRCode} oQRCode + */ + Drawing.prototype.draw = function (oQRCode) { + var _elImage = this._elImage; + var _oContext = this._oContext; + var _htOption = this._htOption; + + var nCount = oQRCode.getModuleCount(); + var nWidth = _htOption.width / nCount; + var nHeight = _htOption.height / nCount; + var nRoundedWidth = Math.round(nWidth); + var nRoundedHeight = Math.round(nHeight); + + _elImage.style.display = "none"; + this.clear(); + + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + var bIsDark = oQRCode.isDark(row, col); + var nLeft = col * nWidth; + var nTop = row * nHeight; + _oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; + _oContext.lineWidth = 1; + _oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; + _oContext.fillRect(nLeft, nTop, nWidth, nHeight); + + // 안티 앨리어싱 방지 처리 + _oContext.strokeRect( + Math.floor(nLeft) + 0.5, + Math.floor(nTop) + 0.5, + nRoundedWidth, + nRoundedHeight + ); + + _oContext.strokeRect( + Math.ceil(nLeft) - 0.5, + Math.ceil(nTop) - 0.5, + nRoundedWidth, + nRoundedHeight + ); + } + } + + this._bIsPainted = true; + }; + + /** + * Make the image from Canvas if the browser supports Data URI. + */ + Drawing.prototype.makeImage = function () { + if (this._bIsPainted) { + _safeSetDataURI.call(this, _onMakeImage); + } + }; + + /** + * Return whether the QRCode is painted or not + * + * @return {Boolean} + */ + Drawing.prototype.isPainted = function () { + return this._bIsPainted; + }; + + /** + * Clear the QRCode + */ + Drawing.prototype.clear = function () { + this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height); + this._bIsPainted = false; + }; + + /** + * @private + * @param {Number} nNumber + */ + Drawing.prototype.round = function (nNumber) { + if (!nNumber) { + return nNumber; + } + + return Math.floor(nNumber * 1000) / 1000; + }; + + return Drawing; + })(); + + /** + * Get the type by string length + * + * @private + * @param {String} sText + * @param {Number} nCorrectLevel + * @return {Number} type + */ + function _getTypeNumber(sText, nCorrectLevel) { + var nType = 1; + var length = _getUTF8Length(sText); + + for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) { + var nLimit = 0; + + switch (nCorrectLevel) { + case QRErrorCorrectLevel.L : + nLimit = QRCodeLimitLength[i][0]; + break; + case QRErrorCorrectLevel.M : + nLimit = QRCodeLimitLength[i][1]; + break; + case QRErrorCorrectLevel.Q : + nLimit = QRCodeLimitLength[i][2]; + break; + case QRErrorCorrectLevel.H : + nLimit = QRCodeLimitLength[i][3]; + break; + } + + if (length <= nLimit) { + break; + } else { + nType++; + } + } + + if (nType > QRCodeLimitLength.length) { + throw new Error("Too long data"); + } + + return nType; + } + + function _getUTF8Length(sText) { + var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); + return replacedText.length + (replacedText.length != sText ? 3 : 0); + } + + /** + * @class QRCode + * @constructor + * @example + * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie"); + * + * @example + * var oQRCode = new QRCode("test", { + * text : "http://naver.com", + * width : 128, + * height : 128 + * }); + * + * oQRCode.clear(); // Clear the QRCode. + * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode. + * + * @param {HTMLElement|String} el target element or 'id' attribute of element. + * @param {Object|String} vOption + * @param {String} vOption.text QRCode link data + * @param {Number} [vOption.width=256] + * @param {Number} [vOption.height=256] + * @param {String} [vOption.colorDark="#000000"] + * @param {String} [vOption.colorLight="#ffffff"] + * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] + */ + QRCode = function (el, vOption) { + this._htOption = { + width : 256, + height : 256, + typeNumber : 4, + colorDark : "#000000", + colorLight : "#ffffff", + correctLevel : QRErrorCorrectLevel.H + }; + + if (typeof vOption === 'string') { + vOption = { + text : vOption + }; + } + + // Overwrites options + if (vOption) { + for (var i in vOption) { + this._htOption[i] = vOption[i]; + } + } + + if (typeof el == "string") { + el = document.getElementById(el); + } + + if (this._htOption.useSVG) { + Drawing = svgDrawer; + } + + this._android = _getAndroid(); + this._el = el; + this._oQRCode = null; + this._oDrawing = new Drawing(this._el, this._htOption); + + if (this._htOption.text) { + this.makeCode(this._htOption.text); + } + }; + + /** + * Make the QRCode + * + * @param {String} sText link data + */ + QRCode.prototype.makeCode = function (sText) { + this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel); + this._oQRCode.addData(sText); + this._oQRCode.make(); + this._el.title = sText; + this._oDrawing.draw(this._oQRCode); + this.makeImage(); + }; + + /** + * Make the Image from Canvas element + * - It occurs automatically + * - Android below 3 doesn't support Data-URI spec. + * + * @private + */ + QRCode.prototype.makeImage = function () { + if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) { + this._oDrawing.makeImage(); + } + }; + + /** + * Clear the QRCode + */ + QRCode.prototype.clear = function () { + this._oDrawing.clear(); + }; + + /** + * @name QRCode.CorrectLevel + */ + QRCode.CorrectLevel = QRErrorCorrectLevel; +})(); + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__("./src/controller_ui.ts"); +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=controller_ui.js.map \ No newline at end of file diff --git a/controller_ui/beta/controller_ui.js.map b/controller_ui/beta/controller_ui.js.map new file mode 100644 index 0000000..229f248 --- /dev/null +++ b/controller_ui/beta/controller_ui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"controller_ui.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;ACVA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C;;AAE1C,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA,0BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB,aAAa;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA;AACA,cAAc;AACd,gCAAgC,cAAc;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2CAA2C,QAAQ;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;;AAEA,4BAA4B,QAAQ;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,uBAAuB;AAC/C;AACA;;AAEA,4BAA4B,QAAQ;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA,4BAA4B;;AAE5B;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wBAAwB,sBAAsB;AAC9C;;AAEA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;;AAEnD;AACA;AACA;;AAEA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA6B,YAAY;AACzC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;A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AACrC;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF,sCAAqC;AACrC;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF,sCAAqC;AACrC;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF,4CAA2C;AAC3C;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF,2CAA0C;AAC1C;AACA;AACA;AACA;AACA,CAAC,EAAC;;AAEF,gCAAgC,mBAAO,CAAC,gEAAS;;AAEjD,iCAAiC,mBAAO,CAAC,gEAAS;;AAElD,iCAAiC,mBAAO,CAAC,gEAAS;;AAElD,iCAAiC,mBAAO,CAAC,gEAAS;;AAElD,kCAAkC,mBAAO,CAAC,kEAAU;;AAEpD,sCAAsC,mBAAO,CAAC,0EAAc;;AAE5D,uCAAuC,mBAAO,CAAC,4EAAe;;AAE9D,wCAAwC,mBAAO,CAAC,8EAAgB;;AAEhE,oCAAoC,mBAAO,CAAC,sEAAY;;AAExD,uCAAuC,uCAAuC;;;;;;;;;;;AC9EjE;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;;AAErD;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAe;;;;;;;;;;;AC9NF;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf;AACA;AACA;AACA;AACA,kBAAe;;;;;;;;;;;ACVF;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf;AACA,kBAAe;;;;;;;;;;;ACPF;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;;AAEf,uCAAuC,mBAAO,CAAC,4EAAe;;AAE9D,uCAAuC,uCAAuC;;AAE9E;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA,qBAAqB;;AAErB;AACA,qBAAqB;;AAErB;AACA,qBAAqB;;AAErB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAe;;;;;;;;;;;AC5CF;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf,6BAA6B,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,GAAG;AAC3F,kBAAe;;;;;;;;;;;ACPF;;AAEb,8CAA6C;AAC7C;AACA,CAAC,EAAC;AACF,kBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACxBa;;AAEb,8CAA6C;AAC7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U,SAAS,uBAAuB,yBAAyB,iGAAiG;AAClO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,8HAA8H;AACvK;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC,sBAAsB,cAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,qBAAqB;AACrB,8CAA8C;AAC9C;AACA,YAAY,oBAAoB;AAChC,YAAY,eAAe;AAC3B,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;UCtmBD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;UENA;UACA;UACA;UACA","sources":["webpack://ControllerUiLib/webpack/universalModuleDefinition","webpack://ControllerUiLib/./node_modules/aes-js/index.js","webpack://ControllerUiLib/./src/other/style.scss?e90a","webpack://ControllerUiLib/./src/controller_ui.ts","webpack://ControllerUiLib/./src/hardware/chip.ts","webpack://ControllerUiLib/./src/lang/ui_lang.ts","webpack://ControllerUiLib/./src/lang/ui_lang_define.ts","webpack://ControllerUiLib/./src/lang/ui_lang_en.ts","webpack://ControllerUiLib/./src/log/ui_log.ts","webpack://ControllerUiLib/./src/other/define.ts","webpack://ControllerUiLib/./src/other/utilities.ts","webpack://ControllerUiLib/./src/sapi/controller_sapi.ts","webpack://ControllerUiLib/./src/sapi/region.ts","webpack://ControllerUiLib/./src/sapi/sapi.ts","webpack://ControllerUiLib/./src/sapi/vendorIds.ts","webpack://ControllerUiLib/./src/sapi/zuno_sapi.ts","webpack://ControllerUiLib/./src/section/common.ts","webpack://ControllerUiLib/./src/section/controller/info.ts","webpack://ControllerUiLib/./src/section/controller/license.ts","webpack://ControllerUiLib/./src/section/controller/migration.ts","webpack://ControllerUiLib/./src/section/controller/update.ts","webpack://ControllerUiLib/./src/section/detection.ts","webpack://ControllerUiLib/./src/section/slave/info.ts","webpack://ControllerUiLib/./src/section/slave/license.ts","webpack://ControllerUiLib/./src/section/slave/update.ts","webpack://ControllerUiLib/./src/section/update.ts","webpack://ControllerUiLib/./src/ui_define.ts","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/index.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/md5.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/native.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/nil.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/parse.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/regex.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/rng.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/sha1.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/stringify.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/v1.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/v3.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/v35.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/v4.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/v5.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/validate.js","webpack://ControllerUiLib/./node_modules/uuid/dist/commonjs-browser/version.js","webpack://ControllerUiLib/./src/qr_code/qrcode.js","webpack://ControllerUiLib/webpack/bootstrap","webpack://ControllerUiLib/webpack/runtime/define property getters","webpack://ControllerUiLib/webpack/runtime/hasOwnProperty shorthand","webpack://ControllerUiLib/webpack/runtime/make namespace object","webpack://ControllerUiLib/webpack/before-startup","webpack://ControllerUiLib/webpack/startup","webpack://ControllerUiLib/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ControllerUiLib\"] = factory();\n\telse\n\t\troot[\"ControllerUiLib\"] = factory();\n})(self, () => {\nreturn ","/*! MIT License. Copyright 2015-2018 Richard Moore . See LICENSE.txt. */\n(function(root) {\n \"use strict\";\n\n function checkInt(value) {\n return (parseInt(value) === value);\n }\n\n function checkInts(arrayish) {\n if (!checkInt(arrayish.length)) { return false; }\n\n for (var i = 0; i < arrayish.length; i++) {\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\n return false;\n }\n }\n\n return true;\n }\n\n function coerceArray(arg, copy) {\n\n // ArrayBuffer view\n if (arg.buffer && arg.name === 'Uint8Array') {\n\n if (copy) {\n if (arg.slice) {\n arg = arg.slice();\n } else {\n arg = Array.prototype.slice.call(arg);\n }\n }\n\n return arg;\n }\n\n // It's an array; check it is a valid representation of a byte\n if (Array.isArray(arg)) {\n if (!checkInts(arg)) {\n throw new Error('Array contains invalid value: ' + arg);\n }\n\n return new Uint8Array(arg);\n }\n\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\n if (checkInt(arg.length) && checkInts(arg)) {\n return new Uint8Array(arg);\n }\n\n throw new Error('unsupported array-like object');\n }\n\n function createArray(length) {\n return new Uint8Array(length);\n }\n\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\n if (sourceStart != null || sourceEnd != null) {\n if (sourceArray.slice) {\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\n } else {\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\n }\n }\n targetArray.set(sourceArray, targetStart);\n }\n\n\n\n var convertUtf8 = (function() {\n function toBytes(text) {\n var result = [], i = 0;\n text = encodeURI(text);\n while (i < text.length) {\n var c = text.charCodeAt(i++);\n\n // if it is a % sign, encode the following 2 bytes as a hex value\n if (c === 37) {\n result.push(parseInt(text.substr(i, 2), 16))\n i += 2;\n\n // otherwise, just the actual byte\n } else {\n result.push(c)\n }\n }\n\n return coerceArray(result);\n }\n\n function fromBytes(bytes) {\n var result = [], i = 0;\n\n while (i < bytes.length) {\n var c = bytes[i];\n\n if (c < 128) {\n result.push(String.fromCharCode(c));\n i++;\n } else if (c > 191 && c < 224) {\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\n i += 2;\n } else {\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\n i += 3;\n }\n }\n\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n var convertHex = (function() {\n function toBytes(text) {\n var result = [];\n for (var i = 0; i < text.length; i += 2) {\n result.push(parseInt(text.substr(i, 2), 16));\n }\n\n return result;\n }\n\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\n var Hex = '0123456789abcdef';\n\n function fromBytes(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i++) {\n var v = bytes[i];\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\n }\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n\n // Number of rounds by keysize\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\n\n // Round constant words\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n // S-box and Inverse S-box (S is for Substitution)\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n // Transformations for encryption\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n // Transformations for decryption\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n // Transformations for decryption key expansion\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\n function convertToInt32(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i += 4) {\n result.push(\n (bytes[i ] << 24) |\n (bytes[i + 1] << 16) |\n (bytes[i + 2] << 8) |\n bytes[i + 3]\n );\n }\n return result;\n }\n\n var AES = function(key) {\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n Object.defineProperty(this, 'key', {\n value: coerceArray(key, true)\n });\n\n this._prepare();\n }\n\n\n AES.prototype._prepare = function() {\n\n var rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\n }\n\n // encryption round keys\n this._Ke = [];\n\n // decryption round keys\n this._Kd = [];\n\n for (var i = 0; i <= rounds; i++) {\n this._Ke.push([0, 0, 0, 0]);\n this._Kd.push([0, 0, 0, 0]);\n }\n\n var roundKeyCount = (rounds + 1) * 4;\n var KC = this.key.length / 4;\n\n // convert the key into ints\n var tk = convertToInt32(this.key);\n\n // copy values into round key arrays\n var index;\n for (var i = 0; i < KC; i++) {\n index = i >> 2;\n this._Ke[index][i % 4] = tk[i];\n this._Kd[rounds - index][i % 4] = tk[i];\n }\n\n // key expansion (fips-197 section 5.2)\n var rconpointer = 0;\n var t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[ tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (var i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n } else {\n for (var i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n\n for (var i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n\n // copy values into round key arrays\n var i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n this._Ke[r][c] = tk[i];\n this._Kd[rounds - r][c] = tk[i++];\n t++;\n }\n }\n\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (var r = 1; r < rounds; r++) {\n for (var c = 0; c < 4; c++) {\n tt = this._Kd[r][c];\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[ tt & 0xFF]);\n }\n }\n }\n\n AES.prototype.encrypt = function(plaintext) {\n if (plaintext.length != 16) {\n throw new Error('invalid plaintext size (must be 16 bytes)');\n }\n\n var rounds = this._Ke.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(plaintext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Ke[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[ t[(i + 3) % 4] & 0xff] ^\n this._Ke[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Ke[rounds][i];\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n AES.prototype.decrypt = function(ciphertext) {\n if (ciphertext.length != 16) {\n throw new Error('invalid ciphertext size (must be 16 bytes)');\n }\n\n var rounds = this._Kd.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(ciphertext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Kd[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[ t[(i + 1) % 4] & 0xff] ^\n this._Kd[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Kd[rounds][i];\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n\n /**\n * Mode Of Operation - Electonic Codebook (ECB)\n */\n var ModeOfOperationECB = function(key) {\n if (!(this instanceof ModeOfOperationECB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Electronic Code Block\";\n this.name = \"ecb\";\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n block = this._aes.encrypt(block);\n copyArray(block, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n copyArray(block, plaintext, i);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Block Chaining (CBC)\n */\n var ModeOfOperationCBC = function(key, iv) {\n if (!(this instanceof ModeOfOperationCBC)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Block Chaining\";\n this.name = \"cbc\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastCipherblock = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n\n for (var j = 0; j < 16; j++) {\n block[j] ^= this._lastCipherblock[j];\n }\n\n this._lastCipherblock = this._aes.encrypt(block);\n copyArray(this._lastCipherblock, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n\n for (var j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\n }\n\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Feedback (CFB)\n */\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\n if (!(this instanceof ModeOfOperationCFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Feedback\";\n this.name = \"cfb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 size)');\n }\n\n if (!segmentSize) { segmentSize = 1; }\n\n this.segmentSize = segmentSize;\n\n this._shiftRegister = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\n if ((plaintext.length % this.segmentSize) != 0) {\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\n }\n\n var encrypted = coerceArray(plaintext, true);\n\n var xorSegment;\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n for (var j = 0; j < this.segmentSize; j++) {\n encrypted[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return encrypted;\n }\n\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\n if ((ciphertext.length % this.segmentSize) != 0) {\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\n }\n\n var plaintext = coerceArray(ciphertext, true);\n\n var xorSegment;\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n\n for (var j = 0; j < this.segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return plaintext;\n }\n\n /**\n * Mode Of Operation - Output Feedback (OFB)\n */\n var ModeOfOperationOFB = function(key, iv) {\n if (!(this instanceof ModeOfOperationOFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Output Feedback\";\n this.name = \"ofb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastPrecipher = coerceArray(iv, true);\n this._lastPrecipherIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._lastPrecipherIndex === 16) {\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\n this._lastPrecipherIndex = 0;\n }\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\n\n\n /**\n * Counter object for CTR common mode of operation\n */\n var Counter = function(initialValue) {\n if (!(this instanceof Counter)) {\n throw Error('Counter must be instanitated with `new`');\n }\n\n // We allow 0, but anything false-ish uses the default 1\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\n\n if (typeof(initialValue) === 'number') {\n this._counter = createArray(16);\n this.setValue(initialValue);\n\n } else {\n this.setBytes(initialValue);\n }\n }\n\n Counter.prototype.setValue = function(value) {\n if (typeof(value) !== 'number' || parseInt(value) != value) {\n throw new Error('invalid counter value (must be an integer)');\n }\n\n // We cannot safely handle numbers beyond the safe range for integers\n if (value > Number.MAX_SAFE_INTEGER) {\n throw new Error('integer value out of safe range');\n }\n\n for (var index = 15; index >= 0; --index) {\n this._counter[index] = value % 256;\n value = parseInt(value / 256);\n }\n }\n\n Counter.prototype.setBytes = function(bytes) {\n bytes = coerceArray(bytes, true);\n\n if (bytes.length != 16) {\n throw new Error('invalid counter bytes size (must be 16 bytes)');\n }\n\n this._counter = bytes;\n };\n\n Counter.prototype.increment = function() {\n for (var i = 15; i >= 0; i--) {\n if (this._counter[i] === 255) {\n this._counter[i] = 0;\n } else {\n this._counter[i]++;\n break;\n }\n }\n }\n\n\n /**\n * Mode Of Operation - Counter (CTR)\n */\n var ModeOfOperationCTR = function(key, counter) {\n if (!(this instanceof ModeOfOperationCTR)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Counter\";\n this.name = \"ctr\";\n\n if (!(counter instanceof Counter)) {\n counter = new Counter(counter)\n }\n\n this._counter = counter;\n\n this._remainingCounter = null;\n this._remainingCounterIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._remainingCounterIndex === 16) {\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\n this._remainingCounterIndex = 0;\n this._counter.increment();\n }\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\n\n\n ///////////////////////\n // Padding\n\n // See:https://tools.ietf.org/html/rfc2315\n function pkcs7pad(data) {\n data = coerceArray(data, true);\n var padder = 16 - (data.length % 16);\n var result = createArray(data.length + padder);\n copyArray(data, result);\n for (var i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n }\n\n function pkcs7strip(data) {\n data = coerceArray(data, true);\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\n\n var padder = data[data.length - 1];\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\n\n var length = data.length - padder;\n for (var i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new Error('PKCS#7 invalid padding byte');\n }\n }\n\n var result = createArray(length);\n copyArray(data, result, 0, 0, length);\n return result;\n }\n\n ///////////////////////\n // Exporting\n\n\n // The block cipher\n var aesjs = {\n AES: AES,\n Counter: Counter,\n\n ModeOfOperation: {\n ecb: ModeOfOperationECB,\n cbc: ModeOfOperationCBC,\n cfb: ModeOfOperationCFB,\n ofb: ModeOfOperationOFB,\n ctr: ModeOfOperationCTR\n },\n\n utils: {\n hex: convertHex,\n utf8: convertUtf8\n },\n\n padding: {\n pkcs7: {\n pad: pkcs7pad,\n strip: pkcs7strip\n }\n },\n\n _arrayTest: {\n coerceArray: coerceArray,\n createArray: createArray,\n copyArray: copyArray,\n }\n };\n\n\n // node.js\n if (typeof exports !== 'undefined') {\n module.exports = aesjs\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define([], function() { return aesjs; });\n\n // Web Browsers\n } else {\n\n // If there was an existing library at \"aesjs\" make sure it's still available\n if (root.aesjs) {\n aesjs._aesjs = root.aesjs;\n }\n\n root.aesjs = aesjs;\n }\n\n\n})(this);\n","// extracted by mini-css-extract-plugin\nexport {};","import \"./other/style.scss\";\n\nimport {ControllerUiLogClass} from \"./log/ui_log\"\nimport {ControllerUiLangClassId} from \"./lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"./lang/ui_lang\"\nimport {ControllerUiSectionInfoClass} from \"./section/controller/info\"\nimport {ControllerUiSectionLicenseClass} from \"./section/controller/license\"\nimport {ControllerUiSectionUpdateClass} from \"./section/controller/update\"\nimport {ControllerUiSectionMigrationClass} from \"./section/controller/migration\"\nimport {DetectionUiSectionClass} from \"./section/detection\"\nimport {SlaveUiSectionInfoClass} from \"./section/slave/info\"\nimport {SlaveUiSectionLicenseClass} from \"./section/slave/license\"\nimport {SlaveUiSectionUpdateClass} from \"./section/slave/update\"\nimport {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from \"./ui_define\"\nimport {ControllerUiDefineClassReBeginFunc} from \"./section/detection\"\n\nimport {ControllerSapiClass} from \"./sapi/controller_sapi\";\nimport {ZunoSapiClass} from \"./sapi/zuno_sapi\";\nimport {SapiClass, SapiClassStatus, SapiClassDetectType, SapiSerialOptionFilters} from \"./sapi/sapi\";\n\nexport {ControllerUiClass};\n\ntype controller_array_type = Array;\ntype slave_array_type = Array;\ntype all_array_type = controller_array_type|slave_array_type;\n\nclass ControllerUiClass {\n\tprivate readonly sapi:SapiClass\t\t\t\t\t\t\t\t\t\t\t= new SapiClass();\n\tprivate readonly razberry:ControllerSapiClass\t\t\t\t\t\t\t= new ControllerSapiClass(this.sapi);\n\tprivate readonly zuno:ZunoSapiClass\t\t\t\t\t\t\t\t\t\t= new ZunoSapiClass(this.sapi);\n\tprivate readonly locale:ControllerUiLangClass\t\t\t\t\t\t\t= new ControllerUiLangClass();\n\tprivate readonly el_modal:HTMLElement\t\t\t\t\t\t\t\t\t= document.createElement(\"div\");\n\tprivate readonly el_section:HTMLElement\t\t\t\t\t\t\t\t\t= document.createElement(\"section\");\n\tprivate readonly log:ControllerUiLogClass\t\t\t\t\t\t\t\t= new ControllerUiLogClass(this.el_section, this.locale);\n\tprivate readonly controller:controller_array_type\t\t\t\t\t\t= [];\n\tprivate readonly slave:slave_array_type\t\t\t\t\t\t\t\t\t= [];\n\tprivate readonly detection:DetectionUiSectionClass;\n\tprivate readonly filters?:SapiSerialOptionFilters[];\n\n\tprivate detect_type:SapiClassDetectType\t\t\t\t\t\t\t\t\t= SapiClassDetectType.UNKNOWN;\n\n\tprivate _get_all_array_type():all_array_type {\n\t\tlet out:all_array_type;\n\t\n\t\tswitch (this.detect_type) {\n\t\t\tcase SapiClassDetectType.RAZBERRY:\n\t\t\t\tout = this.controller;\n\t\t\t\tbreak;\n\t\t\tcase SapiClassDetectType.ZUNO:\n\t\t\t\tout = this.slave;\n\t\t\t\tbreak ;\n\t\t\tdefault:\n\t\t\t\tout = [];\n\t\t\t\tbreak ;\n\t\t}\n\t\treturn (out);\n\t}\n\n\tprivate async _clear(): Promise {\n\t\tlet i:number;\n\n\t\tconst array_type:all_array_type = this._get_all_array_type();\n\t\ti = 0x0;\n\t\twhile (i < array_type.length) {\n\t\t\tawait array_type[i].end();\n\t\t\ti++;\n\t\t}\n\t}\n\n\tprivate async _begin(detection:boolean): Promise {\n\t\tlet i:number;\n\n\t\tawait this._clear();\n\t\tif (detection == true) {\n\t\t\tawait this.detection.begin();\n\t\t\tif (await this.detection.detection() == false)\n\t\t\t\treturn ;\n\t\t}\n\t\tthis.detect_type = this.sapi.type();\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\tswitch (this.detect_type) {\n\t\t\tcase SapiClassDetectType.ZUNO:\n\t\t\t\tawait this.zuno.connect();\n\t\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\t\t\tbreak;\n\t\t\tcase SapiClassDetectType.RAZBERRY:\n\t\t\t\tawait this.razberry.connect();\n\t\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.log.errorFalled(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\t\t\tbreak ;\n\t\t}\n\t\tconst array_type:all_array_type = this._get_all_array_type();\n\t\ti = 0x0;\n\t\twhile (i < array_type.length) {\n\t\t\tawait array_type[i].begin();\n\t\t\ti++;\n\t\t}\n\t}\n\n\tprivate async _start(): Promise {\n\t\tthis.log.info(NAME_APP_VERSION_FULL);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_PORT_SELECT);\n\t\tconst status:SapiClassStatus = await this.sapi.request(this.filters);\n\t\tif (status == SapiClassStatus.SERIAL_UN_SUPPORT)\n\t\t\treturn (this.log.error(ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER));\n\t\tif (status == SapiClassStatus.REQUEST_NO_SELECT)\n\t\t\treturn (this.log.errorFalled(ControllerUiLangClassId.MESSAGE_PORT_SELECT));\n\t\tif (status != SapiClassStatus.OK)\n\t\t\treturn (this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_PORT_SELECT, status));\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_PORT_SELECT);\n\t\tawait this._begin(true);\n\t}\n\n\tprivate _constructor_button_create(el_section_button:HTMLElement, func:EventListener, text:string, title:string): void {\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.type = \"button\";\n\t\tel_button.textContent = text;\n\t\tel_button.title = title;\n\t\tel_button.addEventListener(\"click\", func);\n\t\tel_section_button.appendChild(el_button);\n\t}\n\n\tprivate _constructor_button(): void {\n\t\tconst el_section_button:HTMLElement = document.createElement(\"section\");\n\t\tel_section_button.className = \"ZUnoRazberryModalContentSectionButton\";\n\t\tconst event_copy:EventListener = () => {\n\t\t\tnavigator.clipboard.writeText(this.log.getLog());\n\t\t};\n\t\tconst event_close:EventListener = async () => {\n\t\t\tlet i:number;\n\n\t\t\tconst array_type:all_array_type = this._get_all_array_type();\n\t\t\ti = 0x0;\n\t\t\twhile (i < array_type.length) {\n\t\t\t\tif (array_type[i].is_close() == false)\n\t\t\t\t\treturn ;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tawait this.sapi.close();\n\t\t\tthis.el_modal.remove();\n\t\t};\n\t\tthis._constructor_button_create(el_section_button, event_copy, this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_TEXT), this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_TITLE));\n\t\tthis._constructor_button_create(el_section_button, event_close, this.locale.getLocale(ControllerUiLangClassId.BUTTON_CLOSE_TEXT), this.locale.getLocale(ControllerUiLangClassId.BUTTON_CLOSE_TITLE));\n\t\tthis.el_section.appendChild(el_section_button);\n\t}\n\n\tconstructor(el:HTMLElement, filters?:SapiSerialOptionFilters[]) {\n\t\tthis.filters = filters;\n\t\tthis.el_modal.className = \"ZUnoRazberryModal\";\n\t\tthis.el_modal.appendChild(this.el_section);\n\t\tthis._constructor_button();\n\t\tconst re_begin:ControllerUiDefineClassReBeginFunc = async (detection:boolean) => {await this._begin(detection)};\n\t\tthis.detection = new DetectionUiSectionClass(this.el_section, this.locale, this.sapi, this.log, re_begin);\n\t\tthis.controller.push(new ControllerUiSectionInfoClass(this.el_section, this.locale, this.razberry, this.log, re_begin));\n\t\tthis.controller.push(new ControllerUiSectionLicenseClass(this.el_section, this.locale, this.razberry, this.log));\n\t\tthis.controller.push(new ControllerUiSectionUpdateClass(this.el_section, this.locale, this.razberry, this.log, re_begin));\n\t\tthis.controller.push(new ControllerUiSectionMigrationClass(this.el_section, this.locale, this.razberry, this.log, async () => {await this._clear()}, this.sapi, this.zuno));\n\t\tthis.slave.push(new SlaveUiSectionInfoClass(this.el_section, this.locale, this.zuno, this.log, re_begin));\n\t\tthis.slave.push(new SlaveUiSectionLicenseClass(this.el_section, this.locale, this.zuno, this.log, re_begin));\n\t\tthis.slave.push(new SlaveUiSectionUpdateClass(this.el_section, this.locale, this.zuno, this.log, re_begin));\n\t\tel.appendChild(this.el_modal);\n\t\tthis._start();\n\t}\n}","\nexport {HardwareChipClass};\n\nclass HardwareChipClass {\n\tstatic readonly FAMILY_ZGM13\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x00;\n\tstatic readonly CHIP_ZGM130S037HGN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_ZGM130S037HGN1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\t\n\tstatic readonly FAMILY_EFR32MG21\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32MG21A010F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32MG21A010F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_EFR32MG21A010F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_EFR32MG21A020F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32MG21A020F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32MG21A020F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_EFR32MG21B010F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_EFR32MG21B010F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_EFR32MG21B010F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_EFR32MG21B020F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\tstatic readonly CHIP_EFR32MG21B020F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0B;\n\tstatic readonly CHIP_EFR32MG21B020F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0C;\n\t\n\tstatic readonly FAMILY_ZGM23\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_ZGM230SA27HGN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_ZGM230SA27HNN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_ZGM230SB27HGN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_ZGM230SB27HNN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\t\n\tstatic readonly FAMILY_MGM21\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_MGM210L022JIF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_MGM210L022JNF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_MGM210LA22JIF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_MGM210LA22JNF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_MGM210P022JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_MGM210P032JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_MGM210PA22JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_MGM210PA32JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_MGM210PB22JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_MGM210PB32JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\tstatic readonly CHIP_MGM211LA02JNF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0B;\n\t\n\tstatic readonly FAMILY_EFR32ZG23\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32ZG23A010F512GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32ZG23A010F512GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_EFR32ZG23A020F512GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_EFR32ZG23A020F512GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32ZG23B010F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32ZG23B010F512IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_EFR32ZG23B011F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_EFR32ZG23B020F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_EFR32ZG23B020F512IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_EFR32ZG23B021F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\t\n\tstatic readonly FAMILY_EFR32MG24\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32MG24A010F1024IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32MG24A010F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_EFR32MG24A010F1536GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_EFR32MG24A010F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32MG24A010F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32MG24A010F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_EFR32MG24A010F768IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_EFR32MG24A010F768IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_EFR32MG24A020F1024IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_EFR32MG24A020F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\tstatic readonly CHIP_EFR32MG24A020F1536GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0B;\n\tstatic readonly CHIP_EFR32MG24A020F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0C;\n\tstatic readonly CHIP_EFR32MG24A020F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0D;\n\tstatic readonly CHIP_EFR32MG24A020F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0E;\n\tstatic readonly CHIP_EFR32MG24A020F768IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0F;\n\tstatic readonly CHIP_EFR32MG24A021F1024IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x10;\n\tstatic readonly CHIP_EFR32MG24A110F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x11;\n\tstatic readonly CHIP_EFR32MG24A110F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x12;\n\tstatic readonly CHIP_EFR32MG24A111F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x13;\n\tstatic readonly CHIP_EFR32MG24A120F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x14;\n\tstatic readonly CHIP_EFR32MG24A121F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x15;\n\tstatic readonly CHIP_EFR32MG24A410F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x16;\n\tstatic readonly CHIP_EFR32MG24A410F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x17;\n\tstatic readonly CHIP_EFR32MG24A420F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x18;\n\tstatic readonly CHIP_EFR32MG24A420F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x19;\n\tstatic readonly CHIP_EFR32MG24A610F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1A;\n\tstatic readonly CHIP_EFR32MG24A620F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1B;\n\tstatic readonly CHIP_EFR32MG24B010F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1C;\n\tstatic readonly CHIP_EFR32MG24B010F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1D;\n\tstatic readonly CHIP_EFR32MG24B010F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1E;\n\tstatic readonly CHIP_EFR32MG24B020F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1F;\n\tstatic readonly CHIP_EFR32MG24B020F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x20;\n\tstatic readonly CHIP_EFR32MG24B020F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x21;\n\tstatic readonly CHIP_EFR32MG24B110F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x22;\n\tstatic readonly CHIP_EFR32MG24B110F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x23;\n\tstatic readonly CHIP_EFR32MG24B120F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x24;\n\tstatic readonly CHIP_EFR32MG24B210F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x25;\n\tstatic readonly CHIP_EFR32MG24B210F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x26;\n\tstatic readonly CHIP_EFR32MG24B220F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x27;\n\tstatic readonly CHIP_EFR32MG24B310F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x28;\n\tstatic readonly CHIP_EFR32MG24B610F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x29;\n\n\tconstructor() {\n\t}\n}\n\n","\nimport {controller_lang_en} from \"./ui_lang_en\"\nimport {ControllerUiLangClassList, ControllerUiLangClassId} from \"./ui_lang_define\"\n\nexport {ControllerUiLangClass};\n\nclass ControllerUiLangClass {\n\tprivate locale:ControllerUiLangClassList\t\t\t\t\t\t\t= controller_lang_en;\n\n\tpublic getLocale(id:ControllerUiLangClassId): string {\n\t\tif (this.locale[id] != undefined)\n\t\t\treturn (this.locale[id]);\n\t\treturn (\"\");\n\t}\n\n\tconstructor() {\n\t}\n}","\nexport {ControllerUiLangClassId, ControllerUiLangClassList};\n\nenum ControllerUiLangClassId\n{\n\tMESSAGE_PORT_NOT_SELECT,\n\tMESSAGE_NOT_SUPPORT_BROWSER,\n\tMESSAGE_PORT_USE,\n\tMESSAGE_CONNECT,\n\tMESSAGE_DETECTION,\n\tMESSAGE_READ_CAPABILITIES,\n\tMESSAGE_READ_REGION,\n\tMESSAGE_READ_SEC,\n\tMESSAGE_READ_POWER,\n\tMESSAGE_READ_LICENSE,\n\tMESSAGE_SET_LICENSE,\n\tMESSAGE_READ_BOARD_INFO,\n\tMESSAGE_SET_REGION,\n\tMESSAGE_SET_POWER,\n\tMESSAGE_SET_SEC,\n\tMESSAGE_SET_DEFAULT,\n\tMESSAGE_PLEASE_WAIT,\n\tMESSAGE_UPDATE_DOWNLOAD_INFO,\n\tMESSAGE_UPDATE_DOWNLOAD_FILE,\n\tMESSAGE_UPDATE_START_FIRMWARE,\n\tMESSAGE_UPDATE_START_BOOTLOADER,\n\tTABLE_NAME_SERIAL_API_VERSION,\n\tTABLE_NAME_SERIAL_API_VERSION_TITLE,\n\tTABLE_NAME_VENDOR,\n\tTABLE_NAME_VENDOR_TITLE,\n\tTABLE_NAME_VENDOR_ID,\n\tTABLE_NAME_VENDOR_ID_TITLE,\n\tTABLE_NAME_REGION,\n\tTABLE_NAME_REGION_TITLE,\n\tTABLE_NAME_REGION_SELECT_TITLE,\n\tTABLE_NAME_REGION_BUTTON,\n\tTABLE_NAME_REGION_BUTTON_TITLE,\n\tTABLE_NAME_RESET_DEFAULT,\n\tTABLE_NAME_RESET_DEFAULT_TITLE,\n\tTABLE_NAME_RESET_DEFAULT_BUTTON,\n\tTABLE_NAME_RESET_DEFAULT_BUTTON_TITLE,\n\tTABLE_NAME_POWER,\n\tTABLE_NAME_POWER_TITLE,\n\tTABLE_NAME_POWER_SELECT_TITLE,\n\tTABLE_NAME_POWER_BUTTON,\n\tTABLE_NAME_POWER_BUTTON_TITLE,\n\tTABLE_NAME_UPDATE_FIRMWARE_BUTTON,\n\tTABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE,\n\tTABLE_NAME_UPDATE_BOOTLOADER_BUTTON,\n\tTABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE,\n\tTABLE_NAME_LICENSE_UUID,\n\tTABLE_NAME_LICENSE_UUID_TITLE,\n\tTABLE_NAME_LICENSE_MORE_OPTIONS,\n\tTABLE_NAME_LICENSE_MORE_OPTIONS_TITLE,\n\tTABLE_NAME_LICENSE_SUBVENDOR_ID,\n\tTABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE,\n\tTABLE_NAME_LICENSE_MAX_NODE,\n\tTABLE_NAME_LICENSE_MAX_NODE_TITLE,\n\tTABLE_NAME_LICENSE_SUPPORT,\n\tTABLE_NAME_LICENSE_SUPPORT_TITLE,\n\tTABLE_NAME_UPDATE_BETA,\n\tTABLE_NAME_UPDATE_BETA_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_BETA_TITLE,\n\tTABLE_NAME_UPDATE_FIRMWARE,\n\tTABLE_NAME_UPDATE_FIRMWARE_TITLE,\n\tTABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_BOOTLOADER,\n\tTABLE_NAME_UPDATE_BOOTLOADER_TITLE,\n\tTABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_DOWNLOAD_INFO,\n\tTABLE_NAME_UPDATE_DOWNLOAD_FILE,\n\tTABLE_NAME_UPDATE_WAIT_BUS_SERIAL,\n\tTABLE_NAME_UPDATE_WAIT_UPDATE,\n\tTABLE_NAME_DETECTION_SYNC_MANUAL,\n\tTABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE,\n\tTABLE_NAME_DETECTION_SYNC_MANUAL_TITLE,\n\tLOG_HEADER,\n\tLOG_DONE,\n\tLOG_FAILED,\n\tLOG_FAILED_CODE,\n\tLOG_UNSUPPORTED,\n\tLOG_NOT_FIND_ELEMENT,\n\tLOG_XHR_TIMEOUT,\n\tLOG_XHR_ERROR,\n\tLOG_XHR_INVALID_DATA,\n\tBUTTON_COPY_TEXT,\n\tBUTTON_COPY_TITLE,\n\tBUTTON_CLOSE_TEXT,\n\tBUTTON_CLOSE_TITLE,\n\tBUTTON_COPY_DSK,\n\tBUTTON_COPY_DSK_TITLE,\n\tBOARD_INFO_HEADER,\n\tLICENSE_INFO_HEADER,\n\tUPDATE_INFO_HEADER,\n\tDEFAULT_RESET_WARNING,\n\tMIGRATION_INFO_HEADER,\n\tMIGRATION_ABOUT_HEADER,\n\tMIGRATION_ABOUT_HEADER_TITLE,\n\tMIGRATION_ABOUT_HEADER_TEXT_HTML,\n\tMIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5,\n\tMIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT,\n\tMIGRATION_PROCESS_HEADER,\n\tMIGRATION_PROCESS_HEADER_TITLE,\n\tMIGRATION_PROCESS_BUTTON_START,\n\tMIGRATION_PROCESS_BUTTON_START_TITLE,\n\tMIGRATION_PROCESS_BUTTON_START_WARNING,\n\tMIGRATION_TEST_INCLUDE,\n\tMESSAGE_READ_HOME_ID,\n\tMIGRATION_UNKNOWN_ERROR,\n\tMIGRATION_GOOD_RESULT,\n\tMIGRATION_ACTION_STOP,\n\tMIGRATION_ACTION_CONTINUE,\n\tMIGRATION_ACTION_STOP_TITLE,\n\tMIGRATION_ACTION_CONTINUE_TITLE,\n\tMIGRATION_QUESTION_EXCLUDE,\n\tMIGRATION_STOP_RESULT,\n\tMESSAGE_READ_INIT_DATA,\n\tMESSAGE_START_EXCLUDING,\n\tMESSAGE_START_WIDE_EXCLUDING,\n\tSECONDS,\n\tMIGRATION_WAIT_EXCLUDE_START_MASTER,\n\tMESSAGE_CLEAR_NODE,\n\tMESSAGE_START_INCLUDE,\n\tMESSAGE_START_WIDE_INCLUDE,\n\tMIGRATION_QUESTION_INCLUDE,\n\tMIGRATION_WAIT_INCLUDE_START_MASTER,\n\tMIGRATION_FINALIZE,\n\tMIGRATION_DETECTION,\n\tMESSAGE_SET_HOME_ID,\n\tMESSAGE_REMOVE_NODE,\n\tMESSAGE_SOFT_RESET,\n\tMESSAGE_NOP,\n\tMESSAGE_PORT_SELECT,\n\tDETECTION_INFO_HEADER,\n\tDETECTION_PROCESS_HEADER,\n\tDETECTION_PROCESS_HEADER_TITLE,\n\tDETECTION_PROCESS,\n\tDETECTION_PROCESS_STOP,\n\tDETECTION_PROCESS_CONTINUE,\n\tDETECTION_PROCESS_STOP_TITLE,\n\tDETECTION_PROCESS_CONTINUE_TITLE,\n\tDETECTION_PROCESS_QUEST_SYNC,\n\tDETECTION_PROCESS_BUTTON_RE_SYNC,\n\tDETECTION_PROCESS_BUTTON_RE_SYNC_TITLE,\n\tSLAVE_MESSAGE_READ_BOARD_INFO,\n\tTABLE_NAME_VERSION,\n\tTABLE_NAME_VERSION_TITLE,\n\tTABLE_NAME_BUILD_TIME_STAMP,\n\tTABLE_NAME_BUILD_TIME_STAMP_TITLE,\n\tTABLE_NAME_UUID,\n\tTABLE_NAME_UUID_TITLE,\n\tTABLE_NAME_HOME,\n\tTABLE_NAME_HOME_TITLE,\n\tTABLE_NAME_NODE,\n\tTABLE_NAME_NODE_TITLE,\n\tTABLE_NAME_DSK,\n\tTABLE_NAME_DSK_TITLE,\n\tTABLE_NAME_QR_CODE,\n\tTABLE_NAME_QR_CODE_TITLE,\n\tSLAVE_MESSAGE_FREEZE_ERROR,\n\tSLAVE_DEFAULT_RESET_WARNING,\n\tTABLE_NAME_TYPE,\n\tTABLE_NAME_TYPE_TITLE,\n\tTABLE_NAME_TYPE_CONTROLER,\n\tTABLE_NAME_TYPE_SLAVE,\n\tERROR_ARGUMENT_FOR_UPDATE_SELECT,\n\tERROR_ARGUMENT_FIND_TYPE,\n\tTABLE_NAME_INCLUDE_EXCLUDE,\n\tTABLE_NAME_INCLUDE_EXCLUDE_TITLE,\n\tTABLE_NAME_INCLUDE_EXCLUDE_BUTTON,\n\tTABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE,\n\tINCLUDE_EXCLUDE_WAIT,\n\tMESSAGE_ENABLE_NIF_DEFAULT,\n\tMESSAGE_ENABLE_EVENT_FOR_LEARN,\n\tMESSAGE_START_LEARN,\n\tMESSAGE_LEARN_INFO_TIMEOUT,\n\tMESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART,\n\tMESSAGE_LEARN_INFO_INCLUDE_RESTART,\n\tMESSAGE_LEARN_INFO_EXCLUDE_RESTART,\n\tPROCESS_CONTINUE,\n\tPROCESS_CONTINUE_TITLE,\n\tPROCESS_STOP,\n\tPROCESS_STOP_TITLE,\n\tPROCESS_REPEAT,\n\tPROCESS_REPEAT_TITLE,\n\tPROCESS_ABORT,\n\tPROCESS_ABORT_TITLE,\n\tLEARN_PROCESS_QUEST_EXCLUDE_INCLUDE,\n\tLEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE,\n\tMIGRATION_NOT_GET_URL_INFO,\n\tMIGRATION_NOT_UPDATE,\n\tMIGRATION_LAST_UPDATE_DETECT,\n\tMIGRATION_FAILED_UPDATE_TYPE,\n\tMIGRATION_FAILED_UPDATE_VERSION,\n\tMIGRATION_FAILED_CHANGE_REGION,\n\tMIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE,\n\tLEARN_PROCESS_QUEST_EXCLUDE,\n\tLEARN_PROCESS_QUEST_EXCLUDE_TITLE,\n\tMIGRATION_LEARN_INFO_EXCLUDE_INCLUDE,\n\tMIGRATION_FAILED_DETECT,\n\tMIGRATION_PROCESS_QUEST_INCLUDE,\n\tMIGRATION_PROCESS_QUEST_INCLUDE_TITLE,\n\tMIGRATION_NOT_SUPPORT_DUMP_KEY,\n\tMESSAGE_READ_S2_KEY,\n\tMIGRATION_NOT_AVIABLE_FIRMWARE,\n\tMIGRATION_NOT_SUPPORT_LR,\n\tMIGRATION_NOT_SUPPORT_BACKUP,\n\tMIGRATION_FAILED_SEE_LOG,\n\tMIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER,\n\tMIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE,\n\tMIGRATION_SUCESS,\n\tMIGRATION_QUEST_REPEATER_ALL_KEY,\n\tMIGRATION_QUEST_REPEATER_ALL_KEY_TITLE,\n\tMIGRATION_QUEST_ABORT_STEP,\n\tMIGRATION_QUEST_ABORT_STEP_TITLE,\n\tMIGRATION_FAILED_REPEAR_TYPE,\n}\n\ntype ControllerUiLangClassList =\n{\n\t[key in ControllerUiLangClassId]:string;\n}\n","import {ControllerUiLangClassList, ControllerUiLangClassId} from \"./ui_lang_define\"\n\nexport {controller_lang_en};\n\nconst controller_lang_en:ControllerUiLangClassList\t\t\t\t\t=\n{\n\t[ControllerUiLangClassId.MESSAGE_PORT_NOT_SELECT]: \"No port selected\",\n\t[ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER]: \"Sorry, this feature is supported only on Chrome, Edge and Opera\",\n\t[ControllerUiLangClassId.MESSAGE_PORT_USE]: \"Check yours, maybe another application is using it\",\n\t[ControllerUiLangClassId.MESSAGE_CONNECT]: \"Connect device\",\n\t[ControllerUiLangClassId.MESSAGE_DETECTION]: \"Detection device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES]: \"Read capabilities the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_REGION]: \"Read region the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_SEC]: \"Read securite the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_POWER]: \"Read power the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_LICENSE]: \"Read license the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_LICENSE]: \"Set license the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO]: \"Read board info the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_REGION]: \"Set region the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_POWER]: \"Set power the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_SEC]: \"Set securite the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_DEFAULT]: \"Set default the device\",\n\t[ControllerUiLangClassId.MESSAGE_PLEASE_WAIT]: \"Please wait until the previous operation is completed.\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO]: \"Download update info\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE]: \"Download update file\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE]: \"Start firmware update\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER]: \"Start bootloader update\",\n\t[ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION]: \"Serial API Version:\",\n\t[ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE]: \"It is specific to Z-Wave.Me\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR]: \"Vendor:\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR_ID]: \"Vendor ID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION]: \"Region:\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_TITLE]: \"Z-Wave frequency\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE]: \"Select region\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON]: \"Apply\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE]: \"Apply the selected region\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT]: \"Reset default:\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE]: \"Reset to factory default settings\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON]: \"Reset\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER]: \"TX power level:\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE]: \"Select the TX power level\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON]: \"Apply\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE]: \"Apply the selected TX power\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON]: \"Update\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON]: \"Update\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID]: \"UUID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE]: \"Unique ID of your Z-Wave hardware\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS]: \"More options:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE]: \"Additional features available for your hardware\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID]: \"Subvendor:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE]: \"Nodes limit:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT]: \"Support:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA]: 'Beta:',\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE]: 'Firmware:',\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE]: \"Not updated\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER]: 'Bootloader:',\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO]: \"Download info...\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE]: \"Download file...\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL]: \"Wait bus serial...\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE]: \"Wait update...\",\n\t[ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL]: 'Sync manual:',\n\t[ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE]: \"\",\n\t[ControllerUiLangClassId.LOG_HEADER]: \"Log\",\n\t[ControllerUiLangClassId.LOG_DONE]: \" done\",\n\t[ControllerUiLangClassId.LOG_FAILED]: \" failed\",\n\t[ControllerUiLangClassId.LOG_FAILED_CODE]: \" failed: {{code}}\",\n\t[ControllerUiLangClassId.LOG_UNSUPPORTED]: \" unsupported\",\n\t[ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT]: \"Not find element: {{element}}\",\n\t[ControllerUiLangClassId.LOG_XHR_TIMEOUT]: \"
Internet request - timeout {{url}}
\",\n\t[ControllerUiLangClassId.LOG_XHR_ERROR]: \"
Internet request - error {{url}}
\",\n\t[ControllerUiLangClassId.LOG_XHR_INVALID_DATA]: \"
Internet request - invalid data {{url}}
\",\n\t[ControllerUiLangClassId.BUTTON_COPY_TEXT]: \"Copy log\",\n\t[ControllerUiLangClassId.BUTTON_COPY_TITLE]: \"Copy the log to clipboard\",\n\t[ControllerUiLangClassId.BUTTON_CLOSE_TEXT]: \"Close\",\n\t[ControllerUiLangClassId.BUTTON_CLOSE_TITLE]: \"Closes and stops working with the port\",\n\t[ControllerUiLangClassId.BUTTON_COPY_DSK]: \"Copy\",\n\t[ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE]: \"Copy the dsk to clipboard\",\n\t[ControllerUiLangClassId.BOARD_INFO_HEADER]: \"Board Info\",\n\t[ControllerUiLangClassId.LICENSE_INFO_HEADER]: \"License Info\",\n\t[ControllerUiLangClassId.UPDATE_INFO_HEADER]: \"Update Info\",\n\t[ControllerUiLangClassId.DEFAULT_RESET_WARNING]: \"The Controller Reset will delete all included devices from your network without excluding them. You will need to manually exclude and include all of them. Do you really want to do this?\",\n\t[ControllerUiLangClassId.MIGRATION_INFO_HEADER]: \"Migration Info\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER]: \"About\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML]: \"
Porting from your old controllerto your new Z-Wave.Me hardware
\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5]: \"
You have an old stickneed a newer one
\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT]: \"
Your stick is not supportedmigration works only to Z-Wave.Me hardware
\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_HEADER]: \"Migration:\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START]: \"Start\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING]: \"Are you sure you want to start the migration process? - During this process, all data will be lost.\\nAlso make sure there are no power issues to avoid problems.\",\n\t[ControllerUiLangClassId.MIGRATION_TEST_INCLUDE]: \"Checking whether it is on...\",\n\t[ControllerUiLangClassId.MESSAGE_READ_HOME_ID]: \"Read home and node id the controller\",\n\t[ControllerUiLangClassId.MIGRATION_UNKNOWN_ERROR]: \"An unexpected error occurred, please try again.\",\n\t[ControllerUiLangClassId.MIGRATION_GOOD_RESULT]: \"Migration was successful.\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_STOP]: \"Stop\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE]: \"Continue\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_STOP_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE]: \"You need to excluding first - click when you're ready\",\n\t[ControllerUiLangClassId.MIGRATION_STOP_RESULT]: \"Migration was stoping.\",\n\t[ControllerUiLangClassId.MESSAGE_READ_INIT_DATA]: \"Read init data the controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_EXCLUDING]: \"Start excluding controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING]: \"Start wide excluding controller\",\n\t[ControllerUiLangClassId.SECONDS]: \"s\",\n\t[ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER]: \"We are waiting for you to begin the elimination process.\",\n\t[ControllerUiLangClassId.MESSAGE_CLEAR_NODE]: \"Start clear node the controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_INCLUDE]: \"Start include controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE]: \"Start wide include controller\",\n\t[ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE]: \"You need to turn on the controller\",\n\t[ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER]: \"We are waiting for you to begin the inclusion process.\",\n\t[ControllerUiLangClassId.MIGRATION_FINALIZE]: \"Finishing...\",\n\t[ControllerUiLangClassId.MIGRATION_DETECTION]: \"Detection...\",\n\t[ControllerUiLangClassId.MESSAGE_SET_HOME_ID]: \"Set home and node id the controller\",\n\t[ControllerUiLangClassId.MESSAGE_REMOVE_NODE]: \"Remove node the controller\",\n\t[ControllerUiLangClassId.MESSAGE_SOFT_RESET]: \"Soft reset\",\n\t[ControllerUiLangClassId.MESSAGE_NOP]: \"Send nop\",\n\t[ControllerUiLangClassId.MESSAGE_PORT_SELECT]: \"Port selection\",\n\t[ControllerUiLangClassId.DETECTION_INFO_HEADER]: \"Detection\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_HEADER]: \"Sync:\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS]: \"Sync...\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_STOP]: \"Stop\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE]: \"Continue\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE]: \"\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE]: \"\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC]: \"Reset your hardware and try again\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC]: \"Try to sync again\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE]: \"\",\n\t[ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO]: \"Read hardware information\",\n\t[ControllerUiLangClassId.TABLE_NAME_VERSION]: \"Version:\",\n\t[ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP]: \"Build date and time:\",\n\t[ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UUID]: \"UUID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_UUID_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_HOME]: \"Home ID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_HOME_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_NODE]: \"Node ID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_NODE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_DSK]: \"DSK:\",\n\t[ControllerUiLangClassId.TABLE_NAME_DSK_TITLE]: \"Key used to securely include your device\",\n\t[ControllerUiLangClassId.TABLE_NAME_QR_CODE]: \"QR-code:\",\n\t[ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE]: \"QR-code used to securely include your device\",\n\t[ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR]: \"Failed to pause slave\",\n\t[ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING]: \"Do you really want to do this?\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE]: \"Type:\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER]: \"Controller\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE]: \"Z-Uno / repeater\",\n\t[ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT]: \"error arg for update select\",\n\t[ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE]: \"error arg find type\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE]: \"Include/Exclude:\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON]: \"Start\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT]: \"Wait...\",\n\t[ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT]: \"Enable default NIF\",\n\t[ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN]: \"Enable event for learn mode\",\n\t[ControllerUiLangClassId.MESSAGE_START_LEARN]: \"Start learn mode\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT]: \"Learn timout\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART]: \"Learn timeout. Reloading\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART]: \"Included. Reloading\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART]: \"Excluded. Reloading\",\n\t[ControllerUiLangClassId.PROCESS_CONTINUE]: \"Continue\",\n\t[ControllerUiLangClassId.PROCESS_CONTINUE_TITLE]: \"\",\n\t[ControllerUiLangClassId.PROCESS_STOP]: \"Stop\",\n\t[ControllerUiLangClassId.PROCESS_STOP_TITLE]: \"\",\n\t[ControllerUiLangClassId.PROCESS_REPEAT]: \"Repeat\",\n\t[ControllerUiLangClassId.PROCESS_REPEAT_TITLE]: \"\",\n\t[ControllerUiLangClassId.PROCESS_ABORT]: \"Abort\",\n\t[ControllerUiLangClassId.PROCESS_ABORT_TITLE]: \"\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE]: \"Ready for inclusion/exclusion by you controller\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO]: \"Could not get a link to the information needed for migration\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_UPDATE]: \"Failed to update\",\n\t[ControllerUiLangClassId.MIGRATION_LAST_UPDATE_DETECT]: \"After the update, the firmware could not be detected\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE]: \"The type of the updated firmware does not match\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION]: \"After the update the version is not what it should be\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_CHANGE_REGION]: \"Failed to change frequency\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE]: \"No support for exclusion/inclusion\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE]: \"Turn on exclusion mode on you controller\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE]: \"Learn completed\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_DETECT]: \"Сould not be detected\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE]: \"
Turn on inclusion mode on you controller
When inclusion starts, you have to select all the supported security keys and use the following security code:
${dsk}
\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY]: \"No support for dump key\",\n\t[ControllerUiLangClassId.MESSAGE_READ_S2_KEY]: \"Reading S2 keys\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE]: \"The required firmware is not in the database\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR]: \"Long Range is not supported\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP]: \"Backup is not supported\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_SEE_LOG]: \"Failed - see log\",\n\t[ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER]: \"
The inclusion happeded without the required keys.
Please turn on exclusion mode on you controller
\",\n\t[ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_SUCESS]: \"Success\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY]: \"
These are all the keys that we were able to read, is everything correct or will you try again?
\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP]: \"An error occurred, would you like to try this step again or abort?\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE]: \"The type of the firmware does not match\",\n};","import {WEB_TOOLS_BETA} from \"../other/define\"\n\nimport {ControllerUiLangClassId} from \"../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../lang/ui_lang\"\n\nexport {ControllerUiLogClass};\n\nclass ControllerUiLogClass {\n\tprivate readonly locale:ControllerUiLangClass;\n\tprivate readonly el_log:HTMLElement;\n\n\tprivate _log(txt:string): void {\n\t\tthis.el_log.innerHTML += txt;\n\t\tthis.el_log.scrollTop = this.el_log.scrollHeight;\n\t}\n\n\tpublic getLog(): string {\n\t\tlet i:number, txt:string;\n\n\t\tconst childNodes:NodeListOf = this.el_log.childNodes;\n\t\ti = 0x0;\n\t\ttxt = \"\";\n\t\twhile (i < childNodes.length) {\n\t\t\tconst child = childNodes[i];\n\t\t\ttxt = txt + child.textContent + \"\\n\";\n\t\t\ti++;\n\t\t}\n\t\treturn (txt);\n\t}\n\n\tpublic info(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis._log('
' + txt + \"
\");\n\t}\n\n\tpublic warning(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis._log('
' + txt + \"
\");\n\t}\n\n\tpublic error(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis._log('
' + txt + \"
\");\n\t\tif (WEB_TOOLS_BETA == true)\n\t\t\tconsole.error(txt);\n\t}\n\n\tpublic infoStart(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis.info(txt + \"...\");\n\t}\n\n\tpublic infoDone(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis.info(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_DONE));\n\t}\n\n\tpublic errorFalled(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis.error(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED));\n\t}\n\n\tpublic errorFalledCode(txt:string|ControllerUiLangClassId, code:number): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis.error(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED_CODE).replace('{{code}}', code.toString()));\n\t}\n\n\tpublic errorUnsupport(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis.error(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_UNSUPPORTED));\n\t}\n\n\tpublic errorNotFindElement(txt:string): void {\n\t\tthis.error(this.locale.getLocale(ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT).replace('{{element}}', txt));\n\t}\n\n\tpublic errorXhrTimeout(url:string): void {\n\t\tthis.error(this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_TIMEOUT).replace('{{url}}', url));\n\t}\n\n\tpublic errorXhrError(url:string): void {\n\t\tthis.error(this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_ERROR).replace('{{url}}', url));\n\t}\n\n\tpublic errorXhrInvalidData(url:string): void {\n\t\tthis.error(this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', url));\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass) {\n\t\tthis.locale = locale;\n\t\tconst el:HTMLElement = document.createElement(\"section\");\n\t\tel.className = \"ZUnoRazberryModalContentSection_table\";\n\t\tconst el_section_log_header:HTMLElement = document.createElement(\"h3\");\n\t\tel_section_log_header.textContent = this.locale.getLocale(ControllerUiLangClassId.LOG_HEADER)\n\t\tel.appendChild(el_section_log_header);\n\t\tconst el_text:HTMLElement = document.createElement(\"section\");\n\t\tel_text.className = \"ZUnoRazberryModalContentSectionLog_section_txt\";\n\t\tel.appendChild(el_text);\n\t\tthis.el_log = el_text;\n\t\tel_section.appendChild(el);\n\t}\n}","export {WEB_TOOLS_VERSION, WEB_TOOLS_BETA};\n\ndeclare const __VERSION__: string;\ndeclare const __BETA__: boolean;\n\nconst WEB_TOOLS_VERSION:string = __VERSION__;\nconst WEB_TOOLS_BETA:boolean = __BETA__;\n","export {\tsleep, checksum, calcSigmaCRC16, costruct_int, hexToBytes, arrayToStringHex, versionNumberToString, intToBytearrayLsbMsb, intToBytearrayMsbLsb, versionNumberToStringSlave, numberToStringHex, conv2Decimal, toString,\n\t\t\tconv2DecimalPadding, version_str_to_int, version_int_to_str, splitHexBuff\n};\n\nfunction toString(array:Array): string {\n\tlet result:string;\n\n\tresult = \"\";\n\tfor (let i = 0; i < array.length; i++) {\n\t\tresult += String.fromCharCode(array[i]);\n\t}\n\treturn result;\n}\n\nfunction numberToStringHex(num:number): string {\n\treturn (((num >> 24) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 16) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 8) & 0xFF).toString(0x10).padStart(2, '0') + ((num) & 0xFF).toString(0x10).padStart(2, '0'));\n}\n\nfunction versionNumberToString(version:number): string {\n\tconst txt:string = String((version >> 24) & 0xFF).padStart(2, '0') + \".\" + String((version >> 16) & 0xFF).padStart(2, '0') + \".\" + String((version >> 0x8) & 0xFF).padStart(2, '0') + \".\" + String((version) & 0xFF).padStart(2, '0')\n\treturn (txt)\n}\n\nfunction versionNumberToStringSlave(version:number): string {\n\tconst txt:string = String((version >> 24) & 0xFF).padStart(2, '0') + \".\" + String((version >> 16) & 0xFF).padStart(2, '0') + \".\" + String((version) & 0xFFFF)\n\treturn (txt)\n}\n\nfunction arrayToStringHex(data:Array|Uint8Array):string {\n\tlet str_hex:string, i:number;\n\n\tstr_hex = \"\";\n\ti = 0x0;\n\twhile (i < data.length) {\n\t\tstr_hex = str_hex + data[i].toString(0x10).padStart(2, '0');\n\t\ti++;\n\t}\n\treturn (str_hex);\n}\n\nfunction splitHexBuff(data:Array|Uint8Array):string {\n\tlet str_hex:string, i:number;\n\n\tstr_hex = \"\";\n\ti = 0x0;\n\twhile (true) {\n\t\tstr_hex = str_hex + data[i].toString(0x10).padStart(2, '0').toUpperCase();\n\t\ti++;\n\t\tif (i >= data.length)\n\t\t\tbreak ;\n\t\tstr_hex = str_hex + \" \";\n\t}\n\treturn (str_hex);\n}\n\n\nfunction hexToBytes(hex:string):Array|undefined {\n\tlet i:number;\n\n\tif (hex.length == 0x0)\n\t\treturn (undefined);\n\tif ((hex.length & 0x1) != 0x0)\n\t\treturn (undefined);\n\tconst bytes = [];\n\ti = 0x0;\n\twhile (i < hex.length) {\n\t\ttry {\n\t\t\tbytes.push(parseInt(hex.substring(i, i + 0x2), 0x10));\n\t\t} catch (error) {\n\t\t\treturn (undefined);\n\t\t}\n\t\ti = i + 0x2;\n\t}\n\treturn (bytes);\n}\n\nfunction sleep(ms:number):Promise {\n\treturn new Promise(resolve => setTimeout(resolve, ms));\n}\n\nfunction checksum(data:Array|Uint8Array):number {\n\tlet ret = 0xff;\n\tlet i = 0x0;\n\n\twhile (i < data.length) {\n\t\tret = ret ^ data[i];\n\t\ti++;\n\t}\n\treturn (ret);\n}\n\nfunction calcSigmaCRC16(crc:number, data:Array|Uint8Array, offset:number, llen:number):number {\n\tlet new_bit:number, wrk_data:number, b:number, a:number, bit_mask:number;\n\tconst bin_data:Array|Uint8Array = data;\n\tconst CRC_POLY:number = 0x1021;\n\n\twhile (llen != 0) {\n\t\tllen -= 1;\n\t\tif (offset >= bin_data.length)\n\t\t\twrk_data = 0xFF;\n\t\telse\n\t\t\twrk_data = bin_data[offset];\n\t\toffset += 1;\n\t\tbit_mask = 0x80;\n\t\twhile (bit_mask != 0) {\n\t\t\ta = 0;\n\t\t\tb = 0;\n\t\t\tif ((wrk_data & bit_mask) != 0)\n\t\t\t\ta = 1;\n\t\t\tif ((crc & 0x8000) != 0)\n\t\t\t\tb = 1;\n\t\t\tnew_bit = a ^ b;\n\t\t\tcrc <<= 1;\n\t\t\tcrc = crc & 0xffff;\n\t\t\tif (new_bit == 1) {\n\t\t\t\tcrc ^= CRC_POLY;\n\t\t\t}\n\t\t\tbit_mask >>= 1;\n\t\t}\n\t}\n\treturn (crc);\n}\n\nfunction costruct_int(arr:Array|Uint8Array, n:number, inv:boolean = true): number {\n\tlet val:number, i:number, indx:number;\n\n\tval = 0;\n\ti = 0x0;\n\twhile (i < arr.length) {\n\t\tval <<= 8;\n\t\tindx = i;\n\t\tif (inv == true)\n\t\t\tindx = n-1-i\n\t\tif ((indx < arr.length) && (indx >= 0))\n\t\t\tval += arr[indx];\n\t\ti++;\n\t}\n\tval = val >>> 0x0;//The only JavaScript operator that works using unsigned 32-bit integers is >>>. You can exploit this to convert a signed-integer-in-Number you've been working on with the other bitwise operators to an unsigned-integer-in-Number:\n\treturn (val);\n}\n\nfunction intToBytearrayLsbMsb(data:number, size:number = 0x4):Uint8Array {\n\tlet i:number;\n\n\tconst array:Uint8Array = new Uint8Array(size);\n\ti = 0x0;\n\twhile (i < array.length) {\n\t\tarray[i] = data & 0xFF;\n\t\tdata = data >> 8;\n\t\ti = i + 1;\n\t}\n\treturn (array);\n}\n\nfunction intToBytearrayMsbLsb(data:number, size:number = 0x4):Uint8Array {\n\tlet i:number;\n\n\tconst array:Uint8Array = new Uint8Array(size);\n\ti = 0x0;\n\twhile (size != 0) {\n\t\tsize--;\n\t\tarray[i] = (data >> (8 * size)) & 0xFF;\n\t\ti++;\n\t}\n\treturn (array);\n}\n\nfunction conv2DecimalPadding(num:number, max:number): string {\n\tlet num_str = num.toString(0xA);\n\n\twhile (num_str.length < max)\n\t\tnum_str = '0' + num_str;\n\treturn (num_str);\n}\n\n\nfunction conv2Decimal(buff:Uint8Array, separator:string = \"-\"): string {\n\tlet i:number, text:string, v:number;\n\n\ttext = \"\";\n\ti = 0x0;\n\twhile (i < (buff.length / 2)) {\n\t\tv = buff[ (i * 2)];\n\t\tv <<= 8;\n\t\tv += buff[ (i * 2) + 1];\n\t\tif(i != 0)\n\t\t\ttext += separator;\n\t\ttext += conv2DecimalPadding(v, 5);\n\t\ti = i + 1;\n\t}\n\treturn (text)\n}\n\nfunction version_str_to_int(version:string): number {\n\tlet i:number, out:number;\n\n\tconst version_list:Array = version.split(\".\");\n\ti = version_list.length;\n\tout = 0x0;\n\twhile (i != 0x0) {\n\t\tout = out | (Number(version_list[i - 0x1]) << (0x8 * (version_list.length - i)));\n\t\ti--;\n\t}\n\treturn (out)\n}\n\nfunction version_int_to_str(version:number, min:number): string {\n\tlet out:string, i:number;\n\n\tconst list:Array = [];\n\twhile (version != 0x0) {\n\t\tlist.unshift(version & 0xFF);\n\t\tversion = version >> 0x8;\n\t}\n\twhile (list.length < min) {\n\t\tlist.unshift(0x0);\n\t}\n\tout = \"\";\n\ti = 0x0;\n\twhile (true) {\n\t\tout = out + String(list[i]).padStart(2, '0')\n\t\ti++;\n\t\tif (i < list.length) {\n\t\t\tout = out + \".\";\n\t\t\tcontinue ;\n\t\t}\n\t\tbreak ;\n\t}\n\treturn (out)\n}\n","import {ModeOfOperation} from 'aes-js';\nimport {v4 as uuid_v4, parse as uuid_parse} from 'uuid';\n\nimport {SapiRegionClass} from \"./region\";\nimport {SapiClass, SapiClassStatus, SapiClassRet, SapiClassFuncId, SapiClassSerialAPISetupCmd, SapiClassNodeIdBaseType, SapiClassUpdateProcess, SapiClassDetectType, SapiClassDetectWait} from \"./sapi\";\nimport {costruct_int, calcSigmaCRC16, intToBytearrayMsbLsb} from \"../other/utilities\";\nimport {controller_vendor_ids} from \"./vendorIds\";\n\nimport {HardwareChipClass} from \"../hardware/chip\"\n\nexport {ControllerSapiClassLearnMode, ControllerSapiClasstInitData, ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassCapabilities, ControllerSapiClassRegion, ControllerSapiClassLicense, ControllerSapiClassBoardInfo, ControllerSapiClassPower, ControllerSapiClasstNetworkIDs};\n\ninterface ControllerSapiClassLearnMode\n{\n\tstatus:ControllerSapiClassStatus;\n\tseq:number;\n}\n\n\nenum ControllerSapiClassStatus\n{\n\tOK = SapiClassStatus.OK,\n\tWRONG_LENGTH_CMD = SapiClassStatus.LAST_STATUS,\n\tUNSUPPORT_CMD,\n\tUNSUPPORT_SUB_CMD,\n\tWRONG_IN_DATA,\n\tINVALID_ARG,\n\tNOT_SET,\n\tWRONG_OUT_STATUS,\n\tWRONG_OUT_SUB_CMD,\n\tWRONG_SEQ,\n\tWRONG_CRC,\n\tWRONG_LENGTH_SEQ,\n\tWRONG_LENGTH_CALLBACK_STATUS,\n\tWRONG_LENGTH_CALLBACK,\n\tNOT_INIT,\n\tNOT_RAZBERRY,\n\tINVALID_SET,\n\tWRONG_SEND_DATA_LENGHT,\n\tUNKNOWN,\n\tTIMEOUT,\n\tPROCESS,\n\tLEARN_MODE_FALED,\n\tWRONG_RESPONSE_STATUS,\n\tWRONG_RESPONSE_LENGTH,\n\tWRONG_CALLBACK_LENGTH,\n\tWRONG_CALLBACK_SEQ,\n\tWRONG_CALLBACK_STATUS,\n\tTRANSMIT_COMPLETE_NO_ACK,\n}\n\ninterface ControllerSapiClassCapabilities\n{\n\tstatus:ControllerSapiClassStatus;\n\tApiVersion:number;\n\tApiRevision:number;\n\tVendorID:number;\n\tVendorIDName:string;\n\tVendorIDWebpage?:string;\n\tcmd_mask:Array;\n}\n\n\ninterface ControllerSapiClassRegion\n{\n\tstatus:ControllerSapiClassStatus;\n\tregion:string;\n\tregion_array:string[];\n}\n\ninterface ControllerSapiClassPower\n{\n\tstatus:ControllerSapiClassStatus;\n\tpower_raw:number;\n\tstep:number;\n\tmin:number;\n\tmax:number;\n}\n\ninterface ControllerSapiClassLicenseFlag\n{\n\tname:string;\n\ttitle:string;\n\tactive:boolean;\n}\n\ninterface ControllerSapiClassLicense\n{\n\tstatus:ControllerSapiClassStatus;\n\tvallid:boolean;\n\tvendor_id:number\n\tmax_nodes:number;\n\tcount_support:number;\n\tcrc16:number;\n\tflags:{[key:number]: ControllerSapiClassLicenseFlag};\n}\n\ninterface ControllerSapiClassBoardInfo\n{\n\tstatus:ControllerSapiClassStatus;\n\tcore_version:number;\n\tbuild_seq:number;\n\tbuild_ts:number;\n\thw_revision:number;\n\tsdk_version:number;\n\tchip_uuid:Array;\n\tsn_raw:Array;\n\tbootloader_version:number;\n\tbootloader_crc32:number;\n\tlock_status:number;\n\tlock_status_name:string;\n\tse_version:number\n\tchip_family:number;\n\tchip_type:number;\n\tkeys_hash:number;\n}\n\ninterface ControllerSapiClasstNetworkIDs\n{\n\tstatus:ControllerSapiClassStatus;\n\thome:number;\n\tnode_id:number;\n}\n\ninterface ControllerSapiClasstInitData\n{\n\tstatus:ControllerSapiClassStatus;\n\tnode_list:Array\n}\n\n// ------------------------------------------------------------------------------------------------------\n\ninterface ControllerOutData\n{\n\tdata:Array;\n}\n\ninterface ControllerSapiClassSerialApiSetup\n{\n\tstatus:ControllerSapiClassStatus;\n\tdata:Array;\n}\n\nenum ControllerSapiClassLockStatus\n{\n\tUNLOCKED = 0x0,\n\tDBG_LOCKED,\n\tAPP_LOCKED,\n\tFULL_LOCKED\n}\n\nenum ControllerSapiClassLearMode\n{\n\tDISABLED = 0x0,\n\tINCLUSION_EXCLUSION = 0x1,\n\tWIDE_INCLUSION = 0x2,\n\tWIDE_EXCLUSION = 0x3,\n}\n\nclass ControllerSapiClass {\n\tprivate readonly RAZ7_LICENSE_CMD\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0xF5;\n\tprivate readonly RAZ7_LICENSE_CRC\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1D0F;\n\tprivate readonly RAZ7_LICENSE_STATUS_OK\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x00;\n\tprivate readonly RAZ7_LICENSE_GET_SUBCMD\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x00;\n\tprivate readonly RAZ7_LICENSE_NONCE_SUBCMD\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tprivate readonly RAZ7_LICENSE_SET_SUBCMD\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tprivate readonly RAZ7_LICENSE_CMD_LEN\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x30;\n\tprivate readonly RAZ7_LICENSE_NONCE_LEN\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tprivate readonly RAZ7_LICENSE_IV_LEN\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x10;\n\tprivate readonly RAZ7_FLAG_OFFSET\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03\n\tprivate readonly RAZ7_FLAGS_SIZE\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tprivate readonly RAZ7_COUNT_SUPPORT_OFFSET\t\t\t\t\t\t\t\t\t\t\t\t\t= this.RAZ7_FLAG_OFFSET + this.RAZ7_FLAGS_SIZE\n\n\tprivate readonly LICENSE_KEY_LONG_RANGE:number\t\t\t\t\t\t\t\t\t\t\t\t= 0x5;\n\tprivate readonly LICENSE_KEY_BACKUP:number\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x2;\n\tprivate readonly license_flags: {[key:number]: ControllerSapiClassLicenseFlag}\t\t\t\t=\n\t{\n\t\t0x00: {name:\"Controller Static API\", title: \"Enables static cotroller mode. User can switch Razberry to \\\"staic\\\" mode instead of default \\\"bridge\\\"\", active:false},\n\t\t0x01: {name:\"Allow max RF power\", title: \"If set user can increase power amplifier up to 24dBm. Without that flag the user is limited by 7dBm\", active:false},\n\t\t0x02: {name:\"Backup/Restore\", title: \"Enables backup/restore operations\", active:false},\n\t\t0x03: {name:\"Battery save on sleeping\", title: \"If controller doesn't respond to WakeUp Notification, razberry responds itself with WakUp No more information. This prevents device battery discharge\", active:false},\n\t\t0x04: {name:\"Advanced network diagnostics\", title: \"Enables backward RSSI dump and other extendended ZME features\", active:false},\n\t\t0x05: {name:\"Z-Wave Long Range\", title: \"Enables Z-Wave Long Range support\", active:false},\n\t\t0x06: {name:\"Fast communications\", title: \"Enables UART baudrate setting command\", active:false},\n\t\t0x07: {name:\"Change vendor ID\", title: \"Maps subvendor to vendor field in controller information\", active:false},\n\t\t0x08: {name:\"Promiscuous mode (Zniffer)\", title: \"Enables promisc functionality. Controller dumps all the packages in its network\", active:false},\n\t\t0x0A: {name:\"RF jamming detection\", title: \"Enables jamming detection notifications\", active:false},\n\t\t0x0B: {name:\"Zniffer in PTI mode\", title: \"Enables Packet Trace Interface. Device dumps all the packets it sends and receives. This uses external UART interface and doesn't consume time of the main core\", active:false},\n\t\t0x0C: {name:\"Zniffer and Advanced Radio Tool\", title: \"Razberry works as direct transmitter\", active:false},\n\t};\n\n\tprivate readonly sapi:SapiClass;\n\tprivate readonly raz_key:Array\t\t\t\t\t\t\t\t\t\t\t\t\t\t= [0x86, 0x78, 0x02, 0x09, 0x8D, 0x89, 0x4D, 0x41, 0x8F, 0x3F, 0xD2, 0x04, 0x2E, 0xEC, 0xF5, 0xC4, 0x05, 0x8C, 0xB9, 0x36, 0xA9, 0xCC, 0x4B, 0x87, 0x91, 0x39, 0x36, 0xB7, 0x43, 0x18, 0x37, 0x42];\n\n\tprivate region:SapiRegionClass\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= new SapiRegionClass();\n\tprivate node_base:SapiClassNodeIdBaseType\t\t\t\t\t\t\t\t\t\t\t\t\t= SapiClassNodeIdBaseType.TYPE_8_BIT;\n\tprivate seqNo:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1;\n\tprivate capabilities:ControllerSapiClassCapabilities\t\t\t\t\t\t\t\t\t\t= {status:ControllerSapiClassStatus.NOT_INIT, ApiVersion:0x0, ApiRevision:0x0, VendorID:0x0, VendorIDName:\"Unknown\", cmd_mask:[]};\n\tprivate license:ControllerSapiClassLicense\t\t\t\t\t\t\t\t\t\t\t\t\t= {status:ControllerSapiClassStatus.NOT_INIT, vallid:false, vendor_id:0x0, max_nodes:0x0, count_support:0x0, flags:[], crc16:0x0};\n\tprivate board_info:ControllerSapiClassBoardInfo\t\t\t\t\t\t\t\t\t\t\t\t= {\tstatus:ControllerSapiClassStatus.NOT_INIT, core_version:0x0, build_seq:0x0, build_ts:0x0, hw_revision:0x0, sdk_version:0x0, chip_uuid:[], sn_raw:[], bootloader_version:0x0, bootloader_crc32:0x0,lock_status:0x0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlock_status_name:\"\", se_version:0x0, chip_type:HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family:HardwareChipClass.FAMILY_ZGM13, keys_hash:0x2C6FAF52};\n\n\tprivate _set_seq(): number {\n\t\tconst seq:number = this.seqNo;\n\t\tthis.seqNo += 1;\n\t\tthis.seqNo &= 0XFF;// 1 byte\n\t\tif (this.seqNo == 0x0)\n\t\t\tthis.seqNo++;\n\t\treturn (seq);\n\t}\n\n\tprivate _test_cmd(cmd:number): boolean {\n\t\tif (this.capabilities.status != ControllerSapiClassStatus.OK)\n\t\t\treturn (false);\n\t\tif (cmd <= 0x0)\n\t\t\treturn (false);\n\t\tcmd--;\n\t\tif ((cmd / 0x8) >= this.capabilities.cmd_mask.length)\n\t\t\treturn (false);\n\t\tif ((this.capabilities.cmd_mask[(cmd - (cmd % 0x8)) / 0x8] & (0x1 << (cmd % 0x8))) == 0x0)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate async _serial_api_setup(sub:SapiClassSerialAPISetupCmd, args:Array): Promise {\n\t\tconst out:ControllerSapiClassSerialApiSetup = {status:ControllerSapiClassStatus.OK, data:[]};\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_SETUP) == false) {\n\t\t\tout.status = ControllerSapiClassStatus.UNSUPPORT_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tconst serial_api_setup:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SETUP, [sub].concat(args));\n\t\tif (serial_api_setup.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((serial_api_setup.status as unknown) as ControllerSapiClassStatus);\n\t\t\treturn (out);\n\t\t}\n\t\tif (serial_api_setup.data.length < 0x1) {\n\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tif (serial_api_setup.data[0x0] == SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_UNSUPPORTED) {\n\t\t\tout.status = ControllerSapiClassStatus.UNSUPPORT_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tif (serial_api_setup.data[0x0] != sub) {\n\t\t\tout.status = ControllerSapiClassStatus.UNSUPPORT_SUB_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tout.data = serial_api_setup.data.slice(0x1, serial_api_setup.data.length);\n\t\treturn (out);\n\t}\n\n\tprivate async _get_capabilities(out:ControllerSapiClassCapabilities): Promise {\n\t\tconst capabilities_info:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, []);\n\t\tif (capabilities_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((capabilities_info.status as unknown) as ControllerSapiClassStatus);\n\t\t\treturn ;\n\t\t}\n\t\tif (capabilities_info.data.length <= 0x8) {\n\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn ;\n\t\t}\n\t\tout.status = ControllerSapiClassStatus.OK;\n\t\tout.ApiVersion = capabilities_info.data[0x0];\n\t\tout.ApiRevision = capabilities_info.data[0x1];\n\t\tout.VendorID = capabilities_info.data[0x2] << 0x8 | capabilities_info.data[0x3];\n\t\tout.cmd_mask = capabilities_info.data.slice(0x8, capabilities_info.data.length);\n\t\tif (controller_vendor_ids[out.VendorID] != undefined) {\n\t\t\tout.VendorIDName = controller_vendor_ids[out.VendorID].Name;\n\t\t\tout.VendorIDWebpage = controller_vendor_ids[out.VendorID].Webpage;\n\t\t}\n\t}\n\n\tprivate async _readNVM(addr:number, size:number): Promise {\n\t\treturn (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF]));\n\t}\n\n\tprivate async _license_send(out:ControllerOutData, data:Array): Promise {\n\t\tlet nonse_info:SapiClassRet;\n\t\n\t\tconst seq:number = this._set_seq();\n\t\tnonse_info = await this.sapi.sendCommandUnSz(this.RAZ7_LICENSE_CMD, data.concat([seq]));\n\t\tif (nonse_info.status != SapiClassStatus.OK)\n\t\t\treturn ((nonse_info.status as unknown) as ControllerSapiClassStatus);\n\t\tif (nonse_info.data.length < 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (nonse_info.data[0x0] != this.RAZ7_LICENSE_STATUS_OK)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_OUT_STATUS);\n\t\tnonse_info = await this.sapi.recvIncomingRequest(1000, this.RAZ7_LICENSE_CMD);\n\t\tif (nonse_info.status != SapiClassStatus.OK)\n\t\t\treturn ((nonse_info.status as unknown) as ControllerSapiClassStatus);\n\t\tif (nonse_info.data.length < 0x1)//0x1 seq\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_SEQ);\n\t\tif (nonse_info.data[0x0] != seq)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_SEQ);\n\t\tout.data = nonse_info.data.slice(0x1, nonse_info.data.length);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tprivate _license_decrypt(data:Array, iv:Array): Array|undefined {\n\t\tconst aesCtr = new ModeOfOperation.ofb(this.raz_key, iv);\n\t\tconst decryptedBytes:Uint8Array = aesCtr.decrypt(data);\n\t\tconst crc16:number = decryptedBytes[decryptedBytes.length - 0x2] |(decryptedBytes[decryptedBytes.length - 0x1] << 0x8);\n\t\tif (calcSigmaCRC16(this.RAZ7_LICENSE_CRC, decryptedBytes, 0x0, decryptedBytes.length - 0x2) != crc16)\n\t\t\treturn (undefined);\n\t\treturn (Array.from(decryptedBytes));\n\t}\n\n\tprivate _license_encrypt(sub_cmd:number, data:Array, iv:Array): Array {\n\t\tconst pack:Array = [sub_cmd].concat(data);\n\t\twhile(pack.length < (this.RAZ7_LICENSE_CMD_LEN - 0x2))\n\t\t\tpack.push(0xFF);\n\t\tconst crc:number = calcSigmaCRC16(this.RAZ7_LICENSE_CRC, pack, 0, pack.length);\n\t\tpack.push(crc & 0xFF);\n\t\tpack.push((crc >> 0x8) & 0xFF);\n\t\tconst aesCtr = new ModeOfOperation.ofb(this.raz_key, iv);\n\t\tconst crypted:Array = Array.from(aesCtr.encrypt(pack));\n\t\treturn (crypted);\n\t}\n\n\tprivate async _license_get_nonce(out:ControllerOutData): Promise {\n\t\tconst status:ControllerSapiClassStatus = await this._license_send(out, [])\n\t\tif (status != ControllerSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tif (out.data.length != this.RAZ7_LICENSE_CMD_LEN + this.RAZ7_LICENSE_IV_LEN)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK);\n\t\tconst decrypt:Array|undefined = this._license_decrypt(out.data.slice(0x0, 0x0 + this.RAZ7_LICENSE_CMD_LEN), out.data.slice(this.RAZ7_LICENSE_CMD_LEN, this.RAZ7_LICENSE_CMD_LEN + this.RAZ7_LICENSE_IV_LEN));\n\t\tif (decrypt == undefined)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CRC);\n\t\tif (decrypt.length < 0x2 + this.RAZ7_LICENSE_NONCE_LEN)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK);\n\t\tif (decrypt[0x0] != this.RAZ7_LICENSE_NONCE_SUBCMD)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_OUT_STATUS);\n\t\tif (decrypt[0x1] != this.RAZ7_LICENSE_STATUS_OK)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_OUT_STATUS);\n\t\tout.data = decrypt.slice(0x2, 0x2 + this.RAZ7_LICENSE_NONCE_LEN);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tprivate async _license(sub_cmd:number, data:Array, out:ControllerOutData): Promise {\n\t\tlet status:ControllerSapiClassStatus;\n\n\t\tif (this._test_cmd(this.RAZ7_LICENSE_CMD) == false)\n\t\t\treturn (ControllerSapiClassStatus.UNSUPPORT_CMD);\n\t\tif (this.isRazberry7() == false)\n\t\t\treturn (ControllerSapiClassStatus.NOT_RAZBERRY);\n\t\tstatus = await this._license_get_nonce(out);\n\t\tif (status != ControllerSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst iv_y:Array = Array.from(uuid_parse(uuid_v4())).slice(0x0, 0x8);\n\t\tconst iv:Array = out.data.concat(iv_y);\n\t\tconst crypted:Array = this._license_encrypt(sub_cmd, data, iv);\n\t\tstatus = await this._license_send(out, crypted.concat(iv_y));\n\t\tif (status != ControllerSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst decrypt:Array|undefined = this._license_decrypt(out.data, iv);\n\t\tif (decrypt == undefined)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CRC);\n\t\tif (decrypt.length < 0x2)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK);\n\t\tif (decrypt[0x0] != sub_cmd)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_OUT_SUB_CMD);\n\t\tif (decrypt[0x1] != this.RAZ7_LICENSE_STATUS_OK)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_OUT_STATUS);\n\t\tout.data = decrypt.slice(0x2, decrypt.length);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tprivate _license_decode(license_info:ControllerSapiClassLicense, raw_license:Array): void {\n\t\tlet byte_i:number, bit_i:number;\n\n\t\tif (raw_license.length < 32)\n\t\t\treturn ;\n\t\traw_license = raw_license.slice(0, 32);\n\t\tconst crc16:number = raw_license[raw_license.length - 0x2] |(raw_license[raw_license.length - 0x1] << 0x8);\n\t\tif (calcSigmaCRC16(this.RAZ7_LICENSE_CRC, raw_license, 0x0, raw_license.length - 0x2) != crc16)\n\t\t\treturn ;\n\t\tlicense_info.crc16 = crc16;\n\t\tlicense_info.vallid = true;\n\t\tlicense_info.vendor_id = (raw_license[0x0] << 0x8) | raw_license[0x1];\n\t\tlicense_info.max_nodes = raw_license[0x2];\n\t\tlicense_info.count_support = (raw_license[this.RAZ7_COUNT_SUPPORT_OFFSET+1] << 8) + raw_license[this.RAZ7_COUNT_SUPPORT_OFFSET];\n\t\tbyte_i = 0x0;\n\t\twhile (byte_i < this.RAZ7_FLAGS_SIZE) {\n\t\t\tbit_i = 0x0;\n\t\t\twhile (bit_i < 0x8) {\n\t\t\t\tif ((raw_license[this.RAZ7_FLAG_OFFSET + byte_i] & (0x1 << bit_i)) != 0x0) {\n\t\t\t\t\tif (license_info.flags[byte_i * 0x8 + bit_i] != undefined)\n\t\t\t\t\t\tlicense_info.flags[byte_i * 0x8 + bit_i].active = true;\n\t\t\t\t}\n\t\t\t\tbit_i++;\n\t\t\t}\n\t\t\tbyte_i++;\n\t\t}\n\t\treturn ;\n\t}\n\n\tprivate async _license_get(license_info:ControllerSapiClassLicense): Promise {\n\t\tconst out:ControllerOutData = {data:[]};\n\t\tlicense_info.flags = this.license_flags;\n\t\tlicense_info.status = await this._license(this.RAZ7_LICENSE_GET_SUBCMD, [], out);\n\t\tif (license_info.status != ControllerSapiClassStatus.OK)\n\t\t\treturn ;\n\t\tthis._license_decode(license_info, out.data);\n\t\treturn ;\n\t}\n\n\tprivate async _get_board_info(out:ControllerSapiClassBoardInfo): Promise {\n\t\tlet lock_status_name:string;\n\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER) == false) {\n\t\t\tout.status = ControllerSapiClassStatus.UNSUPPORT_CMD;\n\t\t\treturn ;\n\t\t}\n\t\tconst board_info:SapiClassRet = await this._readNVM(0xFFFF00, 0x31);\n\t\tif (board_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((board_info.status as unknown) as ControllerSapiClassStatus);\n\t\t\treturn ;\n\t\t}\n\t\tconst data:Array = board_info.data;\n\t\tif (data.length < 49) {\n\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn ;\n\t\t}\n\t\tout.status = ControllerSapiClassStatus.OK;\n\t\tout.core_version = costruct_int(data.slice(0, 0 + 2),2, false);\n\t\tout.build_seq = costruct_int(data.slice(2, 2 +4), 4, false);\n\t\tout.build_ts = costruct_int(data.slice(6, 6 + 4), 4, false);\n\t\tout.hw_revision = costruct_int(data.slice(10, 10 + 2), 2, false);\n\t\tout.sdk_version = costruct_int(data.slice(12, 12 + 4), 4, false);\n\t\tout.chip_uuid = data.slice(16, 16 + 8);\n\t\tout.sn_raw = data.slice(24,40);\n\t\tout.bootloader_version = costruct_int(data.slice(40, 44), 4, false);\n\t\tout.bootloader_crc32 = costruct_int(data.slice(44, 48), 4, false);\n\t\tout.lock_status = data[48];\n\t\tswitch (data[48]) {\n\t\t\tcase ControllerSapiClassLockStatus.UNLOCKED:\n\t\t\t\tlock_status_name = \"UNLOCKED\";\n\t\t\t\tbreak ;\n\t\t\tcase ControllerSapiClassLockStatus.DBG_LOCKED:\n\t\t\t\tlock_status_name = \"DBG_LOCKED\";\n\t\t\t\tbreak ;\n\t\t\tcase ControllerSapiClassLockStatus.APP_LOCKED:\n\t\t\t\tlock_status_name = \"APP_LOCKED\";\n\t\t\t\tbreak ;\n\t\t\tcase ControllerSapiClassLockStatus.FULL_LOCKED:\n\t\t\t\tlock_status_name = \"FULL_LOCKED\";\n\t\t\t\tbreak ;\n\t\t\tdefault:\n\t\t\t\tlock_status_name = \"UNKNOWN\";\n\t\t\t\tbreak ;\n\t\t}\n\t\tout.lock_status_name = lock_status_name;\n\t\tconst se_version_offset:number = 49;\n\t\tconst se_version_size:number = 0x4;\n\t\tif (data.length < se_version_offset + se_version_size)\n\t\t\treturn ;\n\t\tout.se_version = costruct_int(data.slice(se_version_offset, se_version_offset + se_version_size), se_version_size, false);\n\t\tconst chip_offset:number = se_version_offset + se_version_size;\n\t\tconst chip_size:number = 0x2;\n\t\tif (data.length < chip_offset + chip_size)\n\t\t\treturn ;\n\t\tout.chip_family = data[chip_offset];\n\t\tout.chip_type = data[chip_offset + 0x1];\n\t\tconst key_hash_offset:number = chip_offset + chip_size;\n\t\tconst key_hash_size:number = 0x4;\n\t\tif (data.length < key_hash_offset + key_hash_size)\n\t\t\treturn ;\n\t\tout.keys_hash = costruct_int(data.slice(key_hash_offset, key_hash_offset + key_hash_size), key_hash_size, false);\n\t}\n\n\tprivate async _begin(test:boolean):Promise {\n\t\tlet us_lr:boolean, eu_lr:boolean;\n\n\t\tawait this._get_capabilities(this.capabilities);\n\t\tif (test == true && this.capabilities.status != ControllerSapiClassStatus.OK)\n\t\t\treturn ;\n\t\tconst node_base_type:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET, [SapiClassNodeIdBaseType.TYPE_16_BIT]);\n\t\tif (node_base_type.data.length < 0x1 || node_base_type.data[0x0] == 0x0)\n\t\t\tthis.node_base = SapiClassNodeIdBaseType.TYPE_8_BIT;\n\t\telse\n\t\t\tthis.node_base = SapiClassNodeIdBaseType.TYPE_16_BIT;\n\t\tif (this.isRazberry7() == true) {\n\t\t\tawait this._license_get(this.license);\n\t\t\tawait this._get_board_info(this.board_info);\n\t\t\tus_lr = false;\n\t\t\teu_lr = false;\n\t\t\tif (this.license.status == ControllerSapiClassStatus.OK) {\n\t\t\t\tif (this.license.flags[this.LICENSE_KEY_LONG_RANGE] != undefined && this.license.flags[this.LICENSE_KEY_LONG_RANGE].active == true) {\n\t\t\t\t\tus_lr = true;\n\t\t\t\t\tconst version:number = (this.capabilities.ApiVersion << 0x8) | this.capabilities.ApiRevision;\n\t\t\t\t\tif (this.capabilities.status == ControllerSapiClassStatus.OK && version >= 0x72D)\n\t\t\t\t\t\teu_lr = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.region = new SapiRegionClass(us_lr, eu_lr);\n\t\t}\n\t\telse\n\t\t\tthis.region = new SapiRegionClass();\n\t\treturn ;\n\t}\n\n\tprivate _node_to_bytes(node:number): Uint8Array {\n\t\tif (this.node_base == SapiClassNodeIdBaseType.TYPE_16_BIT)\n\t\t\treturn (intToBytearrayMsbLsb(node, 0x2));\n\t\treturn (intToBytearrayMsbLsb(node, 0x1));\n\t}\n\n\tprivate async _load_file(addr:number, data:Uint8Array, process:SapiClassUpdateProcess|null): Promise {\n\t\tlet step:number, i:number, percentage:number;\n\t\tstep = this.getQuantumSize();\n\t\tpercentage = 0x0;\n\t\ti = 0x0\n\t\twhile (i < data.length) {\n\t\t\tif (i + step > data.length)\n\t\t\t\tstep = data.length - i;\n\t\t\tpercentage = (i * 100.0) / data.length;\n\t\t\tif (process != null)\n\t\t\t\tprocess(percentage);\n\t\t\tconst status:ControllerSapiClassStatus = await this.nvmWrite(addr, data.subarray(i, i + step));\n\t\t\tif (status != ControllerSapiClassStatus.OK)\n\t\t\t\treturn (status);\n\t\t\ti = i + step\n\t\t\taddr = addr + step\n\t\t}\n\t\tif (process != null && percentage < 100.00)\n\t\t\tprocess(100.00);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tprivate _isRazberry(): boolean {\n\t\tif (this.capabilities.status != ControllerSapiClassStatus.OK)\n\t\t\treturn (false);\n\t\tif (this.capabilities.VendorID == 0x0115 || this.capabilities.VendorID == 0x0147)\n\t\t\treturn (true);\n\t\treturn (false);\n\t}\n\n\tprivate async _learn_mode(mode:ControllerSapiClassLearMode): Promise {\n\t\tconst out:ControllerSapiClassLearnMode = {status:ControllerSapiClassStatus.OK, seq:0x0};\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE) == false) {\n\t\t\tout.status = ControllerSapiClassStatus.UNSUPPORT_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tconst seq:number = this._set_seq();\n\t\tconst send_mode:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE, [mode, seq]);\n\t\tif (send_mode.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((send_mode.status as unknown) as ControllerSapiClassStatus);\n\t\t\treturn (out);\n\t\t}\n\t\tif (send_mode.data.length != 0x1) {\n\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK_STATUS;\n\t\t\treturn (out);\n\t\t}\n\t\tif (send_mode.data[0x0] != 0x1) {\n\t\t\tout.status = ControllerSapiClassStatus.WRONG_CALLBACK_STATUS;\n\t\t\treturn (out);\n\t\t}\n\t\tout.seq = seq;\n\t\treturn (out);\n\t}\n\n\tpublic async getPower(): Promise {\n\t\tconst power_get_out:ControllerSapiClassPower = {status: ControllerSapiClassStatus.OK, power_raw:0x0, step:0x1, min:1, max:247};\n\t\tif (this.isRazberry7() == false) {\n\t\t\tpower_get_out.status = ControllerSapiClassStatus.NOT_RAZBERRY;\n\t\t\treturn (power_get_out);\n\t\t}\n\t\tconst power_get:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET, []);\n\t\tif (power_get.status != ControllerSapiClassStatus.OK) {\n\t\t\tpower_get_out.status = power_get.status\n\t\t\treturn (power_get_out);\n\t\t}\n\t\tif (power_get.data.length < 0x2) {\n\t\t\tpower_get_out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn (power_get_out);\n\t\t}\n\t\tif (power_get.data[0x1] != 0x0) {\n\t\t\tpower_get_out.status = ControllerSapiClassStatus.NOT_RAZBERRY;\n\t\t\treturn (power_get_out);\n\t\t}\n\t\tpower_get_out.power_raw = power_get.data[0x0];\n\t\treturn (power_get_out);\n\t}\n\n\tpublic async setPower(power_raw:number): Promise {\n\t\tif (this.isRazberry7() == false)\n\t\t\treturn (ControllerSapiClassStatus.NOT_RAZBERRY);\n\t\tconst power_set:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET, [power_raw, 0x0]);\n\t\tif (power_set.status != ControllerSapiClassStatus.OK)\n\t\t\treturn (power_set.status);\n\t\tif (power_set.data.length < 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (power_set.data[0x1] == 0x0)\n\t\t\treturn (ControllerSapiClassStatus.INVALID_SET);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tpublic isLr(region:string): boolean {\n\t\treturn (this.region.isLr(region));\n\t}\n\n\tpublic isLicenseSupportBackup(): boolean {\n\t\tif (this.license.status != ControllerSapiClassStatus.OK)\n\t\t\treturn (false);\n\t\tif (this.license.flags[this.LICENSE_KEY_BACKUP] != undefined && this.license.flags[this.LICENSE_KEY_BACKUP].active == true)\n\t\t\treturn (true);\n\t\treturn (false);\n\t}\n\n\tpublic async getRegion(): Promise {\n\t\tlet region:string|undefined;\n\n\t\tconst out:ControllerSapiClassRegion = {status:ControllerSapiClassStatus.OK, region:\"\", region_array:this.region.getListRegion()};\n\t\tif (this.isRazberry7() == true) {\n\t\t\tconst custom_region_info:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_PROPRIETARY_2, [0xFF]);\n\t\t\tif (custom_region_info.status != SapiClassStatus.OK) {\n\t\t\t\tout.status = ((custom_region_info.status as unknown) as ControllerSapiClassStatus);\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tif (custom_region_info.data.length < 0x1) {\n\t\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tregion = this.region.getNameRegionCustom(custom_region_info.data[0x0]);\n\t\t\tif (region == undefined) {\n\t\t\t\tout.status = ControllerSapiClassStatus.WRONG_IN_DATA;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tout.region = region;\n\t\t}\n\t\telse {\n\t\t\tconst rerion_get:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_GET, []);\n\t\t\tif (rerion_get.status != ControllerSapiClassStatus.OK) {\n\t\t\t\tout.status = rerion_get.status;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tif (rerion_get.data.length < 0x1) {\n\t\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tregion = this.region.getNameRegion(rerion_get.data[0x0]);\n\t\t\tif (region == undefined) {\n\t\t\t\tout.status = ControllerSapiClassStatus.WRONG_IN_DATA;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tout.region = region;\n\t\t}\n\t\treturn (out);\n\t}\n\n\tpublic async setRegion(region:string): Promise {\n\t\tif (this.isRazberry7() == true) {\n\t\t\tconst custom_region_id:number|undefined = this.region.getIdRegionCustom(region);\n\t\t\tif (custom_region_id == undefined)\n\t\t\t\treturn (ControllerSapiClassStatus.INVALID_ARG);\n\t\t\tconst custom_region_set:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_PROPRIETARY_2, [custom_region_id]);\n\t\t\tif (custom_region_set.status != SapiClassStatus.OK)\n\t\t\t\treturn (((custom_region_set.status as unknown) as ControllerSapiClassStatus));\n\t\t\tconst res:SapiClassRet = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED);\n\t\t\tif (res.status != SapiClassStatus.OK)\n\t\t\t\treturn (((res.status as unknown) as ControllerSapiClassStatus));\n\t\t\tawait this._begin(false);\n\t\t\treturn (ControllerSapiClassStatus.OK);\n\t\t}\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) == false)\n\t\t\treturn (ControllerSapiClassStatus.UNSUPPORT_CMD);\n\t\tconst region_id:number|undefined = this.region.getIdRegion(region);\n\t\tif (region_id == undefined)\n\t\t\treturn (ControllerSapiClassStatus.INVALID_ARG);\n\t\tconst rerion_get:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_SET, [region_id]);\n\t\tif (rerion_get.status != ControllerSapiClassStatus.OK)\n\t\t\treturn (rerion_get.status);\n\t\tif (rerion_get.data.length < 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (rerion_get.data[0x0] == 0x0)\n\t\t\treturn (ControllerSapiClassStatus.NOT_SET);\n\t\treturn (this.softReset());\n\t}\n\n\tpublic async softReset(timeout:number = 3000): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], timeout, SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ControllerSapiClassStatus);\n\t\tawait this._begin(false);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tpublic async setDefault(): Promise {\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT) == false)\n\t\t\treturn (ControllerSapiClassStatus.UNSUPPORT_CMD);\n\t\tconst seq:number = this._set_seq();\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT, [seq]);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ControllerSapiClassStatus);\n\t\tif (res.data.length < 0x1)//0x1 seq\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_SEQ);\n\t\tif (res.data[0x0] != seq)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_SEQ);\n\t\tawait this._begin(false);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tpublic async nvmWrite(addr:number, data:Uint8Array): Promise {\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER) == false)\n\t\t\treturn (ControllerSapiClassStatus.UNSUPPORT_CMD);\n\t\tconst data_addr:Array = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (data.length >> 8) & 0xFF, data.length & 0xFF];\n\t\tif (data.length > this.getQuantumSize())\n\t\t\treturn (ControllerSapiClassStatus.WRONG_SEND_DATA_LENGHT);\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(Array.from(data)));\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ControllerSapiClassStatus);\n\t\tif (res.data.length < 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (res.data[0x0] != 0x1)\n\t\t\treturn (ControllerSapiClassStatus.NOT_SET);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tpublic async updateFirmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tif (this.isRazberry7() == false)\n\t\t\treturn (ControllerSapiClassStatus.NOT_RAZBERRY);\n\t\tconst status:ControllerSapiClassStatus = await this._load_file(0x3A000, data, process);\n\t\tif (status != ControllerSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst res:SapiClassDetectWait = await this.sapi.update(0x3A000, target_type);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ControllerSapiClassStatus);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tpublic async updateBotloader(data:Uint8Array, process:SapiClassUpdateProcess|null): Promise {\n\t\tif (this.isRazberry7() == false)\n\t\t\treturn (ControllerSapiClassStatus.NOT_RAZBERRY);\n\t\tconst status:ControllerSapiClassStatus = await this._load_file(0x3A000, data, process);\n\t\tif (status != ControllerSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst seq:number = this._set_seq();\n\t\tconst response:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_PROPRIETARY_4, [seq]);\n\t\tif (response.status != SapiClassStatus.OK)\n\t\t\treturn (((response.status as unknown) as ControllerSapiClassStatus));\n\t\tif (response.data.length < 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH);\n\t\tif (response.data[0x0] != 0x00)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS);\n\t\tconst callback = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_PROPRIETARY_4,);\n\t\tif (callback.status != SapiClassStatus.OK)\n\t\t\treturn (((callback.status as unknown) as ControllerSapiClassStatus));\n\t\tif (callback.data.length < 0x2)//0x1 seq\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH);\n\t\tif (callback.data[0x0] != seq)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ);\n\t\tif (callback.data[0x1] != 0x0)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tpublic async clear_node(): Promise {\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION) == false)\n\t\t\treturn (ControllerSapiClassStatus.UNSUPPORT_CMD);\n\t\tconst send_mode:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION, [0x80, 2, 7, 0], 200);\n\t\tif (send_mode.status == SapiClassStatus.OK || send_mode.status == SapiClassStatus.TIMEOUT_RCV)\n\t\t\treturn (ControllerSapiClassStatus.OK);\n\t\treturn (((send_mode.status as unknown) as ControllerSapiClassStatus));\n\t}\n\n\tpublic async includeWide(): Promise {\n\t\treturn (await this._learn_mode(ControllerSapiClassLearMode.WIDE_INCLUSION));\n\t}\n\n\tpublic async excludingWide(): Promise {\n\t\treturn (await this._learn_mode(ControllerSapiClassLearMode.WIDE_EXCLUSION));\n\t}\n\n\tpublic async include_excluding(): Promise {\n\t\treturn (await this._learn_mode(ControllerSapiClassLearMode.INCLUSION_EXCLUSION));\n\t}\n\n\tpublic async disabled(): Promise {\n\t\tconst res:ControllerSapiClassLearnMode = await this._learn_mode(ControllerSapiClassLearMode.DISABLED);\n\t\tif (res.status != ControllerSapiClassStatus.OK)\n\t\t\treturn (res.status);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tprivate async _waitLearn(timeout:number, seq:number): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.recvIncomingRequest(timeout);\n\t\tif (res.status == SapiClassStatus.NO_SOF)\n\t\t\treturn (ControllerSapiClassStatus.PROCESS);\n\t\tif (res.cmd != SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE)\n\t\t\treturn (ControllerSapiClassStatus.PROCESS);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ControllerSapiClassStatus);\n\t\tif (res.data.length < 0x3)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK);\n\t\tif (res.data[0x0] != seq)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_SEQ);\n\t\tif (res.data[0x1] == 0x6)\n\t\t\treturn (ControllerSapiClassStatus.OK);\n\t\tif (res.data[0x1] == 0x1)\n\t\t\treturn (ControllerSapiClassStatus.PROCESS);\n\t\treturn (ControllerSapiClassStatus.LEARN_MODE_FALED);\n\t}\n\n\tpublic async waitLearn(timeout:number, seq:number): Promise {\n\t\tconst status:ControllerSapiClassStatus = await this._waitLearn(timeout, seq);\n\t\tif (status == ControllerSapiClassStatus.OK)\n\t\t\tawait this._begin(false);\n\t\treturn (status);\n\t}\n\n\tpublic async GetInitData(): Promise {\n\t\tlet byte_i:number, bit_i:number;\n\n\t\tconst out:ControllerSapiClasstInitData = {status:ControllerSapiClassStatus.OK, node_list:[]};\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA) == false) {\n\t\t\tout.status = ControllerSapiClassStatus.UNSUPPORT_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA, []);\n\t\tif (res.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((res.status as unknown) as ControllerSapiClassStatus)\n\t\t\treturn (out);\n\t\t}\n\t\tif (res.data.length < 0x5 + 29) {\n\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tbyte_i = 0x0;\n\t\twhile (byte_i < 29) {\n\t\t\tbit_i = 0x0;\n\t\t\twhile (bit_i < 0x8) {\n\t\t\t\tif ((res.data[0x3 + byte_i] & (0x1 << bit_i)) != 0x0)\n\t\t\t\t\tout.node_list.push(byte_i * 0x8 + bit_i + 0x1);\n\t\t\t\tbit_i++;\n\t\t\t}\n\t\t\tbyte_i++;\n\t\t}\n\t\treturn (out);\n\t}\n\n\tpublic async GetNetworkIDs(): Promise {\n\t\tconst out:ControllerSapiClasstNetworkIDs = {status:ControllerSapiClassStatus.OK, home:0x0, node_id:0x0};\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_MEMORY_GET_ID) == false) {\n\t\t\tout.status = ControllerSapiClassStatus.UNSUPPORT_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_MEMORY_GET_ID, []);\n\t\tif (res.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((res.status as unknown) as ControllerSapiClassStatus)\n\t\t\treturn (out);\n\t\t}\n\t\tif (res.data.length < 0x4 + this.node_base) {\n\t\t\tout.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tout.home = costruct_int(res.data.slice(0x0, 0x4), 0x4, false);\n\t\tout.node_id = costruct_int(res.data.slice(0x4, 0x4 + this.node_base), this.node_base, false);\n\t\treturn (out);\n\t}\n\n\tpublic async removeFaledNode(node:number): Promise {\n\t\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID) == false)\n\t\t\treturn (ControllerSapiClassStatus.UNSUPPORT_CMD);\n\t\tconst seq:number = this._set_seq();\n\t\tconst response:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID, Array.from(this._node_to_bytes(node)).concat([seq]));\n\t\tif (response.status != SapiClassStatus.OK)\n\t\t\treturn (((response.status as unknown) as ControllerSapiClassStatus));\n\t\tif (response.data.length < 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH);\n\t\tif (response.data[0x0] != 0x00)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS);\n\t\tconst callback = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID);\n\t\tif (callback.status != SapiClassStatus.OK)\n\t\t\treturn (((callback.status as unknown) as ControllerSapiClassStatus));\n\t\tif (callback.data.length < 0x2)//0x1 seq\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH);\n\t\tif (callback.data[0x0] != seq)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ);\n\t\tif (callback.data[0x1] != 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\n\tpublic async nop(node:number): Promise {\n\t\tif (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_SEND_DATA) == false)\n\t\t\treturn (ControllerSapiClassStatus.UNSUPPORT_CMD);\n\t\tconst seq:number = this._set_seq();\n\t\tconst response:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_SEND_DATA, Array.from(this._node_to_bytes(node)).concat([0x1, 0x0, 0x1, seq]));\n\t\tif (response.status != SapiClassStatus.OK)\n\t\t\treturn (((response.status as unknown) as ControllerSapiClassStatus));\n\t\tif (response.data.length < 0x1)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH);\n\t\tif (response.data[0x0] != 0x01)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS);\n\t\tconst callback = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_ZW_SEND_DATA);\n\t\tif (callback.status != SapiClassStatus.OK)\n\t\t\treturn (((callback.status as unknown) as ControllerSapiClassStatus));\n\t\tif (callback.data.length < 0x2)//0x1 seq\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH);\n\t\tif (callback.data[0x0] != seq)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ);\n\t\tif (callback.data[0x1] == 0x1)\n\t\t\treturn (ControllerSapiClassStatus.TRANSMIT_COMPLETE_NO_ACK);\n\t\tif (callback.data[0x1] != 0x0)\n\t\t\treturn (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS);\n\t\treturn (ControllerSapiClassStatus.OK);\n\t}\n\t\n\tpublic getBoardInfo(): ControllerSapiClassBoardInfo {\n\t\treturn (this.board_info);\n\t}\n\n\tpublic async setLicense(license:Array): Promise {\n\t\tconst out:ControllerOutData = {data:[]};\n\t\tconst status:ControllerSapiClassStatus = await this._license(this.RAZ7_LICENSE_SET_SUBCMD, license, out);\n\t\tif (status != ControllerSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tawait this._license_get(this.license);\n\t\treturn (this.license.status);\n\t}\n\n\tpublic getLicense(): ControllerSapiClassLicense {\n\t\treturn (this.license);\n\t}\n\n\tpublic getCapabilities(): ControllerSapiClassCapabilities {\n\t\treturn (this.capabilities);\n\t}\n\n\tpublic isRazberry5(): boolean {\n\t\tif (this._isRazberry() == false)\n\t\t\treturn (false);\n\t\tif (this.capabilities.ApiVersion == 0x5)\n\t\t\treturn (true);\n\t\treturn (false);\n\t}\n\n\tpublic isRazberry7(): boolean {\n\t\tif (this._isRazberry() == false)\n\t\t\treturn (false);\n\t\tif (this.capabilities.ApiVersion == 0x7)\n\t\t\treturn (true);\n\t\treturn (false);\n\t}\n\n\tpublic async connect(): Promise {\n\t\tthis.node_base = SapiClassNodeIdBaseType.TYPE_8_BIT;\n\t\tthis.capabilities.status = ControllerSapiClassStatus.NOT_INIT;\n\t\tthis.license.status = ControllerSapiClassStatus.NOT_INIT;\n\t\tthis.board_info.status = ControllerSapiClassStatus.NOT_INIT;\n\t\tawait this._begin(true);\n\t}\n\n\tpublic getQuantumSize(): number {\n\t\treturn (this.sapi.getQuantumSize());\n\t}\n\n\tpublic lock() {\n\t\treturn (this.sapi.lock());\n\t}\n\n\tpublic unlock() {\n\t\treturn (this.sapi.unlock());\n\t}\n\n\tpublic is_busy(): boolean {\n\t\treturn (this.sapi.is_busy());\n\t}\n\n\tconstructor(sapi:SapiClass) {\n\t\tthis.sapi = sapi;\n\t}\n}","export {SapiRegionClass};\n\n\nclass SapiRegionClass {\n\tprivate us_lr:boolean;\n\tprivate eu_lr:boolean;\n\n\tprivate readonly REGION_EU:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"EU\";\n\tprivate readonly REGION_US:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"US\";\n\tprivate readonly REGION_ANZ:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"ANZ\";\n\tprivate readonly REGION_HK:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"HK\";\n\tprivate readonly REGION_IN:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"IN\";\n\tprivate readonly REGION_IL:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"IL\";\n\tprivate readonly REGION_RU:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"RU\";\n\tprivate readonly REGION_CN:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"CN\";\n\tprivate readonly REGION_JP:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"JP\";\n\tprivate readonly REGION_KR:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"KR\";\n\tprivate readonly REGION_EU_LR:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"EU_LR\";\n\tprivate readonly REGION_US_LR:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"US_LR\";\n\n\tprivate readonly region_lr:Array\t\t\t\t\t\t\t\t\t\t\t\t\t\t=\n\t[\n\t\tthis.REGION_EU_LR, this.REGION_US_LR\n\t];\n\tprivate readonly region_standart:Array\t\t\t\t\t\t\t\t\t\t\t\t\t=\n\t[\n\t\tthis.REGION_EU, this.REGION_US, this.REGION_ANZ, this.REGION_HK, this.REGION_IN,\n\t\tthis.REGION_IL, this.REGION_RU, this.REGION_CN, this.REGION_JP, this.REGION_KR,\n\t];\n\tprivate readonly region_string_to_number: Array<{ name: string;id: number;}>\t\t\t\t\t\t\t=\n\t[\n\t\t{name:this.REGION_EU, id:0x0}, {name:this.REGION_US, id:0x01}, {name:this.REGION_ANZ, id:0x02},\n\t\t{name:this.REGION_HK, id:0x3}, {name:this.REGION_IN, id:0x5}, {name:this.REGION_IL, id:0x6},\n\t\t{name:this.REGION_RU, id:0x7}, {name:this.REGION_CN, id:0x8}, {name:this.REGION_JP, id:0x20},\n\t\t{name:this.REGION_KR, id:0x21}, {name:this.REGION_US_LR, id:0x9}, {name:this.REGION_EU_LR, id:0xB},\n\t\t{name:this.REGION_EU, id:0xFF}\n\t];\n\tprivate readonly region_custom_string_to_number: Array<{ name: string;id: number;}>\t\t\t\t\t=\n\t[\n\t\t{name:this.REGION_EU, id:0x0}, {name:this.REGION_US, id:0x03}, {name:this.REGION_ANZ, id:0x04},\n\t\t{name:this.REGION_HK, id:0x05}, {name:this.REGION_IN, id:0x02}, {name:this.REGION_IL, id:0x09},\n\t\t{name:this.REGION_RU, id:0x01}, {name:this.REGION_CN, id:0x06}, {name:this.REGION_JP, id:0x07},\n\t\t{name:this.REGION_KR, id:0x08}, {name:this.REGION_US_LR, id:0x0B}, {name:this.REGION_EU_LR, id:0x0C},\n\t];\n\n\tpublic isLr(region:string): boolean {\n\t\tif (this.region_lr.includes(region) == false)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate _getNameRegion(region:number, region_conv:Array<{ name: string;id: number;}>): string|undefined {\n\t\tlet i;\n\t\n\t\ti = 0x0;\n\t\twhile (i < region_conv.length) {\n\t\t\tif (region_conv[i].id == region) {\n\t\t\t\tconst region_list:Array = this.getListRegion();\n\t\t\t\tif (region_list.includes(region_conv[i].name) == false)\n\t\t\t\t\treturn (undefined);\n\t\t\t\treturn (region_conv[i].name);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn (undefined);\n\t}\n\n\tprivate _getIdRegion(region:string, region_conv:Array<{ name: string;id: number;}>): number|undefined {\n\t\tlet i;\n\t\n\t\tconst region_list:Array = this.getListRegion();\n\t\tif (region_list.includes(region) == false)\n\t\t\treturn (undefined);\n\t\ti = 0x0;\n\t\twhile (i < region_conv.length) {\n\t\t\tif (region_conv[i].name == region)\n\t\t\t\treturn (region_conv[i].id);\n\t\t\ti++;\n\t\t}\n\t\treturn (undefined);\n\t}\n\n\tpublic getNameRegion(region:number): string|undefined {\n\t\treturn (this._getNameRegion(region, this.region_string_to_number));\n\t}\n\n\tpublic getNameRegionCustom(region:number): string|undefined {\n\t\treturn (this._getNameRegion(region, this.region_custom_string_to_number));\n\t}\n\n\tpublic getIdRegion(region:string): number|undefined {\n\t\treturn (this._getIdRegion(region, this.region_string_to_number));\n\t}\n\n\tpublic getIdRegionCustom(region:string): number|undefined {\n\t\treturn (this._getIdRegion(region, this.region_custom_string_to_number));\n\t}\n\n\tpublic getListRegion(): Array {\n\t\tlet out:Array;\n\n\t\tout = this.region_standart;\n\t\tif (this.us_lr == true)\n\t\t\tout = out.concat([this.REGION_US_LR]);\n\t\tif (this.eu_lr == true)\n\t\t\tout = out.concat([this.REGION_EU_LR]);\n\t\tout = out.sort();\n\t\treturn (out);\n\t}\n\n\tconstructor(us_lr?:boolean, eu_lr?:boolean) {\n\t\tif (us_lr == undefined)\n\t\t\tus_lr = false;\n\t\tif (eu_lr == undefined)\n\t\t\teu_lr = false;\n\t\tthis.us_lr = us_lr;\n\t\tthis.eu_lr = eu_lr;\n\t}\n}","import {sleep, checksum, calcSigmaCRC16} from \"../other/utilities\";\nimport {WEB_TOOLS_BETA} from \"../other/define\"\nimport {splitHexBuff} from \"../other/utilities\"\n\nexport {SapiClass, SapiClassStatus, SapiClassFuncId, SapiClassRet, SapiClassSerialAPISetupCmd, SapiSerialOptionFilters, SapiClassNodeIdBaseType, SapiClassDetect, SapiClassDetectType, SapiClassDetectTypeFunc, SapiClassDetectWait, SapiClassUpdateProcess};\n\ninterface SapiClassDetectTypeFunc {\n\t(): Promise\n}\n\ntype SapiClassUpdateProcess = (percentage:number) => void;\n\nenum SapiClassDetectType\n{\n\tRAZBERRY,\n\tZUNO,\n\tUNKNOWN,\n}\n\ninterface SapiClassDetect\n{\n\tstatus:SapiClassStatus;\n\ttype:SapiClassDetectType;\n\tbaudrate:number;\n}\n\ninterface SapiClassDetectWait\n{\n\tstatus:SapiClassStatus;\n\ttype:SapiClassDetectType;\n}\n\ninterface SapiSerialOptionFilters\n{\n\tusbVendorId:number;\n\tusbProductId:number;\n}\n\ninterface SapiClassRet\n{\n\tstatus:SapiClassStatus;\n\tcrc:number;\n\tcmd:number;\n\traw:Array;\n\tdata:Array;\n}\n\nenum SapiClassStatus\n{\n\tOK = 0x00,\n\tNO_ACK,\n\tINVALID_DATA_LEN,\n\tINVALID_CRC,\n\tNO_SOF,\n\tNO_LENGHT,\n\tWRITE,\n\tWRONG_LENGHT,\n\tWRONG_CMD,\n\tPORT_NOT_OPEN,\n\tPORT_NOT_CLOSE,\n\tPORT_NOT_REQUEST,\n\tPORT_USED,\n\tPORT_BUSY,\n\tTIMEOUT_RCV,\n\tSERIAL_UN_SUPPORT,\n\tSERIAL_BUSY,\n\tREQUEST_ONE_SHOT,\n\tREQUEST_NO_SELECT,\n\tZUNO_NO_FREEZE,\n\tZUNO_START_WRONG_LENG,\n\tZUNO_START_WRONG_DATA,\n\tZUNO_START_WRONG_FRAME,\n\tDETECTED_UNC_COMMAND,\n\tDETECTED_NOT_FIND,\n\tDETECTED_CANCEL,\n\tDETECTED_UNC,\n\tDETECTED_TARGET_TYPE,\n\tUPDATE_UNK,\n\tUPDATE_TIMEOUT,\n\tUPDATE_PROCESS,\n\tUPDATE_STEP_FAILL,\n\tWRONG_RETRIES_CAN,\n\tWRONG_RETRIES_NAK,\n\tTIMEOUT_RCV_I,\n\tLAST_STATUS,\n}\n\nenum SapiClassNodeIdBaseType\n{\n\tTYPE_8_BIT = 0x1,\n\tTYPE_16_BIT = 0x2,\n}\n\nenum SapiClassSerialAPISetupCmd\n{\n\t// /**\n\t// * The first 8 commands are given as bit-flags, and when all bits were consumed, a byte-array was created to give\n\t// * more room.\n\t// * The first 8 flags are the only ones that shall be used to fill the first byte when generating the response in\n\t// * pOutputBuffer for the command, SERIAL_API_SETUP_CMD_SUPPORTED.\n\t// * This is kept for backwards compatibility.\n\t// */\n\tSERIAL_API_SETUP_CMD_UNSUPPORTED,\n\tSERIAL_API_SETUP_CMD_SUPPORTED = 1, //1<<0\n\tSERIAL_API_SETUP_CMD_TX_STATUS_REPORT = 2, //1<<1\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET = 4, //1<<2 @Deprecated\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET = 8, //1<<3 @Deprecated\n\tSERIAL_API_SETUP_CMD_TX_GET_MAX_PAYLOAD_SIZE = 16, //1<<4\n\tSERIAL_API_SETUP_CMD_RF_REGION_GET = 32, //1<<5\n\tSERIAL_API_SETUP_CMD_RF_REGION_SET = 64, //1<<6\n\tSERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET = 128, //1<<7\n\t// /**\n\t// * The below values are not flags and shall only be used with BITMASK_ADD_CMD() when generating\n\t// * the response for the command, SERIAL_API_SETUP_CMD_SUPPORTED.\n\t// */\n\tSERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_SET = 3,\n\tSERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_GET = 5,\n\t\t\t\t\t\t// The values 6 and 7 are unused, but not reserved.\n\tSERIAL_API_SETUP_CMD_TX_GET_MAX_LR_PAYLOAD_SIZE = 17,\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET_16_BIT = 18,\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET_16_BIT = 19,\n}\n\nenum SapiClassFuncId\n{\n\tFUNC_ID_SERIAL_API_GET_INIT_DATA = 0x02,\n\tFUNC_ID_SERIAL_API_APPL_NODE_INFORMATION = 0x03,\n\tFUNC_ID_APPLICATION_COMMAND_HANDLER = 0x04,\n\tFUNC_ID_ZW_GET_CONTROLLER_CAPABILITIES = 0x05,\n\tFUNC_ID_SERIAL_API_SET_TIMEOUTS = 0x06,\n\tFUNC_ID_SERIAL_API_GET_CAPABILITIES = 0x07,\n\tFUNC_ID_SERIAL_API_SOFT_RESET = 0x08,\n\tFUNC_ID_ZW_GET_PROTOCOL_VERSION = 0x09,\n\tFUNC_ID_SERIAL_API_STARTED = 0x0A,\n\tFUNC_ID_SERIAL_API_SETUP = 0x0B,\n\tFUNC_ID_SERIAL_API_APPL_NODE_INFORMATION_CMD_CLASSES = 0x0C,\n\tFUNC_ID_ZW_SEND_DATA_EX = 0x0E,\n\tFUNC_ID_ZW_SEND_DATA_MULTI_EX = 0x0F,\n\tFUNC_ID_ZW_SET_RF_RECEIVE_MODE = 0x10,\n\tFUNC_ID_ZW_SET_SLEEP_MODE = 0x11,\n\tFUNC_ID_ZW_SEND_NODE_INFORMATION = 0x12,\n\tFUNC_ID_ZW_SEND_DATA = 0x13,\n\tFUNC_ID_ZW_SEND_DATA_MULTI = 0x14,\n\tFUNC_ID_ZW_GET_VERSION = 0x15,\n\tFUNC_ID_ZW_SEND_DATA_ABORT = 0x16,\n\tFUNC_ID_ZW_RF_POWER_LEVEL_SET = 0x17,\n\tFUNC_ID_ZW_SEND_DATA_META = 0x18,\n\tFUNC_ID_ZW_RESERVED_SD = 0x19,\n\tFUNC_ID_ZW_RESERVED_SDM = 0x1A,\n\tFUNC_ID_ZW_RESERVED_SRI = 0x1B,\n\tFUNC_ID_ZW_GET_RANDOM = 0x1C,\n\tFUNC_ID_ZW_RANDOM = 0x1D,\n\tFUNC_ID_ZW_RF_POWER_LEVEL_REDISCOVERY_SET = 0x1E,\n\tFUNC_ID_MEMORY_GET_ID = 0x20,\n\tFUNC_ID_MEMORY_GET_BYTE = 0x21,\n\tFUNC_ID_MEMORY_PUT_BYTE = 0x22,\n\tFUNC_ID_MEMORY_GET_BUFFER = 0x23,\n\tFUNC_ID_MEMORY_PUT_BUFFER = 0x24,\n\tFUNC_ID_SERIAL_API_GET_APPL_HOST_MEMORY_OFFSET = 0x25,\n\tFUNC_ID_DEBUG_OUTPUT = 0x26,\n\tFUNC_ID_AUTO_PROGRAMMING = 0x27,\n\tFUNC_ID_NVR_GET_VALUE = 0x28,\n\tFUNC_ID_NVM_GET_ID = 0x29,\n\tFUNC_ID_NVM_EXT_READ_LONG_BUFFER = 0x2A,\n\tFUNC_ID_NVM_EXT_WRITE_LONG_BUFFER = 0x2B,\n\tFUNC_ID_NVM_EXT_READ_LONG_BYTE = 0x2C,\n\tFUNC_ID_NVM_EXT_WRITE_LONG_BYTE = 0x2D,\n\tFUNC_ID_NVM_BACKUP_RESTORE = 0x2E,\n\tFUNC_ID_ZW_NVR_GET_APP_VALUE = 0x2F,\n\tFUNC_ID_CLOCK_SET = 0x30,\n\tFUNC_ID_CLOCK_GET = 0x31,\n\tFUNC_ID_CLOCK_CMP = 0x32,\n\tFUNC_ID_RTC_TIMER_CREATE = 0x33,\n\tFUNC_ID_RTC_TIMER_READ = 0x34,\n\tFUNC_ID_RTC_TIMER_DELETE = 0x35,\n\tFUNC_ID_RTC_TIMER_CALL = 0x36,\n\tFUNC_ID_CLEAR_TX_TIMERS = 0x37,\n\tFUNC_ID_GET_TX_TIMERS = 0x38,\n\tFUNC_ID_ZW_CLEAR_NETWORK_STATS = 0x39,\n\tFUNC_ID_ZW_GET_NETWORK_STATS = 0x3A,\n\tFUNC_ID_ZW_GET_BACKGROUND_RSSI = 0x3B,\n\tFUNC_ID_ZW_SET_LISTEN_BEFORE_TALK_THRESHOLD = 0x3C,\n\tFUNC_ID_ZW_REMOVE_NODE_ID_FROM_NETWORK = 0x3F,\n\tFUNC_ID_ZW_SET_LEARN_NODE_STATE = 0x40,\n\tFUNC_ID_ZW_GET_NODE_PROTOCOL_INFO = 0x41,\n\tFUNC_ID_ZW_SET_DEFAULT = 0x42,\n\tFUNC_ID_ZW_NEW_CONTROLLER = 0x43,\n\tFUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE = 0x44,\n\tFUNC_ID_ZW_REPLICATION_SEND_DATA = 0x45,\n\tFUNC_ID_ZW_ASSIGN_RETURN_ROUTE = 0x46,\n\tFUNC_ID_ZW_DELETE_RETURN_ROUTE = 0x47,\n\tFUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE = 0x48,\n\tFUNC_ID_ZW_REQUEST_NODETYPE_NEIGHBOR_UPDATE = 0x68,\n\tFUNC_ID_ZW_APPLICATION_UPDATE = 0x49,\n\tFUNC_ID_ZW_ADD_NODE_TO_NETWORK = 0x4A,\n\tFUNC_ID_ZW_REMOVE_NODE_FROM_NETWORK = 0x4B,\n\tFUNC_ID_ZW_CREATE_NEW_PRIMARY = 0x4C,\n\tFUNC_ID_ZW_CONTROLLER_CHANGE = 0x4D,\n\tFUNC_ID_ZW_RESERVED_FN = 0x4E,\n\tFUNC_ID_ZW_ASSIGN_PRIORITY_RETURN_ROUTE = 0x4F,\n\tFUNC_ID_ZW_SET_LEARN_MODE = 0x50,\n\tFUNC_ID_ZW_ASSIGN_SUC_RETURN_ROUTE = 0x51,\n\tFUNC_ID_ZW_ENABLE_SUC = 0x52,\n\tFUNC_ID_ZW_REQUEST_NETWORK_UPDATE = 0x53,\n\tFUNC_ID_ZW_SET_SUC_NODE_ID = 0x54,\n\tFUNC_ID_ZW_DELETE_SUC_RETURN_ROUTE = 0x55,\n\tFUNC_ID_ZW_GET_SUC_NODE_ID = 0x56,\n\tFUNC_ID_ZW_SEND_SUC_ID = 0x57,\n\tFUNC_ID_ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE = 0x58,\n\tFUNC_ID_ZW_REDISCOVERY_NEEDED = 0x59,\n\tFUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE_OPTION = 0x5A,\n\tFUNC_ID_ZW_SUPPORT9600_ONLY = 0x5B,\n\tFUNC_ID_ZW_REQUEST_NEW_ROUTE_DESTINATIONS = 0x5C,\n\tFUNC_ID_ZW_IS_NODE_WITHIN_DIRECT_RANGE = 0x5D,\n\tFUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION = 0x5E,\n\tFUNC_ID_ZW_EXPLORE_REQUEST_EXCLUSION = 0x5F,\n\tFUNC_ID_ZW_REQUEST_NODE_INFO = 0x60,\n\tFUNC_ID_ZW_REMOVE_FAILED_NODE_ID = 0x61,\n\tFUNC_ID_ZW_IS_FAILED_NODE_ID = 0x62,\n\tFUNC_ID_ZW_REPLACE_FAILED_NODE = 0x63,\n\tFUNC_ID_ZW_SET_ROUTING_MAX_6_00 = 0x65,\n\tFUNC_ID_ZW_IS_PRIMARY_CTRL = 0x66,\n\tFUNC_ID_ZW_AES_ECB = 0x67,\n\tFUNC_ID_TIMER_START = 0x70,\n\tFUNC_ID_TIMER_RESTART = 0x71,\n\tFUNC_ID_TIMER_CANCEL = 0x72,\n\tFUNC_ID_TIMER_CALL = 0x73,\n\tFUNC_ID_ZW_FIRMWARE_UPDATE_NVM = 0x78,\n\tFUNC_ID_GET_ROUTING_TABLE_LINE = 0x80,\n\tFUNC_ID_GET_TX_COUNTER = 0x81,\n\tFUNC_ID_RESET_TX_COUNTER = 0x82,\n\tFUNC_ID_STORE_NODEINFO = 0x83,\n\tFUNC_ID_STORE_HOMEID = 0x84,\n\tFUNC_ID_LOCK_ROUTE_RESPONSE = 0x90,\n\tFUNC_ID_ZW_SEND_DATA_ROUTE_DEMO = 0x91,\n\tFUNC_ID_ZW_GET_PRIORITY_ROUTE = 0x92,\n\tFUNC_ID_ZW_SET_PRIORITY_ROUTE = 0x93,\n\tFUNC_ID_SERIAL_API_TEST = 0x95,\n\tFUNC_ID_SERIAL_API_EXT = 0x98,\n\tFUNC_ID_ZW_SECURITY_SETUP = 0x9C,\n\tFUNC_ID_APPLICATION_SECURITY_EVENT = 0x9D,\n\tFUNC_ID_SERIAL_API_APPL_SLAVE_NODE_INFORMATION = 0xA0,\n\tFUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER = 0xA1,\n\tFUNC_ID_ZW_SEND_SLAVE_NODE_INFORMATION = 0xA2,\n\tFUNC_ID_ZW_SEND_SLAVE_DATA = 0xA3,\n\tFUNC_ID_ZW_SET_SLAVE_LEARN_MODE = 0xA4,\n\tFUNC_ID_ZW_GET_VIRTUAL_NODES = 0xA5,\n\tFUNC_ID_ZW_IS_VIRTUAL_NODE = 0xA6,\n\tFUNC_ID_ZW_RESERVED_SSD = 0xA7,\n\tFUNC_ID_APPLICATION_COMMAND_HANDLER_BRIDGE = 0xA8,\n\tFUNC_ID_ZW_SEND_DATA_BRIDGE = 0xA9,\n\tFUNC_ID_ZW_SEND_DATA_META_BRIDGE = 0xAA,\n\tFUNC_ID_ZW_SEND_DATA_MULTI_BRIDGE = 0xAB,\n\tFUNC_ID_PWR_SETSTOPMODE = 0xB0,\n\tFUNC_ID_PWR_CLK_PD = 0xB1,\n\tFUNC_ID_PWR_CLK_PUP = 0xB2,\n\tFUNC_ID_PWR_SELECT_CLK = 0xB3,\n\tFUNC_ID_ZW_SET_WUT_TIMEOUT = 0xB4,\n\tFUNC_ID_ZW_IS_WUT_KICKED = 0xB5,\n\tFUNC_ID_ZW_WATCHDOG_ENABLE = 0xB6,\n\tFUNC_ID_ZW_WATCHDOG_DISABLE = 0xB7,\n\tFUNC_ID_ZW_WATCHDOG_KICK = 0xB8,\n\tFUNC_ID_ZW_SET_EXT_INT_LEVEL = 0xB9,\n\tFUNC_ID_ZW_RF_POWER_LEVEL_GET = 0xBA,\n\tFUNC_ID_ZW_GET_NEIGHBOR_COUNT = 0xBB,\n\tFUNC_ID_ZW_ARE_NODES_NEIGHBOURS = 0xBC,\n\tFUNC_ID_ZW_TYPE_LIBRARY = 0xBD,\n\tFUNC_ID_ZW_SEND_TEST_FRAME = 0xBE,\n\tFUNC_ID_ZW_GET_PROTOCOL_STATUS = 0xBF,\n\tFUNC_ID_ZW_SET_PROMISCUOUS_MODE = 0xD0,\n\tFUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER = 0xD1,\n\tFUNC_ID_ZW_WATCHDOG_START = 0xD2,\n\tFUNC_ID_ZW_WATCHDOG_STOP = 0xD3,\n\tFUNC_ID_ZW_SET_ROUTING_MAX = 0xD4,\n\tFUNC_ID_ZW_GET_ROUTING_MAX = 0xD5,\n\tFUNC_ID_PM_STAY_AWAKE = 0xD7,\n\tFUNC_ID_PM_CANCEL = 0xD8,\n\tFUNC_ID_ZW_NETWORK_MANAGEMENT_SET_MAX_INCLUSION_REQUEST_INTERVALS = 0xD6,\n\tFUNC_ID_ZW_INITIATE_SHUTDOWN = 0xD9,\n\tFUNC_ID_SERIAL_API_GET_LR_NODES = 0xDA,\n\tFUNC_ID_GET_LR_CHANNEL = 0xDB,\n\tFUNC_ID_SET_LR_CHANNEL = 0xDC,\n\tFUNC_ID_ZW_SET_LR_VIRTUAL_IDS = 0xDD,\n\tFUNC_ID_GET_DCDC_CONFIG = 0xDE,\n\tFUNC_ID_SET_DCDC_CONFIG = 0xDF,\n\tFUNC_ID_ZW_NUNIT_CMD = 0xE0,\n\tFUNC_ID_ZW_NUNIT_INIT = 0xE1,\n\tFUNC_ID_ZW_NUNIT_LIST = 0xE2,\n\tFUNC_ID_ZW_NUNIT_RUN = 0xE3,\n\tFUNC_ID_ZW_NUNIT_END = 0xE4,\n\tFUNC_ID_ENABLE_RADIO_PTI = 0xE7,\n\tFUNC_ID_GET_RADIO_PTI = 0xE8,\n\tFUNC_ID_SEND_NOP = 0xE9,\n\tFUNC_ID_SERIAL_API_POWER_MANAGEMENT = 0xEE,\n\tFUNC_ID_SERIAL_API_READY = 0xEF,\n\tFUNC_ID_PROPRIETARY_0 = 0xF0,\n\tFUNC_ID_PROPRIETARY_1 = 0xF1,\n\tFUNC_ID_PROPRIETARY_2 = 0xF2,\n\tFUNC_ID_PROPRIETARY_3 = 0xF3,\n\tFUNC_ID_PROPRIETARY_4 = 0xF4,\n\tFUNC_ID_PROPRIETARY_5 = 0xF5,\n\tFUNC_ID_PROPRIETARY_6 = 0xF6,\n\tFUNC_ID_PROPRIETARY_7 = 0xF7,\n\tFUNC_ID_PROPRIETARY_8 = 0xF8,\n\tFUNC_ID_PROPRIETARY_9 = 0xF9,\n\tFUNC_ID_PROPRIETARY_A = 0xFA,\n\tFUNC_ID_PROPRIETARY_B = 0xFB,\n\tFUNC_ID_PROPRIETARY_C = 0xFC,\n\tFUNC_ID_PROPRIETARY_D = 0xFD,\n\tFUNC_ID_PROPRIETARY_E = 0xFE,\n}\n\n// ------------------------------------------------------------------------------------------------------\ninterface SapiPortOpenOption\n{\n\tbaudRate:number;\n\tbufferSize:number;\n}\n\ninterface SapiPort\n{\n\treadonly readable:ReadableStream;\n\treadonly writable:WritableStream;\n\tclose(): Promise;\n\topen(options?: SapiPortOpenOption): Promise;\n}\n\ninterface SapiSerialOption\n{\n\tfilters?:SapiSerialOptionFilters[];\n}\n\n\ninterface SapiSerial\n{\n\trequestPort(options?: SapiSerialOption): Promise;\n}\n\ninterface NavigatorExtSerial extends Navigator\n{\n\tserial:SapiSerial;\n}\n\n\nclass SapiClass {\n\tprivate readonly MAX_SEND_DATA_LENGHT\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0xA0;\n\n\tprivate readonly SOF:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tprivate readonly ACK:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tprivate readonly NAK:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x15;\n\tprivate readonly CAN:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x18;\n\n\tprivate readonly REQUEST:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x00;\n\tprivate readonly RESPONSE:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\n\tprivate readonly ADDITIONAL_SIZE:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\n\tpublic readonly BAUDRATE\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= [115200, 230400, 460800, 921600];\n\tprivate readonly dtr_timeout:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 250;// The time for the capacitor on the DTR line to recharge\n\n\tprivate readonly RETRIES_CAN:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 100;\n\n\tprivate b_busy:boolean\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= false;\n\tprivate state_lock:boolean\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= false;\n\tprivate b_open:boolean\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= false;\n\tprivate port:SapiPort|undefined\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= undefined;\n\tprivate queue:Array\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= [];\n\tprivate async_ret:Array\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= [];\n\tprivate detect_type:SapiClassDetectType\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= SapiClassDetectType.UNKNOWN;\n\n\tprivate async _readWithTimeout(timeout:number): Promise {\n\t\tlet out:Uint8Array;\n\n\t\tif (this.port == undefined || this.port.readable == null)\n\t\t\treturn (new Uint8Array([]));\n\t\tconst reader = this.port.readable.getReader();\n\t\tconst timer = setTimeout(() => {\n\t\t\treader.releaseLock();\n\t\t}, timeout);\n\t\ttry {\n\t\t\tout = (await reader.read()).value;\n\t\t} catch (err) {\n\t\t\tout = new Uint8Array([]);\n\t\t}\n\t\tclearTimeout(timer);\n\t\treader.releaseLock();\n\t\treturn (out);\n\t}\n\n\tprivate async _read(num:number): Promise> {\n\t\tlet out:Array, i:number, rep:number, tempos:number|undefined;\n\n\t\trep = 0x0;\n\t\twhile (rep < 1) {\n\t\t\tif (this.queue.length >= num) {\n\t\t\t\tout = [];\n\t\t\t\ti = 0x0;\n\t\t\t\twhile (i < num) {\n\t\t\t\t\ttempos = this.queue.shift();\n\t\t\t\t\tif (tempos == undefined)\n\t\t\t\t\t\tbreak ;\n\t\t\t\t\tout.push(tempos);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tconst value:Uint8Array = await this._readWithTimeout(20);\n\t\t\ti = 0x0;\n\t\t\twhile (i < value.byteLength) {\n\t\t\t\tthis.queue.push(value[i])\n\t\t\t\ti++;\n\t\t\t}\n\t\t\trep++;\n\t\t}\n\t\tif (num >= this.queue.length)\n\t\t\tnum = this.queue.length;\n\t\tout = [];\n\t\ti = 0x0;\n\t\twhile (i < num) {\n\t\t\ttempos = this.queue.shift();\n\t\t\tif (tempos == undefined)\n\t\t\t\tbreak ;\n\t\t\tout.push(tempos);\n\t\t\ti++;\n\t\t}\n\t\treturn (out);\n\t}\n\n\tprivate async _write(data:Array): Promise {\n\t\tif (this.port == undefined || this.port.writable == null)\n\t\t\treturn (false);\n\t\tconst data_uint8:Uint8Array = new Uint8Array(data);\n\t\tconst writer = this.port.writable.getWriter();\n\t\tawait writer.write(data_uint8);\n\t\twriter.releaseLock();\n\t\tif (WEB_TOOLS_BETA == true)\n\t\t\tconsole.log(\">> \", splitHexBuff(data_uint8));\n\t\treturn (true);\n\t}\n\n\tprivate async _recv_async(): Promise {\n\t\tfor (;;) {\n\t\t\tif (await this._recvIncomingRequestAsyn(100) == false)\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate async _clear(): Promise {\n\t\tawait this._recv_async();\n\t\tthis.queue = [];\n\t\tfor (;;) {\n\t\t\tconst value = await this._read(50);\n\t\t\tif (value.length == 0x0)\n\t\t\t\treturn ;\n\t\t}\n\t}\n\n\tprivate async _sendData(cmd:number, databuff:Array): Promise {\n\t\tlet final_data:Array;\n\n\t\tconst data_len = databuff.length + this.ADDITIONAL_SIZE;\n\t\tif (data_len > 255) {\n\t\t\tconst crc_data:Array = [0x00, this.REQUEST, cmd].concat(databuff);\n\t\t\tfinal_data = [0x00, (data_len >> 8)& 0x0FF, data_len & 0x0FF, this.REQUEST, cmd].concat(databuff);\n\t\t\tconst crc16:number = calcSigmaCRC16(0x1D0F, crc_data, 0, crc_data.length);\n\t\t\tfinal_data = [this.SOF].concat(final_data).concat([(crc16 >> 8) & 0xFF, (crc16) & 0xFF]);\n\t\t\tif (await this._write(final_data) == false)\n\t\t\t\treturn (false);\n\t\t\treturn (true);\n\t\t}\n\t\tfinal_data = [data_len & 0x0FF, this.REQUEST, cmd].concat(databuff);\n\t\tconst crc:number = checksum(final_data);\n\t\tfinal_data = [this.SOF].concat(final_data).concat([crc]);\n\t\tif (await this._write(final_data) == false)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate async _sendNack(): Promise {\n\t\treturn (await (this._write([this.NAK])));\n\t}\n\n\tprivate async _sendAck(): Promise {\n\t\treturn (await (this._write([this.ACK])));\n\t}\n\n\tprivate async _waitSOF(timeout:number): Promise {\n\t\tconst sof_timeout:number = Date.now() + timeout;\n\n\t\twhile (sof_timeout > Date.now()) {\n\t\t\tconst sof:Array = await this._read(0x1);\n\t\t\tif (sof.length == 0x0) {\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tif (sof[0x0] == this.SOF)\n\t\t\t\treturn (true);\n\t\t}\n\t\treturn (false);\n\t}\n\n\tprivate async _send_cmd(cmd:number, databuff:Array): Promise {\n\t\tlet rbuff:Array, retries_nak:number, retries_can:number, retries_ack:number;\n\n\t\tif (this.b_open == false)\n\t\t\treturn (SapiClassStatus.PORT_NOT_OPEN);\n\t\tawait this._recv_async();\n\t\tretries_nak = 0x3;\n\t\tretries_can = this.RETRIES_CAN;\n\t\tretries_ack = 0x6;\n\t\tfor (;;) {\n\t\t\tif (retries_nak < 0x0)\n\t\t\t\treturn (SapiClassStatus.WRONG_RETRIES_NAK);\n\t\t\tif (retries_can < 0x0)\n\t\t\t\treturn (SapiClassStatus.WRONG_RETRIES_CAN);\n\t\t\tif (await this._sendData(cmd, databuff) == false)\n\t\t\t\treturn (SapiClassStatus.WRITE);\n\t\t\tfor (;;) {\n\t\t\t\tif (retries_ack < 0x0)\n\t\t\t\t\treturn (SapiClassStatus.NO_ACK);\n\t\t\t\trbuff = await this._read(0x1)\n\t\t\t\tif (rbuff.length == 0x0) {\n\t\t\t\t\tretries_ack--;\n\t\t\t\t\tcontinue ;\n\t\t\t\t}\n\t\t\t\tif (rbuff[0] == this.SOF) {\n\t\t\t\t\tawait this._recvIncomingRequestAsyn(100, false);\n\t\t\t\t\tcontinue ;\n\t\t\t\t}\n\t\t\t\tbreak ;\n\t\t\t}\n\t\t\tif (rbuff[0] == this.ACK)\n\t\t\t\tbreak ;\n\t\t\tif (rbuff[0] == this.CAN) {\n\t\t\t\tawait this._recv_async();\n\t\t\t\tretries_can--;\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tif (rbuff[0] == this.NAK) {\n\t\t\t\tretries_nak--;\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t}\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _request(filters?:SapiSerialOptionFilters[]): Promise {\n\t\tlet port:SapiPort;\n\n\t\tconst nav_ext_serial:NavigatorExtSerial = ((window.navigator as unknown) as NavigatorExtSerial);\n\t\tif (this.port != undefined)\n\t\t\treturn (SapiClassStatus.REQUEST_ONE_SHOT);\n\t\ttry {\n\t\t\tconst options:SapiSerialOption = {filters:filters};\n\t\t\tport = await nav_ext_serial.serial.requestPort(options);\n\t\t} catch(e) {\n\t\t\treturn (SapiClassStatus.REQUEST_NO_SELECT);\n\t\t}\n\t\tthis.port = port;\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _open(baudRate:number): Promise {\n\t\tif (this.port == undefined)\n\t\t\treturn (SapiClassStatus.PORT_NOT_REQUEST);\n\t\tif (this.b_open == true)\n\t\t\treturn (SapiClassStatus.PORT_NOT_OPEN);\n\t\ttry {\n\t\t\tawait this.port.open({ baudRate, bufferSize: 8192 });\n\t\t} catch(e) {\n\t\t\treturn (SapiClassStatus.PORT_USED);\n\t\t}\n\t\tthis.b_open = true;\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _close(): Promise {\n\t\tif (this.port == undefined)\n\t\t\treturn (SapiClassStatus.PORT_NOT_REQUEST);\n\t\tif (this.b_open == false)\n\t\t\treturn (SapiClassStatus.PORT_NOT_CLOSE);\n\t\tawait this.port.close();\n\t\tthis.b_open = false;\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _recvIncomingRequest_add(lenght:number): Promise> {\n\t\tlet buff_data:Array, wait_timeout:number;\n\n\t\tconst timout:number = 100;\n\t\tbuff_data = [];\n\t\twait_timeout = Date.now() + timout;\n\t\tfor (;;) {\n\t\t\tconst buffer:Array = await this._read(lenght - buff_data.length);\n\t\t\tbuff_data = buff_data.concat(buffer);\n\t\t\tif (buff_data.length == lenght)\n\t\t\t\tbreak ;\n\t\t\tif (buffer.length > 0x0) {\n\t\t\t\twait_timeout = Date.now() + timout;\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tif (Date.now() >= wait_timeout) {\n\t\t\t\tawait this._sendNack();\n\t\t\t\treturn ([]);\n\t\t\t}\n\t\t}\n\t\treturn (buff_data);\n\t}\n\n\tprivate async _recvIncomingRequest(timeout:number, wait_sof:boolean = true): Promise {\n\t\tlet buff_data:Array;\n\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tif (this.b_open == false) {\n\t\t\tout.status = SapiClassStatus.PORT_NOT_OPEN;\n\t\t\treturn (out);\n\t\t}\n\t\tif (wait_sof == true) {\n\t\t\tif (await this._waitSOF(timeout) == false) {\n\t\t\t\tout.status = SapiClassStatus.NO_SOF;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t}\n\t\tbuff_data = await this._recvIncomingRequest_add(0x1);\n\t\tif (buff_data.length != 0x1) {\n\t\t\tout.status = SapiClassStatus.NO_LENGHT;\n\t\t\treturn (out);\n\t\t}\n\t\tconst len_data:number = buff_data[0x0];\n\t\tif (len_data < 0x3) {\n\t\t\tout.status = SapiClassStatus.WRONG_LENGHT;\n\t\t\treturn (out);\n\t\t}\n\t\tbuff_data = await this._recvIncomingRequest_add(len_data);\n\t\tif (buff_data.length != len_data) {\n\t\t\tout.status = SapiClassStatus.INVALID_DATA_LEN;\n\t\t\treturn (out);\n\t\t}\n\t\tout.crc = checksum([len_data].concat(buff_data.slice(0, len_data - 0x1)));\n\t\tif (out.crc != buff_data[len_data - 1]) {\n\t\t\tawait this._sendNack();\n\t\t\tout.status = SapiClassStatus.INVALID_CRC;\n\t\t\treturn (out);\n\t\t}\n\t\tawait this._sendAck();\n\t\tout.raw = [this.SOF, len_data].concat(buff_data);\n\t\tif (WEB_TOOLS_BETA == true)\n\t\t\tconsole.log(\"<< \", splitHexBuff(out.raw));\n\t\tout.cmd = out.raw[0x3];\n\t\tout.data = out.raw.slice(0x4, out.raw.length - 0x1);\n\t\treturn (out);\n\t}\n\n\tprivate async _recvIncomingRequestAsyn(timeout:number, wait_sof:boolean = true): Promise {\n\t\tconst res:SapiClassRet = await this._recvIncomingRequest(timeout, wait_sof);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (false);\n\t\t// this.async_ret.push(res);\n\t\treturn (true);\n\t}\n\n\tprivate _sendCommandUnSz_rcv_test(res:SapiClassRet, cmd:number): boolean {\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (false);\n\t\tif (res.cmd != cmd)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate async _sendCommandUnSz(cmd:number, args:Array, timeout:number, cmd_ret?:number): Promise {\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tout.status = await this._send_cmd(cmd, args);\n\t\tif (out.status != SapiClassStatus.OK) {\n\t\t\treturn (out);\n\t\t}\n\t\tconst wait_timeout:number = Date.now() + timeout;\n\t\tfor (;;) {\n\t\t\tconst current_timeout:number = Date.now();\n\t\t\tif (current_timeout >= wait_timeout) {\n\t\t\t\tout.status = SapiClassStatus.TIMEOUT_RCV;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tconst res:SapiClassRet = await this._recvIncomingRequest(wait_timeout - current_timeout);\n\t\t\tif (cmd_ret == undefined)\n\t\t\t\tcmd_ret = cmd;\n\t\t\tif (this._sendCommandUnSz_rcv_test(res, cmd_ret) == true)\n\t\t\t\treturn (res);\n\t\t}\n\t}\n\n\tprivate async _recvIncomingRequest_wait(timeout:number, cmd_ret?:number): Promise {\n\t\tlet res:SapiClassRet, i:number;\n\n\t\tres = await this._recvIncomingRequest(timeout);\n\t\tif (cmd_ret == undefined)\n\t\t\treturn (res);\n\t\ti = this.RETRIES_CAN;\n\t\tfor (;;) {\n\t\t\tif (res.status != SapiClassStatus.OK)\n\t\t\t\tbreak ;\n\t\t\tif (res.cmd == cmd_ret)\n\t\t\t\tbreak ;\n\t\t\tif (i < 0x0) {\n\t\t\t\tres.status = SapiClassStatus.TIMEOUT_RCV_I;\n\t\t\t\tbreak ;\n\t\t\t}\n\t\t\tres = await this._recvIncomingRequest(100);\n\t\t\ti--;\n\t\t}\n\t\treturn (res);\n\t}\n\n\tpublic async recvIncomingRequest(timeout:number, cmd_ret?:number): Promise {\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tconst res:SapiClassRet = await this._recvIncomingRequest_wait(timeout, cmd_ret);\n\t\tthis.b_busy = false;\n\t\treturn (res);\n\t}\n\n\tpublic async sendCommandUnSz(cmd:number, args:Array, timeout:number = 2000, cmd_ret?:number): Promise {\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tconst res = await this._sendCommandUnSz(cmd, args, timeout, cmd_ret);\n\t\tthis.b_busy = false;\n\t\treturn (res);\n\t}\n\n\tpublic lock() {\n\t\tthis.state_lock = true;\n\t}\n\n\tpublic unlock() {\n\t\tthis.state_lock = false;\n\t}\n\n\tpublic is_busy(): boolean {\n\t\tif (this.state_lock == true)\n\t\t\treturn (true);\n\t\treturn (this.busy());\n\t}\n\n\tpublic busy(): boolean {\n\t\treturn (this.b_busy);\n\t}\n\tpublic static supported(): boolean {\n\t\tif (!(\"serial\" in window.navigator))\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tpublic async request(filters?:SapiSerialOptionFilters[]): Promise {\n\t\tif (this.busy() == true)\n\t\t\treturn (SapiClassStatus.SERIAL_BUSY);\n\t\tif (SapiClass.supported() == false)\n\t\t\treturn (SapiClassStatus.SERIAL_UN_SUPPORT);\n\t\tthis.b_busy = true;\n\t\tconst out:SapiClassStatus = await this._request(filters);\n\t\tthis.b_busy = false;\n\t\treturn (out);\n\t}\n\n\tpublic async close(): Promise {\n\t\tif (this.busy() == true)\n\t\t\treturn (SapiClassStatus.SERIAL_BUSY);\n\t\tthis.b_busy = true;\n\t\tawait this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 500);\n\t\tconst out:SapiClassStatus = await this._close();\n\t\tthis.b_busy = false;\n\t\tthis.detect_type = SapiClassDetectType.UNKNOWN;\n\t\tthis.unlock();\n\t\treturn (out);\n\t}\n\n\tpublic type(): SapiClassDetectType {\n\t\treturn (this.detect_type);\n\t}\n\n\tprivate async _detect_rcv_freeze_zuno(out:SapiClassDetectWait): Promise {\n\t\tconst freeze_zuno_info:SapiClassRet = await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000);\n\t\tif (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) {\n\t\t\tout.status = SapiClassStatus.ZUNO_NO_FREEZE;\n\t\t\treturn ;\n\t\t}\n\t\tout.type = SapiClassDetectType.ZUNO;\n\t\treturn ;\n\t}\n\n\tprivate async _detect_rcv_timout_async(out:SapiClassDetectWait, timout:number): Promise {\n\t\tconst res:SapiClassRet = await this._recvIncomingRequest(timout);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (false)\n\t\tif (res.status == SapiClassStatus.OK && res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) {\n\t\t\tif (res.data.length < 0x2) {\n\t\t\t\tout.status = SapiClassStatus.ZUNO_START_WRONG_LENG;\n\t\t\t\treturn (true);\n\t\t\t}\n\t\t\tif (res.data[0x0] != 0xFF) {\n\t\t\t\tout.status = SapiClassStatus.ZUNO_START_WRONG_FRAME;\n\t\t\t\treturn (true);\n\t\t\t}\n\t\t\tawait this._detect_rcv_freeze_zuno(out);\n\t\t\treturn (true);\n\t\t}\n\t\tif (res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED) {\n\t\t\tout.type = SapiClassDetectType.RAZBERRY;\n\t\t\treturn (true);\n\t\t}\n\t\treturn (false);\n\t}\n\n\tprivate async _detect_rcv_timout(out:SapiClassDetectWait, timout:number): Promise {\n\t\tconst wait_timeout:number = Date.now() + timout;\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tout.status = SapiClassStatus.OK;\n\t\t\tif (await this._detect_rcv_timout_async(out, 200) == true)\n\t\t\t\treturn ;\n\t\t\tconst capabilities_info:SapiClassRet = await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, [], 300);\n\t\t\tif (capabilities_info.status == SapiClassStatus.OK) {\n\t\t\t\t//VendorID = 0x0115 and ProductTypeID = 0x0210\n\t\t\t\tif (capabilities_info.data.length >= 0x6 && capabilities_info.data[0x2] == 0x1 && capabilities_info.data[0x3] == 0x15 && capabilities_info.data[0x4] == 0x2 && capabilities_info.data[0x5] == 0x10) {\n\t\t\t\t\tawait this._detect_rcv_freeze_zuno(out);\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tout.type = SapiClassDetectType.RAZBERRY;\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif (await this._detect_rcv_timout_async(out, 200) == true)//for old zuno\n\t\t\t\treturn ;\n\t\t}\n\t\tout.status = SapiClassStatus.UPDATE_TIMEOUT;\n\t}\n\n\tprivate async _detect_update(res:SapiClassRet): Promise {\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (SapiClassStatus.UPDATE_PROCESS);\n\t\tif (res.cmd != SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET)\n\t\t\treturn (SapiClassStatus.DETECTED_UNC_COMMAND);\n\t\tif (res.data.length < 0x2)\n\t\t\treturn (SapiClassStatus.ZUNO_START_WRONG_LENG);\n\t\tif (res.data[0x0] != 0x4 && res.data[0x1] != 0x1)\n\t\t\treturn (SapiClassStatus.ZUNO_START_WRONG_DATA);\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _detect(out:SapiClassDetect, baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise {\n\t\tlet i:number, res:SapiClassRet;\n\n\t\tif (this.port == undefined) {\n\t\t\tout.status = SapiClassStatus.PORT_NOT_REQUEST;\n\t\t\treturn ;\n\t\t}\n\t\tif (this.b_open == true) {\n\t\t\tout.status = await this._close();\n\t\t\tif (out.status != SapiClassStatus.OK)\n\t\t\t\treturn ;\n\t\t\tawait sleep(this.dtr_timeout);\n\t\t}\n\t\tconst baudrate_array:Array = this.BAUDRATE;\n\t\ti = baudrate.length;\n\t\twhile (i != 0x0) {\n\t\t\ti--;\n\t\t\tif (this.BAUDRATE.indexOf(baudrate[i]) != -1) {\n\t\t\t\tbaudrate_array.splice(baudrate_array.indexOf(baudrate[i]), 0x1);\n\t\t\t\tbaudrate_array.unshift(baudrate[i]);\n\t\t\t}\n\t\t}\n\t\ti = 0x0;\n\t\twhile (i < baudrate_array.length) {\n\t\t\tout.baudrate = baudrate_array[i];\n\t\t\tout.status = await this._open(baudrate_array[i]);\n\t\t\tif (out.status != SapiClassStatus.OK)\n\t\t\t\treturn ;\n\t\t\tconst wait:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\t\t\tawait this._detect_rcv_timout(wait, 1000);\n\t\t\tif (wait.status == SapiClassStatus.OK) {\n\t\t\t\tout.type = wait.type;\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif (wait.status != SapiClassStatus.UPDATE_TIMEOUT) {\n\t\t\t\tout.status = wait.status;\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif (func != null) {\n\t\t\t\tawait this._clear();\n\t\t\t\tif (await func() == false) {\n\t\t\t\t\tout.status = SapiClassStatus.DETECTED_CANCEL;\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tconst wait:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\t\t\t\tawait this._detect_rcv_timout(wait, 2000);\n\t\t\t\tif (wait.status == SapiClassStatus.OK) {\n\t\t\t\t\tout.type = wait.type;\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tif (wait.status != SapiClassStatus.UPDATE_TIMEOUT) {\n\t\t\t\t\tout.status = wait.status;\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tout.status = await this._close();\n\t\t\tif (out.status != SapiClassStatus.OK)\n\t\t\t\treturn ;\n\t\t\tawait sleep(this.dtr_timeout);\n\t\t\ti++;\n\t\t}\n\t\tout.status = SapiClassStatus.DETECTED_NOT_FIND;\n\t}\n\n\tpublic async detect(baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise {\n\t\tconst out:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0};\n\t\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tawait this._detect(out, baudrate, func);\n\t\tthis.detect_type = out.type;\n\t\tthis.b_busy = false;\n\t\treturn (out);\n\t}\n\n\tpublic getQuantumSize(): number {\n\t\treturn (this.MAX_SEND_DATA_LENGHT);\n\t}\n\n\tprivate async _checkBootImage(addr:number): Promise {\n\t\tconst data_addr:Array = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF];\n\t\tawait this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x04].concat(data_addr), 100);\n\t}\n\n\tprivate async _update_wait_zuno(target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise {\n\t\tconst wait_timeout:number = Date.now() + 30000;\n\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tconst res:SapiClassRet = await this._recvIncomingRequest(1000);\n\t\t\tout.status = await this._detect_update(res);\n\t\t\tif (out.status == SapiClassStatus.UPDATE_TIMEOUT)\n\t\t\t\tcontinue ;\n\t\t\tbreak ;\n\t\t}\n\t\tif (target_type == SapiClassDetectType.RAZBERRY) {\n\t\t\tawait sleep(20000);\n\t\t\tconst out_detect:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0};\n\t\t\tawait this._detect(out_detect, [115200], null);\n\t\t\tout.type = out_detect.type;\n\t\t\tout.status = out_detect.status;\n\t\t\treturn ;\n\t\t}\n\t\tif (wait_timeout > Date.now()) {\n\t\t\tawait this._detect_rcv_timout(out, wait_timeout - Date.now());\n\t\t\treturn ;\n\t\t}\n\t\tout.status = SapiClassStatus.UPDATE_TIMEOUT;\n\t}\n\n\tprivate async _update_wait_razberry(target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise {\n\t\tif (target_type == SapiClassDetectType.RAZBERRY) {\n\t\t\tawait this._detect_rcv_timout(out, 30000);\n\t\t\treturn ;\n\t\t}\n\t\tawait sleep(20000);\n\t\tconst out_detect:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0};\n\t\tawait this._detect(out_detect, [115200], null);\n\t\tout.type = out_detect.type;\n\t\tout.status = out_detect.status;\n\t}\n\n\tprivate async _update(addr:number, target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise {\n\t\tswitch (this.detect_type) {\n\t\t\tcase SapiClassDetectType.ZUNO:\n\t\t\t\tawait this._checkBootImage(addr);\n\t\t\t\tawait this._update_wait_zuno(target_type, out);\n\t\t\t\tbreak ;\n\t\t\tcase SapiClassDetectType.RAZBERRY:\n\t\t\t\tawait this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 200)\n\t\t\t\tawait this._update_wait_razberry(target_type, out);\n\t\t\t\tbreak ;\n\t\t\tdefault:\n\t\t\t\tout.status = SapiClassStatus.UPDATE_UNK;\n\t\t\t\tbreak ;\n\t\t}\n\t}\n\n\tpublic async update(addr:number, target_type:SapiClassDetectType): Promise {\n\t\tconst out:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tif (target_type == SapiClassDetectType.UNKNOWN) {\n\t\t\tout.status = SapiClassStatus.DETECTED_UNC;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tawait this._update(addr, target_type, out);\n\t\tthis.detect_type = out.type;\n\t\tthis.b_busy = false;\n\t\tif (out.status == SapiClassStatus.OK && out.type != target_type) {\n\t\t\tout.status = SapiClassStatus.DETECTED_TARGET_TYPE;\n\t\t\treturn (out);\n\t\t}\n\t\treturn (out);\n\t}\n\n\tpublic async detect_rcv(): Promise {\n\t\tconst out:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tif (this.detect_type == SapiClassDetectType.UNKNOWN) {\n\t\t\tout.status = SapiClassStatus.DETECTED_UNC;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tconst detect_type:SapiClassDetectType = this.detect_type;\n\t\tawait this._detect_rcv_timout(out, 3000);\n\t\tthis.detect_type = out.type;\n\t\tthis.b_busy = false;\n\t\tif (out.type != detect_type) {\n\t\t\tout.status = SapiClassStatus.DETECTED_TARGET_TYPE;\n\t\t\treturn (out);\n\t\t}\n\t\treturn (out);\n\t}\n\n\n\tconstructor() {\n\t}\n\n}","export {controller_vendor_ids};\n\ninterface ControllerVendor\n{\n\tName:string;\n\tWebpage?:string;\n}\n\ninterface ControllerVendorIds\n{\n\t[key:number]: ControllerVendor;\n}\n\nconst controller_vendor_ids:ControllerVendorIds =\n{\n\t0x0000: {\n\t\tName: 'Silicon Labs',\n\t\tWebpage : 'http://www.silabs.com',\n\t},\n\t0x0001: {\n\t\tName: 'Advaned Control Solutions',\n\t\tWebpage : 'http://www.act-solutions.com',\n\t\t\n\t},\n\t0x0002: {\n\t\tName: 'Danfoss',\n\t\tWebpage : 'http://www.danfoss.com',\n\t\t\n\t},\n\t0x0004: {\n\t\tName: 'Exhausto',\n\t\tWebpage : 'http://www.exhausto.com',\n\t},\n\t0x0012: {\n\t\tName: 'Tell It Online',\n\t},\n\t0x001e: {\n\t\tName: 'Express Controls',\n\t\tWebpage : 'http://www.expresscontrols.com',\n\t\t\n\t},\n\t0x0020: {\n\t\tName: 'Universal Electronics',\n\t\tWebpage : 'http://www.uie.com',\n\t\t\n\t},\n\t0x0033: {\n\t\tName: 'Hunter Douglas',\n\t\tWebpage : 'http://www.hdl.com',\n\t\t\n\t},\n\t0x0039: {\n\t\tName: 'Honeywell',\n\t},\t \n\t0x0059: {\n\t\tName: 'Hostmann Controls',\n\t\tWebpage : 'http://www.horstmann.co.uk',\n\t\t\n\t},\n\t0x0060: {\n\t\tName: 'Everspring',\n\t\tWebpage : 'http://www.everspring.com',\n\t\t\n\t},\n\t0x0064: {\n\t\tName: 'Duwi',\n\t\tWebpage : 'http://www.duewi.de',\n\t\t\n\t},\n\t0x0066: {\n\t\tName: 'TrickleStar',\n\t\tWebpage : 'http://www.tricklestar.com',\n\t\t\n\t},\n\t0x006b: {\n\t\tName: 'Tricklestar (former Empower Controls Ltd.)',\n\t\tWebpage : 'http://www.tricklestar.com',\n\t\t\n\t},\n\t0x0071: {\n\t\tName: 'LS Control',\n\t},\n\t0x0077: {\n\t\tName: 'Innovus',\n\t},\n\t0x007a: {\n\t\tName: 'Merten',\n\t\tWebpage : 'http://www.merten.de',\n\t\t\n\t},\n\t0x0080: {\n\t\tName: 'Vero Duco',\n\t},\n\t0x0085: {\n\t\tName: 'Fakro',\n\t\tWebpage : 'http://www.fakro.com',\n\t},\n\t0x0086: {\n\t\tName: 'Aeotec',\n\t\tWebpage : 'http://www.aeotec.com',\n\t\t\n\t},\n\t0x008a: {\n\t\tName: 'BeNeXt',\n\t\tWebpage : 'http://benext.nl',\n\t},\n\t0x0095: {\n\t\tName: 'QEES',\n\t\tWebpage : 'http://www.qees.eu',\n\t\t\n\t},\n\t0x008e: {\n\t\tName: 'Raritan',\n\t\tWebpage : 'http://www.raritan.com',\n\t},\n\t0x0092: {\n\t\tName: 'Martin Rentz',\n\t\tWebpage : 'http://www.rentz-gmbh.de',\n\t},\n\t0x001d: {\n\t\tName: 'Leviton',\n\t\tWebpage : 'http://www.leviton.com',\n\t},\n\t0x001a: {\n\t\tName: 'Cooper Wiring Devices',\n\t\tWebpage : 'http://www.cooper.com',\n\t},\n\t0x0113: {\n\t\tName: 'Evolve',\n\t\t\n\t},\n\t0x0098: {\n\t\tName: 'RTCA',\n\t\t\n\t},\n\t0x0125: {\n\t\tName: 'Motion Inc',\n\t\tWebpage : 'http://www.cooper.com',\n\t},\n\t0x0109: {\n\t\tName: 'Vision Security',\n\t\tWebpage : 'http://www.visionsecurity.com.tw',\n\t},\n\t0x0116: {\n\t\tName: 'Chromatic Technologies',\n\t\tWebpage : 'http://www.visionsecurity.com.tw',\n\t},\n\t0x0162: {\n\t\tName: 'Remotec',\n\t\tWebpage : 'http://www.remotec.com.hk',\n\t\t\n\t},\n\t0x5254: {\n\t\tName: 'Remotec',\n\t\tWebpage : 'http://www.remotec.com.hk',\n\t\t\n\t},\n\t0x0115: {\n\t\tName: 'Z-Wave.Me',\n\t\tWebpage : 'http://www.z-wave.me',\n\t\t\n\t},\n\t0x010f: {\n\t\tName: 'Fibar Group (Nice)',\n\t\tWebpage : 'http://www.fibaro.com',\n\t},\n\t0x0081: {\n\t\tName: 'Siegenia-Aubi',\n\t\tWebpage : 'http://www.siegenia-aubi.com',\n\t\t\n\t},\n\t0x0084: {\n\t\tName: 'FortrezZ',\n\t\tWebpage : 'http://www.fortrezz.com',\n\t\t\n\t},\n\t0x0097: {\n\t\tName: 'Wintop',\n\t\tWebpage : 'http://www.wintop.com',\n\t\t\n\t},\n\t0x0129: {\n\t\tName: 'Yale',\n\t\tWebpage : 'http://www.yalelocks.com',\n\t},\n\t0x0137: {\n\t\tName: 'FollowGood',\n\t\tWebpage : 'http://www.follow-good.com',\n\t},\n\t0x0142: {\n\t\tName: 'Rademacher',\n\t\tWebpage : 'http://rademacher.de',\n\t},\n\t0x0147: {\n\t\tName: 'RaZberry by Z-Wave.Me',\n\t\tWebpage : 'http://razpberry.z-wave.me',\n\t},\n\t0x0148: {\n\t\tName: 'Eurotronic Technology',\n\t\tWebpage : 'http://www.eurotronic.org',\n\t},\n\t0x008c: {\n\t\tName: 'Mi Casa Verde (Vera Control)',\n\t\tWebpage : 'http://www.micasaverde.com',\n\t},\n\t0x0175: {\n\t\tName: 'Devolo',\n\t\tWebpage : 'http://www.devolo.com',\n\t},\n\t0x0154: {\n\t\tName: 'Popp',\n\t\tWebpage : 'http://www.popp.eu',\n\t},\n\t0x0270: {\n\t\tName: 'Ubitech',\n\t\tWebpage : 'http://ubitech.hk',\n\t},\n\t0xFFFF: {\n\t\tName: '_Not defined',\n\t\t\n\t},\n\t0x0028: {\n\t\tName: '2B Electronics',\n\t\t\n\t},\n\t0x009B: {\n\t\tName: '2gig Technologies Inc.',\n\t\t\n\t},\n\t0x002A: {\n\t\tName: '3e Technologies',\n\t\t\n\t},\n\t0x0022: {\n\t\tName: 'A-1 Components',\n\t\t\n\t},\n\t0x0117: {\n\t\tName: 'Abilia',\n\t\t\n\t},\n\t0x0297: {\n\t\tName: 'AdMobilize, LLC',\n\t\t\n\t},\n\t0x0101: {\n\t\tName: 'ADOX, Inc.',\n\t\t\n\t},\n\t0x016C: {\n\t\tName: 'Advanced Optronic Devices Co.,Ltd',\n\t\t\n\t},\n\t0x009E: {\n\t\tName: 'Adventure Interactive',\n\t\t\n\t},\n\t0x0088: {\n\t\tName: 'Airvent SAM S.p.A.',\n\t\t\n\t},\n\t0x0094: {\n\t\tName: 'Alarm.com',\n\t\t\n\t},\n\t0x0126: {\n\t\tName: 'Alertme',\n\t\t\n\t},\n\t0x003B: {\n\t\tName: 'Allegion',\n\t\t\n\t},\n\t0x028E: {\n\t\tName: 'Alphanetworks',\n\t\t\n\t},\n\t0x0230: {\n\t\tName: 'Alphonsus Tech',\n\t\t\n\t},\n\t0x029F: {\n\t\tName: 'AMADAS Co., LTD ',\n\t\t\n\t},\n\t0x019C: {\n\t\tName: 'Amdocs',\n\t\t\n\t},\n\t0x005A: {\n\t\tName: 'American Grid, Inc.',\n\t\t\n\t},\n\t0x032B: {\n\t\tName: 'Anchor Tech ',\n\t\t\n\t},\n\t0x026D: {\n\t\tName: 'Antik Technology Ltd.',\n\t\t\n\t},\n\t0x0078: {\n\t\tName: 'anyCOMM Corporation',\n\t\t\n\t},\n\t0x0144: {\n\t\tName: 'Applied Micro Electronics \"AME\" BV',\n\t\t\n\t},\n\t0x0291: {\n\t\tName: 'Arkea',\n\t\t\n\t},\n\t0x0029: {\n\t\tName: 'Asia Heading',\n\t\t\n\t},\n\t0x0231: {\n\t\tName: 'ASITEQ',\n\t\t\n\t},\n\t0x028A: {\n\t\tName: 'Askey Computer Corp.',\n\t\t\n\t},\n\t0x013B: {\n\t\tName: 'AstraLink',\n\t\t\n\t},\n\t0x0134: {\n\t\tName: 'AT&T',\n\t\t\n\t},\n\t0x002B: {\n\t\tName: 'Atech',\n\t\t\n\t},\n\t0x0244: {\n\t\tName: 'Athom BV',\n\t\t\n\t},\n\t0x032A: {\n\t\tName: 'AUCEAN TECHNOLOGY. INC',\n\t\t\n\t},\n\t0x0155: {\n\t\tName: 'Avadesign Technology Co., Ltd.',\n\t\t\n\t},\n\t0x0146: {\n\t\tName: 'Axesstel Inc',\n\t\t\n\t},\n\t0x0018: {\n\t\tName: 'Balboa Instruments',\n\t\t\n\t},\n\t0x0236: {\n\t\tName: 'Bandi Comm Tech Inc.',\n\t\t\n\t},\n\t0x0204: {\n\t\tName: 'Beijing Sino-American Boyi Software Development Co., Ltd',\n\t\t\n\t},\n\t0x0251: {\n\t\tName: 'Beijing Universal Energy Huaxia Technology Co.,Ltd',\n\t\t\n\t},\n\t0x0196: {\n\t\tName: 'Bellatrix Systems, Inc.',\n\t\t\n\t},\n\t0x032D: {\n\t\tName: 'Benetek',\n\t\t\n\t},\n\t0x002C: {\n\t\tName: 'BeSafer',\n\t\t\n\t},\n\t0x014B: {\n\t\tName: 'BFT S.p.A.',\n\t\t\n\t},\n\t0x0052: {\n\t\tName: 'Bit7 Inc.',\n\t\t\n\t},\n\t0x0311: {\n\t\tName: 'Blaze Automation',\n\t\t\n\t},\n\t0x0213: {\n\t\tName: 'BMS Evler LTD',\n\t\t\n\t},\n\t0x0023: {\n\t\tName: 'Boca Devices',\n\t\t\n\t},\n\t0x015C: {\n\t\tName: 'Bosch Security Systems, Inc',\n\t\t\n\t},\n\t0x0138: {\n\t\tName: 'BRK Brands, Inc.',\n\t\t\n\t},\n\t0x002D: {\n\t\tName: 'Broadband Energy Networks Inc.',\n\t\t\n\t},\n\t0x024A: {\n\t\tName: 'BTSTAR(HK) TECHNOLOGY COMPANY LIMITED',\n\t\t\n\t},\n\t0x0145: {\n\t\tName: 'Buffalo Inc.',\n\t\t\n\t},\n\t0x0190: {\n\t\tName: 'Building 36 Technologies',\n\t\t\n\t},\n\t0x0026: {\n\t\tName: 'BuLogics',\n\t\t\n\t},\n\t0x0169: {\n\t\tName: 'Bönig und Kallenbach oHG',\n\t\t\n\t},\n\t0x009C: {\n\t\tName: 'Cameo Communications Inc.',\n\t\t\n\t},\n\t0x002E: {\n\t\tName: 'Carrier',\n\t\t\n\t},\n\t0x000B: {\n\t\tName: 'CasaWorks',\n\t\t\n\t},\n\t0x0243: {\n\t\tName: 'casenio AG',\n\t\t\n\t},\n\t0x0166: {\n\t\tName: 'CBCC Domotique SAS',\n\t\t\n\t},\n\t0x0246: {\n\t\tName: 'CentraLite Systems, Inc',\n\t\t\n\t},\n\t0x014E: {\n\t\tName: 'Check-It Solutions Inc.',\n\t\t\n\t},\n\t0x0320: {\n\t\tName: 'China Security & Fire IOT Sensing CO., LTD ',\n\t\t\n\t},\n\t0x0280: {\n\t\tName: 'Chuango Security Technology Corporation',\n\t\t\n\t},\n\t0x0082: {\n\t\tName: 'Cisco Consumer Business Group',\n\t\t\n\t},\n\t0x018E: {\n\t\tName: 'Climax Technology, Ltd.',\n\t\t\n\t},\n\t0x0200: {\n\t\tName: 'Cloud Media',\n\t\t\n\t},\n\t0x002F: {\n\t\tName: 'Color Kinetics Incorporated',\n\t\t\n\t},\n\t0x0329: {\n\t\tName: 'COMAP',\n\t\t\n\t},\n\t0x0309: {\n\t\tName: 'Comfortability',\n\t\t\n\t},\n\t0x0140: {\n\t\tName: 'Computime',\n\t\t\n\t},\n\t0x011B: {\n\t\tName: 'Connected Object',\n\t\t\n\t},\n\t0x0179: {\n\t\tName: 'ConnectHome',\n\t\t\n\t},\n\t0x0285: {\n\t\tName: 'CONNECTION TECHNOLOGY SYSTEMS ',\n\t\t\n\t},\n\t0x025D: {\n\t\tName: 'Contec intelligent housing ',\n\t\t\n\t},\n\t0x023F: {\n\t\tName: 'Control4 Corporation',\n\t\t\n\t},\n\t0x0019: {\n\t\tName: 'ControlThink LC',\n\t\t\n\t},\n\t0x000F: {\n\t\tName: 'ConvergeX Ltd.',\n\t\t\n\t},\n\t0x007D: {\n\t\tName: 'CoolGuard',\n\t\t\n\t},\n\t0x0079: {\n\t\tName: 'Cooper Lighting',\n\t\t\n\t},\n\t0x009D: {\n\t\tName: 'Coventive Technologies Inc.',\n\t\t\n\t},\n\t0x0328: {\n\t\tName: 'Cvnet',\n\t\t\n\t},\n\t0x0014: {\n\t\tName: 'Cyberhouse',\n\t\t\n\t},\n\t0x0067: {\n\t\tName: 'CyberTAN Technology, Inc.',\n\t\t\n\t},\n\t0x0030: {\n\t\tName: 'Cytech Technology Pre Ltd.',\n\t\t\n\t},\n\t0x0294: {\n\t\tName: 'D-3 Technology Co. Ltd',\n\t\t\n\t},\n\t0x018C: {\n\t\tName: 'Dawon DNS',\n\t\t\n\t},\n\t0x020A: {\n\t\tName: 'Decoris Intelligent System Limited',\n\t\t\n\t},\n\t0x013F: {\n\t\tName: 'Defacontrols BV',\n\t\t\n\t},\n\t0x032E: {\n\t\tName: 'DEFARO',\n\t\t\n\t},\n\t0x0031: {\n\t\tName: 'Destiny Networks',\n\t\t\n\t},\n\t0x0103: {\n\t\tName: 'Diehl AKO',\n\t\t\n\t},\n\t0x0032: {\n\t\tName: 'Digital 5, Inc.',\n\t\t\n\t},\n\t0x0228: {\n\t\tName: 'DigitalZone',\n\t\t\n\t},\n\t0x0108: {\n\t\tName: 'D-Link',\n\t\t\n\t},\n\t0x0127: {\n\t\tName: 'DMP (Digital Monitoring Products)',\n\t\t\n\t},\n\t0x0177: {\n\t\tName: 'Domino sistemi d.o.o.',\n\t\t\n\t},\n\t0x020E: {\n\t\tName: 'Domitech Products, LLC',\n\t\t\n\t},\n\t0x020C: {\n\t\tName: 'Dongguan Zhou Da Electronics Co.,Ltd',\n\t\t\n\t},\n\t0x017D: {\n\t\tName: 'DRACOR Inc.',\n\t\t\n\t},\n\t0x0184: {\n\t\tName: 'Dragon Tech Industrial, Ltd.',\n\t\t\n\t},\n\t0x0223: {\n\t\tName: 'DTV Research Unipessoal, Lda',\n\t\t\n\t},\n\t0x0272: {\n\t\tName: 'Dune-HD',\n\t\t\n\t},\n\t0x031B: {\n\t\tName: 'DVACO GROUP',\n\t\t\n\t},\n\t0x0132: {\n\t\tName: 'DynaQuip Controls',\n\t\t\n\t},\n\t0x0247: {\n\t\tName: 'EASY SAVER Co., Inc',\n\t\t\n\t},\n\t0x017C: {\n\t\tName: 'EbV',\n\t\t\n\t},\n\t0x016B: {\n\t\tName: 'Echostar',\n\t\t\n\t},\n\t0x028F: {\n\t\tName: 'Eco Automation',\n\t\t\n\t},\n\t0x014A: {\n\t\tName: 'Ecolink',\n\t\t\n\t},\n\t0x0157: {\n\t\tName: 'EcoNet Controls',\n\t\t\n\t},\n\t0x031F: {\n\t\tName: 'Eelectron SpA',\n\t\t\n\t},\n\t0x010D: {\n\t\tName: 'e-Home AUTOMATION',\n\t\t\n\t},\n\t0x026B: {\n\t\tName: 'Ei Electronics ',\n\t\t\n\t},\n\t0x0087: {\n\t\tName: 'Eka Systems',\n\t\t\n\t},\n\t0x021F: {\n\t\tName: 'Elexa Consumer Products Inc.',\n\t\t\n\t},\n\t0x0034: {\n\t\tName: 'El-Gev Electronics LTD',\n\t\t\n\t},\n\t0x001B: {\n\t\tName: 'ELK Products, Inc.',\n\t\t\n\t},\n\t0x020B: {\n\t\tName: 'Embedded System Design Limited',\n\t\t\n\t},\n\t0x0035: {\n\t\tName: 'Embedit A/S',\n\t\t\n\t},\n\t0x0284: {\n\t\tName: 'Empers Tech Co., Ltd.',\n\t\t\n\t},\n\t0x014D: {\n\t\tName: 'Enblink Co. Ltd',\n\t\t\n\t},\n\t0x0219: {\n\t\tName: 'Enwox Technologies s.r.o.',\n\t\t\n\t},\n\t0x006F: {\n\t\tName: 'Erone',\n\t\t\n\t},\n\t0x0160: {\n\t\tName: 'Essence Security',\n\t\t\n\t},\n\t0x029B: {\n\t\tName: 'ESSENTIAL TECHNOLOGIES INC.',\n\t\t\n\t},\n\t0x0036: {\n\t\tName: 'Exceptional Innovations',\n\t\t\n\t},\n\t0x009F: {\n\t\tName: 'Exigent Sensors',\n\t\t\n\t},\n\t0x0233: {\n\t\tName: 'eZEX Corporation',\n\t\t\n\t},\n\t0x016A: {\n\t\tName: 'Fantem',\n\t\t\n\t},\n\t0x0295: {\n\t\tName: 'fifthplay nv',\n\t\t\n\t},\n\t0x018D: {\n\t\tName: 'Flextronics',\n\t\t\n\t},\n\t0x0024: {\n\t\tName: 'Flue Sentinel',\n\t\t\n\t},\n\t0x0037: {\n\t\tName: 'Foard Systems',\n\t\t\n\t},\n\t0x018F: {\n\t\tName: 'Focal Point Limited',\n\t\t\n\t},\n\t0x0207: {\n\t\tName: 'Forest Group Nederland B.V',\n\t\t\n\t},\n\t0x011D: {\n\t\tName: 'Foxconn',\n\t\t\n\t},\n\t0x0110: {\n\t\tName: 'Frostdale',\n\t\t\n\t},\n\t0x0305: {\n\t\tName: 'Future Home AS',\n\t\t\n\t},\n\t0x025A: {\n\t\tName: 'GES',\n\t\t\n\t},\n\t0x022B: {\n\t\tName: 'GKB Security Corporation',\n\t\t\n\t},\n\t0x018A: {\n\t\tName: 'Globalchina-Tech',\n\t\t\n\t},\n\t0x0159: {\n\t\tName: 'Goap',\n\t\t\n\t},\n\t0x0076: {\n\t\tName: 'Goggin Research',\n\t\t\n\t},\n\t0x0068: {\n\t\tName: 'Good Way Technology Co., Ltd',\n\t\t\n\t},\n\t0x0099: {\n\t\tName: 'GreenWave Reality Inc.',\n\t\t\n\t},\n\t0x018B: {\n\t\tName: 'Grib',\n\t\t\n\t},\n\t0x016D: {\n\t\tName: 'Guangzhou Ruixiang M&E Co., Ltd',\n\t\t\n\t},\n\t0x0158: {\n\t\tName: 'GuangZhou Zeewave Information Technology Co., Ltd.',\n\t\t\n\t},\n\t0x0287: {\n\t\tName: 'HAB Home Intelligence, LLC',\n\t\t\n\t},\n\t0x030D: {\n\t\tName: 'Hampoo',\n\t\t\n\t},\n\t0x0208: {\n\t\tName: 'HANK Electronics Ltd',\n\t\t\n\t},\n\t0x024C: {\n\t\tName: 'Hankook Gas Kiki CO.,LTD. ',\n\t\t\n\t},\n\t0x025C: {\n\t\tName: 'Hauppauge',\n\t\t\n\t},\n\t0x0073: {\n\t\tName: 'Hawking Technologies Inc.',\n\t\t\n\t},\n\t0x020F: {\n\t\tName: 'Herald Datanetics Limited',\n\t\t\n\t},\n\t0x0017: {\n\t\tName: 'HiTech Automation',\n\t\t\n\t},\n\t0x0181: {\n\t\tName: 'Holion Electronic Engineering Co., Ltd',\n\t\t\n\t},\n\t0x013E: {\n\t\tName: 'Holtec Electronics BV',\n\t\t\n\t},\n\t0x000D: {\n\t\tName: 'Home Automated Living',\n\t\t\n\t},\n\t0x009A: {\n\t\tName: 'Home Automation Europe',\n\t\t\n\t},\n\t0x005B: {\n\t\tName: 'Home Automation Inc.',\n\t\t\n\t},\n\t0x0293: {\n\t\tName: 'Home controls',\n\t\t\n\t},\n\t0x0038: {\n\t\tName: 'Home Director',\n\t\t\n\t},\n\t0x0070: {\n\t\tName: 'Homemanageables, Inc.',\n\t\t\n\t},\n\t0x0050: {\n\t\tName: 'Homepro',\n\t\t\n\t},\n\t0x000C: {\n\t\tName: 'HomeSeer Technologies',\n\t\t\n\t},\n\t0x0275: {\n\t\tName: 'Honest Technology',\n\t\t\n\t},\n\t0x023D: {\n\t\tName: 'Honest Technology Co., Ltd.',\n\t\t\n\t},\n\t0x0313: {\n\t\tName: 'Hoppe',\n\t\t\n\t},\n\t0x0298: {\n\t\tName: 'Horus Smart Control',\n\t\t\n\t},\n\t0x0221: {\n\t\tName: 'HOSEOTELNET',\n\t\t\n\t},\n\t0x0180: {\n\t\tName: 'Huapin Information Technology Co.,Ltd',\n\t\t\n\t},\n\t0x025F: {\n\t\tName: 'Huawei Device Co., Ltd. ',\n\t\t\n\t},\n\t0x024B: {\n\t\tName: 'Huawei Technologies Co., Ltd.',\n\t\t\n\t},\n\t0x007C: {\n\t\tName: 'Hunter Douglas',\n\t\t\n\t},\n\t0x0218: {\n\t\tName: 'iAutomade Pte Ltd',\n\t\t\n\t},\n\t0x0011: {\n\t\tName: 'iCOM Technology b.v.',\n\t\t\n\t},\n\t0x0106: {\n\t\tName: 'iControl Networks',\n\t\t\n\t},\n\t0x0165: {\n\t\tName: 'ID-RF',\n\t\t\n\t},\n\t0x019E: {\n\t\tName: 'iEXERGY GmbH',\n\t\t\n\t},\n\t0x031C: {\n\t\tName: 'Ilevia srl',\n\t\t\n\t},\n\t0x0056: {\n\t\tName: 'Impact Technologies and Products',\n\t\t\n\t},\n\t0x0061: {\n\t\tName: 'Impact Technologies BV',\n\t\t\n\t},\n\t0x012B: {\n\t\tName: 'Infusion Development',\n\t\t\n\t},\n\t0x006C: {\n\t\tName: 'Ingersoll Rand (Schlage)',\n\t\t\n\t},\n\t0x011F: {\n\t\tName: 'Ingersoll Rand (was Ecolink)',\n\t\t\n\t},\n\t0x0256: {\n\t\tName: 'Inkel Corp.',\n\t\t\n\t},\n\t0x003A: {\n\t\tName: 'Inlon Srl',\n\t\t\n\t},\n\t0x0141: {\n\t\tName: 'Innoband Technologies, Inc',\n\t\t\n\t},\n\t0x031E: {\n\t\tName: 'Inovelli',\n\t\t\n\t},\n\t0x0100: {\n\t\tName: 'Insignia',\n\t\t\n\t},\n\t0x0006: {\n\t\tName: 'Intel',\n\t\t\n\t},\n\t0x001C: {\n\t\tName: 'IntelliCon',\n\t\t\n\t},\n\t0x0072: {\n\t\tName: 'Interactive Electronics Systems (IES)',\n\t\t\n\t},\n\t0x0005: {\n\t\tName: 'Intermatic',\n\t\t\n\t},\n\t0x0013: {\n\t\tName: 'Internet Dom',\n\t\t\n\t},\n\t0x0288: {\n\t\tName: 'INTERSOFT',\n\t\t\n\t},\n\t0x0278: {\n\t\tName: 'Inventec',\n\t\t\n\t},\n\t0x005F: {\n\t\tName: 'IQ-Group',\n\t\t\n\t},\n\t0x0212: {\n\t\tName: 'iRevo',\n\t\t\n\t},\n\t0x0253: {\n\t\tName: 'iungo.nl B.V.',\n\t\t\n\t},\n\t0x0123: {\n\t\tName: 'IWATSU',\n\t\t\n\t},\n\t0x0063: {\n\t\tName: 'Jasco Products',\n\t\t\n\t},\n\t0x015A: {\n\t\tName: 'Jin Tao Bao',\n\t\t\n\t},\n\t0x0164: {\n\t\tName: 'JSW Pacific Corporation',\n\t\t\n\t},\n\t0x0214: {\n\t\tName: 'Kaipule Technology Co., Ltd.',\n\t\t\n\t},\n\t0x0091: {\n\t\tName: 'Kamstrup A/S',\n\t\t\n\t},\n\t0x006A: {\n\t\tName: 'Kellendonk Elektronik',\n\t\t\n\t},\n\t0x0114: {\n\t\tName: 'Kichler',\n\t\t\n\t},\n\t0x0139: {\n\t\tName: 'KlickH Pvt Ltd.',\n\t\t\n\t},\n\t0x0261: {\n\t\tName: 'KOOL KONCEPTS',\n\t\t\n\t},\n\t0x0174: {\n\t\tName: 'Kopera Development Inc.',\n\t\t\n\t},\n\t0x023A: {\n\t\tName: 'KUMHO ELECTRIC, INC',\n\t\t\n\t},\n\t0x0051: {\n\t\tName: 'Lagotek Corporation',\n\t\t\n\t},\n\t0x0173: {\n\t\tName: 'Leak Intelligence, LLC',\n\t\t\n\t},\n\t0x0300: {\n\t\tName: 'LEEDARSON LIGHTING CO., LTD.',\n\t\t\n\t},\n\t0x0187: {\n\t\tName: 'LEVION Technologies GmbH',\n\t\t\n\t},\n\t0x0015: {\n\t\tName: 'Lexel',\n\t\t\n\t},\n\t0x015B: {\n\t\tName: 'LG Electronics',\n\t\t\n\t},\n\t0x0224: {\n\t\tName: 'LifeShield, LLC',\n\t\t\n\t},\n\t0x003C: {\n\t\tName: 'Lifestyle Networks',\n\t\t\n\t},\n\t0x0210: {\n\t\tName: 'Light Engine Limited',\n\t\t\n\t},\n\t0x0316: {\n\t\tName: 'Lite Automation',\n\t\t\n\t},\n\t0x017A: {\n\t\tName: 'Liveguard Ltd.',\n\t\t\n\t},\n\t0x013A: {\n\t\tName: 'Living Style Enterprises, Ltd.',\n\t\t\n\t},\n\t0x015E: {\n\t\tName: 'Locstar Technology Co., Ltd',\n\t\t\n\t},\n\t0x007F: {\n\t\tName: 'Logitech',\n\t\t\n\t},\n\t0x0025: {\n\t\tName: 'Loudwater Technologies, LLC',\n\t\t\n\t},\n\t0x025E: {\n\t\tName: 'LUXEASY technology company LTD.',\n\t\t\n\t},\n\t0x0062: {\n\t\tName: 'LVI Produkter AB',\n\t\t\n\t},\n\t0x0192: {\n\t\tName: 'm2m Solution',\n\t\t\n\t},\n\t0x0195: {\n\t\tName: 'M2M Solution',\n\t\t\n\t},\n\t0x006E: {\n\t\tName: 'Manodo / KTC',\n\t\t\n\t},\n\t0x003D: {\n\t\tName: 'Marmitek BV',\n\t\t\n\t},\n\t0x003E: {\n\t\tName: 'Martec Access Products',\n\t\t\n\t},\n\t0x008F: {\n\t\tName: 'MB Turn Key Design',\n\t\t\n\t},\n\t0x015F: {\n\t\tName: 'McoHome Technology Co., Ltd',\n\t\t\n\t},\n\t0x0222: {\n\t\tName: 'MCT CO., LTD',\n\t\t\n\t},\n\t0x0027: {\n\t\tName: 'Meedio, LLC',\n\t\t\n\t},\n\t0x0107: {\n\t\tName: 'MegaChips',\n\t\t\n\t},\n\t0x022D: {\n\t\tName: 'Mercury Corporation',\n\t\t\n\t},\n\t0x0238: {\n\t\tName: 'Milanity, Inc.',\n\t\t\n\t},\n\t0x0112: {\n\t\tName: 'MITSUMI',\n\t\t\n\t},\n\t0x019D: {\n\t\tName: 'MOBILUS MOTOR Spółka z o.o. ',\n\t\t\n\t},\n\t0x0232: {\n\t\tName: 'MODACOM CO., LTD.',\n\t\t\n\t},\n\t0x008D: {\n\t\tName: 'Modstrøm',\n\t\t\n\t},\n\t0x000E: {\n\t\tName: 'Mohito Networks',\n\t\t\n\t},\n\t0x0202: {\n\t\tName: 'Monoprice',\n\t\t\n\t},\n\t0x007E: {\n\t\tName: 'Monster Cable',\n\t\t\n\t},\n\t0x003F: {\n\t\tName: 'Motorola',\n\t\t\n\t},\n\t0x0122: {\n\t\tName: 'MSK - Miyakawa Seisakusho',\n\t\t\n\t},\n\t0x0083: {\n\t\tName: 'MTC Maintronic Germany',\n\t\t\n\t},\n\t0x0143: {\n\t\tName: 'myStrom',\n\t\t\n\t},\n\t0x016E: {\n\t\tName: 'Nanjing Easthouse Electrical Co., Ltd.',\n\t\t\n\t},\n\t0x0121: {\n\t\tName: 'Napco Security Technologies, Inc.',\n\t\t\n\t},\n\t0x006D: {\n\t\tName: 'Nefit',\n\t\t\n\t},\n\t0x0189: {\n\t\tName: 'Ness Corporation Pty Ltd',\n\t\t\n\t},\n\t0x0133: {\n\t\tName: 'Netgear',\n\t\t\n\t},\n\t0x0248: {\n\t\tName: 'neusta next GmbH & Co. KG',\n\t\t\n\t},\n\t0x0203: {\n\t\tName: 'Newland Communication Science Technology Co., Ltd.',\n\t\t\n\t},\n\t0x0268: {\n\t\tName: 'Nexa Trading AB',\n\t\t\n\t},\n\t0x0178: {\n\t\tName: 'Nexia Home Intelligence',\n\t\t\n\t},\n\t0x0075: {\n\t\tName: 'NextEnergy',\n\t\t\n\t},\n\t0x0312: {\n\t\tName: 'NIE Technology Co., Ltd',\n\t\t\n\t},\n\t0x0185: {\n\t\tName: 'Ningbo Sentek Electronics Co., Ltd',\n\t\t\n\t},\n\t0x014F: {\n\t\tName: 'Nortek Security & Control LLC ',\n\t\t\n\t},\n\t0x0252: {\n\t\tName: 'North China University of Technology',\n\t\t\n\t},\n\t0x0096: {\n\t\tName: 'NorthQ',\n\t\t\n\t},\n\t0x0040: {\n\t\tName: 'Novar Electrical Devices and Systems (EDS)',\n\t\t\n\t},\n\t0x020D: {\n\t\tName: 'Novateqni HK Ltd',\n\t\t\n\t},\n\t0x0296: {\n\t\tName: 'OBLO LIVING LLC',\n\t\t\n\t},\n\t0x0119: {\n\t\tName: 'Omnima Limited',\n\t\t\n\t},\n\t0x014C: {\n\t\tName: 'OnSite Pro',\n\t\t\n\t},\n\t0x0041: {\n\t\tName: 'OpenPeak Inc.',\n\t\t\n\t},\n\t0x027D: {\n\t\tName: 'Oregon Automation ',\n\t\t\n\t},\n\t0x0104: {\n\t\tName: 'Panasonic Electric Works Co., Ltd.',\n\t\t\n\t},\n\t0x031A: {\n\t\tName: 'Panasonic ES Shin Dong-A Co., Ltd',\n\t\t\n\t},\n\t0x028D: {\n\t\tName: 'Panodic Electric (Shenzhen) Limited',\n\t\t\n\t},\n\t0x0257: {\n\t\tName: 'PARATECH',\n\t\t\n\t},\n\t0x0172: {\n\t\tName: 'PassivSystems Limited',\n\t\t\n\t},\n\t0x0322: {\n\t\tName: 'Paxton Access Ltd',\n\t\t\n\t},\n\t0x0281: {\n\t\tName: 'PC Partner',\n\t\t\n\t},\n\t0x013D: {\n\t\tName: 'Pella',\n\t\t\n\t},\n\t0x0245: {\n\t\tName: 'permundo GmbH',\n\t\t\n\t},\n\t0x013C: {\n\t\tName: 'Philio Technology Corp',\n\t\t\n\t},\n\t0x0277: {\n\t\tName: 'Pixela Corporation ',\n\t\t\n\t},\n\t0x010E: {\n\t\tName: 'Danalock',\n\t\t\n\t},\n\t0x0170: {\n\t\tName: 'Powerhouse Dynamics',\n\t\t\n\t},\n\t0x0074: {\n\t\tName: 'PowerLinx',\n\t\t\n\t},\n\t0x0016: {\n\t\tName: 'PowerLynx',\n\t\t\n\t},\n\t0x0042: {\n\t\tName: 'Pragmatic Consulting Inc.',\n\t\t\n\t},\n\t0x0128: {\n\t\tName: 'Prodrive Technologies',\n\t\t\n\t},\n\t0x0161: {\n\t\tName: 'Promixis, LLC',\n\t\t\n\t},\n\t0x005D: {\n\t\tName: 'Pulse Technologies (Aspalis)',\n\t\t\n\t},\n\t0x012A: {\n\t\tName: 'Qolsys',\n\t\t\n\t},\n\t0x0130: {\n\t\tName: 'Quby',\n\t\t\n\t},\n\t0x0163: {\n\t\tName: 'Queenlock Ind. Co., Ltd.',\n\t\t\n\t},\n\t0x0314: {\n\t\tName: 'Raonix Co., Ltd.',\n\t\t\n\t},\n\t0x021E: {\n\t\tName: 'Red Bee Co. Ltd',\n\t\t\n\t},\n\t0x022C: {\n\t\tName: 'Remote Solution',\n\t\t\n\t},\n\t0x0255: {\n\t\tName: 'Remote Technologies Incorporated',\n\t\t\n\t},\n\t0x0010: {\n\t\tName: 'Residential Control Systems, Inc. (RCS)',\n\t\t\n\t},\n\t0x0216: {\n\t\tName: 'RET Nanjing Intelligence System CO.,Ltd',\n\t\t\n\t},\n\t0x0153: {\n\t\tName: 'Revolv Inc',\n\t\t\n\t},\n\t0x023B: {\n\t\tName: 'ROC-Connect, Inc.',\n\t\t\n\t},\n\t0x0197: {\n\t\tName: 'RPE Ajax LLC (dbs Secur Ltd)',\n\t\t\n\t},\n\t0x0065: {\n\t\tName: 'RS Scene Automation',\n\t\t\n\t},\n\t0x029D: {\n\t\tName: 'Rubetek',\n\t\t\n\t},\n\t0x0290: {\n\t\tName: 'S1',\n\t\t\n\t},\n\t0x023C: {\n\t\tName: 'SafeTech Products',\n\t\t\n\t},\n\t0x0201: {\n\t\tName: 'Samsung Electronics Co., Ltd.',\n\t\t\n\t},\n\t0x022E: {\n\t\tName: 'Samsung SDS',\n\t\t\n\t},\n\t0x0093: {\n\t\tName: 'San Shih Electrical Enterprise Co., Ltd.',\n\t\t\n\t},\n\t0x012C: {\n\t\tName: 'SANAV',\n\t\t\n\t},\n\t0x0307: {\n\t\tName: 'SATCO Products, Inc. ',\n\t\t\n\t},\n\t0x0318: {\n\t\tName: 'SBCK Corp. ',\n\t\t\n\t},\n\t0x001F: {\n\t\tName: 'Scientia Technologies, Inc.',\n\t\t\n\t},\n\t0x029A: {\n\t\tName: 'Scout Alarm',\n\t\t\n\t},\n\t0x011E: {\n\t\tName: 'Secure Wireless',\n\t\t\n\t},\n\t0x0167: {\n\t\tName: 'SecureNet Technologies',\n\t\t\n\t},\n\t0x0182: {\n\t\tName: 'Securifi Ltd.',\n\t\t\n\t},\n\t0x0069: {\n\t\tName: 'Seluxit',\n\t\t\n\t},\n\t0x0043: {\n\t\tName: 'Senmatic A/S',\n\t\t\n\t},\n\t0x019A: {\n\t\tName: 'Sensative AB',\n\t\t\n\t},\n\t0x0044: {\n\t\tName: 'Sequoia Technology LTD',\n\t\t\n\t},\n\t0x0151: {\n\t\tName: 'Sercomm Corp',\n\t\t\n\t},\n\t0x030B: {\n\t\tName: 'Shandong Smart Life Data System Co .LTD',\n\t\t\n\t},\n\t0x0215: {\n\t\tName: 'Shangdong Smart Life Data System Co.,Ltd',\n\t\t\n\t},\n\t0x023E: {\n\t\tName: 'Shanghai Dorlink Intelligent Technologies Co.,Ltd',\n\t\t\n\t},\n\t0x0205: {\n\t\tName: 'Shanghai Longchuang Eco-energy Systems Co., Ltd',\n\t\t\n\t},\n\t0x010B: {\n\t\tName: 'Sharp',\n\t\t\n\t},\n\t0x021A: {\n\t\tName: 'SHENZHEN AOYA INDUSTRY CO. LTD',\n\t\t\n\t},\n\t0x0286: {\n\t\tName: 'Shenzhen Easyhome Technology Co., Ltd.',\n\t\t\n\t},\n\t0x021C: {\n\t\tName: 'Shenzhen iSurpass Technology Co. ,Ltd',\n\t\t\n\t},\n\t0x021D: {\n\t\tName: 'Shenzhen Kaadas Intelligent Technology Co., Ltd',\n\t\t\n\t},\n\t0x0211: {\n\t\tName: 'Shenzhen Liao Wang Tong Da Technology Ltd',\n\t\t\n\t},\n\t0x0258: {\n\t\tName: 'Shenzhen Neo Electronics Co., Ltd',\n\t\t\n\t},\n\t0x0250: {\n\t\tName: 'Shenzhen Tripath Digital Audio Equipment Co.,Ltd',\n\t\t\n\t},\n\t0x0260: {\n\t\tName: 'Shenzhen Heiman Technology Co., Ltd',\n\t\t\n\t},\n\t0x032C: {\n\t\tName: 'Shenzhen Saykey Technology Co., Ltd ',\n\t\t\n\t},\n\t0x0267: {\n\t\tName: 'SimonTech S.L.U',\n\t\t\n\t},\n\t0x0045: {\n\t\tName: 'Sine Wireless',\n\t\t\n\t},\n\t0x0266: {\n\t\tName: 'Siterwell Technology HK Co., LTD ',\n\t\t\n\t},\n\t0x0282: {\n\t\tName: 'Smart Electronic Industrial (Dongguan) Co., Limited',\n\t\t\n\t},\n\t0x0046: {\n\t\tName: 'Smart Products, Inc.',\n\t\t\n\t},\n\t0x026A: {\n\t\tName: 'SmartAll Inc.',\n\t\t\n\t},\n\t0x0323: {\n\t\tName: 'SmartHome Partner GmbH',\n\t\t\n\t},\n\t0x024F: {\n\t\tName: 'Smartly AS',\n\t\t\n\t},\n\t0x0150: {\n\t\tName: 'SmartThings, Inc.',\n\t\t\n\t},\n\t0x0102: {\n\t\tName: 'SMK Manufacturing Inc.',\n\t\t\n\t},\n\t0x029C: {\n\t\tName: 'SoftAtHome',\n\t\t\n\t},\n\t0x0047: {\n\t\tName: 'Somfy',\n\t\t\n\t},\n\t0x0274: {\n\t\tName: 'Soosan Hometech',\n\t\t\n\t},\n\t0x0090: {\n\t\tName: 'Spectrum Brands',\n\t\t\n\t},\n\t0x026E: {\n\t\tName: 'Springs Window Fashions',\n\t\t\n\t},\n\t0x026F: {\n\t\tName: 'Sprue Safety Products Ltd',\n\t\t\n\t},\n\t0x0124: {\n\t\tName: 'Square Connect',\n\t\t\n\t},\n\t0x021B: {\n\t\tName: 'ST&T Electric Corporation',\n\t\t\n\t},\n\t0x0259: {\n\t\tName: 'Starkoff',\n\t\t\n\t},\n\t0x0265: {\n\t\tName: 'StarVedia',\n\t\t\n\t},\n\t0x0271: {\n\t\tName: 'STEINEL GmbH ',\n\t\t\n\t},\n\t0x0239: {\n\t\tName: 'Stelpro',\n\t\t\n\t},\n\t0x0217: {\n\t\tName: 'Strattec Advanced Logic,LLC',\n\t\t\n\t},\n\t0x0168: {\n\t\tName: 'STRATTEC Security Corporation',\n\t\t\n\t},\n\t0x0105: {\n\t\tName: 'Sumitomo',\n\t\t\n\t},\n\t0x028B: {\n\t\tName: 'Sunjet Components Corp.',\n\t\t\n\t},\n\t0x0054: {\n\t\tName: 'Superna',\n\t\t\n\t},\n\t0x0191: {\n\t\tName: 'Swann Communications Pty Ltd',\n\t\t\n\t},\n\t0x0009: {\n\t\tName: 'Sylvania',\n\t\t\n\t},\n\t0x0136: {\n\t\tName: 'Systech Corporation',\n\t\t\n\t},\n\t0x0276: {\n\t\tName: 'Systemair Sverige AB',\n\t\t\n\t},\n\t0x0235: {\n\t\tName: 'TAEWON Lighting Co., Ltd.',\n\t\t\n\t},\n\t0x0262: {\n\t\tName: 'Taiwan Fu Hsing Industrial Co., Ltd.',\n\t\t\n\t},\n\t0x0264: {\n\t\tName: 'Taiwan iCATCH Inc.',\n\t\t\n\t},\n\t0x0186: {\n\t\tName: 'Team Digital Limited',\n\t\t\n\t},\n\t0x0089: {\n\t\tName: 'Team Precision PCL',\n\t\t\n\t},\n\t0x0240: {\n\t\tName: 'Technicolor',\n\t\t\n\t},\n\t0x000A: {\n\t\tName: 'Techniku',\n\t\t\n\t},\n\t0x012F: {\n\t\tName: 'Tecom Co., Ltd.',\n\t\t\n\t},\n\t0x0176: {\n\t\tName: 'Telldus Technologies AB',\n\t\t\n\t},\n\t0x0048: {\n\t\tName: 'Telsey',\n\t\t\n\t},\n\t0x017E: {\n\t\tName: 'Telular',\n\t\t\n\t},\n\t0x005C: {\n\t\tName: 'Terra Optima B.V. (tidligere Primair Services)',\n\t\t\n\t},\n\t0x010C: {\n\t\tName: 'There Corporation',\n\t\t\n\t},\n\t0x019B: {\n\t\tName: 'HeatIt',\n\t\t\n\t},\n\t0x0317: {\n\t\tName: 'Think Simple srl',\n\t\t\n\t},\n\t0x022A: {\n\t\tName: 'TIMEVALVE, Inc.',\n\t\t\n\t},\n\t0x0118: {\n\t\tName: 'TKB Home',\n\t\t\n\t},\n\t0x011C: {\n\t\tName: 'TKH Group / Eminent',\n\t\t\n\t},\n\t0x0327: {\n\t\tName: 'TMC Technology Ltd.',\n\t\t\n\t},\n\t0x0319: {\n\t\tName: 'Toledo & Co., Inc.',\n\t\t\n\t},\n\t0x0283: {\n\t\tName: 'TP-Link Technologies Co., Ltd.',\n\t\t\n\t},\n\t0x008B: {\n\t\tName: 'Trane Corporation',\n\t\t\n\t},\n\t0x0055: {\n\t\tName: 'Tridium',\n\t\t\n\t},\n\t0x0111: {\n\t\tName: 'Tronico Technology Co. Ltd.',\n\t\t\n\t},\n\t0x0049: {\n\t\tName: 'Twisthink',\n\t\t\n\t},\n\t0x0152: {\n\t\tName: 'UFairy G.R. Tech',\n\t\t\n\t},\n\t0x0193: {\n\t\tName: 'Universal Devices, Inc',\n\t\t\n\t},\n\t0x0183: {\n\t\tName: 'Universe Future',\n\t\t\n\t},\n\t0x0209: {\n\t\tName: 'UTC Fire and Security Americas Corp',\n\t\t\n\t},\n\t0x010A: {\n\t\tName: 'VDA',\n\t\t\n\t},\n\t0x030F: {\n\t\tName: 'Vemmio',\n\t\t\n\t},\n\t0x0198: {\n\t\tName: 'Venstar Inc.',\n\t\t\n\t},\n\t0x0237: {\n\t\tName: 'Vestel Elektronik Ticaret ve Sanayi A.S.',\n\t\t\n\t},\n\t0x0053: {\n\t\tName: 'Viewsonic',\n\t\t\n\t},\n\t0x005E: {\n\t\tName: 'ViewSonic Corporation',\n\t\t\n\t},\n\t0x0007: {\n\t\tName: 'Vimar CRS',\n\t\t\n\t},\n\t0x0188: {\n\t\tName: 'Vipa-Star',\n\t\t\n\t},\n\t0x004A: {\n\t\tName: 'Visualize',\n\t\t\n\t},\n\t0x0058: {\n\t\tName: 'Vitelec',\n\t\t\n\t},\n\t0x0263: {\n\t\tName: 'Viva Labs AS',\n\t\t\n\t},\n\t0x0156: {\n\t\tName: 'Vivint',\n\t\t\n\t},\n\t0x017B: {\n\t\tName: 'Vs-Safety AS',\n\t\t\n\t},\n\t0x004B: {\n\t\tName: 'Watt Stopper',\n\t\t\n\t},\n\t0x0008: {\n\t\tName: 'Wayne Dalton',\n\t\t\n\t},\n\t0x019F: {\n\t\tName: 'Webee Life',\n\t\t\n\t},\n\t0x0171: {\n\t\tName: 'WeBeHome AB',\n\t\t\n\t},\n\t0x011A: {\n\t\tName: 'Wenzhou MTLC Electric Appliances Co.,Ltd.',\n\t\t\n\t},\n\t0x026C: {\n\t\tName: 'Westcontrol AS',\n\t\t\n\t},\n\t0x0057: {\n\t\tName: 'Whirlpool',\n\t\t\n\t},\n\t0x027B: {\n\t\tName: 'White Rabbit',\n\t\t\n\t},\n\t0x0149: {\n\t\tName: 'wiDom',\n\t\t\n\t},\n\t0x015D: {\n\t\tName: 'Willis Electric Co., Ltd.',\n\t\t\n\t},\n\t0x012D: {\n\t\tName: 'Wilshine Holding Co., Ltd',\n\t\t\n\t},\n\t0x017F: {\n\t\tName: 'Wink Inc.',\n\t\t\n\t},\n\t0x0242: {\n\t\tName: 'Winytechnology',\n\t\t\n\t},\n\t0x0199: {\n\t\tName: 'Wireless Maingate AB',\n\t\t\n\t},\n\t0x004C: {\n\t\tName: 'Woodward Labs',\n\t\t\n\t},\n\t0x0269: {\n\t\tName: 'WOOREE Lighting Co.,Ltd.',\n\t\t\n\t},\n\t0x0003: {\n\t\tName: 'Wr@p',\n\t\t\n\t},\n\t0x022F: {\n\t\tName: 'WRT Intelligent Technology CO., LTD.',\n\t\t\n\t},\n\t0x012E: {\n\t\tName: 'Wuhan NWD Technology Co., Ltd.',\n\t\t\n\t},\n\t0x004D: {\n\t\tName: 'Xanboo',\n\t\t\n\t},\n\t0x024E: {\n\t\tName: 'zConnect',\n\t\t\n\t},\n\t0x004E: {\n\t\tName: 'Zdata, LLC.',\n\t\t\n\t},\n\t0x016F: {\n\t\tName: 'Zhejiang Jiuxing Electric Co Ltd',\n\t\t\n\t},\n\t0x0131: {\n\t\tName: 'Zipato',\n\t\t\n\t},\n\t0x0120: {\n\t\tName: 'Zonoff',\n\t\t\n\t},\n\t0x027A: {\n\t\tName: 'Zooz',\n\t\t\n\t},\n\t0x031D: {\n\t\tName: 'Z-Wave Alliance',\n\t\t\n\t},\n\t0x004F: {\n\t\tName: 'Z-Wave Technologia',\n\t\t\n\t},\n\t0x0315: {\n\t\tName: 'zwaveproducts.com',\n\t\t\n\t},\n\t0x024D: {\n\t\tName: 'Z-works Inc.',\n\t\t\n\t},\n\t0x0021: {\n\t\tName: 'Zykronix',\n\t\t\n\t},\n\t0x0135: {\n\t\tName: 'ZyXEL',\n\t\t\n\t},\n\t0x0330: {\n\t\tName: 'Sunricher',\n\t\t\n\t},\n\t0x033A: {\n\t\tName: 'HELTUN',\n\t\tWebpage : 'heltun.com',\n\t}\n};","import {WEB_TOOLS_BETA} from \"../other/define\"\n\nimport {\n\tSapiClass, SapiClassStatus, SapiClassFuncId, SapiClassRet, SapiClassDetectWait, SapiClassDetectType, SapiClassUpdateProcess,\n\tSapiClassDetectTypeFunc, SapiClassDetect\n} from \"./sapi\";\n\nimport {SapiRegionClass} from \"./region\";\n\nimport {costruct_int, toString, conv2Decimal, conv2DecimalPadding, checksum, arrayToStringHex, calcSigmaCRC16} from \"../other/utilities\";\nimport {HardwareChipClass} from \"../hardware/chip\"\n\nexport {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo, ZunoSapiClassParamInfo, ZunoSapiClassRegion, ZunoSapiClassPower, ZunoSapiClassS2Key, ZunoSapiClassSec};\n\nenum ELearnStatus\n{\n\tELEARNSTATUS_ASSIGN_COMPLETE, /**< Internal status. Not passed to application. */\n\tELEARNSTATUS_ASSIGN_NODEID_DONE, /**< Internal status. Node ID have been assigned */\n\tELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE, /**< Internal status. Node is doing Neighbor discovery */\n\tELEARNSTATUS_ASSIGN_INFO_PENDING, /**< Internal status. Not passed to application. */\n\tELEARNSTATUS_ASSIGN_WAITING_FOR_FIND, /**< Internal status. Not passed to application. */\n\tELEARNSTATUS_SMART_START_IN_PROGRESS, /**< Passed to application when Smart Start learn mode goes into progress. */\n\tELEARNSTATUS_LEARN_IN_PROGRESS, /**< Passed to application when classic learn mode goes into progress. */\n\tELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT,/**< Passed to application if classic learn mode times out. */\n\tELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED, /**< Passed to application if learn mode failed. */\n\tELEARNSTATUS_PROCESS = -1,\n}\n\ninterface ZunoSapiClassPower\n{\n\tstatus:ZunoSapiClassStatus;\n\tpower_raw:number;\n\tstep:number;\n\tmin:number;\n\tmax:number;\n}\n\ninterface ZunoSapiClassSec\n{\n\tstatus:ZunoSapiClassStatus;\n\tsec:boolean;\n}\n\ninterface ZunoSapiClassS2Key\n{\n\tstatus:ZunoSapiClassStatus;\n\tlist:Array<{key: Uint8Array; name: string;}>;\n}\n\n\ninterface ZunoSapiClassRegion\n{\n\tstatus:ZunoSapiClassStatus;\n\tregion:string;\n\tregion_array:string[];\n}\n\nenum ZunoSapiClassStatus\n{\n\tOK = SapiClassStatus.OK,\n\tNOT_INIT = SapiClassStatus.LAST_STATUS,\n\tWRONG_LENGTH_CMD,\n\tWRONG_STATUS,\n\tWRONG_IN_DATA,\n\tNO_FREEZE,\n\tINVALID_ARG,\n\tTIMEOUT,\n\tUN_SUPPORT,\n\tTIMEOUT_FORCE_RESTART,\n\tLEARN_EXCLUDE,\n\tLEARN_INCLUDE,\n\tSCETCH_TOO_LONG,\n\tSCETCH_FALLED_PRIAMLE,\n\tSCETCH_FALLED_CORE_VERSION,\n\tSCETCH_FALLED_REVISION,\n\tSCETCH_FALLED_CRC16,\n}\n\ninterface ZunoSapiClassBoardInfoZwDataProt\n{\n\ts2_keys:number;\n\tdevice_type:number;\n\tdevice_icon:number;\n\tvendor:number;\n\tproduct_type:number;\n\tproduct_id:number;\n\tversion:number;\n\tLR:boolean;\n}\n\ninterface ZunoSapiClassParamInfo\n{\n\tstatus:ZunoSapiClassStatus;\n\traw:Array;\n\tfreq_i:number;\n\tmain_pow:number;\n\tsec:boolean;\n}\n\ninterface ZunoSapiClassBoardInfoProduction\n{\n\tprod_raw:Uint8Array;\n\tprod_parent_uuid:Uint8Array;\n\tprod_ts:number;\n\tprod_sn:number;\n\tprod_crc8:number;\n\tprod_valid:boolean;\n}\n\ninterface ZunoSapiClassLicenseFlag\n{\n\tname:string;\n\ttitle:string;\n\tactive:boolean;\n}\n\n\ninterface ZunoSapiClassBoardInfoLicense\n{\n\tlic_subvendor:number;\n\tlic_flags_raw:Uint8Array;\n\tlic_flags:{[key:number]: ZunoSapiClassLicenseFlag};\n}\n\ninterface ZunoSapiClassBoardInfoChip\n{\n\tchip_family:number;\n\tchip_type:number;\n\tkeys_hash:number;\n\tse_version:number;\n}\n\ninterface ZunoSapiClassBoardInfo\n{\n\tstatus:ZunoSapiClassStatus;\n\tcore_version:number;\n\tversion:number;\n\tbuild_number:number;\n\tbuild_ts:number;\n\thw_rev:number;\n\tcode_size:number;\n\tram_size:number\n\tcustom_code_offset:number;\n\tboot_offset:number;\n\tboot_version:number;\n\tchip_uuid:Uint8Array;\n\ts2_pub:Uint8Array;\n\tmax_default_power:number;\n\text_nvm:number;\n\tdbg_lock:number;\n\tchip:ZunoSapiClassBoardInfoChip;\n\tzwdata?:ZunoSapiClassBoardInfoZwDataProt,\n\tsmart_qr?:string;\n\thome_id?:number;\n\tnode_id?:number;\n\tproduct?:ZunoSapiClassBoardInfoProduction;\n\tlicense?:ZunoSapiClassBoardInfoLicense;\n}\n// ------------------------------------------------------------------------------------------------------\n\nclass ZunoSapiClass {\n\tprivate readonly KEY_UNAUTH_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t= \"unauth\";\n\tprivate readonly KEY_AUTH_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t= \"auth\";\n\tprivate readonly KEY_ACCESS_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t= \"access\";\n\tprivate readonly KEY_S0_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"s0\";\n\n\tprivate readonly ZUNO_HEADER_PREAMBL:string\t\t\t\t\t\t\t\t\t\t\t\t= \"ZMEZUNOC\";\n\n\tprivate readonly SK_HEADER_SIZE:number\t\t\t\t\t\t\t\t\t\t\t\t\t= 0xC0;\n\tprivate readonly SK_HEADER_VERSION_MSB_OFFSET:number\t\t\t\t\t\t\t\t\t= 0x08;\n\tprivate readonly SK_HEADER_VERSION_LSB_OFFSET:number\t\t\t\t\t\t\t\t\t= 0x09;\n\tprivate readonly SK_HEADER_NAME_START:number\t\t\t\t\t\t\t\t\t\t\t= 56;\n\tprivate readonly SK_HEADER_MAX_NAME:number\t\t\t\t\t\t\t\t\t\t\t\t= 47;\n\tprivate readonly SK_HEADER_HWREW_OFFSET:number\t\t\t\t\t\t\t\t\t\t\t= this.SK_HEADER_NAME_START + this.SK_HEADER_MAX_NAME + 1;\n\n\tprivate readonly LICENSE_KEY_DUMP_S2:number\t\t\t\t\t\t\t\t\t\t\t\t= 0x1;\n\tprivate readonly LICENSE_KEY_LONG_RANGE:number\t\t\t\t\t\t\t\t\t\t\t= 0x5;\n\tprivate readonly license_flags: {[key:number]: ZunoSapiClassLicenseFlag}\t\t\t\t=\n\t{\n\t\t0x00: {name:\"Pti\", title: \"Provides Packet Trace Interface (PTI) capabilities. Turns ZUno to advanced sniffer.\", active:false},\n\t\t0x01: {name:\"Key dump\", title: \"Enables Z-Wave network key dump using Z-Uno.\", active:false},\n\t\t0x02: {name:\"Custom vendor\", title: \"Use custom vendor code intead of 0115 (ZME)\", active:false},\n\t\t0x03: {name:\"Modem\", title: \"ZUno works as direct transmitter.\", active:false},\n\t\t0x04: {name:\"Max power\", title: \"User is able to use the maximum power of radio amplifier.\", active:false},\n\t\t0x05: {name:\"Long Range\", title: \"Enables Z-Wave LongRange technology support.\", active:false},\n\t};\n\t\n\tprivate readonly sapi:SapiClass;\n\n\tprivate board_info:ZunoSapiClassBoardInfo\t\t\t\t\t\t\t\t\t\t\t\t= this._get_board_info_default();\n\tprivate param_info:ZunoSapiClassParamInfo\t\t\t\t\t\t\t\t\t\t\t\t= this._get_param_info_default();\n\n\tprivate region:SapiRegionClass\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= new SapiRegionClass();\n\n\tprivate _get_param_info_default(): ZunoSapiClassParamInfo {\n\t\tconst param_info:ZunoSapiClassParamInfo\t\t\t\t\t\t\t\t\t\t\t\t=\n\t\t{\t\n\t\t\tstatus:ZunoSapiClassStatus.NOT_INIT, freq_i:0x0, raw:[], main_pow:0x0, sec:false\n\t\t};\n\t\treturn (param_info);\n\t}\n\n\tprivate _get_board_info_default(): ZunoSapiClassBoardInfo {\n\t\tconst board_info:ZunoSapiClassBoardInfo\t\t\t\t\t\t\t\t\t\t\t\t=\n\t\t{\t\n\t\t\tstatus:ZunoSapiClassStatus.NOT_INIT, version:0x0, build_number:0x0, build_ts:0x0, hw_rev:0x0, code_size:0x0, ram_size:0x0, dbg_lock:0x0, custom_code_offset:0x30000, chip_uuid: new Uint8Array(), s2_pub: new Uint8Array(),\n\t\t\tboot_offset:0x3a000, boot_version: 0x0, max_default_power:50, ext_nvm:0x0, chip : {chip_type:HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family:HardwareChipClass.FAMILY_ZGM13, keys_hash:0x8E19CC54, se_version:0x0},\n\t\t\tcore_version:0x0\n\t\t};\n\t\treturn (board_info);\n\t}\n\n\tprivate async compile_zwave_qrcode(product_data:ZunoSapiClassBoardInfoZwDataProt, dsk:Uint8Array, version:number): Promise {\n\t\tlet protocol_map:number, text:string;\n\n\t\ttext = conv2DecimalPadding(product_data[\"s2_keys\"], 3);\n\t\ttext = text + conv2Decimal(dsk, \"\");\n\t\t// #ProductType\n\t\ttext = text + \"0010\" + conv2DecimalPadding(product_data[\"device_type\"], 5) + conv2DecimalPadding(product_data[\"device_icon\"], 5);\n\t\t// #ProductID\n\t\ttext = text + \"0220\" + conv2DecimalPadding(product_data[\"vendor\"], 5) + conv2DecimalPadding(product_data[\"product_type\"], 5) + conv2DecimalPadding(product_data[\"product_id\"], 5) + conv2DecimalPadding(version, 5);\n\t\t// # Supported Protocols\n\t\tprotocol_map = 0x01;\n\t\tif (product_data[\"LR\"] == true)\n\t\t\tprotocol_map = protocol_map | 0x02;\n\t\ttext += \"0803\" + conv2DecimalPadding(protocol_map, 3);\n\t\t// # MaxInclusionInterval\n\t\ttext = text + \"0403005\";// # ==5*128=640\n\t\tconst buf:ArrayBuffer = Uint8Array.from(unescape(encodeURIComponent(text)), c=>c.charCodeAt(0)).buffer;\n\t\tconst digest:Uint8Array = new Uint8Array(await crypto.subtle.digest('SHA-1', buf));\n\t\ttext = \"9001\" + conv2DecimalPadding((digest[0x0] << 0x8) | digest[0x1], 5) + text;\n\t\treturn (text);\n\t}\n\n\n\tprivate async _readNVM(addr:number, size:number): Promise {\n\t\treturn (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF]));\n\t}\n\n\tprivate async _writeNVM(addr:number, buff:Array): Promise {\n\t\tconst size = buff.length;\n\t\tconst data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF];\n\t\treturn (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(buff)));\n\t}\n\n\tprivate async _get_param_info(): Promise {\n\t\tthis.param_info = this._get_param_info_default();\n\t\tconst out:ZunoSapiClassParamInfo = this.param_info;\n\t\tconst param_info:SapiClassRet = await this._readNVM(0xFFE000, 0x09);\n\t\tif (param_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((param_info.status as unknown) as ZunoSapiClassStatus);\n\t\t\treturn ;\n\t\t}\n\t\tconst param:Array = param_info.data;\n\t\tif (param.length < 0x5) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn ;\n\t\t}\n\t\tout.status = ZunoSapiClassStatus.OK;\n\t\tout.raw = param;\n\t\tout.freq_i = param_info.data[1];\n\t\tout.main_pow = param_info.data[2];\n\t\tif (param_info.data[4] != 0x0)\n\t\t\tout.sec = true;\n\t}\n\n\tprivate async _get_board_info_add(): Promise {\n\t\tlet code_sz_shift:number, shift_smrt:number, eu_lr:boolean, byte_i:number, bit_i:number;\n\t\n\t\tthis.board_info = this._get_board_info_default();\n\t\tconst out:ZunoSapiClassBoardInfo = this.board_info;\n\t\tconst board_info:SapiClassRet = await this._readNVM(0xFFFF00, 0x01);\n\t\tif (board_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((board_info.status as unknown) as ZunoSapiClassStatus);\n\t\t\treturn ;\n\t\t}\n\t\tconst info:Array = board_info.data;\n\t\tif (info.length < 42) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn ;\n\t\t}\n\t\tout.status = ZunoSapiClassStatus.OK;\n\t\tconst version:number = ((info[0] << 8) | (info[1]));\n\t\tout.core_version = version;\n\t\tout.build_number = (info[2] << 24) | (info[3] << 16) | (info[4] << 8) | (info[5]);\n\t\tout.version = (version << 16 | (out.build_number & 0xFFFF));\n\t\tout.build_ts = (info[6] << 24) | (info[7] << 16) | (info[8] << 8) | (info[9]);\n\t\tout.hw_rev = (info[10] << 8) | (info[11]);\n\t\tif (out.build_number > 1116) {\n\t\t\tcode_sz_shift = 0x1;\n\t\t\tout.code_size = costruct_int(info.slice(12,12+3), 3, false);\n\t\t}\n\t\telse {\n\t\t\tcode_sz_shift = 0x0;\n\t\t\tout.code_size = (info[12] << 8) | (info[13]);\n\t\t}\n\t\tout.ram_size = (info[14+code_sz_shift] << 8) | (info[15+code_sz_shift]);\n\t\tout.chip_uuid = new Uint8Array(info.slice(16+code_sz_shift,16+code_sz_shift+8));\n\t\tout.s2_pub = new Uint8Array(info.slice(24+code_sz_shift,24+code_sz_shift+16));\n\t\tout.dbg_lock = info[40+code_sz_shift];\n\t\tconst offset_base:number = 46;\n\t\tif (info.length < offset_base)\n\t\t\treturn ;\n\t\tout.home_id = costruct_int(info.slice(41+code_sz_shift,41+code_sz_shift+4), 4, false);\n\t\tout.node_id = info[45+code_sz_shift];\n\t\tif (out.build_number < 1669) {\n\t\t\tshift_smrt = 90;\n\t\t\tif (info.length < (offset_base + code_sz_shift + shift_smrt))\n\t\t\t\treturn ;\n\t\t\tout.smart_qr = toString(info.slice(46+code_sz_shift,46+code_sz_shift+90));\n\t\t}\n\t\telse {\n\t\t\tshift_smrt = 11;\n\t\t\tif (info.length < (offset_base + code_sz_shift + shift_smrt))\n\t\t\t\treturn ;\n\t\t\tout.zwdata =\n\t\t\t{\n\t\t\t\ts2_keys: info[46+code_sz_shift],\n\t\t\t\tdevice_type: costruct_int(info.slice(47+code_sz_shift, 47+code_sz_shift+2), 2, false),\n\t\t\t\tdevice_icon: costruct_int(info.slice(49+code_sz_shift, 49+code_sz_shift+2), 2, false),\n\t\t\t\tvendor: costruct_int(info.slice(51+code_sz_shift, 51+code_sz_shift+2), 2, false),\n\t\t\t\tproduct_type: costruct_int(info.slice(53+code_sz_shift, 53+code_sz_shift+2), 2, false),\n\t\t\t\tproduct_id: costruct_int(info.slice(55+code_sz_shift, 55+code_sz_shift+2), 2, false),\n\t\t\t\tversion: version,\n\t\t\t\tLR: false,\n\t\t\t};\n\t\t\tout.smart_qr = await this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version);\n\t\t}\n\t\tconst offset_code:number = offset_base + code_sz_shift + shift_smrt;\n\t\tif (info.length < (offset_code + 0x4))\n\t\t\treturn ;\n\t\tout.custom_code_offset = costruct_int(info.slice(offset_code, offset_code + 0x4), 0x4, false);\n\t\tif(out.custom_code_offset > 0x36000)\n\t\t\tout.boot_offset = 0x40000;\n\t\tconst offset_prod:number = offset_code + 0x4;\n\t\tif (info.length < (offset_prod + 0x10))\n\t\t\treturn ;\n\t\tout.product =\n\t\t{\n\t\t\tprod_raw: new Uint8Array(info.slice(offset_prod, offset_prod + 0x10)),\n\t\t\tprod_parent_uuid: new Uint8Array(info.slice(offset_prod, offset_prod + 0x8)),\n\t\t\tprod_ts: costruct_int(info.slice(offset_prod + 0x8, offset_prod +0x8 + 0x4), 0x4, true),\n\t\t\tprod_sn: costruct_int(info.slice(offset_prod + 0x8 + 0x4, offset_prod +0x8 + 0x4 + 0x3), 0x3, true),\n\t\t\tprod_crc8: info[offset_prod + 0x8 + 0x4 + 0x3],\n\t\t\tprod_valid: (info[offset_prod + 0x8 + 0x4 + 0x3] == checksum(info.slice(offset_prod, offset_prod + 0x10 - 0x1))) ? true:false\n\t\t};\n\t\tconst offset_license:number = offset_prod + 0x10;\n\t\tif (info.length < (offset_license + 0xA))\n\t\t\treturn ;\n\t\tout.license =\n\t\t{\n\t\t\tlic_subvendor: costruct_int(info.slice(offset_license, offset_license + 0x2), 0x2, false),\n\t\t\tlic_flags_raw: new Uint8Array(info.slice(offset_license + 0x2, offset_license + 0x2 + 0x8)),\n\t\t\tlic_flags: this.license_flags,\n\t\t};\n\t\tbyte_i = 0x0;\n\t\twhile (byte_i < out.license.lic_flags_raw.length) {\n\t\t\tbit_i = 0x0;\n\t\t\twhile (bit_i < 0x8) {\n\t\t\t\tif ((out.license.lic_flags_raw[byte_i] & (0x1 << bit_i)) != 0x0) {\n\t\t\t\t\tif (out.license.lic_flags[byte_i * 0x8 + bit_i] != undefined)\n\t\t\t\t\t\tout.license.lic_flags[byte_i * 0x8 + bit_i].active = true;\n\t\t\t\t}\n\t\t\t\tbit_i++;\n\t\t\t}\n\t\t\tbyte_i++;\n\t\t}\n\t\tif (out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE] != undefined && out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE].active == true) {\n\t\t\tif (out.version >= 0x30D124B)\n\t\t\t\teu_lr = true;\n\t\t\telse\n\t\t\t\teu_lr = false;\n\t\t\tthis.region = new SapiRegionClass(true, eu_lr);\n\t\t\tif (out.zwdata != undefined && this.param_info.status == ZunoSapiClassStatus.OK) {\n\t\t\t\tconst region:string|undefined = this.region.getNameRegion(this.param_info.freq_i);\n\t\t\t\tif (region != undefined && this.region.isLr(region) == true) {\n\t\t\t\t\tout.zwdata.LR = true;\n\t\t\t\t\tout.smart_qr = await this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst offset_power:number = offset_license + 0xA;\n\t\tif (info.length < (offset_power + 0x1))\n\t\t\treturn ;\n\t\tout.max_default_power = info[offset_power];\n\t\tconst offset_ext_nvm:number = offset_power + 0x1;\n\t\tif (info.length < (offset_ext_nvm + 0x2))\n\t\t\treturn ;\n\t\tout.ext_nvm = costruct_int(info.slice(offset_ext_nvm, offset_ext_nvm + 0x2), 0x2, false);\n\t\tif (out.ext_nvm >= 512)\n\t\t\tout.boot_offset = 0xA10000 + ((out.ext_nvm - 512) << 10);\n\t\tconst offset_chip:number = offset_ext_nvm + 0x2;\n\t\tconst size_chip:number = 0xA;\n\t\tif (info.length < (offset_chip + size_chip))\n\t\t\treturn ;\n\t\tout.chip = \n\t\t{\n\t\t\tchip_family:info[offset_chip],\n\t\t\tchip_type:info[offset_chip + 0x1],\n\t\t\tkeys_hash:costruct_int(info.slice(offset_chip + 0x2, offset_chip + 0x2 + 0x4), 0x4, false),\n\t\t\tse_version:costruct_int(info.slice(offset_chip + 0x2 + 0x4, offset_chip + 0x2 + 0x4 + 0x4), 0x4, false)\n\t\t};\n\t\tconst offset_boot_version:number = offset_chip + size_chip;\n\t\tconst size_boot_version:number = 0x4;\n\t\tif (info.length < (offset_boot_version + size_boot_version))\n\t\t\treturn ;\n\t\tout.boot_version = costruct_int(info.slice(offset_boot_version, offset_boot_version + size_boot_version), size_boot_version, false);\n\t}\n\n\tprivate async _get_board_info(): Promise {\n\t\tawait this._get_board_info_add();\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn ;\n\t\tif (this.board_info.boot_version == 0x0) {\n\t\t\tthis.board_info.boot_version = 0x01090001;\n\t\t}\n\t\tif (this.board_info.chip.keys_hash == 0x0) {\n\t\t\tthis.board_info.chip.keys_hash = 0x8E19CC54;\n\t\t\tthis.board_info.chip.chip_type = HardwareChipClass.CHIP_ZGM130S037HGN1;\n\t\t\tthis.board_info.chip.chip_family = HardwareChipClass.FAMILY_ZGM13;\n\t\t}\n\t}\n\n\tprivate async _apply_param(raw:Array): Promise {\n\t\tconst res:SapiClassRet = await this._writeNVM(0xFFE000, raw);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\tif (res.data.length < 0x1)\n\t\t\treturn (ZunoSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (res.data[0x0] != 0x1)\n\t\t\treturn (ZunoSapiClassStatus.WRONG_STATUS);\n\t\tconst soft_reset:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [])\n\t\tif (soft_reset.status != SapiClassStatus.OK)\n\t\t\treturn ((soft_reset.status as unknown) as ZunoSapiClassStatus);\n\t\tconst freeze_zuno_info:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000);\n\t\tif (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0)\n\t\t\treturn (ZunoSapiClassStatus.NO_FREEZE);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tprivate async _load_file(addr:number, data:Uint8Array, process:SapiClassUpdateProcess|null): Promise {\n\t\tlet step:number, i:number, percentage:number, i_ask:number;\n\t\tstep = this.getQuantumSize();\n\t\tpercentage = 0x0;\n\t\ti = 0x0\n\t\twhile (i < data.length) {\n\t\t\tif (i + step > data.length)\n\t\t\t\tstep = data.length - i;\n\t\t\tpercentage = (i * 100.0) / data.length;\n\t\t\tif (process != null)\n\t\t\t\tprocess(percentage);\n\t\t\ti_ask = 0x0;\n\t\t\tfor (;;) {\n\t\t\t\tconst status:SapiClassRet = await this._writeNVM(addr, Array.from(data.subarray(i, i + step)));\n\t\t\t\tif (status.status == SapiClassStatus.OK)\n\t\t\t\t\tbreak ;\n\t\t\t\tif (i_ask >= 0x2)\n\t\t\t\t\treturn ((status.status as unknown) as ZunoSapiClassStatus);\n\t\t\t\tif (status.status != SapiClassStatus.NO_ACK)\n\t\t\t\t\treturn ((status.status as unknown) as ZunoSapiClassStatus);\n\t\t\t\tif (WEB_TOOLS_BETA == true)\n\t\t\t\t\tconsole.error(\"second wind in renewal\");\n\t\t\t\ti_ask++;\n\t\t\t}\n\t\t\ti = i + step\n\t\t\taddr = addr + step\n\t\t}\n\t\tif (process != null && percentage < 100.00)\n\t\t\tprocess(100.00);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tpublic async updateFirmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tconst status:ZunoSapiClassStatus = await this._load_file(this.board_info.boot_offset, data, process);\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst res:SapiClassDetectWait = await this.sapi.update(this.board_info.boot_offset, target_type);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tprivate async _pushSketch(addr:number, size:number, crc16:number): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(0x08, [0x01, (addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF, (crc16 >> 8) & 0xFF, (crc16) & 0xFF])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\tif (res.data.length < 0x1)\n\t\t\treturn (ZunoSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (res.data[0x0] == 0xFE)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_CRC16);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tpublic async updateSketch(scetch:Uint8Array, process:SapiClassUpdateProcess|null): Promise {\n\t\tlet status:ZunoSapiClassStatus;\n\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (scetch.length > this.board_info.code_size)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_TOO_LONG);\n\t\tconst data_uint8 = scetch.slice(0, this.ZUNO_HEADER_PREAMBL.length);\n\t\tconst preamble:string = new TextDecoder().decode(data_uint8);\n\t\tif (this.ZUNO_HEADER_PREAMBL != preamble)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_PRIAMLE);\n\t\tconst header_version:number = (scetch[this.SK_HEADER_VERSION_MSB_OFFSET] << 8) | scetch[this.SK_HEADER_VERSION_LSB_OFFSET];\n\t\tif (header_version != this.board_info.core_version)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_CORE_VERSION);\n\t\tif (this.board_info.hw_rev != -1 && this.board_info.build_number >= 2849) {\n\t\t\tconst header_hw_rev:number = costruct_int(scetch.slice(this.SK_HEADER_HWREW_OFFSET, this.SK_HEADER_HWREW_OFFSET + 0x2), 2);\n\t\t\tif (this.board_info.hw_rev != header_hw_rev)\n\t\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_REVISION);\n\t\t}\n\t\tstatus = await this._load_file(this.board_info.custom_code_offset, scetch, process);\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst crc16:number = calcSigmaCRC16(0x1D0F, scetch, 0, scetch.length);\n\t\tstatus = await this._pushSketch(this.board_info.custom_code_offset, scetch.length, crc16);\n\t\treturn (status);\n\t}\n\n\tpublic getBoardInfo(): ZunoSapiClassBoardInfo {\n\t\treturn (this.board_info);\n\t}\n\n\tprivate _isSupportRegionAndPower():ZunoSapiClassStatus {\n\t\tif (this.param_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.param_info.status);\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x3080517)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isMustResetDefault():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x30D124B)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportResetDefault():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x3080517)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportIncludeExclude():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x30C108C)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportUpdateBootloader():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.product == undefined)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tif (this.board_info.product.prod_valid == false)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tconst prod_date:Date = new Date(this.board_info.product.prod_ts * 1000);\n\t\tif (prod_date.getUTCFullYear() <= 2022)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportDumpKey():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info == undefined)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tif (this.board_info.license == undefined)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tif (this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2] != undefined && this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2].active == true)\n\t\t\treturn (ZunoSapiClassStatus.OK);\n\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t}\n\n\tprivate _test_dump_key(array:Uint8Array): boolean {\n\t\tconst empty_v1:string = \"00000000000000000000000000000000\";\n\t\tconst empty_v2:string = \"ffffffffffffffffffffffffffffffff\";\n\n\t\tconst key:string = arrayToStringHex(array);\n\t\tif (key === empty_v1 || key === empty_v2)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tpublic async readS2Key(): Promise {\n\t\tlet i:number;\n\n\t\tconst out:ZunoSapiClassS2Key = {status:ZunoSapiClassStatus.OK, list:[]};\n\t\tout.status = this.isSupportDumpKey();\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\tconst dump_key_info:SapiClassRet = await this._readNVM(0xFFCCC0, 0x40);\n\t\tif (dump_key_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((dump_key_info.status as unknown) as ZunoSapiClassStatus);\n\t\t\treturn (out);\n\t\t}\n\t\tif (dump_key_info.data.length != 0x40) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(0, 16)), name:this.KEY_UNAUTH_NAME});\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(16, 32)), name:this.KEY_AUTH_NAME});\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(32, 48)), name:this.KEY_ACCESS_NAME});\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(48, 64)), name:this.KEY_S0_NAME});\n\t\ti = 0x0;\n\t\twhile (i < out.list.length) {\n\t\t\tif (this._test_dump_key(out.list[i].key) == false)\n\t\t\t\tout.list[i].key = new Uint8Array([]);\n\t\t\ti++;\n\t\t}\n\t\treturn (out);\n\t}\n\n\tpublic getRegion(): ZunoSapiClassRegion {\n\t\tconst out:ZunoSapiClassRegion = {status:this._isSupportRegionAndPower(), region:\"\", region_array:this.region.getListRegion()};\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\tconst region:string|undefined = this.region.getNameRegion(this.param_info.freq_i);\n\t\tif (region == undefined) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_IN_DATA;\n\t\t\treturn (out);\n\t\t}\n\t\tout.region = region;\n\t\treturn (out);\n\t}\n\n\tpublic async setRegion(region:string): Promise {\n\t\tconst status:ZunoSapiClassStatus = this._isSupportRegionAndPower();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst region_id:number|undefined = this.region.getIdRegion(region);\n\t\tif (region_id == undefined)\n\t\t\treturn (ZunoSapiClassStatus.INVALID_ARG);\n\t\tif (this.param_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.param_info.status);\n\t\tconst raw:Array = this.param_info.raw;\n\t\traw[0x1] = region_id;\n\t\tif (raw.length > 0x8)\n\t\t\traw[0x8] = region_id;\n\t\treturn (await this._apply_param(raw));\n\t}\n\n\tpublic getPower(): ZunoSapiClassPower {\n\t\tconst out:ZunoSapiClassPower = {\n\t\t\tstatus:this._isSupportRegionAndPower(),\n\t\t\tpower_raw:this.param_info.main_pow,\n\t\t\tstep:0x1,\n\t\t\tmin:1,\n\t\t\tmax:this.board_info.max_default_power,\n\t\t};\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\treturn (out);\n\t}\n\n\tpublic getSec(): ZunoSapiClassSec {\n\t\tconst out:ZunoSapiClassSec = {\n\t\t\tstatus:this._isSupportRegionAndPower(),\n\t\t\tsec:this.param_info.sec,\n\t\t};\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\treturn (out);\n\t}\n\n\tpublic async setSec(sec:boolean): Promise {\n\t\tconst status:ZunoSapiClassStatus = this._isSupportRegionAndPower();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst raw:Array = this.param_info.raw;\n\t\tif (sec == true)\n\t\t\traw[0x4] = 0x1;\n\t\telse\n\t\t\traw[0x4] = 0x0;\n\t\treturn (await this._apply_param(raw));\n\t}\n\n\tpublic async setPower(power:number): Promise {\n\t\tconst status:ZunoSapiClassStatus = this._isSupportRegionAndPower();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst raw:Array = this.param_info.raw;\n\t\traw[0x2] = power;\n\t\treturn (await this._apply_param(raw));\n\t}\n\n\tpublic async enableNif(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x0A])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tpublic async enableEvent(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x09, 0x1])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tprivate async _enableLearn_get_status(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.recvIncomingRequest(1000);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\tif (res.cmd != SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\tif (res.data.length < 0x3)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\tif (res.data[0x1] != 0xA0)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\treturn (res.data[0x2]);\n\t}\n\n\tprivate async _enableLearn_include(): Promise {\n\t\tlet retries:number;\n\t\n\t\tconst wait_timeout:number = Date.now() + ((30 + 0x1) * 1000);\n\t\tretries = 0x0;\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tswitch (await this._enableLearn_get_status()) {\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_PROCESS:\n\t\t\t\t\tretries++;\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE:\n\t\t\t\t\tretries = 0x0;\n\t\t\t\t\tbreak ;\n\t\t\t\tdefault:\n\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t\t\t\t\tbreak ;\n\t\t\t\t\n\t\t\t}\n\t\t\tif (retries >= 0x3)\n\t\t\t\treturn (ZunoSapiClassStatus.LEARN_INCLUDE);\n\t\t}\n\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t}\n\n\tprivate async _enableLearn_exlude(): Promise {\n\t\tlet retries:number;\n\n\t\tretries = 0x0;\n\t\twhile (retries < 0x3) {\n\t\t\tretries++;\n\t\t\tswitch (await this._enableLearn_get_status()) {\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE:\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_PROCESS:\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE:\n\t\t\t\t\treturn (await this._enableLearn_include());\n\t\t\t\t\tbreak ;\n\t\t\t}\n\t\t}\n\t\treturn (ZunoSapiClassStatus.LEARN_EXCLUDE);\n\t}\n\n\tpublic async enableLearn(timeout:number): Promise {\n\t\tlet detect_wait:SapiClassDetectWait, status:ZunoSapiClassStatus;\n\n\t\ttimeout = timeout & 0xFF;\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x07, timeout & 0xFF, 0x1 & 0xFF])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\tconst wait_timeout:number = Date.now() + ((timeout + 0x1) * 1000);\n\t\tthis.lock();\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tswitch (await this._enableLearn_get_status()) {\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT:\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\tdetect_wait = await this.sapi.detect_rcv();\n\t\t\t\t\tif (detect_wait.status != SapiClassStatus.OK)\n\t\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT);\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED:\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE:\n\t\t\t\t\tstatus = await this._enableLearn_exlude();\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\treturn (status);\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE:\n\t\t\t\t\tstatus = await this._enableLearn_include();\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\treturn (status);\n\t\t\t\t\tbreak ;\n\t\t\t}\n\t\t}\n\t\tthis.unlock();\n\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t}\n\n\tpublic async setDefault(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x5])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\n\tpublic getQuantumSize(): number {\n\t\treturn (this.sapi.getQuantumSize());\n\t}\n\n\tpublic lock() {\n\t\treturn (this.sapi.lock());\n\t}\n\n\tpublic unlock() {\n\t\treturn (this.sapi.unlock());\n\t}\n\n\tpublic is_busy(): boolean {\n\t\treturn (this.sapi.is_busy());\n\t}\n\n\tpublic async connect(): Promise {\n\t\tthis.region = new SapiRegionClass();\n\t\tawait this._get_param_info();\n\t\tawait this._get_board_info();\n\t\t// await this._begin(true);\n\t}\n\n\tpublic async detect(baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise {\n\t\treturn (await this.sapi.detect(baudrate, func));\n\t}\n\n\tconstructor(sapi:SapiClass) {\n\t\tthis.sapi = sapi;\n\t}\n}","import {ControllerUiLangClassId} from \"../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../lang/ui_lang\"\nimport {ControllerSapiClass} from \"../sapi/controller_sapi\";\nimport {ZunoSapiClass} from \"../sapi/zuno_sapi\";\nimport {SapiClass} from \"../sapi/sapi\";\nimport {ControllerUiLogClass} from \"../log/ui_log\"\n\nexport {CommonUiSectionClass, CommonUiSectionHtmlClass};\n\ninterface CommonUiSectionClassBegin {\n\t(): Promise\n}\n\ninterface CommonUiSectionClassEnd {\n\t(): Promise\n}\n\nclass CommonUiSectionHtmlClass {\n\tprotected readonly locale:ControllerUiLangClass;\n\n\tprotected common_button_atrr(el_button:HTMLButtonElement, title:string|ControllerUiLangClassId, hide:boolean): void {\n\t\tif (hide == true) {\n\t\t\tel_button.setAttribute(\"disabled\", \"\");\n\t\t\tel_button.removeAttribute(\"title\");\n\t\t\treturn ;\n\t\t}\n\t\tif (typeof title !== \"string\")\n\t\t\ttitle = this.locale.getLocale(title);\n\t\tel_button.setAttribute(\"title\", title);\n\t\tel_button.removeAttribute(\"disabled\");\n\t}\n\n\tprivate _event_get_element(event:Event, tag:string): EventTarget|null {\n\t\tif (event.target == null)\n\t\t\treturn (null);\n\t\tconst el_target:HTMLElement = (event.target as HTMLElement);\n\t\ttry {\n\t\t\tif (el_target.tagName.toLowerCase() !== tag.toLowerCase())\n\t\t\t\treturn (null);\n\t\t} catch (error) {\n\t\t\treturn (null);\n\t\t}\n\t\treturn (event.target);\n\t}\n\n\tprotected event_get_element_select(event:Event): HTMLSelectElement|null {\n\t\tconst el_target:EventTarget|null = this._event_get_element(event, \"select\") ;\n\t\tif (el_target == null)\n\t\t\treturn (null);\n\t\treturn ((event.target as HTMLSelectElement));\n\t}\n\n\tprotected event_get_element_input(event:Event): HTMLInputElement|null {\n\t\tconst el_target:EventTarget|null = this._event_get_element(event, \"input\") ;\n\t\tif (el_target == null)\n\t\t\treturn (null);\n\t\treturn ((event.target as HTMLInputElement));\n\t}\n\n\tprotected event_get_element_button(event:Event): HTMLButtonElement|null {\n\t\tconst el_target:EventTarget|null = this._event_get_element(event, \"button\") ;\n\t\tif (el_target == null)\n\t\t\treturn (null);\n\t\treturn ((event.target as HTMLButtonElement));\n\t}\n\n\tconstructor(locale:ControllerUiLangClass) {\n\t\tthis.locale = locale;\n\t}\n}\n\nclass CommonUiSectionClass extends CommonUiSectionHtmlClass {\n\tprotected readonly log:ControllerUiLogClass;\n\n\tprotected readonly URL_LICENSE_MORE_OPTIONS:string\t\t\t\t\t= \"https://z-wave.me/hardware-capabilities/?uuid=\";\n\tprotected readonly URL_LICENSE_SERVISE:string\t\t\t\t\t\t= \"https://service.z-wave.me/hardware/capabilities/?uuid=\";\n\n\tprivate readonly management:ControllerSapiClass|ZunoSapiClass|SapiClass;\n\tprivate readonly el_section:HTMLElement;\n\tprivate readonly el_tbody:HTMLElement;\n\tprivate readonly begin_func:CommonUiSectionClassBegin;\n\tprivate readonly end_func:CommonUiSectionClassEnd;\n\n\tpublic is_busy(): boolean {\n\t\tif (this.management.is_busy() == true) {\n\t\t\tthis.log.warning(ControllerUiLangClassId.MESSAGE_PLEASE_WAIT);\n\t\t\treturn (true);\n\t\t}\n\t\treturn (false);\n\t}\n\n\tpublic create_tr_el(name:string|ControllerUiLangClassId, title:string|ControllerUiLangClassId, value:string|HTMLElement, action:string|HTMLElement): HTMLElement {\n\t\tconst el_tr: HTMLElement = document.createElement(\"tr\");\n\t\tconst el_td_1: HTMLElement = document.createElement(\"td\");\n\t\tconst el_td_2: HTMLElement = document.createElement(\"td\");\n\t\tconst el_td_3: HTMLElement = document.createElement(\"td\");\n\t\tif (typeof name === \"string\")\n\t\t\tel_td_1.innerHTML = name;\n\t\telse\n\t\t\tel_td_1.innerHTML = this.locale.getLocale(name);\n\t\tif (typeof title === \"string\")\n\t\t\tel_td_1.title = title;\n\t\telse\n\t\t\tel_td_1.title = this.locale.getLocale(title);\n\t\tif (typeof value === \"string\")\n\t\t\tel_td_2.innerHTML = value;\n\t\telse\n\t\t\tel_td_2.appendChild(value);\n\t\tif (typeof action === \"string\")\n\t\t\tel_td_3.innerHTML = action;\n\t\telse\n\t\t\tel_td_3.appendChild(action);\n\t\tel_tr.appendChild(el_td_1);\n\t\tel_tr.appendChild(el_td_2);\n\t\tel_tr.appendChild(el_td_3);\n\t\tthis.el_tbody.appendChild(el_tr);\n\t\treturn (el_tr);\n\t}\n\n\tpublic is_close(): boolean {\n\t\tif (this.is_busy() == true)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tpublic async begin(): Promise {\n\t\tawait this.end();\n\t\tif (await this.begin_func() == false)\n\t\t\treturn ;\n\t\tthis.el_section.style.display = '';\n\t}\n\n\tpublic async end(): Promise {\n\t\tthis.el_section.style.display = 'none';\n\t\tawait this.end_func();\n\t\tthis.el_tbody.innerHTML = '';\n\t}\n\n\tpublic async quest_continue_stop(el:HTMLElement, quest:ControllerUiLangClassId|string, quest_title:ControllerUiLangClassId|string,\n\t\t\t\t\t\t\t\t\t\trun:ControllerUiLangClassId, run_title:ControllerUiLangClassId,\n\t\t\t\t\t\t\t\t\t\tstop:ControllerUiLangClassId|undefined, stop_title:ControllerUiLangClassId|undefined): Promise {\n\t\tconst promise:Promise = new Promise((resolve) => {\n\t\t\tel.innerHTML = '';\n\t\t\tconst el_span:HTMLSpanElement = document.createElement(\"span\");\n\t\t\tif (typeof quest !== \"string\")\n\t\t\t\tquest = this.locale.getLocale(quest);\n\t\t\tel_span.innerHTML = quest;\n\t\t\tif (typeof quest_title !== \"string\")\n\t\t\t\tquest_title = this.locale.getLocale(quest_title);\n\t\t\tel_span.title = quest_title;\n\t\t\tel_span.className = \"ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tconst el_button_continue:HTMLButtonElement = document.createElement(\"button\");\n\t\t\tel_button_continue.textContent = this.locale.getLocale(run);\n\t\t\tel_button_continue.title = this.locale.getLocale(run_title);\n\t\t\tel_button_continue.type = \"button\";\n\t\t\tel_button_continue.className = \"ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tel.appendChild(el_span);\n\t\t\tel.appendChild(el_button_continue);\n\t\t\tel_button_continue.addEventListener(\"click\", async () => { resolve(true)});\n\t\t\tif (stop != undefined && stop_title != undefined) {\n\t\t\t\tconst el_button_stop:HTMLButtonElement = document.createElement(\"button\");\n\t\t\t\tel_button_stop.textContent = this.locale.getLocale(stop);\n\t\t\t\tel_button_stop.title = this.locale.getLocale(stop_title);\n\t\t\t\tel_button_stop.type = \"button\";\n\t\t\t\tel_button_stop.className = \"ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\t\tel_button_stop.addEventListener(\"click\", async () => { resolve(false)});\n\t\t\t\tel.appendChild(el_button_stop);\n\t\t\t}\n\t\t});\n\t\treturn (promise);\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, management:ControllerSapiClass|ZunoSapiClass|SapiClass, log:ControllerUiLogClass, id:ControllerUiLangClassId, begin_func:CommonUiSectionClassBegin, end_func:CommonUiSectionClassEnd) {\n\t\tsuper(locale);\n\t\tthis.management = management;\n\t\tthis.log = log;\n\t\tconst el:HTMLElement = document.createElement(\"section\");\n\t\tel.className = \"ZUnoRazberryModalContentSection_table\";\n\t\tel.style.display = 'none';\n\t\tconst el_header:HTMLElement = document.createElement(\"h3\");\n\t\tel_header.textContent = this.locale.getLocale(id);\n\t\tel.appendChild(el_header);\n\t\tconst el_table:HTMLElement = document.createElement(\"table\");\n\t\tel.appendChild(el_table);\n\t\tconst el_tbody:HTMLElement = document.createElement(\"tbody\");\n\t\tel_table.appendChild(el_tbody);\n\t\tel_section.appendChild(el);\n\t\tthis.el_section = el;\n\t\tthis.el_tbody = el_tbody;\n\t\tthis.begin_func = begin_func;\n\t\tthis.end_func = end_func;\n\t}\n}\n","import {ControllerUiLangClassId} from \"../../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../../lang/ui_lang\"\nimport {ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassPower, ControllerSapiClassRegion, ControllerSapiClassCapabilities} from \"../../sapi/controller_sapi\";\nimport {ControllerUiLogClass} from \"../../log/ui_log\"\nimport {CommonUiSectionClass} from \"../common\"\nimport {ControllerUiDefineClassReBeginFunc} from \"../../section/detection\"\n\nexport {ControllerUiSectionInfoClass};\n\nclass ControllerUiSectionInfoClass extends CommonUiSectionClass {\n\tprivate region_current:string\t\t\t\t\t\t\t\t\t\t\t= '';\n\tprivate region_new:string\t\t\t\t\t\t\t\t\t\t\t\t= '';\n\tprivate power_current:number\t\t\t\t\t\t\t\t\t\t\t= 0x0;\n\tprivate power_new:number\t\t\t\t\t\t\t\t\t\t\t\t= 0x0;\n\n\tprivate readonly razberry:ControllerSapiClass;\n\tprivate readonly region_el_button:HTMLButtonElement;\n\tprivate readonly power_el_button:HTMLButtonElement;\n\n\tprivate readonly re_begin_func:ControllerUiDefineClassReBeginFunc;\n\n\tprivate async _controller_default_click(event:Event): Promise {\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tconst el_target:HTMLButtonElement|null = this.event_get_element_button(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tconst out:boolean = window.confirm(this.locale.getLocale(ControllerUiLangClassId.DEFAULT_RESET_WARNING));\n\t\tif (out != true)\n\t\t\treturn ;\n\t\tthis.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, true);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_DEFAULT);\n\t\tconst status:ControllerSapiClassStatus = await this.razberry.setDefault();\n\t\tthis.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, false);\n\t\tif (status == ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_DEFAULT);\n\t\t\tthis.re_begin_func(false);\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status);\n\t}\n\n\tprivate _controller_default_init(): boolean {\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE);\n\t\tel_button.type = \"button\";\n\t\tel_button.textContent = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON);\n\t\tel_button.addEventListener(\"click\", (event:Event) => {this._controller_default_click(event);});\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE, \"\", el_button);\n\t\treturn (true);\n\t}\n\n\tprivate _power_change(event:Event): void {\n\t\tconst el_target:HTMLInputElement|null = this.event_get_element_input(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tthis.power_new = Number(el_target.value);\n\t\tthis.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true:false);\n\t}\n\n\tprivate async _power_click(): Promise {\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tthis.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, true);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_POWER);\n\t\tconst status:ControllerSapiClassStatus = await this.razberry.setPower(this.power_new);\n\t\tif (status == ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_POWER);\n\t\t\tthis.power_current = this.power_new;\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_POWER, status);\n\t\tthis.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, false);\n\t}\n\n\tprivate async _power_init(): Promise {\n\t\tif (this.razberry.isRazberry7() == false)\n\t\t\treturn (false);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_POWER);\n\t\tconst power:ControllerSapiClassPower = await this.razberry.getPower();\n\t\tif (power.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_POWER, power.status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.power_new = power.power_raw;\n\t\tthis.power_current = power.power_raw;\n\t\tconst el_value:HTMLElement = document.createElement(\"span\");\n\t\tconst el_input:HTMLInputElement = document.createElement(\"input\");\n\t\tel_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE);\n\t\tel_input.type = \"number\";\n\t\tel_input.min = power.min.toString();\n\t\tel_input.max = power.max.toString();\n\t\tel_input.step = power.step.toString();\n\t\tel_input.value = power.power_raw.toString();\n\t\tel_input.addEventListener(\"change\", (event:Event) => {this._power_change(event);});\n\t\tel_value.appendChild(el_input);\n\t\tel_value.appendChild(document.createElement(\"span\"));\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_POWER, ControllerUiLangClassId.TABLE_NAME_POWER_TITLE, el_value, this.power_el_button);\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_POWER);\n\t\treturn (true);\n\t}\n\n\tprivate _region_change(event:Event): void {\n\t\tconst el_target:HTMLSelectElement|null = this.event_get_element_select(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tthis.region_new = el_target.value;\n\t\tthis.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true:false);\n\t}\n\n\tprivate async _region_click(): Promise {\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tthis.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, true);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\tconst status:ControllerSapiClassStatus = await this.razberry.setRegion(this.region_new);\n\t\tif (status == ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\t\tthis.region_current = this.region_new;\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, status);\n\t\tthis.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, false);\n\t}\n\n\tprivate async _region_init(): Promise {\n\t\tlet i:number, el_option_str:string, el_select:HTMLElement;\n\n\t\tif (this.razberry.isRazberry5() == true)\n\t\t\treturn (false);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tconst region_info:ControllerSapiClassRegion = await this.razberry.getRegion();\n\t\tswitch (region_info.status) {\n\t\t\tcase ControllerSapiClassStatus.OK:\n\t\t\t\tthis.region_current = region_info.region;\n\t\t\t\tthis.region_new = region_info.region;\n\t\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\t\t\ti = 0x0;\n\t\t\t\tel_option_str = \"\";\n\t\t\t\twhile (i < region_info.region_array.length) {\n\t\t\t\t\tif (region_info.region_array[i] == region_info.region) {\n\t\t\t\t\t\tel_option_str = el_option_str + '';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tel_option_str = el_option_str + '';\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\tel_select = document.createElement(\"select\");\n\t\t\t\tel_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE);\n\t\t\t\tel_select.innerHTML = el_option_str;\n\t\t\t\tel_select.addEventListener(\"change\", (event:Event) => {this._region_change(event);});\n\t\t\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_REGION, ControllerUiLangClassId.TABLE_NAME_REGION_TITLE, el_select, this.region_el_button);\n\t\t\t\treturn (true);\n\t\t\t\tbreak ;\n\t\t\tcase ControllerSapiClassStatus.UNSUPPORT_CMD:\n\t\t\t\tthis.log.errorUnsupport(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\t\t\tbreak ;\n\t\t\tdefault:\n\t\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status);\n\t\t\t\tbreak ;\n\t\t}\n\t\treturn (false);\n\t}\n\n\tprivate _capabilities_init(): boolean {\n\t\tlet value:string;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES);\n\t\tconst capabilities_info:ControllerSapiClassCapabilities = this.razberry.getCapabilities();\n\t\tif (capabilities_info.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES, capabilities_info.status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_TYPE, ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE, this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER), \"\");\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION, ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE, capabilities_info.ApiVersion + \".\" + capabilities_info.ApiRevision, \"\");\n\t\tvalue = capabilities_info.VendorIDName;\n\t\tif (capabilities_info.VendorIDWebpage != undefined)\n\t\t\tvalue = ''+ value +'';\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_VENDOR, ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE, value, \"\");\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_VENDOR_ID, ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE, String(capabilities_info.VendorID), \"\");\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES);\n\t\treturn (true);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\tlet display:boolean;\n\n\t\tdisplay = false;\n\t\tif (this._capabilities_init() == true)\n\t\t\tdisplay = true;\n\t\tif (await this._region_init() == true)\n\t\t\tdisplay = true;\n\t\tif (await this._power_init() == true)\n\t\t\tdisplay = true;\n\t\tif (this._controller_default_init() == true)\n\t\t\tdisplay = true;\n\t\treturn (display);\n\t}\n\n\tprivate async _end(): Promise {\n\t\tthis.power_el_button.disabled = true;\n\t\tthis.region_el_button.disabled = true;\n\t}\n\n\tprivate _constructor_button(text:ControllerUiLangClassId, click:EventListener):HTMLButtonElement {\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.textContent = this.locale.getLocale(text);\n\t\tel_button.addEventListener(\"click\", click);\n\t\tel_button.type = \"button\";\n\t\treturn (el_button);\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) {\n\t\tsuper(el_section, locale, razberry, log, ControllerUiLangClassId.BOARD_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.razberry = razberry;\n\t\tthis.power_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON, () => {this._power_click();});\n\t\tthis.region_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON, () => {this._region_click();});\n\t\tthis.re_begin_func = re_begin_func;\n\t}\n}","import {ControllerUiLangClassId} from \"../../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../../lang/ui_lang\"\nimport {ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassBoardInfo, ControllerSapiClassLicense} from \"../../sapi/controller_sapi\";\nimport {ControllerUiLogClass} from \"../../log/ui_log\"\nimport {CommonUiSectionClass} from \"../common\"\nimport {arrayToStringHex, hexToBytes} from \"../../other/utilities\";\n\nexport {ControllerUiSectionLicenseClass};\n\ninterface ControllerUiClassNewLicenseXhr\n{\n\tuuid:string;\n\tlicense:string;\n\tcrc:string;\n}\n\nclass ControllerUiSectionLicenseClass extends CommonUiSectionClass {\n\tprivate readonly TABLE_NAME_LICENSE_YES:string\t\t\t\t\t\t\t= '';\n\tprivate readonly TABLE_NAME_LICENSE_NO:string\t\t\t\t\t\t\t= '';\n\n\tprivate readonly ms_timeout_get_new_license:number\t\t\t\t\t\t= 10000;\n\tprivate readonly ms_timeout_get_new_license_xhr:number\t\t\t\t\t= 3000;\n\tprivate readonly ms_timeout_get_new_license_port:number\t\t\t\t\t= 1000;\n\n\tprivate readonly razberry:ControllerSapiClass;\n\tprivate readonly license_xhr:XMLHttpRequest\t\t\t\t\t\t\t\t\t\t= new XMLHttpRequest();\n\n\tprivate license_timer_id?:number;\n\n\tprivate _license_timer_valid_data(in_json:ControllerUiClassNewLicenseXhr): boolean {\n\t\tif (in_json.crc == undefined || in_json.uuid == undefined || in_json.license == undefined)\n\t\t\treturn (false);\n\t\tif (typeof (in_json.crc) != \"string\")\n\t\t\treturn (false);\n\t\tif (typeof (in_json.license) != \"string\")\n\t\t\treturn (false);\n\t\tif (typeof (in_json.uuid) != \"string\")\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate _license_timer_get_pack(in_json:ControllerUiClassNewLicenseXhr, uuid:string, crc16_old:number): undefined|string {\n\t\tif (uuid.toLowerCase().padStart(16, '0') != in_json.uuid.toLowerCase().padStart(16, '0'))\n\t\t\treturn (undefined);\n\t\tconst crc16:number = Number(in_json.crc);\n\t\tif (crc16 == 0x0)\n\t\t\treturn (undefined);\n\t\tif (crc16 == crc16_old)\n\t\t\treturn (undefined);\n\t\treturn (in_json.license);\n\t}\n\n\tprivate _license_timer_init(uuid:string, crc16:number): void {\n\t\tconst url = this.URL_LICENSE_SERVISE + uuid;\n\t\tconst fun_xhr_timer:TimerHandler = () => {\n\t\t\tthis.license_timer_id = undefined;\n\t\t\tthis.license_xhr.open(\"POST\", url, true);\n\t\t\tthis.license_xhr.responseType = 'json';\n\t\t\tthis.license_xhr.timeout = this.ms_timeout_get_new_license_xhr;\n\t\t\tthis.license_xhr.ontimeout = () => {\n\t\t\t\tthis.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license);\n\t\t\t\tthis.log.errorXhrTimeout(url);\n\t\t\t};\n\t\t\tthis.license_xhr.onerror = () => {\n\t\t\t\tthis.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license);\n\t\t\t\tthis.log.errorXhrError(url);\n\t\t\t};\n\t\t\tthis.license_xhr.onload = () => {\n\t\t\t\tconst in_json:ControllerUiClassNewLicenseXhr = this.license_xhr.response;\n\t\t\t\tif (this._license_timer_valid_data(in_json) == false) {\n\t\t\t\t\tthis.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license);\n\t\t\t\t\tthis.log.errorXhrInvalidData(url);\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tconst pack:string|undefined = this._license_timer_get_pack(in_json, uuid, crc16);\n\t\t\t\tif (pack == undefined) {\n\t\t\t\t\tthis.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license);\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tconst pack_array = hexToBytes(pack);\n\t\t\t\tif (pack_array == undefined) {\n\t\t\t\t\tthis.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license);\n\t\t\t\t\tthis.log.errorXhrInvalidData(url);\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tconst fun_controller_timer:TimerHandler = async () => {\n\t\t\t\t\tthis.license_timer_id = undefined;\n\t\t\t\t\tthis.log.infoStart(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_SET_LICENSE));\n\t\t\t\t\tif (this.razberry.is_busy() == true) {\n\t\t\t\t\t\tthis.log.warning(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_PLEASE_WAIT));\n\t\t\t\t\t\tthis.license_timer_id = window.setTimeout(fun_controller_timer, this.ms_timeout_get_new_license_port);\n\t\t\t\t\t\treturn ;\n\t\t\t\t\t}\n\t\t\t\t\tconst status:ControllerSapiClassStatus = await this.razberry.setLicense(pack_array);\n\t\t\t\t\tif (status != ControllerSapiClassStatus.OK) {\n\t\t\t\t\t\tthis.log.errorFalledCode(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_SET_LICENSE), status);\n\t\t\t\t\t\tthis.license_timer_id = window.setTimeout(fun_controller_timer, this.ms_timeout_get_new_license_port);\n\t\t\t\t\t\treturn ;\n\t\t\t\t\t}\n\t\t\t\t\tthis.log.infoDone(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_SET_LICENSE));\n\t\t\t\t\tthis.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license);\n\t\t\t\t\tthis.begin();\n\t\t\t\t}\n\t\t\t\tthis.license_timer_id = window.setTimeout(fun_controller_timer, 0x0);\n\t\t\t};\n\t\t\tthis.license_xhr.send();\n\t\t\t\n\t\t};\n\t\tthis.license_timer_id = window.setTimeout(fun_xhr_timer, 0x0);\n\t}\n\n\tprivate _license_init(): number|undefined {\n\t\tlet key:string, flag_status:string;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_LICENSE);\n\t\tconst license:ControllerSapiClassLicense = this.razberry.getLicense();\n\t\tif (license.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_LICENSE, license.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\tif (license.vallid == true) {\n\t\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID, ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE, String(license.vendor_id), \"\");\n\t\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE, ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE, String(license.max_nodes), \"\");\n\t\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT, ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE, String(license.count_support), \"\");\n\t\t}\n\t\tfor (key in license.flags) {\n\t\t\tif (license.flags[key].active == true)\n\t\t\t\tflag_status = this.TABLE_NAME_LICENSE_YES;\n\t\t\telse\n\t\t\t\tflag_status = this.TABLE_NAME_LICENSE_NO;\n\t\t\tthis.create_tr_el(license.flags[key].name + \":\", license.flags[key].title, flag_status, \"\");\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_LICENSE);\n\t\tif (license.vallid == true)\n\t\t\treturn (license.crc16);\n\t\treturn (0x0);\n\t}\n\t\n\tprivate _board_info_init(): string|undefined {\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO);\n\t\tconst board_info:ControllerSapiClassBoardInfo = this.razberry.getBoardInfo();\n\t\tif (board_info.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\tconst uuid_str_hex:string = arrayToStringHex(board_info.chip_uuid);\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID, ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE, uuid_str_hex, \"\");\n\t\tconst more_options_link:string = ''+ 'link' +'';\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS, ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE, more_options_link, \"\");\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO);\n\t\treturn (uuid_str_hex);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\tif (this.razberry.isRazberry7() == false)\n\t\t\treturn (false);\n\t\tconst uuid_str_hex:string|undefined = this._board_info_init();\n\t\tconst crc16:number|undefined = this._license_init();\n\t\tif (uuid_str_hex == undefined && crc16 == undefined)\n\t\t\treturn (false);\n\t\tif (uuid_str_hex != undefined && crc16 != undefined)\n\t\t\tthis._license_timer_init(uuid_str_hex, crc16);\n\t\treturn (true);\n\t}\n\n\tprivate async _end(): Promise {\n\t\tif (this.license_timer_id != undefined) {\n\t\t\twindow.clearTimeout(this.license_timer_id);\n\t\t\tthis.license_timer_id = undefined;\n\t\t}\n\t\tthis.license_xhr.abort();\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass) {\n\t\tsuper(el_section, locale, razberry, log, ControllerUiLangClassId.LICENSE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.razberry = razberry;\n\t}\n}","import {ControllerUiLangClassId} from \"../../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../../lang/ui_lang\"\nimport {ControllerSapiClass, ControllerSapiClasstNetworkIDs, ControllerSapiClassStatus, ControllerSapiClasstInitData, ControllerSapiClassLearnMode,\n\t\tControllerSapiClassRegion} from \"../../sapi/controller_sapi\";\nimport {ZunoSapiClass, ZunoSapiClassRegion, ZunoSapiClassStatus, ZunoSapiClassBoardInfo, ZunoSapiClassS2Key} from \"../../sapi/zuno_sapi\";\nimport {ControllerUiLogClass} from \"../../log/ui_log\"\nimport {CommonUiSectionClass} from \"../common\"\nimport {ControllerUiSectionUpdateClass} from \"./update\"\nimport {SlaveUiSectionUpdateClass} from \"../slave/update\"\nimport {PaketUiClassUpdateInfoPaket, UpdateUiSectionClass, UpdateUiSectionClassPaket, PaketUiClassUpdateInfoData, UpdateUiSectionClassFirmware} from \"../update\"\nimport {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus, SapiClass, SapiClassDetect} from \"../../sapi/sapi\";\nimport {conv2Decimal, intToBytearrayMsbLsb, arrayToStringHex, sleep, hexToBytes} from \"../../other/utilities\";\n\nexport {ControllerUiSectionMigrationClass};\n\ninterface ControllerUiSectionMigrationClassHome\n{\n\thome:number;\n\tnode_id:number;\n}\n\ninterface ControllerUiSectionMigrationClassNodeDumpKey\n{\n\tzuno_node_id:number;\n\tdump_key:ZunoSapiClassS2Key;\n}\n\ntype ControllerUiSectionMigrationClassClear = () => Promise;\n\nclass ControllerUiSectionMigrationClass extends CommonUiSectionClass {\n\tprivate readonly NVM_HOMEID:number\t\t\t\t\t\t\t\t= 0x8;\n\n\tprivate readonly progress_timer_id_ms_period:number\t\t\t\t= 1000;\n\tprivate readonly el_button:HTMLButtonElement\t\t\t\t\t= document.createElement(\"button\");\n\tprivate readonly el_container:HTMLElement;\n\tprivate readonly razberry:ControllerSapiClass;\n\tprivate readonly sapi:SapiClass;\n\tprivate readonly zuno:ZunoSapiClass;\n\tprivate clear:ControllerUiSectionMigrationClassClear;\n\n\tprivate readonly download_process:UpdateUiSectionClassPaket\t\t\t= {xhr:new XMLHttpRequest()};\n\n\tprivate process:boolean\t\t\t\t\t\t\t\t\t\t\t= false;\n\tprivate progress_timer_id?:number;\n\n\tprivate async _raz_include_excluding_wait(progress_timer_id_count:number, start_id:ControllerUiLangClassId, wait_id:ControllerUiLangClassId,\n\t\t\t\t\t\t\t\t\t\t\tinclude_excluding:ControllerSapiClassLearnMode): Promise {\n\t\tlet index_timout:number;\n\n\t\tconst el_progress:HTMLProgressElement = document.createElement('progress');\n\t\tconst el_span:HTMLSpanElement = document.createElement('span');\n\t\tconst el_container:HTMLSpanElement = document.createElement('span');\n\t\tel_container.title = this.locale.getLocale(wait_id);\n\t\tel_container.appendChild(el_progress);\n\t\tel_container.appendChild(el_span);\n\t\tel_progress.max = progress_timer_id_count;\n\t\tthis.el_container.appendChild(el_container);\n\t\tindex_timout = progress_timer_id_count;\n\t\tconst seconds:string = this.locale.getLocale(ControllerUiLangClassId.SECONDS);\n\t\tconst max_lenght:number = progress_timer_id_count.toString().length;\n\t\tconst fun_timer:TimerHandler = () => {\n\t\t\tel_progress.value = index_timout;\n\t\t\tel_span.textContent = ' ' + index_timout.toString().padStart(max_lenght, '0') + seconds;\n\t\t\tif (index_timout > 0x0) {\n\t\t\t\tindex_timout--;\n\t\t\t\tthis.progress_timer_id = window.setTimeout(fun_timer, this.progress_timer_id_ms_period);\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis.progress_timer_id = undefined;\n\t\t};\n\t\tthis.progress_timer_id = window.setTimeout(fun_timer, 0x0);\n\t\tfor (;;) {\n\t\t\tconst wait:ControllerSapiClassStatus = await this.razberry.waitLearn(this.progress_timer_id_ms_period, include_excluding.seq);\n\t\t\tif (wait == ControllerSapiClassStatus.OK) {\n\t\t\t\tif (this.progress_timer_id != undefined) {\n\t\t\t\t\twindow.clearTimeout(this.progress_timer_id);\n\t\t\t\t\tthis.progress_timer_id = undefined;\n\t\t\t\t}\n\t\t\t\tthis.log.infoDone(start_id);\n\t\t\t\treturn (true);\n\t\t\t}\n\t\t\tif (wait != ControllerSapiClassStatus.PROCESS) {\n\t\t\t\tthis.log.errorFalledCode(start_id, wait);\n\t\t\t\treturn (false);\n\t\t\t}\n\t\t\tif (this.progress_timer_id == undefined) {\n\t\t\t\tawait this.razberry.disabled();\n\t\t\t\tthis.log.errorFalledCode(start_id, ControllerSapiClassStatus.TIMEOUT);\n\t\t\t\treturn (undefined);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async _click_start_stop_include_excluding(excluding:boolean): Promise {\n\t\tlet out_progress:boolean|undefined, start_id:ControllerUiLangClassId, question_id:ControllerUiLangClassId, wait_id:ControllerUiLangClassId, include_excluding:ControllerSapiClassLearnMode;\n\n\t\tif (excluding == true) {\n\t\t\tstart_id = ControllerUiLangClassId.MESSAGE_START_EXCLUDING;\n\t\t\tquestion_id = ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE;\n\t\t\twait_id = ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER;\n\t\t}\n\t\telse {\n\t\t\tstart_id = ControllerUiLangClassId.MESSAGE_START_INCLUDE;\n\t\t\tquestion_id = ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE;\n\t\t\twait_id = ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER;\n\t\t}\n\t\tawait this.quest_continue_stop(this.el_container, question_id, \"\",\n\t\t\t\t\t\t\t\t\t\t\t\tControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,\n\t\t\t\t\t\t\t\t\t\t\t\tundefined, undefined);\n\n\t\tthis.el_container.innerHTML = '';\n\t\tthis.log.infoStart(start_id);\n\t\tinclude_excluding = await this.razberry.include_excluding();\n\t\tif (include_excluding.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(start_id, include_excluding.status);\n\t\t\treturn (false);\n\t\t}\n\t\tout_progress = await this._raz_include_excluding_wait(10, start_id, wait_id, include_excluding);\n\t\tif (out_progress != undefined)\n\t\t\treturn (out_progress);\n\t\tthis.el_container.innerHTML = '';\n\t\tthis.log.infoStart(start_id);\n\t\tif (excluding == true) {\n\t\t\tstart_id = ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING;\n\t\t\tinclude_excluding = await this.razberry.excludingWide();\n\t\t}\n\t\telse {\n\t\t\tstart_id = ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE;\n\t\t\tinclude_excluding = await this.razberry.includeWide();\n\t\t}\n\t\tif (include_excluding.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(start_id, include_excluding.status);\n\t\t\treturn (false);\n\t\t}\n\t\tout_progress = await this._raz_include_excluding_wait(30, start_id, wait_id, include_excluding);\n\t\tif (out_progress == undefined)\n\t\t\treturn (false);\n\t\treturn (out_progress);\n\t}\n\n\tprivate async _click_start_stop_test_include(home:ControllerUiSectionMigrationClassHome): Promise {\n\t\tthis._progress(ControllerUiLangClassId.MIGRATION_TEST_INCLUDE);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_HOME_ID);\n\t\tconst home_id:ControllerSapiClasstNetworkIDs = await this.razberry.GetNetworkIDs();\n\t\tif (home_id.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_HOME_ID, home_id.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\thome.home = home_id.home;\n\t\thome.node_id = home_id.node_id;\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_HOME_ID);\n\t\tif (home_id.node_id != 0x1)\n\t\t\treturn (true);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_INIT_DATA);\n\t\tconst get_init_data:ControllerSapiClasstInitData = await this.razberry.GetInitData();\n\t\tif (get_init_data.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_INIT_DATA, get_init_data.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_INIT_DATA);\n\t\tif (get_init_data.node_list.length > 0x1 || get_init_data.node_list[0x0] != 0x1)\n\t\t\treturn (true);\n\t\treturn (false);\n\t}\n\n\tprivate _progress(text:ControllerUiLangClassId): void {\n\t\tthis.el_container.innerHTML = '
' + this.locale.getLocale(text) +'
';\n\t}\n\n\tprivate _progress_error(text:ControllerUiLangClassId): void {\n\t\tthis.el_container.innerHTML = '
' + this.locale.getLocale(text) +'
';\n\t}\n\n\tprivate _update_raz_full_finware_url(data:Array, target_type:SapiClassDetectType): PaketUiClassUpdateInfoData|undefined {\n\t\tlet i:number;\n\n\t\ti = data.length;\n\t\twhile (i-- != 0x0) {\n\t\t\tif (data[i].beta == false && data[i].type == target_type)\n\t\t\t\treturn (data[i]);\n\t\t}\n\t\treturn (undefined);\n\t}\n\n\tprivate _update_raz_full_boot_url(data:Array): PaketUiClassUpdateInfoData|undefined {\n\t\tlet i:number;\n\n\t\ti = data.length;\n\t\twhile (i-- != 0x0) {\n\t\t\tif (data[i].beta == false)\n\t\t\t\treturn (data[i]);\n\t\t}\n\t\treturn (undefined);\n\t}\n\n\tprivate async _update_firmware_zuno(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tconst status:ZunoSapiClassStatus = await this.zuno.updateFirmware(data, process, target_type);\n\t\treturn ((status as unknown) as SapiClassStatus);\n\t}\n\n\tprivate async _update_firmware_raz(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tconst status:ControllerSapiClassStatus = await this.razberry.updateFirmware(data, process, target_type);\n\t\treturn ((status as unknown) as SapiClassStatus);\n\t}\n\n\tprivate async _update_bootloader_raz(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tconst status:ControllerSapiClassStatus = await this.razberry.updateBotloader(data, process);\n\t\treturn ((status as unknown) as SapiClassStatus);\n\t}\n\n\tprivate _update_raz_zuno_full_get_info_paket_add(paket:PaketUiClassUpdateInfoPaket|undefined): PaketUiClassUpdateInfoPaket|undefined {\n\t\tif (paket == undefined) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO);\n\t\t\treturn (undefined);\n\t\t}\n\t\treturn (paket);\n\t}\n\n\tprivate _update_raz_full_get_info_paket(): PaketUiClassUpdateInfoPaket|undefined {\n\t\tconst paket:PaketUiClassUpdateInfoPaket|undefined = ControllerUiSectionUpdateClass.getInfoUrlPaket(this.log, this.razberry);\n\t\treturn (this._update_raz_zuno_full_get_info_paket_add(paket));\n\t}\n\n\tprivate _update_zuno_full_get_info_paket(): PaketUiClassUpdateInfoPaket|undefined {\n\t\tconst paket:PaketUiClassUpdateInfoPaket|undefined = SlaveUiSectionUpdateClass.getInfoUrlPaket(this.log, this.zuno);\n\t\treturn (this._update_raz_zuno_full_get_info_paket_add(paket));\n\t}\n\n\tprivate async _update_raz_full_dowload_and_update(update_firmware:UpdateUiSectionClassFirmware, data:PaketUiClassUpdateInfoData, version_name:string): Promise {\n\t\tthis._progress(ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE);\n\t\tconst finware:Uint8Array = await UpdateUiSectionClass.downloadFile(this.download_process, data.url, this.log);\n\t\tthis.el_container.innerHTML = '';\n\t\tconst el_div_progress:HTMLDivElement = document.createElement(\"div\");\n\t\tconst el_div_text:HTMLDivElement = document.createElement(\"div\");\n\t\tel_div_text.textContent = version_name + \" -> \" + data.version_name;\n\t\tthis.el_container.appendChild(el_div_text);\n\t\tthis.el_container.appendChild(el_div_progress);\n\t\tconst finware_status:boolean = await UpdateUiSectionClass.updateProcess(ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE, el_div_progress, finware, data.type,\n\t\t\tupdate_firmware, this.locale, this.log);\n\t\tif (finware_status == false) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_NOT_UPDATE);\n\t\t\treturn (false);\n\t\t}\n\t\treturn (true);\n\t}\n\n\tprivate async _update_raz_full(): Promise {\n\t\tlet paket:PaketUiClassUpdateInfoPaket|undefined;\n\t\n\t\tpaket = this._update_raz_full_get_info_paket();\n\t\tif (paket == undefined)\n\t\t\treturn (undefined);\n\t\tfor (;;) {\n\t\t\tthis._progress(ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO);\n\t\t\tawait UpdateUiSectionClass.downloadInfo(this.download_process, paket, this.log, this.locale);\n\t\t\tconst data_raz:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_finware_url(paket.app.data, SapiClassDetectType.RAZBERRY);\n\t\t\tif (data_raz == undefined) {\n\t\t\t\tconst data_boot:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_boot_url(paket.boot.data);\n\t\t\t\tif (data_boot == undefined)\n\t\t\t\t\treturn (paket);\n\t\t\t\tif (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_bootloader_raz(data, process, target_type));},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata_boot, paket.boot.version_name) == false) {\n\t\t\t\t\treturn (undefined);\n\t\t\t\t}\n\t\t\t\tawait this.razberry.connect();\n\t\t\t\tpaket = this._update_raz_full_get_info_paket();\n\t\t\t\tif (paket == undefined)\n\t\t\t\t\treturn (undefined);\n\t\t\t\tif (paket.boot.version != data_boot.version) {\n\t\t\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION);\n\t\t\t\t\treturn (undefined);\n\t\t\t\t}\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tif (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware_raz(data, process, target_type));},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata_raz, paket.app.version_name) == false) {\n\t\t\t\treturn (undefined);\n\t\t\t}\n\t\t\tif (this.sapi.type() != SapiClassDetectType.RAZBERRY) {\n\t\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE);\n\t\t\t\treturn (undefined);\n\t\t\t}\n\t\t\tawait this.razberry.connect();\n\t\t\tpaket = this._update_raz_full_get_info_paket();\n\t\t\tif (paket == undefined)\n\t\t\t\treturn (undefined);\n\t\t\tif (paket.app.version != data_raz.version) {\n\t\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION);\n\t\t\t\treturn (undefined);\n\t\t\t}\n\t\t}\n\t\treturn (paket);\n\t}\n\n\tprivate async _update_raz_to_zuno(paket:PaketUiClassUpdateInfoPaket): Promise {\n\t\tconst data_zuno:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_finware_url(paket.app.data, SapiClassDetectType.ZUNO);\n\t\tif (data_zuno == undefined) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE);\n\t\t\treturn (undefined);\n\t\t}\n\t\tif (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware_raz(data, process, target_type));},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata_zuno, paket.app.version_name) == false) {\n\t\t\treturn (undefined);\n\t\t}\n\t\tif (this.sapi.type() != SapiClassDetectType.ZUNO) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE);\n\t\t\treturn (undefined);\n\t\t}\n\t\tawait this.zuno.connect();\n\t\tconst paket_new:PaketUiClassUpdateInfoPaket|undefined = this._update_zuno_full_get_info_paket();\n\t\tif (paket_new == undefined)\n\t\t\treturn (undefined);\n\t\tif (paket_new.app.version != data_zuno.version) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION);\n\t\t\treturn (undefined);\n\t\t}\n\t\treturn (paket_new);\n\t}\n\n\tprivate async _click_start_stop_zuno_get_info_include_exlude(): Promise {\n\t\tlet status:ZunoSapiClassStatus;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT);\n\t\tstatus = await this.zuno.enableNif();\n\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode( ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT, status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN);\n\t\tstatus = await this.zuno.enableEvent();\n\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode( ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN, status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_START_LEARN);\n\t\tstatus = await this.zuno.enableLearn(30);\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_START_LEARN);\n\t\tswitch (status) {\n\t\t\tcase ZunoSapiClassStatus.TIMEOUT:\n\t\t\t\tthis.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT);\n\t\t\t\tthis._progress_error(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT);\n\t\t\t\tbreak ;\n\t\t\tcase ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART:\n\t\t\t\tthis.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tthis._progress_error(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tbreak ;\n\t\t\tdefault:\n\t\t\t\tthis.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tthis._progress_error(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tbreak ;\n\t\t\tcase ZunoSapiClassStatus.LEARN_EXCLUDE:\n\t\t\tcase ZunoSapiClassStatus.LEARN_INCLUDE:\n\t\t\t\tthis.log.info(ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE);\n\t\t\t\tbreak ;\n\t\t}\n\t\tawait sleep(2000);//что бы точно ресетнулось\n\t\tif (await this._detection(SapiClassDetectType.ZUNO) == false)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate _test_dump_key_all(dump_key:ZunoSapiClassS2Key): boolean {\n\t\tlet i:number;\n\n\t\ti = 0x0;\n\t\twhile (i < dump_key.list.length) {\n\t\t\tif (dump_key.list[i].key.length <= 0x0)\n\t\t\t\treturn (false);\n\t\t\ti++;\n\t\t}\n\t\treturn (true);\n\t}\n\n\tprivate _dump_key_all_to_string(dump_key:ZunoSapiClassS2Key): string {\n\t\tlet out:string, i:number, lenght:number, index:number;\n\n\t\ti = 0x0;\n\t\tlenght = 0x0;\n\t\twhile (i < dump_key.list.length) {\n\t\t\tif (dump_key.list[i].key.length > 0x0 && dump_key.list[i].name.length > lenght)\n\t\t\t\tlenght = dump_key.list[i].name.length;\n\t\t\ti++;\n\t\t}\n\t\tout = '

'+ this.locale.getLocale(ControllerUiLangClassId.MIGRATION_SUCESS) +'

';\n\t\ti = 0x0;\n\t\tlenght++;\n\t\twhile (i < dump_key.list.length) {\n\t\t\tif (dump_key.list[i].key.length > 0x0) {\n\t\t\t\tout = out + '
'+ \"\" + dump_key.list[i].name + \":\"\n\t\t\t\tindex = dump_key.list[i].name.length;\n\t\t\t\twhile (index < lenght) {\n\t\t\t\t\tout = out + ' ';\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t\tout = out + \"\" + arrayToStringHex(dump_key.list[i].key) +'
';\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\tout = out + \"
\";\n\t\treturn (out);\n\t}\n\n\tprivate _key_all_to_string_quest(dump_key:ZunoSapiClassS2Key): string {\n\t\tlet out:string, i:number;\n\n\t\tout = \"
\" + this.locale.getLocale(ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY) + \"
\";\n\t\ti = 0x0;\n\t\twhile (i < dump_key.list.length) {\n\t\t\tout = out + \"\";\n\t\t\ti++;\n\t\t}\n\t\tout = out + \"
\" + dump_key.list[i].name + \"✘\";\n\t\t\telse\n\t\t\t\tout = out + \"class='ZUnoRazberryModal_color_sucess'>✔\";\n\t\t\tout = out + \"
\";\n\t\treturn (out);\n\t}\n\n\tprivate async _click_start_stop_zuno_get_info(region:string): Promise {\n\t\tlet status:ZunoSapiClassStatus, final:boolean;\n\n\t\tstatus = this.zuno.isSupportDumpKey();\n\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalled(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY);\n\t\t\treturn (undefined);\n\t\t}\n\t\tstatus = this.zuno.isSupportIncludeExclude();\n\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalled(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE);\n\t\t\treturn (undefined);\n\t\t}\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tconst region_info:ZunoSapiClassRegion = this.zuno.getRegion();\n\t\tif (region_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tif (region != region_info.region) {\n\t\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\t\tstatus = await this.zuno.setRegion(region);\n\t\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, status);\n\t\t\t\treturn (undefined);\n\t\t\t}\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\t}\n\t\tfinal = false;\n\t\tfor (;;) {\n\t\t\tthis.log.infoStart(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\t\tconst board_info:ZunoSapiClassBoardInfo = this.zuno.getBoardInfo();\n\t\t\tif (board_info.status != ZunoSapiClassStatus.OK || board_info.node_id == undefined) {\n\t\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\t\treturn (undefined);\n\t\t\t}\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\t\tif (board_info.node_id != 0x0) {\n\t\t\t\tif (final == true) {\n\t\t\t\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_S2_KEY);\n\t\t\t\t\tconst dump_key:ZunoSapiClassS2Key = await this.zuno.readS2Key();\n\t\t\t\t\tif (dump_key.status != ZunoSapiClassStatus.OK) {\n\t\t\t\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_S2_KEY, dump_key.status);\n\t\t\t\t\t\treturn ;\n\t\t\t\t\t}\n\t\t\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_S2_KEY);\n\t\t\t\t\tconst zuno_node_id_dump_key:ControllerUiSectionMigrationClassNodeDumpKey = {zuno_node_id:board_info.node_id, dump_key:dump_key};\n\t\t\t\t\tif (this._test_dump_key_all(dump_key) == true)\n\t\t\t\t\t\treturn (zuno_node_id_dump_key);\n\t\t\t\t\tif (await this.quest_continue_stop(this.el_container,\n\t\t\t\t\t\t\tthis._key_all_to_string_quest(zuno_node_id_dump_key.dump_key), ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE,\n\t\t\t\t\t\t\tControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,\n\t\t\t\t\t\t\tControllerUiLangClassId.PROCESS_REPEAT, ControllerUiLangClassId.PROCESS_REPEAT_TITLE) == true)\n\t\t\t\t\t\treturn (zuno_node_id_dump_key);\n\t\t\t\t\tawait this.quest_continue_stop(this.el_container,\n\t\t\t\t\t\tControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE, ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE,\n\t\t\t\t\t\tControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,\n\t\t\t\t\t\tundefined, undefined);\n\t\t\t\t\tthis._progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT);\n\t\t\t\t\tif (await this._click_start_stop_zuno_get_info_include_exlude() == false)\n\t\t\t\t\t\treturn (undefined);\n\t\t\t\t\tfinal = false;\n\t\t\t\t\tcontinue ;\n\t\t\t\t}\n\t\t\t\tawait this.quest_continue_stop(this.el_container,\n\t\t\t\t\t\t\t\t\t\t\t\tControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE, ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE,\n\t\t\t\t\t\t\t\t\t\t\t\tControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,\n\t\t\t\t\t\t\t\t\t\t\t\tundefined, undefined);\n\t\t\t\tthis._progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT);\n\t\t\t\tif (await this._click_start_stop_zuno_get_info_include_exlude() == false)\n\t\t\t\t\treturn (undefined);\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tconst dsk:string = conv2Decimal(board_info.s2_pub, \" - \");\n\t\t\tconst quest_include:string = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE).replace(\"${dsk}\", \"\" + dsk.substring(0x0, 0x5) + \"\" + dsk.substring(0x5));\n\t\t\tawait this.quest_continue_stop(this.el_container,\n\t\t\t\t\t\t\t\t\t\t\tquest_include, ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE,\n\t\t\t\t\t\t\t\t\t\t\tControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE,\n\t\t\t\t\t\t\t\t\t\t\tundefined, undefined);\n\t\t\tthis._progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT);\n\t\t\tif (await this._click_start_stop_zuno_get_info_include_exlude() == false)\n\t\t\t\treturn (undefined);\n\t\t\tfinal = true;\n\t\t}\n\t\treturn (undefined);\n\t}\n\n\tprivate async _update_zuno_to_raz(paket:PaketUiClassUpdateInfoPaket): Promise {\n\t\tthis._progress(ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO);\n\t\tawait UpdateUiSectionClass.downloadInfo(this.download_process, paket, this.log, this.locale);\n\t\tconst data_raz:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_finware_url(paket.app.data, SapiClassDetectType.RAZBERRY);\n\t\tif (data_raz == undefined) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE);\n\t\t\treturn (false);\n\t\t}\n\t\tif (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware_zuno(data, process, target_type));},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata_raz, paket.app.version_name) == false) {\n\t\t\treturn (false);\n\t\t}\n\t\tif (this.sapi.type() != SapiClassDetectType.RAZBERRY) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE);\n\t\t\treturn (false);\n\t\t}\n\t\tawait this.razberry.connect();\n\t\tconst paket_new:PaketUiClassUpdateInfoPaket|undefined = this._update_raz_full_get_info_paket();\n\t\tif (paket_new == undefined)\n\t\t\treturn (false);\n\t\tif (paket_new.app.version != data_raz.version) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION);\n\t\t\treturn (false);\n\t\t}\n\t\treturn (true);\n\t}\n\n\n\tprivate async _remove_node(node_id:number): Promise {\n\t\tlet status:ControllerSapiClassStatus;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_NOP);\n\t\tstatus = await this.razberry.nop(node_id);\n\t\tif (status != ControllerSapiClassStatus.TRANSMIT_COMPLETE_NO_ACK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_NOP, status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_NOP);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_REMOVE_NODE);\n\t\tstatus = await this.razberry.removeFaledNode(node_id);\n\t\tif (status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_REMOVE_NODE, status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_REMOVE_NODE);\n\t\treturn (true);\n\t}\n\n\tprivate async _detection(type:SapiClassDetectType):Promise {\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\tconst detect_dict:SapiClassDetect = await this.sapi.detect([115200], null);\n\t\tif (detect_dict.status != SapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status);\n\t\t\treturn (false);\n\t\t}\n\t\tif (this.sapi.type() != type) {\n\t\t\tthis.log.errorFalled(ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\tswitch (type) {\n\t\t\tcase SapiClassDetectType.RAZBERRY:\n\t\t\t\tawait this.razberry.connect();\n\t\t\t\tbreak ;\n\t\t\tcase SapiClassDetectType.ZUNO:\n\t\t\t\tawait this.zuno.connect();\n\t\t\t\tbreak ;\n\t\t}\n\t\treturn (true);\n\t}\n\n\tprivate async _second_chance(type:SapiClassDetectType):Promise {\n\t\tif (await this.quest_continue_stop(this.el_container,\n\t\t\tControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP, ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE,\n\t\t\tControllerUiLangClassId.PROCESS_REPEAT, ControllerUiLangClassId.PROCESS_REPEAT_TITLE,\n\t\t\tControllerUiLangClassId.PROCESS_ABORT, ControllerUiLangClassId.PROCESS_ABORT_TITLE) == false)\n\t\t\treturn (false);\n\t\tthis._progress(ControllerUiLangClassId.MIGRATION_DETECTION);\n\t\tif (await this._detection(type) == false)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate async _raz_region_inc_exl(home:ControllerUiSectionMigrationClassHome, region:string):Promise {\n\t\tlet result_test_include:boolean|undefined;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\tconst region_set_status:ControllerSapiClassStatus = await this.razberry.setRegion(region);\n\t\tif (region_set_status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, region_set_status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\tfor (;;) {\n\t\t\tif (await this._click_start_stop_include_excluding(false) == false)\n\t\t\t\treturn (false);\n\t\t\tresult_test_include = await this._click_start_stop_test_include(home);\n\t\t\tif (result_test_include == undefined)\n\t\t\t\treturn (false);\n\t\t\tif (result_test_include == true)\n\t\t\t\tbreak ;\n\t\t}\n\t\treturn (true);\n\t}\n\n\tprivate async _raz_home_set(home:ControllerUiSectionMigrationClassHome):Promise {\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_HOME_ID);\n\t\tconst set_home_id:ControllerSapiClassStatus = await this.razberry.nvmWrite(this.NVM_HOMEID, intToBytearrayMsbLsb(home.home));\n\t\tif (set_home_id != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_HOME_ID, set_home_id);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SOFT_RESET);\n\t\tconst soft_reset:ControllerSapiClassStatus = await this.razberry.softReset();\n\t\tif (soft_reset != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SOFT_RESET, soft_reset);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SOFT_RESET);\n\t\treturn (true);\n\t}\n\n\tprivate async _click_start_stop(event:Event) {\n\t\tlet paket:PaketUiClassUpdateInfoPaket|undefined, result_test_include:boolean|undefined, zuno_node_id_dump_key:ControllerUiSectionMigrationClassNodeDumpKey|undefined;\n\n\t\tif (this.process == true)\n\t\t\treturn ;\n\t\tconst el_target:HTMLButtonElement|null = this.event_get_element_button(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tconst out_confirm:boolean = window.confirm(this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING));\n\t\tif (out_confirm != true)\n\t\t\treturn ;\n\t\tawait this.clear();\n\t\tawait this.begin();\n\t\tthis.el_button.disabled = true;\n\t\tthis.el_button.title = '';\n\t\tthis.el_button.style.display = 'none';\n\t\tthis.process = true;\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tconst region_info:ControllerSapiClassRegion = await this.razberry.getRegion();\n\t\tif (region_info.status != ControllerSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status);\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tif (this.razberry.isLr(region_info.region) == true) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR);\n\t\t\treturn ;\n\t\t}\n\t\tif (this.razberry.isLicenseSupportBackup() == false) {\n\t\t\tthis._progress_error(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP);\n\t\t\treturn ;\n\t\t}\n\t\tpaket = await this._update_raz_full();\n\t\tif (paket == undefined)\n\t\t\treturn ;\n\t\tpaket = await this._update_raz_to_zuno(paket);\n\t\tif (paket == undefined)\n\t\t\treturn ;\n\t\tfor (;;) {\n\t\t\tzuno_node_id_dump_key = await this._click_start_stop_zuno_get_info(region_info.region);\n\t\t\tif (zuno_node_id_dump_key != undefined)\n\t\t\t\tbreak ;\n\t\t\tif (await this._second_chance(SapiClassDetectType.ZUNO) == false)\n\t\t\t\treturn ;\n\t\t}\n\t\tfor (;;) {\n\t\t\tif (await this._update_zuno_to_raz(paket) == true)\n\t\t\t\tbreak ;\n\t\t\tif (await this._second_chance(SapiClassDetectType.ZUNO) == false)\n\t\t\t\treturn ;\n\t\t}\n\t\tconst home:ControllerUiSectionMigrationClassHome = {home:0x0, node_id:0x0};\n\t\tfor (;;) {\n\t\t\tif (await this._raz_region_inc_exl(home, region_info.region) == true)\n\t\t\t\tbreak ;\n\t\t\tif (await this._second_chance(SapiClassDetectType.RAZBERRY) == false)\n\t\t\t\treturn ;\n\t\t}\n\t\tthis._progress(ControllerUiLangClassId.MIGRATION_FINALIZE);\n\t\tfor (;;) {\n\t\t\tif (await this._raz_home_set(home) == true)\n\t\t\t\tbreak ;\n\t\t\tif (await this._second_chance(SapiClassDetectType.RAZBERRY) == false)\n\t\t\t\treturn ;\n\t\t\tthis._progress(ControllerUiLangClassId.MIGRATION_FINALIZE);\n\t\t}\n\t\tfor (;;) {\n\t\t\tif (await this._remove_node(home.node_id) == true)\n\t\t\t\tbreak ;\n\t\t\tif (await this._second_chance(SapiClassDetectType.RAZBERRY) == false)\n\t\t\t\treturn ;\n\t\t\tthis._progress(ControllerUiLangClassId.MIGRATION_FINALIZE);\n\t\t}\n\t\tfor (;;) {\n\t\t\tif (await this._remove_node(zuno_node_id_dump_key.zuno_node_id) == true)\n\t\t\t\tbreak ;\n\t\t\tif (await this._second_chance(SapiClassDetectType.RAZBERRY) == false)\n\t\t\t\treturn ;\n\t\t\tthis._progress(ControllerUiLangClassId.MIGRATION_FINALIZE);\n\t\t}\n\t\tthis.el_container.innerHTML = this._dump_key_all_to_string(zuno_node_id_dump_key.dump_key);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\tlet about_str:string;\n\n\t\tif (this.razberry.isRazberry5() == true)\n\t\t\tabout_str = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5);\n\t\telse if (this.razberry.isRazberry7() == true)\n\t\t\tabout_str = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML);\n\t\telse\n\t\t\tabout_str = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT);\n\t\tthis.create_tr_el(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER, ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE, about_str, \"\");\n\t\tif (this.razberry.isRazberry7() != true)\n\t\t\treturn (true);\n\t\tthis.el_button.disabled = false;\n\t\tthis.el_button.style.display = '';\n\t\tthis.el_button.addEventListener(\"click\", async (event:Event) => { await this._click_start_stop(event);});\n\t\tthis.el_button.type = \"button\";\n\t\tthis.el_button.textContent = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START);\n\t\tthis.el_button.title = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE);\n\t\tthis.create_tr_el(ControllerUiLangClassId.MIGRATION_PROCESS_HEADER, ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE, this.el_container, this.el_button);\n\t\treturn (true);\n\t}\n\n\tprivate async _end(): Promise {\n\t\tthis.process = false;\n\t\tthis.download_process.xhr.abort();\n\t\tif (this.download_process.timer_id != undefined) {\n\t\t\twindow.clearTimeout(this.download_process.timer_id);\n\t\t\tthis.download_process.timer_id = undefined;\n\t\t}\n\t\tthis.el_container.innerHTML = \"\";\n\t\tif (this.progress_timer_id != undefined) {\n\t\t\twindow.clearTimeout(this.progress_timer_id);\n\t\t\tthis.progress_timer_id = undefined;\n\t\t}\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass, clear:ControllerUiSectionMigrationClassClear, sapi:SapiClass, zuno:ZunoSapiClass) {\n\t\tsuper(el_section, locale, razberry, log, ControllerUiLangClassId.MIGRATION_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.razberry = razberry;\n\t\tthis.sapi = sapi;\n\t\tthis.zuno = zuno;\n\t\tthis.clear = clear;\n\t\tthis.el_container = document.createElement(\"span\");\n\t}\n}","import {ControllerUiLangClassId} from \"../../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../../lang/ui_lang\"\nimport {ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassBoardInfo, ControllerSapiClassCapabilities} from \"../../sapi/controller_sapi\";\nimport {ControllerUiLogClass} from \"../../log/ui_log\"\nimport {CommonUiSectionClass} from \"../common\"\nimport {UpdateUiSectionClass, PaketUiClassUpdateInfoPaket} from \"../update\"\nimport {arrayToStringHex, versionNumberToString} from \"../../other/utilities\";\nimport {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus} from \"./../../sapi/sapi\";\nimport {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from \"../../ui_define\"\nimport {ControllerUiDefineClassReBeginFunc} from \"../../section/detection\"\n\nexport {ControllerUiSectionUpdateClass};\n\nclass ControllerUiSectionUpdateClass extends CommonUiSectionClass {\n\n\tprivate readonly update:UpdateUiSectionClass;\n\tprivate readonly razberry:ControllerSapiClass;\n\n\tpublic static getInfoUrlPaket(log:ControllerUiLogClass, razberry:ControllerSapiClass):PaketUiClassUpdateInfoPaket|undefined {\n\t\tlog.infoStart(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO);\n\t\tconst board_info:ControllerSapiClassBoardInfo = razberry.getBoardInfo();\n\t\tif (board_info.status != ControllerSapiClassStatus.OK) {\n\t\t\tlog.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\tlog.infoDone(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO);\n\t\tlog.infoStart(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES);\n\t\tconst capabilities_info:ControllerSapiClassCapabilities = razberry.getCapabilities();\n\t\tif (capabilities_info.status != ControllerSapiClassStatus.OK) {\n\t\t\tlog.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES, capabilities_info.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\tlog.infoDone(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES);\n\t\tconst version:number = (capabilities_info.ApiVersion << 0x8) | capabilities_info.ApiRevision;\n\t\tconst paket:PaketUiClassUpdateInfoPaket =\n\t\t{\n\t\t\tapp:{version:version, version_name:versionNumberToString(version), type:SapiClassDetectType.RAZBERRY,\n\t\t\t\tupdate:true, update_type:true, data: []},\n\t\t\tboot:{\tversion:board_info.bootloader_version, version_name:versionNumberToString(board_info.bootloader_version), type:SapiClassDetectType.UNKNOWN,\n\t\t\t\t\tupdate:true, update_type:true, data: []},\n\t\t\turl:'vendorId=' + capabilities_info.VendorID.toString() + '&appVersionMajor=' + capabilities_info.ApiVersion.toString() + '&appVersionMinor=' + capabilities_info.ApiRevision.toString() +\n\t\t\t\t\t\t\t'&uuid=' + arrayToStringHex(board_info.chip_uuid) + \"&bootloaderVersion=\" + board_info.bootloader_version.toString() +\n\t\t\t\t\t\t\t'&org_family=' + board_info.keys_hash.toString() + '&fw_family=' + SapiClassDetectType.RAZBERRY.toString() + '&chip_family=' + board_info.chip_family.toString() +\n\t\t\t\t\t\t\t'&chip_id=' + board_info.chip_type.toString() + '&zway=' + NAME_APP_VERSION_FULL\n\t\t};\n\t\treturn (paket);\n\t}\n\n\tprivate _update_init(): boolean {\n\t\tconst paket:PaketUiClassUpdateInfoPaket|undefined = ControllerUiSectionUpdateClass.getInfoUrlPaket(this.log, this.razberry);\n\t\tif (paket == undefined)\n\t\t\treturn (false);\n\t\tthis.update.info_download_xhr(paket);\n\t\treturn (true);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\tif (this.razberry.isRazberry7() == false)\n\t\t\treturn (false);\n\t\treturn (this._update_init());\n\t}\n\n\tprivate async _end(): Promise {\n\t\tthis.update.end();\n\t}\n\n\tprivate async _update_firmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tconst status:ControllerSapiClassStatus = await this.razberry.updateFirmware(data, process, target_type);\n\t\treturn ((status as unknown) as SapiClassStatus);\n\t}\n\n\tprivate async _update_bootloader(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tconst status:ControllerSapiClassStatus = await this.razberry.updateBotloader(data, process);\n\t\treturn ((status as unknown) as SapiClassStatus);\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) {\n\t\tsuper(el_section, locale, razberry, log, ControllerUiLangClassId.UPDATE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.razberry = razberry;\n\t\tthis.update = new UpdateUiSectionClass(log, locale, this, re_begin_func,\n\t\t\tasync (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware(data, process, target_type));},\n\t\t\tasync (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_bootloader(data, process, target_type));}\n\t\t);\n\t}\n}","import {ControllerUiLangClassId} from \"../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"..//lang/ui_lang\"\nimport {SapiClass, SapiClassDetect, SapiClassStatus, SapiClassDetectTypeFunc, SapiClassDetectType} from \"../sapi/sapi\";\nimport {ControllerUiLogClass} from \"../log/ui_log\"\nimport {CommonUiSectionClass} from \"./common\"\n\nimport {ControllerUiDefineClass} from \"../ui_define\"\n\nexport {DetectionUiSectionClass, ControllerUiDefineClassReBeginFunc};\n\ntype ControllerUiDefineClassReBeginFunc = (detection:boolean) => Promise;\n\nclass DetectionUiSectionClass extends CommonUiSectionClass {\n\tprivate readonly sapi:SapiClass;\n\tprivate readonly re_begin_func:ControllerUiDefineClassReBeginFunc;\n\n\tprivate readonly el_container:HTMLElement\t\t\t\t\t\t\t\t= document.createElement(\"span\");\n\n\tprivate _get_detection_sync_manual():boolean {\n\t\tconst detection_sync_manual:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL);\n\t\tif (detection_sync_manual === ControllerUiDefineClass.STORAGE_VALUE_TRUE)\n\t\t\treturn (true);\n\t\treturn (false);\n\t}\n\n\tprivate async _detection_sync_manual(event:Event) {\n\t\tconst el_target:HTMLInputElement|null = this.event_get_element_input(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tlocalStorage.setItem(ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL, ((el_target.checked == true) ? ControllerUiDefineClass.STORAGE_VALUE_TRUE: ControllerUiDefineClass.STORAGE_VALUE_FALSE));\n\t}\n\n\tprivate _get_baudrate_cache():Array {\n\t\tlet baudrate:Array, i:number;\n\n\t\tconst baudrate_str:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_BAUDRATE);\n\t\tif (baudrate_str == null)\n\t\t\treturn ([]);\n\t\ttry {\n\t\t\tbaudrate = JSON.parse(baudrate_str);\n\t\t} catch (error) {\n\t\t\treturn ([]);\n\t\t}\n\t\tif (Array.isArray(baudrate) == false)\n\t\t\treturn ([]);\n\t\ti = 0x0;\n\t\twhile (i < baudrate.length) {\n\t\t\tif (this.sapi.BAUDRATE.indexOf(baudrate[i]) == -1)\n\t\t\t\tbaudrate.splice(i, 0x1);\n\t\t\ti++;\n\t\t}\n\t\treturn (baudrate);\n\t}\n\n\tprivate _set_baudrate_cache(baudrate_array:Array, baudrate:number):void {\n\t\tconst i:number = baudrate_array.indexOf(baudrate);\n\t\tif (i != -1)\n\t\t\tbaudrate_array.splice(i, 0x1);\n\t\tbaudrate_array.unshift(baudrate);\n\t\tlocalStorage.setItem(ControllerUiDefineClass.KEY_BAUDRATE, JSON.stringify(baudrate_array));\n\t}\n\n\tprivate async _click_start_stop_question(): Promise {\n\t\tconst promise:Promise = new Promise((resolve) => {\n\t\t\tthis.el_container.innerHTML = '';\n\t\t\tconst el_span:HTMLSpanElement = document.createElement(\"span\");\n\t\t\tel_span.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC);\n\t\t\tel_span.className = \"ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tconst el_button_continue:HTMLButtonElement = document.createElement(\"button\");\n\t\t\tel_button_continue.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE);\n\t\t\tel_button_continue.title = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE);\n\t\t\tel_button_continue.type = \"button\";\n\t\t\tel_button_continue.className = \"ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tconst el_button_stop:HTMLButtonElement = document.createElement(\"button\");\n\t\t\tel_button_stop.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_STOP);\n\t\t\tel_button_stop.title = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE);\n\t\t\tel_button_stop.type = \"button\";\n\t\t\tel_button_stop.className = \"ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tel_button_stop.addEventListener(\"click\", async () => { resolve(false)});\n\t\t\tel_button_continue.addEventListener(\"click\", async () => { resolve(true)});\n\t\t\tthis.el_container.appendChild(el_span);\n\t\t\tthis.el_container.appendChild(el_button_continue);\n\t\t\tthis.el_container.appendChild(el_button_stop);\n\t\t});\n\t\treturn (promise);\n\t}\n\n\tprivate async _detection_process_sync(): Promise {\n\t\tconst excluding_question:boolean = await this._click_start_stop_question();\n\t\tif (excluding_question == false) {\n\t\t\tthis._constructor_struct_end();\n\t\t\treturn (false);\n\t\t}\n\t\tthis._constructor_struct_progress(ControllerUiLangClassId.DETECTION_PROCESS);\n\t\treturn (true);\n\t}\n\n\tprivate _constructor_struct_progress(text:ControllerUiLangClassId): void {\n\t\tthis.el_container.innerHTML = '
' + this.locale.getLocale(text) +'
';\n\t}\n\n\tprivate async _click_re_sync(event:Event) {\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tthis.re_begin_func(true);\n\t}\n\n\tprivate _constructor_struct_end(): void {\n\t\tthis.el_container.innerHTML = '';\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.addEventListener(\"click\", async (event:Event) => { await this._click_re_sync(event);});\n\t\tel_button.type = \"button\";\n\t\tel_button.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC);\n\t\tel_button.title = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE);\n\t\tthis.el_container.appendChild(el_button);\n\t}\n\n\n\tpublic async detection(): Promise {\n\t\tlet func:SapiClassDetectTypeFunc|null;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\tconst baudrate_array:Array = this._get_baudrate_cache();\n\t\tif (this._get_detection_sync_manual() == false)\n\t\t\tfunc = null;\n\t\telse\n\t\t\tfunc = async ():Promise => {return (await this._detection_process_sync());}\n\t\tthis._constructor_struct_progress(ControllerUiLangClassId.DETECTION_PROCESS);\n\t\tconst detect_dict:SapiClassDetect = await this.sapi.detect(baudrate_array, func);\n\t\tif (detect_dict.status != SapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status);\n\t\t\tthis._constructor_struct_end();\n\t\t\treturn (false);\n\t\t}\n\t\tthis._constructor_struct_end();\n\t\tthis._set_baudrate_cache(baudrate_array, detect_dict.baudrate);\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\treturn (true);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\tconst el_input:HTMLInputElement = document.createElement(\"input\");\n\t\tel_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE);\n\t\tel_input.type = \"checkbox\";\n\t\tel_input.checked = this._get_detection_sync_manual();\n\t\tel_input.addEventListener(\"change\", (event:Event) => {this._detection_sync_manual(event);});\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL, ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE, el_input, \"\");\n\t\tthis.create_tr_el(ControllerUiLangClassId.DETECTION_PROCESS_HEADER, ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE, this.el_container, \"\");\n\t\treturn (true);\n\t}\n\n\tprivate async _end(): Promise {\n\t\tthis.el_container.innerHTML = \"\";\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, sapi:SapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) {\n\t\tsuper(el_section, locale, sapi, log, ControllerUiLangClassId.DETECTION_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.sapi = sapi;\n\t\tthis.re_begin_func = re_begin_func;\n\t}\n}","import {ControllerUiLangClassId} from \"../../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../../lang/ui_lang\"\nimport {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo, ZunoSapiClassRegion, ZunoSapiClassPower} from \"../../sapi/zuno_sapi\";\nimport {ControllerUiLogClass} from \"../../log/ui_log\"\nimport {CommonUiSectionClass} from \"../common\"\nimport {versionNumberToStringSlave, arrayToStringHex, numberToStringHex, conv2Decimal, sleep} from \"../../other/utilities\";\nimport { QRCode, QRCodeOption, QRErrorCorrectLevel } from \"./../../qr_code/qrcode\";\nimport {ControllerUiDefineClass} from \"../../ui_define\"\nimport {ControllerUiDefineClassReBeginFunc} from \"../../section/detection\"\n\nexport {SlaveUiSectionInfoClass};\n\nclass SlaveUiSectionInfoClass extends CommonUiSectionClass {\n\tprivate readonly INCLUDE_EXCLUDE_DEFAULT:number\t\t\t\t\t\t\t= 30;\n\tprivate readonly INCLUDE_EXCLUDE_MIN:number\t\t\t\t\t\t\t\t= 5;\n\tprivate readonly INCLUDE_EXCLUDE_MAX:number\t\t\t\t\t\t\t\t= 255;\n\n\tprivate region_current:string\t\t\t\t\t\t\t\t\t\t\t= '';\n\tprivate region_new:string\t\t\t\t\t\t\t\t\t\t\t\t= '';\n\tprivate power_current:number\t\t\t\t\t\t\t\t\t\t\t= 0x0;\n\tprivate power_new:number\t\t\t\t\t\t\t\t\t\t\t\t= 0x0;\n\n\tprivate readonly el_container_include_exlude:HTMLElement\t\t\t\t= document.createElement(\"span\");\n\tprivate readonly el_timout_include_exlude:HTMLElement\t\t\t\t\t= document.createElement(\"span\");\n\n\tprivate readonly region_el_button:HTMLButtonElement;\n\tprivate readonly power_el_button:HTMLButtonElement;\n\tprivate readonly zuno:ZunoSapiClass;\n\tprivate readonly re_begin_func:ControllerUiDefineClassReBeginFunc;\n\n\tprivate _not_freeze(status:ZunoSapiClassStatus, title:ControllerUiLangClassId) {\n\t\tthis.log.errorFalledCode(title, status);\n\t\tif (status != ZunoSapiClassStatus.NO_FREEZE)\n\t\t\treturn ;\n\t\tthis.log.errorFalled(ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR);\n\t\tthis.re_begin_func(true);\n\t}\n\n\tprivate _board_info(): boolean {\n\t\tthis.log.infoStart(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\tconst board_info:ZunoSapiClassBoardInfo = this.zuno.getBoardInfo();\n\t\tif (board_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_TYPE, ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE, this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE), \"\");\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_VERSION, ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE, versionNumberToStringSlave(board_info.version), \"\");\n\t\tconst build_data_time:Date = new Date(board_info.build_ts * 1000);\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP, ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE, build_data_time.toLocaleString(), \"\");\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UUID, ControllerUiLangClassId.TABLE_NAME_UUID_TITLE, arrayToStringHex(board_info.chip_uuid), \"\");\n\t\tif (board_info.home_id != undefined)\n\t\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_HOME, ControllerUiLangClassId.TABLE_NAME_HOME_TITLE, numberToStringHex(board_info.home_id), \"\");\n\t\tif (board_info.node_id != undefined)\n\t\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_NODE, ControllerUiLangClassId.TABLE_NAME_NODE_TITLE, board_info.node_id.toString(0xA), \"\");\n\t\tconst dsk:string = conv2Decimal(board_info.s2_pub, \" - \");\n\t\tconst event_copy:EventListener = () => {\n\t\t\tnavigator.clipboard.writeText(dsk);\n\t\t};\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.textContent = this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_DSK);\n\t\tel_button.title = this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE);\n\t\tel_button.addEventListener(\"click\", event_copy);\n\t\tel_button.type = \"button\";\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_DSK, ControllerUiLangClassId.TABLE_NAME_DSK_TITLE, \"\" + dsk.substring(0x0, 0x5) + \"\" + dsk.substring(0x5), el_button);\n\t\tif (board_info.smart_qr != undefined) {\n\t\t\tconst el_span:HTMLSpanElement = document.createElement(\"span\");\n\t\t\tconst option:QRCodeOption = {\n\t\t\t\ttext: board_info.smart_qr,\n\t\t\t\twidth: 128,\n\t\t\t\theight: 128,\n\t\t\t\tcolorDark: \"#000000\",\n\t\t\t\tcolorLight: \"#ffffff\",\n\t\t\t\tcorrectLevel: QRErrorCorrectLevel.L,\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tnew QRCode(el_span, option);\n\t\t\t} catch(e) {\n\t\t\t\tel_span.textContent = board_info.smart_qr;\n\t\t\t}\n\t\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_QR_CODE, ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE, el_span, \"\");\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\treturn (true);\n\t}\n\n\tprivate _region_change(event:Event): void {\n\t\tconst el_target:HTMLSelectElement|null = this.event_get_element_select(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tthis.region_new = el_target.value;\n\t\tthis.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true:false);\n\t}\n\n\tprivate async _region_click(): Promise {\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tthis.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, true);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\tconst status:ZunoSapiClassStatus = await this.zuno.setRegion(this.region_new);\n\t\tif (status == ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\t\tthis.region_current = this.region_new;\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, status);\n\t\tthis.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, false);\n\t\tthis._not_freeze(status, ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t}\n\n\tprivate _region_init(): boolean {\n\t\tlet i:number, el_option_str:string;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tconst region_info:ZunoSapiClassRegion = this.zuno.getRegion();\n\t\tif (region_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.region_current = region_info.region;\n\t\tthis.region_new = region_info.region;\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\ti = 0x0;\n\t\tel_option_str = \"\";\n\t\twhile (i < region_info.region_array.length) {\n\t\t\tif (region_info.region_array[i] == region_info.region) {\n\t\t\t\tel_option_str = el_option_str + '';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tel_option_str = el_option_str + '';\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\tconst el_select:HTMLSelectElement = document.createElement(\"select\");\n\t\tel_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE);\n\t\tel_select.innerHTML = el_option_str;\n\t\tel_select.addEventListener(\"change\", (event:Event) => {this._region_change(event);});\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_REGION, ControllerUiLangClassId.TABLE_NAME_REGION_TITLE, el_select, this.region_el_button);\n\t\tthis.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true:false);\n\t\treturn (true);\n\t}\n\n\tprivate _power_change(event:Event): void {\n\t\tconst el_target:HTMLInputElement|null = this.event_get_element_input(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tthis.power_new = Number(el_target.value);\n\t\tthis.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true:false);\n\t}\n\n\tprivate async _power_click(): Promise {\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tthis.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, true);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_POWER);\n\t\tconst status:ZunoSapiClassStatus = await this.zuno.setPower(this.power_new);\n\t\tif (status == ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_POWER);\n\t\t\tthis.power_current = this.power_new;\n\t\t\treturn ;\n\t\t}\n\t\tthis.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, false);\n\t\tthis._not_freeze(status, ControllerUiLangClassId.MESSAGE_SET_POWER);\n\t}\n\n\tprivate async _power_init(): Promise {\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_POWER);\n\t\tconst power:ZunoSapiClassPower = this.zuno.getPower();\n\t\tif (power.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_POWER, power.status);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.power_new = power.power_raw;\n\t\tthis.power_current = power.power_raw;\n\t\tconst el_value:HTMLElement = document.createElement(\"span\");\n\t\tconst el_input:HTMLInputElement = document.createElement(\"input\");\n\t\tel_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE);\n\t\tel_input.type = \"number\";\n\t\tel_input.min = power.min.toString();\n\t\tel_input.max = power.max.toString();\n\t\tel_input.step = power.step.toString();\n\t\tel_input.value = power.power_raw.toString();\n\t\tel_input.addEventListener(\"change\", (event:Event) => {this._power_change(event);});\n\t\tel_value.appendChild(el_input);\n\t\tel_value.appendChild(document.createElement(\"span\"));\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_POWER, ControllerUiLangClassId.TABLE_NAME_POWER_TITLE, el_value, this.power_el_button);\n\t\tthis.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true:false);\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_POWER);\n\t\treturn (true);\n\t}\n\n\tprivate async _controller_default_click(event:Event): Promise {\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tconst el_target:HTMLButtonElement|null = this.event_get_element_button(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tconst out:boolean = window.confirm(this.locale.getLocale(ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING));\n\t\tif (out != true)\n\t\t\treturn ;\n\t\tthis.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, true);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_DEFAULT);\n\t\tconst status:ZunoSapiClassStatus = await this.zuno.setDefault();\n\t\tthis.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, false);\n\t\tif (status == ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_DEFAULT);\n\t\t\tthis.zuno.lock();\n\t\t\tawait sleep(1000);\n\t\t\tthis.zuno.unlock();\n\t\t\tthis.re_begin_func(true);\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status);\n\t}\n\n\tprivate _include_exclude_get_test_timout(info_timout:string|null): number {\n\t\treturn (this.INCLUDE_EXCLUDE_DEFAULT);\n\t\tlet value:number;\n\n\t\tif (info_timout == null)\n\t\t\treturn (this.INCLUDE_EXCLUDE_DEFAULT);\n\t\ttry {\n\t\t\tvalue = Number(info_timout);\n\t\t} catch (error) {\n\t\t\treturn (this.INCLUDE_EXCLUDE_DEFAULT);\n\t\t}\n\t\tif (value < this.INCLUDE_EXCLUDE_MIN)\n\t\t\tvalue = this.INCLUDE_EXCLUDE_MIN;\n\t\telse if (value > this.INCLUDE_EXCLUDE_MAX)\n\t\t\tvalue = this.INCLUDE_EXCLUDE_MAX;\n\t\treturn (value);\n\t}\n\n\tprivate _include_exclude_get_storage(): number {\n\t\treturn (this._include_exclude_get_test_timout(localStorage.getItem(ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT)));\n\t}\n\n\tprivate _include_exclude_change(event:Event): void {\n\t\tconst el_target:HTMLInputElement|null = this.event_get_element_input(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tlocalStorage.setItem(ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT, this._include_exclude_get_test_timout(el_target.value).toString());\n\t}\n\n\tprivate _include_exclude_progress(text:ControllerUiLangClassId): void {\n\t\tthis.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) +'
';\n\t}\n\n\tprivate _include_exclude_message_info(text:ControllerUiLangClassId): void {\n\t\tthis.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) +'
';\n\t}\n\n\tprivate _include_exclude_message_warning(text:ControllerUiLangClassId): void {\n\t\tthis.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) +'
';\n\t}\n\n\tprivate _include_exclude_timout_show(): void {\n\t\tthis.el_container_include_exlude.innerHTML = '';\n\t\t// this.el_container_include_exlude.appendChild(this.el_timout_include_exlude);\n\t}\n\n\tprivate _include_exclude_click_end(el_target:HTMLButtonElement, txt:ControllerUiLangClassId|null, status:ZunoSapiClassStatus): void {\n\t\tif (txt!= null)\n\t\t\tthis.log.errorFalledCode(txt, status);\n\t\tthis.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE, false);\n\t\tthis._include_exclude_timout_show();\n\t}\n\n\tprivate async _include_exclude_click_start_stop_question(): Promise {\n\t\tconst promise:Promise = new Promise((resolve) => {\n\t\t\tthis.el_container_include_exlude.innerHTML = '';\n\t\t\tconst el_span:HTMLSpanElement = document.createElement(\"span\");\n\t\t\tel_span.textContent = this.locale.getLocale(ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE);\n\t\t\tel_span.title = this.locale.getLocale(ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE);\n\t\t\tel_span.className = \"ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tconst el_button_continue:HTMLButtonElement = document.createElement(\"button\");\n\t\t\tel_button_continue.textContent = this.locale.getLocale(ControllerUiLangClassId.PROCESS_CONTINUE);\n\t\t\tel_button_continue.title = this.locale.getLocale(ControllerUiLangClassId.PROCESS_CONTINUE_TITLE);\n\t\t\tel_button_continue.type = \"button\";\n\t\t\tel_button_continue.className = \"ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tconst el_button_stop:HTMLButtonElement = document.createElement(\"button\");\n\t\t\tel_button_stop.textContent = this.locale.getLocale(ControllerUiLangClassId.PROCESS_STOP);\n\t\t\tel_button_stop.title = this.locale.getLocale(ControllerUiLangClassId.PROCESS_STOP_TITLE);\n\t\t\tel_button_stop.type = \"button\";\n\t\t\tel_button_stop.className = \"ZUnoRazberryModalContentSection_migration_action_button\";\n\t\t\tel_button_stop.addEventListener(\"click\", async () => { resolve(false)});\n\t\t\tel_button_continue.addEventListener(\"click\", async () => { resolve(true)});\n\t\t\tthis.el_container_include_exlude.appendChild(el_span);\n\t\t\tthis.el_container_include_exlude.appendChild(el_button_continue);\n\t\t\tthis.el_container_include_exlude.appendChild(el_button_stop);\n\t\t});\n\t\treturn (promise);\n\t}\n\n\tprivate async _include_exclude_click(event:Event): Promise {\n\t\tlet status:ZunoSapiClassStatus;\n\n\t\tif (this.is_busy() == true)\n\t\t\treturn ;\n\t\tconst el_target:HTMLButtonElement|null = this.event_get_element_button(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tthis.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE, true);\n\t\tconst excluding_question:boolean = await this._include_exclude_click_start_stop_question();\n\t\tif (excluding_question == false) {\n\t\t\tthis._include_exclude_click_end(el_target, null, ZunoSapiClassStatus.OK);\n\t\t\treturn ;\n\t\t}\n\t\tthis._include_exclude_progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT);\n\t\tstatus = await this.zuno.enableNif();\n\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\tthis._include_exclude_click_end(el_target, ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT, status);\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN);\n\t\tstatus = await this.zuno.enableEvent();\n\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\tthis._include_exclude_click_end(el_target, ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN, status);\n\t\t\treturn ;\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN);\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_START_LEARN);\n\t\tstatus = await this.zuno.enableLearn(this._include_exclude_get_storage());\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_START_LEARN);\n\t\tswitch (status) {\n\t\t\tcase ZunoSapiClassStatus.TIMEOUT:\n\t\t\t\tthis.log.info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT);\n\t\t\t\tthis._include_exclude_message_info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT);\n\t\t\t\tawait sleep(3000);\n\t\t\t\tbreak ;\n\t\t\tcase ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART:\n\t\t\t\tthis.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tthis._include_exclude_message_warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tawait sleep(3000);\n\t\t\t\tthis.re_begin_func(true);\n\t\t\t\treturn ;\n\t\t\t\tbreak ;\n\t\t\tdefault:\n\t\t\t\tthis.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tthis._include_exclude_message_warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART);\n\t\t\t\tawait sleep(3000);\n\t\t\t\tthis.re_begin_func(true);\n\t\t\t\treturn ;\n\t\t\t\tbreak ;\n\t\t\tcase ZunoSapiClassStatus.LEARN_EXCLUDE:\n\t\t\t\tthis.log.info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART);\n\t\t\t\tthis._include_exclude_message_info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART);\n\t\t\t\tawait sleep(3000);\n\t\t\t\tthis.re_begin_func(false);\n\t\t\t\treturn ;\n\t\t\t\tbreak ;\n\t\t\tcase ZunoSapiClassStatus.LEARN_INCLUDE:\n\t\t\t\tthis.log.info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART);\n\t\t\t\tthis._include_exclude_message_info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART);\n\t\t\t\tawait sleep(3000);\n\t\t\t\tthis.re_begin_func(false);\n\t\t\t\treturn ;\n\t\t\t\tbreak ;\n\t\t}\n\t\tthis._include_exclude_click_end(el_target, null, ZunoSapiClassStatus.OK);\n\t}\n\n\tprivate _include_exclude_init(): boolean {\n\t\tconst status:ZunoSapiClassStatus = this.zuno.isSupportIncludeExclude();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (false);\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE);\n\t\tel_button.type = \"button\";\n\t\tel_button.textContent = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON);\n\t\tel_button.addEventListener(\"click\", (event:Event) => {this._include_exclude_click(event);});\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE, ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE, this.el_container_include_exlude, el_button);\n\t\tthis._include_exclude_timout_show();\n\t\treturn (true);\n\t}\n\n\tprivate _controller_default_init(): boolean {\n\t\tconst status:ZunoSapiClassStatus = this.zuno.isSupportResetDefault();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (false);\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE);\n\t\tel_button.type = \"button\";\n\t\tel_button.textContent = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON);\n\t\tel_button.addEventListener(\"click\", (event:Event) => {this._controller_default_click(event);});\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE, \"\", el_button);\n\t\treturn (true);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\tlet display:boolean;\n\n\t\tdisplay = false;\n\t\tif (this._board_info() == true)\n\t\t\tdisplay = true;\n\t\tif (this._region_init() == true)\n\t\t\tdisplay = true;\n\t\tif (await this._power_init() == true)\n\t\t\tdisplay = true;\n\t\tif (this._include_exclude_init() == true)\n\t\t\tdisplay = true;\n\t\tif (this._controller_default_init() == true)\n\t\t\tdisplay = true;\n\t\treturn (display);\n\t}\n\n\tprivate async _end(): Promise {\n\t\tthis.el_container_include_exlude.innerHTML = \"\";\n\t}\n\n\tprivate _constructor_button(text:ControllerUiLangClassId, click:EventListener):HTMLButtonElement {\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.textContent = this.locale.getLocale(text);\n\t\tel_button.addEventListener(\"click\", click);\n\t\tel_button.type = \"button\";\n\t\treturn (el_button);\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, zuno:ZunoSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) {\n\t\tsuper(el_section, locale, zuno, log, ControllerUiLangClassId.BOARD_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.zuno = zuno;\n\t\tthis.re_begin_func = re_begin_func;\n\t\tthis.power_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON, () => {this._power_click();});\n\t\tthis.region_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON, () => {this._region_click();});\n\t\tconst el_input:HTMLInputElement = document.createElement(\"input\");\n\t\tel_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE);\n\t\tel_input.type = \"number\";\n\t\tel_input.min = this.INCLUDE_EXCLUDE_MIN.toString();\n\t\tel_input.max = this.INCLUDE_EXCLUDE_MAX.toString();\n\t\tel_input.step = \"1\";\n\t\tel_input.value = this._include_exclude_get_storage().toString();\n\t\tel_input.addEventListener(\"change\", (event:Event) => {this._include_exclude_change(event);});\n\t\tthis.el_timout_include_exlude.appendChild(el_input);\n\t\tthis.el_timout_include_exlude.appendChild(document.createElement(\"span\"));\n\t}\n}","import {ControllerUiLangClassId} from \"../../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../../lang/ui_lang\"\nimport {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo} from \"../../sapi/zuno_sapi\";\nimport {ControllerUiLogClass} from \"../../log/ui_log\"\nimport {CommonUiSectionClass} from \"../common\"\nimport {arrayToStringHex} from \"../../other/utilities\";\nimport {TABLE_NAME_LICENSE_YES, TABLE_NAME_LICENSE_NO} from \"../../ui_define\"\nimport {ControllerUiDefineClassReBeginFunc} from \"../../section/detection\"\n\nexport {SlaveUiSectionLicenseClass};\n\nclass SlaveUiSectionLicenseClass extends CommonUiSectionClass {\n\tprivate readonly zuno:ZunoSapiClass;\n\tprivate readonly re_begin_func:ControllerUiDefineClassReBeginFunc;\n\n\tprivate _license_init(): boolean {\n\t\tlet key:string, flag_status:string;\n\n\t\tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_LICENSE);\n\t\tconst board_info:ZunoSapiClassBoardInfo = this.zuno.getBoardInfo();\n\t\tif (board_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_LICENSE, board_info.status);\n\t\t\treturn (false);\n\t\t}\n\t\tif (board_info.license == undefined) {\n\t\t\tthis.log.errorUnsupport(ControllerUiLangClassId.MESSAGE_READ_LICENSE);\n\t\t\treturn (false);\n\t\t}\n\t\tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_LICENSE);\n\t\tconst uuid_str_hex:string = arrayToStringHex(board_info.chip_uuid);\n\t\tconst more_options_link:string = ''+ 'link' +'';\n\t\tthis.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS, ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE, more_options_link, \"\");\n\t\tfor (key in board_info.license.lic_flags) {\n\t\t\tif (board_info.license.lic_flags[key].active == true)\n\t\t\t\tflag_status = TABLE_NAME_LICENSE_YES;\n\t\t\telse\n\t\t\t\tflag_status = TABLE_NAME_LICENSE_NO;\n\t\t\tthis.create_tr_el(board_info.license.lic_flags[key].name + \":\", board_info.license.lic_flags[key].title, flag_status, \"\");\n\t\t}\n\t\treturn (true);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\tlet display:boolean;\n\n\t\tdisplay = false;\n\t\tif (this._license_init() == true)\n\t\t\tdisplay = true;\n\t\treturn (display);\n\t}\n\n\tprivate async _end(): Promise {\n\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, zuno:ZunoSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) {\n\t\tsuper(el_section, locale, zuno, log, ControllerUiLangClassId.LICENSE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.zuno = zuno;\n\t\tthis.re_begin_func = re_begin_func;\n\t}\n}","import {ControllerUiLangClassId} from \"../../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../../lang/ui_lang\"\nimport {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo} from \"../../sapi/zuno_sapi\";\nimport {ControllerUiLogClass} from \"../../log/ui_log\"\nimport {CommonUiSectionClass} from \"../common\"\nimport {UpdateUiSectionClass, PaketUiClassUpdateInfoPaket} from \"../update\"\nimport {ControllerUiDefineClassReBeginFunc} from \"../../section/detection\"\nimport {arrayToStringHex, versionNumberToString, versionNumberToStringSlave, sleep} from \"../../other/utilities\";\nimport {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from \"../../ui_define\"\nimport {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus, SapiClassDetect} from \"./../../sapi/sapi\";\n\nexport {SlaveUiSectionUpdateClass};\n\nclass SlaveUiSectionUpdateClass extends CommonUiSectionClass {\n\tprivate readonly zuno:ZunoSapiClass;\n\tprivate readonly update:UpdateUiSectionClass;\n\n\tpublic static getInfoUrlPaket(log:ControllerUiLogClass, zuno:ZunoSapiClass):PaketUiClassUpdateInfoPaket|undefined {\n\t\tlog.infoStart(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\tconst board_info:ZunoSapiClassBoardInfo = zuno.getBoardInfo();\n\t\tif (board_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tlog.errorFalledCode(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\treturn (undefined);\n\t\t}\n\t\tlog.infoDone(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\tconst paket:PaketUiClassUpdateInfoPaket =\n\t\t{\n\t\t\tapp:{\tversion:board_info.version, version_name:versionNumberToStringSlave(board_info.version), type:SapiClassDetectType.ZUNO,\n\t\t\t\t\tupdate:true, update_type:(zuno.isSupportUpdateBootloader() == ZunoSapiClassStatus.OK) ? true:false, data: []},\n\t\t\tboot:{\tversion:board_info.boot_version, version_name:versionNumberToString(board_info.boot_version), type:SapiClassDetectType.UNKNOWN,\n\t\t\t\t\tupdate:false, update_type:false, data: []},\n\t\t\turl:'vendorId=327&appVersionMajor=' + ((board_info.version >> 16) & 0xFFFF).toString() + '&appVersionMinor=' + (board_info.version & 0xFFFF).toString()\n\t\t\t\t+ \"&bootloaderVersion=\" + board_info.boot_version.toString() + '&org_family=' + board_info.chip.keys_hash.toString() + '&fw_family=' + SapiClassDetectType.ZUNO.toString()\n\t\t\t\t+ '&chip_family=' + board_info.chip.chip_family.toString() + '&chip_id=' + board_info.chip.chip_type.toString() + '&zway=' + NAME_APP_VERSION_FULL + '&uuid='\n\t\t\t\t+ arrayToStringHex(board_info.chip_uuid)\n\t\t};\n\t\treturn (paket);\n\t}\n\n\tprivate _update_init(): boolean {\n\t\tconst paket:PaketUiClassUpdateInfoPaket|undefined = SlaveUiSectionUpdateClass.getInfoUrlPaket(this.log, this.zuno);\n\t\tif (paket == undefined)\n\t\t\treturn (false);\n\t\tthis.update.info_download_xhr(paket);\n\t\treturn (true);\n\t}\n\n\tprivate async _begin(): Promise {\n\t\treturn (this._update_init());\n\t}\n\n\tprivate async _end(): Promise {\n\t\tthis.update.end();\n\t}\n\n\tprivate async _update_firmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\t// if (this.zuno.isMustResetDefault() == ZunoSapiClassStatus.OK && this.zuno.isSupportResetDefault() == ZunoSapiClassStatus.OK) {\n\t\t// \tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_DEFAULT);\n\t\t// \tconst status:ZunoSapiClassStatus = await this.zuno.setDefault();\n\t\t// \tif (status != ZunoSapiClassStatus.OK) {\n\t\t// \t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status);\n\t\t// \t\treturn ((status as unknown) as SapiClassStatus);\n\t\t// \t}\n\t\t// \tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_DEFAULT);\n\t\t// \tawait sleep(1000);\n\t\t// \tthis.log.infoStart(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\t// \tconst detect_dict:SapiClassDetect = await this.zuno.detect([115200], null);\n\t\t// \tif (detect_dict.status != SapiClassStatus.OK) {\n\t\t// \t\tthis.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status);\n\t\t// \t\treturn ((detect_dict.status as unknown) as SapiClassStatus);\n\t\t// \t}\n\t\t// \tthis.log.infoDone(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\t// \tawait this.zuno.connect();\n\t\t// }\n\t\tconst status:ZunoSapiClassStatus = await this.zuno.updateFirmware(data, process, target_type);\n\t\treturn ((status as unknown) as SapiClassStatus);\n\t}\n\n\tconstructor(el_section:HTMLElement, locale:ControllerUiLangClass, zuno:ZunoSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) {\n\t\tsuper(el_section, locale, zuno, log, ControllerUiLangClassId.UPDATE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());});\n\t\tthis.zuno = zuno;\n\t\tthis.update = new UpdateUiSectionClass(log, locale, this, re_begin_func,\n\t\t\tasync (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware(data, process, target_type));},\n\t\t\tnull\n\t\t);\n\t}\n}","import {ControllerUiLangClassId} from \"../lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"../lang/ui_lang\"\nimport {ControllerUiLogClass} from \"../log/ui_log\"\nimport {CommonUiSectionHtmlClass} from \"./common\"\nimport {ControllerUiDefineClass} from \"../ui_define\"\nimport {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus} from \"./../sapi/sapi\";\nimport {CommonUiSectionClass} from \"./common\"\nimport {ControllerUiDefineClassReBeginFunc} from \"../section/detection\"\nimport {versionNumberToString, versionNumberToStringSlave} from \"../other/utilities\";\n\nexport {\n\tUpdateUiSectionClass, UpdateUiSectionClassJsonInfo, UpdateUiSectionClassButton, UpdateUiSectionClassFirmware,\n\tPaketUiClassUpdateInfo, PaketUiClassUpdateInfoData, PaketUiClassUpdateInfoPaket, UpdateUiSectionClassPaket\n};\n\ntype UpdateUiSectionClassFirmware = (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType) => Promise;\n\ntype UpdateUiSectionClassButtonClick = () => void;\n\n\ninterface PaketUiClassUpdateInfoData\n{\n\tversion:number;\n\tversion_name:string;\n\turl:string;\n\ttype:SapiClassDetectType;\n\tbeta:boolean;\n}\n\ninterface PaketUiClassUpdateInfo\n{\n\tupdate:boolean;\n\tupdate_type:boolean;\n\tversion:number;\n\tversion_name:string;\n\ttype:SapiClassDetectType;\n\tdata:Array;\n}\n\ninterface PaketUiClassUpdateInfoPaket\n{\n\turl:string;\n\tapp:PaketUiClassUpdateInfo;\n\tboot:PaketUiClassUpdateInfo;\n}\n\ninterface UpdateUiSectionClassPaket\n{\n\txhr:XMLHttpRequest;\n\ttimer_id?:number;\n}\n\ninterface UpdateUiSectionClassJson\n{\n\ttargetBootloaderVersion:string;\n\ttargetAppVersionMajor:string;\n\ttargetAppVersionMinor:string;\n\tfileURL:string;\n\tenabled:string;\n\ttype:string;\n\ttarget_fw_family:string;\n}\n\ninterface UpdateUiSectionClassJsonInfo\n{\n\tdata:Array\n}\n\ninterface UpdateUiSectionClassButton\n{\n\turl_current:string;\n\turl_new:string;\n\tel_select:HTMLSelectElement;\n\tel_span:HTMLSpanElement;\n\tel_button:HTMLButtonElement;\n\tinfo?:PaketUiClassUpdateInfo;\n}\n\n\nclass UpdateUiSectionClass extends CommonUiSectionHtmlClass {\n\tprivate static readonly URL_UPDATE:string\t\t\t\t\t\t= \"https://service.z-wave.me/expertui/uzb/\";\n\tprivate static readonly URL_UPDATE_LIST:string\t\t\t\t\t= UpdateUiSectionClass.URL_UPDATE + \"?\";\n\n\tprivate static readonly JSON_UPDATE_DISABLED:string\t\t\t\t= \"disabled\";\n\tprivate static readonly JSON_UPDATE_TYPE_FIRMWARE:string\t\t= \"firmware\";\n\tprivate static readonly JSON_UPDATE_TYPE_BOOTLOADER:string\t\t= \"bootloader\";\n\n\tprivate readonly SELECTOR_BETA:string\t\t\t\t\t\t\t= 'data-beta';\n\tprivate readonly SELECTOR_DEFAULT:string\t\t\t\t\t\t= 'data-default';\n\n\n\tprivate static readonly info_xhr_timeout:number\t\t\t\t\t= 5000;\n\tprivate static readonly info_xhr_timer_timeout:number\t\t\t= 3000;\n\tprivate static readonly firmware_xhr_timout:number\t\t\t\t= 10000;\n\tprivate static readonly firmware_xhr_timer_timout:number\t\t= 3000;\n\tprivate readonly bus_timout:number\t\t\t\t\t\t\t\t= 3000;\n\n\tprivate readonly download_process:UpdateUiSectionClassPaket\t\t= {xhr:new XMLHttpRequest()};\n\n\tprivate readonly log:ControllerUiLogClass;\n\tprivate readonly commom_ui:CommonUiSectionClass;\n\tprivate readonly re_begin_func:ControllerUiDefineClassReBeginFunc;\n\n\treadonly firmware:UpdateUiSectionClassButton;\n\treadonly bootloader:UpdateUiSectionClassButton;\n\n\tprivate _update_change(event:Event, title:ControllerUiLangClassId, info:UpdateUiSectionClassButton): void {\n\t\tconst el_target:HTMLSelectElement|null = this.event_get_element_select(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tinfo.url_new = el_target.value;\n\t\tthis.common_button_atrr(info.el_button, title, (info.url_new == info.url_current) ? true:false);\n\t}\n\n\tprivate _progress(info:UpdateUiSectionClassButton, text:ControllerUiLangClassId): void {\n\t\tinfo.el_span.innerHTML = '
' + this.locale.getLocale(text) +'
';\n\t}\n\n\tprivate _end_struct(info:UpdateUiSectionClassButton) {\n\t\tinfo.url_current = \"\";\n\t\tinfo.url_new = \"\";\n\t\tinfo.el_button.disabled = true;\n\t\tthis._progress(info, ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO);\n\t}\n\n\tpublic static async updateProcess(txt:ControllerUiLangClassId, el:HTMLElement, data:Uint8Array, target_type:SapiClassDetectType, update_firmware:UpdateUiSectionClassFirmware, locale:ControllerUiLangClass, log:ControllerUiLogClass): Promise {\n\t\tlog.infoStart(txt);\n\t\tconst el_progress:HTMLElement = document.createElement('progress');\n\t\tconst el_span:HTMLElement = document.createElement('span');\n\t\tel_progress.setAttribute('max', '100');\n\t\tel.innerHTML = '';\n\t\tel.appendChild(el_progress);\n\t\tel.appendChild(el_span);\n\t\tel_progress.setAttribute('value', \"00\");\n\t\tconst status:SapiClassStatus = await update_firmware(data, (percentage:number) => {\n\t\t\t\tel_progress.setAttribute('value', percentage.toFixed().toString());\n\t\t\t\tel_span.textContent = ' ' + percentage.toFixed(0x2).padStart(5, '0') + '%';\n\t\t\t\tif (percentage >= 100.00) {\n\t\t\t\t\tel.innerHTML = '
' + locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE) +'
';\n\t\t\t\t}\n\t\t\t}, target_type\n\t\t);\n\t\tel.innerHTML = '';\n\t\tif (status != SapiClassStatus.OK) {\n\t\t\tlog.errorFalledCode(txt, status);\n\t\t\treturn (false);\n\t\t}\n\t\tlog.infoDone(txt);\n\t\treturn (true);\n\t}\n\n\tpublic static async downloadFile(file_process:UpdateUiSectionClassPaket, url:string, log:ControllerUiLogClass): Promise {\n\t\tconst promise:Promise = new Promise((resolve) => {\n\t\t\tlog.infoStart(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE);\n\t\t\turl = UpdateUiSectionClass.URL_UPDATE + url;\n\t\t\tconst fun_xhr_timer:TimerHandler = () => {\n\t\t\t\tfile_process.timer_id = undefined;\n\t\t\t\tfile_process.xhr.open(\"POST\", url, true);\n\t\t\t\tfile_process.xhr.responseType = \"arraybuffer\";\n\t\t\t\tfile_process.xhr.timeout = UpdateUiSectionClass.firmware_xhr_timout;\n\t\t\t\tfile_process.xhr.ontimeout = () => {\n\t\t\t\t\tlog.errorXhrTimeout(url);\n\t\t\t\t\tlog.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE);\n\t\t\t\t\tfile_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.firmware_xhr_timer_timout);\n\t\t\t\t};\n\t\t\t\tfile_process.xhr.onerror = () => {\n\t\t\t\t\tlog.errorXhrError(url);\n\t\t\t\t\tlog.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE);\n\t\t\t\t\tfile_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.firmware_xhr_timer_timout);\n\t\t\t\t};\n\t\t\t\tfile_process.xhr.onload = () => {\n\t\t\t\t\tlog.infoDone(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE);\n\t\t\t\t\tconst gbl:Uint8Array = new Uint8Array(file_process.xhr.response);\n\t\t\t\t\tresolve(gbl);\n\t\t\t\t};\n\t\t\t\tfile_process.xhr.send();\n\t\t\t};\n\t\t\tfile_process.timer_id = window.setTimeout(fun_xhr_timer, 0x0);\n\t\t});\n\t\treturn (promise);\n\t}\n\n\tprivate async _download_xhr_start(paket:UpdateUiSectionClassButton, update_firmware:UpdateUiSectionClassFirmware|null, txt:ControllerUiLangClassId,): Promise {\n\t\tlet i:number, type:SapiClassDetectType|undefined;\n\n\t\tif (update_firmware == null)\n\t\t\treturn ;\n\t\tconst info:PaketUiClassUpdateInfo|undefined = paket.info;\n\t\tif (info == undefined) {\n\t\t\tthis.log.error(ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT);\n\t\t\treturn ;\n\t\t}\n\t\ti = 0x0;\n\t\twhile (i < info.data.length) {\n\t\t\tif (paket.url_new == info.data[i].url) {\n\t\t\t\ttype = info.data[i].type;\n\t\t\t\tbreak ;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\tif (type == undefined) {\n\t\t\tthis.log.error(ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE);\n\t\t\treturn ;\n\t\t}\n\t\tthis._progress(paket, ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE);\n\t\tthis.common_button_atrr(paket.el_button, '', true);\n\t\tconst gbl:Uint8Array = await UpdateUiSectionClass.downloadFile(this.download_process, paket.url_new, this.log);\n\t\tconst fun_bus_timer:TimerHandler = async () => {\n\t\t\tthis.download_process.timer_id = undefined;\n\t\t\tif (this.commom_ui.is_busy() == true) {\n\t\t\t\tthis.download_process.timer_id = window.setTimeout(fun_bus_timer, this.bus_timout);\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif (type != undefined)\n\t\t\t\tawait UpdateUiSectionClass.updateProcess(txt, paket.el_span, gbl, type, update_firmware, this.locale, this.log);\n\t\t\tthis.re_begin_func(true);\n\t\t\treturn ;\n\n\t\t};\n\t\tthis._progress(paket, ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL);\n\t\tthis.download_process.timer_id = window.setTimeout(fun_bus_timer, 0x0);\n\t}\n\n\tprivate _constructor_struct(button_text:ControllerUiLangClassId, click:UpdateUiSectionClassButtonClick, change:EventListener):UpdateUiSectionClassButton {\n\t\tconst el_span:HTMLSpanElement = document.createElement(\"span\");\n\t\tconst el_button:HTMLButtonElement = document.createElement(\"button\");\n\t\tel_button.textContent = this.locale.getLocale(button_text);\n\t\tel_button.addEventListener(\"click\", click);\n\t\tel_button.type = \"button\";\n\t\tconst el_select:HTMLSelectElement = document.createElement(\"select\");\n\t\tel_select.addEventListener(\"change\", change);\n\t\tconst info:UpdateUiSectionClassButton = {url_current:'', url_new:'', el_span:el_span, el_button:el_button, el_select:el_select};\n\t\treturn (info);\n\t}\n\n\tprivate _init_select(paket:UpdateUiSectionClassButton, title:ControllerUiLangClassId): void {\n\t\tlet i:number, el_option_str:string;\n\n\t\tconst info:PaketUiClassUpdateInfo|undefined = paket.info;\n\t\tif (info == undefined) {\n\t\t\tthis.log.error(ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT);\n\t\t\treturn ;\n\t\t}\n\t\tpaket.el_span.innerHTML = \"\";\n\t\tpaket.el_span.appendChild(paket.el_select);\n\t\ti = 0x0;\n\t\tel_option_str = '';\n\t\twhile (i < info.data.length) {\n\t\t\tel_option_str = el_option_str + '';\n\t\t\ti++;\n\t\t}\n\t\tpaket.el_select.innerHTML = el_option_str;\n\t\tthis.common_button_atrr(paket.el_button, '', true);\n\t\tif (info.data.length != 0x0) {\n\t\t\tpaket.el_select.title = this.locale.getLocale(title);\n\t\t\treturn ;\n\t\t}\n\t\tpaket.el_select.innerHTML = el_option_str;\n\t\tpaket.el_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE);\n\t\tpaket.el_select.disabled = true;\n\t}\n\n\tprivate _update_beta_change_all_select(beta:boolean, el_select:HTMLSelectElement, title:ControllerUiLangClassId): void {\n\t\tlet number:number;\n\n\t\tconst list_option:NodeListOf = el_select.querySelectorAll('option');\n\t\tnumber = 0x0;\n\t\tlist_option.forEach((item:HTMLElement) => {\n\t\t\tif (item.getAttribute('selected') != null) {\n\t\t\t\titem.removeAttribute(\"selected\");\n\t\t\t}\n\t\t\tif (beta == false && item.getAttribute(this.SELECTOR_BETA) != null)\n\t\t\t\treturn ;\n\t\t\tif (item.getAttribute(this.SELECTOR_DEFAULT) != null) {\n\t\t\t\titem.setAttribute(\"selected\", \"\");\n\t\t\t}\n\t\t\tnumber++;\n\t\t});\n\t\tif (beta == false)\n\t\t\tel_select.setAttribute(this.SELECTOR_BETA, \"\");\n\t\telse\n\t\t\tel_select.removeAttribute(this.SELECTOR_BETA);\n\t\tif (number > 0x1) {\n\t\t\tel_select.title = this.locale.getLocale(title);\n\t\t\tel_select.removeAttribute(\"disabled\");\n\t\t\treturn ;\n\t\t}\n\t\tel_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE);\n\t\tel_select.setAttribute(\"disabled\", \"\");\n\t}\n\n\tprivate _update_beta_change_all(): void {\n\t\tlet beta:boolean;\n\n\t\tconst update_beta:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_UPDATE_BETA);\n\t\tif (update_beta === ControllerUiDefineClass.STORAGE_VALUE_TRUE)\n\t\t\tbeta = true;\n\t\telse\n\t\t\tbeta = false;\n\t\tthis._update_beta_change_all_select(beta, this.firmware.el_select, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE);\n\t\tthis.firmware.url_new = \"\";\n\t\tthis.common_button_atrr(this.firmware.el_button, '', true);\n\t\tthis._update_beta_change_all_select(beta, this.bootloader.el_select, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE);\n\t\tthis.bootloader.url_new = \"\";\n\t\tthis.common_button_atrr(this.bootloader.el_button, '', true);\n\t}\n\n\tprivate _update_beta_change(event:Event): void {\n\t\tconst el_target:HTMLInputElement|null = this.event_get_element_input(event);\n\t\tif (el_target == null)\n\t\t\treturn ;\n\t\tlocalStorage.setItem(ControllerUiDefineClass.KEY_UPDATE_BETA, ((el_target.checked == true) ? ControllerUiDefineClass.STORAGE_VALUE_TRUE: ControllerUiDefineClass.STORAGE_VALUE_FALSE));\n\t\tthis._update_beta_change_all();\n\t}\n\n\tpublic end(): void {\n\t\tthis._end_struct(this.firmware);\n\t\tthis._end_struct(this.bootloader);\n\t\tthis.download_process.xhr.abort();\n\t\tif (this.download_process.timer_id != undefined) {\n\t\t\twindow.clearTimeout(this.download_process.timer_id);\n\t\t\tthis.download_process.timer_id = undefined;\n\t\t}\n\t}\n\n\tpublic init_select_firmware(): void {\n\t\tthis._init_select(this.firmware, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE);\n\t}\n\n\tpublic init_select_bootloader(): void {\n\t\tthis._init_select(this.bootloader, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE);\n\t}\n\n\tprivate static _downloadInfo_process(response: UpdateUiSectionClassJsonInfo, app:PaketUiClassUpdateInfo, boot:PaketUiClassUpdateInfo, locale:ControllerUiLangClass): void {\n\t\tlet i:number, version:number, version_name:string, temp_data:PaketUiClassUpdateInfoData;\n\n\t\ti = 0x0;\n\t\tconst add_data:Array = [];\n\t\twhile (i < response.data.length) {\n\t\t\tconst target_fw_family:number = Number(response.data[i].target_fw_family);\n\t\t\tswitch (response.data[i].type) {\n\t\t\t\tcase UpdateUiSectionClass.JSON_UPDATE_TYPE_FIRMWARE:\n\t\t\t\t\tif (app.update == false) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue ;\n\t\t\t\t\t}\n\t\t\t\t\tif (app.update_type == false && app.type != target_fw_family) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue ;\n\t\t\t\t\t}\n\t\t\t\t\tswitch (target_fw_family) {\n\t\t\t\t\t\tcase SapiClassDetectType.ZUNO:\n\t\t\t\t\t\t\tversion = (Number(response.data[i].targetAppVersionMajor) << 0x10) | Number(response.data[i].targetAppVersionMinor);\n\t\t\t\t\t\t\tif (app.type == SapiClassDetectType.ZUNO && version <= app.version) {\n\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\tcontinue ;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tversion_name = versionNumberToStringSlave(version) + \" - \" + locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE);\n\t\t\t\t\t\t\ttemp_data = {version:version, version_name:version_name, url:response.data[i].fileURL, type:SapiClassDetectType.ZUNO, beta:((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true:false))};\n\t\t\t\t\t\t\tif (app.type == SapiClassDetectType.ZUNO)\n\t\t\t\t\t\t\t\tapp.data.push(temp_data);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tadd_data.push(temp_data);\n\t\t\t\t\t\t\tbreak ;\n\t\t\t\t\t\tcase SapiClassDetectType.RAZBERRY:\n\t\t\t\t\t\t\tversion = (Number(response.data[i].targetAppVersionMajor) << 0x8) | Number(response.data[i].targetAppVersionMinor);\n\t\t\t\t\t\t\tif (app.type == SapiClassDetectType.RAZBERRY && version <= app.version) {\n\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\tcontinue ;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tversion_name = versionNumberToString(version) + \" - \" + locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER);\n\t\t\t\t\t\t\ttemp_data = {version:version, version_name:version_name, url:response.data[i].fileURL, type:SapiClassDetectType.RAZBERRY, beta:((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true:false))};\n\t\t\t\t\t\t\tif (app.type == SapiClassDetectType.RAZBERRY)\n\t\t\t\t\t\t\t\tapp.data.push(temp_data);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tadd_data.push(temp_data);\n\t\t\t\t\t\t\tbreak ;\n\t\t\t\t\t}\n\t\t\t\t\tbreak ;\n\t\t\t\tcase UpdateUiSectionClass.JSON_UPDATE_TYPE_BOOTLOADER:\n\t\t\t\t\tif (boot.update == false) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue ;\n\t\t\t\t\t}\n\t\t\t\t\tversion = Number(response.data[i].targetBootloaderVersion);\n\t\t\t\t\tif (version <= boot.version) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue ;\n\t\t\t\t\t}\n\t\t\t\t\tversion_name = versionNumberToString(version);\n\t\t\t\t\ttemp_data = {version:version, version_name:version_name, url:response.data[i].fileURL, type:SapiClassDetectType.UNKNOWN, beta:((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true:false))};\n\t\t\t\t\tboot.data.push(temp_data);\n\t\t\t\t\tbreak ;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\tboot.data.sort(function (a:PaketUiClassUpdateInfoData, b:PaketUiClassUpdateInfoData):number {\n\t\t\treturn (a.version - b.version);\n\t\t});\n\t\tapp.data.sort(function (a:PaketUiClassUpdateInfoData, b:PaketUiClassUpdateInfoData):number {\n\t\t\treturn (a.version - b.version);\n\t\t});\n\t\tadd_data.sort(function (a:PaketUiClassUpdateInfoData, b:PaketUiClassUpdateInfoData):number {\n\t\t\treturn (a.version - b.version);\n\t\t});\n\t\ti = 0x0;\n\t\twhile ( i < add_data.length) {\n\t\t\tapp.data.push(add_data[i]);\n\t\t\ti++;\n\t\t}\n\t}\n\n\tpublic static async downloadInfo(info_process:UpdateUiSectionClassPaket, in_paket:PaketUiClassUpdateInfoPaket, log:ControllerUiLogClass, locale:ControllerUiLangClass): Promise {\n\t\tconst promise:Promise = new Promise((resolve) => {\n\t\t\tconst url:string = UpdateUiSectionClass.URL_UPDATE_LIST + in_paket.url + '&token=internal';//'&token=internal' '&token=all';\n\t\t\tconst fun_xhr_timer:TimerHandler = () => {\n\t\t\t\tinfo_process.timer_id = undefined;\n\t\t\t\tlog.infoStart(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO);\n\t\t\t\tinfo_process.xhr.open(\"POST\", url, true);\n\t\t\t\tinfo_process.xhr.responseType = 'json';\n\t\t\t\tinfo_process.xhr.timeout = UpdateUiSectionClass.info_xhr_timeout;\n\t\t\t\tinfo_process.xhr.ontimeout = () => {\n\t\t\t\t\tlog.errorXhrTimeout(url);\n\t\t\t\t\tlog.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO);\n\t\t\t\t\tinfo_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout);\n\t\t\t\t};\n\t\t\t\tinfo_process.xhr.onerror = () => {\n\t\t\t\t\tlog.errorXhrError(url);\n\t\t\t\t\tlog.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO);\n\t\t\t\t\tinfo_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout);\n\t\t\t\t};\n\t\t\t\tinfo_process.xhr.onload = () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tUpdateUiSectionClass._downloadInfo_process(info_process.xhr.response, in_paket.app, in_paket.boot, locale);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlog.errorXhrInvalidData(url);\n\t\t\t\t\t\tlog.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO);\n\t\t\t\t\t\tinfo_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout);\n\t\t\t\t\t\treturn ;\n\t\t\t\t\t}\n\t\t\t\t\tlog.infoDone(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO);\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\t\t\t\tinfo_process.xhr.send();\n\t\t\t};\n\t\t\tinfo_process.timer_id = window.setTimeout(fun_xhr_timer, 0x0);\n\t\t});\n\t\treturn (promise);\n\t}\n\n\tpublic async info_download_xhr(in_paket:PaketUiClassUpdateInfoPaket): Promise {\n\t\tthis.firmware.info = in_paket.app;\n\t\tthis.bootloader.info = in_paket.boot;\n\t\tconst update_beta:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_UPDATE_BETA);\n\t\tconst el_input:HTMLInputElement = document.createElement(\"input\");\n\t\tel_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE);\n\t\tel_input.type = \"checkbox\";\n\t\tif (update_beta === ControllerUiDefineClass.STORAGE_VALUE_TRUE)\n\t\t\tel_input.checked = true;\n\t\tel_input.addEventListener(\"change\", (event:Event) => {this._update_beta_change(event);});\n\t\tthis.commom_ui.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA, ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE, el_input, \"\");\n\t\tthis.commom_ui.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE, this.firmware.el_span, this.firmware.el_button);\n\t\tthis.commom_ui.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE, this.bootloader.el_span, this.bootloader.el_button);\n\t\tawait UpdateUiSectionClass.downloadInfo(this.download_process, in_paket, this.log, this.locale);\n\t\tthis.init_select_firmware();\n\t\tthis.init_select_bootloader();\n\t\tthis._update_beta_change_all();\n\t}\n\n\tconstructor(log:ControllerUiLogClass, locale:ControllerUiLangClass, commom_ui:CommonUiSectionClass, re_begin_func:ControllerUiDefineClassReBeginFunc,\n\t\t\t\t\tupdate_firmware:UpdateUiSectionClassFirmware, update_bootloader:UpdateUiSectionClassFirmware|null\n\t) {\n\t\tsuper(locale);\n\t\tthis.log = log;\n\t\tthis.commom_ui = commom_ui;\n\t\tthis.re_begin_func = re_begin_func;\n\t\tthis.firmware = this._constructor_struct(ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON, () => {this._download_xhr_start(this.firmware, update_firmware, ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE);},\n\t\t\t(event:Event) => {this._update_change(event, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE, this.firmware);});\n\t\tthis.bootloader = this._constructor_struct(ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON, () => {this._download_xhr_start(this.bootloader, update_bootloader, ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER);},\n\t\t\t(event:Event) =>{ this._update_change(event, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE, this.bootloader);});\n\t}\n}\n","import {WEB_TOOLS_VERSION} from \"./other/define\"\n\nexport {ControllerUiDefineClass, TABLE_NAME_LICENSE_YES, TABLE_NAME_LICENSE_NO, NAME_APP_VERSION_FULL};\n\nconst TABLE_NAME_LICENSE_YES:string = '';\nconst TABLE_NAME_LICENSE_NO:string = '';\n\nenum ControllerUiDefineClass\n{\n\tNAME_APP = \"SerialAPIWebTools\",\n\tKEY_INCLUDE_EXCLUDE_TIMEOUT = NAME_APP + '_info_include_exlude_timout',\n\tKEY_BAUDRATE = ControllerUiDefineClass.NAME_APP + '_baudrate_cache',\n\tKEY_DETECTION_SYNC_MANUAL = ControllerUiDefineClass.NAME_APP + '_detection_sync_manual',\n\tKEY_UPDATE_BETA = ControllerUiDefineClass.NAME_APP + '_update_beta',\n\tSTORAGE_VALUE_TRUE = 'true',\n\tSTORAGE_VALUE_FALSE = 'false',\n}\n\nconst NAME_APP_VERSION_FULL:string = ControllerUiDefineClass.NAME_APP + \" \" + WEB_TOOLS_VERSION;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function get() {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function get() {\n return _parse.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function get() {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function get() {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function get() {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function get() {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function get() {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function get() {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function get() {\n return _version.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (let i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n const output = [];\n const length32 = input.length * 32;\n const hexTab = '0123456789abcdef';\n\n for (let i = 0; i < length32; i += 8) {\n const x = input[i >> 5] >>> i % 32 & 0xff;\n const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n const length8 = input.length * 8;\n const output = new Uint32Array(getOutputLength(length8));\n\n for (let i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nconst randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nvar _default = {\n randomUUID\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\n\nfunction rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.unsafeStringify = unsafeStringify;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nfunction unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = require(\"./stringify.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.unsafeStringify)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.URL = exports.DNS = void 0;\nexports.default = v35;\n\nvar _stringify = require(\"./stringify.js\");\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.unsafeStringify)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _native = _interopRequireDefault(require(\"./native.js\"));\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = require(\"./stringify.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n if (_native.default.randomUUID && !buf && !options) {\n return _native.default.randomUUID();\n }\n\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.unsafeStringify)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.slice(14, 15), 16);\n}\n\nvar _default = version;\nexports.default = _default;","/**\n * @fileoverview\n * - Using the 'QRCode for Javascript library'\n * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.\n * - this library has no dependencies.\n * \n * @author davidshimjs\n * @see http://www.d-project.com/\n * @see http://jeromeetienne.github.com/jquery-qrcode/\n */\n\nexport var QRCode;\n\n(function () {\n\t//---------------------------------------------------------------------\n\t// QRCode for JavaScript\n\t//\n\t// Copyright (c) 2009 Kazuhiko Arase\n\t//\n\t// URL: http://www.d-project.com/\n\t//\n\t// Licensed under the MIT license:\n\t// http://www.opensource.org/licenses/mit-license.php\n\t//\n\t// The word \"QR Code\" is registered trademark of \n\t// DENSO WAVE INCORPORATED\n\t// http://www.denso-wave.com/qrcode/faqpatent-e.html\n\t//\n\t//---------------------------------------------------------------------\n\tfunction QR8bitByte(data) {\n\t\tthis.mode = QRMode.MODE_8BIT_BYTE;\n\t\tthis.data = data;\n\t\tthis.parsedData = [];\n\n\t\t// Added to support UTF-8 Characters\n\t\tfor (var i = 0, l = this.data.length; i < l; i++) {\n\t\t\tvar byteArray = [];\n\t\t\tvar code = this.data.charCodeAt(i);\n\n\t\t\tif (code > 0x10000) {\n\t\t\t\tbyteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);\n\t\t\t\tbyteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);\n\t\t\t\tbyteArray[3] = 0x80 | (code & 0x3F);\n\t\t\t} else if (code > 0x800) {\n\t\t\t\tbyteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);\n\t\t\t\tbyteArray[2] = 0x80 | (code & 0x3F);\n\t\t\t} else if (code > 0x80) {\n\t\t\t\tbyteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);\n\t\t\t\tbyteArray[1] = 0x80 | (code & 0x3F);\n\t\t\t} else {\n\t\t\t\tbyteArray[0] = code;\n\t\t\t}\n\n\t\t\tthis.parsedData.push(byteArray);\n\t\t}\n\n\t\tthis.parsedData = Array.prototype.concat.apply([], this.parsedData);\n\n\t\tif (this.parsedData.length != this.data.length) {\n\t\t\tthis.parsedData.unshift(191);\n\t\t\tthis.parsedData.unshift(187);\n\t\t\tthis.parsedData.unshift(239);\n\t\t}\n\t}\n\n\tQR8bitByte.prototype = {\n\t\tgetLength: function (buffer) {\n\t\t\treturn this.parsedData.length;\n\t\t},\n\t\twrite: function (buffer) {\n\t\t\tfor (var i = 0, l = this.parsedData.length; i < l; i++) {\n\t\t\t\tbuffer.put(this.parsedData[i], 8);\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction QRCodeModel(typeNumber, errorCorrectLevel) {\n\t\tthis.typeNumber = typeNumber;\n\t\tthis.errorCorrectLevel = errorCorrectLevel;\n\t\tthis.modules = null;\n\t\tthis.moduleCount = 0;\n\t\tthis.dataCache = null;\n\t\tthis.dataList = [];\n\t}\n\n\tQRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+\",\"+col);}\n\treturn this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);}\n\tif(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}\n\tthis.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}\n\treturn pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}\n\tfor(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}\n\tfor(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}\n\tthis.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);}\n\tvar mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}\n\tthis.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}\n\trow+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error(\"code length overflow. (\"\n\t+buffer.getLengthInBits()\n\t+\">\"\n\t+totalDataCount*8\n\t+\")\");}\n\tif(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}\n\twhile(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}\n\twhile(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}\n\tbuffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}\n\tbuffer.put(QRCodeModel.PAD1,8);}\n\treturn QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}}\n\tvar totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}\n\treturn((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}\n\treturn(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}\n\treturn digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error(\"bad maskPattern:\"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}}\n\tfor(var row=0;row=256){n-=255;}\n\treturn QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}\n\tif(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}\n\tthis.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];\n\t\n\tfunction _isSupportCanvas() {\n\t\treturn typeof CanvasRenderingContext2D != \"undefined\";\n\t}\n\t\n\t// android 2.x doesn't support Data-URI spec\n\tfunction _getAndroid() {\n\t\tvar android = false;\n\t\tvar sAgent = navigator.userAgent;\n\t\t\n\t\tif (/android/i.test(sAgent)) { // android\n\t\t\tandroid = true;\n\t\t\tvar aMat = sAgent.toString().match(/android ([0-9]\\.[0-9])/i);\n\t\t\t\n\t\t\tif (aMat && aMat[1]) {\n\t\t\t\tandroid = parseFloat(aMat[1]);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn android;\n\t}\n\t\n\tvar svgDrawer = (function() {\n\n\t\tvar Drawing = function (el, htOption) {\n\t\t\tthis._el = el;\n\t\t\tthis._htOption = htOption;\n\t\t};\n\n\t\tDrawing.prototype.draw = function (oQRCode) {\n\t\t\tvar _htOption = this._htOption;\n\t\t\tvar _el = this._el;\n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\n\n\t\t\tthis.clear();\n\n\t\t\tfunction makeSVG(tag, attrs) {\n\t\t\t\tvar el = document.createElementNS('http://www.w3.org/2000/svg', tag);\n\t\t\t\tfor (var k in attrs)\n\t\t\t\t\tif (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tvar svg = makeSVG(\"svg\" , {'viewBox': '0 0 ' + String(nCount) + \" \" + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});\n\t\t\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\t\t\t_el.appendChild(svg);\n\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorLight, \"width\": \"100%\", \"height\": \"100%\"}));\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorDark, \"width\": \"1\", \"height\": \"1\", \"id\": \"template\"}));\n\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\tif (oQRCode.isDark(row, col)) {\n\t\t\t\t\t\tvar child = makeSVG(\"use\", {\"x\": String(row), \"y\": String(col)});\n\t\t\t\t\t\tchild.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", \"#template\")\n\t\t\t\t\t\tsvg.appendChild(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tDrawing.prototype.clear = function () {\n\t\t\twhile (this._el.hasChildNodes())\n\t\t\t\tthis._el.removeChild(this._el.lastChild);\n\t\t};\n\t\treturn Drawing;\n\t})();\n\n\tvar useSVG = document.documentElement.tagName.toLowerCase() === \"svg\";\n\n\t// Drawing in DOM by using Table tag\n\tvar Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {\n\t\tvar Drawing = function (el, htOption) {\n\t\t\tthis._el = el;\n\t\t\tthis._htOption = htOption;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Draw the QRCode\n\t\t * \n\t\t * @param {QRCode} oQRCode\n\t\t */\n\t\tDrawing.prototype.draw = function (oQRCode) {\n var _htOption = this._htOption;\n var _el = this._el;\n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\n\t\t\tvar aHTML = [''];\n\t\t\t\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\taHTML.push('');\n\t\t\t\t\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\taHTML.push('');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\taHTML.push('');\n\t\t\t}\n\t\t\t\n\t\t\taHTML.push('
');\n\t\t\t_el.innerHTML = aHTML.join('');\n\t\t\t\n\t\t\t// Fix the margin values as real size.\n\t\t\tvar elTable = _el.childNodes[0];\n\t\t\tvar nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;\n\t\t\tvar nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;\n\t\t\t\n\t\t\tif (nLeftMarginTable > 0 && nTopMarginTable > 0) {\n\t\t\t\telTable.style.margin = nTopMarginTable + \"px \" + nLeftMarginTable + \"px\";\t\n\t\t\t}\n\t\t};\n\t\t\n\t\t/**\n\t\t * Clear the QRCode\n\t\t */\n\t\tDrawing.prototype.clear = function () {\n\t\t\tthis._el.innerHTML = '';\n\t\t};\n\t\t\n\t\treturn Drawing;\n\t})() : (function () { // Drawing in Canvas\n\t\tfunction _onMakeImage() {\n\t\t\tthis._elImage.src = this._elCanvas.toDataURL(\"image/png\");\n\t\t\tthis._elImage.style.display = \"block\";\n\t\t\tthis._elCanvas.style.display = \"none\";\t\t\t\n\t\t}\n\t\t\n\t\t// Android 2.1 bug workaround\n\t\t// http://code.google.com/p/android/issues/detail?id=5141\n\t\tif (this != undefined && this._android && this._android <= 2.1) {\n\t \tvar factor = 1 / window.devicePixelRatio;\n\t var drawImage = CanvasRenderingContext2D.prototype.drawImage; \n\t \tCanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {\n\t \t\tif ((\"nodeName\" in image) && /img/i.test(image.nodeName)) {\n\t\t \tfor (var i = arguments.length - 1; i >= 1; i--) {\n\t\t \targuments[i] = arguments[i] * factor;\n\t\t \t}\n\t \t\t} else if (typeof dw == \"undefined\") {\n\t \t\t\targuments[1] *= factor;\n\t \t\t\targuments[2] *= factor;\n\t \t\t\targuments[3] *= factor;\n\t \t\t\targuments[4] *= factor;\n\t \t\t}\n\t \t\t\n\t \tdrawImage.apply(this, arguments); \n\t \t};\n\t\t}\n\t\t\n\t\t/**\n\t\t * Check whether the user's browser supports Data URI or not\n\t\t * \n\t\t * @private\n\t\t * @param {Function} fSuccess Occurs if it supports Data URI\n\t\t * @param {Function} fFail Occurs if it doesn't support Data URI\n\t\t */\n\t\tfunction _safeSetDataURI(fSuccess, fFail) {\n var self = this;\n self._fFail = fFail;\n self._fSuccess = fSuccess;\n\n // Check it just once\n if (self._bSupportDataURI === null) {\n var el = document.createElement(\"img\");\n var fOnError = function() {\n self._bSupportDataURI = false;\n\n if (self._fFail) {\n self._fFail.call(self);\n }\n };\n var fOnSuccess = function() {\n self._bSupportDataURI = true;\n\n if (self._fSuccess) {\n self._fSuccess.call(self);\n }\n };\n\n el.onabort = fOnError;\n el.onerror = fOnError;\n el.onload = fOnSuccess;\n el.src = \"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\"; // the Image contains 1px data.\n return;\n } else if (self._bSupportDataURI === true && self._fSuccess) {\n self._fSuccess.call(self);\n } else if (self._bSupportDataURI === false && self._fFail) {\n self._fFail.call(self);\n }\n\t\t};\n\t\t\n\t\t/**\n\t\t * Drawing QRCode by using canvas\n\t\t * \n\t\t * @constructor\n\t\t * @param {HTMLElement} el\n\t\t * @param {Object} htOption QRCode Options \n\t\t */\n\t\tvar Drawing = function (el, htOption) {\n \t\tthis._bIsPainted = false;\n \t\tthis._android = _getAndroid();\n\t\t\n\t\t\tthis._htOption = htOption;\n\t\t\tthis._elCanvas = document.createElement(\"canvas\");\n\t\t\tthis._elCanvas.width = htOption.width;\n\t\t\tthis._elCanvas.height = htOption.height;\n\t\t\tel.appendChild(this._elCanvas);\n\t\t\tthis._el = el;\n\t\t\tthis._oContext = this._elCanvas.getContext(\"2d\");\n\t\t\tthis._bIsPainted = false;\n\t\t\tthis._elImage = document.createElement(\"img\");\n\t\t\tthis._elImage.alt = \"Scan me!\";\n\t\t\tthis._elImage.style.display = \"none\";\n\t\t\tthis._el.appendChild(this._elImage);\n\t\t\tthis._bSupportDataURI = null;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Draw the QRCode\n\t\t * \n\t\t * @param {QRCode} oQRCode \n\t\t */\n\t\tDrawing.prototype.draw = function (oQRCode) {\n var _elImage = this._elImage;\n var _oContext = this._oContext;\n var _htOption = this._htOption;\n \n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = _htOption.width / nCount;\n\t\t\tvar nHeight = _htOption.height / nCount;\n\t\t\tvar nRoundedWidth = Math.round(nWidth);\n\t\t\tvar nRoundedHeight = Math.round(nHeight);\n\n\t\t\t_elImage.style.display = \"none\";\n\t\t\tthis.clear();\n\t\t\t\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\tvar bIsDark = oQRCode.isDark(row, col);\n\t\t\t\t\tvar nLeft = col * nWidth;\n\t\t\t\t\tvar nTop = row * nHeight;\n\t\t\t\t\t_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\n\t\t\t\t\t_oContext.lineWidth = 1;\n\t\t\t\t\t_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\t\t\t\t\t\n\t\t\t\t\t_oContext.fillRect(nLeft, nTop, nWidth, nHeight);\n\t\t\t\t\t\n\t\t\t\t\t// 안티 앨리어싱 방지 처리\n\t\t\t\t\t_oContext.strokeRect(\n\t\t\t\t\t\tMath.floor(nLeft) + 0.5,\n\t\t\t\t\t\tMath.floor(nTop) + 0.5,\n\t\t\t\t\t\tnRoundedWidth,\n\t\t\t\t\t\tnRoundedHeight\n\t\t\t\t\t);\n\t\t\t\t\t\n\t\t\t\t\t_oContext.strokeRect(\n\t\t\t\t\t\tMath.ceil(nLeft) - 0.5,\n\t\t\t\t\t\tMath.ceil(nTop) - 0.5,\n\t\t\t\t\t\tnRoundedWidth,\n\t\t\t\t\t\tnRoundedHeight\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._bIsPainted = true;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Make the image from Canvas if the browser supports Data URI.\n\t\t */\n\t\tDrawing.prototype.makeImage = function () {\n\t\t\tif (this._bIsPainted) {\n\t\t\t\t_safeSetDataURI.call(this, _onMakeImage);\n\t\t\t}\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Return whether the QRCode is painted or not\n\t\t * \n\t\t * @return {Boolean}\n\t\t */\n\t\tDrawing.prototype.isPainted = function () {\n\t\t\treturn this._bIsPainted;\n\t\t};\n\t\t\n\t\t/**\n\t\t * Clear the QRCode\n\t\t */\n\t\tDrawing.prototype.clear = function () {\n\t\t\tthis._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);\n\t\t\tthis._bIsPainted = false;\n\t\t};\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param {Number} nNumber\n\t\t */\n\t\tDrawing.prototype.round = function (nNumber) {\n\t\t\tif (!nNumber) {\n\t\t\t\treturn nNumber;\n\t\t\t}\n\t\t\t\n\t\t\treturn Math.floor(nNumber * 1000) / 1000;\n\t\t};\n\t\t\n\t\treturn Drawing;\n\t})();\n\t\n\t/**\n\t * Get the type by string length\n\t * \n\t * @private\n\t * @param {String} sText\n\t * @param {Number} nCorrectLevel\n\t * @return {Number} type\n\t */\n\tfunction _getTypeNumber(sText, nCorrectLevel) {\t\t\t\n\t\tvar nType = 1;\n\t\tvar length = _getUTF8Length(sText);\n\t\t\n\t\tfor (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {\n\t\t\tvar nLimit = 0;\n\t\t\t\n\t\t\tswitch (nCorrectLevel) {\n\t\t\t\tcase QRErrorCorrectLevel.L :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.M :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.Q :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][2];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.H :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][3];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tif (length <= nLimit) {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tnType++;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (nType > QRCodeLimitLength.length) {\n\t\t\tthrow new Error(\"Too long data\");\n\t\t}\n\t\t\n\t\treturn nType;\n\t}\n\n\tfunction _getUTF8Length(sText) {\n\t\tvar replacedText = encodeURI(sText).toString().replace(/\\%[0-9a-fA-F]{2}/g, 'a');\n\t\treturn replacedText.length + (replacedText.length != sText ? 3 : 0);\n\t}\n\t\n\t/**\n\t * @class QRCode\n\t * @constructor\n\t * @example \n\t * new QRCode(document.getElementById(\"test\"), \"http://jindo.dev.naver.com/collie\");\n\t *\n\t * @example\n\t * var oQRCode = new QRCode(\"test\", {\n\t * text : \"http://naver.com\",\n\t * width : 128,\n\t * height : 128\n\t * });\n\t * \n\t * oQRCode.clear(); // Clear the QRCode.\n\t * oQRCode.makeCode(\"http://map.naver.com\"); // Re-create the QRCode.\n\t *\n\t * @param {HTMLElement|String} el target element or 'id' attribute of element.\n\t * @param {Object|String} vOption\n\t * @param {String} vOption.text QRCode link data\n\t * @param {Number} [vOption.width=256]\n\t * @param {Number} [vOption.height=256]\n\t * @param {String} [vOption.colorDark=\"#000000\"]\n\t * @param {String} [vOption.colorLight=\"#ffffff\"]\n\t * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] \n\t */\n\tQRCode = function (el, vOption) {\n\t\tthis._htOption = {\n\t\t\twidth : 256, \n\t\t\theight : 256,\n\t\t\ttypeNumber : 4,\n\t\t\tcolorDark : \"#000000\",\n\t\t\tcolorLight : \"#ffffff\",\n\t\t\tcorrectLevel : QRErrorCorrectLevel.H\n\t\t};\n\t\t\n\t\tif (typeof vOption === 'string') {\n\t\t\tvOption\t= {\n\t\t\t\ttext : vOption\n\t\t\t};\n\t\t}\n\t\t\n\t\t// Overwrites options\n\t\tif (vOption) {\n\t\t\tfor (var i in vOption) {\n\t\t\t\tthis._htOption[i] = vOption[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (typeof el == \"string\") {\n\t\t\tel = document.getElementById(el);\n\t\t}\n\n\t\tif (this._htOption.useSVG) {\n\t\t\tDrawing = svgDrawer;\n\t\t}\n\t\t\n\t\tthis._android = _getAndroid();\n\t\tthis._el = el;\n\t\tthis._oQRCode = null;\n\t\tthis._oDrawing = new Drawing(this._el, this._htOption);\n\t\t\n\t\tif (this._htOption.text) {\n\t\t\tthis.makeCode(this._htOption.text);\t\n\t\t}\n\t};\n\t\n\t/**\n\t * Make the QRCode\n\t * \n\t * @param {String} sText link data\n\t */\n\tQRCode.prototype.makeCode = function (sText) {\n\t\tthis._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);\n\t\tthis._oQRCode.addData(sText);\n\t\tthis._oQRCode.make();\n\t\tthis._el.title = sText;\n\t\tthis._oDrawing.draw(this._oQRCode);\t\t\t\n\t\tthis.makeImage();\n\t};\n\t\n\t/**\n\t * Make the Image from Canvas element\n\t * - It occurs automatically\n\t * - Android below 3 doesn't support Data-URI spec.\n\t * \n\t * @private\n\t */\n\tQRCode.prototype.makeImage = function () {\n\t\tif (typeof this._oDrawing.makeImage == \"function\" && (!this._android || this._android >= 3)) {\n\t\t\tthis._oDrawing.makeImage();\n\t\t}\n\t};\n\t\n\t/**\n\t * Clear the QRCode\n\t */\n\tQRCode.prototype.clear = function () {\n\t\tthis._oDrawing.clear();\n\t};\n\t\n\t/**\n\t * @name QRCode.CorrectLevel\n\t */\n\tQRCode.CorrectLevel = QRErrorCorrectLevel;\n})();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/controller_ui.ts\");\n",""],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/controller_ui/beta/main.css b/controller_ui/beta/main.css new file mode 100644 index 0000000..7ff9b20 --- /dev/null +++ b/controller_ui/beta/main.css @@ -0,0 +1,160 @@ +/*!***************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/other/style.scss ***! + \***************************************************************************************************************/ +@charset "UTF-8"; +.ZUnoRazberryModal { + display: flex; + position: fixed; + z-index: 1000; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; + background-color: rgba(0, 0, 0, 0.4); + align-items: center; + justify-content: center; + user-select: none; +} + +.ZUnoRazberryModal_color_error { + color: red; +} + +.ZUnoRazberryModal_color_sucess { + color: green; +} + +.ZUnoRazberryModal_color_info { + color: green; +} + +.ZUnoRazberryModal_color_warning { + color: rgb(13, 66, 238); +} + +.ZUnoRazberryModal_color_question { + color: rgb(13, 66, 238); +} + +.ZUnoRazberryModal > section { + display: flex; + background-color: #fefefe; + padding: 1rem; + border: 1px solid #888; + min-width: 50%; + min-height: 4rem; + max-height: 100%; + flex-direction: column; + overflow: auto; +} + +.ZUnoRazberryModalContentSectionButton { + display: flex; + position: relative; + justify-content: space-between; + width: 100%; + height: min-content; +} + +.ZUnoRazberryModalContentSection_table { + display: flex; + position: relative; + justify-content: space-between; + flex-direction: column; +} + +.ZUnoRazberryModalContentSection_table > h3 { + display: flex; + position: relative; + justify-content: center; + width: 100%; + margin: 0.2rem; +} + +.ZUnoRazberryModalContentSectionLog_section_txt { + display: flex; + position: relative; + flex-direction: column; + min-height: 5rem; + max-height: 5rem; + overflow: auto; + width: 100%; + margin: 0.2rem; + cursor: text; + border-width: 0.1rem; + border-style: solid; + user-select: text; +} + +.ZUnoRazberryModalContentSectionLog_section_txt > * { + white-space: nowrap; +} + +.ZUnoRazberryModalContentSection_table td { + border-top: 0.1rem solid #9fd8ef; + padding: 0.25rem; +} + +.ZUnoRazberryModalContentSection_table td:nth-child(1) { + width: 15rem; +} + +.ZUnoRazberryModalContentSection_table td:nth-child(2) { + text-align: left; + user-select: text; + max-width: 100%; +} + +.ZUnoRazberryModalContentSection_table td:nth-child(3) { + text-align: right; + max-width: 100%; +} + +.ZUnoRazberryModalContentSection_table td:nth-child(3) > button { + min-width: 4rem; +} + +.ZUnoRazberryModalContentSection_table input[type=number]:valid + span:after { + content: "✓"; + padding-left: 0.2rem; + color: green; +} + +.ZUnoRazberryModalContentSection_table input[type=number]:invalid + span:after { + content: "✖"; + padding-left: 0.2rem; + color: red; +} + +.ZUnoRazberryModalContentSection_table_load_indicate { + font-weight: bold; + display: inline-block; + font-family: monospace; + clip-path: inset(0 3ch 0 0); + animation: ZUnoRazberryModalContentSection_table_load_indicate_animation 1.5s steps(4) infinite; +} + +@keyframes ZUnoRazberryModalContentSection_table_load_indicate_animation { + to { + clip-path: inset(0 -1ch 0 0); + } +} +.ZUnoRazberryModalContentSection_table select[data-beta] option[data-beta] { + display: none; +} + +.ZUnoRazberryModalContentSection_migration_action_button { + margin: 0.2rem; +} + +.ZUnoRazberryMigrationKey_table td { + border-top: none; + padding: 0rem; +} + +.ZUnoRazberryMigrationKey_table td:nth-child(1) { + width: 5rem; +} + +/*# sourceMappingURL=main.css.map*/ \ No newline at end of file diff --git a/controller_ui/beta/main.css.map b/controller_ui/beta/main.css.map new file mode 100644 index 0000000..58a5e5b --- /dev/null +++ b/controller_ui/beta/main.css.map @@ -0,0 +1 @@ +{"version":3,"file":"main.css","mappings":";;;AAAA,gBAAgB;AAOhB;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAND;;AASA;EAEC,UAzBa;AAkBd;;AAUA;EAEC,YA7BY;AAqBb;;AAWA;EAEC,YAlCY;AAyBb;;AAYA;EAEC,uBApCe;AA0BhB;;AAaA;EAEC,uBAxCgB;AA6BjB;;AAcA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAZD;;AAeA;EAEC;EACA;EACA;EACA;EACA;AAbD;;AAgBA;EAEC;EACA;EACA;EACA;AAdD;;AAmBA;EAEC;EACA;EACA;EACA;EACA,cARyB;AAT1B;;AAoBA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cApByB;EAqBzB;EACA;EACA;EACA;AAlBD;;AAqBA;EAEC;AAnBD;;AAsBA;EAEC;EACA;AApBD;;AAwBA;EAEC;AAtBD;;AAyBA;EAEC;EACA;EACA;AAvBD;;AA0BA;EAEC;EACA;AAxBD;;AA2BA;EAEC;AAzBD;;AA4BA;EAEC;EACA;EACA,YA9Ia;AAoHd;;AA6BA;EAEC;EACA;EACA,UApJe;AAyHhB;;AA8BA;EAEC;EACA;EACA;EACA;EACA;AA5BD;;AA+BA;EAEC;IAEC;EA9BA;AACF;AAiCA;EAEC;AAhCD;;AAmCA;EAEC;AAjCD;;AAoCA;EAEC;EACA;AAlCD;;AAqCA;EAEC;AAnCD,C","sources":["webpack://ControllerUiLib/./src/other/style.scss"],"sourcesContent":["$color_error: red;\n$color_info: green;\n$color_valid: green;\n$color_invalid: red;\n$color_warning: rgb(13, 66, 238);\n$color_question: rgb(13, 66, 238);\n\n.ZUnoRazberryModal\n{\n\tdisplay: flex;\n\tposition: fixed;\n\tz-index: 1000;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: auto;\n\tbackground-color: rgba(0,0,0,0.4);\n\talign-items: center;\n\tjustify-content: center;\n\tuser-select: none;\n}\n\n.ZUnoRazberryModal_color_error\n{\n\tcolor: $color_error;\n}\n\n.ZUnoRazberryModal_color_sucess\n{\n\tcolor: $color_info;\n}\n\n.ZUnoRazberryModal_color_info\n{\n\tcolor: $color_info;\n}\n\n.ZUnoRazberryModal_color_warning\n{\n\tcolor: $color_warning;\n}\n\n.ZUnoRazberryModal_color_question\n{\n\tcolor: $color_question;\n}\n\n.ZUnoRazberryModal > section\n{\n\tdisplay: flex;\n\tbackground-color: #fefefe;\n\tpadding: 1rem;\n\tborder: 1px solid #888;\n\tmin-width: 50%;\n\tmin-height: 4rem;\n\tmax-height: 100%;\n\tflex-direction: column;\n\toverflow: auto;\n}\n\n.ZUnoRazberryModalContentSectionButton\n{\n\tdisplay: flex;\n\tposition: relative;\n\tjustify-content: space-between;\n\twidth: 100%;\n\theight: min-content;\n}\n\n.ZUnoRazberryModalContentSection_table\n{\n\tdisplay: flex;\n\tposition: relative;\n\tjustify-content: space-between;\n\tflex-direction: column;\n}\n\n$margin_section_log_item: 0.2rem;\n\n.ZUnoRazberryModalContentSection_table > h3\n{\n\tdisplay: flex;\n\tposition: relative;\n\tjustify-content: center;\n\twidth: 100%;\n\tmargin: $margin_section_log_item\n}\n\n.ZUnoRazberryModalContentSectionLog_section_txt\n{\n\tdisplay: flex;\n\tposition: relative;\n\tflex-direction: column;\n\tmin-height: 5rem;\n\tmax-height: 5rem;\n\toverflow: auto;\n\twidth: 100%;\n\tmargin: $margin_section_log_item;\n\tcursor: text;\n\tborder-width: 0.1rem;\n\tborder-style: solid;\n\tuser-select: text;\n}\n\n.ZUnoRazberryModalContentSectionLog_section_txt > *\n{\n\twhite-space: nowrap;\n}\n\n.ZUnoRazberryModalContentSection_table td\n{\n\tborder-top: 0.1rem solid #9fd8ef;\n\tpadding: 0.25rem;\n}\n\n\n.ZUnoRazberryModalContentSection_table td:nth-child(1)\n{\n\twidth: 15rem;\n}\n\n.ZUnoRazberryModalContentSection_table td:nth-child(2)\n{\n\ttext-align: left;\n\tuser-select: text;\n\tmax-width: 100%;\n}\n\n.ZUnoRazberryModalContentSection_table td:nth-child(3)\n{\n\ttext-align: right;\n\tmax-width: 100%;\n}\n\n.ZUnoRazberryModalContentSection_table td:nth-child(3) > button\n{\n\tmin-width: 4rem;\n}\n\n.ZUnoRazberryModalContentSection_table input[type=number]:valid + span:after\n{\n\tcontent: '✓';\n\tpadding-left: 0.2rem;\n\tcolor: $color_valid;\n}\n\n.ZUnoRazberryModalContentSection_table input[type=number]:invalid + span:after\n{\n\tcontent: '✖';\n\tpadding-left: 0.2rem;\n\tcolor: $color_invalid;\n}\n\n.ZUnoRazberryModalContentSection_table_load_indicate\n{\n\tfont-weight: bold;\n\tdisplay:inline-block;\n\tfont-family: monospace;\n\tclip-path: inset(0 3ch 0 0);\n\tanimation: ZUnoRazberryModalContentSection_table_load_indicate_animation 1.5s steps(4) infinite;\n}\n\n@keyframes ZUnoRazberryModalContentSection_table_load_indicate_animation\n{\n\tto\n\t{\n\t\tclip-path: inset(0 -1ch 0 0)\n\t}\n}\n\n.ZUnoRazberryModalContentSection_table select[data-beta] option[data-beta]\n{\n\tdisplay: none;\n}\n\n.ZUnoRazberryModalContentSection_migration_action_button\n{\n\tmargin: 0.2rem;\n}\n\n.ZUnoRazberryMigrationKey_table td\n{\n\tborder-top: none;\n\tpadding: 0rem;\n}\n\n.ZUnoRazberryMigrationKey_table td:nth-child(1)\n{\n\twidth: 5rem;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/example/controller_ui.html b/example/controller_ui.html deleted file mode 100644 index d4394aa..0000000 --- a/example/controller_ui.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Example!!! - - - - - - - - - \ No newline at end of file diff --git a/example/z-uno-compiler.html b/example/z-uno-compiler.html deleted file mode 100644 index 1ed8f26..0000000 --- a/example/z-uno-compiler.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - Example!!! - - - - - - -
-
- - diff --git a/get_branches.py b/get_branches.py deleted file mode 100644 index 6a2a89b..0000000 --- a/get_branches.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -import json -import sys - -def version_str_to_int(version:str)-> int: - version_list:list = version.split(".") - i = len(version_list) - out = 0x0 - while (i != 0x0): - out = out | (int(version_list[i - 0x1]) << (0x8 * (len(version_list) - i))) - i = i - 0x1 - return (out) - - -file = open("./package.json") -package = json.load(file) -file.close() -if (version_str_to_int(package["version"]) & 0xFF) == 0x0: - sys.stdout.write("") -else: - sys.stdout.write("-beta") diff --git a/main.css b/main.css new file mode 100644 index 0000000..0ea701b --- /dev/null +++ b/main.css @@ -0,0 +1 @@ +.ZUnoRazberryModal{display:flex;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgba(0,0,0,.4);align-items:center;justify-content:center;user-select:none}.ZUnoRazberryModal_color_error{color:red}.ZUnoRazberryModal_color_info{color:green}.ZUnoRazberryModal_color_warning{color:#0d42ee}.ZUnoRazberryModal_color_question{color:#0d42ee}.ZUnoRazberryModal>section{display:flex;background-color:#fefefe;padding:1rem;border:1px solid #888;min-width:50%;min-height:4rem;max-height:100%;flex-direction:column;overflow:auto}.ZUnoRazberryModalContentSectionButton{display:flex;position:relative;justify-content:space-between;width:100%;height:min-content}.ZUnoRazberryModalContentSection_table{display:flex;position:relative;justify-content:space-between;flex-direction:column}.ZUnoRazberryModalContentSection_table>h3{display:flex;position:relative;justify-content:center;width:100%;margin:.2rem}.ZUnoRazberryModalContentSectionLog_section_txt{display:flex;position:relative;flex-direction:column;min-height:5rem;max-height:5rem;overflow:auto;width:100%;margin:.2rem;cursor:text;border-width:.1rem;border-style:solid;user-select:text}.ZUnoRazberryModalContentSectionLog_section_txt>*{white-space:nowrap}.ZUnoRazberryModalContentSection_table td{border-top:.1rem solid #9fd8ef;padding:.25rem}.ZUnoRazberryModalContentSection_table td:nth-child(1){width:15rem}.ZUnoRazberryModalContentSection_table td:nth-child(2){text-align:left;user-select:text;max-width:100%}.ZUnoRazberryModalContentSection_table td:nth-child(3){text-align:right;max-width:100%}.ZUnoRazberryModalContentSection_table td:nth-child(3)>button{min-width:4rem}.ZUnoRazberryModalContentSection_table input[type=number]:valid+span:after{content:"✓";padding-left:.2rem;color:green}.ZUnoRazberryModalContentSection_table input[type=number]:invalid+span:after{content:"✖";padding-left:.2rem;color:red}.ZUnoRazberryModalContentSection_table_load_indicate{font-weight:bold;display:inline-block;font-family:monospace;clip-path:inset(0 3ch 0 0);animation:ZUnoRazberryModalContentSection_table_load_indicate_animation 1.5s steps(4) infinite}@keyframes ZUnoRazberryModalContentSection_table_load_indicate_animation{to{clip-path:inset(0 -1ch 0 0)}}.ZUnoRazberryModalContentSection_table select[data-beta] option[data-beta]{display:none}.ZUnoRazberryModalContentSection_migration_action_button{margin:.2rem} diff --git a/package.json b/package.json deleted file mode 100644 index c9e72c8..0000000 --- a/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "serial-api-web-tools", - "version": "0.0.23", - "description": "This set tools allows to configure Z-Wave.Me hardware", - "main": "src/main.ts", - "scripts": { - "dev": "webpack --mode=development", - "build": "webpack --mode=production", - "dev_zuno": "webpack --config ./webpack.z-uno-compiler.js --mode=development", - "build_zuno": "webpack --config ./webpack.z-uno-compiler.js --mode=production" - }, - "author": "Z-Wave.Me", - "license": "ISC", - "dependencies":{ - "@types/uuid": "9.0.1", - "@types/aes-js":"3.1.2", - "aes-js": "3.1.2", - "uuid": "9.0.1" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.3.1", - "css-loader": "^6.10.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-simple-import-sort": "^12.0.0", - "eslint-plugin-sonarjs": "^0.24.0", - "eslint-plugin-unicorn": "^51.0.1", - "html-loader": "^5.0.0", - "mini-css-extract-plugin": "^2.8.1", - "sass": "^1.72.0", - "sass-loader": "^14.1.1", - "ts-loader": "^9.5.1", - "typescript": "^5.3.3", - "webpack": "^5.0.0", - "webpack-cli": "^5.1.4", - "gh-pages": "^6.1.1", - "terser-webpack-plugin":"^5.3.10", - "html-webpack-plugin":"^5.6.0" - } -} diff --git a/src/controller_ui.ts b/src/controller_ui.ts deleted file mode 100644 index 30da2be..0000000 --- a/src/controller_ui.ts +++ /dev/null @@ -1,166 +0,0 @@ -import "./other/style.scss"; - -import {ControllerUiLogClass} from "./log/ui_log" -import {ControllerUiLangClassId} from "./lang/ui_lang_define" -import {ControllerUiLangClass} from "./lang/ui_lang" -import {ControllerUiSectionInfoClass} from "./section/controller/info" -import {ControllerUiSectionLicenseClass} from "./section/controller/license" -import {ControllerUiSectionUpdateClass} from "./section/controller/update" -import {ControllerUiSectionMigrationClass} from "./section/controller/migration" -import {DetectionUiSectionClass} from "./section/detection" -import {SlaveUiSectionInfoClass} from "./section/slave/info" -import {SlaveUiSectionLicenseClass} from "./section/slave/license" -import {SlaveUiSectionUpdateClass} from "./section/slave/update" -import {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from "./ui_define" -import {ControllerUiDefineClassReBeginFunc} from "./section/detection" - -import {ControllerSapiClass} from "./sapi/controller_sapi"; -import {ZunoSapiClass} from "./sapi/zuno_sapi"; -import {SapiClass, SapiClassStatus, SapiClassDetectType, SapiSerialOptionFilters} from "./sapi/sapi"; - -export {ControllerUiClass}; - -type controller_array_type = Array; -type slave_array_type = Array; -type all_array_type = controller_array_type|slave_array_type; - -class ControllerUiClass { - private readonly sapi:SapiClass = new SapiClass(); - private readonly razberry:ControllerSapiClass = new ControllerSapiClass(this.sapi); - private readonly zuno:ZunoSapiClass = new ZunoSapiClass(this.sapi); - private readonly locale:ControllerUiLangClass = new ControllerUiLangClass(); - private readonly el_modal:HTMLElement = document.createElement("div"); - private readonly el_section:HTMLElement = document.createElement("section"); - private readonly log:ControllerUiLogClass = new ControllerUiLogClass(this.el_section, this.locale); - private readonly controller:controller_array_type = []; - private readonly slave:slave_array_type = []; - private readonly detection:DetectionUiSectionClass; - private readonly filters?:SapiSerialOptionFilters[]; - - private detect_type:SapiClassDetectType = SapiClassDetectType.UNKNOWN; - - private _get_all_array_type():all_array_type { - let out:all_array_type; - - switch (this.detect_type) { - case SapiClassDetectType.RAZBERRY: - out = this.controller; - break; - case SapiClassDetectType.ZUNO: - out = this.slave; - break ; - default: - out = []; - break ; - } - return (out); - } - - private async _clear(): Promise { - let i:number; - - const array_type:all_array_type = this._get_all_array_type(); - i = 0x0; - while (i < array_type.length) { - await array_type[i].end(); - i++; - } - } - - private async _begin(detection:boolean): Promise { - let i:number; - - await this._clear(); - if (detection == true) { - await this.detection.begin(); - if (await this.detection.detection() == false) - return ; - } - this.detect_type = this.sapi.type(); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_CONNECT); - switch (this.detect_type) { - case SapiClassDetectType.ZUNO: - await this.zuno.connect(); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_CONNECT); - break; - case SapiClassDetectType.RAZBERRY: - await this.razberry.connect(); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_CONNECT); - break; - default: - this.log.errorFalled(ControllerUiLangClassId.MESSAGE_CONNECT); - break ; - } - const array_type:all_array_type = this._get_all_array_type(); - i = 0x0; - while (i < array_type.length) { - await array_type[i].begin(); - i++; - } - } - - private async _start(): Promise { - this.log.info(NAME_APP_VERSION_FULL); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_PORT_SELECT); - const status:SapiClassStatus = await this.sapi.request(this.filters); - if (status == SapiClassStatus.SERIAL_UN_SUPPORT) - return (this.log.error(ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER)); - if (status == SapiClassStatus.REQUEST_NO_SELECT) - return (this.log.errorFalled(ControllerUiLangClassId.MESSAGE_PORT_SELECT)); - if (status != SapiClassStatus.OK) - return (this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_PORT_SELECT, status)); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_PORT_SELECT); - await this._begin(true); - } - - private _constructor_button_create(el_section_button:HTMLElement, func:EventListener, text:string, title:string): void { - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.type = "button"; - el_button.textContent = text; - el_button.title = title; - el_button.addEventListener("click", func); - el_section_button.appendChild(el_button); - } - - private _constructor_button(): void { - const el_section_button:HTMLElement = document.createElement("section"); - el_section_button.className = "ZUnoRazberryModalContentSectionButton"; - const event_copy:EventListener = () => { - navigator.clipboard.writeText(this.log.getLog()); - }; - const event_close:EventListener = async () => { - let i:number; - - const array_type:all_array_type = this._get_all_array_type(); - i = 0x0; - while (i < array_type.length) { - if (array_type[i].is_close() == false) - return ; - i++; - } - await this.sapi.close(); - this.el_modal.remove(); - }; - this._constructor_button_create(el_section_button, event_copy, this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_TEXT), this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_TITLE)); - this._constructor_button_create(el_section_button, event_close, this.locale.getLocale(ControllerUiLangClassId.BUTTON_CLOSE_TEXT), this.locale.getLocale(ControllerUiLangClassId.BUTTON_CLOSE_TITLE)); - this.el_section.appendChild(el_section_button); - } - - constructor(el:HTMLElement, filters?:SapiSerialOptionFilters[]) { - this.filters = filters; - this.el_modal.className = "ZUnoRazberryModal"; - this.el_modal.appendChild(this.el_section); - this._constructor_button(); - const re_begin:ControllerUiDefineClassReBeginFunc = async (detection:boolean) => {await this._begin(detection)}; - this.detection = new DetectionUiSectionClass(this.el_section, this.locale, this.sapi, this.log, re_begin); - this.controller.push(new ControllerUiSectionInfoClass(this.el_section, this.locale, this.razberry, this.log, re_begin)); - this.controller.push(new ControllerUiSectionLicenseClass(this.el_section, this.locale, this.razberry, this.log)); - this.controller.push(new ControllerUiSectionUpdateClass(this.el_section, this.locale, this.razberry, this.log, re_begin)); - this.controller.push(new ControllerUiSectionMigrationClass(this.el_section, this.locale, this.razberry, this.log, async () => {await this._clear()}, this.sapi, this.zuno)); - this.slave.push(new SlaveUiSectionInfoClass(this.el_section, this.locale, this.zuno, this.log, re_begin)); - this.slave.push(new SlaveUiSectionLicenseClass(this.el_section, this.locale, this.zuno, this.log, re_begin)); - this.slave.push(new SlaveUiSectionUpdateClass(this.el_section, this.locale, this.zuno, this.log, re_begin)); - el.appendChild(this.el_modal); - this._start(); - } -} \ No newline at end of file diff --git a/src/hardware/chip.ts b/src/hardware/chip.ts deleted file mode 100644 index cba7361..0000000 --- a/src/hardware/chip.ts +++ /dev/null @@ -1,100 +0,0 @@ - -export {HardwareChipClass}; - -class HardwareChipClass { - static readonly FAMILY_ZGM13 = 0x00; - static readonly CHIP_ZGM130S037HGN = 0x01; - static readonly CHIP_ZGM130S037HGN1 = 0x02; - - static readonly FAMILY_EFR32MG21 = 0x01; - static readonly CHIP_EFR32MG21A010F1024IM32 = 0x01; - static readonly CHIP_EFR32MG21A010F512IM32 = 0x02; - static readonly CHIP_EFR32MG21A010F768IM32 = 0x03; - static readonly CHIP_EFR32MG21A020F1024IM32 = 0x04; - static readonly CHIP_EFR32MG21A020F512IM32 = 0x05; - static readonly CHIP_EFR32MG21A020F768IM32 = 0x06; - static readonly CHIP_EFR32MG21B010F1024IM32 = 0x07; - static readonly CHIP_EFR32MG21B010F512IM32 = 0x08; - static readonly CHIP_EFR32MG21B010F768IM32 = 0x09; - static readonly CHIP_EFR32MG21B020F1024IM32 = 0x0A; - static readonly CHIP_EFR32MG21B020F512IM32 = 0x0B; - static readonly CHIP_EFR32MG21B020F768IM32 = 0x0C; - - static readonly FAMILY_ZGM23 = 0x02; - static readonly CHIP_ZGM230SA27HGN = 0x01; - static readonly CHIP_ZGM230SA27HNN = 0x02; - static readonly CHIP_ZGM230SB27HGN = 0x03; - static readonly CHIP_ZGM230SB27HNN = 0x04; - - static readonly FAMILY_MGM21 = 0x03; - static readonly CHIP_MGM210L022JIF = 0x01; - static readonly CHIP_MGM210L022JNF = 0x02; - static readonly CHIP_MGM210LA22JIF = 0x03; - static readonly CHIP_MGM210LA22JNF = 0x04; - static readonly CHIP_MGM210P022JIA = 0x05; - static readonly CHIP_MGM210P032JIA = 0x06; - static readonly CHIP_MGM210PA22JIA = 0x07; - static readonly CHIP_MGM210PA32JIA = 0x08; - static readonly CHIP_MGM210PB22JIA = 0x09; - static readonly CHIP_MGM210PB32JIA = 0x0A; - static readonly CHIP_MGM211LA02JNF = 0x0B; - - static readonly FAMILY_EFR32ZG23 = 0x04; - static readonly CHIP_EFR32ZG23A010F512GM40 = 0x01; - static readonly CHIP_EFR32ZG23A010F512GM48 = 0x02; - static readonly CHIP_EFR32ZG23A020F512GM40 = 0x03; - static readonly CHIP_EFR32ZG23A020F512GM48 = 0x04; - static readonly CHIP_EFR32ZG23B010F512IM40 = 0x05; - static readonly CHIP_EFR32ZG23B010F512IM48 = 0x06; - static readonly CHIP_EFR32ZG23B011F512IM40 = 0x07; - static readonly CHIP_EFR32ZG23B020F512IM40 = 0x08; - static readonly CHIP_EFR32ZG23B020F512IM48 = 0x09; - static readonly CHIP_EFR32ZG23B021F512IM40 = 0x0A; - - static readonly FAMILY_EFR32MG24 = 0x05; - static readonly CHIP_EFR32MG24A010F1024IM40 = 0x01; - static readonly CHIP_EFR32MG24A010F1024IM48 = 0x02; - static readonly CHIP_EFR32MG24A010F1536GM40 = 0x03; - static readonly CHIP_EFR32MG24A010F1536GM48 = 0x04; - static readonly CHIP_EFR32MG24A010F1536IM40 = 0x05; - static readonly CHIP_EFR32MG24A010F1536IM48 = 0x06; - static readonly CHIP_EFR32MG24A010F768IM40 = 0x07; - static readonly CHIP_EFR32MG24A010F768IM48 = 0x08; - static readonly CHIP_EFR32MG24A020F1024IM40 = 0x09; - static readonly CHIP_EFR32MG24A020F1024IM48 = 0x0A; - static readonly CHIP_EFR32MG24A020F1536GM40 = 0x0B; - static readonly CHIP_EFR32MG24A020F1536GM48 = 0x0C; - static readonly CHIP_EFR32MG24A020F1536IM40 = 0x0D; - static readonly CHIP_EFR32MG24A020F1536IM48 = 0x0E; - static readonly CHIP_EFR32MG24A020F768IM40 = 0x0F; - static readonly CHIP_EFR32MG24A021F1024IM40 = 0x10; - static readonly CHIP_EFR32MG24A110F1024IM48 = 0x11; - static readonly CHIP_EFR32MG24A110F1536GM48 = 0x12; - static readonly CHIP_EFR32MG24A111F1536GM48 = 0x13; - static readonly CHIP_EFR32MG24A120F1536GM48 = 0x14; - static readonly CHIP_EFR32MG24A121F1536GM48 = 0x15; - static readonly CHIP_EFR32MG24A410F1536IM40 = 0x16; - static readonly CHIP_EFR32MG24A410F1536IM48 = 0x17; - static readonly CHIP_EFR32MG24A420F1536IM40 = 0x18; - static readonly CHIP_EFR32MG24A420F1536IM48 = 0x19; - static readonly CHIP_EFR32MG24A610F1536IM40 = 0x1A; - static readonly CHIP_EFR32MG24A620F1536IM40 = 0x1B; - static readonly CHIP_EFR32MG24B010F1024IM48 = 0x1C; - static readonly CHIP_EFR32MG24B010F1536IM40 = 0x1D; - static readonly CHIP_EFR32MG24B010F1536IM48 = 0x1E; - static readonly CHIP_EFR32MG24B020F1024IM48 = 0x1F; - static readonly CHIP_EFR32MG24B020F1536IM40 = 0x20; - static readonly CHIP_EFR32MG24B020F1536IM48 = 0x21; - static readonly CHIP_EFR32MG24B110F1536GM48 = 0x22; - static readonly CHIP_EFR32MG24B110F1536IM48 = 0x23; - static readonly CHIP_EFR32MG24B120F1536IM48 = 0x24; - static readonly CHIP_EFR32MG24B210F1536IM40 = 0x25; - static readonly CHIP_EFR32MG24B210F1536IM48 = 0x26; - static readonly CHIP_EFR32MG24B220F1536IM48 = 0x27; - static readonly CHIP_EFR32MG24B310F1536IM48 = 0x28; - static readonly CHIP_EFR32MG24B610F1536IM40 = 0x29; - - constructor() { - } -} - diff --git a/src/lang/ui_lang.ts b/src/lang/ui_lang.ts deleted file mode 100644 index 5257d65..0000000 --- a/src/lang/ui_lang.ts +++ /dev/null @@ -1,18 +0,0 @@ - -import {controller_lang_en} from "./ui_lang_en" -import {ControllerUiLangClassList, ControllerUiLangClassId} from "./ui_lang_define" - -export {ControllerUiLangClass}; - -class ControllerUiLangClass { - private locale:ControllerUiLangClassList = controller_lang_en; - - public getLocale(id:ControllerUiLangClassId): string { - if (this.locale[id] != undefined) - return (this.locale[id]); - return (""); - } - - constructor() { - } -} \ No newline at end of file diff --git a/src/lang/ui_lang_define.ts b/src/lang/ui_lang_define.ts deleted file mode 100644 index 5879118..0000000 --- a/src/lang/ui_lang_define.ts +++ /dev/null @@ -1,223 +0,0 @@ - -export {ControllerUiLangClassId, ControllerUiLangClassList}; - -enum ControllerUiLangClassId -{ - MESSAGE_PORT_NOT_SELECT, - MESSAGE_NOT_SUPPORT_BROWSER, - MESSAGE_PORT_USE, - MESSAGE_CONNECT, - MESSAGE_DETECTION, - MESSAGE_READ_CAPABILITIES, - MESSAGE_READ_REGION, - MESSAGE_READ_SEC, - MESSAGE_READ_POWER, - MESSAGE_READ_LICENSE, - MESSAGE_SET_LICENSE, - MESSAGE_READ_BOARD_INFO, - MESSAGE_SET_REGION, - MESSAGE_SET_POWER, - MESSAGE_SET_SEC, - MESSAGE_SET_DEFAULT, - MESSAGE_PLEASE_WAIT, - MESSAGE_UPDATE_DOWNLOAD_INFO, - MESSAGE_UPDATE_DOWNLOAD_FILE, - MESSAGE_UPDATE_START_FIRMWARE, - MESSAGE_UPDATE_START_BOOTLOADER, - TABLE_NAME_SERIAL_API_VERSION, - TABLE_NAME_SERIAL_API_VERSION_TITLE, - TABLE_NAME_VENDOR, - TABLE_NAME_VENDOR_TITLE, - TABLE_NAME_VENDOR_ID, - TABLE_NAME_VENDOR_ID_TITLE, - TABLE_NAME_REGION, - TABLE_NAME_REGION_TITLE, - TABLE_NAME_REGION_SELECT_TITLE, - TABLE_NAME_REGION_BUTTON, - TABLE_NAME_REGION_BUTTON_TITLE, - TABLE_NAME_RESET_DEFAULT, - TABLE_NAME_RESET_DEFAULT_TITLE, - TABLE_NAME_RESET_DEFAULT_BUTTON, - TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, - TABLE_NAME_POWER, - TABLE_NAME_POWER_TITLE, - TABLE_NAME_POWER_SELECT_TITLE, - TABLE_NAME_POWER_BUTTON, - TABLE_NAME_POWER_BUTTON_TITLE, - TABLE_NAME_UPDATE_FIRMWARE_BUTTON, - TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE, - TABLE_NAME_UPDATE_BOOTLOADER_BUTTON, - TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE, - TABLE_NAME_LICENSE_UUID, - TABLE_NAME_LICENSE_UUID_TITLE, - TABLE_NAME_LICENSE_MORE_OPTIONS, - TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE, - TABLE_NAME_LICENSE_SUBVENDOR_ID, - TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE, - TABLE_NAME_LICENSE_MAX_NODE, - TABLE_NAME_LICENSE_MAX_NODE_TITLE, - TABLE_NAME_LICENSE_SUPPORT, - TABLE_NAME_LICENSE_SUPPORT_TITLE, - TABLE_NAME_UPDATE_BETA, - TABLE_NAME_UPDATE_BETA_SELECT_TITLE, - TABLE_NAME_UPDATE_BETA_TITLE, - TABLE_NAME_UPDATE_FIRMWARE, - TABLE_NAME_UPDATE_FIRMWARE_TITLE, - TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE, - TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE, - TABLE_NAME_UPDATE_BOOTLOADER, - TABLE_NAME_UPDATE_BOOTLOADER_TITLE, - TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE, - TABLE_NAME_UPDATE_DOWNLOAD_INFO, - TABLE_NAME_UPDATE_DOWNLOAD_FILE, - TABLE_NAME_UPDATE_WAIT_BUS_SERIAL, - TABLE_NAME_UPDATE_WAIT_UPDATE, - TABLE_NAME_DETECTION_SYNC_MANUAL, - TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE, - TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE, - LOG_HEADER, - LOG_DONE, - LOG_FAILED, - LOG_FAILED_CODE, - LOG_UNSUPPORTED, - LOG_NOT_FIND_ELEMENT, - LOG_XHR_TIMEOUT, - LOG_XHR_ERROR, - LOG_XHR_INVALID_DATA, - BUTTON_COPY_TEXT, - BUTTON_COPY_TITLE, - BUTTON_CLOSE_TEXT, - BUTTON_CLOSE_TITLE, - BUTTON_COPY_DSK, - BUTTON_COPY_DSK_TITLE, - BOARD_INFO_HEADER, - LICENSE_INFO_HEADER, - UPDATE_INFO_HEADER, - DEFAULT_RESET_WARNING, - MIGRATION_INFO_HEADER, - MIGRATION_ABOUT_HEADER, - MIGRATION_ABOUT_HEADER_TITLE, - MIGRATION_ABOUT_HEADER_TEXT_HTML, - MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5, - MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT, - MIGRATION_PROCESS_HEADER, - MIGRATION_PROCESS_HEADER_TITLE, - MIGRATION_PROCESS_BUTTON_START, - MIGRATION_PROCESS_BUTTON_START_TITLE, - MIGRATION_PROCESS_BUTTON_START_WARNING, - MIGRATION_TEST_INCLUDE, - MESSAGE_READ_HOME_ID, - MIGRATION_UNKNOWN_ERROR, - MIGRATION_GOOD_RESULT, - MIGRATION_ACTION_STOP, - MIGRATION_ACTION_CONTINUE, - MIGRATION_ACTION_STOP_TITLE, - MIGRATION_ACTION_CONTINUE_TITLE, - MIGRATION_QUESTION_EXCLUDE, - MIGRATION_STOP_RESULT, - MESSAGE_READ_INIT_DATA, - MESSAGE_START_EXCLUDING, - MESSAGE_START_WIDE_EXCLUDING, - SECONDS, - MIGRATION_WAIT_EXCLUDE_START_MASTER, - MESSAGE_CLEAR_NODE, - MESSAGE_START_INCLUDE, - MESSAGE_START_WIDE_INCLUDE, - MIGRATION_QUESTION_INCLUDE, - MIGRATION_WAIT_INCLUDE_START_MASTER, - MIGRATION_FINALIZE, - MIGRATION_DETECTION, - MESSAGE_SET_HOME_ID, - MESSAGE_REMOVE_NODE, - MESSAGE_SOFT_RESET, - MESSAGE_NOP, - MESSAGE_PORT_SELECT, - DETECTION_INFO_HEADER, - DETECTION_PROCESS_HEADER, - DETECTION_PROCESS_HEADER_TITLE, - DETECTION_PROCESS, - DETECTION_PROCESS_STOP, - DETECTION_PROCESS_CONTINUE, - DETECTION_PROCESS_STOP_TITLE, - DETECTION_PROCESS_CONTINUE_TITLE, - DETECTION_PROCESS_QUEST_SYNC, - DETECTION_PROCESS_BUTTON_RE_SYNC, - DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE, - SLAVE_MESSAGE_READ_BOARD_INFO, - TABLE_NAME_VERSION, - TABLE_NAME_VERSION_TITLE, - TABLE_NAME_BUILD_TIME_STAMP, - TABLE_NAME_BUILD_TIME_STAMP_TITLE, - TABLE_NAME_UUID, - TABLE_NAME_UUID_TITLE, - TABLE_NAME_HOME, - TABLE_NAME_HOME_TITLE, - TABLE_NAME_NODE, - TABLE_NAME_NODE_TITLE, - TABLE_NAME_DSK, - TABLE_NAME_DSK_TITLE, - TABLE_NAME_QR_CODE, - TABLE_NAME_QR_CODE_TITLE, - SLAVE_MESSAGE_FREEZE_ERROR, - SLAVE_DEFAULT_RESET_WARNING, - TABLE_NAME_TYPE, - TABLE_NAME_TYPE_TITLE, - TABLE_NAME_TYPE_CONTROLER, - TABLE_NAME_TYPE_SLAVE, - ERROR_ARGUMENT_FOR_UPDATE_SELECT, - ERROR_ARGUMENT_FIND_TYPE, - TABLE_NAME_INCLUDE_EXCLUDE, - TABLE_NAME_INCLUDE_EXCLUDE_TITLE, - TABLE_NAME_INCLUDE_EXCLUDE_BUTTON, - TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE, - INCLUDE_EXCLUDE_WAIT, - MESSAGE_ENABLE_NIF_DEFAULT, - MESSAGE_ENABLE_EVENT_FOR_LEARN, - MESSAGE_START_LEARN, - MESSAGE_LEARN_INFO_TIMEOUT, - MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART, - MESSAGE_LEARN_INFO_INCLUDE_RESTART, - MESSAGE_LEARN_INFO_EXCLUDE_RESTART, - PROCESS_CONTINUE, - PROCESS_CONTINUE_TITLE, - PROCESS_STOP, - PROCESS_STOP_TITLE, - PROCESS_REPEAT, - PROCESS_REPEAT_TITLE, - PROCESS_ABORT, - PROCESS_ABORT_TITLE, - LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE, - LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE, - MIGRATION_NOT_GET_URL_INFO, - MIGRATION_NOT_UPDATE, - MIGRATION_LAST_UPDATE_DETECT, - MIGRATION_FAILED_UPDATE_TYPE, - MIGRATION_FAILED_UPDATE_VERSION, - MIGRATION_FAILED_CHANGE_REGION, - MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE, - LEARN_PROCESS_QUEST_EXCLUDE, - LEARN_PROCESS_QUEST_EXCLUDE_TITLE, - MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE, - MIGRATION_FAILED_DETECT, - MIGRATION_PROCESS_QUEST_INCLUDE, - MIGRATION_PROCESS_QUEST_INCLUDE_TITLE, - MIGRATION_NOT_SUPPORT_DUMP_KEY, - MESSAGE_READ_S2_KEY, - MIGRATION_NOT_AVIABLE_FIRMWARE, - MIGRATION_NOT_SUPPORT_LR, - MIGRATION_NOT_SUPPORT_BACKUP, - MIGRATION_FAILED_SEE_LOG, - MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER, - MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE, - MIGRATION_SUCESS, - MIGRATION_QUEST_REPEATER_ALL_KEY, - MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE, - MIGRATION_QUEST_ABORT_STEP, - MIGRATION_QUEST_ABORT_STEP_TITLE, - MIGRATION_FAILED_REPEAR_TYPE, -} - -type ControllerUiLangClassList = -{ - [key in ControllerUiLangClassId]:string; -} diff --git a/src/lang/ui_lang_en.ts b/src/lang/ui_lang_en.ts deleted file mode 100644 index 725598e..0000000 --- a/src/lang/ui_lang_en.ts +++ /dev/null @@ -1,219 +0,0 @@ -import {ControllerUiLangClassList, ControllerUiLangClassId} from "./ui_lang_define" - -export {controller_lang_en}; - -const controller_lang_en:ControllerUiLangClassList = -{ - [ControllerUiLangClassId.MESSAGE_PORT_NOT_SELECT]: "No port selected", - [ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER]: "Sorry, this feature is supported only on Chrome, Edge and Opera", - [ControllerUiLangClassId.MESSAGE_PORT_USE]: "Check yours, maybe another application is using it", - [ControllerUiLangClassId.MESSAGE_CONNECT]: "Connect device", - [ControllerUiLangClassId.MESSAGE_DETECTION]: "Detection device", - [ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES]: "Read capabilities the device", - [ControllerUiLangClassId.MESSAGE_READ_REGION]: "Read region the device", - [ControllerUiLangClassId.MESSAGE_READ_SEC]: "Read securite the device", - [ControllerUiLangClassId.MESSAGE_READ_POWER]: "Read power the device", - [ControllerUiLangClassId.MESSAGE_READ_LICENSE]: "Read license the device", - [ControllerUiLangClassId.MESSAGE_SET_LICENSE]: "Set license the device", - [ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO]: "Read board info the device", - [ControllerUiLangClassId.MESSAGE_SET_REGION]: "Set region the device", - [ControllerUiLangClassId.MESSAGE_SET_POWER]: "Set power the device", - [ControllerUiLangClassId.MESSAGE_SET_SEC]: "Set securite the device", - [ControllerUiLangClassId.MESSAGE_SET_DEFAULT]: "Set default the device", - [ControllerUiLangClassId.MESSAGE_PLEASE_WAIT]: "Please wait until the previous operation is completed.", - [ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO]: "Download update info", - [ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE]: "Download update file", - [ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE]: "Start firmware update", - [ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER]: "Start bootloader update", - [ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION]: "Serial API Version:", - [ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE]: "It is specific to Z-Wave.Me", - [ControllerUiLangClassId.TABLE_NAME_VENDOR]: "Vendor:", - [ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_VENDOR_ID]: "Vendor ID:", - [ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_REGION]: "Region:", - [ControllerUiLangClassId.TABLE_NAME_REGION_TITLE]: "Z-Wave frequency", - [ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE]: "Select region", - [ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON]: "Apply", - [ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE]: "Apply the selected region", - [ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT]: "Reset default:", - [ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE]: "Reset to factory default settings", - [ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON]: "Reset", - [ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_POWER]: "TX power level:", - [ControllerUiLangClassId.TABLE_NAME_POWER_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE]: "Select the TX power level", - [ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON]: "Apply", - [ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE]: "Apply the selected TX power", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON]: "Update", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON]: "Update", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID]: "UUID:", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE]: "Unique ID of your Z-Wave hardware", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS]: "More options:", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE]: "Additional features available for your hardware", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID]: "Subvendor:", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE]: "Nodes limit:", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT]: "Support:", - [ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA]: 'Beta:', - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE]: 'Firmware:', - [ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE]: "Not updated", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER]: 'Bootloader:', - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO]: "Download info...", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE]: "Download file...", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL]: "Wait bus serial...", - [ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE]: "Wait update...", - [ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL]: 'Sync manual:', - [ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE]: "", - [ControllerUiLangClassId.LOG_HEADER]: "Log", - [ControllerUiLangClassId.LOG_DONE]: " done", - [ControllerUiLangClassId.LOG_FAILED]: " failed", - [ControllerUiLangClassId.LOG_FAILED_CODE]: " failed: {{code}}", - [ControllerUiLangClassId.LOG_UNSUPPORTED]: " unsupported", - [ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT]: "Not find element: {{element}}", - [ControllerUiLangClassId.LOG_XHR_TIMEOUT]: "
Internet request - timeout {{url}}
", - [ControllerUiLangClassId.LOG_XHR_ERROR]: "
Internet request - error {{url}}
", - [ControllerUiLangClassId.LOG_XHR_INVALID_DATA]: "
Internet request - invalid data {{url}}
", - [ControllerUiLangClassId.BUTTON_COPY_TEXT]: "Copy log", - [ControllerUiLangClassId.BUTTON_COPY_TITLE]: "Copy the log to clipboard", - [ControllerUiLangClassId.BUTTON_CLOSE_TEXT]: "Close", - [ControllerUiLangClassId.BUTTON_CLOSE_TITLE]: "Closes and stops working with the port", - [ControllerUiLangClassId.BUTTON_COPY_DSK]: "Copy", - [ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE]: "Copy the dsk to clipboard", - [ControllerUiLangClassId.BOARD_INFO_HEADER]: "Board Info", - [ControllerUiLangClassId.LICENSE_INFO_HEADER]: "License Info", - [ControllerUiLangClassId.UPDATE_INFO_HEADER]: "Update Info", - [ControllerUiLangClassId.DEFAULT_RESET_WARNING]: "The Controller Reset will delete all included devices from your network without excluding them. You will need to manually exclude and include all of them. Do you really want to do this?", - [ControllerUiLangClassId.MIGRATION_INFO_HEADER]: "Migration Info", - [ControllerUiLangClassId.MIGRATION_ABOUT_HEADER]: "About", - [ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML]: "
Porting from your old controllerto your new Z-Wave.Me hardware
", - [ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5]: "
You have an old stickneed a newer one
", - [ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT]: "
Your stick is not supportedmigration works only to Z-Wave.Me hardware
", - [ControllerUiLangClassId.MIGRATION_PROCESS_HEADER]: "Migration:", - [ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START]: "Start", - [ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING]: "Are you sure you want to start the migration process? - During this process, all data will be lost.\nAlso make sure there are no power issues to avoid problems.", - [ControllerUiLangClassId.MIGRATION_TEST_INCLUDE]: "Checking whether it is on...", - [ControllerUiLangClassId.MESSAGE_READ_HOME_ID]: "Read home and node id the controller", - [ControllerUiLangClassId.MIGRATION_UNKNOWN_ERROR]: "An unexpected error occurred, please try again.", - [ControllerUiLangClassId.MIGRATION_GOOD_RESULT]: "Migration was successful.", - [ControllerUiLangClassId.MIGRATION_ACTION_STOP]: "Stop", - [ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE]: "Continue", - [ControllerUiLangClassId.MIGRATION_ACTION_STOP_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE]: "You need to excluding first - click when you're ready", - [ControllerUiLangClassId.MIGRATION_STOP_RESULT]: "Migration was stoping.", - [ControllerUiLangClassId.MESSAGE_READ_INIT_DATA]: "Read init data the controller", - [ControllerUiLangClassId.MESSAGE_START_EXCLUDING]: "Start excluding controller", - [ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING]: "Start wide excluding controller", - [ControllerUiLangClassId.SECONDS]: "s", - [ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER]: "We are waiting for you to begin the elimination process.", - [ControllerUiLangClassId.MESSAGE_CLEAR_NODE]: "Start clear node the controller", - [ControllerUiLangClassId.MESSAGE_START_INCLUDE]: "Start include controller", - [ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE]: "Start wide include controller", - [ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE]: "You need to turn on the controller", - [ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER]: "We are waiting for you to begin the inclusion process.", - [ControllerUiLangClassId.MIGRATION_FINALIZE]: "Finishing...", - [ControllerUiLangClassId.MIGRATION_DETECTION]: "Detection...", - [ControllerUiLangClassId.MESSAGE_SET_HOME_ID]: "Set home and node id the controller", - [ControllerUiLangClassId.MESSAGE_REMOVE_NODE]: "Remove node the controller", - [ControllerUiLangClassId.MESSAGE_SOFT_RESET]: "Soft reset", - [ControllerUiLangClassId.MESSAGE_NOP]: "Send nop", - [ControllerUiLangClassId.MESSAGE_PORT_SELECT]: "Port selection", - [ControllerUiLangClassId.DETECTION_INFO_HEADER]: "Detection", - [ControllerUiLangClassId.DETECTION_PROCESS_HEADER]: "Sync:", - [ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE]: "", - [ControllerUiLangClassId.DETECTION_PROCESS]: "Sync...", - [ControllerUiLangClassId.DETECTION_PROCESS_STOP]: "Stop", - [ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE]: "Continue", - [ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE]: "", - [ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE]: "", - [ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC]: "Reset your hardware and try again", - [ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC]: "Try to sync again", - [ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE]: "", - [ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO]: "Read hardware information", - [ControllerUiLangClassId.TABLE_NAME_VERSION]: "Version:", - [ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP]: "Build date and time:", - [ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_UUID]: "UUID:", - [ControllerUiLangClassId.TABLE_NAME_UUID_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_HOME]: "Home ID:", - [ControllerUiLangClassId.TABLE_NAME_HOME_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_NODE]: "Node ID:", - [ControllerUiLangClassId.TABLE_NAME_NODE_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_DSK]: "DSK:", - [ControllerUiLangClassId.TABLE_NAME_DSK_TITLE]: "Key used to securely include your device", - [ControllerUiLangClassId.TABLE_NAME_QR_CODE]: "QR-code:", - [ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE]: "QR-code used to securely include your device", - [ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR]: "Failed to pause slave", - [ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING]: "Do you really want to do this?", - [ControllerUiLangClassId.TABLE_NAME_TYPE]: "Type:", - [ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER]: "Controller", - [ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE]: "Z-Uno / repeater", - [ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT]: "error arg for update select", - [ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE]: "error arg find type", - [ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE]: "Include/Exclude:", - [ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE]: "", - [ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON]: "Start", - [ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE]: "", - [ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT]: "Wait...", - [ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT]: "Enable default NIF", - [ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN]: "Enable event for learn mode", - [ControllerUiLangClassId.MESSAGE_START_LEARN]: "Start learn mode", - [ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT]: "Learn timout", - [ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART]: "Learn timeout. Reloading", - [ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART]: "Included. Reloading", - [ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART]: "Excluded. Reloading", - [ControllerUiLangClassId.PROCESS_CONTINUE]: "Continue", - [ControllerUiLangClassId.PROCESS_CONTINUE_TITLE]: "", - [ControllerUiLangClassId.PROCESS_STOP]: "Stop", - [ControllerUiLangClassId.PROCESS_STOP_TITLE]: "", - [ControllerUiLangClassId.PROCESS_REPEAT]: "Repeat", - [ControllerUiLangClassId.PROCESS_REPEAT_TITLE]: "", - [ControllerUiLangClassId.PROCESS_ABORT]: "Abort", - [ControllerUiLangClassId.PROCESS_ABORT_TITLE]: "", - [ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE]: "Ready for inclusion/exclusion by you controller", - [ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO]: "Could not get a link to the information needed for migration", - [ControllerUiLangClassId.MIGRATION_NOT_UPDATE]: "Failed to update", - [ControllerUiLangClassId.MIGRATION_LAST_UPDATE_DETECT]: "After the update, the firmware could not be detected", - [ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE]: "The type of the updated firmware does not match", - [ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION]: "After the update the version is not what it should be", - [ControllerUiLangClassId.MIGRATION_FAILED_CHANGE_REGION]: "Failed to change frequency", - [ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE]: "No support for exclusion/inclusion", - [ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE]: "Turn on exclusion mode on you controller", - [ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE]: "Learn completed", - [ControllerUiLangClassId.MIGRATION_FAILED_DETECT]: "Сould not be detected", - [ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE]: "
Turn on inclusion mode on you controller
When inclusion starts, you have to select all the supported security keys and use the following security code:
${dsk}
", - [ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY]: "No support for dump key", - [ControllerUiLangClassId.MESSAGE_READ_S2_KEY]: "Reading S2 keys", - [ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE]: "The required firmware is not in the database", - [ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR]: "Long Range is not supported", - [ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP]: "Backup is not supported", - [ControllerUiLangClassId.MIGRATION_FAILED_SEE_LOG]: "Failed - see log", - [ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER]: "
The inclusion happeded without the required keys.
Please turn on exclusion mode on you controller
", - [ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_SUCESS]: "Success", - [ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY]: "
These are all the keys that we were able to read, is everything correct or will you try again?
", - [ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP]: "An error occurred, would you like to try this step again or abort?", - [ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE]: "", - [ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE]: "The type of the firmware does not match", -}; \ No newline at end of file diff --git a/src/log/ui_log.ts b/src/log/ui_log.ts deleted file mode 100644 index 15c2e00..0000000 --- a/src/log/ui_log.ts +++ /dev/null @@ -1,110 +0,0 @@ -import {WEB_TOOLS_BETA} from "../other/define" - -import {ControllerUiLangClassId} from "../lang/ui_lang_define" -import {ControllerUiLangClass} from "../lang/ui_lang" - -export {ControllerUiLogClass}; - -class ControllerUiLogClass { - private readonly locale:ControllerUiLangClass; - private readonly el_log:HTMLElement; - - private _log(txt:string): void { - this.el_log.innerHTML += txt; - this.el_log.scrollTop = this.el_log.scrollHeight; - } - - public getLog(): string { - let i:number, txt:string; - - const childNodes:NodeListOf = this.el_log.childNodes; - i = 0x0; - txt = ""; - while (i < childNodes.length) { - const child = childNodes[i]; - txt = txt + child.textContent + "\n"; - i++; - } - return (txt); - } - - public info(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this._log('
' + txt + "
"); - } - - public warning(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this._log('
' + txt + "
"); - } - - public error(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this._log('
' + txt + "
"); - if (WEB_TOOLS_BETA == true) - console.error(txt); - } - - public infoStart(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this.info(txt + "..."); - } - - public infoDone(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this.info(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_DONE)); - } - - public errorFalled(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this.error(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED)); - } - - public errorFalledCode(txt:string|ControllerUiLangClassId, code:number): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this.error(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED_CODE).replace('{{code}}', code.toString())); - } - - public errorUnsupport(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this.error(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_UNSUPPORTED)); - } - - public errorNotFindElement(txt:string): void { - this.error(this.locale.getLocale(ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT).replace('{{element}}', txt)); - } - - public errorXhrTimeout(url:string): void { - this.error(this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_TIMEOUT).replace('{{url}}', url)); - } - - public errorXhrError(url:string): void { - this.error(this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_ERROR).replace('{{url}}', url)); - } - - public errorXhrInvalidData(url:string): void { - this.error(this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', url)); - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass) { - this.locale = locale; - const el:HTMLElement = document.createElement("section"); - el.className = "ZUnoRazberryModalContentSection_table"; - const el_section_log_header:HTMLElement = document.createElement("h3"); - el_section_log_header.textContent = this.locale.getLocale(ControllerUiLangClassId.LOG_HEADER) - el.appendChild(el_section_log_header); - const el_text:HTMLElement = document.createElement("section"); - el_text.className = "ZUnoRazberryModalContentSectionLog_section_txt"; - el.appendChild(el_text); - this.el_log = el_text; - el_section.appendChild(el); - } -} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index a0a2769..0000000 --- a/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import {ControllerUiClass} from "./controller_ui" -import {ZUnoCompilerClass} from "./z-uno-compiler" - -export {ControllerUiClass, ZUnoCompilerClass} \ No newline at end of file diff --git a/src/other/define.ts b/src/other/define.ts deleted file mode 100644 index b9b237d..0000000 --- a/src/other/define.ts +++ /dev/null @@ -1,7 +0,0 @@ -export {WEB_TOOLS_VERSION, WEB_TOOLS_BETA}; - -declare const __VERSION__: string; -declare const __BETA__: boolean; - -const WEB_TOOLS_VERSION:string = __VERSION__; -const WEB_TOOLS_BETA:boolean = __BETA__; diff --git a/src/other/style.scss b/src/other/style.scss deleted file mode 100644 index 4edadd8..0000000 --- a/src/other/style.scss +++ /dev/null @@ -1,191 +0,0 @@ -$color_error: red; -$color_info: green; -$color_valid: green; -$color_invalid: red; -$color_warning: rgb(13, 66, 238); -$color_question: rgb(13, 66, 238); - -.ZUnoRazberryModal -{ - display: flex; - position: fixed; - z-index: 1000; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: auto; - background-color: rgba(0,0,0,0.4); - align-items: center; - justify-content: center; - user-select: none; -} - -.ZUnoRazberryModal_color_error -{ - color: $color_error; -} - -.ZUnoRazberryModal_color_sucess -{ - color: $color_info; -} - -.ZUnoRazberryModal_color_info -{ - color: $color_info; -} - -.ZUnoRazberryModal_color_warning -{ - color: $color_warning; -} - -.ZUnoRazberryModal_color_question -{ - color: $color_question; -} - -.ZUnoRazberryModal > section -{ - display: flex; - background-color: #fefefe; - padding: 1rem; - border: 1px solid #888; - min-width: 50%; - min-height: 4rem; - max-height: 100%; - flex-direction: column; - overflow: auto; -} - -.ZUnoRazberryModalContentSectionButton -{ - display: flex; - position: relative; - justify-content: space-between; - width: 100%; - height: min-content; -} - -.ZUnoRazberryModalContentSection_table -{ - display: flex; - position: relative; - justify-content: space-between; - flex-direction: column; -} - -$margin_section_log_item: 0.2rem; - -.ZUnoRazberryModalContentSection_table > h3 -{ - display: flex; - position: relative; - justify-content: center; - width: 100%; - margin: $margin_section_log_item -} - -.ZUnoRazberryModalContentSectionLog_section_txt -{ - display: flex; - position: relative; - flex-direction: column; - min-height: 5rem; - max-height: 5rem; - overflow: auto; - width: 100%; - margin: $margin_section_log_item; - cursor: text; - border-width: 0.1rem; - border-style: solid; - user-select: text; -} - -.ZUnoRazberryModalContentSectionLog_section_txt > * -{ - white-space: nowrap; -} - -.ZUnoRazberryModalContentSection_table td -{ - border-top: 0.1rem solid #9fd8ef; - padding: 0.25rem; -} - - -.ZUnoRazberryModalContentSection_table td:nth-child(1) -{ - width: 15rem; -} - -.ZUnoRazberryModalContentSection_table td:nth-child(2) -{ - text-align: left; - user-select: text; - max-width: 100%; -} - -.ZUnoRazberryModalContentSection_table td:nth-child(3) -{ - text-align: right; - max-width: 100%; -} - -.ZUnoRazberryModalContentSection_table td:nth-child(3) > button -{ - min-width: 4rem; -} - -.ZUnoRazberryModalContentSection_table input[type=number]:valid + span:after -{ - content: '✓'; - padding-left: 0.2rem; - color: $color_valid; -} - -.ZUnoRazberryModalContentSection_table input[type=number]:invalid + span:after -{ - content: '✖'; - padding-left: 0.2rem; - color: $color_invalid; -} - -.ZUnoRazberryModalContentSection_table_load_indicate -{ - font-weight: bold; - display:inline-block; - font-family: monospace; - clip-path: inset(0 3ch 0 0); - animation: ZUnoRazberryModalContentSection_table_load_indicate_animation 1.5s steps(4) infinite; -} - -@keyframes ZUnoRazberryModalContentSection_table_load_indicate_animation -{ - to - { - clip-path: inset(0 -1ch 0 0) - } -} - -.ZUnoRazberryModalContentSection_table select[data-beta] option[data-beta] -{ - display: none; -} - -.ZUnoRazberryModalContentSection_migration_action_button -{ - margin: 0.2rem; -} - -.ZUnoRazberryMigrationKey_table td -{ - border-top: none; - padding: 0rem; -} - -.ZUnoRazberryMigrationKey_table td:nth-child(1) -{ - width: 5rem; -} \ No newline at end of file diff --git a/src/other/utilities.ts b/src/other/utilities.ts deleted file mode 100644 index c392009..0000000 --- a/src/other/utilities.ts +++ /dev/null @@ -1,230 +0,0 @@ -export { sleep, checksum, calcSigmaCRC16, costruct_int, hexToBytes, arrayToStringHex, versionNumberToString, intToBytearrayLsbMsb, intToBytearrayMsbLsb, versionNumberToStringSlave, numberToStringHex, conv2Decimal, toString, - conv2DecimalPadding, version_str_to_int, version_int_to_str, splitHexBuff -}; - -function toString(array:Array): string { - let result:string; - - result = ""; - for (let i = 0; i < array.length; i++) { - result += String.fromCharCode(array[i]); - } - return result; -} - -function numberToStringHex(num:number): string { - return (((num >> 24) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 16) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 8) & 0xFF).toString(0x10).padStart(2, '0') + ((num) & 0xFF).toString(0x10).padStart(2, '0')); -} - -function versionNumberToString(version:number): string { - const txt:string = String((version >> 24) & 0xFF).padStart(2, '0') + "." + String((version >> 16) & 0xFF).padStart(2, '0') + "." + String((version >> 0x8) & 0xFF).padStart(2, '0') + "." + String((version) & 0xFF).padStart(2, '0') - return (txt) -} - -function versionNumberToStringSlave(version:number): string { - const txt:string = String((version >> 24) & 0xFF).padStart(2, '0') + "." + String((version >> 16) & 0xFF).padStart(2, '0') + "." + String((version) & 0xFFFF) - return (txt) -} - -function arrayToStringHex(data:Array|Uint8Array):string { - let str_hex:string, i:number; - - str_hex = ""; - i = 0x0; - while (i < data.length) { - str_hex = str_hex + data[i].toString(0x10).padStart(2, '0'); - i++; - } - return (str_hex); -} - -function splitHexBuff(data:Array|Uint8Array):string { - let str_hex:string, i:number; - - str_hex = ""; - i = 0x0; - while (true) { - str_hex = str_hex + data[i].toString(0x10).padStart(2, '0').toUpperCase(); - i++; - if (i >= data.length) - break ; - str_hex = str_hex + " "; - } - return (str_hex); -} - - -function hexToBytes(hex:string):Array|undefined { - let i:number; - - if (hex.length == 0x0) - return (undefined); - if ((hex.length & 0x1) != 0x0) - return (undefined); - const bytes = []; - i = 0x0; - while (i < hex.length) { - try { - bytes.push(parseInt(hex.substring(i, i + 0x2), 0x10)); - } catch (error) { - return (undefined); - } - i = i + 0x2; - } - return (bytes); -} - -function sleep(ms:number):Promise { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -function checksum(data:Array|Uint8Array):number { - let ret = 0xff; - let i = 0x0; - - while (i < data.length) { - ret = ret ^ data[i]; - i++; - } - return (ret); -} - -function calcSigmaCRC16(crc:number, data:Array|Uint8Array, offset:number, llen:number):number { - let new_bit:number, wrk_data:number, b:number, a:number, bit_mask:number; - const bin_data:Array|Uint8Array = data; - const CRC_POLY:number = 0x1021; - - while (llen != 0) { - llen -= 1; - if (offset >= bin_data.length) - wrk_data = 0xFF; - else - wrk_data = bin_data[offset]; - offset += 1; - bit_mask = 0x80; - while (bit_mask != 0) { - a = 0; - b = 0; - if ((wrk_data & bit_mask) != 0) - a = 1; - if ((crc & 0x8000) != 0) - b = 1; - new_bit = a ^ b; - crc <<= 1; - crc = crc & 0xffff; - if (new_bit == 1) { - crc ^= CRC_POLY; - } - bit_mask >>= 1; - } - } - return (crc); -} - -function costruct_int(arr:Array|Uint8Array, n:number, inv:boolean = true): number { - let val:number, i:number, indx:number; - - val = 0; - i = 0x0; - while (i < arr.length) { - val <<= 8; - indx = i; - if (inv == true) - indx = n-1-i - if ((indx < arr.length) && (indx >= 0)) - val += arr[indx]; - i++; - } - val = val >>> 0x0;//The only JavaScript operator that works using unsigned 32-bit integers is >>>. You can exploit this to convert a signed-integer-in-Number you've been working on with the other bitwise operators to an unsigned-integer-in-Number: - return (val); -} - -function intToBytearrayLsbMsb(data:number, size:number = 0x4):Uint8Array { - let i:number; - - const array:Uint8Array = new Uint8Array(size); - i = 0x0; - while (i < array.length) { - array[i] = data & 0xFF; - data = data >> 8; - i = i + 1; - } - return (array); -} - -function intToBytearrayMsbLsb(data:number, size:number = 0x4):Uint8Array { - let i:number; - - const array:Uint8Array = new Uint8Array(size); - i = 0x0; - while (size != 0) { - size--; - array[i] = (data >> (8 * size)) & 0xFF; - i++; - } - return (array); -} - -function conv2DecimalPadding(num:number, max:number): string { - let num_str = num.toString(0xA); - - while (num_str.length < max) - num_str = '0' + num_str; - return (num_str); -} - - -function conv2Decimal(buff:Uint8Array, separator:string = "-"): string { - let i:number, text:string, v:number; - - text = ""; - i = 0x0; - while (i < (buff.length / 2)) { - v = buff[ (i * 2)]; - v <<= 8; - v += buff[ (i * 2) + 1]; - if(i != 0) - text += separator; - text += conv2DecimalPadding(v, 5); - i = i + 1; - } - return (text) -} - -function version_str_to_int(version:string): number { - let i:number, out:number; - - const version_list:Array = version.split("."); - i = version_list.length; - out = 0x0; - while (i != 0x0) { - out = out | (Number(version_list[i - 0x1]) << (0x8 * (version_list.length - i))); - i--; - } - return (out) -} - -function version_int_to_str(version:number, min:number): string { - let out:string, i:number; - - const list:Array = []; - while (version != 0x0) { - list.unshift(version & 0xFF); - version = version >> 0x8; - } - while (list.length < min) { - list.unshift(0x0); - } - out = ""; - i = 0x0; - while (true) { - out = out + String(list[i]).padStart(2, '0') - i++; - if (i < list.length) { - out = out + "."; - continue ; - } - break ; - } - return (out) -} diff --git a/src/qr_code/qrcode.d.ts b/src/qr_code/qrcode.d.ts deleted file mode 100644 index 1c11734..0000000 --- a/src/qr_code/qrcode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ - -export const enum QRErrorCorrectLevel { - M = 0x0, - L = 0x1, - H = 0x2, - Q = 0x3, -} - -export type QRCodeOption = { - "text" : string, - "width" : number, - "height" : number, - "colorDark" : string, - "colorLight" : string, - "correctLevel" : QRErrorCorrectLevel, -} - -export declare class QRCode { - constructor(id:HTMLElement|string, text:string|QRCodeOption) -} \ No newline at end of file diff --git a/src/qr_code/qrcode.js b/src/qr_code/qrcode.js deleted file mode 100644 index 30b7f08..0000000 --- a/src/qr_code/qrcode.js +++ /dev/null @@ -1,615 +0,0 @@ -/** - * @fileoverview - * - Using the 'QRCode for Javascript library' - * - Fixed dataset of 'QRCode for Javascript library' for support full-spec. - * - this library has no dependencies. - * - * @author davidshimjs - * @see http://www.d-project.com/ - * @see http://jeromeetienne.github.com/jquery-qrcode/ - */ - -export var QRCode; - -(function () { - //--------------------------------------------------------------------- - // QRCode for JavaScript - // - // Copyright (c) 2009 Kazuhiko Arase - // - // URL: http://www.d-project.com/ - // - // Licensed under the MIT license: - // http://www.opensource.org/licenses/mit-license.php - // - // The word "QR Code" is registered trademark of - // DENSO WAVE INCORPORATED - // http://www.denso-wave.com/qrcode/faqpatent-e.html - // - //--------------------------------------------------------------------- - function QR8bitByte(data) { - this.mode = QRMode.MODE_8BIT_BYTE; - this.data = data; - this.parsedData = []; - - // Added to support UTF-8 Characters - for (var i = 0, l = this.data.length; i < l; i++) { - var byteArray = []; - var code = this.data.charCodeAt(i); - - if (code > 0x10000) { - byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); - byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); - byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); - byteArray[3] = 0x80 | (code & 0x3F); - } else if (code > 0x800) { - byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); - byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); - byteArray[2] = 0x80 | (code & 0x3F); - } else if (code > 0x80) { - byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); - byteArray[1] = 0x80 | (code & 0x3F); - } else { - byteArray[0] = code; - } - - this.parsedData.push(byteArray); - } - - this.parsedData = Array.prototype.concat.apply([], this.parsedData); - - if (this.parsedData.length != this.data.length) { - this.parsedData.unshift(191); - this.parsedData.unshift(187); - this.parsedData.unshift(239); - } - } - - QR8bitByte.prototype = { - getLength: function (buffer) { - return this.parsedData.length; - }, - write: function (buffer) { - for (var i = 0, l = this.parsedData.length; i < l; i++) { - buffer.put(this.parsedData[i], 8); - } - } - }; - - function QRCodeModel(typeNumber, errorCorrectLevel) { - this.typeNumber = typeNumber; - this.errorCorrectLevel = errorCorrectLevel; - this.modules = null; - this.moduleCount = 0; - this.dataCache = null; - this.dataList = []; - } - - QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);} - return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);} - if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);} - this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}} - return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;} - for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}} - for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}} - this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);} - var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;} - this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}} - row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error("code length overflow. (" - +buffer.getLengthInBits() - +">" - +totalDataCount*8 - +")");} - if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);} - while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);} - while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;} - buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;} - buffer.put(QRCodeModel.PAD1,8);} - return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}} - var totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));} - return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));} - return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;} - return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}} - for(var row=0;row=256){n-=255;} - return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);} - if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));} - this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]]; - - function _isSupportCanvas() { - return typeof CanvasRenderingContext2D != "undefined"; - } - - // android 2.x doesn't support Data-URI spec - function _getAndroid() { - var android = false; - var sAgent = navigator.userAgent; - - if (/android/i.test(sAgent)) { // android - android = true; - var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i); - - if (aMat && aMat[1]) { - android = parseFloat(aMat[1]); - } - } - - return android; - } - - var svgDrawer = (function() { - - var Drawing = function (el, htOption) { - this._el = el; - this._htOption = htOption; - }; - - Drawing.prototype.draw = function (oQRCode) { - var _htOption = this._htOption; - var _el = this._el; - var nCount = oQRCode.getModuleCount(); - var nWidth = Math.floor(_htOption.width / nCount); - var nHeight = Math.floor(_htOption.height / nCount); - - this.clear(); - - function makeSVG(tag, attrs) { - var el = document.createElementNS('http://www.w3.org/2000/svg', tag); - for (var k in attrs) - if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]); - return el; - } - - var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight}); - svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); - _el.appendChild(svg); - - svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"})); - svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"})); - - for (var row = 0; row < nCount; row++) { - for (var col = 0; col < nCount; col++) { - if (oQRCode.isDark(row, col)) { - var child = makeSVG("use", {"x": String(row), "y": String(col)}); - child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template") - svg.appendChild(child); - } - } - } - }; - Drawing.prototype.clear = function () { - while (this._el.hasChildNodes()) - this._el.removeChild(this._el.lastChild); - }; - return Drawing; - })(); - - var useSVG = document.documentElement.tagName.toLowerCase() === "svg"; - - // Drawing in DOM by using Table tag - var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () { - var Drawing = function (el, htOption) { - this._el = el; - this._htOption = htOption; - }; - - /** - * Draw the QRCode - * - * @param {QRCode} oQRCode - */ - Drawing.prototype.draw = function (oQRCode) { - var _htOption = this._htOption; - var _el = this._el; - var nCount = oQRCode.getModuleCount(); - var nWidth = Math.floor(_htOption.width / nCount); - var nHeight = Math.floor(_htOption.height / nCount); - var aHTML = ['']; - - for (var row = 0; row < nCount; row++) { - aHTML.push(''); - - for (var col = 0; col < nCount; col++) { - aHTML.push(''); - } - - aHTML.push(''); - } - - aHTML.push('
'); - _el.innerHTML = aHTML.join(''); - - // Fix the margin values as real size. - var elTable = _el.childNodes[0]; - var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2; - var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2; - - if (nLeftMarginTable > 0 && nTopMarginTable > 0) { - elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px"; - } - }; - - /** - * Clear the QRCode - */ - Drawing.prototype.clear = function () { - this._el.innerHTML = ''; - }; - - return Drawing; - })() : (function () { // Drawing in Canvas - function _onMakeImage() { - this._elImage.src = this._elCanvas.toDataURL("image/png"); - this._elImage.style.display = "block"; - this._elCanvas.style.display = "none"; - } - - // Android 2.1 bug workaround - // http://code.google.com/p/android/issues/detail?id=5141 - if (this != undefined && this._android && this._android <= 2.1) { - var factor = 1 / window.devicePixelRatio; - var drawImage = CanvasRenderingContext2D.prototype.drawImage; - CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) { - if (("nodeName" in image) && /img/i.test(image.nodeName)) { - for (var i = arguments.length - 1; i >= 1; i--) { - arguments[i] = arguments[i] * factor; - } - } else if (typeof dw == "undefined") { - arguments[1] *= factor; - arguments[2] *= factor; - arguments[3] *= factor; - arguments[4] *= factor; - } - - drawImage.apply(this, arguments); - }; - } - - /** - * Check whether the user's browser supports Data URI or not - * - * @private - * @param {Function} fSuccess Occurs if it supports Data URI - * @param {Function} fFail Occurs if it doesn't support Data URI - */ - function _safeSetDataURI(fSuccess, fFail) { - var self = this; - self._fFail = fFail; - self._fSuccess = fSuccess; - - // Check it just once - if (self._bSupportDataURI === null) { - var el = document.createElement("img"); - var fOnError = function() { - self._bSupportDataURI = false; - - if (self._fFail) { - self._fFail.call(self); - } - }; - var fOnSuccess = function() { - self._bSupportDataURI = true; - - if (self._fSuccess) { - self._fSuccess.call(self); - } - }; - - el.onabort = fOnError; - el.onerror = fOnError; - el.onload = fOnSuccess; - el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data. - return; - } else if (self._bSupportDataURI === true && self._fSuccess) { - self._fSuccess.call(self); - } else if (self._bSupportDataURI === false && self._fFail) { - self._fFail.call(self); - } - }; - - /** - * Drawing QRCode by using canvas - * - * @constructor - * @param {HTMLElement} el - * @param {Object} htOption QRCode Options - */ - var Drawing = function (el, htOption) { - this._bIsPainted = false; - this._android = _getAndroid(); - - this._htOption = htOption; - this._elCanvas = document.createElement("canvas"); - this._elCanvas.width = htOption.width; - this._elCanvas.height = htOption.height; - el.appendChild(this._elCanvas); - this._el = el; - this._oContext = this._elCanvas.getContext("2d"); - this._bIsPainted = false; - this._elImage = document.createElement("img"); - this._elImage.alt = "Scan me!"; - this._elImage.style.display = "none"; - this._el.appendChild(this._elImage); - this._bSupportDataURI = null; - }; - - /** - * Draw the QRCode - * - * @param {QRCode} oQRCode - */ - Drawing.prototype.draw = function (oQRCode) { - var _elImage = this._elImage; - var _oContext = this._oContext; - var _htOption = this._htOption; - - var nCount = oQRCode.getModuleCount(); - var nWidth = _htOption.width / nCount; - var nHeight = _htOption.height / nCount; - var nRoundedWidth = Math.round(nWidth); - var nRoundedHeight = Math.round(nHeight); - - _elImage.style.display = "none"; - this.clear(); - - for (var row = 0; row < nCount; row++) { - for (var col = 0; col < nCount; col++) { - var bIsDark = oQRCode.isDark(row, col); - var nLeft = col * nWidth; - var nTop = row * nHeight; - _oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; - _oContext.lineWidth = 1; - _oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; - _oContext.fillRect(nLeft, nTop, nWidth, nHeight); - - // 안티 앨리어싱 방지 처리 - _oContext.strokeRect( - Math.floor(nLeft) + 0.5, - Math.floor(nTop) + 0.5, - nRoundedWidth, - nRoundedHeight - ); - - _oContext.strokeRect( - Math.ceil(nLeft) - 0.5, - Math.ceil(nTop) - 0.5, - nRoundedWidth, - nRoundedHeight - ); - } - } - - this._bIsPainted = true; - }; - - /** - * Make the image from Canvas if the browser supports Data URI. - */ - Drawing.prototype.makeImage = function () { - if (this._bIsPainted) { - _safeSetDataURI.call(this, _onMakeImage); - } - }; - - /** - * Return whether the QRCode is painted or not - * - * @return {Boolean} - */ - Drawing.prototype.isPainted = function () { - return this._bIsPainted; - }; - - /** - * Clear the QRCode - */ - Drawing.prototype.clear = function () { - this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height); - this._bIsPainted = false; - }; - - /** - * @private - * @param {Number} nNumber - */ - Drawing.prototype.round = function (nNumber) { - if (!nNumber) { - return nNumber; - } - - return Math.floor(nNumber * 1000) / 1000; - }; - - return Drawing; - })(); - - /** - * Get the type by string length - * - * @private - * @param {String} sText - * @param {Number} nCorrectLevel - * @return {Number} type - */ - function _getTypeNumber(sText, nCorrectLevel) { - var nType = 1; - var length = _getUTF8Length(sText); - - for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) { - var nLimit = 0; - - switch (nCorrectLevel) { - case QRErrorCorrectLevel.L : - nLimit = QRCodeLimitLength[i][0]; - break; - case QRErrorCorrectLevel.M : - nLimit = QRCodeLimitLength[i][1]; - break; - case QRErrorCorrectLevel.Q : - nLimit = QRCodeLimitLength[i][2]; - break; - case QRErrorCorrectLevel.H : - nLimit = QRCodeLimitLength[i][3]; - break; - } - - if (length <= nLimit) { - break; - } else { - nType++; - } - } - - if (nType > QRCodeLimitLength.length) { - throw new Error("Too long data"); - } - - return nType; - } - - function _getUTF8Length(sText) { - var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); - return replacedText.length + (replacedText.length != sText ? 3 : 0); - } - - /** - * @class QRCode - * @constructor - * @example - * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie"); - * - * @example - * var oQRCode = new QRCode("test", { - * text : "http://naver.com", - * width : 128, - * height : 128 - * }); - * - * oQRCode.clear(); // Clear the QRCode. - * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode. - * - * @param {HTMLElement|String} el target element or 'id' attribute of element. - * @param {Object|String} vOption - * @param {String} vOption.text QRCode link data - * @param {Number} [vOption.width=256] - * @param {Number} [vOption.height=256] - * @param {String} [vOption.colorDark="#000000"] - * @param {String} [vOption.colorLight="#ffffff"] - * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] - */ - QRCode = function (el, vOption) { - this._htOption = { - width : 256, - height : 256, - typeNumber : 4, - colorDark : "#000000", - colorLight : "#ffffff", - correctLevel : QRErrorCorrectLevel.H - }; - - if (typeof vOption === 'string') { - vOption = { - text : vOption - }; - } - - // Overwrites options - if (vOption) { - for (var i in vOption) { - this._htOption[i] = vOption[i]; - } - } - - if (typeof el == "string") { - el = document.getElementById(el); - } - - if (this._htOption.useSVG) { - Drawing = svgDrawer; - } - - this._android = _getAndroid(); - this._el = el; - this._oQRCode = null; - this._oDrawing = new Drawing(this._el, this._htOption); - - if (this._htOption.text) { - this.makeCode(this._htOption.text); - } - }; - - /** - * Make the QRCode - * - * @param {String} sText link data - */ - QRCode.prototype.makeCode = function (sText) { - this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel); - this._oQRCode.addData(sText); - this._oQRCode.make(); - this._el.title = sText; - this._oDrawing.draw(this._oQRCode); - this.makeImage(); - }; - - /** - * Make the Image from Canvas element - * - It occurs automatically - * - Android below 3 doesn't support Data-URI spec. - * - * @private - */ - QRCode.prototype.makeImage = function () { - if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) { - this._oDrawing.makeImage(); - } - }; - - /** - * Clear the QRCode - */ - QRCode.prototype.clear = function () { - this._oDrawing.clear(); - }; - - /** - * @name QRCode.CorrectLevel - */ - QRCode.CorrectLevel = QRErrorCorrectLevel; -})(); diff --git a/src/sapi/controller_sapi.ts b/src/sapi/controller_sapi.ts deleted file mode 100644 index b2a7b08..0000000 --- a/src/sapi/controller_sapi.ts +++ /dev/null @@ -1,973 +0,0 @@ -import {ModeOfOperation} from 'aes-js'; -import {v4 as uuid_v4, parse as uuid_parse} from 'uuid'; - -import {SapiRegionClass} from "./region"; -import {SapiClass, SapiClassStatus, SapiClassRet, SapiClassFuncId, SapiClassSerialAPISetupCmd, SapiClassNodeIdBaseType, SapiClassUpdateProcess, SapiClassDetectType, SapiClassDetectWait} from "./sapi"; -import {costruct_int, calcSigmaCRC16, intToBytearrayMsbLsb} from "../other/utilities"; -import {controller_vendor_ids} from "./vendorIds"; - -import {HardwareChipClass} from "../hardware/chip" - -export {ControllerSapiClassLearnMode, ControllerSapiClasstInitData, ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassCapabilities, ControllerSapiClassRegion, ControllerSapiClassLicense, ControllerSapiClassBoardInfo, ControllerSapiClassPower, ControllerSapiClasstNetworkIDs}; - -interface ControllerSapiClassLearnMode -{ - status:ControllerSapiClassStatus; - seq:number; -} - - -enum ControllerSapiClassStatus -{ - OK = SapiClassStatus.OK, - WRONG_LENGTH_CMD = SapiClassStatus.LAST_STATUS, - UNSUPPORT_CMD, - UNSUPPORT_SUB_CMD, - WRONG_IN_DATA, - INVALID_ARG, - NOT_SET, - WRONG_OUT_STATUS, - WRONG_OUT_SUB_CMD, - WRONG_SEQ, - WRONG_CRC, - WRONG_LENGTH_SEQ, - WRONG_LENGTH_CALLBACK_STATUS, - WRONG_LENGTH_CALLBACK, - NOT_INIT, - NOT_RAZBERRY, - INVALID_SET, - WRONG_SEND_DATA_LENGHT, - UNKNOWN, - TIMEOUT, - PROCESS, - LEARN_MODE_FALED, - WRONG_RESPONSE_STATUS, - WRONG_RESPONSE_LENGTH, - WRONG_CALLBACK_LENGTH, - WRONG_CALLBACK_SEQ, - WRONG_CALLBACK_STATUS, - TRANSMIT_COMPLETE_NO_ACK, -} - -interface ControllerSapiClassCapabilities -{ - status:ControllerSapiClassStatus; - ApiVersion:number; - ApiRevision:number; - VendorID:number; - VendorIDName:string; - VendorIDWebpage?:string; - cmd_mask:Array; -} - - -interface ControllerSapiClassRegion -{ - status:ControllerSapiClassStatus; - region:string; - region_array:string[]; -} - -interface ControllerSapiClassPower -{ - status:ControllerSapiClassStatus; - power_raw:number; - step:number; - min:number; - max:number; -} - -interface ControllerSapiClassLicenseFlag -{ - name:string; - title:string; - active:boolean; -} - -interface ControllerSapiClassLicense -{ - status:ControllerSapiClassStatus; - vallid:boolean; - vendor_id:number - max_nodes:number; - count_support:number; - crc16:number; - flags:{[key:number]: ControllerSapiClassLicenseFlag}; -} - -interface ControllerSapiClassBoardInfo -{ - status:ControllerSapiClassStatus; - core_version:number; - build_seq:number; - build_ts:number; - hw_revision:number; - sdk_version:number; - chip_uuid:Array; - sn_raw:Array; - bootloader_version:number; - bootloader_crc32:number; - lock_status:number; - lock_status_name:string; - se_version:number - chip_family:number; - chip_type:number; - keys_hash:number; -} - -interface ControllerSapiClasstNetworkIDs -{ - status:ControllerSapiClassStatus; - home:number; - node_id:number; -} - -interface ControllerSapiClasstInitData -{ - status:ControllerSapiClassStatus; - node_list:Array -} - -// ------------------------------------------------------------------------------------------------------ - -interface ControllerOutData -{ - data:Array; -} - -interface ControllerSapiClassSerialApiSetup -{ - status:ControllerSapiClassStatus; - data:Array; -} - -enum ControllerSapiClassLockStatus -{ - UNLOCKED = 0x0, - DBG_LOCKED, - APP_LOCKED, - FULL_LOCKED -} - -enum ControllerSapiClassLearMode -{ - DISABLED = 0x0, - INCLUSION_EXCLUSION = 0x1, - WIDE_INCLUSION = 0x2, - WIDE_EXCLUSION = 0x3, -} - -class ControllerSapiClass { - private readonly RAZ7_LICENSE_CMD = 0xF5; - private readonly RAZ7_LICENSE_CRC = 0x1D0F; - private readonly RAZ7_LICENSE_STATUS_OK = 0x00; - private readonly RAZ7_LICENSE_GET_SUBCMD = 0x00; - private readonly RAZ7_LICENSE_NONCE_SUBCMD = 0x02; - private readonly RAZ7_LICENSE_SET_SUBCMD = 0x01; - private readonly RAZ7_LICENSE_CMD_LEN = 0x30; - private readonly RAZ7_LICENSE_NONCE_LEN = 0x08; - private readonly RAZ7_LICENSE_IV_LEN = 0x10; - private readonly RAZ7_FLAG_OFFSET = 0x03 - private readonly RAZ7_FLAGS_SIZE = 0x08; - private readonly RAZ7_COUNT_SUPPORT_OFFSET = this.RAZ7_FLAG_OFFSET + this.RAZ7_FLAGS_SIZE - - private readonly LICENSE_KEY_LONG_RANGE:number = 0x5; - private readonly LICENSE_KEY_BACKUP:number = 0x2; - private readonly license_flags: {[key:number]: ControllerSapiClassLicenseFlag} = - { - 0x00: {name:"Controller Static API", title: "Enables static cotroller mode. User can switch Razberry to \"staic\" mode instead of default \"bridge\"", active:false}, - 0x01: {name:"Allow max RF power", title: "If set user can increase power amplifier up to 24dBm. Without that flag the user is limited by 7dBm", active:false}, - 0x02: {name:"Backup/Restore", title: "Enables backup/restore operations", active:false}, - 0x03: {name:"Battery save on sleeping", title: "If controller doesn't respond to WakeUp Notification, razberry responds itself with WakUp No more information. This prevents device battery discharge", active:false}, - 0x04: {name:"Advanced network diagnostics", title: "Enables backward RSSI dump and other extendended ZME features", active:false}, - 0x05: {name:"Z-Wave Long Range", title: "Enables Z-Wave Long Range support", active:false}, - 0x06: {name:"Fast communications", title: "Enables UART baudrate setting command", active:false}, - 0x07: {name:"Change vendor ID", title: "Maps subvendor to vendor field in controller information", active:false}, - 0x08: {name:"Promiscuous mode (Zniffer)", title: "Enables promisc functionality. Controller dumps all the packages in its network", active:false}, - 0x0A: {name:"RF jamming detection", title: "Enables jamming detection notifications", active:false}, - 0x0B: {name:"Zniffer in PTI mode", title: "Enables Packet Trace Interface. Device dumps all the packets it sends and receives. This uses external UART interface and doesn't consume time of the main core", active:false}, - 0x0C: {name:"Zniffer and Advanced Radio Tool", title: "Razberry works as direct transmitter", active:false}, - }; - - private readonly sapi:SapiClass; - private readonly raz_key:Array = [0x86, 0x78, 0x02, 0x09, 0x8D, 0x89, 0x4D, 0x41, 0x8F, 0x3F, 0xD2, 0x04, 0x2E, 0xEC, 0xF5, 0xC4, 0x05, 0x8C, 0xB9, 0x36, 0xA9, 0xCC, 0x4B, 0x87, 0x91, 0x39, 0x36, 0xB7, 0x43, 0x18, 0x37, 0x42]; - - private region:SapiRegionClass = new SapiRegionClass(); - private node_base:SapiClassNodeIdBaseType = SapiClassNodeIdBaseType.TYPE_8_BIT; - private seqNo:number = 0x1; - private capabilities:ControllerSapiClassCapabilities = {status:ControllerSapiClassStatus.NOT_INIT, ApiVersion:0x0, ApiRevision:0x0, VendorID:0x0, VendorIDName:"Unknown", cmd_mask:[]}; - private license:ControllerSapiClassLicense = {status:ControllerSapiClassStatus.NOT_INIT, vallid:false, vendor_id:0x0, max_nodes:0x0, count_support:0x0, flags:[], crc16:0x0}; - private board_info:ControllerSapiClassBoardInfo = { status:ControllerSapiClassStatus.NOT_INIT, core_version:0x0, build_seq:0x0, build_ts:0x0, hw_revision:0x0, sdk_version:0x0, chip_uuid:[], sn_raw:[], bootloader_version:0x0, bootloader_crc32:0x0,lock_status:0x0, - lock_status_name:"", se_version:0x0, chip_type:HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family:HardwareChipClass.FAMILY_ZGM13, keys_hash:0x2C6FAF52}; - - private _set_seq(): number { - const seq:number = this.seqNo; - this.seqNo += 1; - this.seqNo &= 0XFF;// 1 byte - if (this.seqNo == 0x0) - this.seqNo++; - return (seq); - } - - private _test_cmd(cmd:number): boolean { - if (this.capabilities.status != ControllerSapiClassStatus.OK) - return (false); - if (cmd <= 0x0) - return (false); - cmd--; - if ((cmd / 0x8) >= this.capabilities.cmd_mask.length) - return (false); - if ((this.capabilities.cmd_mask[(cmd - (cmd % 0x8)) / 0x8] & (0x1 << (cmd % 0x8))) == 0x0) - return (false); - return (true); - } - - private async _serial_api_setup(sub:SapiClassSerialAPISetupCmd, args:Array): Promise { - const out:ControllerSapiClassSerialApiSetup = {status:ControllerSapiClassStatus.OK, data:[]}; - if (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_SETUP) == false) { - out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; - return (out); - } - const serial_api_setup:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SETUP, [sub].concat(args)); - if (serial_api_setup.status != SapiClassStatus.OK) { - out.status = ((serial_api_setup.status as unknown) as ControllerSapiClassStatus); - return (out); - } - if (serial_api_setup.data.length < 0x1) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return (out); - } - if (serial_api_setup.data[0x0] == SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_UNSUPPORTED) { - out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; - return (out); - } - if (serial_api_setup.data[0x0] != sub) { - out.status = ControllerSapiClassStatus.UNSUPPORT_SUB_CMD; - return (out); - } - out.data = serial_api_setup.data.slice(0x1, serial_api_setup.data.length); - return (out); - } - - private async _get_capabilities(out:ControllerSapiClassCapabilities): Promise { - const capabilities_info:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, []); - if (capabilities_info.status != SapiClassStatus.OK) { - out.status = ((capabilities_info.status as unknown) as ControllerSapiClassStatus); - return ; - } - if (capabilities_info.data.length <= 0x8) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return ; - } - out.status = ControllerSapiClassStatus.OK; - out.ApiVersion = capabilities_info.data[0x0]; - out.ApiRevision = capabilities_info.data[0x1]; - out.VendorID = capabilities_info.data[0x2] << 0x8 | capabilities_info.data[0x3]; - out.cmd_mask = capabilities_info.data.slice(0x8, capabilities_info.data.length); - if (controller_vendor_ids[out.VendorID] != undefined) { - out.VendorIDName = controller_vendor_ids[out.VendorID].Name; - out.VendorIDWebpage = controller_vendor_ids[out.VendorID].Webpage; - } - } - - private async _readNVM(addr:number, size:number): Promise { - return (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF])); - } - - private async _license_send(out:ControllerOutData, data:Array): Promise { - let nonse_info:SapiClassRet; - - const seq:number = this._set_seq(); - nonse_info = await this.sapi.sendCommandUnSz(this.RAZ7_LICENSE_CMD, data.concat([seq])); - if (nonse_info.status != SapiClassStatus.OK) - return ((nonse_info.status as unknown) as ControllerSapiClassStatus); - if (nonse_info.data.length < 0x1) - return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); - if (nonse_info.data[0x0] != this.RAZ7_LICENSE_STATUS_OK) - return (ControllerSapiClassStatus.WRONG_OUT_STATUS); - nonse_info = await this.sapi.recvIncomingRequest(1000, this.RAZ7_LICENSE_CMD); - if (nonse_info.status != SapiClassStatus.OK) - return ((nonse_info.status as unknown) as ControllerSapiClassStatus); - if (nonse_info.data.length < 0x1)//0x1 seq - return (ControllerSapiClassStatus.WRONG_LENGTH_SEQ); - if (nonse_info.data[0x0] != seq) - return (ControllerSapiClassStatus.WRONG_SEQ); - out.data = nonse_info.data.slice(0x1, nonse_info.data.length); - return (ControllerSapiClassStatus.OK); - } - - private _license_decrypt(data:Array, iv:Array): Array|undefined { - const aesCtr = new ModeOfOperation.ofb(this.raz_key, iv); - const decryptedBytes:Uint8Array = aesCtr.decrypt(data); - const crc16:number = decryptedBytes[decryptedBytes.length - 0x2] |(decryptedBytes[decryptedBytes.length - 0x1] << 0x8); - if (calcSigmaCRC16(this.RAZ7_LICENSE_CRC, decryptedBytes, 0x0, decryptedBytes.length - 0x2) != crc16) - return (undefined); - return (Array.from(decryptedBytes)); - } - - private _license_encrypt(sub_cmd:number, data:Array, iv:Array): Array { - const pack:Array = [sub_cmd].concat(data); - while(pack.length < (this.RAZ7_LICENSE_CMD_LEN - 0x2)) - pack.push(0xFF); - const crc:number = calcSigmaCRC16(this.RAZ7_LICENSE_CRC, pack, 0, pack.length); - pack.push(crc & 0xFF); - pack.push((crc >> 0x8) & 0xFF); - const aesCtr = new ModeOfOperation.ofb(this.raz_key, iv); - const crypted:Array = Array.from(aesCtr.encrypt(pack)); - return (crypted); - } - - private async _license_get_nonce(out:ControllerOutData): Promise { - const status:ControllerSapiClassStatus = await this._license_send(out, []) - if (status != ControllerSapiClassStatus.OK) - return (status); - if (out.data.length != this.RAZ7_LICENSE_CMD_LEN + this.RAZ7_LICENSE_IV_LEN) - return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); - const decrypt:Array|undefined = this._license_decrypt(out.data.slice(0x0, 0x0 + this.RAZ7_LICENSE_CMD_LEN), out.data.slice(this.RAZ7_LICENSE_CMD_LEN, this.RAZ7_LICENSE_CMD_LEN + this.RAZ7_LICENSE_IV_LEN)); - if (decrypt == undefined) - return (ControllerSapiClassStatus.WRONG_CRC); - if (decrypt.length < 0x2 + this.RAZ7_LICENSE_NONCE_LEN) - return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); - if (decrypt[0x0] != this.RAZ7_LICENSE_NONCE_SUBCMD) - return (ControllerSapiClassStatus.WRONG_OUT_STATUS); - if (decrypt[0x1] != this.RAZ7_LICENSE_STATUS_OK) - return (ControllerSapiClassStatus.WRONG_OUT_STATUS); - out.data = decrypt.slice(0x2, 0x2 + this.RAZ7_LICENSE_NONCE_LEN); - return (ControllerSapiClassStatus.OK); - } - - private async _license(sub_cmd:number, data:Array, out:ControllerOutData): Promise { - let status:ControllerSapiClassStatus; - - if (this._test_cmd(this.RAZ7_LICENSE_CMD) == false) - return (ControllerSapiClassStatus.UNSUPPORT_CMD); - if (this.isRazberry7() == false) - return (ControllerSapiClassStatus.NOT_RAZBERRY); - status = await this._license_get_nonce(out); - if (status != ControllerSapiClassStatus.OK) - return (status); - const iv_y:Array = Array.from(uuid_parse(uuid_v4())).slice(0x0, 0x8); - const iv:Array = out.data.concat(iv_y); - const crypted:Array = this._license_encrypt(sub_cmd, data, iv); - status = await this._license_send(out, crypted.concat(iv_y)); - if (status != ControllerSapiClassStatus.OK) - return (status); - const decrypt:Array|undefined = this._license_decrypt(out.data, iv); - if (decrypt == undefined) - return (ControllerSapiClassStatus.WRONG_CRC); - if (decrypt.length < 0x2) - return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); - if (decrypt[0x0] != sub_cmd) - return (ControllerSapiClassStatus.WRONG_OUT_SUB_CMD); - if (decrypt[0x1] != this.RAZ7_LICENSE_STATUS_OK) - return (ControllerSapiClassStatus.WRONG_OUT_STATUS); - out.data = decrypt.slice(0x2, decrypt.length); - return (ControllerSapiClassStatus.OK); - } - - private _license_decode(license_info:ControllerSapiClassLicense, raw_license:Array): void { - let byte_i:number, bit_i:number; - - if (raw_license.length < 32) - return ; - raw_license = raw_license.slice(0, 32); - const crc16:number = raw_license[raw_license.length - 0x2] |(raw_license[raw_license.length - 0x1] << 0x8); - if (calcSigmaCRC16(this.RAZ7_LICENSE_CRC, raw_license, 0x0, raw_license.length - 0x2) != crc16) - return ; - license_info.crc16 = crc16; - license_info.vallid = true; - license_info.vendor_id = (raw_license[0x0] << 0x8) | raw_license[0x1]; - license_info.max_nodes = raw_license[0x2]; - license_info.count_support = (raw_license[this.RAZ7_COUNT_SUPPORT_OFFSET+1] << 8) + raw_license[this.RAZ7_COUNT_SUPPORT_OFFSET]; - byte_i = 0x0; - while (byte_i < this.RAZ7_FLAGS_SIZE) { - bit_i = 0x0; - while (bit_i < 0x8) { - if ((raw_license[this.RAZ7_FLAG_OFFSET + byte_i] & (0x1 << bit_i)) != 0x0) { - if (license_info.flags[byte_i * 0x8 + bit_i] != undefined) - license_info.flags[byte_i * 0x8 + bit_i].active = true; - } - bit_i++; - } - byte_i++; - } - return ; - } - - private async _license_get(license_info:ControllerSapiClassLicense): Promise { - const out:ControllerOutData = {data:[]}; - license_info.flags = this.license_flags; - license_info.status = await this._license(this.RAZ7_LICENSE_GET_SUBCMD, [], out); - if (license_info.status != ControllerSapiClassStatus.OK) - return ; - this._license_decode(license_info, out.data); - return ; - } - - private async _get_board_info(out:ControllerSapiClassBoardInfo): Promise { - let lock_status_name:string; - - if (this._test_cmd(SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER) == false) { - out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; - return ; - } - const board_info:SapiClassRet = await this._readNVM(0xFFFF00, 0x31); - if (board_info.status != SapiClassStatus.OK) { - out.status = ((board_info.status as unknown) as ControllerSapiClassStatus); - return ; - } - const data:Array = board_info.data; - if (data.length < 49) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return ; - } - out.status = ControllerSapiClassStatus.OK; - out.core_version = costruct_int(data.slice(0, 0 + 2),2, false); - out.build_seq = costruct_int(data.slice(2, 2 +4), 4, false); - out.build_ts = costruct_int(data.slice(6, 6 + 4), 4, false); - out.hw_revision = costruct_int(data.slice(10, 10 + 2), 2, false); - out.sdk_version = costruct_int(data.slice(12, 12 + 4), 4, false); - out.chip_uuid = data.slice(16, 16 + 8); - out.sn_raw = data.slice(24,40); - out.bootloader_version = costruct_int(data.slice(40, 44), 4, false); - out.bootloader_crc32 = costruct_int(data.slice(44, 48), 4, false); - out.lock_status = data[48]; - switch (data[48]) { - case ControllerSapiClassLockStatus.UNLOCKED: - lock_status_name = "UNLOCKED"; - break ; - case ControllerSapiClassLockStatus.DBG_LOCKED: - lock_status_name = "DBG_LOCKED"; - break ; - case ControllerSapiClassLockStatus.APP_LOCKED: - lock_status_name = "APP_LOCKED"; - break ; - case ControllerSapiClassLockStatus.FULL_LOCKED: - lock_status_name = "FULL_LOCKED"; - break ; - default: - lock_status_name = "UNKNOWN"; - break ; - } - out.lock_status_name = lock_status_name; - const se_version_offset:number = 49; - const se_version_size:number = 0x4; - if (data.length < se_version_offset + se_version_size) - return ; - out.se_version = costruct_int(data.slice(se_version_offset, se_version_offset + se_version_size), se_version_size, false); - const chip_offset:number = se_version_offset + se_version_size; - const chip_size:number = 0x2; - if (data.length < chip_offset + chip_size) - return ; - out.chip_family = data[chip_offset]; - out.chip_type = data[chip_offset + 0x1]; - const key_hash_offset:number = chip_offset + chip_size; - const key_hash_size:number = 0x4; - if (data.length < key_hash_offset + key_hash_size) - return ; - out.keys_hash = costruct_int(data.slice(key_hash_offset, key_hash_offset + key_hash_size), key_hash_size, false); - } - - private async _begin(test:boolean):Promise { - let us_lr:boolean, eu_lr:boolean; - - await this._get_capabilities(this.capabilities); - if (test == true && this.capabilities.status != ControllerSapiClassStatus.OK) - return ; - const node_base_type:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET, [SapiClassNodeIdBaseType.TYPE_16_BIT]); - if (node_base_type.data.length < 0x1 || node_base_type.data[0x0] == 0x0) - this.node_base = SapiClassNodeIdBaseType.TYPE_8_BIT; - else - this.node_base = SapiClassNodeIdBaseType.TYPE_16_BIT; - if (this.isRazberry7() == true) { - await this._license_get(this.license); - await this._get_board_info(this.board_info); - us_lr = false; - eu_lr = false; - if (this.license.status == ControllerSapiClassStatus.OK) { - if (this.license.flags[this.LICENSE_KEY_LONG_RANGE] != undefined && this.license.flags[this.LICENSE_KEY_LONG_RANGE].active == true) { - us_lr = true; - const version:number = (this.capabilities.ApiVersion << 0x8) | this.capabilities.ApiRevision; - if (this.capabilities.status == ControllerSapiClassStatus.OK && version >= 0x72D) - eu_lr = true; - } - } - this.region = new SapiRegionClass(us_lr, eu_lr); - } - else - this.region = new SapiRegionClass(); - return ; - } - - private _node_to_bytes(node:number): Uint8Array { - if (this.node_base == SapiClassNodeIdBaseType.TYPE_16_BIT) - return (intToBytearrayMsbLsb(node, 0x2)); - return (intToBytearrayMsbLsb(node, 0x1)); - } - - private async _load_file(addr:number, data:Uint8Array, process:SapiClassUpdateProcess|null): Promise { - let step:number, i:number, percentage:number; - step = this.getQuantumSize(); - percentage = 0x0; - i = 0x0 - while (i < data.length) { - if (i + step > data.length) - step = data.length - i; - percentage = (i * 100.0) / data.length; - if (process != null) - process(percentage); - const status:ControllerSapiClassStatus = await this.nvmWrite(addr, data.subarray(i, i + step)); - if (status != ControllerSapiClassStatus.OK) - return (status); - i = i + step - addr = addr + step - } - if (process != null && percentage < 100.00) - process(100.00); - return (ControllerSapiClassStatus.OK); - } - - private _isRazberry(): boolean { - if (this.capabilities.status != ControllerSapiClassStatus.OK) - return (false); - if (this.capabilities.VendorID == 0x0115 || this.capabilities.VendorID == 0x0147) - return (true); - return (false); - } - - private async _learn_mode(mode:ControllerSapiClassLearMode): Promise { - const out:ControllerSapiClassLearnMode = {status:ControllerSapiClassStatus.OK, seq:0x0}; - if (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE) == false) { - out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; - return (out); - } - const seq:number = this._set_seq(); - const send_mode:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE, [mode, seq]); - if (send_mode.status != SapiClassStatus.OK) { - out.status = ((send_mode.status as unknown) as ControllerSapiClassStatus); - return (out); - } - if (send_mode.data.length != 0x1) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK_STATUS; - return (out); - } - if (send_mode.data[0x0] != 0x1) { - out.status = ControllerSapiClassStatus.WRONG_CALLBACK_STATUS; - return (out); - } - out.seq = seq; - return (out); - } - - public async getPower(): Promise { - const power_get_out:ControllerSapiClassPower = {status: ControllerSapiClassStatus.OK, power_raw:0x0, step:0x1, min:1, max:247}; - if (this.isRazberry7() == false) { - power_get_out.status = ControllerSapiClassStatus.NOT_RAZBERRY; - return (power_get_out); - } - const power_get:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET, []); - if (power_get.status != ControllerSapiClassStatus.OK) { - power_get_out.status = power_get.status - return (power_get_out); - } - if (power_get.data.length < 0x2) { - power_get_out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return (power_get_out); - } - if (power_get.data[0x1] != 0x0) { - power_get_out.status = ControllerSapiClassStatus.NOT_RAZBERRY; - return (power_get_out); - } - power_get_out.power_raw = power_get.data[0x0]; - return (power_get_out); - } - - public async setPower(power_raw:number): Promise { - if (this.isRazberry7() == false) - return (ControllerSapiClassStatus.NOT_RAZBERRY); - const power_set:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET, [power_raw, 0x0]); - if (power_set.status != ControllerSapiClassStatus.OK) - return (power_set.status); - if (power_set.data.length < 0x1) - return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); - if (power_set.data[0x1] == 0x0) - return (ControllerSapiClassStatus.INVALID_SET); - return (ControllerSapiClassStatus.OK); - } - - public isLr(region:string): boolean { - return (this.region.isLr(region)); - } - - public isLicenseSupportBackup(): boolean { - if (this.license.status != ControllerSapiClassStatus.OK) - return (false); - if (this.license.flags[this.LICENSE_KEY_BACKUP] != undefined && this.license.flags[this.LICENSE_KEY_BACKUP].active == true) - return (true); - return (false); - } - - public async getRegion(): Promise { - let region:string|undefined; - - const out:ControllerSapiClassRegion = {status:ControllerSapiClassStatus.OK, region:"", region_array:this.region.getListRegion()}; - if (this.isRazberry7() == true) { - const custom_region_info:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_PROPRIETARY_2, [0xFF]); - if (custom_region_info.status != SapiClassStatus.OK) { - out.status = ((custom_region_info.status as unknown) as ControllerSapiClassStatus); - return (out); - } - if (custom_region_info.data.length < 0x1) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return (out); - } - region = this.region.getNameRegionCustom(custom_region_info.data[0x0]); - if (region == undefined) { - out.status = ControllerSapiClassStatus.WRONG_IN_DATA; - return (out); - } - out.region = region; - } - else { - const rerion_get:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_GET, []); - if (rerion_get.status != ControllerSapiClassStatus.OK) { - out.status = rerion_get.status; - return (out); - } - if (rerion_get.data.length < 0x1) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return (out); - } - region = this.region.getNameRegion(rerion_get.data[0x0]); - if (region == undefined) { - out.status = ControllerSapiClassStatus.WRONG_IN_DATA; - return (out); - } - out.region = region; - } - return (out); - } - - public async setRegion(region:string): Promise { - if (this.isRazberry7() == true) { - const custom_region_id:number|undefined = this.region.getIdRegionCustom(region); - if (custom_region_id == undefined) - return (ControllerSapiClassStatus.INVALID_ARG); - const custom_region_set:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_PROPRIETARY_2, [custom_region_id]); - if (custom_region_set.status != SapiClassStatus.OK) - return (((custom_region_set.status as unknown) as ControllerSapiClassStatus)); - const res:SapiClassRet = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED); - if (res.status != SapiClassStatus.OK) - return (((res.status as unknown) as ControllerSapiClassStatus)); - await this._begin(false); - return (ControllerSapiClassStatus.OK); - } - if (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) == false) - return (ControllerSapiClassStatus.UNSUPPORT_CMD); - const region_id:number|undefined = this.region.getIdRegion(region); - if (region_id == undefined) - return (ControllerSapiClassStatus.INVALID_ARG); - const rerion_get:ControllerSapiClassSerialApiSetup = await this._serial_api_setup(SapiClassSerialAPISetupCmd.SERIAL_API_SETUP_CMD_RF_REGION_SET, [region_id]); - if (rerion_get.status != ControllerSapiClassStatus.OK) - return (rerion_get.status); - if (rerion_get.data.length < 0x1) - return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); - if (rerion_get.data[0x0] == 0x0) - return (ControllerSapiClassStatus.NOT_SET); - return (this.softReset()); - } - - public async softReset(timeout:number = 3000): Promise { - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], timeout, SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED); - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ControllerSapiClassStatus); - await this._begin(false); - return (ControllerSapiClassStatus.OK); - } - - public async setDefault(): Promise { - if (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT) == false) - return (ControllerSapiClassStatus.UNSUPPORT_CMD); - const seq:number = this._set_seq(); - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_SET_DEFAULT, [seq]); - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ControllerSapiClassStatus); - if (res.data.length < 0x1)//0x1 seq - return (ControllerSapiClassStatus.WRONG_LENGTH_SEQ); - if (res.data[0x0] != seq) - return (ControllerSapiClassStatus.WRONG_SEQ); - await this._begin(false); - return (ControllerSapiClassStatus.OK); - } - - public async nvmWrite(addr:number, data:Uint8Array): Promise { - if (this._test_cmd(SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER) == false) - return (ControllerSapiClassStatus.UNSUPPORT_CMD); - const data_addr:Array = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (data.length >> 8) & 0xFF, data.length & 0xFF]; - if (data.length > this.getQuantumSize()) - return (ControllerSapiClassStatus.WRONG_SEND_DATA_LENGHT); - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(Array.from(data))); - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ControllerSapiClassStatus); - if (res.data.length < 0x1) - return (ControllerSapiClassStatus.WRONG_LENGTH_CMD); - if (res.data[0x0] != 0x1) - return (ControllerSapiClassStatus.NOT_SET); - return (ControllerSapiClassStatus.OK); - } - - public async updateFirmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - if (this.isRazberry7() == false) - return (ControllerSapiClassStatus.NOT_RAZBERRY); - const status:ControllerSapiClassStatus = await this._load_file(0x3A000, data, process); - if (status != ControllerSapiClassStatus.OK) - return (status); - const res:SapiClassDetectWait = await this.sapi.update(0x3A000, target_type); - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ControllerSapiClassStatus); - return (ControllerSapiClassStatus.OK); - } - - public async updateBotloader(data:Uint8Array, process:SapiClassUpdateProcess|null): Promise { - if (this.isRazberry7() == false) - return (ControllerSapiClassStatus.NOT_RAZBERRY); - const status:ControllerSapiClassStatus = await this._load_file(0x3A000, data, process); - if (status != ControllerSapiClassStatus.OK) - return (status); - const seq:number = this._set_seq(); - const response:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_PROPRIETARY_4, [seq]); - if (response.status != SapiClassStatus.OK) - return (((response.status as unknown) as ControllerSapiClassStatus)); - if (response.data.length < 0x1) - return (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH); - if (response.data[0x0] != 0x00) - return (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS); - const callback = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_PROPRIETARY_4,); - if (callback.status != SapiClassStatus.OK) - return (((callback.status as unknown) as ControllerSapiClassStatus)); - if (callback.data.length < 0x2)//0x1 seq - return (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH); - if (callback.data[0x0] != seq) - return (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ); - if (callback.data[0x1] != 0x0) - return (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS); - return (ControllerSapiClassStatus.OK); - } - - public async clear_node(): Promise { - if (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION) == false) - return (ControllerSapiClassStatus.UNSUPPORT_CMD); - const send_mode:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION, [0x80, 2, 7, 0], 200); - if (send_mode.status == SapiClassStatus.OK || send_mode.status == SapiClassStatus.TIMEOUT_RCV) - return (ControllerSapiClassStatus.OK); - return (((send_mode.status as unknown) as ControllerSapiClassStatus)); - } - - public async includeWide(): Promise { - return (await this._learn_mode(ControllerSapiClassLearMode.WIDE_INCLUSION)); - } - - public async excludingWide(): Promise { - return (await this._learn_mode(ControllerSapiClassLearMode.WIDE_EXCLUSION)); - } - - public async include_excluding(): Promise { - return (await this._learn_mode(ControllerSapiClassLearMode.INCLUSION_EXCLUSION)); - } - - public async disabled(): Promise { - const res:ControllerSapiClassLearnMode = await this._learn_mode(ControllerSapiClassLearMode.DISABLED); - if (res.status != ControllerSapiClassStatus.OK) - return (res.status); - return (ControllerSapiClassStatus.OK); - } - - private async _waitLearn(timeout:number, seq:number): Promise { - const res:SapiClassRet = await this.sapi.recvIncomingRequest(timeout); - if (res.status == SapiClassStatus.NO_SOF) - return (ControllerSapiClassStatus.PROCESS); - if (res.cmd != SapiClassFuncId.FUNC_ID_ZW_SET_LEARN_MODE) - return (ControllerSapiClassStatus.PROCESS); - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ControllerSapiClassStatus); - if (res.data.length < 0x3) - return (ControllerSapiClassStatus.WRONG_LENGTH_CALLBACK); - if (res.data[0x0] != seq) - return (ControllerSapiClassStatus.WRONG_SEQ); - if (res.data[0x1] == 0x6) - return (ControllerSapiClassStatus.OK); - if (res.data[0x1] == 0x1) - return (ControllerSapiClassStatus.PROCESS); - return (ControllerSapiClassStatus.LEARN_MODE_FALED); - } - - public async waitLearn(timeout:number, seq:number): Promise { - const status:ControllerSapiClassStatus = await this._waitLearn(timeout, seq); - if (status == ControllerSapiClassStatus.OK) - await this._begin(false); - return (status); - } - - public async GetInitData(): Promise { - let byte_i:number, bit_i:number; - - const out:ControllerSapiClasstInitData = {status:ControllerSapiClassStatus.OK, node_list:[]}; - if (this._test_cmd(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA) == false) { - out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; - return (out); - } - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_INIT_DATA, []); - if (res.status != SapiClassStatus.OK) { - out.status = ((res.status as unknown) as ControllerSapiClassStatus) - return (out); - } - if (res.data.length < 0x5 + 29) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return (out); - } - byte_i = 0x0; - while (byte_i < 29) { - bit_i = 0x0; - while (bit_i < 0x8) { - if ((res.data[0x3 + byte_i] & (0x1 << bit_i)) != 0x0) - out.node_list.push(byte_i * 0x8 + bit_i + 0x1); - bit_i++; - } - byte_i++; - } - return (out); - } - - public async GetNetworkIDs(): Promise { - const out:ControllerSapiClasstNetworkIDs = {status:ControllerSapiClassStatus.OK, home:0x0, node_id:0x0}; - if (this._test_cmd(SapiClassFuncId.FUNC_ID_MEMORY_GET_ID) == false) { - out.status = ControllerSapiClassStatus.UNSUPPORT_CMD; - return (out); - } - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_MEMORY_GET_ID, []); - if (res.status != SapiClassStatus.OK) { - out.status = ((res.status as unknown) as ControllerSapiClassStatus) - return (out); - } - if (res.data.length < 0x4 + this.node_base) { - out.status = ControllerSapiClassStatus.WRONG_LENGTH_CMD; - return (out); - } - out.home = costruct_int(res.data.slice(0x0, 0x4), 0x4, false); - out.node_id = costruct_int(res.data.slice(0x4, 0x4 + this.node_base), this.node_base, false); - return (out); - } - - public async removeFaledNode(node:number): Promise { - if (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID) == false) - return (ControllerSapiClassStatus.UNSUPPORT_CMD); - const seq:number = this._set_seq(); - const response:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID, Array.from(this._node_to_bytes(node)).concat([seq])); - if (response.status != SapiClassStatus.OK) - return (((response.status as unknown) as ControllerSapiClassStatus)); - if (response.data.length < 0x1) - return (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH); - if (response.data[0x0] != 0x00) - return (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS); - const callback = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_ZW_REMOVE_FAILED_NODE_ID); - if (callback.status != SapiClassStatus.OK) - return (((callback.status as unknown) as ControllerSapiClassStatus)); - if (callback.data.length < 0x2)//0x1 seq - return (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH); - if (callback.data[0x0] != seq) - return (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ); - if (callback.data[0x1] != 0x1) - return (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS); - return (ControllerSapiClassStatus.OK); - } - - public async nop(node:number): Promise { - if (this._test_cmd(SapiClassFuncId.FUNC_ID_ZW_SEND_DATA) == false) - return (ControllerSapiClassStatus.UNSUPPORT_CMD); - const seq:number = this._set_seq(); - const response:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_ZW_SEND_DATA, Array.from(this._node_to_bytes(node)).concat([0x1, 0x0, 0x1, seq])); - if (response.status != SapiClassStatus.OK) - return (((response.status as unknown) as ControllerSapiClassStatus)); - if (response.data.length < 0x1) - return (ControllerSapiClassStatus.WRONG_RESPONSE_LENGTH); - if (response.data[0x0] != 0x01) - return (ControllerSapiClassStatus.WRONG_RESPONSE_STATUS); - const callback = await this.sapi.recvIncomingRequest(1000, SapiClassFuncId.FUNC_ID_ZW_SEND_DATA); - if (callback.status != SapiClassStatus.OK) - return (((callback.status as unknown) as ControllerSapiClassStatus)); - if (callback.data.length < 0x2)//0x1 seq - return (ControllerSapiClassStatus.WRONG_CALLBACK_LENGTH); - if (callback.data[0x0] != seq) - return (ControllerSapiClassStatus.WRONG_CALLBACK_SEQ); - if (callback.data[0x1] == 0x1) - return (ControllerSapiClassStatus.TRANSMIT_COMPLETE_NO_ACK); - if (callback.data[0x1] != 0x0) - return (ControllerSapiClassStatus.WRONG_CALLBACK_STATUS); - return (ControllerSapiClassStatus.OK); - } - - public getBoardInfo(): ControllerSapiClassBoardInfo { - return (this.board_info); - } - - public async setLicense(license:Array): Promise { - const out:ControllerOutData = {data:[]}; - const status:ControllerSapiClassStatus = await this._license(this.RAZ7_LICENSE_SET_SUBCMD, license, out); - if (status != ControllerSapiClassStatus.OK) - return (status); - await this._license_get(this.license); - return (this.license.status); - } - - public getLicense(): ControllerSapiClassLicense { - return (this.license); - } - - public getCapabilities(): ControllerSapiClassCapabilities { - return (this.capabilities); - } - - public isRazberry5(): boolean { - if (this._isRazberry() == false) - return (false); - if (this.capabilities.ApiVersion == 0x5) - return (true); - return (false); - } - - public isRazberry7(): boolean { - if (this._isRazberry() == false) - return (false); - if (this.capabilities.ApiVersion == 0x7) - return (true); - return (false); - } - - public async connect(): Promise { - this.node_base = SapiClassNodeIdBaseType.TYPE_8_BIT; - this.capabilities.status = ControllerSapiClassStatus.NOT_INIT; - this.license.status = ControllerSapiClassStatus.NOT_INIT; - this.board_info.status = ControllerSapiClassStatus.NOT_INIT; - await this._begin(true); - } - - public getQuantumSize(): number { - return (this.sapi.getQuantumSize()); - } - - public lock() { - return (this.sapi.lock()); - } - - public unlock() { - return (this.sapi.unlock()); - } - - public is_busy(): boolean { - return (this.sapi.is_busy()); - } - - constructor(sapi:SapiClass) { - this.sapi = sapi; - } -} \ No newline at end of file diff --git a/src/sapi/region.ts b/src/sapi/region.ts deleted file mode 100644 index 5330cd0..0000000 --- a/src/sapi/region.ts +++ /dev/null @@ -1,119 +0,0 @@ -export {SapiRegionClass}; - - -class SapiRegionClass { - private us_lr:boolean; - private eu_lr:boolean; - - private readonly REGION_EU:string = "EU"; - private readonly REGION_US:string = "US"; - private readonly REGION_ANZ:string = "ANZ"; - private readonly REGION_HK:string = "HK"; - private readonly REGION_IN:string = "IN"; - private readonly REGION_IL:string = "IL"; - private readonly REGION_RU:string = "RU"; - private readonly REGION_CN:string = "CN"; - private readonly REGION_JP:string = "JP"; - private readonly REGION_KR:string = "KR"; - private readonly REGION_EU_LR:string = "EU_LR"; - private readonly REGION_US_LR:string = "US_LR"; - - private readonly region_lr:Array = - [ - this.REGION_EU_LR, this.REGION_US_LR - ]; - private readonly region_standart:Array = - [ - this.REGION_EU, this.REGION_US, this.REGION_ANZ, this.REGION_HK, this.REGION_IN, - this.REGION_IL, this.REGION_RU, this.REGION_CN, this.REGION_JP, this.REGION_KR, - ]; - private readonly region_string_to_number: Array<{ name: string;id: number;}> = - [ - {name:this.REGION_EU, id:0x0}, {name:this.REGION_US, id:0x01}, {name:this.REGION_ANZ, id:0x02}, - {name:this.REGION_HK, id:0x3}, {name:this.REGION_IN, id:0x5}, {name:this.REGION_IL, id:0x6}, - {name:this.REGION_RU, id:0x7}, {name:this.REGION_CN, id:0x8}, {name:this.REGION_JP, id:0x20}, - {name:this.REGION_KR, id:0x21}, {name:this.REGION_US_LR, id:0x9}, {name:this.REGION_EU_LR, id:0xB}, - {name:this.REGION_EU, id:0xFF} - ]; - private readonly region_custom_string_to_number: Array<{ name: string;id: number;}> = - [ - {name:this.REGION_EU, id:0x0}, {name:this.REGION_US, id:0x03}, {name:this.REGION_ANZ, id:0x04}, - {name:this.REGION_HK, id:0x05}, {name:this.REGION_IN, id:0x02}, {name:this.REGION_IL, id:0x09}, - {name:this.REGION_RU, id:0x01}, {name:this.REGION_CN, id:0x06}, {name:this.REGION_JP, id:0x07}, - {name:this.REGION_KR, id:0x08}, {name:this.REGION_US_LR, id:0x0B}, {name:this.REGION_EU_LR, id:0x0C}, - ]; - - public isLr(region:string): boolean { - if (this.region_lr.includes(region) == false) - return (false); - return (true); - } - - private _getNameRegion(region:number, region_conv:Array<{ name: string;id: number;}>): string|undefined { - let i; - - i = 0x0; - while (i < region_conv.length) { - if (region_conv[i].id == region) { - const region_list:Array = this.getListRegion(); - if (region_list.includes(region_conv[i].name) == false) - return (undefined); - return (region_conv[i].name); - } - i++; - } - return (undefined); - } - - private _getIdRegion(region:string, region_conv:Array<{ name: string;id: number;}>): number|undefined { - let i; - - const region_list:Array = this.getListRegion(); - if (region_list.includes(region) == false) - return (undefined); - i = 0x0; - while (i < region_conv.length) { - if (region_conv[i].name == region) - return (region_conv[i].id); - i++; - } - return (undefined); - } - - public getNameRegion(region:number): string|undefined { - return (this._getNameRegion(region, this.region_string_to_number)); - } - - public getNameRegionCustom(region:number): string|undefined { - return (this._getNameRegion(region, this.region_custom_string_to_number)); - } - - public getIdRegion(region:string): number|undefined { - return (this._getIdRegion(region, this.region_string_to_number)); - } - - public getIdRegionCustom(region:string): number|undefined { - return (this._getIdRegion(region, this.region_custom_string_to_number)); - } - - public getListRegion(): Array { - let out:Array; - - out = this.region_standart; - if (this.us_lr == true) - out = out.concat([this.REGION_US_LR]); - if (this.eu_lr == true) - out = out.concat([this.REGION_EU_LR]); - out = out.sort(); - return (out); - } - - constructor(us_lr?:boolean, eu_lr?:boolean) { - if (us_lr == undefined) - us_lr = false; - if (eu_lr == undefined) - eu_lr = false; - this.us_lr = us_lr; - this.eu_lr = eu_lr; - } -} \ No newline at end of file diff --git a/src/sapi/sapi.ts b/src/sapi/sapi.ts deleted file mode 100644 index 2dd7275..0000000 --- a/src/sapi/sapi.ts +++ /dev/null @@ -1,1041 +0,0 @@ -import {sleep, checksum, calcSigmaCRC16} from "../other/utilities"; -import {WEB_TOOLS_BETA} from "../other/define" -import {splitHexBuff} from "../other/utilities" - -export {SapiClass, SapiClassStatus, SapiClassFuncId, SapiClassRet, SapiClassSerialAPISetupCmd, SapiSerialOptionFilters, SapiClassNodeIdBaseType, SapiClassDetect, SapiClassDetectType, SapiClassDetectTypeFunc, SapiClassDetectWait, SapiClassUpdateProcess}; - -interface SapiClassDetectTypeFunc { - (): Promise -} - -type SapiClassUpdateProcess = (percentage:number) => void; - -enum SapiClassDetectType -{ - RAZBERRY, - ZUNO, - UNKNOWN, -} - -interface SapiClassDetect -{ - status:SapiClassStatus; - type:SapiClassDetectType; - baudrate:number; -} - -interface SapiClassDetectWait -{ - status:SapiClassStatus; - type:SapiClassDetectType; -} - -interface SapiSerialOptionFilters -{ - usbVendorId:number; - usbProductId:number; -} - -interface SapiClassRet -{ - status:SapiClassStatus; - crc:number; - cmd:number; - raw:Array; - data:Array; -} - -enum SapiClassStatus -{ - OK = 0x00, - NO_ACK, - INVALID_DATA_LEN, - INVALID_CRC, - NO_SOF, - NO_LENGHT, - WRITE, - WRONG_LENGHT, - WRONG_CMD, - PORT_NOT_OPEN, - PORT_NOT_CLOSE, - PORT_NOT_REQUEST, - PORT_USED, - PORT_BUSY, - TIMEOUT_RCV, - SERIAL_UN_SUPPORT, - SERIAL_BUSY, - REQUEST_ONE_SHOT, - REQUEST_NO_SELECT, - ZUNO_NO_FREEZE, - ZUNO_START_WRONG_LENG, - ZUNO_START_WRONG_DATA, - ZUNO_START_WRONG_FRAME, - DETECTED_UNC_COMMAND, - DETECTED_NOT_FIND, - DETECTED_CANCEL, - DETECTED_UNC, - DETECTED_TARGET_TYPE, - UPDATE_UNK, - UPDATE_TIMEOUT, - UPDATE_PROCESS, - UPDATE_STEP_FAILL, - WRONG_RETRIES_CAN, - WRONG_RETRIES_NAK, - TIMEOUT_RCV_I, - LAST_STATUS, -} - -enum SapiClassNodeIdBaseType -{ - TYPE_8_BIT = 0x1, - TYPE_16_BIT = 0x2, -} - -enum SapiClassSerialAPISetupCmd -{ - // /** - // * The first 8 commands are given as bit-flags, and when all bits were consumed, a byte-array was created to give - // * more room. - // * The first 8 flags are the only ones that shall be used to fill the first byte when generating the response in - // * pOutputBuffer for the command, SERIAL_API_SETUP_CMD_SUPPORTED. - // * This is kept for backwards compatibility. - // */ - SERIAL_API_SETUP_CMD_UNSUPPORTED, - SERIAL_API_SETUP_CMD_SUPPORTED = 1, //1<<0 - SERIAL_API_SETUP_CMD_TX_STATUS_REPORT = 2, //1<<1 - SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET = 4, //1<<2 @Deprecated - SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET = 8, //1<<3 @Deprecated - SERIAL_API_SETUP_CMD_TX_GET_MAX_PAYLOAD_SIZE = 16, //1<<4 - SERIAL_API_SETUP_CMD_RF_REGION_GET = 32, //1<<5 - SERIAL_API_SETUP_CMD_RF_REGION_SET = 64, //1<<6 - SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET = 128, //1<<7 - // /** - // * The below values are not flags and shall only be used with BITMASK_ADD_CMD() when generating - // * the response for the command, SERIAL_API_SETUP_CMD_SUPPORTED. - // */ - SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_SET = 3, - SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_GET = 5, - // The values 6 and 7 are unused, but not reserved. - SERIAL_API_SETUP_CMD_TX_GET_MAX_LR_PAYLOAD_SIZE = 17, - SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET_16_BIT = 18, - SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET_16_BIT = 19, -} - -enum SapiClassFuncId -{ - FUNC_ID_SERIAL_API_GET_INIT_DATA = 0x02, - FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION = 0x03, - FUNC_ID_APPLICATION_COMMAND_HANDLER = 0x04, - FUNC_ID_ZW_GET_CONTROLLER_CAPABILITIES = 0x05, - FUNC_ID_SERIAL_API_SET_TIMEOUTS = 0x06, - FUNC_ID_SERIAL_API_GET_CAPABILITIES = 0x07, - FUNC_ID_SERIAL_API_SOFT_RESET = 0x08, - FUNC_ID_ZW_GET_PROTOCOL_VERSION = 0x09, - FUNC_ID_SERIAL_API_STARTED = 0x0A, - FUNC_ID_SERIAL_API_SETUP = 0x0B, - FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION_CMD_CLASSES = 0x0C, - FUNC_ID_ZW_SEND_DATA_EX = 0x0E, - FUNC_ID_ZW_SEND_DATA_MULTI_EX = 0x0F, - FUNC_ID_ZW_SET_RF_RECEIVE_MODE = 0x10, - FUNC_ID_ZW_SET_SLEEP_MODE = 0x11, - FUNC_ID_ZW_SEND_NODE_INFORMATION = 0x12, - FUNC_ID_ZW_SEND_DATA = 0x13, - FUNC_ID_ZW_SEND_DATA_MULTI = 0x14, - FUNC_ID_ZW_GET_VERSION = 0x15, - FUNC_ID_ZW_SEND_DATA_ABORT = 0x16, - FUNC_ID_ZW_RF_POWER_LEVEL_SET = 0x17, - FUNC_ID_ZW_SEND_DATA_META = 0x18, - FUNC_ID_ZW_RESERVED_SD = 0x19, - FUNC_ID_ZW_RESERVED_SDM = 0x1A, - FUNC_ID_ZW_RESERVED_SRI = 0x1B, - FUNC_ID_ZW_GET_RANDOM = 0x1C, - FUNC_ID_ZW_RANDOM = 0x1D, - FUNC_ID_ZW_RF_POWER_LEVEL_REDISCOVERY_SET = 0x1E, - FUNC_ID_MEMORY_GET_ID = 0x20, - FUNC_ID_MEMORY_GET_BYTE = 0x21, - FUNC_ID_MEMORY_PUT_BYTE = 0x22, - FUNC_ID_MEMORY_GET_BUFFER = 0x23, - FUNC_ID_MEMORY_PUT_BUFFER = 0x24, - FUNC_ID_SERIAL_API_GET_APPL_HOST_MEMORY_OFFSET = 0x25, - FUNC_ID_DEBUG_OUTPUT = 0x26, - FUNC_ID_AUTO_PROGRAMMING = 0x27, - FUNC_ID_NVR_GET_VALUE = 0x28, - FUNC_ID_NVM_GET_ID = 0x29, - FUNC_ID_NVM_EXT_READ_LONG_BUFFER = 0x2A, - FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER = 0x2B, - FUNC_ID_NVM_EXT_READ_LONG_BYTE = 0x2C, - FUNC_ID_NVM_EXT_WRITE_LONG_BYTE = 0x2D, - FUNC_ID_NVM_BACKUP_RESTORE = 0x2E, - FUNC_ID_ZW_NVR_GET_APP_VALUE = 0x2F, - FUNC_ID_CLOCK_SET = 0x30, - FUNC_ID_CLOCK_GET = 0x31, - FUNC_ID_CLOCK_CMP = 0x32, - FUNC_ID_RTC_TIMER_CREATE = 0x33, - FUNC_ID_RTC_TIMER_READ = 0x34, - FUNC_ID_RTC_TIMER_DELETE = 0x35, - FUNC_ID_RTC_TIMER_CALL = 0x36, - FUNC_ID_CLEAR_TX_TIMERS = 0x37, - FUNC_ID_GET_TX_TIMERS = 0x38, - FUNC_ID_ZW_CLEAR_NETWORK_STATS = 0x39, - FUNC_ID_ZW_GET_NETWORK_STATS = 0x3A, - FUNC_ID_ZW_GET_BACKGROUND_RSSI = 0x3B, - FUNC_ID_ZW_SET_LISTEN_BEFORE_TALK_THRESHOLD = 0x3C, - FUNC_ID_ZW_REMOVE_NODE_ID_FROM_NETWORK = 0x3F, - FUNC_ID_ZW_SET_LEARN_NODE_STATE = 0x40, - FUNC_ID_ZW_GET_NODE_PROTOCOL_INFO = 0x41, - FUNC_ID_ZW_SET_DEFAULT = 0x42, - FUNC_ID_ZW_NEW_CONTROLLER = 0x43, - FUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE = 0x44, - FUNC_ID_ZW_REPLICATION_SEND_DATA = 0x45, - FUNC_ID_ZW_ASSIGN_RETURN_ROUTE = 0x46, - FUNC_ID_ZW_DELETE_RETURN_ROUTE = 0x47, - FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE = 0x48, - FUNC_ID_ZW_REQUEST_NODETYPE_NEIGHBOR_UPDATE = 0x68, - FUNC_ID_ZW_APPLICATION_UPDATE = 0x49, - FUNC_ID_ZW_ADD_NODE_TO_NETWORK = 0x4A, - FUNC_ID_ZW_REMOVE_NODE_FROM_NETWORK = 0x4B, - FUNC_ID_ZW_CREATE_NEW_PRIMARY = 0x4C, - FUNC_ID_ZW_CONTROLLER_CHANGE = 0x4D, - FUNC_ID_ZW_RESERVED_FN = 0x4E, - FUNC_ID_ZW_ASSIGN_PRIORITY_RETURN_ROUTE = 0x4F, - FUNC_ID_ZW_SET_LEARN_MODE = 0x50, - FUNC_ID_ZW_ASSIGN_SUC_RETURN_ROUTE = 0x51, - FUNC_ID_ZW_ENABLE_SUC = 0x52, - FUNC_ID_ZW_REQUEST_NETWORK_UPDATE = 0x53, - FUNC_ID_ZW_SET_SUC_NODE_ID = 0x54, - FUNC_ID_ZW_DELETE_SUC_RETURN_ROUTE = 0x55, - FUNC_ID_ZW_GET_SUC_NODE_ID = 0x56, - FUNC_ID_ZW_SEND_SUC_ID = 0x57, - FUNC_ID_ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE = 0x58, - FUNC_ID_ZW_REDISCOVERY_NEEDED = 0x59, - FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE_OPTION = 0x5A, - FUNC_ID_ZW_SUPPORT9600_ONLY = 0x5B, - FUNC_ID_ZW_REQUEST_NEW_ROUTE_DESTINATIONS = 0x5C, - FUNC_ID_ZW_IS_NODE_WITHIN_DIRECT_RANGE = 0x5D, - FUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION = 0x5E, - FUNC_ID_ZW_EXPLORE_REQUEST_EXCLUSION = 0x5F, - FUNC_ID_ZW_REQUEST_NODE_INFO = 0x60, - FUNC_ID_ZW_REMOVE_FAILED_NODE_ID = 0x61, - FUNC_ID_ZW_IS_FAILED_NODE_ID = 0x62, - FUNC_ID_ZW_REPLACE_FAILED_NODE = 0x63, - FUNC_ID_ZW_SET_ROUTING_MAX_6_00 = 0x65, - FUNC_ID_ZW_IS_PRIMARY_CTRL = 0x66, - FUNC_ID_ZW_AES_ECB = 0x67, - FUNC_ID_TIMER_START = 0x70, - FUNC_ID_TIMER_RESTART = 0x71, - FUNC_ID_TIMER_CANCEL = 0x72, - FUNC_ID_TIMER_CALL = 0x73, - FUNC_ID_ZW_FIRMWARE_UPDATE_NVM = 0x78, - FUNC_ID_GET_ROUTING_TABLE_LINE = 0x80, - FUNC_ID_GET_TX_COUNTER = 0x81, - FUNC_ID_RESET_TX_COUNTER = 0x82, - FUNC_ID_STORE_NODEINFO = 0x83, - FUNC_ID_STORE_HOMEID = 0x84, - FUNC_ID_LOCK_ROUTE_RESPONSE = 0x90, - FUNC_ID_ZW_SEND_DATA_ROUTE_DEMO = 0x91, - FUNC_ID_ZW_GET_PRIORITY_ROUTE = 0x92, - FUNC_ID_ZW_SET_PRIORITY_ROUTE = 0x93, - FUNC_ID_SERIAL_API_TEST = 0x95, - FUNC_ID_SERIAL_API_EXT = 0x98, - FUNC_ID_ZW_SECURITY_SETUP = 0x9C, - FUNC_ID_APPLICATION_SECURITY_EVENT = 0x9D, - FUNC_ID_SERIAL_API_APPL_SLAVE_NODE_INFORMATION = 0xA0, - FUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER = 0xA1, - FUNC_ID_ZW_SEND_SLAVE_NODE_INFORMATION = 0xA2, - FUNC_ID_ZW_SEND_SLAVE_DATA = 0xA3, - FUNC_ID_ZW_SET_SLAVE_LEARN_MODE = 0xA4, - FUNC_ID_ZW_GET_VIRTUAL_NODES = 0xA5, - FUNC_ID_ZW_IS_VIRTUAL_NODE = 0xA6, - FUNC_ID_ZW_RESERVED_SSD = 0xA7, - FUNC_ID_APPLICATION_COMMAND_HANDLER_BRIDGE = 0xA8, - FUNC_ID_ZW_SEND_DATA_BRIDGE = 0xA9, - FUNC_ID_ZW_SEND_DATA_META_BRIDGE = 0xAA, - FUNC_ID_ZW_SEND_DATA_MULTI_BRIDGE = 0xAB, - FUNC_ID_PWR_SETSTOPMODE = 0xB0, - FUNC_ID_PWR_CLK_PD = 0xB1, - FUNC_ID_PWR_CLK_PUP = 0xB2, - FUNC_ID_PWR_SELECT_CLK = 0xB3, - FUNC_ID_ZW_SET_WUT_TIMEOUT = 0xB4, - FUNC_ID_ZW_IS_WUT_KICKED = 0xB5, - FUNC_ID_ZW_WATCHDOG_ENABLE = 0xB6, - FUNC_ID_ZW_WATCHDOG_DISABLE = 0xB7, - FUNC_ID_ZW_WATCHDOG_KICK = 0xB8, - FUNC_ID_ZW_SET_EXT_INT_LEVEL = 0xB9, - FUNC_ID_ZW_RF_POWER_LEVEL_GET = 0xBA, - FUNC_ID_ZW_GET_NEIGHBOR_COUNT = 0xBB, - FUNC_ID_ZW_ARE_NODES_NEIGHBOURS = 0xBC, - FUNC_ID_ZW_TYPE_LIBRARY = 0xBD, - FUNC_ID_ZW_SEND_TEST_FRAME = 0xBE, - FUNC_ID_ZW_GET_PROTOCOL_STATUS = 0xBF, - FUNC_ID_ZW_SET_PROMISCUOUS_MODE = 0xD0, - FUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER = 0xD1, - FUNC_ID_ZW_WATCHDOG_START = 0xD2, - FUNC_ID_ZW_WATCHDOG_STOP = 0xD3, - FUNC_ID_ZW_SET_ROUTING_MAX = 0xD4, - FUNC_ID_ZW_GET_ROUTING_MAX = 0xD5, - FUNC_ID_PM_STAY_AWAKE = 0xD7, - FUNC_ID_PM_CANCEL = 0xD8, - FUNC_ID_ZW_NETWORK_MANAGEMENT_SET_MAX_INCLUSION_REQUEST_INTERVALS = 0xD6, - FUNC_ID_ZW_INITIATE_SHUTDOWN = 0xD9, - FUNC_ID_SERIAL_API_GET_LR_NODES = 0xDA, - FUNC_ID_GET_LR_CHANNEL = 0xDB, - FUNC_ID_SET_LR_CHANNEL = 0xDC, - FUNC_ID_ZW_SET_LR_VIRTUAL_IDS = 0xDD, - FUNC_ID_GET_DCDC_CONFIG = 0xDE, - FUNC_ID_SET_DCDC_CONFIG = 0xDF, - FUNC_ID_ZW_NUNIT_CMD = 0xE0, - FUNC_ID_ZW_NUNIT_INIT = 0xE1, - FUNC_ID_ZW_NUNIT_LIST = 0xE2, - FUNC_ID_ZW_NUNIT_RUN = 0xE3, - FUNC_ID_ZW_NUNIT_END = 0xE4, - FUNC_ID_ENABLE_RADIO_PTI = 0xE7, - FUNC_ID_GET_RADIO_PTI = 0xE8, - FUNC_ID_SEND_NOP = 0xE9, - FUNC_ID_SERIAL_API_POWER_MANAGEMENT = 0xEE, - FUNC_ID_SERIAL_API_READY = 0xEF, - FUNC_ID_PROPRIETARY_0 = 0xF0, - FUNC_ID_PROPRIETARY_1 = 0xF1, - FUNC_ID_PROPRIETARY_2 = 0xF2, - FUNC_ID_PROPRIETARY_3 = 0xF3, - FUNC_ID_PROPRIETARY_4 = 0xF4, - FUNC_ID_PROPRIETARY_5 = 0xF5, - FUNC_ID_PROPRIETARY_6 = 0xF6, - FUNC_ID_PROPRIETARY_7 = 0xF7, - FUNC_ID_PROPRIETARY_8 = 0xF8, - FUNC_ID_PROPRIETARY_9 = 0xF9, - FUNC_ID_PROPRIETARY_A = 0xFA, - FUNC_ID_PROPRIETARY_B = 0xFB, - FUNC_ID_PROPRIETARY_C = 0xFC, - FUNC_ID_PROPRIETARY_D = 0xFD, - FUNC_ID_PROPRIETARY_E = 0xFE, -} - -// ------------------------------------------------------------------------------------------------------ -interface SapiPortOpenOption -{ - baudRate:number; - bufferSize:number; -} - -interface SapiPort -{ - readonly readable:ReadableStream; - readonly writable:WritableStream; - close(): Promise; - open(options?: SapiPortOpenOption): Promise; -} - -interface SapiSerialOption -{ - filters?:SapiSerialOptionFilters[]; -} - - -interface SapiSerial -{ - requestPort(options?: SapiSerialOption): Promise; -} - -interface NavigatorExtSerial extends Navigator -{ - serial:SapiSerial; -} - - -class SapiClass { - private readonly MAX_SEND_DATA_LENGHT = 0xA0; - - private readonly SOF:number = 0x01; - private readonly ACK:number = 0x06; - private readonly NAK:number = 0x15; - private readonly CAN:number = 0x18; - - private readonly REQUEST:number = 0x00; - private readonly RESPONSE:number = 0x01; - - private readonly ADDITIONAL_SIZE:number = 0x03; - - public readonly BAUDRATE = [115200, 230400, 460800, 921600]; - private readonly dtr_timeout:number = 250;// The time for the capacitor on the DTR line to recharge - - private readonly RETRIES_CAN:number = 100; - - private b_busy:boolean = false; - private state_lock:boolean = false; - private b_open:boolean = false; - private port:SapiPort|undefined = undefined; - private queue:Array = []; - private async_ret:Array = []; - private detect_type:SapiClassDetectType = SapiClassDetectType.UNKNOWN; - - private async _readWithTimeout(timeout:number): Promise { - let out:Uint8Array; - - if (this.port == undefined || this.port.readable == null) - return (new Uint8Array([])); - const reader = this.port.readable.getReader(); - const timer = setTimeout(() => { - reader.releaseLock(); - }, timeout); - try { - out = (await reader.read()).value; - } catch (err) { - out = new Uint8Array([]); - } - clearTimeout(timer); - reader.releaseLock(); - return (out); - } - - private async _read(num:number): Promise> { - let out:Array, i:number, rep:number, tempos:number|undefined; - - rep = 0x0; - while (rep < 1) { - if (this.queue.length >= num) { - out = []; - i = 0x0; - while (i < num) { - tempos = this.queue.shift(); - if (tempos == undefined) - break ; - out.push(tempos); - i++; - } - return (out); - } - const value:Uint8Array = await this._readWithTimeout(20); - i = 0x0; - while (i < value.byteLength) { - this.queue.push(value[i]) - i++; - } - rep++; - } - if (num >= this.queue.length) - num = this.queue.length; - out = []; - i = 0x0; - while (i < num) { - tempos = this.queue.shift(); - if (tempos == undefined) - break ; - out.push(tempos); - i++; - } - return (out); - } - - private async _write(data:Array): Promise { - if (this.port == undefined || this.port.writable == null) - return (false); - const data_uint8:Uint8Array = new Uint8Array(data); - const writer = this.port.writable.getWriter(); - await writer.write(data_uint8); - writer.releaseLock(); - if (WEB_TOOLS_BETA == true) - console.log(">> ", splitHexBuff(data_uint8)); - return (true); - } - - private async _recv_async(): Promise { - for (;;) { - if (await this._recvIncomingRequestAsyn(100) == false) - break - } - } - - private async _clear(): Promise { - await this._recv_async(); - this.queue = []; - for (;;) { - const value = await this._read(50); - if (value.length == 0x0) - return ; - } - } - - private async _sendData(cmd:number, databuff:Array): Promise { - let final_data:Array; - - const data_len = databuff.length + this.ADDITIONAL_SIZE; - if (data_len > 255) { - const crc_data:Array = [0x00, this.REQUEST, cmd].concat(databuff); - final_data = [0x00, (data_len >> 8)& 0x0FF, data_len & 0x0FF, this.REQUEST, cmd].concat(databuff); - const crc16:number = calcSigmaCRC16(0x1D0F, crc_data, 0, crc_data.length); - final_data = [this.SOF].concat(final_data).concat([(crc16 >> 8) & 0xFF, (crc16) & 0xFF]); - if (await this._write(final_data) == false) - return (false); - return (true); - } - final_data = [data_len & 0x0FF, this.REQUEST, cmd].concat(databuff); - const crc:number = checksum(final_data); - final_data = [this.SOF].concat(final_data).concat([crc]); - if (await this._write(final_data) == false) - return (false); - return (true); - } - - private async _sendNack(): Promise { - return (await (this._write([this.NAK]))); - } - - private async _sendAck(): Promise { - return (await (this._write([this.ACK]))); - } - - private async _waitSOF(timeout:number): Promise { - const sof_timeout:number = Date.now() + timeout; - - while (sof_timeout > Date.now()) { - const sof:Array = await this._read(0x1); - if (sof.length == 0x0) { - continue ; - } - if (sof[0x0] == this.SOF) - return (true); - } - return (false); - } - - private async _send_cmd(cmd:number, databuff:Array): Promise { - let rbuff:Array, retries_nak:number, retries_can:number, retries_ack:number; - - if (this.b_open == false) - return (SapiClassStatus.PORT_NOT_OPEN); - await this._recv_async(); - retries_nak = 0x3; - retries_can = this.RETRIES_CAN; - retries_ack = 0x6; - for (;;) { - if (retries_nak < 0x0) - return (SapiClassStatus.WRONG_RETRIES_NAK); - if (retries_can < 0x0) - return (SapiClassStatus.WRONG_RETRIES_CAN); - if (await this._sendData(cmd, databuff) == false) - return (SapiClassStatus.WRITE); - for (;;) { - if (retries_ack < 0x0) - return (SapiClassStatus.NO_ACK); - rbuff = await this._read(0x1) - if (rbuff.length == 0x0) { - retries_ack--; - continue ; - } - if (rbuff[0] == this.SOF) { - await this._recvIncomingRequestAsyn(100, false); - continue ; - } - break ; - } - if (rbuff[0] == this.ACK) - break ; - if (rbuff[0] == this.CAN) { - await this._recv_async(); - retries_can--; - continue ; - } - if (rbuff[0] == this.NAK) { - retries_nak--; - continue ; - } - } - return (SapiClassStatus.OK); - } - - private async _request(filters?:SapiSerialOptionFilters[]): Promise { - let port:SapiPort; - - const nav_ext_serial:NavigatorExtSerial = ((window.navigator as unknown) as NavigatorExtSerial); - if (this.port != undefined) - return (SapiClassStatus.REQUEST_ONE_SHOT); - try { - const options:SapiSerialOption = {filters:filters}; - port = await nav_ext_serial.serial.requestPort(options); - } catch(e) { - return (SapiClassStatus.REQUEST_NO_SELECT); - } - this.port = port; - return (SapiClassStatus.OK); - } - - private async _open(baudRate:number): Promise { - if (this.port == undefined) - return (SapiClassStatus.PORT_NOT_REQUEST); - if (this.b_open == true) - return (SapiClassStatus.PORT_NOT_OPEN); - try { - await this.port.open({ baudRate, bufferSize: 8192 }); - } catch(e) { - return (SapiClassStatus.PORT_USED); - } - this.b_open = true; - return (SapiClassStatus.OK); - } - - private async _close(): Promise { - if (this.port == undefined) - return (SapiClassStatus.PORT_NOT_REQUEST); - if (this.b_open == false) - return (SapiClassStatus.PORT_NOT_CLOSE); - await this.port.close(); - this.b_open = false; - return (SapiClassStatus.OK); - } - - private async _recvIncomingRequest_add(lenght:number): Promise> { - let buff_data:Array, wait_timeout:number; - - const timout:number = 100; - buff_data = []; - wait_timeout = Date.now() + timout; - for (;;) { - const buffer:Array = await this._read(lenght - buff_data.length); - buff_data = buff_data.concat(buffer); - if (buff_data.length == lenght) - break ; - if (buffer.length > 0x0) { - wait_timeout = Date.now() + timout; - continue ; - } - if (Date.now() >= wait_timeout) { - await this._sendNack(); - return ([]); - } - } - return (buff_data); - } - - private async _recvIncomingRequest(timeout:number, wait_sof:boolean = true): Promise { - let buff_data:Array; - - const out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]}; - if (this.b_open == false) { - out.status = SapiClassStatus.PORT_NOT_OPEN; - return (out); - } - if (wait_sof == true) { - if (await this._waitSOF(timeout) == false) { - out.status = SapiClassStatus.NO_SOF; - return (out); - } - } - buff_data = await this._recvIncomingRequest_add(0x1); - if (buff_data.length != 0x1) { - out.status = SapiClassStatus.NO_LENGHT; - return (out); - } - const len_data:number = buff_data[0x0]; - if (len_data < 0x3) { - out.status = SapiClassStatus.WRONG_LENGHT; - return (out); - } - buff_data = await this._recvIncomingRequest_add(len_data); - if (buff_data.length != len_data) { - out.status = SapiClassStatus.INVALID_DATA_LEN; - return (out); - } - out.crc = checksum([len_data].concat(buff_data.slice(0, len_data - 0x1))); - if (out.crc != buff_data[len_data - 1]) { - await this._sendNack(); - out.status = SapiClassStatus.INVALID_CRC; - return (out); - } - await this._sendAck(); - out.raw = [this.SOF, len_data].concat(buff_data); - if (WEB_TOOLS_BETA == true) - console.log("<< ", splitHexBuff(out.raw)); - out.cmd = out.raw[0x3]; - out.data = out.raw.slice(0x4, out.raw.length - 0x1); - return (out); - } - - private async _recvIncomingRequestAsyn(timeout:number, wait_sof:boolean = true): Promise { - const res:SapiClassRet = await this._recvIncomingRequest(timeout, wait_sof); - if (res.status != SapiClassStatus.OK) - return (false); - // this.async_ret.push(res); - return (true); - } - - private _sendCommandUnSz_rcv_test(res:SapiClassRet, cmd:number): boolean { - if (res.status != SapiClassStatus.OK) - return (false); - if (res.cmd != cmd) - return (false); - return (true); - } - - private async _sendCommandUnSz(cmd:number, args:Array, timeout:number, cmd_ret?:number): Promise { - const out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]}; - out.status = await this._send_cmd(cmd, args); - if (out.status != SapiClassStatus.OK) { - return (out); - } - const wait_timeout:number = Date.now() + timeout; - for (;;) { - const current_timeout:number = Date.now(); - if (current_timeout >= wait_timeout) { - out.status = SapiClassStatus.TIMEOUT_RCV; - return (out); - } - const res:SapiClassRet = await this._recvIncomingRequest(wait_timeout - current_timeout); - if (cmd_ret == undefined) - cmd_ret = cmd; - if (this._sendCommandUnSz_rcv_test(res, cmd_ret) == true) - return (res); - } - } - - private async _recvIncomingRequest_wait(timeout:number, cmd_ret?:number): Promise { - let res:SapiClassRet, i:number; - - res = await this._recvIncomingRequest(timeout); - if (cmd_ret == undefined) - return (res); - i = this.RETRIES_CAN; - for (;;) { - if (res.status != SapiClassStatus.OK) - break ; - if (res.cmd == cmd_ret) - break ; - if (i < 0x0) { - res.status = SapiClassStatus.TIMEOUT_RCV_I; - break ; - } - res = await this._recvIncomingRequest(100); - i--; - } - return (res); - } - - public async recvIncomingRequest(timeout:number, cmd_ret?:number): Promise { - const out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]}; - if (this.busy() == true) { - out.status = SapiClassStatus.PORT_BUSY; - return (out); - } - this.b_busy = true; - const res:SapiClassRet = await this._recvIncomingRequest_wait(timeout, cmd_ret); - this.b_busy = false; - return (res); - } - - public async sendCommandUnSz(cmd:number, args:Array, timeout:number = 2000, cmd_ret?:number): Promise { - const out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]}; - if (this.busy() == true) { - out.status = SapiClassStatus.PORT_BUSY; - return (out); - } - this.b_busy = true; - const res = await this._sendCommandUnSz(cmd, args, timeout, cmd_ret); - this.b_busy = false; - return (res); - } - - public lock() { - this.state_lock = true; - } - - public unlock() { - this.state_lock = false; - } - - public is_busy(): boolean { - if (this.state_lock == true) - return (true); - return (this.busy()); - } - - public busy(): boolean { - return (this.b_busy); - } - public static supported(): boolean { - if (!("serial" in window.navigator)) - return (false); - return (true); - } - - public async request(filters?:SapiSerialOptionFilters[]): Promise { - if (this.busy() == true) - return (SapiClassStatus.SERIAL_BUSY); - if (SapiClass.supported() == false) - return (SapiClassStatus.SERIAL_UN_SUPPORT); - this.b_busy = true; - const out:SapiClassStatus = await this._request(filters); - this.b_busy = false; - return (out); - } - - public async close(): Promise { - if (this.busy() == true) - return (SapiClassStatus.SERIAL_BUSY); - this.b_busy = true; - await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 500); - const out:SapiClassStatus = await this._close(); - this.b_busy = false; - this.detect_type = SapiClassDetectType.UNKNOWN; - this.unlock(); - return (out); - } - - public type(): SapiClassDetectType { - return (this.detect_type); - } - - private async _detect_rcv_freeze_zuno(out:SapiClassDetectWait): Promise { - const freeze_zuno_info:SapiClassRet = await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000); - if (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) { - out.status = SapiClassStatus.ZUNO_NO_FREEZE; - return ; - } - out.type = SapiClassDetectType.ZUNO; - return ; - } - - private async _detect_rcv_timout_async(out:SapiClassDetectWait, timout:number): Promise { - const res:SapiClassRet = await this._recvIncomingRequest(timout); - if (res.status != SapiClassStatus.OK) - return (false) - if (res.status == SapiClassStatus.OK && res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) { - if (res.data.length < 0x2) { - out.status = SapiClassStatus.ZUNO_START_WRONG_LENG; - return (true); - } - if (res.data[0x0] != 0xFF) { - out.status = SapiClassStatus.ZUNO_START_WRONG_FRAME; - return (true); - } - await this._detect_rcv_freeze_zuno(out); - return (true); - } - if (res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED) { - out.type = SapiClassDetectType.RAZBERRY; - return (true); - } - return (false); - } - - private async _detect_rcv_timout(out:SapiClassDetectWait, timout:number): Promise { - const wait_timeout:number = Date.now() + timout; - while (wait_timeout > Date.now()) { - out.status = SapiClassStatus.OK; - if (await this._detect_rcv_timout_async(out, 200) == true) - return ; - const capabilities_info:SapiClassRet = await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, [], 300); - if (capabilities_info.status == SapiClassStatus.OK) { - //VendorID = 0x0115 and ProductTypeID = 0x0210 - if (capabilities_info.data.length >= 0x6 && capabilities_info.data[0x2] == 0x1 && capabilities_info.data[0x3] == 0x15 && capabilities_info.data[0x4] == 0x2 && capabilities_info.data[0x5] == 0x10) { - await this._detect_rcv_freeze_zuno(out); - return ; - } - out.type = SapiClassDetectType.RAZBERRY; - return ; - } - if (await this._detect_rcv_timout_async(out, 200) == true)//for old zuno - return ; - } - out.status = SapiClassStatus.UPDATE_TIMEOUT; - } - - private async _detect_update(res:SapiClassRet): Promise { - if (res.status != SapiClassStatus.OK) - return (SapiClassStatus.UPDATE_PROCESS); - if (res.cmd != SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) - return (SapiClassStatus.DETECTED_UNC_COMMAND); - if (res.data.length < 0x2) - return (SapiClassStatus.ZUNO_START_WRONG_LENG); - if (res.data[0x0] != 0x4 && res.data[0x1] != 0x1) - return (SapiClassStatus.ZUNO_START_WRONG_DATA); - return (SapiClassStatus.OK); - } - - private async _detect(out:SapiClassDetect, baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise { - let i:number, res:SapiClassRet; - - if (this.port == undefined) { - out.status = SapiClassStatus.PORT_NOT_REQUEST; - return ; - } - if (this.b_open == true) { - out.status = await this._close(); - if (out.status != SapiClassStatus.OK) - return ; - await sleep(this.dtr_timeout); - } - const baudrate_array:Array = this.BAUDRATE; - i = baudrate.length; - while (i != 0x0) { - i--; - if (this.BAUDRATE.indexOf(baudrate[i]) != -1) { - baudrate_array.splice(baudrate_array.indexOf(baudrate[i]), 0x1); - baudrate_array.unshift(baudrate[i]); - } - } - i = 0x0; - while (i < baudrate_array.length) { - out.baudrate = baudrate_array[i]; - out.status = await this._open(baudrate_array[i]); - if (out.status != SapiClassStatus.OK) - return ; - const wait:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN}; - await this._detect_rcv_timout(wait, 1000); - if (wait.status == SapiClassStatus.OK) { - out.type = wait.type; - return ; - } - if (wait.status != SapiClassStatus.UPDATE_TIMEOUT) { - out.status = wait.status; - return ; - } - if (func != null) { - await this._clear(); - if (await func() == false) { - out.status = SapiClassStatus.DETECTED_CANCEL; - return ; - } - const wait:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN}; - await this._detect_rcv_timout(wait, 2000); - if (wait.status == SapiClassStatus.OK) { - out.type = wait.type; - return ; - } - if (wait.status != SapiClassStatus.UPDATE_TIMEOUT) { - out.status = wait.status; - return ; - } - } - out.status = await this._close(); - if (out.status != SapiClassStatus.OK) - return ; - await sleep(this.dtr_timeout); - i++; - } - out.status = SapiClassStatus.DETECTED_NOT_FIND; - } - - public async detect(baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise { - const out:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0}; - - if (this.busy() == true) { - out.status = SapiClassStatus.PORT_BUSY; - return (out); - } - this.b_busy = true; - await this._detect(out, baudrate, func); - this.detect_type = out.type; - this.b_busy = false; - return (out); - } - - public getQuantumSize(): number { - return (this.MAX_SEND_DATA_LENGHT); - } - - private async _checkBootImage(addr:number): Promise { - const data_addr:Array = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF]; - await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x04].concat(data_addr), 100); - } - - private async _update_wait_zuno(target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise { - const wait_timeout:number = Date.now() + 30000; - - while (wait_timeout > Date.now()) { - const res:SapiClassRet = await this._recvIncomingRequest(1000); - out.status = await this._detect_update(res); - if (out.status == SapiClassStatus.UPDATE_TIMEOUT) - continue ; - break ; - } - if (target_type == SapiClassDetectType.RAZBERRY) { - await sleep(20000); - const out_detect:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0}; - await this._detect(out_detect, [115200], null); - out.type = out_detect.type; - out.status = out_detect.status; - return ; - } - if (wait_timeout > Date.now()) { - await this._detect_rcv_timout(out, wait_timeout - Date.now()); - return ; - } - out.status = SapiClassStatus.UPDATE_TIMEOUT; - } - - private async _update_wait_razberry(target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise { - if (target_type == SapiClassDetectType.RAZBERRY) { - await this._detect_rcv_timout(out, 30000); - return ; - } - await sleep(20000); - const out_detect:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0}; - await this._detect(out_detect, [115200], null); - out.type = out_detect.type; - out.status = out_detect.status; - } - - private async _update(addr:number, target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise { - switch (this.detect_type) { - case SapiClassDetectType.ZUNO: - await this._checkBootImage(addr); - await this._update_wait_zuno(target_type, out); - break ; - case SapiClassDetectType.RAZBERRY: - await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 200) - await this._update_wait_razberry(target_type, out); - break ; - default: - out.status = SapiClassStatus.UPDATE_UNK; - break ; - } - } - - public async update(addr:number, target_type:SapiClassDetectType): Promise { - const out:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN}; - - if (this.busy() == true) { - out.status = SapiClassStatus.PORT_BUSY; - return (out); - } - if (target_type == SapiClassDetectType.UNKNOWN) { - out.status = SapiClassStatus.DETECTED_UNC; - return (out); - } - this.b_busy = true; - await this._update(addr, target_type, out); - this.detect_type = out.type; - this.b_busy = false; - if (out.status == SapiClassStatus.OK && out.type != target_type) { - out.status = SapiClassStatus.DETECTED_TARGET_TYPE; - return (out); - } - return (out); - } - - public async detect_rcv(): Promise { - const out:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN}; - if (this.busy() == true) { - out.status = SapiClassStatus.PORT_BUSY; - return (out); - } - if (this.detect_type == SapiClassDetectType.UNKNOWN) { - out.status = SapiClassStatus.DETECTED_UNC; - return (out); - } - this.b_busy = true; - const detect_type:SapiClassDetectType = this.detect_type; - await this._detect_rcv_timout(out, 3000); - this.detect_type = out.type; - this.b_busy = false; - if (out.type != detect_type) { - out.status = SapiClassStatus.DETECTED_TARGET_TYPE; - return (out); - } - return (out); - } - - - constructor() { - } - -} \ No newline at end of file diff --git a/src/sapi/vendorIds.ts b/src/sapi/vendorIds.ts deleted file mode 100644 index 40d44bd..0000000 --- a/src/sapi/vendorIds.ts +++ /dev/null @@ -1,2006 +0,0 @@ -export {controller_vendor_ids}; - -interface ControllerVendor -{ - Name:string; - Webpage?:string; -} - -interface ControllerVendorIds -{ - [key:number]: ControllerVendor; -} - -const controller_vendor_ids:ControllerVendorIds = -{ - 0x0000: { - Name: 'Silicon Labs', - Webpage : 'http://www.silabs.com', - }, - 0x0001: { - Name: 'Advaned Control Solutions', - Webpage : 'http://www.act-solutions.com', - - }, - 0x0002: { - Name: 'Danfoss', - Webpage : 'http://www.danfoss.com', - - }, - 0x0004: { - Name: 'Exhausto', - Webpage : 'http://www.exhausto.com', - }, - 0x0012: { - Name: 'Tell It Online', - }, - 0x001e: { - Name: 'Express Controls', - Webpage : 'http://www.expresscontrols.com', - - }, - 0x0020: { - Name: 'Universal Electronics', - Webpage : 'http://www.uie.com', - - }, - 0x0033: { - Name: 'Hunter Douglas', - Webpage : 'http://www.hdl.com', - - }, - 0x0039: { - Name: 'Honeywell', - }, - 0x0059: { - Name: 'Hostmann Controls', - Webpage : 'http://www.horstmann.co.uk', - - }, - 0x0060: { - Name: 'Everspring', - Webpage : 'http://www.everspring.com', - - }, - 0x0064: { - Name: 'Duwi', - Webpage : 'http://www.duewi.de', - - }, - 0x0066: { - Name: 'TrickleStar', - Webpage : 'http://www.tricklestar.com', - - }, - 0x006b: { - Name: 'Tricklestar (former Empower Controls Ltd.)', - Webpage : 'http://www.tricklestar.com', - - }, - 0x0071: { - Name: 'LS Control', - }, - 0x0077: { - Name: 'Innovus', - }, - 0x007a: { - Name: 'Merten', - Webpage : 'http://www.merten.de', - - }, - 0x0080: { - Name: 'Vero Duco', - }, - 0x0085: { - Name: 'Fakro', - Webpage : 'http://www.fakro.com', - }, - 0x0086: { - Name: 'Aeotec', - Webpage : 'http://www.aeotec.com', - - }, - 0x008a: { - Name: 'BeNeXt', - Webpage : 'http://benext.nl', - }, - 0x0095: { - Name: 'QEES', - Webpage : 'http://www.qees.eu', - - }, - 0x008e: { - Name: 'Raritan', - Webpage : 'http://www.raritan.com', - }, - 0x0092: { - Name: 'Martin Rentz', - Webpage : 'http://www.rentz-gmbh.de', - }, - 0x001d: { - Name: 'Leviton', - Webpage : 'http://www.leviton.com', - }, - 0x001a: { - Name: 'Cooper Wiring Devices', - Webpage : 'http://www.cooper.com', - }, - 0x0113: { - Name: 'Evolve', - - }, - 0x0098: { - Name: 'RTCA', - - }, - 0x0125: { - Name: 'Motion Inc', - Webpage : 'http://www.cooper.com', - }, - 0x0109: { - Name: 'Vision Security', - Webpage : 'http://www.visionsecurity.com.tw', - }, - 0x0116: { - Name: 'Chromatic Technologies', - Webpage : 'http://www.visionsecurity.com.tw', - }, - 0x0162: { - Name: 'Remotec', - Webpage : 'http://www.remotec.com.hk', - - }, - 0x5254: { - Name: 'Remotec', - Webpage : 'http://www.remotec.com.hk', - - }, - 0x0115: { - Name: 'Z-Wave.Me', - Webpage : 'http://www.z-wave.me', - - }, - 0x010f: { - Name: 'Fibar Group (Nice)', - Webpage : 'http://www.fibaro.com', - }, - 0x0081: { - Name: 'Siegenia-Aubi', - Webpage : 'http://www.siegenia-aubi.com', - - }, - 0x0084: { - Name: 'FortrezZ', - Webpage : 'http://www.fortrezz.com', - - }, - 0x0097: { - Name: 'Wintop', - Webpage : 'http://www.wintop.com', - - }, - 0x0129: { - Name: 'Yale', - Webpage : 'http://www.yalelocks.com', - }, - 0x0137: { - Name: 'FollowGood', - Webpage : 'http://www.follow-good.com', - }, - 0x0142: { - Name: 'Rademacher', - Webpage : 'http://rademacher.de', - }, - 0x0147: { - Name: 'RaZberry by Z-Wave.Me', - Webpage : 'http://razpberry.z-wave.me', - }, - 0x0148: { - Name: 'Eurotronic Technology', - Webpage : 'http://www.eurotronic.org', - }, - 0x008c: { - Name: 'Mi Casa Verde (Vera Control)', - Webpage : 'http://www.micasaverde.com', - }, - 0x0175: { - Name: 'Devolo', - Webpage : 'http://www.devolo.com', - }, - 0x0154: { - Name: 'Popp', - Webpage : 'http://www.popp.eu', - }, - 0x0270: { - Name: 'Ubitech', - Webpage : 'http://ubitech.hk', - }, - 0xFFFF: { - Name: '_Not defined', - - }, - 0x0028: { - Name: '2B Electronics', - - }, - 0x009B: { - Name: '2gig Technologies Inc.', - - }, - 0x002A: { - Name: '3e Technologies', - - }, - 0x0022: { - Name: 'A-1 Components', - - }, - 0x0117: { - Name: 'Abilia', - - }, - 0x0297: { - Name: 'AdMobilize, LLC', - - }, - 0x0101: { - Name: 'ADOX, Inc.', - - }, - 0x016C: { - Name: 'Advanced Optronic Devices Co.,Ltd', - - }, - 0x009E: { - Name: 'Adventure Interactive', - - }, - 0x0088: { - Name: 'Airvent SAM S.p.A.', - - }, - 0x0094: { - Name: 'Alarm.com', - - }, - 0x0126: { - Name: 'Alertme', - - }, - 0x003B: { - Name: 'Allegion', - - }, - 0x028E: { - Name: 'Alphanetworks', - - }, - 0x0230: { - Name: 'Alphonsus Tech', - - }, - 0x029F: { - Name: 'AMADAS Co., LTD ', - - }, - 0x019C: { - Name: 'Amdocs', - - }, - 0x005A: { - Name: 'American Grid, Inc.', - - }, - 0x032B: { - Name: 'Anchor Tech ', - - }, - 0x026D: { - Name: 'Antik Technology Ltd.', - - }, - 0x0078: { - Name: 'anyCOMM Corporation', - - }, - 0x0144: { - Name: 'Applied Micro Electronics "AME" BV', - - }, - 0x0291: { - Name: 'Arkea', - - }, - 0x0029: { - Name: 'Asia Heading', - - }, - 0x0231: { - Name: 'ASITEQ', - - }, - 0x028A: { - Name: 'Askey Computer Corp.', - - }, - 0x013B: { - Name: 'AstraLink', - - }, - 0x0134: { - Name: 'AT&T', - - }, - 0x002B: { - Name: 'Atech', - - }, - 0x0244: { - Name: 'Athom BV', - - }, - 0x032A: { - Name: 'AUCEAN TECHNOLOGY. INC', - - }, - 0x0155: { - Name: 'Avadesign Technology Co., Ltd.', - - }, - 0x0146: { - Name: 'Axesstel Inc', - - }, - 0x0018: { - Name: 'Balboa Instruments', - - }, - 0x0236: { - Name: 'Bandi Comm Tech Inc.', - - }, - 0x0204: { - Name: 'Beijing Sino-American Boyi Software Development Co., Ltd', - - }, - 0x0251: { - Name: 'Beijing Universal Energy Huaxia Technology Co.,Ltd', - - }, - 0x0196: { - Name: 'Bellatrix Systems, Inc.', - - }, - 0x032D: { - Name: 'Benetek', - - }, - 0x002C: { - Name: 'BeSafer', - - }, - 0x014B: { - Name: 'BFT S.p.A.', - - }, - 0x0052: { - Name: 'Bit7 Inc.', - - }, - 0x0311: { - Name: 'Blaze Automation', - - }, - 0x0213: { - Name: 'BMS Evler LTD', - - }, - 0x0023: { - Name: 'Boca Devices', - - }, - 0x015C: { - Name: 'Bosch Security Systems, Inc', - - }, - 0x0138: { - Name: 'BRK Brands, Inc.', - - }, - 0x002D: { - Name: 'Broadband Energy Networks Inc.', - - }, - 0x024A: { - Name: 'BTSTAR(HK) TECHNOLOGY COMPANY LIMITED', - - }, - 0x0145: { - Name: 'Buffalo Inc.', - - }, - 0x0190: { - Name: 'Building 36 Technologies', - - }, - 0x0026: { - Name: 'BuLogics', - - }, - 0x0169: { - Name: 'Bönig und Kallenbach oHG', - - }, - 0x009C: { - Name: 'Cameo Communications Inc.', - - }, - 0x002E: { - Name: 'Carrier', - - }, - 0x000B: { - Name: 'CasaWorks', - - }, - 0x0243: { - Name: 'casenio AG', - - }, - 0x0166: { - Name: 'CBCC Domotique SAS', - - }, - 0x0246: { - Name: 'CentraLite Systems, Inc', - - }, - 0x014E: { - Name: 'Check-It Solutions Inc.', - - }, - 0x0320: { - Name: 'China Security & Fire IOT Sensing CO., LTD ', - - }, - 0x0280: { - Name: 'Chuango Security Technology Corporation', - - }, - 0x0082: { - Name: 'Cisco Consumer Business Group', - - }, - 0x018E: { - Name: 'Climax Technology, Ltd.', - - }, - 0x0200: { - Name: 'Cloud Media', - - }, - 0x002F: { - Name: 'Color Kinetics Incorporated', - - }, - 0x0329: { - Name: 'COMAP', - - }, - 0x0309: { - Name: 'Comfortability', - - }, - 0x0140: { - Name: 'Computime', - - }, - 0x011B: { - Name: 'Connected Object', - - }, - 0x0179: { - Name: 'ConnectHome', - - }, - 0x0285: { - Name: 'CONNECTION TECHNOLOGY SYSTEMS ', - - }, - 0x025D: { - Name: 'Contec intelligent housing ', - - }, - 0x023F: { - Name: 'Control4 Corporation', - - }, - 0x0019: { - Name: 'ControlThink LC', - - }, - 0x000F: { - Name: 'ConvergeX Ltd.', - - }, - 0x007D: { - Name: 'CoolGuard', - - }, - 0x0079: { - Name: 'Cooper Lighting', - - }, - 0x009D: { - Name: 'Coventive Technologies Inc.', - - }, - 0x0328: { - Name: 'Cvnet', - - }, - 0x0014: { - Name: 'Cyberhouse', - - }, - 0x0067: { - Name: 'CyberTAN Technology, Inc.', - - }, - 0x0030: { - Name: 'Cytech Technology Pre Ltd.', - - }, - 0x0294: { - Name: 'D-3 Technology Co. Ltd', - - }, - 0x018C: { - Name: 'Dawon DNS', - - }, - 0x020A: { - Name: 'Decoris Intelligent System Limited', - - }, - 0x013F: { - Name: 'Defacontrols BV', - - }, - 0x032E: { - Name: 'DEFARO', - - }, - 0x0031: { - Name: 'Destiny Networks', - - }, - 0x0103: { - Name: 'Diehl AKO', - - }, - 0x0032: { - Name: 'Digital 5, Inc.', - - }, - 0x0228: { - Name: 'DigitalZone', - - }, - 0x0108: { - Name: 'D-Link', - - }, - 0x0127: { - Name: 'DMP (Digital Monitoring Products)', - - }, - 0x0177: { - Name: 'Domino sistemi d.o.o.', - - }, - 0x020E: { - Name: 'Domitech Products, LLC', - - }, - 0x020C: { - Name: 'Dongguan Zhou Da Electronics Co.,Ltd', - - }, - 0x017D: { - Name: 'DRACOR Inc.', - - }, - 0x0184: { - Name: 'Dragon Tech Industrial, Ltd.', - - }, - 0x0223: { - Name: 'DTV Research Unipessoal, Lda', - - }, - 0x0272: { - Name: 'Dune-HD', - - }, - 0x031B: { - Name: 'DVACO GROUP', - - }, - 0x0132: { - Name: 'DynaQuip Controls', - - }, - 0x0247: { - Name: 'EASY SAVER Co., Inc', - - }, - 0x017C: { - Name: 'EbV', - - }, - 0x016B: { - Name: 'Echostar', - - }, - 0x028F: { - Name: 'Eco Automation', - - }, - 0x014A: { - Name: 'Ecolink', - - }, - 0x0157: { - Name: 'EcoNet Controls', - - }, - 0x031F: { - Name: 'Eelectron SpA', - - }, - 0x010D: { - Name: 'e-Home AUTOMATION', - - }, - 0x026B: { - Name: 'Ei Electronics ', - - }, - 0x0087: { - Name: 'Eka Systems', - - }, - 0x021F: { - Name: 'Elexa Consumer Products Inc.', - - }, - 0x0034: { - Name: 'El-Gev Electronics LTD', - - }, - 0x001B: { - Name: 'ELK Products, Inc.', - - }, - 0x020B: { - Name: 'Embedded System Design Limited', - - }, - 0x0035: { - Name: 'Embedit A/S', - - }, - 0x0284: { - Name: 'Empers Tech Co., Ltd.', - - }, - 0x014D: { - Name: 'Enblink Co. Ltd', - - }, - 0x0219: { - Name: 'Enwox Technologies s.r.o.', - - }, - 0x006F: { - Name: 'Erone', - - }, - 0x0160: { - Name: 'Essence Security', - - }, - 0x029B: { - Name: 'ESSENTIAL TECHNOLOGIES INC.', - - }, - 0x0036: { - Name: 'Exceptional Innovations', - - }, - 0x009F: { - Name: 'Exigent Sensors', - - }, - 0x0233: { - Name: 'eZEX Corporation', - - }, - 0x016A: { - Name: 'Fantem', - - }, - 0x0295: { - Name: 'fifthplay nv', - - }, - 0x018D: { - Name: 'Flextronics', - - }, - 0x0024: { - Name: 'Flue Sentinel', - - }, - 0x0037: { - Name: 'Foard Systems', - - }, - 0x018F: { - Name: 'Focal Point Limited', - - }, - 0x0207: { - Name: 'Forest Group Nederland B.V', - - }, - 0x011D: { - Name: 'Foxconn', - - }, - 0x0110: { - Name: 'Frostdale', - - }, - 0x0305: { - Name: 'Future Home AS', - - }, - 0x025A: { - Name: 'GES', - - }, - 0x022B: { - Name: 'GKB Security Corporation', - - }, - 0x018A: { - Name: 'Globalchina-Tech', - - }, - 0x0159: { - Name: 'Goap', - - }, - 0x0076: { - Name: 'Goggin Research', - - }, - 0x0068: { - Name: 'Good Way Technology Co., Ltd', - - }, - 0x0099: { - Name: 'GreenWave Reality Inc.', - - }, - 0x018B: { - Name: 'Grib', - - }, - 0x016D: { - Name: 'Guangzhou Ruixiang M&E Co., Ltd', - - }, - 0x0158: { - Name: 'GuangZhou Zeewave Information Technology Co., Ltd.', - - }, - 0x0287: { - Name: 'HAB Home Intelligence, LLC', - - }, - 0x030D: { - Name: 'Hampoo', - - }, - 0x0208: { - Name: 'HANK Electronics Ltd', - - }, - 0x024C: { - Name: 'Hankook Gas Kiki CO.,LTD. ', - - }, - 0x025C: { - Name: 'Hauppauge', - - }, - 0x0073: { - Name: 'Hawking Technologies Inc.', - - }, - 0x020F: { - Name: 'Herald Datanetics Limited', - - }, - 0x0017: { - Name: 'HiTech Automation', - - }, - 0x0181: { - Name: 'Holion Electronic Engineering Co., Ltd', - - }, - 0x013E: { - Name: 'Holtec Electronics BV', - - }, - 0x000D: { - Name: 'Home Automated Living', - - }, - 0x009A: { - Name: 'Home Automation Europe', - - }, - 0x005B: { - Name: 'Home Automation Inc.', - - }, - 0x0293: { - Name: 'Home controls', - - }, - 0x0038: { - Name: 'Home Director', - - }, - 0x0070: { - Name: 'Homemanageables, Inc.', - - }, - 0x0050: { - Name: 'Homepro', - - }, - 0x000C: { - Name: 'HomeSeer Technologies', - - }, - 0x0275: { - Name: 'Honest Technology', - - }, - 0x023D: { - Name: 'Honest Technology Co., Ltd.', - - }, - 0x0313: { - Name: 'Hoppe', - - }, - 0x0298: { - Name: 'Horus Smart Control', - - }, - 0x0221: { - Name: 'HOSEOTELNET', - - }, - 0x0180: { - Name: 'Huapin Information Technology Co.,Ltd', - - }, - 0x025F: { - Name: 'Huawei Device Co., Ltd. ', - - }, - 0x024B: { - Name: 'Huawei Technologies Co., Ltd.', - - }, - 0x007C: { - Name: 'Hunter Douglas', - - }, - 0x0218: { - Name: 'iAutomade Pte Ltd', - - }, - 0x0011: { - Name: 'iCOM Technology b.v.', - - }, - 0x0106: { - Name: 'iControl Networks', - - }, - 0x0165: { - Name: 'ID-RF', - - }, - 0x019E: { - Name: 'iEXERGY GmbH', - - }, - 0x031C: { - Name: 'Ilevia srl', - - }, - 0x0056: { - Name: 'Impact Technologies and Products', - - }, - 0x0061: { - Name: 'Impact Technologies BV', - - }, - 0x012B: { - Name: 'Infusion Development', - - }, - 0x006C: { - Name: 'Ingersoll Rand (Schlage)', - - }, - 0x011F: { - Name: 'Ingersoll Rand (was Ecolink)', - - }, - 0x0256: { - Name: 'Inkel Corp.', - - }, - 0x003A: { - Name: 'Inlon Srl', - - }, - 0x0141: { - Name: 'Innoband Technologies, Inc', - - }, - 0x031E: { - Name: 'Inovelli', - - }, - 0x0100: { - Name: 'Insignia', - - }, - 0x0006: { - Name: 'Intel', - - }, - 0x001C: { - Name: 'IntelliCon', - - }, - 0x0072: { - Name: 'Interactive Electronics Systems (IES)', - - }, - 0x0005: { - Name: 'Intermatic', - - }, - 0x0013: { - Name: 'Internet Dom', - - }, - 0x0288: { - Name: 'INTERSOFT', - - }, - 0x0278: { - Name: 'Inventec', - - }, - 0x005F: { - Name: 'IQ-Group', - - }, - 0x0212: { - Name: 'iRevo', - - }, - 0x0253: { - Name: 'iungo.nl B.V.', - - }, - 0x0123: { - Name: 'IWATSU', - - }, - 0x0063: { - Name: 'Jasco Products', - - }, - 0x015A: { - Name: 'Jin Tao Bao', - - }, - 0x0164: { - Name: 'JSW Pacific Corporation', - - }, - 0x0214: { - Name: 'Kaipule Technology Co., Ltd.', - - }, - 0x0091: { - Name: 'Kamstrup A/S', - - }, - 0x006A: { - Name: 'Kellendonk Elektronik', - - }, - 0x0114: { - Name: 'Kichler', - - }, - 0x0139: { - Name: 'KlickH Pvt Ltd.', - - }, - 0x0261: { - Name: 'KOOL KONCEPTS', - - }, - 0x0174: { - Name: 'Kopera Development Inc.', - - }, - 0x023A: { - Name: 'KUMHO ELECTRIC, INC', - - }, - 0x0051: { - Name: 'Lagotek Corporation', - - }, - 0x0173: { - Name: 'Leak Intelligence, LLC', - - }, - 0x0300: { - Name: 'LEEDARSON LIGHTING CO., LTD.', - - }, - 0x0187: { - Name: 'LEVION Technologies GmbH', - - }, - 0x0015: { - Name: 'Lexel', - - }, - 0x015B: { - Name: 'LG Electronics', - - }, - 0x0224: { - Name: 'LifeShield, LLC', - - }, - 0x003C: { - Name: 'Lifestyle Networks', - - }, - 0x0210: { - Name: 'Light Engine Limited', - - }, - 0x0316: { - Name: 'Lite Automation', - - }, - 0x017A: { - Name: 'Liveguard Ltd.', - - }, - 0x013A: { - Name: 'Living Style Enterprises, Ltd.', - - }, - 0x015E: { - Name: 'Locstar Technology Co., Ltd', - - }, - 0x007F: { - Name: 'Logitech', - - }, - 0x0025: { - Name: 'Loudwater Technologies, LLC', - - }, - 0x025E: { - Name: 'LUXEASY technology company LTD.', - - }, - 0x0062: { - Name: 'LVI Produkter AB', - - }, - 0x0192: { - Name: 'm2m Solution', - - }, - 0x0195: { - Name: 'M2M Solution', - - }, - 0x006E: { - Name: 'Manodo / KTC', - - }, - 0x003D: { - Name: 'Marmitek BV', - - }, - 0x003E: { - Name: 'Martec Access Products', - - }, - 0x008F: { - Name: 'MB Turn Key Design', - - }, - 0x015F: { - Name: 'McoHome Technology Co., Ltd', - - }, - 0x0222: { - Name: 'MCT CO., LTD', - - }, - 0x0027: { - Name: 'Meedio, LLC', - - }, - 0x0107: { - Name: 'MegaChips', - - }, - 0x022D: { - Name: 'Mercury Corporation', - - }, - 0x0238: { - Name: 'Milanity, Inc.', - - }, - 0x0112: { - Name: 'MITSUMI', - - }, - 0x019D: { - Name: 'MOBILUS MOTOR Spółka z o.o. ', - - }, - 0x0232: { - Name: 'MODACOM CO., LTD.', - - }, - 0x008D: { - Name: 'Modstrøm', - - }, - 0x000E: { - Name: 'Mohito Networks', - - }, - 0x0202: { - Name: 'Monoprice', - - }, - 0x007E: { - Name: 'Monster Cable', - - }, - 0x003F: { - Name: 'Motorola', - - }, - 0x0122: { - Name: 'MSK - Miyakawa Seisakusho', - - }, - 0x0083: { - Name: 'MTC Maintronic Germany', - - }, - 0x0143: { - Name: 'myStrom', - - }, - 0x016E: { - Name: 'Nanjing Easthouse Electrical Co., Ltd.', - - }, - 0x0121: { - Name: 'Napco Security Technologies, Inc.', - - }, - 0x006D: { - Name: 'Nefit', - - }, - 0x0189: { - Name: 'Ness Corporation Pty Ltd', - - }, - 0x0133: { - Name: 'Netgear', - - }, - 0x0248: { - Name: 'neusta next GmbH & Co. KG', - - }, - 0x0203: { - Name: 'Newland Communication Science Technology Co., Ltd.', - - }, - 0x0268: { - Name: 'Nexa Trading AB', - - }, - 0x0178: { - Name: 'Nexia Home Intelligence', - - }, - 0x0075: { - Name: 'NextEnergy', - - }, - 0x0312: { - Name: 'NIE Technology Co., Ltd', - - }, - 0x0185: { - Name: 'Ningbo Sentek Electronics Co., Ltd', - - }, - 0x014F: { - Name: 'Nortek Security & Control LLC ', - - }, - 0x0252: { - Name: 'North China University of Technology', - - }, - 0x0096: { - Name: 'NorthQ', - - }, - 0x0040: { - Name: 'Novar Electrical Devices and Systems (EDS)', - - }, - 0x020D: { - Name: 'Novateqni HK Ltd', - - }, - 0x0296: { - Name: 'OBLO LIVING LLC', - - }, - 0x0119: { - Name: 'Omnima Limited', - - }, - 0x014C: { - Name: 'OnSite Pro', - - }, - 0x0041: { - Name: 'OpenPeak Inc.', - - }, - 0x027D: { - Name: 'Oregon Automation ', - - }, - 0x0104: { - Name: 'Panasonic Electric Works Co., Ltd.', - - }, - 0x031A: { - Name: 'Panasonic ES Shin Dong-A Co., Ltd', - - }, - 0x028D: { - Name: 'Panodic Electric (Shenzhen) Limited', - - }, - 0x0257: { - Name: 'PARATECH', - - }, - 0x0172: { - Name: 'PassivSystems Limited', - - }, - 0x0322: { - Name: 'Paxton Access Ltd', - - }, - 0x0281: { - Name: 'PC Partner', - - }, - 0x013D: { - Name: 'Pella', - - }, - 0x0245: { - Name: 'permundo GmbH', - - }, - 0x013C: { - Name: 'Philio Technology Corp', - - }, - 0x0277: { - Name: 'Pixela Corporation ', - - }, - 0x010E: { - Name: 'Danalock', - - }, - 0x0170: { - Name: 'Powerhouse Dynamics', - - }, - 0x0074: { - Name: 'PowerLinx', - - }, - 0x0016: { - Name: 'PowerLynx', - - }, - 0x0042: { - Name: 'Pragmatic Consulting Inc.', - - }, - 0x0128: { - Name: 'Prodrive Technologies', - - }, - 0x0161: { - Name: 'Promixis, LLC', - - }, - 0x005D: { - Name: 'Pulse Technologies (Aspalis)', - - }, - 0x012A: { - Name: 'Qolsys', - - }, - 0x0130: { - Name: 'Quby', - - }, - 0x0163: { - Name: 'Queenlock Ind. Co., Ltd.', - - }, - 0x0314: { - Name: 'Raonix Co., Ltd.', - - }, - 0x021E: { - Name: 'Red Bee Co. Ltd', - - }, - 0x022C: { - Name: 'Remote Solution', - - }, - 0x0255: { - Name: 'Remote Technologies Incorporated', - - }, - 0x0010: { - Name: 'Residential Control Systems, Inc. (RCS)', - - }, - 0x0216: { - Name: 'RET Nanjing Intelligence System CO.,Ltd', - - }, - 0x0153: { - Name: 'Revolv Inc', - - }, - 0x023B: { - Name: 'ROC-Connect, Inc.', - - }, - 0x0197: { - Name: 'RPE Ajax LLC (dbs Secur Ltd)', - - }, - 0x0065: { - Name: 'RS Scene Automation', - - }, - 0x029D: { - Name: 'Rubetek', - - }, - 0x0290: { - Name: 'S1', - - }, - 0x023C: { - Name: 'SafeTech Products', - - }, - 0x0201: { - Name: 'Samsung Electronics Co., Ltd.', - - }, - 0x022E: { - Name: 'Samsung SDS', - - }, - 0x0093: { - Name: 'San Shih Electrical Enterprise Co., Ltd.', - - }, - 0x012C: { - Name: 'SANAV', - - }, - 0x0307: { - Name: 'SATCO Products, Inc. ', - - }, - 0x0318: { - Name: 'SBCK Corp. ', - - }, - 0x001F: { - Name: 'Scientia Technologies, Inc.', - - }, - 0x029A: { - Name: 'Scout Alarm', - - }, - 0x011E: { - Name: 'Secure Wireless', - - }, - 0x0167: { - Name: 'SecureNet Technologies', - - }, - 0x0182: { - Name: 'Securifi Ltd.', - - }, - 0x0069: { - Name: 'Seluxit', - - }, - 0x0043: { - Name: 'Senmatic A/S', - - }, - 0x019A: { - Name: 'Sensative AB', - - }, - 0x0044: { - Name: 'Sequoia Technology LTD', - - }, - 0x0151: { - Name: 'Sercomm Corp', - - }, - 0x030B: { - Name: 'Shandong Smart Life Data System Co .LTD', - - }, - 0x0215: { - Name: 'Shangdong Smart Life Data System Co.,Ltd', - - }, - 0x023E: { - Name: 'Shanghai Dorlink Intelligent Technologies Co.,Ltd', - - }, - 0x0205: { - Name: 'Shanghai Longchuang Eco-energy Systems Co., Ltd', - - }, - 0x010B: { - Name: 'Sharp', - - }, - 0x021A: { - Name: 'SHENZHEN AOYA INDUSTRY CO. LTD', - - }, - 0x0286: { - Name: 'Shenzhen Easyhome Technology Co., Ltd.', - - }, - 0x021C: { - Name: 'Shenzhen iSurpass Technology Co. ,Ltd', - - }, - 0x021D: { - Name: 'Shenzhen Kaadas Intelligent Technology Co., Ltd', - - }, - 0x0211: { - Name: 'Shenzhen Liao Wang Tong Da Technology Ltd', - - }, - 0x0258: { - Name: 'Shenzhen Neo Electronics Co., Ltd', - - }, - 0x0250: { - Name: 'Shenzhen Tripath Digital Audio Equipment Co.,Ltd', - - }, - 0x0260: { - Name: 'Shenzhen Heiman Technology Co., Ltd', - - }, - 0x032C: { - Name: 'Shenzhen Saykey Technology Co., Ltd ', - - }, - 0x0267: { - Name: 'SimonTech S.L.U', - - }, - 0x0045: { - Name: 'Sine Wireless', - - }, - 0x0266: { - Name: 'Siterwell Technology HK Co., LTD ', - - }, - 0x0282: { - Name: 'Smart Electronic Industrial (Dongguan) Co., Limited', - - }, - 0x0046: { - Name: 'Smart Products, Inc.', - - }, - 0x026A: { - Name: 'SmartAll Inc.', - - }, - 0x0323: { - Name: 'SmartHome Partner GmbH', - - }, - 0x024F: { - Name: 'Smartly AS', - - }, - 0x0150: { - Name: 'SmartThings, Inc.', - - }, - 0x0102: { - Name: 'SMK Manufacturing Inc.', - - }, - 0x029C: { - Name: 'SoftAtHome', - - }, - 0x0047: { - Name: 'Somfy', - - }, - 0x0274: { - Name: 'Soosan Hometech', - - }, - 0x0090: { - Name: 'Spectrum Brands', - - }, - 0x026E: { - Name: 'Springs Window Fashions', - - }, - 0x026F: { - Name: 'Sprue Safety Products Ltd', - - }, - 0x0124: { - Name: 'Square Connect', - - }, - 0x021B: { - Name: 'ST&T Electric Corporation', - - }, - 0x0259: { - Name: 'Starkoff', - - }, - 0x0265: { - Name: 'StarVedia', - - }, - 0x0271: { - Name: 'STEINEL GmbH ', - - }, - 0x0239: { - Name: 'Stelpro', - - }, - 0x0217: { - Name: 'Strattec Advanced Logic,LLC', - - }, - 0x0168: { - Name: 'STRATTEC Security Corporation', - - }, - 0x0105: { - Name: 'Sumitomo', - - }, - 0x028B: { - Name: 'Sunjet Components Corp.', - - }, - 0x0054: { - Name: 'Superna', - - }, - 0x0191: { - Name: 'Swann Communications Pty Ltd', - - }, - 0x0009: { - Name: 'Sylvania', - - }, - 0x0136: { - Name: 'Systech Corporation', - - }, - 0x0276: { - Name: 'Systemair Sverige AB', - - }, - 0x0235: { - Name: 'TAEWON Lighting Co., Ltd.', - - }, - 0x0262: { - Name: 'Taiwan Fu Hsing Industrial Co., Ltd.', - - }, - 0x0264: { - Name: 'Taiwan iCATCH Inc.', - - }, - 0x0186: { - Name: 'Team Digital Limited', - - }, - 0x0089: { - Name: 'Team Precision PCL', - - }, - 0x0240: { - Name: 'Technicolor', - - }, - 0x000A: { - Name: 'Techniku', - - }, - 0x012F: { - Name: 'Tecom Co., Ltd.', - - }, - 0x0176: { - Name: 'Telldus Technologies AB', - - }, - 0x0048: { - Name: 'Telsey', - - }, - 0x017E: { - Name: 'Telular', - - }, - 0x005C: { - Name: 'Terra Optima B.V. (tidligere Primair Services)', - - }, - 0x010C: { - Name: 'There Corporation', - - }, - 0x019B: { - Name: 'HeatIt', - - }, - 0x0317: { - Name: 'Think Simple srl', - - }, - 0x022A: { - Name: 'TIMEVALVE, Inc.', - - }, - 0x0118: { - Name: 'TKB Home', - - }, - 0x011C: { - Name: 'TKH Group / Eminent', - - }, - 0x0327: { - Name: 'TMC Technology Ltd.', - - }, - 0x0319: { - Name: 'Toledo & Co., Inc.', - - }, - 0x0283: { - Name: 'TP-Link Technologies Co., Ltd.', - - }, - 0x008B: { - Name: 'Trane Corporation', - - }, - 0x0055: { - Name: 'Tridium', - - }, - 0x0111: { - Name: 'Tronico Technology Co. Ltd.', - - }, - 0x0049: { - Name: 'Twisthink', - - }, - 0x0152: { - Name: 'UFairy G.R. Tech', - - }, - 0x0193: { - Name: 'Universal Devices, Inc', - - }, - 0x0183: { - Name: 'Universe Future', - - }, - 0x0209: { - Name: 'UTC Fire and Security Americas Corp', - - }, - 0x010A: { - Name: 'VDA', - - }, - 0x030F: { - Name: 'Vemmio', - - }, - 0x0198: { - Name: 'Venstar Inc.', - - }, - 0x0237: { - Name: 'Vestel Elektronik Ticaret ve Sanayi A.S.', - - }, - 0x0053: { - Name: 'Viewsonic', - - }, - 0x005E: { - Name: 'ViewSonic Corporation', - - }, - 0x0007: { - Name: 'Vimar CRS', - - }, - 0x0188: { - Name: 'Vipa-Star', - - }, - 0x004A: { - Name: 'Visualize', - - }, - 0x0058: { - Name: 'Vitelec', - - }, - 0x0263: { - Name: 'Viva Labs AS', - - }, - 0x0156: { - Name: 'Vivint', - - }, - 0x017B: { - Name: 'Vs-Safety AS', - - }, - 0x004B: { - Name: 'Watt Stopper', - - }, - 0x0008: { - Name: 'Wayne Dalton', - - }, - 0x019F: { - Name: 'Webee Life', - - }, - 0x0171: { - Name: 'WeBeHome AB', - - }, - 0x011A: { - Name: 'Wenzhou MTLC Electric Appliances Co.,Ltd.', - - }, - 0x026C: { - Name: 'Westcontrol AS', - - }, - 0x0057: { - Name: 'Whirlpool', - - }, - 0x027B: { - Name: 'White Rabbit', - - }, - 0x0149: { - Name: 'wiDom', - - }, - 0x015D: { - Name: 'Willis Electric Co., Ltd.', - - }, - 0x012D: { - Name: 'Wilshine Holding Co., Ltd', - - }, - 0x017F: { - Name: 'Wink Inc.', - - }, - 0x0242: { - Name: 'Winytechnology', - - }, - 0x0199: { - Name: 'Wireless Maingate AB', - - }, - 0x004C: { - Name: 'Woodward Labs', - - }, - 0x0269: { - Name: 'WOOREE Lighting Co.,Ltd.', - - }, - 0x0003: { - Name: 'Wr@p', - - }, - 0x022F: { - Name: 'WRT Intelligent Technology CO., LTD.', - - }, - 0x012E: { - Name: 'Wuhan NWD Technology Co., Ltd.', - - }, - 0x004D: { - Name: 'Xanboo', - - }, - 0x024E: { - Name: 'zConnect', - - }, - 0x004E: { - Name: 'Zdata, LLC.', - - }, - 0x016F: { - Name: 'Zhejiang Jiuxing Electric Co Ltd', - - }, - 0x0131: { - Name: 'Zipato', - - }, - 0x0120: { - Name: 'Zonoff', - - }, - 0x027A: { - Name: 'Zooz', - - }, - 0x031D: { - Name: 'Z-Wave Alliance', - - }, - 0x004F: { - Name: 'Z-Wave Technologia', - - }, - 0x0315: { - Name: 'zwaveproducts.com', - - }, - 0x024D: { - Name: 'Z-works Inc.', - - }, - 0x0021: { - Name: 'Zykronix', - - }, - 0x0135: { - Name: 'ZyXEL', - - }, - 0x0330: { - Name: 'Sunricher', - - }, - 0x033A: { - Name: 'HELTUN', - Webpage : 'heltun.com', - } -}; \ No newline at end of file diff --git a/src/sapi/zuno_sapi.ts b/src/sapi/zuno_sapi.ts deleted file mode 100644 index 8e3afaf..0000000 --- a/src/sapi/zuno_sapi.ts +++ /dev/null @@ -1,845 +0,0 @@ -import {WEB_TOOLS_BETA} from "../other/define" - -import { - SapiClass, SapiClassStatus, SapiClassFuncId, SapiClassRet, SapiClassDetectWait, SapiClassDetectType, SapiClassUpdateProcess, - SapiClassDetectTypeFunc, SapiClassDetect -} from "./sapi"; - -import {SapiRegionClass} from "./region"; - -import {costruct_int, toString, conv2Decimal, conv2DecimalPadding, checksum, arrayToStringHex, calcSigmaCRC16} from "../other/utilities"; -import {HardwareChipClass} from "../hardware/chip" - -export {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo, ZunoSapiClassParamInfo, ZunoSapiClassRegion, ZunoSapiClassPower, ZunoSapiClassS2Key, ZunoSapiClassSec}; - -enum ELearnStatus -{ - ELEARNSTATUS_ASSIGN_COMPLETE, /**< Internal status. Not passed to application. */ - ELEARNSTATUS_ASSIGN_NODEID_DONE, /**< Internal status. Node ID have been assigned */ - ELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE, /**< Internal status. Node is doing Neighbor discovery */ - ELEARNSTATUS_ASSIGN_INFO_PENDING, /**< Internal status. Not passed to application. */ - ELEARNSTATUS_ASSIGN_WAITING_FOR_FIND, /**< Internal status. Not passed to application. */ - ELEARNSTATUS_SMART_START_IN_PROGRESS, /**< Passed to application when Smart Start learn mode goes into progress. */ - ELEARNSTATUS_LEARN_IN_PROGRESS, /**< Passed to application when classic learn mode goes into progress. */ - ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT,/**< Passed to application if classic learn mode times out. */ - ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED, /**< Passed to application if learn mode failed. */ - ELEARNSTATUS_PROCESS = -1, -} - -interface ZunoSapiClassPower -{ - status:ZunoSapiClassStatus; - power_raw:number; - step:number; - min:number; - max:number; -} - -interface ZunoSapiClassSec -{ - status:ZunoSapiClassStatus; - sec:boolean; -} - -interface ZunoSapiClassS2Key -{ - status:ZunoSapiClassStatus; - list:Array<{key: Uint8Array; name: string;}>; -} - - -interface ZunoSapiClassRegion -{ - status:ZunoSapiClassStatus; - region:string; - region_array:string[]; -} - -enum ZunoSapiClassStatus -{ - OK = SapiClassStatus.OK, - NOT_INIT = SapiClassStatus.LAST_STATUS, - WRONG_LENGTH_CMD, - WRONG_STATUS, - WRONG_IN_DATA, - NO_FREEZE, - INVALID_ARG, - TIMEOUT, - UN_SUPPORT, - TIMEOUT_FORCE_RESTART, - LEARN_EXCLUDE, - LEARN_INCLUDE, - SCETCH_TOO_LONG, - SCETCH_FALLED_PRIAMLE, - SCETCH_FALLED_CORE_VERSION, - SCETCH_FALLED_REVISION, - SCETCH_FALLED_CRC16, -} - -interface ZunoSapiClassBoardInfoZwDataProt -{ - s2_keys:number; - device_type:number; - device_icon:number; - vendor:number; - product_type:number; - product_id:number; - version:number; - LR:boolean; -} - -interface ZunoSapiClassParamInfo -{ - status:ZunoSapiClassStatus; - raw:Array; - freq_i:number; - main_pow:number; - sec:boolean; -} - -interface ZunoSapiClassBoardInfoProduction -{ - prod_raw:Uint8Array; - prod_parent_uuid:Uint8Array; - prod_ts:number; - prod_sn:number; - prod_crc8:number; - prod_valid:boolean; -} - -interface ZunoSapiClassLicenseFlag -{ - name:string; - title:string; - active:boolean; -} - - -interface ZunoSapiClassBoardInfoLicense -{ - lic_subvendor:number; - lic_flags_raw:Uint8Array; - lic_flags:{[key:number]: ZunoSapiClassLicenseFlag}; -} - -interface ZunoSapiClassBoardInfoChip -{ - chip_family:number; - chip_type:number; - keys_hash:number; - se_version:number; -} - -interface ZunoSapiClassBoardInfo -{ - status:ZunoSapiClassStatus; - core_version:number; - version:number; - build_number:number; - build_ts:number; - hw_rev:number; - code_size:number; - ram_size:number - custom_code_offset:number; - boot_offset:number; - boot_version:number; - chip_uuid:Uint8Array; - s2_pub:Uint8Array; - max_default_power:number; - ext_nvm:number; - dbg_lock:number; - chip:ZunoSapiClassBoardInfoChip; - zwdata?:ZunoSapiClassBoardInfoZwDataProt, - smart_qr?:string; - home_id?:number; - node_id?:number; - product?:ZunoSapiClassBoardInfoProduction; - license?:ZunoSapiClassBoardInfoLicense; -} -// ------------------------------------------------------------------------------------------------------ - -class ZunoSapiClass { - private readonly KEY_UNAUTH_NAME:string = "unauth"; - private readonly KEY_AUTH_NAME:string = "auth"; - private readonly KEY_ACCESS_NAME:string = "access"; - private readonly KEY_S0_NAME:string = "s0"; - - private readonly ZUNO_HEADER_PREAMBL:string = "ZMEZUNOC"; - - private readonly SK_HEADER_SIZE:number = 0xC0; - private readonly SK_HEADER_VERSION_MSB_OFFSET:number = 0x08; - private readonly SK_HEADER_VERSION_LSB_OFFSET:number = 0x09; - private readonly SK_HEADER_NAME_START:number = 56; - private readonly SK_HEADER_MAX_NAME:number = 47; - private readonly SK_HEADER_HWREW_OFFSET:number = this.SK_HEADER_NAME_START + this.SK_HEADER_MAX_NAME + 1; - - private readonly LICENSE_KEY_DUMP_S2:number = 0x1; - private readonly LICENSE_KEY_LONG_RANGE:number = 0x5; - private readonly license_flags: {[key:number]: ZunoSapiClassLicenseFlag} = - { - 0x00: {name:"Pti", title: "Provides Packet Trace Interface (PTI) capabilities. Turns ZUno to advanced sniffer.", active:false}, - 0x01: {name:"Key dump", title: "Enables Z-Wave network key dump using Z-Uno.", active:false}, - 0x02: {name:"Custom vendor", title: "Use custom vendor code intead of 0115 (ZME)", active:false}, - 0x03: {name:"Modem", title: "ZUno works as direct transmitter.", active:false}, - 0x04: {name:"Max power", title: "User is able to use the maximum power of radio amplifier.", active:false}, - 0x05: {name:"Long Range", title: "Enables Z-Wave LongRange technology support.", active:false}, - }; - - private readonly sapi:SapiClass; - - private board_info:ZunoSapiClassBoardInfo = this._get_board_info_default(); - private param_info:ZunoSapiClassParamInfo = this._get_param_info_default(); - - private region:SapiRegionClass = new SapiRegionClass(); - - private _get_param_info_default(): ZunoSapiClassParamInfo { - const param_info:ZunoSapiClassParamInfo = - { - status:ZunoSapiClassStatus.NOT_INIT, freq_i:0x0, raw:[], main_pow:0x0, sec:false - }; - return (param_info); - } - - private _get_board_info_default(): ZunoSapiClassBoardInfo { - const board_info:ZunoSapiClassBoardInfo = - { - status:ZunoSapiClassStatus.NOT_INIT, version:0x0, build_number:0x0, build_ts:0x0, hw_rev:0x0, code_size:0x0, ram_size:0x0, dbg_lock:0x0, custom_code_offset:0x30000, chip_uuid: new Uint8Array(), s2_pub: new Uint8Array(), - boot_offset:0x3a000, boot_version: 0x0, max_default_power:50, ext_nvm:0x0, chip : {chip_type:HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family:HardwareChipClass.FAMILY_ZGM13, keys_hash:0x8E19CC54, se_version:0x0}, - core_version:0x0 - }; - return (board_info); - } - - private async compile_zwave_qrcode(product_data:ZunoSapiClassBoardInfoZwDataProt, dsk:Uint8Array, version:number): Promise { - let protocol_map:number, text:string; - - text = conv2DecimalPadding(product_data["s2_keys"], 3); - text = text + conv2Decimal(dsk, ""); - // #ProductType - text = text + "0010" + conv2DecimalPadding(product_data["device_type"], 5) + conv2DecimalPadding(product_data["device_icon"], 5); - // #ProductID - text = text + "0220" + conv2DecimalPadding(product_data["vendor"], 5) + conv2DecimalPadding(product_data["product_type"], 5) + conv2DecimalPadding(product_data["product_id"], 5) + conv2DecimalPadding(version, 5); - // # Supported Protocols - protocol_map = 0x01; - if (product_data["LR"] == true) - protocol_map = protocol_map | 0x02; - text += "0803" + conv2DecimalPadding(protocol_map, 3); - // # MaxInclusionInterval - text = text + "0403005";// # ==5*128=640 - const buf:ArrayBuffer = Uint8Array.from(unescape(encodeURIComponent(text)), c=>c.charCodeAt(0)).buffer; - const digest:Uint8Array = new Uint8Array(await crypto.subtle.digest('SHA-1', buf)); - text = "9001" + conv2DecimalPadding((digest[0x0] << 0x8) | digest[0x1], 5) + text; - return (text); - } - - - private async _readNVM(addr:number, size:number): Promise { - return (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF])); - } - - private async _writeNVM(addr:number, buff:Array): Promise { - const size = buff.length; - const data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF]; - return (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(buff))); - } - - private async _get_param_info(): Promise { - this.param_info = this._get_param_info_default(); - const out:ZunoSapiClassParamInfo = this.param_info; - const param_info:SapiClassRet = await this._readNVM(0xFFE000, 0x09); - if (param_info.status != SapiClassStatus.OK) { - out.status = ((param_info.status as unknown) as ZunoSapiClassStatus); - return ; - } - const param:Array = param_info.data; - if (param.length < 0x5) { - out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; - return ; - } - out.status = ZunoSapiClassStatus.OK; - out.raw = param; - out.freq_i = param_info.data[1]; - out.main_pow = param_info.data[2]; - if (param_info.data[4] != 0x0) - out.sec = true; - } - - private async _get_board_info_add(): Promise { - let code_sz_shift:number, shift_smrt:number, eu_lr:boolean, byte_i:number, bit_i:number; - - this.board_info = this._get_board_info_default(); - const out:ZunoSapiClassBoardInfo = this.board_info; - const board_info:SapiClassRet = await this._readNVM(0xFFFF00, 0x01); - if (board_info.status != SapiClassStatus.OK) { - out.status = ((board_info.status as unknown) as ZunoSapiClassStatus); - return ; - } - const info:Array = board_info.data; - if (info.length < 42) { - out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; - return ; - } - out.status = ZunoSapiClassStatus.OK; - const version:number = ((info[0] << 8) | (info[1])); - out.core_version = version; - out.build_number = (info[2] << 24) | (info[3] << 16) | (info[4] << 8) | (info[5]); - out.version = (version << 16 | (out.build_number & 0xFFFF)); - out.build_ts = (info[6] << 24) | (info[7] << 16) | (info[8] << 8) | (info[9]); - out.hw_rev = (info[10] << 8) | (info[11]); - if (out.build_number > 1116) { - code_sz_shift = 0x1; - out.code_size = costruct_int(info.slice(12,12+3), 3, false); - } - else { - code_sz_shift = 0x0; - out.code_size = (info[12] << 8) | (info[13]); - } - out.ram_size = (info[14+code_sz_shift] << 8) | (info[15+code_sz_shift]); - out.chip_uuid = new Uint8Array(info.slice(16+code_sz_shift,16+code_sz_shift+8)); - out.s2_pub = new Uint8Array(info.slice(24+code_sz_shift,24+code_sz_shift+16)); - out.dbg_lock = info[40+code_sz_shift]; - const offset_base:number = 46; - if (info.length < offset_base) - return ; - out.home_id = costruct_int(info.slice(41+code_sz_shift,41+code_sz_shift+4), 4, false); - out.node_id = info[45+code_sz_shift]; - if (out.build_number < 1669) { - shift_smrt = 90; - if (info.length < (offset_base + code_sz_shift + shift_smrt)) - return ; - out.smart_qr = toString(info.slice(46+code_sz_shift,46+code_sz_shift+90)); - } - else { - shift_smrt = 11; - if (info.length < (offset_base + code_sz_shift + shift_smrt)) - return ; - out.zwdata = - { - s2_keys: info[46+code_sz_shift], - device_type: costruct_int(info.slice(47+code_sz_shift, 47+code_sz_shift+2), 2, false), - device_icon: costruct_int(info.slice(49+code_sz_shift, 49+code_sz_shift+2), 2, false), - vendor: costruct_int(info.slice(51+code_sz_shift, 51+code_sz_shift+2), 2, false), - product_type: costruct_int(info.slice(53+code_sz_shift, 53+code_sz_shift+2), 2, false), - product_id: costruct_int(info.slice(55+code_sz_shift, 55+code_sz_shift+2), 2, false), - version: version, - LR: false, - }; - out.smart_qr = await this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version); - } - const offset_code:number = offset_base + code_sz_shift + shift_smrt; - if (info.length < (offset_code + 0x4)) - return ; - out.custom_code_offset = costruct_int(info.slice(offset_code, offset_code + 0x4), 0x4, false); - if(out.custom_code_offset > 0x36000) - out.boot_offset = 0x40000; - const offset_prod:number = offset_code + 0x4; - if (info.length < (offset_prod + 0x10)) - return ; - out.product = - { - prod_raw: new Uint8Array(info.slice(offset_prod, offset_prod + 0x10)), - prod_parent_uuid: new Uint8Array(info.slice(offset_prod, offset_prod + 0x8)), - prod_ts: costruct_int(info.slice(offset_prod + 0x8, offset_prod +0x8 + 0x4), 0x4, true), - prod_sn: costruct_int(info.slice(offset_prod + 0x8 + 0x4, offset_prod +0x8 + 0x4 + 0x3), 0x3, true), - prod_crc8: info[offset_prod + 0x8 + 0x4 + 0x3], - prod_valid: (info[offset_prod + 0x8 + 0x4 + 0x3] == checksum(info.slice(offset_prod, offset_prod + 0x10 - 0x1))) ? true:false - }; - const offset_license:number = offset_prod + 0x10; - if (info.length < (offset_license + 0xA)) - return ; - out.license = - { - lic_subvendor: costruct_int(info.slice(offset_license, offset_license + 0x2), 0x2, false), - lic_flags_raw: new Uint8Array(info.slice(offset_license + 0x2, offset_license + 0x2 + 0x8)), - lic_flags: this.license_flags, - }; - byte_i = 0x0; - while (byte_i < out.license.lic_flags_raw.length) { - bit_i = 0x0; - while (bit_i < 0x8) { - if ((out.license.lic_flags_raw[byte_i] & (0x1 << bit_i)) != 0x0) { - if (out.license.lic_flags[byte_i * 0x8 + bit_i] != undefined) - out.license.lic_flags[byte_i * 0x8 + bit_i].active = true; - } - bit_i++; - } - byte_i++; - } - if (out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE] != undefined && out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE].active == true) { - if (out.version >= 0x30D124B) - eu_lr = true; - else - eu_lr = false; - this.region = new SapiRegionClass(true, eu_lr); - if (out.zwdata != undefined && this.param_info.status == ZunoSapiClassStatus.OK) { - const region:string|undefined = this.region.getNameRegion(this.param_info.freq_i); - if (region != undefined && this.region.isLr(region) == true) { - out.zwdata.LR = true; - out.smart_qr = await this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version); - } - } - } - - const offset_power:number = offset_license + 0xA; - if (info.length < (offset_power + 0x1)) - return ; - out.max_default_power = info[offset_power]; - const offset_ext_nvm:number = offset_power + 0x1; - if (info.length < (offset_ext_nvm + 0x2)) - return ; - out.ext_nvm = costruct_int(info.slice(offset_ext_nvm, offset_ext_nvm + 0x2), 0x2, false); - if (out.ext_nvm >= 512) - out.boot_offset = 0xA10000 + ((out.ext_nvm - 512) << 10); - const offset_chip:number = offset_ext_nvm + 0x2; - const size_chip:number = 0xA; - if (info.length < (offset_chip + size_chip)) - return ; - out.chip = - { - chip_family:info[offset_chip], - chip_type:info[offset_chip + 0x1], - keys_hash:costruct_int(info.slice(offset_chip + 0x2, offset_chip + 0x2 + 0x4), 0x4, false), - se_version:costruct_int(info.slice(offset_chip + 0x2 + 0x4, offset_chip + 0x2 + 0x4 + 0x4), 0x4, false) - }; - const offset_boot_version:number = offset_chip + size_chip; - const size_boot_version:number = 0x4; - if (info.length < (offset_boot_version + size_boot_version)) - return ; - out.boot_version = costruct_int(info.slice(offset_boot_version, offset_boot_version + size_boot_version), size_boot_version, false); - } - - private async _get_board_info(): Promise { - await this._get_board_info_add(); - if (this.board_info.status != ZunoSapiClassStatus.OK) - return ; - if (this.board_info.boot_version == 0x0) { - this.board_info.boot_version = 0x01090001; - } - if (this.board_info.chip.keys_hash == 0x0) { - this.board_info.chip.keys_hash = 0x8E19CC54; - this.board_info.chip.chip_type = HardwareChipClass.CHIP_ZGM130S037HGN1; - this.board_info.chip.chip_family = HardwareChipClass.FAMILY_ZGM13; - } - } - - private async _apply_param(raw:Array): Promise { - const res:SapiClassRet = await this._writeNVM(0xFFE000, raw); - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ZunoSapiClassStatus); - if (res.data.length < 0x1) - return (ZunoSapiClassStatus.WRONG_LENGTH_CMD); - if (res.data[0x0] != 0x1) - return (ZunoSapiClassStatus.WRONG_STATUS); - const soft_reset:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, []) - if (soft_reset.status != SapiClassStatus.OK) - return ((soft_reset.status as unknown) as ZunoSapiClassStatus); - const freeze_zuno_info:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000); - if (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) - return (ZunoSapiClassStatus.NO_FREEZE); - return (ZunoSapiClassStatus.OK); - } - - private async _load_file(addr:number, data:Uint8Array, process:SapiClassUpdateProcess|null): Promise { - let step:number, i:number, percentage:number, i_ask:number; - step = this.getQuantumSize(); - percentage = 0x0; - i = 0x0 - while (i < data.length) { - if (i + step > data.length) - step = data.length - i; - percentage = (i * 100.0) / data.length; - if (process != null) - process(percentage); - i_ask = 0x0; - for (;;) { - const status:SapiClassRet = await this._writeNVM(addr, Array.from(data.subarray(i, i + step))); - if (status.status == SapiClassStatus.OK) - break ; - if (i_ask >= 0x2) - return ((status.status as unknown) as ZunoSapiClassStatus); - if (status.status != SapiClassStatus.NO_ACK) - return ((status.status as unknown) as ZunoSapiClassStatus); - if (WEB_TOOLS_BETA == true) - console.error("second wind in renewal"); - i_ask++; - } - i = i + step - addr = addr + step - } - if (process != null && percentage < 100.00) - process(100.00); - return (ZunoSapiClassStatus.OK); - } - - public async updateFirmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - const status:ZunoSapiClassStatus = await this._load_file(this.board_info.boot_offset, data, process); - if (status != ZunoSapiClassStatus.OK) - return (status); - const res:SapiClassDetectWait = await this.sapi.update(this.board_info.boot_offset, target_type); - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ZunoSapiClassStatus); - return (ZunoSapiClassStatus.OK); - } - - private async _pushSketch(addr:number, size:number, crc16:number): Promise { - const res:SapiClassRet = await this.sapi.sendCommandUnSz(0x08, [0x01, (addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF, (crc16 >> 8) & 0xFF, (crc16) & 0xFF]) - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ZunoSapiClassStatus); - if (res.data.length < 0x1) - return (ZunoSapiClassStatus.WRONG_LENGTH_CMD); - if (res.data[0x0] == 0xFE) - return (ZunoSapiClassStatus.SCETCH_FALLED_CRC16); - return (ZunoSapiClassStatus.OK); - } - - public async updateSketch(scetch:Uint8Array, process:SapiClassUpdateProcess|null): Promise { - let status:ZunoSapiClassStatus; - - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - if (scetch.length > this.board_info.code_size) - return (ZunoSapiClassStatus.SCETCH_TOO_LONG); - const data_uint8 = scetch.slice(0, this.ZUNO_HEADER_PREAMBL.length); - const preamble:string = new TextDecoder().decode(data_uint8); - if (this.ZUNO_HEADER_PREAMBL != preamble) - return (ZunoSapiClassStatus.SCETCH_FALLED_PRIAMLE); - const header_version:number = (scetch[this.SK_HEADER_VERSION_MSB_OFFSET] << 8) | scetch[this.SK_HEADER_VERSION_LSB_OFFSET]; - if (header_version != this.board_info.core_version) - return (ZunoSapiClassStatus.SCETCH_FALLED_CORE_VERSION); - if (this.board_info.hw_rev != -1 && this.board_info.build_number >= 2849) { - const header_hw_rev:number = costruct_int(scetch.slice(this.SK_HEADER_HWREW_OFFSET, this.SK_HEADER_HWREW_OFFSET + 0x2), 2); - if (this.board_info.hw_rev != header_hw_rev) - return (ZunoSapiClassStatus.SCETCH_FALLED_REVISION); - } - status = await this._load_file(this.board_info.custom_code_offset, scetch, process); - if (status != ZunoSapiClassStatus.OK) - return (status); - const crc16:number = calcSigmaCRC16(0x1D0F, scetch, 0, scetch.length); - status = await this._pushSketch(this.board_info.custom_code_offset, scetch.length, crc16); - return (status); - } - - public getBoardInfo(): ZunoSapiClassBoardInfo { - return (this.board_info); - } - - private _isSupportRegionAndPower():ZunoSapiClassStatus { - if (this.param_info.status != ZunoSapiClassStatus.OK) - return (this.param_info.status); - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - if (this.board_info.version < 0x3080517) - return (ZunoSapiClassStatus.UN_SUPPORT); - return (ZunoSapiClassStatus.OK) - } - - public isMustResetDefault():ZunoSapiClassStatus { - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - if (this.board_info.version < 0x30D124B) - return (ZunoSapiClassStatus.UN_SUPPORT); - return (ZunoSapiClassStatus.OK) - } - - public isSupportResetDefault():ZunoSapiClassStatus { - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - if (this.board_info.version < 0x3080517) - return (ZunoSapiClassStatus.UN_SUPPORT); - return (ZunoSapiClassStatus.OK) - } - - public isSupportIncludeExclude():ZunoSapiClassStatus { - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - if (this.board_info.version < 0x30C108C) - return (ZunoSapiClassStatus.UN_SUPPORT); - return (ZunoSapiClassStatus.OK) - } - - public isSupportUpdateBootloader():ZunoSapiClassStatus { - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - if (this.board_info.product == undefined) - return (ZunoSapiClassStatus.UN_SUPPORT); - if (this.board_info.product.prod_valid == false) - return (ZunoSapiClassStatus.UN_SUPPORT); - const prod_date:Date = new Date(this.board_info.product.prod_ts * 1000); - if (prod_date.getUTCFullYear() <= 2022) - return (ZunoSapiClassStatus.UN_SUPPORT); - return (ZunoSapiClassStatus.OK) - } - - public isSupportDumpKey():ZunoSapiClassStatus { - if (this.board_info.status != ZunoSapiClassStatus.OK) - return (this.board_info.status); - if (this.board_info == undefined) - return (ZunoSapiClassStatus.UN_SUPPORT); - if (this.board_info.license == undefined) - return (ZunoSapiClassStatus.UN_SUPPORT); - if (this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2] != undefined && this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2].active == true) - return (ZunoSapiClassStatus.OK); - return (ZunoSapiClassStatus.UN_SUPPORT); - } - - private _test_dump_key(array:Uint8Array): boolean { - const empty_v1:string = "00000000000000000000000000000000"; - const empty_v2:string = "ffffffffffffffffffffffffffffffff"; - - const key:string = arrayToStringHex(array); - if (key === empty_v1 || key === empty_v2) - return (false); - return (true); - } - - public async readS2Key(): Promise { - let i:number; - - const out:ZunoSapiClassS2Key = {status:ZunoSapiClassStatus.OK, list:[]}; - out.status = this.isSupportDumpKey(); - if (out.status != ZunoSapiClassStatus.OK) - return (out); - const dump_key_info:SapiClassRet = await this._readNVM(0xFFCCC0, 0x40); - if (dump_key_info.status != SapiClassStatus.OK) { - out.status = ((dump_key_info.status as unknown) as ZunoSapiClassStatus); - return (out); - } - if (dump_key_info.data.length != 0x40) { - out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; - return (out); - } - out.list.push({key:new Uint8Array(dump_key_info.data.slice(0, 16)), name:this.KEY_UNAUTH_NAME}); - out.list.push({key:new Uint8Array(dump_key_info.data.slice(16, 32)), name:this.KEY_AUTH_NAME}); - out.list.push({key:new Uint8Array(dump_key_info.data.slice(32, 48)), name:this.KEY_ACCESS_NAME}); - out.list.push({key:new Uint8Array(dump_key_info.data.slice(48, 64)), name:this.KEY_S0_NAME}); - i = 0x0; - while (i < out.list.length) { - if (this._test_dump_key(out.list[i].key) == false) - out.list[i].key = new Uint8Array([]); - i++; - } - return (out); - } - - public getRegion(): ZunoSapiClassRegion { - const out:ZunoSapiClassRegion = {status:this._isSupportRegionAndPower(), region:"", region_array:this.region.getListRegion()}; - if (out.status != ZunoSapiClassStatus.OK) - return (out); - const region:string|undefined = this.region.getNameRegion(this.param_info.freq_i); - if (region == undefined) { - out.status = ZunoSapiClassStatus.WRONG_IN_DATA; - return (out); - } - out.region = region; - return (out); - } - - public async setRegion(region:string): Promise { - const status:ZunoSapiClassStatus = this._isSupportRegionAndPower(); - if (status != ZunoSapiClassStatus.OK) - return (status); - const region_id:number|undefined = this.region.getIdRegion(region); - if (region_id == undefined) - return (ZunoSapiClassStatus.INVALID_ARG); - if (this.param_info.status != ZunoSapiClassStatus.OK) - return (this.param_info.status); - const raw:Array = this.param_info.raw; - raw[0x1] = region_id; - if (raw.length > 0x8) - raw[0x8] = region_id; - return (await this._apply_param(raw)); - } - - public getPower(): ZunoSapiClassPower { - const out:ZunoSapiClassPower = { - status:this._isSupportRegionAndPower(), - power_raw:this.param_info.main_pow, - step:0x1, - min:1, - max:this.board_info.max_default_power, - }; - if (out.status != ZunoSapiClassStatus.OK) - return (out); - return (out); - } - - public getSec(): ZunoSapiClassSec { - const out:ZunoSapiClassSec = { - status:this._isSupportRegionAndPower(), - sec:this.param_info.sec, - }; - if (out.status != ZunoSapiClassStatus.OK) - return (out); - return (out); - } - - public async setSec(sec:boolean): Promise { - const status:ZunoSapiClassStatus = this._isSupportRegionAndPower(); - if (status != ZunoSapiClassStatus.OK) - return (status); - const raw:Array = this.param_info.raw; - if (sec == true) - raw[0x4] = 0x1; - else - raw[0x4] = 0x0; - return (await this._apply_param(raw)); - } - - public async setPower(power:number): Promise { - const status:ZunoSapiClassStatus = this._isSupportRegionAndPower(); - if (status != ZunoSapiClassStatus.OK) - return (status); - const raw:Array = this.param_info.raw; - raw[0x2] = power; - return (await this._apply_param(raw)); - } - - public async enableNif(): Promise { - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x0A]) - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ZunoSapiClassStatus); - return (ZunoSapiClassStatus.OK); - } - - public async enableEvent(): Promise { - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x09, 0x1]) - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ZunoSapiClassStatus); - return (ZunoSapiClassStatus.OK); - } - - private async _enableLearn_get_status(): Promise { - const res:SapiClassRet = await this.sapi.recvIncomingRequest(1000); - if (res.status != SapiClassStatus.OK) - return (ELearnStatus.ELEARNSTATUS_PROCESS); - if (res.cmd != SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER) - return (ELearnStatus.ELEARNSTATUS_PROCESS); - if (res.data.length < 0x3) - return (ELearnStatus.ELEARNSTATUS_PROCESS); - if (res.data[0x1] != 0xA0) - return (ELearnStatus.ELEARNSTATUS_PROCESS); - return (res.data[0x2]); - } - - private async _enableLearn_include(): Promise { - let retries:number; - - const wait_timeout:number = Date.now() + ((30 + 0x1) * 1000); - retries = 0x0; - while (wait_timeout > Date.now()) { - switch (await this._enableLearn_get_status()) { - case ELearnStatus.ELEARNSTATUS_PROCESS: - retries++; - break ; - case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: - retries = 0x0; - break ; - default: - return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); - break ; - - } - if (retries >= 0x3) - return (ZunoSapiClassStatus.LEARN_INCLUDE); - } - return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); - } - - private async _enableLearn_exlude(): Promise { - let retries:number; - - retries = 0x0; - while (retries < 0x3) { - retries++; - switch (await this._enableLearn_get_status()) { - case ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE: - break ; - case ELearnStatus.ELEARNSTATUS_PROCESS: - break ; - case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: - return (await this._enableLearn_include()); - break ; - } - } - return (ZunoSapiClassStatus.LEARN_EXCLUDE); - } - - public async enableLearn(timeout:number): Promise { - let detect_wait:SapiClassDetectWait, status:ZunoSapiClassStatus; - - timeout = timeout & 0xFF; - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x07, timeout & 0xFF, 0x1 & 0xFF]) - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ZunoSapiClassStatus); - const wait_timeout:number = Date.now() + ((timeout + 0x1) * 1000); - this.lock(); - while (wait_timeout > Date.now()) { - switch (await this._enableLearn_get_status()) { - case ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT: - this.unlock(); - detect_wait = await this.sapi.detect_rcv(); - if (detect_wait.status != SapiClassStatus.OK) - return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); - return (ZunoSapiClassStatus.TIMEOUT); - break ; - case ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED: - this.unlock(); - return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); - break ; - case ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE: - status = await this._enableLearn_exlude(); - this.unlock(); - return (status); - break ; - case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: - status = await this._enableLearn_include(); - this.unlock(); - return (status); - break ; - } - } - this.unlock(); - return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); - } - - public async setDefault(): Promise { - const res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x5]) - if (res.status != SapiClassStatus.OK) - return ((res.status as unknown) as ZunoSapiClassStatus); - return (ZunoSapiClassStatus.OK); - } - - - public getQuantumSize(): number { - return (this.sapi.getQuantumSize()); - } - - public lock() { - return (this.sapi.lock()); - } - - public unlock() { - return (this.sapi.unlock()); - } - - public is_busy(): boolean { - return (this.sapi.is_busy()); - } - - public async connect(): Promise { - this.region = new SapiRegionClass(); - await this._get_param_info(); - await this._get_board_info(); - // await this._begin(true); - } - - public async detect(baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise { - return (await this.sapi.detect(baudrate, func)); - } - - constructor(sapi:SapiClass) { - this.sapi = sapi; - } -} \ No newline at end of file diff --git a/src/section/common.ts b/src/section/common.ts deleted file mode 100644 index 38c979f..0000000 --- a/src/section/common.ts +++ /dev/null @@ -1,193 +0,0 @@ -import {ControllerUiLangClassId} from "../lang/ui_lang_define" -import {ControllerUiLangClass} from "../lang/ui_lang" -import {ControllerSapiClass} from "../sapi/controller_sapi"; -import {ZunoSapiClass} from "../sapi/zuno_sapi"; -import {SapiClass} from "../sapi/sapi"; -import {ControllerUiLogClass} from "../log/ui_log" - -export {CommonUiSectionClass, CommonUiSectionHtmlClass}; - -interface CommonUiSectionClassBegin { - (): Promise -} - -interface CommonUiSectionClassEnd { - (): Promise -} - -class CommonUiSectionHtmlClass { - protected readonly locale:ControllerUiLangClass; - - protected common_button_atrr(el_button:HTMLButtonElement, title:string|ControllerUiLangClassId, hide:boolean): void { - if (hide == true) { - el_button.setAttribute("disabled", ""); - el_button.removeAttribute("title"); - return ; - } - if (typeof title !== "string") - title = this.locale.getLocale(title); - el_button.setAttribute("title", title); - el_button.removeAttribute("disabled"); - } - - private _event_get_element(event:Event, tag:string): EventTarget|null { - if (event.target == null) - return (null); - const el_target:HTMLElement = (event.target as HTMLElement); - try { - if (el_target.tagName.toLowerCase() !== tag.toLowerCase()) - return (null); - } catch (error) { - return (null); - } - return (event.target); - } - - protected event_get_element_select(event:Event): HTMLSelectElement|null { - const el_target:EventTarget|null = this._event_get_element(event, "select") ; - if (el_target == null) - return (null); - return ((event.target as HTMLSelectElement)); - } - - protected event_get_element_input(event:Event): HTMLInputElement|null { - const el_target:EventTarget|null = this._event_get_element(event, "input") ; - if (el_target == null) - return (null); - return ((event.target as HTMLInputElement)); - } - - protected event_get_element_button(event:Event): HTMLButtonElement|null { - const el_target:EventTarget|null = this._event_get_element(event, "button") ; - if (el_target == null) - return (null); - return ((event.target as HTMLButtonElement)); - } - - constructor(locale:ControllerUiLangClass) { - this.locale = locale; - } -} - -class CommonUiSectionClass extends CommonUiSectionHtmlClass { - protected readonly log:ControllerUiLogClass; - - protected readonly URL_LICENSE_MORE_OPTIONS:string = "https://z-wave.me/hardware-capabilities/?uuid="; - protected readonly URL_LICENSE_SERVISE:string = "https://service.z-wave.me/hardware/capabilities/?uuid="; - - private readonly management:ControllerSapiClass|ZunoSapiClass|SapiClass; - private readonly el_section:HTMLElement; - private readonly el_tbody:HTMLElement; - private readonly begin_func:CommonUiSectionClassBegin; - private readonly end_func:CommonUiSectionClassEnd; - - public is_busy(): boolean { - if (this.management.is_busy() == true) { - this.log.warning(ControllerUiLangClassId.MESSAGE_PLEASE_WAIT); - return (true); - } - return (false); - } - - public create_tr_el(name:string|ControllerUiLangClassId, title:string|ControllerUiLangClassId, value:string|HTMLElement, action:string|HTMLElement): HTMLElement { - const el_tr: HTMLElement = document.createElement("tr"); - const el_td_1: HTMLElement = document.createElement("td"); - const el_td_2: HTMLElement = document.createElement("td"); - const el_td_3: HTMLElement = document.createElement("td"); - if (typeof name === "string") - el_td_1.innerHTML = name; - else - el_td_1.innerHTML = this.locale.getLocale(name); - if (typeof title === "string") - el_td_1.title = title; - else - el_td_1.title = this.locale.getLocale(title); - if (typeof value === "string") - el_td_2.innerHTML = value; - else - el_td_2.appendChild(value); - if (typeof action === "string") - el_td_3.innerHTML = action; - else - el_td_3.appendChild(action); - el_tr.appendChild(el_td_1); - el_tr.appendChild(el_td_2); - el_tr.appendChild(el_td_3); - this.el_tbody.appendChild(el_tr); - return (el_tr); - } - - public is_close(): boolean { - if (this.is_busy() == true) - return (false); - return (true); - } - - public async begin(): Promise { - await this.end(); - if (await this.begin_func() == false) - return ; - this.el_section.style.display = ''; - } - - public async end(): Promise { - this.el_section.style.display = 'none'; - await this.end_func(); - this.el_tbody.innerHTML = ''; - } - - public async quest_continue_stop(el:HTMLElement, quest:ControllerUiLangClassId|string, quest_title:ControllerUiLangClassId|string, - run:ControllerUiLangClassId, run_title:ControllerUiLangClassId, - stop:ControllerUiLangClassId|undefined, stop_title:ControllerUiLangClassId|undefined): Promise { - const promise:Promise = new Promise((resolve) => { - el.innerHTML = ''; - const el_span:HTMLSpanElement = document.createElement("span"); - if (typeof quest !== "string") - quest = this.locale.getLocale(quest); - el_span.innerHTML = quest; - if (typeof quest_title !== "string") - quest_title = this.locale.getLocale(quest_title); - el_span.title = quest_title; - el_span.className = "ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button"; - const el_button_continue:HTMLButtonElement = document.createElement("button"); - el_button_continue.textContent = this.locale.getLocale(run); - el_button_continue.title = this.locale.getLocale(run_title); - el_button_continue.type = "button"; - el_button_continue.className = "ZUnoRazberryModalContentSection_migration_action_button"; - el.appendChild(el_span); - el.appendChild(el_button_continue); - el_button_continue.addEventListener("click", async () => { resolve(true)}); - if (stop != undefined && stop_title != undefined) { - const el_button_stop:HTMLButtonElement = document.createElement("button"); - el_button_stop.textContent = this.locale.getLocale(stop); - el_button_stop.title = this.locale.getLocale(stop_title); - el_button_stop.type = "button"; - el_button_stop.className = "ZUnoRazberryModalContentSection_migration_action_button"; - el_button_stop.addEventListener("click", async () => { resolve(false)}); - el.appendChild(el_button_stop); - } - }); - return (promise); - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, management:ControllerSapiClass|ZunoSapiClass|SapiClass, log:ControllerUiLogClass, id:ControllerUiLangClassId, begin_func:CommonUiSectionClassBegin, end_func:CommonUiSectionClassEnd) { - super(locale); - this.management = management; - this.log = log; - const el:HTMLElement = document.createElement("section"); - el.className = "ZUnoRazberryModalContentSection_table"; - el.style.display = 'none'; - const el_header:HTMLElement = document.createElement("h3"); - el_header.textContent = this.locale.getLocale(id); - el.appendChild(el_header); - const el_table:HTMLElement = document.createElement("table"); - el.appendChild(el_table); - const el_tbody:HTMLElement = document.createElement("tbody"); - el_table.appendChild(el_tbody); - el_section.appendChild(el); - this.el_section = el; - this.el_tbody = el_tbody; - this.begin_func = begin_func; - this.end_func = end_func; - } -} diff --git a/src/section/controller/info.ts b/src/section/controller/info.ts deleted file mode 100644 index 6bc0737..0000000 --- a/src/section/controller/info.ts +++ /dev/null @@ -1,221 +0,0 @@ -import {ControllerUiLangClassId} from "../../lang/ui_lang_define" -import {ControllerUiLangClass} from "../../lang/ui_lang" -import {ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassPower, ControllerSapiClassRegion, ControllerSapiClassCapabilities} from "../../sapi/controller_sapi"; -import {ControllerUiLogClass} from "../../log/ui_log" -import {CommonUiSectionClass} from "../common" -import {ControllerUiDefineClassReBeginFunc} from "../../section/detection" - -export {ControllerUiSectionInfoClass}; - -class ControllerUiSectionInfoClass extends CommonUiSectionClass { - private region_current:string = ''; - private region_new:string = ''; - private power_current:number = 0x0; - private power_new:number = 0x0; - - private readonly razberry:ControllerSapiClass; - private readonly region_el_button:HTMLButtonElement; - private readonly power_el_button:HTMLButtonElement; - - private readonly re_begin_func:ControllerUiDefineClassReBeginFunc; - - private async _controller_default_click(event:Event): Promise { - if (this.is_busy() == true) - return ; - const el_target:HTMLButtonElement|null = this.event_get_element_button(event); - if (el_target == null) - return ; - const out:boolean = window.confirm(this.locale.getLocale(ControllerUiLangClassId.DEFAULT_RESET_WARNING)); - if (out != true) - return ; - this.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, true); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); - const status:ControllerSapiClassStatus = await this.razberry.setDefault(); - this.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, false); - if (status == ControllerSapiClassStatus.OK) { - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); - this.re_begin_func(false); - return ; - } - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status); - } - - private _controller_default_init(): boolean { - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE); - el_button.type = "button"; - el_button.textContent = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON); - el_button.addEventListener("click", (event:Event) => {this._controller_default_click(event);}); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE, "", el_button); - return (true); - } - - private _power_change(event:Event): void { - const el_target:HTMLInputElement|null = this.event_get_element_input(event); - if (el_target == null) - return ; - this.power_new = Number(el_target.value); - this.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true:false); - } - - private async _power_click(): Promise { - if (this.is_busy() == true) - return ; - this.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, true); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_POWER); - const status:ControllerSapiClassStatus = await this.razberry.setPower(this.power_new); - if (status == ControllerSapiClassStatus.OK) { - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_POWER); - this.power_current = this.power_new; - return ; - } - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_POWER, status); - this.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, false); - } - - private async _power_init(): Promise { - if (this.razberry.isRazberry7() == false) - return (false); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_POWER); - const power:ControllerSapiClassPower = await this.razberry.getPower(); - if (power.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_POWER, power.status); - return (false); - } - this.power_new = power.power_raw; - this.power_current = power.power_raw; - const el_value:HTMLElement = document.createElement("span"); - const el_input:HTMLInputElement = document.createElement("input"); - el_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE); - el_input.type = "number"; - el_input.min = power.min.toString(); - el_input.max = power.max.toString(); - el_input.step = power.step.toString(); - el_input.value = power.power_raw.toString(); - el_input.addEventListener("change", (event:Event) => {this._power_change(event);}); - el_value.appendChild(el_input); - el_value.appendChild(document.createElement("span")); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_POWER, ControllerUiLangClassId.TABLE_NAME_POWER_TITLE, el_value, this.power_el_button); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_POWER); - return (true); - } - - private _region_change(event:Event): void { - const el_target:HTMLSelectElement|null = this.event_get_element_select(event); - if (el_target == null) - return ; - this.region_new = el_target.value; - this.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true:false); - } - - private async _region_click(): Promise { - if (this.is_busy() == true) - return ; - this.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, true); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION); - const status:ControllerSapiClassStatus = await this.razberry.setRegion(this.region_new); - if (status == ControllerSapiClassStatus.OK) { - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION); - this.region_current = this.region_new; - return ; - } - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, status); - this.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, false); - } - - private async _region_init(): Promise { - let i:number, el_option_str:string, el_select:HTMLElement; - - if (this.razberry.isRazberry5() == true) - return (false); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION); - const region_info:ControllerSapiClassRegion = await this.razberry.getRegion(); - switch (region_info.status) { - case ControllerSapiClassStatus.OK: - this.region_current = region_info.region; - this.region_new = region_info.region; - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION); - i = 0x0; - el_option_str = ""; - while (i < region_info.region_array.length) { - if (region_info.region_array[i] == region_info.region) { - el_option_str = el_option_str + ''; - } - else { - el_option_str = el_option_str + ''; - } - i++; - } - el_select = document.createElement("select"); - el_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE); - el_select.innerHTML = el_option_str; - el_select.addEventListener("change", (event:Event) => {this._region_change(event);}); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_REGION, ControllerUiLangClassId.TABLE_NAME_REGION_TITLE, el_select, this.region_el_button); - return (true); - break ; - case ControllerSapiClassStatus.UNSUPPORT_CMD: - this.log.errorUnsupport(ControllerUiLangClassId.MESSAGE_READ_REGION); - break ; - default: - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); - break ; - } - return (false); - } - - private _capabilities_init(): boolean { - let value:string; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); - const capabilities_info:ControllerSapiClassCapabilities = this.razberry.getCapabilities(); - if (capabilities_info.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES, capabilities_info.status); - return (false); - } - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_TYPE, ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE, this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER), ""); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION, ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE, capabilities_info.ApiVersion + "." + capabilities_info.ApiRevision, ""); - value = capabilities_info.VendorIDName; - if (capabilities_info.VendorIDWebpage != undefined) - value = ''+ value +''; - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_VENDOR, ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE, value, ""); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_VENDOR_ID, ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE, String(capabilities_info.VendorID), ""); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); - return (true); - } - - private async _begin(): Promise { - let display:boolean; - - display = false; - if (this._capabilities_init() == true) - display = true; - if (await this._region_init() == true) - display = true; - if (await this._power_init() == true) - display = true; - if (this._controller_default_init() == true) - display = true; - return (display); - } - - private async _end(): Promise { - this.power_el_button.disabled = true; - this.region_el_button.disabled = true; - } - - private _constructor_button(text:ControllerUiLangClassId, click:EventListener):HTMLButtonElement { - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.textContent = this.locale.getLocale(text); - el_button.addEventListener("click", click); - el_button.type = "button"; - return (el_button); - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) { - super(el_section, locale, razberry, log, ControllerUiLangClassId.BOARD_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.razberry = razberry; - this.power_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON, () => {this._power_click();}); - this.region_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON, () => {this._region_click();}); - this.re_begin_func = re_begin_func; - } -} \ No newline at end of file diff --git a/src/section/controller/license.ts b/src/section/controller/license.ts deleted file mode 100644 index f216759..0000000 --- a/src/section/controller/license.ts +++ /dev/null @@ -1,178 +0,0 @@ -import {ControllerUiLangClassId} from "../../lang/ui_lang_define" -import {ControllerUiLangClass} from "../../lang/ui_lang" -import {ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassBoardInfo, ControllerSapiClassLicense} from "../../sapi/controller_sapi"; -import {ControllerUiLogClass} from "../../log/ui_log" -import {CommonUiSectionClass} from "../common" -import {arrayToStringHex, hexToBytes} from "../../other/utilities"; - -export {ControllerUiSectionLicenseClass}; - -interface ControllerUiClassNewLicenseXhr -{ - uuid:string; - license:string; - crc:string; -} - -class ControllerUiSectionLicenseClass extends CommonUiSectionClass { - private readonly TABLE_NAME_LICENSE_YES:string = ''; - private readonly TABLE_NAME_LICENSE_NO:string = ''; - - private readonly ms_timeout_get_new_license:number = 10000; - private readonly ms_timeout_get_new_license_xhr:number = 3000; - private readonly ms_timeout_get_new_license_port:number = 1000; - - private readonly razberry:ControllerSapiClass; - private readonly license_xhr:XMLHttpRequest = new XMLHttpRequest(); - - private license_timer_id?:number; - - private _license_timer_valid_data(in_json:ControllerUiClassNewLicenseXhr): boolean { - if (in_json.crc == undefined || in_json.uuid == undefined || in_json.license == undefined) - return (false); - if (typeof (in_json.crc) != "string") - return (false); - if (typeof (in_json.license) != "string") - return (false); - if (typeof (in_json.uuid) != "string") - return (false); - return (true); - } - - private _license_timer_get_pack(in_json:ControllerUiClassNewLicenseXhr, uuid:string, crc16_old:number): undefined|string { - if (uuid.toLowerCase().padStart(16, '0') != in_json.uuid.toLowerCase().padStart(16, '0')) - return (undefined); - const crc16:number = Number(in_json.crc); - if (crc16 == 0x0) - return (undefined); - if (crc16 == crc16_old) - return (undefined); - return (in_json.license); - } - - private _license_timer_init(uuid:string, crc16:number): void { - const url = this.URL_LICENSE_SERVISE + uuid; - const fun_xhr_timer:TimerHandler = () => { - this.license_timer_id = undefined; - this.license_xhr.open("POST", url, true); - this.license_xhr.responseType = 'json'; - this.license_xhr.timeout = this.ms_timeout_get_new_license_xhr; - this.license_xhr.ontimeout = () => { - this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); - this.log.errorXhrTimeout(url); - }; - this.license_xhr.onerror = () => { - this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); - this.log.errorXhrError(url); - }; - this.license_xhr.onload = () => { - const in_json:ControllerUiClassNewLicenseXhr = this.license_xhr.response; - if (this._license_timer_valid_data(in_json) == false) { - this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); - this.log.errorXhrInvalidData(url); - return ; - } - const pack:string|undefined = this._license_timer_get_pack(in_json, uuid, crc16); - if (pack == undefined) { - this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); - return ; - } - const pack_array = hexToBytes(pack); - if (pack_array == undefined) { - this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); - this.log.errorXhrInvalidData(url); - return ; - } - const fun_controller_timer:TimerHandler = async () => { - this.license_timer_id = undefined; - this.log.infoStart(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_SET_LICENSE)); - if (this.razberry.is_busy() == true) { - this.log.warning(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_PLEASE_WAIT)); - this.license_timer_id = window.setTimeout(fun_controller_timer, this.ms_timeout_get_new_license_port); - return ; - } - const status:ControllerSapiClassStatus = await this.razberry.setLicense(pack_array); - if (status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_SET_LICENSE), status); - this.license_timer_id = window.setTimeout(fun_controller_timer, this.ms_timeout_get_new_license_port); - return ; - } - this.log.infoDone(this.locale.getLocale(ControllerUiLangClassId.MESSAGE_SET_LICENSE)); - this.license_timer_id = window.setTimeout(fun_xhr_timer, this.ms_timeout_get_new_license); - this.begin(); - } - this.license_timer_id = window.setTimeout(fun_controller_timer, 0x0); - }; - this.license_xhr.send(); - - }; - this.license_timer_id = window.setTimeout(fun_xhr_timer, 0x0); - } - - private _license_init(): number|undefined { - let key:string, flag_status:string; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_LICENSE); - const license:ControllerSapiClassLicense = this.razberry.getLicense(); - if (license.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_LICENSE, license.status); - return (undefined); - } - if (license.vallid == true) { - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID, ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE, String(license.vendor_id), ""); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE, ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE, String(license.max_nodes), ""); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT, ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE, String(license.count_support), ""); - } - for (key in license.flags) { - if (license.flags[key].active == true) - flag_status = this.TABLE_NAME_LICENSE_YES; - else - flag_status = this.TABLE_NAME_LICENSE_NO; - this.create_tr_el(license.flags[key].name + ":", license.flags[key].title, flag_status, ""); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_LICENSE); - if (license.vallid == true) - return (license.crc16); - return (0x0); - } - - private _board_info_init(): string|undefined { - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); - const board_info:ControllerSapiClassBoardInfo = this.razberry.getBoardInfo(); - if (board_info.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO, board_info.status); - return (undefined); - } - const uuid_str_hex:string = arrayToStringHex(board_info.chip_uuid); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID, ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE, uuid_str_hex, ""); - const more_options_link:string = ''+ 'link' +''; - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS, ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE, more_options_link, ""); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); - return (uuid_str_hex); - } - - private async _begin(): Promise { - if (this.razberry.isRazberry7() == false) - return (false); - const uuid_str_hex:string|undefined = this._board_info_init(); - const crc16:number|undefined = this._license_init(); - if (uuid_str_hex == undefined && crc16 == undefined) - return (false); - if (uuid_str_hex != undefined && crc16 != undefined) - this._license_timer_init(uuid_str_hex, crc16); - return (true); - } - - private async _end(): Promise { - if (this.license_timer_id != undefined) { - window.clearTimeout(this.license_timer_id); - this.license_timer_id = undefined; - } - this.license_xhr.abort(); - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass) { - super(el_section, locale, razberry, log, ControllerUiLangClassId.LICENSE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.razberry = razberry; - } -} \ No newline at end of file diff --git a/src/section/controller/migration.ts b/src/section/controller/migration.ts deleted file mode 100644 index bc9ef35..0000000 --- a/src/section/controller/migration.ts +++ /dev/null @@ -1,762 +0,0 @@ -import {ControllerUiLangClassId} from "../../lang/ui_lang_define" -import {ControllerUiLangClass} from "../../lang/ui_lang" -import {ControllerSapiClass, ControllerSapiClasstNetworkIDs, ControllerSapiClassStatus, ControllerSapiClasstInitData, ControllerSapiClassLearnMode, - ControllerSapiClassRegion} from "../../sapi/controller_sapi"; -import {ZunoSapiClass, ZunoSapiClassRegion, ZunoSapiClassStatus, ZunoSapiClassBoardInfo, ZunoSapiClassS2Key} from "../../sapi/zuno_sapi"; -import {ControllerUiLogClass} from "../../log/ui_log" -import {CommonUiSectionClass} from "../common" -import {ControllerUiSectionUpdateClass} from "./update" -import {SlaveUiSectionUpdateClass} from "../slave/update" -import {PaketUiClassUpdateInfoPaket, UpdateUiSectionClass, UpdateUiSectionClassPaket, PaketUiClassUpdateInfoData, UpdateUiSectionClassFirmware} from "../update" -import {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus, SapiClass, SapiClassDetect} from "../../sapi/sapi"; -import {conv2Decimal, intToBytearrayMsbLsb, arrayToStringHex, sleep, hexToBytes} from "../../other/utilities"; - -export {ControllerUiSectionMigrationClass}; - -interface ControllerUiSectionMigrationClassHome -{ - home:number; - node_id:number; -} - -interface ControllerUiSectionMigrationClassNodeDumpKey -{ - zuno_node_id:number; - dump_key:ZunoSapiClassS2Key; -} - -type ControllerUiSectionMigrationClassClear = () => Promise; - -class ControllerUiSectionMigrationClass extends CommonUiSectionClass { - private readonly NVM_HOMEID:number = 0x8; - - private readonly progress_timer_id_ms_period:number = 1000; - private readonly el_button:HTMLButtonElement = document.createElement("button"); - private readonly el_container:HTMLElement; - private readonly razberry:ControllerSapiClass; - private readonly sapi:SapiClass; - private readonly zuno:ZunoSapiClass; - private clear:ControllerUiSectionMigrationClassClear; - - private readonly download_process:UpdateUiSectionClassPaket = {xhr:new XMLHttpRequest()}; - - private process:boolean = false; - private progress_timer_id?:number; - - private async _raz_include_excluding_wait(progress_timer_id_count:number, start_id:ControllerUiLangClassId, wait_id:ControllerUiLangClassId, - include_excluding:ControllerSapiClassLearnMode): Promise { - let index_timout:number; - - const el_progress:HTMLProgressElement = document.createElement('progress'); - const el_span:HTMLSpanElement = document.createElement('span'); - const el_container:HTMLSpanElement = document.createElement('span'); - el_container.title = this.locale.getLocale(wait_id); - el_container.appendChild(el_progress); - el_container.appendChild(el_span); - el_progress.max = progress_timer_id_count; - this.el_container.appendChild(el_container); - index_timout = progress_timer_id_count; - const seconds:string = this.locale.getLocale(ControllerUiLangClassId.SECONDS); - const max_lenght:number = progress_timer_id_count.toString().length; - const fun_timer:TimerHandler = () => { - el_progress.value = index_timout; - el_span.textContent = ' ' + index_timout.toString().padStart(max_lenght, '0') + seconds; - if (index_timout > 0x0) { - index_timout--; - this.progress_timer_id = window.setTimeout(fun_timer, this.progress_timer_id_ms_period); - } - else - this.progress_timer_id = undefined; - }; - this.progress_timer_id = window.setTimeout(fun_timer, 0x0); - for (;;) { - const wait:ControllerSapiClassStatus = await this.razberry.waitLearn(this.progress_timer_id_ms_period, include_excluding.seq); - if (wait == ControllerSapiClassStatus.OK) { - if (this.progress_timer_id != undefined) { - window.clearTimeout(this.progress_timer_id); - this.progress_timer_id = undefined; - } - this.log.infoDone(start_id); - return (true); - } - if (wait != ControllerSapiClassStatus.PROCESS) { - this.log.errorFalledCode(start_id, wait); - return (false); - } - if (this.progress_timer_id == undefined) { - await this.razberry.disabled(); - this.log.errorFalledCode(start_id, ControllerSapiClassStatus.TIMEOUT); - return (undefined); - } - } - } - - private async _click_start_stop_include_excluding(excluding:boolean): Promise { - let out_progress:boolean|undefined, start_id:ControllerUiLangClassId, question_id:ControllerUiLangClassId, wait_id:ControllerUiLangClassId, include_excluding:ControllerSapiClassLearnMode; - - if (excluding == true) { - start_id = ControllerUiLangClassId.MESSAGE_START_EXCLUDING; - question_id = ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE; - wait_id = ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER; - } - else { - start_id = ControllerUiLangClassId.MESSAGE_START_INCLUDE; - question_id = ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE; - wait_id = ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER; - } - await this.quest_continue_stop(this.el_container, question_id, "", - ControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, - undefined, undefined); - - this.el_container.innerHTML = ''; - this.log.infoStart(start_id); - include_excluding = await this.razberry.include_excluding(); - if (include_excluding.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(start_id, include_excluding.status); - return (false); - } - out_progress = await this._raz_include_excluding_wait(10, start_id, wait_id, include_excluding); - if (out_progress != undefined) - return (out_progress); - this.el_container.innerHTML = ''; - this.log.infoStart(start_id); - if (excluding == true) { - start_id = ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING; - include_excluding = await this.razberry.excludingWide(); - } - else { - start_id = ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE; - include_excluding = await this.razberry.includeWide(); - } - if (include_excluding.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(start_id, include_excluding.status); - return (false); - } - out_progress = await this._raz_include_excluding_wait(30, start_id, wait_id, include_excluding); - if (out_progress == undefined) - return (false); - return (out_progress); - } - - private async _click_start_stop_test_include(home:ControllerUiSectionMigrationClassHome): Promise { - this._progress(ControllerUiLangClassId.MIGRATION_TEST_INCLUDE); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_HOME_ID); - const home_id:ControllerSapiClasstNetworkIDs = await this.razberry.GetNetworkIDs(); - if (home_id.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_HOME_ID, home_id.status); - return (undefined); - } - home.home = home_id.home; - home.node_id = home_id.node_id; - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_HOME_ID); - if (home_id.node_id != 0x1) - return (true); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_INIT_DATA); - const get_init_data:ControllerSapiClasstInitData = await this.razberry.GetInitData(); - if (get_init_data.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_INIT_DATA, get_init_data.status); - return (undefined); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_INIT_DATA); - if (get_init_data.node_list.length > 0x1 || get_init_data.node_list[0x0] != 0x1) - return (true); - return (false); - } - - private _progress(text:ControllerUiLangClassId): void { - this.el_container.innerHTML = '
' + this.locale.getLocale(text) +'
'; - } - - private _progress_error(text:ControllerUiLangClassId): void { - this.el_container.innerHTML = '
' + this.locale.getLocale(text) +'
'; - } - - private _update_raz_full_finware_url(data:Array, target_type:SapiClassDetectType): PaketUiClassUpdateInfoData|undefined { - let i:number; - - i = data.length; - while (i-- != 0x0) { - if (data[i].beta == false && data[i].type == target_type) - return (data[i]); - } - return (undefined); - } - - private _update_raz_full_boot_url(data:Array): PaketUiClassUpdateInfoData|undefined { - let i:number; - - i = data.length; - while (i-- != 0x0) { - if (data[i].beta == false) - return (data[i]); - } - return (undefined); - } - - private async _update_firmware_zuno(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - const status:ZunoSapiClassStatus = await this.zuno.updateFirmware(data, process, target_type); - return ((status as unknown) as SapiClassStatus); - } - - private async _update_firmware_raz(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - const status:ControllerSapiClassStatus = await this.razberry.updateFirmware(data, process, target_type); - return ((status as unknown) as SapiClassStatus); - } - - private async _update_bootloader_raz(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - const status:ControllerSapiClassStatus = await this.razberry.updateBotloader(data, process); - return ((status as unknown) as SapiClassStatus); - } - - private _update_raz_zuno_full_get_info_paket_add(paket:PaketUiClassUpdateInfoPaket|undefined): PaketUiClassUpdateInfoPaket|undefined { - if (paket == undefined) { - this._progress_error(ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO); - return (undefined); - } - return (paket); - } - - private _update_raz_full_get_info_paket(): PaketUiClassUpdateInfoPaket|undefined { - const paket:PaketUiClassUpdateInfoPaket|undefined = ControllerUiSectionUpdateClass.getInfoUrlPaket(this.log, this.razberry); - return (this._update_raz_zuno_full_get_info_paket_add(paket)); - } - - private _update_zuno_full_get_info_paket(): PaketUiClassUpdateInfoPaket|undefined { - const paket:PaketUiClassUpdateInfoPaket|undefined = SlaveUiSectionUpdateClass.getInfoUrlPaket(this.log, this.zuno); - return (this._update_raz_zuno_full_get_info_paket_add(paket)); - } - - private async _update_raz_full_dowload_and_update(update_firmware:UpdateUiSectionClassFirmware, data:PaketUiClassUpdateInfoData, version_name:string): Promise { - this._progress(ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE); - const finware:Uint8Array = await UpdateUiSectionClass.downloadFile(this.download_process, data.url, this.log); - this.el_container.innerHTML = ''; - const el_div_progress:HTMLDivElement = document.createElement("div"); - const el_div_text:HTMLDivElement = document.createElement("div"); - el_div_text.textContent = version_name + " -> " + data.version_name; - this.el_container.appendChild(el_div_text); - this.el_container.appendChild(el_div_progress); - const finware_status:boolean = await UpdateUiSectionClass.updateProcess(ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE, el_div_progress, finware, data.type, - update_firmware, this.locale, this.log); - if (finware_status == false) { - this._progress_error(ControllerUiLangClassId.MIGRATION_NOT_UPDATE); - return (false); - } - return (true); - } - - private async _update_raz_full(): Promise { - let paket:PaketUiClassUpdateInfoPaket|undefined; - - paket = this._update_raz_full_get_info_paket(); - if (paket == undefined) - return (undefined); - for (;;) { - this._progress(ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO); - await UpdateUiSectionClass.downloadInfo(this.download_process, paket, this.log, this.locale); - const data_raz:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_finware_url(paket.app.data, SapiClassDetectType.RAZBERRY); - if (data_raz == undefined) { - const data_boot:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_boot_url(paket.boot.data); - if (data_boot == undefined) - return (paket); - if (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_bootloader_raz(data, process, target_type));}, - data_boot, paket.boot.version_name) == false) { - return (undefined); - } - await this.razberry.connect(); - paket = this._update_raz_full_get_info_paket(); - if (paket == undefined) - return (undefined); - if (paket.boot.version != data_boot.version) { - this._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); - return (undefined); - } - continue ; - } - if (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware_raz(data, process, target_type));}, - data_raz, paket.app.version_name) == false) { - return (undefined); - } - if (this.sapi.type() != SapiClassDetectType.RAZBERRY) { - this._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE); - return (undefined); - } - await this.razberry.connect(); - paket = this._update_raz_full_get_info_paket(); - if (paket == undefined) - return (undefined); - if (paket.app.version != data_raz.version) { - this._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); - return (undefined); - } - } - return (paket); - } - - private async _update_raz_to_zuno(paket:PaketUiClassUpdateInfoPaket): Promise { - const data_zuno:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_finware_url(paket.app.data, SapiClassDetectType.ZUNO); - if (data_zuno == undefined) { - this._progress_error(ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE); - return (undefined); - } - if (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware_raz(data, process, target_type));}, - data_zuno, paket.app.version_name) == false) { - return (undefined); - } - if (this.sapi.type() != SapiClassDetectType.ZUNO) { - this._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE); - return (undefined); - } - await this.zuno.connect(); - const paket_new:PaketUiClassUpdateInfoPaket|undefined = this._update_zuno_full_get_info_paket(); - if (paket_new == undefined) - return (undefined); - if (paket_new.app.version != data_zuno.version) { - this._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); - return (undefined); - } - return (paket_new); - } - - private async _click_start_stop_zuno_get_info_include_exlude(): Promise { - let status:ZunoSapiClassStatus; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); - status = await this.zuno.enableNif(); - if (status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode( ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT, status); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); - status = await this.zuno.enableEvent(); - if (status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode( ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN, status); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_START_LEARN); - status = await this.zuno.enableLearn(30); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_START_LEARN); - switch (status) { - case ZunoSapiClassStatus.TIMEOUT: - this.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); - this._progress_error(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); - break ; - case ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART: - this.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - this._progress_error(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - break ; - default: - this.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - this._progress_error(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - break ; - case ZunoSapiClassStatus.LEARN_EXCLUDE: - case ZunoSapiClassStatus.LEARN_INCLUDE: - this.log.info(ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE); - break ; - } - await sleep(2000);//что бы точно ресетнулось - if (await this._detection(SapiClassDetectType.ZUNO) == false) - return (false); - return (true); - } - - private _test_dump_key_all(dump_key:ZunoSapiClassS2Key): boolean { - let i:number; - - i = 0x0; - while (i < dump_key.list.length) { - if (dump_key.list[i].key.length <= 0x0) - return (false); - i++; - } - return (true); - } - - private _dump_key_all_to_string(dump_key:ZunoSapiClassS2Key): string { - let out:string, i:number, lenght:number, index:number; - - i = 0x0; - lenght = 0x0; - while (i < dump_key.list.length) { - if (dump_key.list[i].key.length > 0x0 && dump_key.list[i].name.length > lenght) - lenght = dump_key.list[i].name.length; - i++; - } - out = '

'+ this.locale.getLocale(ControllerUiLangClassId.MIGRATION_SUCESS) +'

'; - i = 0x0; - lenght++; - while (i < dump_key.list.length) { - if (dump_key.list[i].key.length > 0x0) { - out = out + '
'+ "" + dump_key.list[i].name + ":" - index = dump_key.list[i].name.length; - while (index < lenght) { - out = out + ' '; - index++; - } - out = out + "" + arrayToStringHex(dump_key.list[i].key) +'
'; - } - i++; - } - out = out + "
"; - return (out); - } - - private _key_all_to_string_quest(dump_key:ZunoSapiClassS2Key): string { - let out:string, i:number; - - out = "
" + this.locale.getLocale(ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY) + "
"; - i = 0x0; - while (i < dump_key.list.length) { - out = out + ""; - i++; - } - out = out + "
" + dump_key.list[i].name + "✘"; - else - out = out + "class='ZUnoRazberryModal_color_sucess'>✔"; - out = out + "
"; - return (out); - } - - private async _click_start_stop_zuno_get_info(region:string): Promise { - let status:ZunoSapiClassStatus, final:boolean; - - status = this.zuno.isSupportDumpKey(); - if (status != ZunoSapiClassStatus.OK) { - this.log.errorFalled(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY); - return (undefined); - } - status = this.zuno.isSupportIncludeExclude(); - if (status != ZunoSapiClassStatus.OK) { - this.log.errorFalled(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE); - return (undefined); - } - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION); - const region_info:ZunoSapiClassRegion = this.zuno.getRegion(); - if (region_info.status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); - return (undefined); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION); - if (region != region_info.region) { - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION); - status = await this.zuno.setRegion(region); - if (status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, status); - return (undefined); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION); - } - final = false; - for (;;) { - this.log.infoStart(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - const board_info:ZunoSapiClassBoardInfo = this.zuno.getBoardInfo(); - if (board_info.status != ZunoSapiClassStatus.OK || board_info.node_id == undefined) { - this.log.errorFalledCode(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); - return (undefined); - } - this.log.infoDone(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - if (board_info.node_id != 0x0) { - if (final == true) { - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_S2_KEY); - const dump_key:ZunoSapiClassS2Key = await this.zuno.readS2Key(); - if (dump_key.status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_S2_KEY, dump_key.status); - return ; - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_S2_KEY); - const zuno_node_id_dump_key:ControllerUiSectionMigrationClassNodeDumpKey = {zuno_node_id:board_info.node_id, dump_key:dump_key}; - if (this._test_dump_key_all(dump_key) == true) - return (zuno_node_id_dump_key); - if (await this.quest_continue_stop(this.el_container, - this._key_all_to_string_quest(zuno_node_id_dump_key.dump_key), ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE, - ControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, - ControllerUiLangClassId.PROCESS_REPEAT, ControllerUiLangClassId.PROCESS_REPEAT_TITLE) == true) - return (zuno_node_id_dump_key); - await this.quest_continue_stop(this.el_container, - ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE, ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE, - ControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, - undefined, undefined); - this._progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); - if (await this._click_start_stop_zuno_get_info_include_exlude() == false) - return (undefined); - final = false; - continue ; - } - await this.quest_continue_stop(this.el_container, - ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE, ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE, - ControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, - undefined, undefined); - this._progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); - if (await this._click_start_stop_zuno_get_info_include_exlude() == false) - return (undefined); - continue ; - } - const dsk:string = conv2Decimal(board_info.s2_pub, " - "); - const quest_include:string = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE).replace("${dsk}", "" + dsk.substring(0x0, 0x5) + "" + dsk.substring(0x5)); - await this.quest_continue_stop(this.el_container, - quest_include, ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE, - ControllerUiLangClassId.PROCESS_CONTINUE, ControllerUiLangClassId.PROCESS_CONTINUE_TITLE, - undefined, undefined); - this._progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); - if (await this._click_start_stop_zuno_get_info_include_exlude() == false) - return (undefined); - final = true; - } - return (undefined); - } - - private async _update_zuno_to_raz(paket:PaketUiClassUpdateInfoPaket): Promise { - this._progress(ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO); - await UpdateUiSectionClass.downloadInfo(this.download_process, paket, this.log, this.locale); - const data_raz:PaketUiClassUpdateInfoData|undefined = this._update_raz_full_finware_url(paket.app.data, SapiClassDetectType.RAZBERRY); - if (data_raz == undefined) { - this._progress_error(ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE); - return (false); - } - if (await this._update_raz_full_dowload_and_update( async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware_zuno(data, process, target_type));}, - data_raz, paket.app.version_name) == false) { - return (false); - } - if (this.sapi.type() != SapiClassDetectType.RAZBERRY) { - this._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE); - return (false); - } - await this.razberry.connect(); - const paket_new:PaketUiClassUpdateInfoPaket|undefined = this._update_raz_full_get_info_paket(); - if (paket_new == undefined) - return (false); - if (paket_new.app.version != data_raz.version) { - this._progress_error(ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION); - return (false); - } - return (true); - } - - - private async _remove_node(node_id:number): Promise { - let status:ControllerSapiClassStatus; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_NOP); - status = await this.razberry.nop(node_id); - if (status != ControllerSapiClassStatus.TRANSMIT_COMPLETE_NO_ACK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_NOP, status); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_NOP); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_REMOVE_NODE); - status = await this.razberry.removeFaledNode(node_id); - if (status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_REMOVE_NODE, status); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_REMOVE_NODE); - return (true); - } - - private async _detection(type:SapiClassDetectType):Promise { - this.log.infoStart(ControllerUiLangClassId.MESSAGE_DETECTION); - const detect_dict:SapiClassDetect = await this.sapi.detect([115200], null); - if (detect_dict.status != SapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); - return (false); - } - if (this.sapi.type() != type) { - this.log.errorFalled(ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_DETECTION); - switch (type) { - case SapiClassDetectType.RAZBERRY: - await this.razberry.connect(); - break ; - case SapiClassDetectType.ZUNO: - await this.zuno.connect(); - break ; - } - return (true); - } - - private async _second_chance(type:SapiClassDetectType):Promise { - if (await this.quest_continue_stop(this.el_container, - ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP, ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE, - ControllerUiLangClassId.PROCESS_REPEAT, ControllerUiLangClassId.PROCESS_REPEAT_TITLE, - ControllerUiLangClassId.PROCESS_ABORT, ControllerUiLangClassId.PROCESS_ABORT_TITLE) == false) - return (false); - this._progress(ControllerUiLangClassId.MIGRATION_DETECTION); - if (await this._detection(type) == false) - return (false); - return (true); - } - - private async _raz_region_inc_exl(home:ControllerUiSectionMigrationClassHome, region:string):Promise { - let result_test_include:boolean|undefined; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION); - const region_set_status:ControllerSapiClassStatus = await this.razberry.setRegion(region); - if (region_set_status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, region_set_status); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION); - for (;;) { - if (await this._click_start_stop_include_excluding(false) == false) - return (false); - result_test_include = await this._click_start_stop_test_include(home); - if (result_test_include == undefined) - return (false); - if (result_test_include == true) - break ; - } - return (true); - } - - private async _raz_home_set(home:ControllerUiSectionMigrationClassHome):Promise { - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_HOME_ID); - const set_home_id:ControllerSapiClassStatus = await this.razberry.nvmWrite(this.NVM_HOMEID, intToBytearrayMsbLsb(home.home)); - if (set_home_id != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_HOME_ID, set_home_id); - return (false); - } - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SOFT_RESET); - const soft_reset:ControllerSapiClassStatus = await this.razberry.softReset(); - if (soft_reset != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SOFT_RESET, soft_reset); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SOFT_RESET); - return (true); - } - - private async _click_start_stop(event:Event) { - let paket:PaketUiClassUpdateInfoPaket|undefined, result_test_include:boolean|undefined, zuno_node_id_dump_key:ControllerUiSectionMigrationClassNodeDumpKey|undefined; - - if (this.process == true) - return ; - const el_target:HTMLButtonElement|null = this.event_get_element_button(event); - if (el_target == null) - return ; - if (this.is_busy() == true) - return ; - const out_confirm:boolean = window.confirm(this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING)); - if (out_confirm != true) - return ; - await this.clear(); - await this.begin(); - this.el_button.disabled = true; - this.el_button.title = ''; - this.el_button.style.display = 'none'; - this.process = true; - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION); - const region_info:ControllerSapiClassRegion = await this.razberry.getRegion(); - if (region_info.status != ControllerSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); - return ; - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION); - if (this.razberry.isLr(region_info.region) == true) { - this._progress_error(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR); - return ; - } - if (this.razberry.isLicenseSupportBackup() == false) { - this._progress_error(ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP); - return ; - } - paket = await this._update_raz_full(); - if (paket == undefined) - return ; - paket = await this._update_raz_to_zuno(paket); - if (paket == undefined) - return ; - for (;;) { - zuno_node_id_dump_key = await this._click_start_stop_zuno_get_info(region_info.region); - if (zuno_node_id_dump_key != undefined) - break ; - if (await this._second_chance(SapiClassDetectType.ZUNO) == false) - return ; - } - for (;;) { - if (await this._update_zuno_to_raz(paket) == true) - break ; - if (await this._second_chance(SapiClassDetectType.ZUNO) == false) - return ; - } - const home:ControllerUiSectionMigrationClassHome = {home:0x0, node_id:0x0}; - for (;;) { - if (await this._raz_region_inc_exl(home, region_info.region) == true) - break ; - if (await this._second_chance(SapiClassDetectType.RAZBERRY) == false) - return ; - } - this._progress(ControllerUiLangClassId.MIGRATION_FINALIZE); - for (;;) { - if (await this._raz_home_set(home) == true) - break ; - if (await this._second_chance(SapiClassDetectType.RAZBERRY) == false) - return ; - this._progress(ControllerUiLangClassId.MIGRATION_FINALIZE); - } - for (;;) { - if (await this._remove_node(home.node_id) == true) - break ; - if (await this._second_chance(SapiClassDetectType.RAZBERRY) == false) - return ; - this._progress(ControllerUiLangClassId.MIGRATION_FINALIZE); - } - for (;;) { - if (await this._remove_node(zuno_node_id_dump_key.zuno_node_id) == true) - break ; - if (await this._second_chance(SapiClassDetectType.RAZBERRY) == false) - return ; - this._progress(ControllerUiLangClassId.MIGRATION_FINALIZE); - } - this.el_container.innerHTML = this._dump_key_all_to_string(zuno_node_id_dump_key.dump_key); - } - - private async _begin(): Promise { - let about_str:string; - - if (this.razberry.isRazberry5() == true) - about_str = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5); - else if (this.razberry.isRazberry7() == true) - about_str = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML); - else - about_str = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT); - this.create_tr_el(ControllerUiLangClassId.MIGRATION_ABOUT_HEADER, ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE, about_str, ""); - if (this.razberry.isRazberry7() != true) - return (true); - this.el_button.disabled = false; - this.el_button.style.display = ''; - this.el_button.addEventListener("click", async (event:Event) => { await this._click_start_stop(event);}); - this.el_button.type = "button"; - this.el_button.textContent = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START); - this.el_button.title = this.locale.getLocale(ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE); - this.create_tr_el(ControllerUiLangClassId.MIGRATION_PROCESS_HEADER, ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE, this.el_container, this.el_button); - return (true); - } - - private async _end(): Promise { - this.process = false; - this.download_process.xhr.abort(); - if (this.download_process.timer_id != undefined) { - window.clearTimeout(this.download_process.timer_id); - this.download_process.timer_id = undefined; - } - this.el_container.innerHTML = ""; - if (this.progress_timer_id != undefined) { - window.clearTimeout(this.progress_timer_id); - this.progress_timer_id = undefined; - } - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass, clear:ControllerUiSectionMigrationClassClear, sapi:SapiClass, zuno:ZunoSapiClass) { - super(el_section, locale, razberry, log, ControllerUiLangClassId.MIGRATION_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.razberry = razberry; - this.sapi = sapi; - this.zuno = zuno; - this.clear = clear; - this.el_container = document.createElement("span"); - } -} \ No newline at end of file diff --git a/src/section/controller/update.ts b/src/section/controller/update.ts deleted file mode 100644 index fdad580..0000000 --- a/src/section/controller/update.ts +++ /dev/null @@ -1,85 +0,0 @@ -import {ControllerUiLangClassId} from "../../lang/ui_lang_define" -import {ControllerUiLangClass} from "../../lang/ui_lang" -import {ControllerSapiClass, ControllerSapiClassStatus, ControllerSapiClassBoardInfo, ControllerSapiClassCapabilities} from "../../sapi/controller_sapi"; -import {ControllerUiLogClass} from "../../log/ui_log" -import {CommonUiSectionClass} from "../common" -import {UpdateUiSectionClass, PaketUiClassUpdateInfoPaket} from "../update" -import {arrayToStringHex, versionNumberToString} from "../../other/utilities"; -import {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus} from "./../../sapi/sapi"; -import {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from "../../ui_define" -import {ControllerUiDefineClassReBeginFunc} from "../../section/detection" - -export {ControllerUiSectionUpdateClass}; - -class ControllerUiSectionUpdateClass extends CommonUiSectionClass { - - private readonly update:UpdateUiSectionClass; - private readonly razberry:ControllerSapiClass; - - public static getInfoUrlPaket(log:ControllerUiLogClass, razberry:ControllerSapiClass):PaketUiClassUpdateInfoPaket|undefined { - log.infoStart(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); - const board_info:ControllerSapiClassBoardInfo = razberry.getBoardInfo(); - if (board_info.status != ControllerSapiClassStatus.OK) { - log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO, board_info.status); - return (undefined); - } - log.infoDone(ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO); - log.infoStart(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); - const capabilities_info:ControllerSapiClassCapabilities = razberry.getCapabilities(); - if (capabilities_info.status != ControllerSapiClassStatus.OK) { - log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES, capabilities_info.status); - return (undefined); - } - log.infoDone(ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES); - const version:number = (capabilities_info.ApiVersion << 0x8) | capabilities_info.ApiRevision; - const paket:PaketUiClassUpdateInfoPaket = - { - app:{version:version, version_name:versionNumberToString(version), type:SapiClassDetectType.RAZBERRY, - update:true, update_type:true, data: []}, - boot:{ version:board_info.bootloader_version, version_name:versionNumberToString(board_info.bootloader_version), type:SapiClassDetectType.UNKNOWN, - update:true, update_type:true, data: []}, - url:'vendorId=' + capabilities_info.VendorID.toString() + '&appVersionMajor=' + capabilities_info.ApiVersion.toString() + '&appVersionMinor=' + capabilities_info.ApiRevision.toString() + - '&uuid=' + arrayToStringHex(board_info.chip_uuid) + "&bootloaderVersion=" + board_info.bootloader_version.toString() + - '&org_family=' + board_info.keys_hash.toString() + '&fw_family=' + SapiClassDetectType.RAZBERRY.toString() + '&chip_family=' + board_info.chip_family.toString() + - '&chip_id=' + board_info.chip_type.toString() + '&zway=' + NAME_APP_VERSION_FULL - }; - return (paket); - } - - private _update_init(): boolean { - const paket:PaketUiClassUpdateInfoPaket|undefined = ControllerUiSectionUpdateClass.getInfoUrlPaket(this.log, this.razberry); - if (paket == undefined) - return (false); - this.update.info_download_xhr(paket); - return (true); - } - - private async _begin(): Promise { - if (this.razberry.isRazberry7() == false) - return (false); - return (this._update_init()); - } - - private async _end(): Promise { - this.update.end(); - } - - private async _update_firmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - const status:ControllerSapiClassStatus = await this.razberry.updateFirmware(data, process, target_type); - return ((status as unknown) as SapiClassStatus); - } - - private async _update_bootloader(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - const status:ControllerSapiClassStatus = await this.razberry.updateBotloader(data, process); - return ((status as unknown) as SapiClassStatus); - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, razberry:ControllerSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) { - super(el_section, locale, razberry, log, ControllerUiLangClassId.UPDATE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.razberry = razberry; - this.update = new UpdateUiSectionClass(log, locale, this, re_begin_func, - async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware(data, process, target_type));}, - async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_bootloader(data, process, target_type));} - ); - } -} \ No newline at end of file diff --git a/src/section/detection.ts b/src/section/detection.ts deleted file mode 100644 index 2d76e81..0000000 --- a/src/section/detection.ts +++ /dev/null @@ -1,161 +0,0 @@ -import {ControllerUiLangClassId} from "../lang/ui_lang_define" -import {ControllerUiLangClass} from "..//lang/ui_lang" -import {SapiClass, SapiClassDetect, SapiClassStatus, SapiClassDetectTypeFunc, SapiClassDetectType} from "../sapi/sapi"; -import {ControllerUiLogClass} from "../log/ui_log" -import {CommonUiSectionClass} from "./common" - -import {ControllerUiDefineClass} from "../ui_define" - -export {DetectionUiSectionClass, ControllerUiDefineClassReBeginFunc}; - -type ControllerUiDefineClassReBeginFunc = (detection:boolean) => Promise; - -class DetectionUiSectionClass extends CommonUiSectionClass { - private readonly sapi:SapiClass; - private readonly re_begin_func:ControllerUiDefineClassReBeginFunc; - - private readonly el_container:HTMLElement = document.createElement("span"); - - private _get_detection_sync_manual():boolean { - const detection_sync_manual:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL); - if (detection_sync_manual === ControllerUiDefineClass.STORAGE_VALUE_TRUE) - return (true); - return (false); - } - - private async _detection_sync_manual(event:Event) { - const el_target:HTMLInputElement|null = this.event_get_element_input(event); - if (el_target == null) - return ; - localStorage.setItem(ControllerUiDefineClass.KEY_DETECTION_SYNC_MANUAL, ((el_target.checked == true) ? ControllerUiDefineClass.STORAGE_VALUE_TRUE: ControllerUiDefineClass.STORAGE_VALUE_FALSE)); - } - - private _get_baudrate_cache():Array { - let baudrate:Array, i:number; - - const baudrate_str:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_BAUDRATE); - if (baudrate_str == null) - return ([]); - try { - baudrate = JSON.parse(baudrate_str); - } catch (error) { - return ([]); - } - if (Array.isArray(baudrate) == false) - return ([]); - i = 0x0; - while (i < baudrate.length) { - if (this.sapi.BAUDRATE.indexOf(baudrate[i]) == -1) - baudrate.splice(i, 0x1); - i++; - } - return (baudrate); - } - - private _set_baudrate_cache(baudrate_array:Array, baudrate:number):void { - const i:number = baudrate_array.indexOf(baudrate); - if (i != -1) - baudrate_array.splice(i, 0x1); - baudrate_array.unshift(baudrate); - localStorage.setItem(ControllerUiDefineClass.KEY_BAUDRATE, JSON.stringify(baudrate_array)); - } - - private async _click_start_stop_question(): Promise { - const promise:Promise = new Promise((resolve) => { - this.el_container.innerHTML = ''; - const el_span:HTMLSpanElement = document.createElement("span"); - el_span.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC); - el_span.className = "ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button"; - const el_button_continue:HTMLButtonElement = document.createElement("button"); - el_button_continue.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE); - el_button_continue.title = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE); - el_button_continue.type = "button"; - el_button_continue.className = "ZUnoRazberryModalContentSection_migration_action_button"; - const el_button_stop:HTMLButtonElement = document.createElement("button"); - el_button_stop.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_STOP); - el_button_stop.title = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE); - el_button_stop.type = "button"; - el_button_stop.className = "ZUnoRazberryModalContentSection_migration_action_button"; - el_button_stop.addEventListener("click", async () => { resolve(false)}); - el_button_continue.addEventListener("click", async () => { resolve(true)}); - this.el_container.appendChild(el_span); - this.el_container.appendChild(el_button_continue); - this.el_container.appendChild(el_button_stop); - }); - return (promise); - } - - private async _detection_process_sync(): Promise { - const excluding_question:boolean = await this._click_start_stop_question(); - if (excluding_question == false) { - this._constructor_struct_end(); - return (false); - } - this._constructor_struct_progress(ControllerUiLangClassId.DETECTION_PROCESS); - return (true); - } - - private _constructor_struct_progress(text:ControllerUiLangClassId): void { - this.el_container.innerHTML = '
' + this.locale.getLocale(text) +'
'; - } - - private async _click_re_sync(event:Event) { - if (this.is_busy() == true) - return ; - this.re_begin_func(true); - } - - private _constructor_struct_end(): void { - this.el_container.innerHTML = ''; - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.addEventListener("click", async (event:Event) => { await this._click_re_sync(event);}); - el_button.type = "button"; - el_button.textContent = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC); - el_button.title = this.locale.getLocale(ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE); - this.el_container.appendChild(el_button); - } - - - public async detection(): Promise { - let func:SapiClassDetectTypeFunc|null; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_DETECTION); - const baudrate_array:Array = this._get_baudrate_cache(); - if (this._get_detection_sync_manual() == false) - func = null; - else - func = async ():Promise => {return (await this._detection_process_sync());} - this._constructor_struct_progress(ControllerUiLangClassId.DETECTION_PROCESS); - const detect_dict:SapiClassDetect = await this.sapi.detect(baudrate_array, func); - if (detect_dict.status != SapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); - this._constructor_struct_end(); - return (false); - } - this._constructor_struct_end(); - this._set_baudrate_cache(baudrate_array, detect_dict.baudrate); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_DETECTION); - return (true); - } - - private async _begin(): Promise { - const el_input:HTMLInputElement = document.createElement("input"); - el_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE); - el_input.type = "checkbox"; - el_input.checked = this._get_detection_sync_manual(); - el_input.addEventListener("change", (event:Event) => {this._detection_sync_manual(event);}); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL, ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE, el_input, ""); - this.create_tr_el(ControllerUiLangClassId.DETECTION_PROCESS_HEADER, ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE, this.el_container, ""); - return (true); - } - - private async _end(): Promise { - this.el_container.innerHTML = ""; - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, sapi:SapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) { - super(el_section, locale, sapi, log, ControllerUiLangClassId.DETECTION_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.sapi = sapi; - this.re_begin_func = re_begin_func; - } -} \ No newline at end of file diff --git a/src/section/slave/info.ts b/src/section/slave/info.ts deleted file mode 100644 index f93bf43..0000000 --- a/src/section/slave/info.ts +++ /dev/null @@ -1,437 +0,0 @@ -import {ControllerUiLangClassId} from "../../lang/ui_lang_define" -import {ControllerUiLangClass} from "../../lang/ui_lang" -import {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo, ZunoSapiClassRegion, ZunoSapiClassPower} from "../../sapi/zuno_sapi"; -import {ControllerUiLogClass} from "../../log/ui_log" -import {CommonUiSectionClass} from "../common" -import {versionNumberToStringSlave, arrayToStringHex, numberToStringHex, conv2Decimal, sleep} from "../../other/utilities"; -import { QRCode, QRCodeOption, QRErrorCorrectLevel } from "./../../qr_code/qrcode"; -import {ControllerUiDefineClass} from "../../ui_define" -import {ControllerUiDefineClassReBeginFunc} from "../../section/detection" - -export {SlaveUiSectionInfoClass}; - -class SlaveUiSectionInfoClass extends CommonUiSectionClass { - private readonly INCLUDE_EXCLUDE_DEFAULT:number = 30; - private readonly INCLUDE_EXCLUDE_MIN:number = 5; - private readonly INCLUDE_EXCLUDE_MAX:number = 255; - - private region_current:string = ''; - private region_new:string = ''; - private power_current:number = 0x0; - private power_new:number = 0x0; - - private readonly el_container_include_exlude:HTMLElement = document.createElement("span"); - private readonly el_timout_include_exlude:HTMLElement = document.createElement("span"); - - private readonly region_el_button:HTMLButtonElement; - private readonly power_el_button:HTMLButtonElement; - private readonly zuno:ZunoSapiClass; - private readonly re_begin_func:ControllerUiDefineClassReBeginFunc; - - private _not_freeze(status:ZunoSapiClassStatus, title:ControllerUiLangClassId) { - this.log.errorFalledCode(title, status); - if (status != ZunoSapiClassStatus.NO_FREEZE) - return ; - this.log.errorFalled(ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR); - this.re_begin_func(true); - } - - private _board_info(): boolean { - this.log.infoStart(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - const board_info:ZunoSapiClassBoardInfo = this.zuno.getBoardInfo(); - if (board_info.status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); - return (false); - } - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_TYPE, ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE, this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE), ""); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_VERSION, ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE, versionNumberToStringSlave(board_info.version), ""); - const build_data_time:Date = new Date(board_info.build_ts * 1000); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP, ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE, build_data_time.toLocaleString(), ""); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UUID, ControllerUiLangClassId.TABLE_NAME_UUID_TITLE, arrayToStringHex(board_info.chip_uuid), ""); - if (board_info.home_id != undefined) - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_HOME, ControllerUiLangClassId.TABLE_NAME_HOME_TITLE, numberToStringHex(board_info.home_id), ""); - if (board_info.node_id != undefined) - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_NODE, ControllerUiLangClassId.TABLE_NAME_NODE_TITLE, board_info.node_id.toString(0xA), ""); - const dsk:string = conv2Decimal(board_info.s2_pub, " - "); - const event_copy:EventListener = () => { - navigator.clipboard.writeText(dsk); - }; - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.textContent = this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_DSK); - el_button.title = this.locale.getLocale(ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE); - el_button.addEventListener("click", event_copy); - el_button.type = "button"; - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_DSK, ControllerUiLangClassId.TABLE_NAME_DSK_TITLE, "" + dsk.substring(0x0, 0x5) + "" + dsk.substring(0x5), el_button); - if (board_info.smart_qr != undefined) { - const el_span:HTMLSpanElement = document.createElement("span"); - const option:QRCodeOption = { - text: board_info.smart_qr, - width: 128, - height: 128, - colorDark: "#000000", - colorLight: "#ffffff", - correctLevel: QRErrorCorrectLevel.L, - }; - try { - new QRCode(el_span, option); - } catch(e) { - el_span.textContent = board_info.smart_qr; - } - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_QR_CODE, ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE, el_span, ""); - } - this.log.infoDone(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - return (true); - } - - private _region_change(event:Event): void { - const el_target:HTMLSelectElement|null = this.event_get_element_select(event); - if (el_target == null) - return ; - this.region_new = el_target.value; - this.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true:false); - } - - private async _region_click(): Promise { - if (this.is_busy() == true) - return ; - this.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, true); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_REGION); - const status:ZunoSapiClassStatus = await this.zuno.setRegion(this.region_new); - if (status == ZunoSapiClassStatus.OK) { - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_REGION); - this.region_current = this.region_new; - return ; - } - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_REGION, status); - this.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, false); - this._not_freeze(status, ControllerUiLangClassId.MESSAGE_SET_REGION); - } - - private _region_init(): boolean { - let i:number, el_option_str:string; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_REGION); - const region_info:ZunoSapiClassRegion = this.zuno.getRegion(); - if (region_info.status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); - return (false); - } - this.region_current = region_info.region; - this.region_new = region_info.region; - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_REGION); - i = 0x0; - el_option_str = ""; - while (i < region_info.region_array.length) { - if (region_info.region_array[i] == region_info.region) { - el_option_str = el_option_str + ''; - } - else { - el_option_str = el_option_str + ''; - } - i++; - } - const el_select:HTMLSelectElement = document.createElement("select"); - el_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE); - el_select.innerHTML = el_option_str; - el_select.addEventListener("change", (event:Event) => {this._region_change(event);}); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_REGION, ControllerUiLangClassId.TABLE_NAME_REGION_TITLE, el_select, this.region_el_button); - this.common_button_atrr(this.region_el_button, ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE, (this.region_new == this.region_current) ? true:false); - return (true); - } - - private _power_change(event:Event): void { - const el_target:HTMLInputElement|null = this.event_get_element_input(event); - if (el_target == null) - return ; - this.power_new = Number(el_target.value); - this.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true:false); - } - - private async _power_click(): Promise { - if (this.is_busy() == true) - return ; - this.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, true); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_POWER); - const status:ZunoSapiClassStatus = await this.zuno.setPower(this.power_new); - if (status == ZunoSapiClassStatus.OK) { - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_POWER); - this.power_current = this.power_new; - return ; - } - this.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, false); - this._not_freeze(status, ControllerUiLangClassId.MESSAGE_SET_POWER); - } - - private async _power_init(): Promise { - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_POWER); - const power:ZunoSapiClassPower = this.zuno.getPower(); - if (power.status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_POWER, power.status); - return (false); - } - this.power_new = power.power_raw; - this.power_current = power.power_raw; - const el_value:HTMLElement = document.createElement("span"); - const el_input:HTMLInputElement = document.createElement("input"); - el_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE); - el_input.type = "number"; - el_input.min = power.min.toString(); - el_input.max = power.max.toString(); - el_input.step = power.step.toString(); - el_input.value = power.power_raw.toString(); - el_input.addEventListener("change", (event:Event) => {this._power_change(event);}); - el_value.appendChild(el_input); - el_value.appendChild(document.createElement("span")); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_POWER, ControllerUiLangClassId.TABLE_NAME_POWER_TITLE, el_value, this.power_el_button); - this.common_button_atrr(this.power_el_button, ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE, (this.power_new == this.power_current) ? true:false); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_POWER); - return (true); - } - - private async _controller_default_click(event:Event): Promise { - if (this.is_busy() == true) - return ; - const el_target:HTMLButtonElement|null = this.event_get_element_button(event); - if (el_target == null) - return ; - const out:boolean = window.confirm(this.locale.getLocale(ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING)); - if (out != true) - return ; - this.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, true); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); - const status:ZunoSapiClassStatus = await this.zuno.setDefault(); - this.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE, false); - if (status == ZunoSapiClassStatus.OK) { - this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); - this.zuno.lock(); - await sleep(1000); - this.zuno.unlock(); - this.re_begin_func(true); - return ; - } - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status); - } - - private _include_exclude_get_test_timout(info_timout:string|null): number { - return (this.INCLUDE_EXCLUDE_DEFAULT); - let value:number; - - if (info_timout == null) - return (this.INCLUDE_EXCLUDE_DEFAULT); - try { - value = Number(info_timout); - } catch (error) { - return (this.INCLUDE_EXCLUDE_DEFAULT); - } - if (value < this.INCLUDE_EXCLUDE_MIN) - value = this.INCLUDE_EXCLUDE_MIN; - else if (value > this.INCLUDE_EXCLUDE_MAX) - value = this.INCLUDE_EXCLUDE_MAX; - return (value); - } - - private _include_exclude_get_storage(): number { - return (this._include_exclude_get_test_timout(localStorage.getItem(ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT))); - } - - private _include_exclude_change(event:Event): void { - const el_target:HTMLInputElement|null = this.event_get_element_input(event); - if (el_target == null) - return ; - localStorage.setItem(ControllerUiDefineClass.KEY_INCLUDE_EXCLUDE_TIMEOUT, this._include_exclude_get_test_timout(el_target.value).toString()); - } - - private _include_exclude_progress(text:ControllerUiLangClassId): void { - this.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) +'
'; - } - - private _include_exclude_message_info(text:ControllerUiLangClassId): void { - this.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) +'
'; - } - - private _include_exclude_message_warning(text:ControllerUiLangClassId): void { - this.el_container_include_exlude.innerHTML = '
' + this.locale.getLocale(text) +'
'; - } - - private _include_exclude_timout_show(): void { - this.el_container_include_exlude.innerHTML = ''; - // this.el_container_include_exlude.appendChild(this.el_timout_include_exlude); - } - - private _include_exclude_click_end(el_target:HTMLButtonElement, txt:ControllerUiLangClassId|null, status:ZunoSapiClassStatus): void { - if (txt!= null) - this.log.errorFalledCode(txt, status); - this.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE, false); - this._include_exclude_timout_show(); - } - - private async _include_exclude_click_start_stop_question(): Promise { - const promise:Promise = new Promise((resolve) => { - this.el_container_include_exlude.innerHTML = ''; - const el_span:HTMLSpanElement = document.createElement("span"); - el_span.textContent = this.locale.getLocale(ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE); - el_span.title = this.locale.getLocale(ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE); - el_span.className = "ZUnoRazberryModal_color_question ZUnoRazberryModalContentSection_migration_action_button"; - const el_button_continue:HTMLButtonElement = document.createElement("button"); - el_button_continue.textContent = this.locale.getLocale(ControllerUiLangClassId.PROCESS_CONTINUE); - el_button_continue.title = this.locale.getLocale(ControllerUiLangClassId.PROCESS_CONTINUE_TITLE); - el_button_continue.type = "button"; - el_button_continue.className = "ZUnoRazberryModalContentSection_migration_action_button"; - const el_button_stop:HTMLButtonElement = document.createElement("button"); - el_button_stop.textContent = this.locale.getLocale(ControllerUiLangClassId.PROCESS_STOP); - el_button_stop.title = this.locale.getLocale(ControllerUiLangClassId.PROCESS_STOP_TITLE); - el_button_stop.type = "button"; - el_button_stop.className = "ZUnoRazberryModalContentSection_migration_action_button"; - el_button_stop.addEventListener("click", async () => { resolve(false)}); - el_button_continue.addEventListener("click", async () => { resolve(true)}); - this.el_container_include_exlude.appendChild(el_span); - this.el_container_include_exlude.appendChild(el_button_continue); - this.el_container_include_exlude.appendChild(el_button_stop); - }); - return (promise); - } - - private async _include_exclude_click(event:Event): Promise { - let status:ZunoSapiClassStatus; - - if (this.is_busy() == true) - return ; - const el_target:HTMLButtonElement|null = this.event_get_element_button(event); - if (el_target == null) - return ; - this.common_button_atrr(el_target, ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE, true); - const excluding_question:boolean = await this._include_exclude_click_start_stop_question(); - if (excluding_question == false) { - this._include_exclude_click_end(el_target, null, ZunoSapiClassStatus.OK); - return ; - } - this._include_exclude_progress(ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); - status = await this.zuno.enableNif(); - if (status != ZunoSapiClassStatus.OK) { - this._include_exclude_click_end(el_target, ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT, status); - return ; - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); - status = await this.zuno.enableEvent(); - if (status != ZunoSapiClassStatus.OK) { - this._include_exclude_click_end(el_target, ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN, status); - return ; - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN); - this.log.infoStart(ControllerUiLangClassId.MESSAGE_START_LEARN); - status = await this.zuno.enableLearn(this._include_exclude_get_storage()); - this.log.infoDone(ControllerUiLangClassId.MESSAGE_START_LEARN); - switch (status) { - case ZunoSapiClassStatus.TIMEOUT: - this.log.info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); - this._include_exclude_message_info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT); - await sleep(3000); - break ; - case ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART: - this.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - this._include_exclude_message_warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - await sleep(3000); - this.re_begin_func(true); - return ; - break ; - default: - this.log.warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - this._include_exclude_message_warning(ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART); - await sleep(3000); - this.re_begin_func(true); - return ; - break ; - case ZunoSapiClassStatus.LEARN_EXCLUDE: - this.log.info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART); - this._include_exclude_message_info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART); - await sleep(3000); - this.re_begin_func(false); - return ; - break ; - case ZunoSapiClassStatus.LEARN_INCLUDE: - this.log.info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART); - this._include_exclude_message_info(ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART); - await sleep(3000); - this.re_begin_func(false); - return ; - break ; - } - this._include_exclude_click_end(el_target, null, ZunoSapiClassStatus.OK); - } - - private _include_exclude_init(): boolean { - const status:ZunoSapiClassStatus = this.zuno.isSupportIncludeExclude(); - if (status != ZunoSapiClassStatus.OK) - return (false); - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE); - el_button.type = "button"; - el_button.textContent = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON); - el_button.addEventListener("click", (event:Event) => {this._include_exclude_click(event);}); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE, ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE, this.el_container_include_exlude, el_button); - this._include_exclude_timout_show(); - return (true); - } - - private _controller_default_init(): boolean { - const status:ZunoSapiClassStatus = this.zuno.isSupportResetDefault(); - if (status != ZunoSapiClassStatus.OK) - return (false); - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE); - el_button.type = "button"; - el_button.textContent = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON); - el_button.addEventListener("click", (event:Event) => {this._controller_default_click(event);}); - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT, ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE, "", el_button); - return (true); - } - - private async _begin(): Promise { - let display:boolean; - - display = false; - if (this._board_info() == true) - display = true; - if (this._region_init() == true) - display = true; - if (await this._power_init() == true) - display = true; - if (this._include_exclude_init() == true) - display = true; - if (this._controller_default_init() == true) - display = true; - return (display); - } - - private async _end(): Promise { - this.el_container_include_exlude.innerHTML = ""; - } - - private _constructor_button(text:ControllerUiLangClassId, click:EventListener):HTMLButtonElement { - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.textContent = this.locale.getLocale(text); - el_button.addEventListener("click", click); - el_button.type = "button"; - return (el_button); - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, zuno:ZunoSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) { - super(el_section, locale, zuno, log, ControllerUiLangClassId.BOARD_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.zuno = zuno; - this.re_begin_func = re_begin_func; - this.power_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON, () => {this._power_click();}); - this.region_el_button = this._constructor_button(ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON, () => {this._region_click();}); - const el_input:HTMLInputElement = document.createElement("input"); - el_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE); - el_input.type = "number"; - el_input.min = this.INCLUDE_EXCLUDE_MIN.toString(); - el_input.max = this.INCLUDE_EXCLUDE_MAX.toString(); - el_input.step = "1"; - el_input.value = this._include_exclude_get_storage().toString(); - el_input.addEventListener("change", (event:Event) => {this._include_exclude_change(event);}); - this.el_timout_include_exlude.appendChild(el_input); - this.el_timout_include_exlude.appendChild(document.createElement("span")); - } -} \ No newline at end of file diff --git a/src/section/slave/license.ts b/src/section/slave/license.ts deleted file mode 100644 index 559dd7b..0000000 --- a/src/section/slave/license.ts +++ /dev/null @@ -1,61 +0,0 @@ -import {ControllerUiLangClassId} from "../../lang/ui_lang_define" -import {ControllerUiLangClass} from "../../lang/ui_lang" -import {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo} from "../../sapi/zuno_sapi"; -import {ControllerUiLogClass} from "../../log/ui_log" -import {CommonUiSectionClass} from "../common" -import {arrayToStringHex} from "../../other/utilities"; -import {TABLE_NAME_LICENSE_YES, TABLE_NAME_LICENSE_NO} from "../../ui_define" -import {ControllerUiDefineClassReBeginFunc} from "../../section/detection" - -export {SlaveUiSectionLicenseClass}; - -class SlaveUiSectionLicenseClass extends CommonUiSectionClass { - private readonly zuno:ZunoSapiClass; - private readonly re_begin_func:ControllerUiDefineClassReBeginFunc; - - private _license_init(): boolean { - let key:string, flag_status:string; - - this.log.infoStart(ControllerUiLangClassId.MESSAGE_READ_LICENSE); - const board_info:ZunoSapiClassBoardInfo = this.zuno.getBoardInfo(); - if (board_info.status != ZunoSapiClassStatus.OK) { - this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_READ_LICENSE, board_info.status); - return (false); - } - if (board_info.license == undefined) { - this.log.errorUnsupport(ControllerUiLangClassId.MESSAGE_READ_LICENSE); - return (false); - } - this.log.infoDone(ControllerUiLangClassId.MESSAGE_READ_LICENSE); - const uuid_str_hex:string = arrayToStringHex(board_info.chip_uuid); - const more_options_link:string = ''+ 'link' +''; - this.create_tr_el(ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS, ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE, more_options_link, ""); - for (key in board_info.license.lic_flags) { - if (board_info.license.lic_flags[key].active == true) - flag_status = TABLE_NAME_LICENSE_YES; - else - flag_status = TABLE_NAME_LICENSE_NO; - this.create_tr_el(board_info.license.lic_flags[key].name + ":", board_info.license.lic_flags[key].title, flag_status, ""); - } - return (true); - } - - private async _begin(): Promise { - let display:boolean; - - display = false; - if (this._license_init() == true) - display = true; - return (display); - } - - private async _end(): Promise { - - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, zuno:ZunoSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) { - super(el_section, locale, zuno, log, ControllerUiLangClassId.LICENSE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.zuno = zuno; - this.re_begin_func = re_begin_func; - } -} \ No newline at end of file diff --git a/src/section/slave/update.ts b/src/section/slave/update.ts deleted file mode 100644 index a26f682..0000000 --- a/src/section/slave/update.ts +++ /dev/null @@ -1,87 +0,0 @@ -import {ControllerUiLangClassId} from "../../lang/ui_lang_define" -import {ControllerUiLangClass} from "../../lang/ui_lang" -import {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo} from "../../sapi/zuno_sapi"; -import {ControllerUiLogClass} from "../../log/ui_log" -import {CommonUiSectionClass} from "../common" -import {UpdateUiSectionClass, PaketUiClassUpdateInfoPaket} from "../update" -import {ControllerUiDefineClassReBeginFunc} from "../../section/detection" -import {arrayToStringHex, versionNumberToString, versionNumberToStringSlave, sleep} from "../../other/utilities"; -import {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from "../../ui_define" -import {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus, SapiClassDetect} from "./../../sapi/sapi"; - -export {SlaveUiSectionUpdateClass}; - -class SlaveUiSectionUpdateClass extends CommonUiSectionClass { - private readonly zuno:ZunoSapiClass; - private readonly update:UpdateUiSectionClass; - - public static getInfoUrlPaket(log:ControllerUiLogClass, zuno:ZunoSapiClass):PaketUiClassUpdateInfoPaket|undefined { - log.infoStart(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - const board_info:ZunoSapiClassBoardInfo = zuno.getBoardInfo(); - if (board_info.status != ZunoSapiClassStatus.OK) { - log.errorFalledCode(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); - return (undefined); - } - log.infoDone(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - const paket:PaketUiClassUpdateInfoPaket = - { - app:{ version:board_info.version, version_name:versionNumberToStringSlave(board_info.version), type:SapiClassDetectType.ZUNO, - update:true, update_type:(zuno.isSupportUpdateBootloader() == ZunoSapiClassStatus.OK) ? true:false, data: []}, - boot:{ version:board_info.boot_version, version_name:versionNumberToString(board_info.boot_version), type:SapiClassDetectType.UNKNOWN, - update:false, update_type:false, data: []}, - url:'vendorId=327&appVersionMajor=' + ((board_info.version >> 16) & 0xFFFF).toString() + '&appVersionMinor=' + (board_info.version & 0xFFFF).toString() - + "&bootloaderVersion=" + board_info.boot_version.toString() + '&org_family=' + board_info.chip.keys_hash.toString() + '&fw_family=' + SapiClassDetectType.ZUNO.toString() - + '&chip_family=' + board_info.chip.chip_family.toString() + '&chip_id=' + board_info.chip.chip_type.toString() + '&zway=' + NAME_APP_VERSION_FULL + '&uuid=' - + arrayToStringHex(board_info.chip_uuid) - }; - return (paket); - } - - private _update_init(): boolean { - const paket:PaketUiClassUpdateInfoPaket|undefined = SlaveUiSectionUpdateClass.getInfoUrlPaket(this.log, this.zuno); - if (paket == undefined) - return (false); - this.update.info_download_xhr(paket); - return (true); - } - - private async _begin(): Promise { - return (this._update_init()); - } - - private async _end(): Promise { - this.update.end(); - } - - private async _update_firmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise { - // if (this.zuno.isMustResetDefault() == ZunoSapiClassStatus.OK && this.zuno.isSupportResetDefault() == ZunoSapiClassStatus.OK) { - // this.log.infoStart(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); - // const status:ZunoSapiClassStatus = await this.zuno.setDefault(); - // if (status != ZunoSapiClassStatus.OK) { - // this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_SET_DEFAULT, status); - // return ((status as unknown) as SapiClassStatus); - // } - // this.log.infoDone(ControllerUiLangClassId.MESSAGE_SET_DEFAULT); - // await sleep(1000); - // this.log.infoStart(ControllerUiLangClassId.MESSAGE_DETECTION); - // const detect_dict:SapiClassDetect = await this.zuno.detect([115200], null); - // if (detect_dict.status != SapiClassStatus.OK) { - // this.log.errorFalledCode(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); - // return ((detect_dict.status as unknown) as SapiClassStatus); - // } - // this.log.infoDone(ControllerUiLangClassId.MESSAGE_DETECTION); - // await this.zuno.connect(); - // } - const status:ZunoSapiClassStatus = await this.zuno.updateFirmware(data, process, target_type); - return ((status as unknown) as SapiClassStatus); - } - - constructor(el_section:HTMLElement, locale:ControllerUiLangClass, zuno:ZunoSapiClass, log:ControllerUiLogClass, re_begin_func:ControllerUiDefineClassReBeginFunc) { - super(el_section, locale, zuno, log, ControllerUiLangClassId.UPDATE_INFO_HEADER, async ():Promise => {return (await this._begin());}, async ():Promise => {return (await this._end());}); - this.zuno = zuno; - this.update = new UpdateUiSectionClass(log, locale, this, re_begin_func, - async (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise => {return(await this._update_firmware(data, process, target_type));}, - null - ); - } -} \ No newline at end of file diff --git a/src/section/update.ts b/src/section/update.ts deleted file mode 100644 index 5f77c49..0000000 --- a/src/section/update.ts +++ /dev/null @@ -1,482 +0,0 @@ -import {ControllerUiLangClassId} from "../lang/ui_lang_define" -import {ControllerUiLangClass} from "../lang/ui_lang" -import {ControllerUiLogClass} from "../log/ui_log" -import {CommonUiSectionHtmlClass} from "./common" -import {ControllerUiDefineClass} from "../ui_define" -import {SapiClassDetectType, SapiClassUpdateProcess, SapiClassStatus} from "./../sapi/sapi"; -import {CommonUiSectionClass} from "./common" -import {ControllerUiDefineClassReBeginFunc} from "../section/detection" -import {versionNumberToString, versionNumberToStringSlave} from "../other/utilities"; - -export { - UpdateUiSectionClass, UpdateUiSectionClassJsonInfo, UpdateUiSectionClassButton, UpdateUiSectionClassFirmware, - PaketUiClassUpdateInfo, PaketUiClassUpdateInfoData, PaketUiClassUpdateInfoPaket, UpdateUiSectionClassPaket -}; - -type UpdateUiSectionClassFirmware = (data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType) => Promise; - -type UpdateUiSectionClassButtonClick = () => void; - - -interface PaketUiClassUpdateInfoData -{ - version:number; - version_name:string; - url:string; - type:SapiClassDetectType; - beta:boolean; -} - -interface PaketUiClassUpdateInfo -{ - update:boolean; - update_type:boolean; - version:number; - version_name:string; - type:SapiClassDetectType; - data:Array; -} - -interface PaketUiClassUpdateInfoPaket -{ - url:string; - app:PaketUiClassUpdateInfo; - boot:PaketUiClassUpdateInfo; -} - -interface UpdateUiSectionClassPaket -{ - xhr:XMLHttpRequest; - timer_id?:number; -} - -interface UpdateUiSectionClassJson -{ - targetBootloaderVersion:string; - targetAppVersionMajor:string; - targetAppVersionMinor:string; - fileURL:string; - enabled:string; - type:string; - target_fw_family:string; -} - -interface UpdateUiSectionClassJsonInfo -{ - data:Array -} - -interface UpdateUiSectionClassButton -{ - url_current:string; - url_new:string; - el_select:HTMLSelectElement; - el_span:HTMLSpanElement; - el_button:HTMLButtonElement; - info?:PaketUiClassUpdateInfo; -} - - -class UpdateUiSectionClass extends CommonUiSectionHtmlClass { - private static readonly URL_UPDATE:string = "https://service.z-wave.me/expertui/uzb/"; - private static readonly URL_UPDATE_LIST:string = UpdateUiSectionClass.URL_UPDATE + "?"; - - private static readonly JSON_UPDATE_DISABLED:string = "disabled"; - private static readonly JSON_UPDATE_TYPE_FIRMWARE:string = "firmware"; - private static readonly JSON_UPDATE_TYPE_BOOTLOADER:string = "bootloader"; - - private readonly SELECTOR_BETA:string = 'data-beta'; - private readonly SELECTOR_DEFAULT:string = 'data-default'; - - - private static readonly info_xhr_timeout:number = 5000; - private static readonly info_xhr_timer_timeout:number = 3000; - private static readonly firmware_xhr_timout:number = 10000; - private static readonly firmware_xhr_timer_timout:number = 3000; - private readonly bus_timout:number = 3000; - - private readonly download_process:UpdateUiSectionClassPaket = {xhr:new XMLHttpRequest()}; - - private readonly log:ControllerUiLogClass; - private readonly commom_ui:CommonUiSectionClass; - private readonly re_begin_func:ControllerUiDefineClassReBeginFunc; - - readonly firmware:UpdateUiSectionClassButton; - readonly bootloader:UpdateUiSectionClassButton; - - private _update_change(event:Event, title:ControllerUiLangClassId, info:UpdateUiSectionClassButton): void { - const el_target:HTMLSelectElement|null = this.event_get_element_select(event); - if (el_target == null) - return ; - info.url_new = el_target.value; - this.common_button_atrr(info.el_button, title, (info.url_new == info.url_current) ? true:false); - } - - private _progress(info:UpdateUiSectionClassButton, text:ControllerUiLangClassId): void { - info.el_span.innerHTML = '
' + this.locale.getLocale(text) +'
'; - } - - private _end_struct(info:UpdateUiSectionClassButton) { - info.url_current = ""; - info.url_new = ""; - info.el_button.disabled = true; - this._progress(info, ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO); - } - - public static async updateProcess(txt:ControllerUiLangClassId, el:HTMLElement, data:Uint8Array, target_type:SapiClassDetectType, update_firmware:UpdateUiSectionClassFirmware, locale:ControllerUiLangClass, log:ControllerUiLogClass): Promise { - log.infoStart(txt); - const el_progress:HTMLElement = document.createElement('progress'); - const el_span:HTMLElement = document.createElement('span'); - el_progress.setAttribute('max', '100'); - el.innerHTML = ''; - el.appendChild(el_progress); - el.appendChild(el_span); - el_progress.setAttribute('value', "00"); - const status:SapiClassStatus = await update_firmware(data, (percentage:number) => { - el_progress.setAttribute('value', percentage.toFixed().toString()); - el_span.textContent = ' ' + percentage.toFixed(0x2).padStart(5, '0') + '%'; - if (percentage >= 100.00) { - el.innerHTML = '
' + locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE) +'
'; - } - }, target_type - ); - el.innerHTML = ''; - if (status != SapiClassStatus.OK) { - log.errorFalledCode(txt, status); - return (false); - } - log.infoDone(txt); - return (true); - } - - public static async downloadFile(file_process:UpdateUiSectionClassPaket, url:string, log:ControllerUiLogClass): Promise { - const promise:Promise = new Promise((resolve) => { - log.infoStart(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); - url = UpdateUiSectionClass.URL_UPDATE + url; - const fun_xhr_timer:TimerHandler = () => { - file_process.timer_id = undefined; - file_process.xhr.open("POST", url, true); - file_process.xhr.responseType = "arraybuffer"; - file_process.xhr.timeout = UpdateUiSectionClass.firmware_xhr_timout; - file_process.xhr.ontimeout = () => { - log.errorXhrTimeout(url); - log.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); - file_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.firmware_xhr_timer_timout); - }; - file_process.xhr.onerror = () => { - log.errorXhrError(url); - log.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); - file_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.firmware_xhr_timer_timout); - }; - file_process.xhr.onload = () => { - log.infoDone(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE); - const gbl:Uint8Array = new Uint8Array(file_process.xhr.response); - resolve(gbl); - }; - file_process.xhr.send(); - }; - file_process.timer_id = window.setTimeout(fun_xhr_timer, 0x0); - }); - return (promise); - } - - private async _download_xhr_start(paket:UpdateUiSectionClassButton, update_firmware:UpdateUiSectionClassFirmware|null, txt:ControllerUiLangClassId,): Promise { - let i:number, type:SapiClassDetectType|undefined; - - if (update_firmware == null) - return ; - const info:PaketUiClassUpdateInfo|undefined = paket.info; - if (info == undefined) { - this.log.error(ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT); - return ; - } - i = 0x0; - while (i < info.data.length) { - if (paket.url_new == info.data[i].url) { - type = info.data[i].type; - break ; - } - i++; - } - if (type == undefined) { - this.log.error(ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE); - return ; - } - this._progress(paket, ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE); - this.common_button_atrr(paket.el_button, '', true); - const gbl:Uint8Array = await UpdateUiSectionClass.downloadFile(this.download_process, paket.url_new, this.log); - const fun_bus_timer:TimerHandler = async () => { - this.download_process.timer_id = undefined; - if (this.commom_ui.is_busy() == true) { - this.download_process.timer_id = window.setTimeout(fun_bus_timer, this.bus_timout); - return ; - } - if (type != undefined) - await UpdateUiSectionClass.updateProcess(txt, paket.el_span, gbl, type, update_firmware, this.locale, this.log); - this.re_begin_func(true); - return ; - - }; - this._progress(paket, ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL); - this.download_process.timer_id = window.setTimeout(fun_bus_timer, 0x0); - } - - private _constructor_struct(button_text:ControllerUiLangClassId, click:UpdateUiSectionClassButtonClick, change:EventListener):UpdateUiSectionClassButton { - const el_span:HTMLSpanElement = document.createElement("span"); - const el_button:HTMLButtonElement = document.createElement("button"); - el_button.textContent = this.locale.getLocale(button_text); - el_button.addEventListener("click", click); - el_button.type = "button"; - const el_select:HTMLSelectElement = document.createElement("select"); - el_select.addEventListener("change", change); - const info:UpdateUiSectionClassButton = {url_current:'', url_new:'', el_span:el_span, el_button:el_button, el_select:el_select}; - return (info); - } - - private _init_select(paket:UpdateUiSectionClassButton, title:ControllerUiLangClassId): void { - let i:number, el_option_str:string; - - const info:PaketUiClassUpdateInfo|undefined = paket.info; - if (info == undefined) { - this.log.error(ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT); - return ; - } - paket.el_span.innerHTML = ""; - paket.el_span.appendChild(paket.el_select); - i = 0x0; - el_option_str = ''; - while (i < info.data.length) { - el_option_str = el_option_str + ''; - i++; - } - paket.el_select.innerHTML = el_option_str; - this.common_button_atrr(paket.el_button, '', true); - if (info.data.length != 0x0) { - paket.el_select.title = this.locale.getLocale(title); - return ; - } - paket.el_select.innerHTML = el_option_str; - paket.el_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE); - paket.el_select.disabled = true; - } - - private _update_beta_change_all_select(beta:boolean, el_select:HTMLSelectElement, title:ControllerUiLangClassId): void { - let number:number; - - const list_option:NodeListOf = el_select.querySelectorAll('option'); - number = 0x0; - list_option.forEach((item:HTMLElement) => { - if (item.getAttribute('selected') != null) { - item.removeAttribute("selected"); - } - if (beta == false && item.getAttribute(this.SELECTOR_BETA) != null) - return ; - if (item.getAttribute(this.SELECTOR_DEFAULT) != null) { - item.setAttribute("selected", ""); - } - number++; - }); - if (beta == false) - el_select.setAttribute(this.SELECTOR_BETA, ""); - else - el_select.removeAttribute(this.SELECTOR_BETA); - if (number > 0x1) { - el_select.title = this.locale.getLocale(title); - el_select.removeAttribute("disabled"); - return ; - } - el_select.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE); - el_select.setAttribute("disabled", ""); - } - - private _update_beta_change_all(): void { - let beta:boolean; - - const update_beta:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_UPDATE_BETA); - if (update_beta === ControllerUiDefineClass.STORAGE_VALUE_TRUE) - beta = true; - else - beta = false; - this._update_beta_change_all_select(beta, this.firmware.el_select, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE); - this.firmware.url_new = ""; - this.common_button_atrr(this.firmware.el_button, '', true); - this._update_beta_change_all_select(beta, this.bootloader.el_select, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE); - this.bootloader.url_new = ""; - this.common_button_atrr(this.bootloader.el_button, '', true); - } - - private _update_beta_change(event:Event): void { - const el_target:HTMLInputElement|null = this.event_get_element_input(event); - if (el_target == null) - return ; - localStorage.setItem(ControllerUiDefineClass.KEY_UPDATE_BETA, ((el_target.checked == true) ? ControllerUiDefineClass.STORAGE_VALUE_TRUE: ControllerUiDefineClass.STORAGE_VALUE_FALSE)); - this._update_beta_change_all(); - } - - public end(): void { - this._end_struct(this.firmware); - this._end_struct(this.bootloader); - this.download_process.xhr.abort(); - if (this.download_process.timer_id != undefined) { - window.clearTimeout(this.download_process.timer_id); - this.download_process.timer_id = undefined; - } - } - - public init_select_firmware(): void { - this._init_select(this.firmware, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE); - } - - public init_select_bootloader(): void { - this._init_select(this.bootloader, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE); - } - - private static _downloadInfo_process(response: UpdateUiSectionClassJsonInfo, app:PaketUiClassUpdateInfo, boot:PaketUiClassUpdateInfo, locale:ControllerUiLangClass): void { - let i:number, version:number, version_name:string, temp_data:PaketUiClassUpdateInfoData; - - i = 0x0; - const add_data:Array = []; - while (i < response.data.length) { - const target_fw_family:number = Number(response.data[i].target_fw_family); - switch (response.data[i].type) { - case UpdateUiSectionClass.JSON_UPDATE_TYPE_FIRMWARE: - if (app.update == false) { - i++; - continue ; - } - if (app.update_type == false && app.type != target_fw_family) { - i++; - continue ; - } - switch (target_fw_family) { - case SapiClassDetectType.ZUNO: - version = (Number(response.data[i].targetAppVersionMajor) << 0x10) | Number(response.data[i].targetAppVersionMinor); - if (app.type == SapiClassDetectType.ZUNO && version <= app.version) { - i++; - continue ; - } - version_name = versionNumberToStringSlave(version) + " - " + locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE); - temp_data = {version:version, version_name:version_name, url:response.data[i].fileURL, type:SapiClassDetectType.ZUNO, beta:((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true:false))}; - if (app.type == SapiClassDetectType.ZUNO) - app.data.push(temp_data); - else - add_data.push(temp_data); - break ; - case SapiClassDetectType.RAZBERRY: - version = (Number(response.data[i].targetAppVersionMajor) << 0x8) | Number(response.data[i].targetAppVersionMinor); - if (app.type == SapiClassDetectType.RAZBERRY && version <= app.version) { - i++; - continue ; - } - version_name = versionNumberToString(version) + " - " + locale.getLocale(ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER); - temp_data = {version:version, version_name:version_name, url:response.data[i].fileURL, type:SapiClassDetectType.RAZBERRY, beta:((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true:false))}; - if (app.type == SapiClassDetectType.RAZBERRY) - app.data.push(temp_data); - else - add_data.push(temp_data); - break ; - } - break ; - case UpdateUiSectionClass.JSON_UPDATE_TYPE_BOOTLOADER: - if (boot.update == false) { - i++; - continue ; - } - version = Number(response.data[i].targetBootloaderVersion); - if (version <= boot.version) { - i++; - continue ; - } - version_name = versionNumberToString(version); - temp_data = {version:version, version_name:version_name, url:response.data[i].fileURL, type:SapiClassDetectType.UNKNOWN, beta:((response.data[i].enabled == UpdateUiSectionClass.JSON_UPDATE_DISABLED ? true:false))}; - boot.data.push(temp_data); - break ; - } - i++; - } - boot.data.sort(function (a:PaketUiClassUpdateInfoData, b:PaketUiClassUpdateInfoData):number { - return (a.version - b.version); - }); - app.data.sort(function (a:PaketUiClassUpdateInfoData, b:PaketUiClassUpdateInfoData):number { - return (a.version - b.version); - }); - add_data.sort(function (a:PaketUiClassUpdateInfoData, b:PaketUiClassUpdateInfoData):number { - return (a.version - b.version); - }); - i = 0x0; - while ( i < add_data.length) { - app.data.push(add_data[i]); - i++; - } - } - - public static async downloadInfo(info_process:UpdateUiSectionClassPaket, in_paket:PaketUiClassUpdateInfoPaket, log:ControllerUiLogClass, locale:ControllerUiLangClass): Promise { - const promise:Promise = new Promise((resolve) => { - const url:string = UpdateUiSectionClass.URL_UPDATE_LIST + in_paket.url + '&token=internal';//'&token=internal' '&token=all'; - const fun_xhr_timer:TimerHandler = () => { - info_process.timer_id = undefined; - log.infoStart(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); - info_process.xhr.open("POST", url, true); - info_process.xhr.responseType = 'json'; - info_process.xhr.timeout = UpdateUiSectionClass.info_xhr_timeout; - info_process.xhr.ontimeout = () => { - log.errorXhrTimeout(url); - log.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); - info_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout); - }; - info_process.xhr.onerror = () => { - log.errorXhrError(url); - log.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); - info_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout); - }; - info_process.xhr.onload = () => { - try { - UpdateUiSectionClass._downloadInfo_process(info_process.xhr.response, in_paket.app, in_paket.boot, locale); - } catch (error) { - log.errorXhrInvalidData(url); - log.errorFalled(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); - info_process.timer_id = window.setTimeout(fun_xhr_timer, UpdateUiSectionClass.info_xhr_timer_timeout); - return ; - } - log.infoDone(ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO); - resolve(); - }; - info_process.xhr.send(); - }; - info_process.timer_id = window.setTimeout(fun_xhr_timer, 0x0); - }); - return (promise); - } - - public async info_download_xhr(in_paket:PaketUiClassUpdateInfoPaket): Promise { - this.firmware.info = in_paket.app; - this.bootloader.info = in_paket.boot; - const update_beta:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_UPDATE_BETA); - const el_input:HTMLInputElement = document.createElement("input"); - el_input.title = this.locale.getLocale(ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE); - el_input.type = "checkbox"; - if (update_beta === ControllerUiDefineClass.STORAGE_VALUE_TRUE) - el_input.checked = true; - el_input.addEventListener("change", (event:Event) => {this._update_beta_change(event);}); - this.commom_ui.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA, ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE, el_input, ""); - this.commom_ui.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE, this.firmware.el_span, this.firmware.el_button); - this.commom_ui.create_tr_el(ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE, this.bootloader.el_span, this.bootloader.el_button); - await UpdateUiSectionClass.downloadInfo(this.download_process, in_paket, this.log, this.locale); - this.init_select_firmware(); - this.init_select_bootloader(); - this._update_beta_change_all(); - } - - constructor(log:ControllerUiLogClass, locale:ControllerUiLangClass, commom_ui:CommonUiSectionClass, re_begin_func:ControllerUiDefineClassReBeginFunc, - update_firmware:UpdateUiSectionClassFirmware, update_bootloader:UpdateUiSectionClassFirmware|null - ) { - super(locale); - this.log = log; - this.commom_ui = commom_ui; - this.re_begin_func = re_begin_func; - this.firmware = this._constructor_struct(ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON, () => {this._download_xhr_start(this.firmware, update_firmware, ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE);}, - (event:Event) => {this._update_change(event, ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE, this.firmware);}); - this.bootloader = this._constructor_struct(ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON, () => {this._download_xhr_start(this.bootloader, update_bootloader, ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER);}, - (event:Event) =>{ this._update_change(event, ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE, this.bootloader);}); - } -} diff --git a/src/ui_define.ts b/src/ui_define.ts deleted file mode 100644 index 0a55858..0000000 --- a/src/ui_define.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {WEB_TOOLS_VERSION} from "./other/define" - -export {ControllerUiDefineClass, TABLE_NAME_LICENSE_YES, TABLE_NAME_LICENSE_NO, NAME_APP_VERSION_FULL}; - -const TABLE_NAME_LICENSE_YES:string = ''; -const TABLE_NAME_LICENSE_NO:string = ''; - -enum ControllerUiDefineClass -{ - NAME_APP = "SerialAPIWebTools", - KEY_INCLUDE_EXCLUDE_TIMEOUT = NAME_APP + '_info_include_exlude_timout', - KEY_BAUDRATE = ControllerUiDefineClass.NAME_APP + '_baudrate_cache', - KEY_DETECTION_SYNC_MANUAL = ControllerUiDefineClass.NAME_APP + '_detection_sync_manual', - KEY_UPDATE_BETA = ControllerUiDefineClass.NAME_APP + '_update_beta', - STORAGE_VALUE_TRUE = 'true', - STORAGE_VALUE_FALSE = 'false', -} - -const NAME_APP_VERSION_FULL:string = ControllerUiDefineClass.NAME_APP + " " + WEB_TOOLS_VERSION; \ No newline at end of file diff --git a/src/z-uno-compiler.ts b/src/z-uno-compiler.ts deleted file mode 100644 index 63bb8ff..0000000 --- a/src/z-uno-compiler.ts +++ /dev/null @@ -1,503 +0,0 @@ - -import { QRCode, QRCodeOption, QRErrorCorrectLevel } from "./qr_code/qrcode"; -import {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from "./ui_define" -import {SapiClass, SapiClassDetect, SapiClassStatus, SapiClassDetectType} from "./sapi/sapi"; -import {ZunoSapiClass, ZunoSapiClassBoardInfo, ZunoSapiClassStatus, ZunoSapiClassRegion, ZunoSapiClassPower, ZunoSapiClassSec} from "./sapi/zuno_sapi"; -import {ControllerUiLangClassId} from "./lang/ui_lang_define" -import {ControllerUiLangClass} from "./lang/ui_lang" -import {conv2Decimal} from "./other/utilities" -import {SapiRegionClass} from "./sapi/region" - -export {ZUnoCompilerClass}; - -type ZUnoCompilerProgressCbkProt = (severity:string, message:string) => void; - -type ZUnoCompilerLoadSketchResultProt = { - "status":number, - "log":string, - "message":string, - "bin":string, -}; - - -type ZUnoCompilerVersionHwResultProt = { - [index:string]:{"seq":number}, -}; - -type ZUnoCompilerVersionResultProt = { - "status":number, - "log":string, - "message":string, - "version":{"hw": ZUnoCompilerVersionHwResultProt} -}; - -type ZUnoCompilerLoadSketchOutProt = { - "dsk"?:string, - "smart_qr"?:string, -} - -enum XhrStatus -{ - OK, - TIMEOUT, - ERROR, - INVALID_DATA, -} - -interface XhrOut -{ - status:XhrStatus; - error:string; - url:string; - data:any; -} - -interface XhrOutBuildNumber -{ - res:XhrOut; - build_number:number; -} - -interface XhrOutBinary -{ - res:XhrOut; - bin:Uint8Array; -} - -class ZUnoCompilerClass { - private readonly sapi:SapiClass = new SapiClass(); - private readonly zuno:ZunoSapiClass = new ZunoSapiClass(this.sapi); - private readonly locale:ControllerUiLangClass = new ControllerUiLangClass(); - - private readonly COM_PORT_FILTERS = [{ usbVendorId: 0x10c4, usbProductId: 0xea60 }]; - - private xhr_version = new XMLHttpRequest(); - private xhr_compile = new XMLHttpRequest(); - private xhr_download_finware = new XMLHttpRequest(); - - private error_complite:boolean = false; - - private progressCbk:ZUnoCompilerProgressCbkProt|null; - private promise_wait: Promise; - - private _progress(severity:string, txt:string): void { - if (this.progressCbk == null) - return ; - this.progressCbk(severity, txt); - } - - private async _close(): Promise { - this.xhr_version.abort(); - this.xhr_compile.abort(); - this.xhr_download_finware.abort(); - await this.sapi.close(); - } - - private _info(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this._progress("info", txt); - } - - public _info_wait(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this._info(txt + "..."); - } - - - public _info_done(txt:string|ControllerUiLangClassId): void { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - this._info(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_DONE)); - } - - private async _error(txt:string|ControllerUiLangClassId): Promise { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - txt = txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED); - this._progress("error", txt); - await this._close(); - throw new Error(txt); - } - - private async _error_code(txt:string|ControllerUiLangClassId, code:number): Promise { - if (typeof txt !== "string") - txt = this.locale.getLocale(txt); - txt = txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED_CODE).replace('{{code}}', code.toString()); - this._progress("error", txt); - await this._close(); - throw new Error(txt); - } - - private _get_baudrate_cache():Array { - let baudrate:Array, i:number; - - const baudrate_str:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_BAUDRATE); - if (baudrate_str == null) - return ([]); - try { - baudrate = JSON.parse(baudrate_str); - } catch (error) { - return ([]); - } - if (Array.isArray(baudrate) == false) - return ([]); - i = 0x0; - while (i < baudrate.length) { - if (this.sapi.BAUDRATE.indexOf(baudrate[i]) == -1) - baudrate.splice(i, 0x1); - i++; - } - return (baudrate); - } - - private _set_baudrate_cache(baudrate_array:Array, baudrate:number):void { - const i:number = baudrate_array.indexOf(baudrate); - if (i != -1) - baudrate_array.splice(i, 0x1); - baudrate_array.unshift(baudrate); - localStorage.setItem(ControllerUiDefineClass.KEY_BAUDRATE, JSON.stringify(baudrate_array)); - } - - private async _xhr(xhr:XMLHttpRequest, url:string, data:FormData|null): Promise { - return new Promise(function(resolve) { - const out:XhrOut = {status:XhrStatus.OK, error:"", url:'https://service.z-wave.me/z-uno-compilation-server/?' + url, data:""}; - xhr.open("POST", out.url); - xhr.responseType = 'json'; - xhr.timeout = 30000;//30 sec - xhr.ontimeout = function () { - out.status = XhrStatus.TIMEOUT; - resolve(out); - }; - xhr.onload = function () { - out.data = xhr.response; - resolve(out); - }; - xhr.onerror = function () { - out.status = XhrStatus.ERROR; - resolve(out); - }; - xhr.send(data); - }); - } - - private async _xhr_common(xhr:XMLHttpRequest, url:string, data:FormData|null): Promise { - const res:XhrOut = await this._xhr(xhr, url, data); - if (res.status == XhrStatus.OK) - return (res); - if (res.status == XhrStatus.TIMEOUT) { - res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_TIMEOUT).replace('{{url}}', res.url); - return (res); - } - res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_ERROR).replace('{{url}}', res.url); - return (res); - } - - private async _xhr_build_number(hw_str:string): Promise { - const res:XhrOut = await this._xhr_common(this.xhr_version, 'version', null); - const out:XhrOutBuildNumber = {res:res, build_number:0x0}; - if (res.status != XhrStatus.OK) - return (out); - try { - const result:ZUnoCompilerVersionResultProt = res.data; - if (result["status"] != 0x0) { - out.res.status = XhrStatus.INVALID_DATA; - out.res.error = "Get version returned incorrect status: " + result["status"] + " message: " + result["message"]; - return (out); - } - const version_list:ZUnoCompilerVersionHwResultProt = result["version"]["hw"]; - const build_number:number = version_list[hw_str].seq; - if (build_number === undefined) { - out.res.status = XhrStatus.INVALID_DATA; - out.res.error = "The server does not support the specified board revision"; - return (out); - } - out.build_number = build_number; - } catch (error) { - out.res.status = XhrStatus.INVALID_DATA; - out.res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url); - return (out); - } - return (out); - } - - private async _xhr_download_finware(hw_str:string, build_number:number): Promise { - const url = 'bootloader&' + 'hw=' + hw_str + "&seq=" + String(build_number); - const res:XhrOut = await this._xhr_common(this.xhr_download_finware, url, null); - const out:XhrOutBinary = {res:res, bin: new Uint8Array()}; - if (res.status != XhrStatus.OK) - return (out); - try { - const result:ZUnoCompilerLoadSketchResultProt = res.data; - if (result["status"] != 0x0) { - out.res.status = XhrStatus.INVALID_DATA; - out.res.error = "Get bootloader returned incorrect status: " + result["status"] + " log: " + result["log"] + " message: " + result["message"]; - return (out); - } - out.bin = this._base64ToArrayBuffer(result["bin"]); - } catch (error) { - out.res.status = XhrStatus.INVALID_DATA; - out.res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url); - return (out); - } - return (out); - } - - private _base64ToArrayBuffer(base64:string): Uint8Array { - const binaryString:string = atob(base64); - const bytes:Array = new Array(binaryString.length); - for (let i = 0; i < binaryString.length; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return new Uint8Array(bytes); - } - - private async _xhr_compile(hw_str:string, code:string): Promise { - const formData:FormData = new FormData(); - formData.append("sketch", new File([new Blob([code])], "sketch", { lastModified: Date.now(), type: "text/x-arduino"})); - formData.append("referer", document.location.href); - const url = 'compile&' + 'hw=' + hw_str; - const res:XhrOut = await this._xhr_common(this.xhr_compile, url, formData); - const out:XhrOutBinary = {res:res, bin: new Uint8Array()}; - if (res.status != XhrStatus.OK) - return (out); - try { - const result:ZUnoCompilerLoadSketchResultProt = res.data; - if (result["status"] != 0x0) { - out.res.status = XhrStatus.INVALID_DATA; - out.res.error = "Compilation returned incorrect status: " + result["status"] + " log: " + result["log"] + " message: " + result["message"]; - return (out); - } - out.bin = this._base64ToArrayBuffer(result["bin"]); - } catch (error) { - out.res.status = XhrStatus.INVALID_DATA; - out.res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url); - return (out); - } - return (out); - } - - private async _sketch(code:string, freq:string|null, sec:boolean, main_pow:number): Promise { - let hw_str:string, board_info:ZunoSapiClassBoardInfo, detect_dict:SapiClassDetect; - - this._info(NAME_APP_VERSION_FULL); - const status:SapiClassStatus = await this.sapi.request(this.COM_PORT_FILTERS); - if (status == SapiClassStatus.SERIAL_UN_SUPPORT) - return (this._error(ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER)); - if (status == SapiClassStatus.REQUEST_NO_SELECT) - return (this._error(ControllerUiLangClassId.MESSAGE_PORT_SELECT)); - if (status != SapiClassStatus.OK) - return (this._error_code(ControllerUiLangClassId.MESSAGE_PORT_SELECT, status)); - this._info_wait(ControllerUiLangClassId.MESSAGE_DETECTION); - const baudrate_array:Array = this._get_baudrate_cache(); - detect_dict = await this.sapi.detect(baudrate_array, null); - if (detect_dict.status != SapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); - return ; - } - this._set_baudrate_cache(baudrate_array, detect_dict.baudrate); - this._info_done(ControllerUiLangClassId.MESSAGE_DETECTION); - this._info_wait(ControllerUiLangClassId.MESSAGE_CONNECT); - if (this.sapi.type() != SapiClassDetectType.ZUNO) { - this._error(ControllerUiLangClassId.MESSAGE_CONNECT); - return ; - } - await this.zuno.connect(); - this._info_done(ControllerUiLangClassId.MESSAGE_CONNECT); - this._info_wait(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - board_info = this.zuno.getBoardInfo(); - if (board_info.status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); - return ; - } - this._info_done(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - this._info_wait(ControllerUiLangClassId.MESSAGE_READ_REGION); - const region_info:ZunoSapiClassRegion = this.zuno.getRegion(); - if (region_info.status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); - return ; - } - this._info_done(ControllerUiLangClassId.MESSAGE_READ_REGION); - this._info_wait(ControllerUiLangClassId.MESSAGE_READ_POWER); - const power:ZunoSapiClassPower = this.zuno.getPower(); - if (power.status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_READ_POWER, power.status); - return ; - } - this._info_done(ControllerUiLangClassId.MESSAGE_READ_POWER); - this._info_wait(ControllerUiLangClassId.MESSAGE_READ_SEC); - const sec_info:ZunoSapiClassSec = this.zuno.getSec(); - if (sec_info.status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_READ_SEC, sec_info.status); - return ; - } - this._info_done(ControllerUiLangClassId.MESSAGE_READ_SEC); - if (freq != null && freq != region_info.region) { - this._info_wait(ControllerUiLangClassId.MESSAGE_SET_REGION); - const set_region_status:ZunoSapiClassStatus = await this.zuno.setRegion(freq); - if (set_region_status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_SET_REGION, set_region_status); - return ; - } - this._info_done(ControllerUiLangClassId.MESSAGE_SET_REGION); - } - if (main_pow < power.min || main_pow > power.max) { - this._error("Radio power is out of range"); - return ; - } - if (power.power_raw != main_pow) { - this._info_wait(ControllerUiLangClassId.MESSAGE_SET_POWER); - const set_power_status:ZunoSapiClassStatus = await this.zuno.setPower(main_pow); - if (set_power_status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_SET_POWER, set_power_status); - return ; - } - this._info_done(ControllerUiLangClassId.MESSAGE_SET_POWER); - } - if (sec_info.sec != sec) { - this._info_wait(ControllerUiLangClassId.MESSAGE_SET_SEC); - const set_power_status:ZunoSapiClassStatus = await this.zuno.setSec(sec); - if (set_power_status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_SET_SEC, set_power_status); - return ; - } - this._info_done(ControllerUiLangClassId.MESSAGE_SET_SEC); - } - hw_str = board_info.hw_rev.toString(0x10); - while (hw_str.length < 0x4) - hw_str = '0' + hw_str; - const promise_compile: Promise = this._xhr_compile(hw_str, code); - this._info_wait("Checking Z-Uno version"); - const res_build_number:XhrOutBuildNumber = await this._xhr_build_number(hw_str); - if (res_build_number.res.status != XhrStatus.OK) { - this._error(res_build_number.res.error); - return ; - } - if (board_info.build_number > res_build_number.build_number) { - this._error("The firmware on the board is newer than on the server"); - return ; - } - this._info_done("Checking Z-Uno version"); - if (board_info.build_number != res_build_number.build_number) { - this._info_wait("Downloading new firmware"); - const res_download_finware:XhrOutBinary = await this._xhr_download_finware(hw_str, res_build_number.build_number); - if (res_download_finware.res.status != XhrStatus.OK) { - this._error(res_download_finware.res.error); - return ; - } - this._info_done("Downloading new firmware"); - this._info_wait("Uploading a new firmware to the Z-Uno"); - const status:ZunoSapiClassStatus = await this.zuno.updateFirmware(res_download_finware.bin, null, SapiClassDetectType.ZUNO); - if (status != ZunoSapiClassStatus.OK) { - this._error_code("Uploading a new firmware to the Z-Uno", status); - return ; - } - await this.zuno.connect(); - this._info_done("Uploading a new firmware to the Z-Uno"); - this._info_wait(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - board_info = this.zuno.getBoardInfo(); - if (board_info.status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); - return ; - } - this._info_done(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); - if (res_build_number.build_number != board_info.build_number) { - this._error("Although the firmware was successfully updated, the actual version was no longer needed"); - return ; - } - } - this._info_wait("Compiling the sketch"); - const res_compile:XhrOutBinary = await promise_compile; - if (res_compile.res.status != XhrStatus.OK) { - this.error_complite = true; - this._error(res_compile.res.error); - return ; - } - this._info_done("Compiling the sketch"); - this._info_wait("Uploading the sketch"); - const status_upload_scetch:ZunoSapiClassStatus = await this.zuno.updateSketch(res_compile.bin, null); - if (status_upload_scetch != ZunoSapiClassStatus.OK) { - this._error_code("Uploading the sketch", status_upload_scetch); - return ; - } - this._info_done("Uploading the sketch"); - this._info_wait("QR code read"); - await this._close(); - detect_dict = await this.sapi.detect([detect_dict.baudrate], null); - if (detect_dict.status != SapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); - return ; - } - if (this.sapi.type() != SapiClassDetectType.ZUNO) { - this._error(ControllerUiLangClassId.MESSAGE_CONNECT); - return ; - } - await this.zuno.connect(); - board_info = this.zuno.getBoardInfo(); - if (board_info.status != ZunoSapiClassStatus.OK) { - this._error_code(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); - return ; - } - await this._close(); - this._info_done("QR code read"); - const out:ZUnoCompilerLoadSketchOutProt = {smart_qr:board_info.smart_qr, dsk:conv2Decimal(board_info.s2_pub, " - ")}; - return (out); - } - - private _generateQrCode(id:HTMLElement|string, text:string): boolean { - let obj_QRCode:QRCode; - const option:QRCodeOption = { - text: text, - width: 256, - height: 256, - colorDark: "#000000", - colorLight: "#ffffff", - correctLevel: QRErrorCorrectLevel.L, - }; - - try { - obj_QRCode = new QRCode(id, option); - } catch(e) { - this._progress("error", "Failed to create \"object QRCode\", check parameters."); - return (false); - } - return (true); - } - - /** - * Draw the QR code of the board - * - * @param {*} id Id of the div tag that will host the QR-code image - * @param {*} qrContent Content of the QR-code to be printed - */ - public drawQR(id:HTMLElement|string, text:string): boolean { - return (this._generateQrCode(id, text)); - } - - public cancel(): void { - this._close(); - } - - public errorComplite(): boolean { - return this.error_complite; - } - - public getWait(): Promise { - return (this.promise_wait); - } - - /** - * - * @returns List freq - */ - public static getFreqList(): Array { - const region:SapiRegionClass = new SapiRegionClass(true, true); - return (region.getListRegion()); - } - - constructor(code:string, freq:string|null, sec:boolean, main_pow:number, cbk:ZUnoCompilerProgressCbkProt|null = null) { - this.progressCbk = cbk; - this.promise_wait = this._sketch(code, freq, sec, main_pow); - } -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 8cdd20f..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": - { - "target": "ES6", - "module": "CommonJS", - "lib": [ "ESNext", "DOM" ], - "outDir": "./out", - "strict": true, - "allowJs": true, - "sourceMap": true, - "esModuleInterop": true - }, - "include": ["src"], - "exclude": ["node_modules"] -} \ No newline at end of file diff --git a/webpack.common.js b/webpack.common.js deleted file mode 100644 index 65e9598..0000000 --- a/webpack.common.js +++ /dev/null @@ -1,109 +0,0 @@ -const package = require("./package.json") -const path = require('path'); -const webpack = require("webpack"); -const MiniCssExtractPlugin = require("mini-css-extract-plugin"); -const TerserPlugin = require("terser-webpack-plugin"); - -function version_str_to_int(version) { - let i, out; - const version_list = version.split("."); - i = version_list.length; - out = 0x0; - while (i != 0x0) { - out = out | (Number(version_list[i - 0x1]) << (0x8 * (version_list.length - i))); - i--; - } - return (out); -} - -function version_int_to_str(version, min) { - let out, i; - const list = []; - while (version != 0x0) { - list.unshift(version & 0xFF); - version = version >> 0x8; - } - while (list.length < min) { - list.unshift(0x0); - } - out = ""; - i = 0x0; - while (true) { - out = out + String(list[i]).padStart(2, '0'); - i++; - if (i < list.length) { - out = out + "."; - continue; - } - break; - } - return (out); -} - -const web_tools_version = version_int_to_str(version_str_to_int(package.version), 0x3); - -function func_common(env, argv, entry_patch, out_filename, library_name) { - const web_tools_beta = ((argv.mode == "development"))? true:false; - const tester_plugin_options = - { - terserOptions: { format: {comments: false,},}, - extractComments: false - }; - const tester_plugin = new TerserPlugin(tester_plugin_options); - const optimization = - { - minimize: true, - minimizer: [tester_plugin], - }; - const config = - { - plugins: [ - new MiniCssExtractPlugin(), - new webpack.DefinePlugin({ - __VERSION__: JSON.stringify(web_tools_version), - __BETA__: JSON.stringify(web_tools_beta), - }) - ], - entry: entry_patch, - module: - { - rules: - [ - { - test: /\.tsx?$/, - use: 'ts-loader', - exclude: /node_modules/, - }, - { - test: /\.html$/i, - loader: "html-loader", - }, - { - test: /\.scss$/i, - use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"], - }, - ], - }, - resolve: - { - extensions: ['.tsx', '.ts', '.js'], - }, - output: - { - clean: true, - filename: out_filename, - libraryTarget: 'umd', - library: library_name, - path: path.resolve(__dirname, 'build') - } - }; - if (argv.mode == "development") - config["devtool"] = 'source-map'; - else { - config["devtool"] = false; - config["optimization"] = optimization; - } - return (config); -}; -module.exports.common = func_common; -module.exports.web_tools_version = web_tools_version \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 9451602..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,29 +0,0 @@ -const HtmlWebpackPlugin = require('html-webpack-plugin') -const common = require("./webpack.common.js") - -const template_html = '\n' + -'\n' + -'\n' + -'\n'; - -module.exports = function(env, argv) { - let template_html_replace; - - if (argv.mode == "development") - template_html_replace = "-beta"; - else - template_html_replace = ""; - const config = common.common(env, argv, './src/controller_ui.ts', 'controller_ui.js', 'ControllerUiLib'); - config.plugins.push( - new HtmlWebpackPlugin({ - inject: false, - templateContent:template_html.replace(new RegExp("{{beta}}", 'g'), template_html_replace).replace(new RegExp("{{version}}", 'g'), common.web_tools_version), - filename: 'controller_ui.html', - }), - ); - return (config); -}; \ No newline at end of file diff --git a/webpack.z-uno-compiler.js b/webpack.z-uno-compiler.js deleted file mode 100644 index a409477..0000000 --- a/webpack.z-uno-compiler.js +++ /dev/null @@ -1,22 +0,0 @@ -const HtmlWebpackPlugin = require('html-webpack-plugin') -const common = require("./webpack.common.js") - -const template_html = '' - -module.exports = function(env, argv) { - let template_html_replace; - - if (argv.mode == "development") - template_html_replace = "-beta"; - else - template_html_replace = ""; - const config = common.common(env, argv, './src/z-uno-compiler.ts', 'z-uno-compiler.js', 'ZUnoCompiler'); - config.plugins.push( - new HtmlWebpackPlugin({ - inject: false, - templateContent:template_html.replace(new RegExp("{{beta}}", 'g'), template_html_replace).replace(new RegExp("{{version}}", 'g'), common.web_tools_version), - filename: 'z-uno-compiler.script', - }), - ); - return (config); -}; \ No newline at end of file diff --git a/z_uno_compiler/beta/z-uno-compiler.js b/z_uno_compiler/beta/z-uno-compiler.js new file mode 100644 index 0000000..b49e92d --- /dev/null +++ b/z_uno_compiler/beta/z-uno-compiler.js @@ -0,0 +1,3872 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["ZUnoCompiler"] = factory(); + else + root["ZUnoCompiler"] = factory(); +})(self, () => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/hardware/chip.ts": +/*!******************************!*\ + !*** ./src/hardware/chip.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HardwareChipClass = void 0; +class HardwareChipClass { + constructor() { + } +} +exports.HardwareChipClass = HardwareChipClass; +HardwareChipClass.FAMILY_ZGM13 = 0x00; +HardwareChipClass.CHIP_ZGM130S037HGN = 0x01; +HardwareChipClass.CHIP_ZGM130S037HGN1 = 0x02; +HardwareChipClass.FAMILY_EFR32MG21 = 0x01; +HardwareChipClass.CHIP_EFR32MG21A010F1024IM32 = 0x01; +HardwareChipClass.CHIP_EFR32MG21A010F512IM32 = 0x02; +HardwareChipClass.CHIP_EFR32MG21A010F768IM32 = 0x03; +HardwareChipClass.CHIP_EFR32MG21A020F1024IM32 = 0x04; +HardwareChipClass.CHIP_EFR32MG21A020F512IM32 = 0x05; +HardwareChipClass.CHIP_EFR32MG21A020F768IM32 = 0x06; +HardwareChipClass.CHIP_EFR32MG21B010F1024IM32 = 0x07; +HardwareChipClass.CHIP_EFR32MG21B010F512IM32 = 0x08; +HardwareChipClass.CHIP_EFR32MG21B010F768IM32 = 0x09; +HardwareChipClass.CHIP_EFR32MG21B020F1024IM32 = 0x0A; +HardwareChipClass.CHIP_EFR32MG21B020F512IM32 = 0x0B; +HardwareChipClass.CHIP_EFR32MG21B020F768IM32 = 0x0C; +HardwareChipClass.FAMILY_ZGM23 = 0x02; +HardwareChipClass.CHIP_ZGM230SA27HGN = 0x01; +HardwareChipClass.CHIP_ZGM230SA27HNN = 0x02; +HardwareChipClass.CHIP_ZGM230SB27HGN = 0x03; +HardwareChipClass.CHIP_ZGM230SB27HNN = 0x04; +HardwareChipClass.FAMILY_MGM21 = 0x03; +HardwareChipClass.CHIP_MGM210L022JIF = 0x01; +HardwareChipClass.CHIP_MGM210L022JNF = 0x02; +HardwareChipClass.CHIP_MGM210LA22JIF = 0x03; +HardwareChipClass.CHIP_MGM210LA22JNF = 0x04; +HardwareChipClass.CHIP_MGM210P022JIA = 0x05; +HardwareChipClass.CHIP_MGM210P032JIA = 0x06; +HardwareChipClass.CHIP_MGM210PA22JIA = 0x07; +HardwareChipClass.CHIP_MGM210PA32JIA = 0x08; +HardwareChipClass.CHIP_MGM210PB22JIA = 0x09; +HardwareChipClass.CHIP_MGM210PB32JIA = 0x0A; +HardwareChipClass.CHIP_MGM211LA02JNF = 0x0B; +HardwareChipClass.FAMILY_EFR32ZG23 = 0x04; +HardwareChipClass.CHIP_EFR32ZG23A010F512GM40 = 0x01; +HardwareChipClass.CHIP_EFR32ZG23A010F512GM48 = 0x02; +HardwareChipClass.CHIP_EFR32ZG23A020F512GM40 = 0x03; +HardwareChipClass.CHIP_EFR32ZG23A020F512GM48 = 0x04; +HardwareChipClass.CHIP_EFR32ZG23B010F512IM40 = 0x05; +HardwareChipClass.CHIP_EFR32ZG23B010F512IM48 = 0x06; +HardwareChipClass.CHIP_EFR32ZG23B011F512IM40 = 0x07; +HardwareChipClass.CHIP_EFR32ZG23B020F512IM40 = 0x08; +HardwareChipClass.CHIP_EFR32ZG23B020F512IM48 = 0x09; +HardwareChipClass.CHIP_EFR32ZG23B021F512IM40 = 0x0A; +HardwareChipClass.FAMILY_EFR32MG24 = 0x05; +HardwareChipClass.CHIP_EFR32MG24A010F1024IM40 = 0x01; +HardwareChipClass.CHIP_EFR32MG24A010F1024IM48 = 0x02; +HardwareChipClass.CHIP_EFR32MG24A010F1536GM40 = 0x03; +HardwareChipClass.CHIP_EFR32MG24A010F1536GM48 = 0x04; +HardwareChipClass.CHIP_EFR32MG24A010F1536IM40 = 0x05; +HardwareChipClass.CHIP_EFR32MG24A010F1536IM48 = 0x06; +HardwareChipClass.CHIP_EFR32MG24A010F768IM40 = 0x07; +HardwareChipClass.CHIP_EFR32MG24A010F768IM48 = 0x08; +HardwareChipClass.CHIP_EFR32MG24A020F1024IM40 = 0x09; +HardwareChipClass.CHIP_EFR32MG24A020F1024IM48 = 0x0A; +HardwareChipClass.CHIP_EFR32MG24A020F1536GM40 = 0x0B; +HardwareChipClass.CHIP_EFR32MG24A020F1536GM48 = 0x0C; +HardwareChipClass.CHIP_EFR32MG24A020F1536IM40 = 0x0D; +HardwareChipClass.CHIP_EFR32MG24A020F1536IM48 = 0x0E; +HardwareChipClass.CHIP_EFR32MG24A020F768IM40 = 0x0F; +HardwareChipClass.CHIP_EFR32MG24A021F1024IM40 = 0x10; +HardwareChipClass.CHIP_EFR32MG24A110F1024IM48 = 0x11; +HardwareChipClass.CHIP_EFR32MG24A110F1536GM48 = 0x12; +HardwareChipClass.CHIP_EFR32MG24A111F1536GM48 = 0x13; +HardwareChipClass.CHIP_EFR32MG24A120F1536GM48 = 0x14; +HardwareChipClass.CHIP_EFR32MG24A121F1536GM48 = 0x15; +HardwareChipClass.CHIP_EFR32MG24A410F1536IM40 = 0x16; +HardwareChipClass.CHIP_EFR32MG24A410F1536IM48 = 0x17; +HardwareChipClass.CHIP_EFR32MG24A420F1536IM40 = 0x18; +HardwareChipClass.CHIP_EFR32MG24A420F1536IM48 = 0x19; +HardwareChipClass.CHIP_EFR32MG24A610F1536IM40 = 0x1A; +HardwareChipClass.CHIP_EFR32MG24A620F1536IM40 = 0x1B; +HardwareChipClass.CHIP_EFR32MG24B010F1024IM48 = 0x1C; +HardwareChipClass.CHIP_EFR32MG24B010F1536IM40 = 0x1D; +HardwareChipClass.CHIP_EFR32MG24B010F1536IM48 = 0x1E; +HardwareChipClass.CHIP_EFR32MG24B020F1024IM48 = 0x1F; +HardwareChipClass.CHIP_EFR32MG24B020F1536IM40 = 0x20; +HardwareChipClass.CHIP_EFR32MG24B020F1536IM48 = 0x21; +HardwareChipClass.CHIP_EFR32MG24B110F1536GM48 = 0x22; +HardwareChipClass.CHIP_EFR32MG24B110F1536IM48 = 0x23; +HardwareChipClass.CHIP_EFR32MG24B120F1536IM48 = 0x24; +HardwareChipClass.CHIP_EFR32MG24B210F1536IM40 = 0x25; +HardwareChipClass.CHIP_EFR32MG24B210F1536IM48 = 0x26; +HardwareChipClass.CHIP_EFR32MG24B220F1536IM48 = 0x27; +HardwareChipClass.CHIP_EFR32MG24B310F1536IM48 = 0x28; +HardwareChipClass.CHIP_EFR32MG24B610F1536IM40 = 0x29; + + +/***/ }), + +/***/ "./src/lang/ui_lang.ts": +/*!*****************************!*\ + !*** ./src/lang/ui_lang.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiLangClass = void 0; +const ui_lang_en_1 = __webpack_require__(/*! ./ui_lang_en */ "./src/lang/ui_lang_en.ts"); +class ControllerUiLangClass { + getLocale(id) { + if (this.locale[id] != undefined) + return (this.locale[id]); + return (""); + } + constructor() { + this.locale = ui_lang_en_1.controller_lang_en; + } +} +exports.ControllerUiLangClass = ControllerUiLangClass; + + +/***/ }), + +/***/ "./src/lang/ui_lang_define.ts": +/*!************************************!*\ + !*** ./src/lang/ui_lang_define.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ControllerUiLangClassId = void 0; +var ControllerUiLangClassId; +(function (ControllerUiLangClassId) { + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PORT_NOT_SELECT"] = 0] = "MESSAGE_PORT_NOT_SELECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_NOT_SUPPORT_BROWSER"] = 1] = "MESSAGE_NOT_SUPPORT_BROWSER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PORT_USE"] = 2] = "MESSAGE_PORT_USE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_CONNECT"] = 3] = "MESSAGE_CONNECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_DETECTION"] = 4] = "MESSAGE_DETECTION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_CAPABILITIES"] = 5] = "MESSAGE_READ_CAPABILITIES"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_REGION"] = 6] = "MESSAGE_READ_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_SEC"] = 7] = "MESSAGE_READ_SEC"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_POWER"] = 8] = "MESSAGE_READ_POWER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_LICENSE"] = 9] = "MESSAGE_READ_LICENSE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_LICENSE"] = 10] = "MESSAGE_SET_LICENSE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_BOARD_INFO"] = 11] = "MESSAGE_READ_BOARD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_REGION"] = 12] = "MESSAGE_SET_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_POWER"] = 13] = "MESSAGE_SET_POWER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_SEC"] = 14] = "MESSAGE_SET_SEC"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_DEFAULT"] = 15] = "MESSAGE_SET_DEFAULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PLEASE_WAIT"] = 16] = "MESSAGE_PLEASE_WAIT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_DOWNLOAD_INFO"] = 17] = "MESSAGE_UPDATE_DOWNLOAD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_DOWNLOAD_FILE"] = 18] = "MESSAGE_UPDATE_DOWNLOAD_FILE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_START_FIRMWARE"] = 19] = "MESSAGE_UPDATE_START_FIRMWARE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_UPDATE_START_BOOTLOADER"] = 20] = "MESSAGE_UPDATE_START_BOOTLOADER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_SERIAL_API_VERSION"] = 21] = "TABLE_NAME_SERIAL_API_VERSION"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_SERIAL_API_VERSION_TITLE"] = 22] = "TABLE_NAME_SERIAL_API_VERSION_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR"] = 23] = "TABLE_NAME_VENDOR"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR_TITLE"] = 24] = "TABLE_NAME_VENDOR_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR_ID"] = 25] = "TABLE_NAME_VENDOR_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VENDOR_ID_TITLE"] = 26] = "TABLE_NAME_VENDOR_ID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION"] = 27] = "TABLE_NAME_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_TITLE"] = 28] = "TABLE_NAME_REGION_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_SELECT_TITLE"] = 29] = "TABLE_NAME_REGION_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_BUTTON"] = 30] = "TABLE_NAME_REGION_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_REGION_BUTTON_TITLE"] = 31] = "TABLE_NAME_REGION_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT"] = 32] = "TABLE_NAME_RESET_DEFAULT"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT_TITLE"] = 33] = "TABLE_NAME_RESET_DEFAULT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT_BUTTON"] = 34] = "TABLE_NAME_RESET_DEFAULT_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE"] = 35] = "TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER"] = 36] = "TABLE_NAME_POWER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_TITLE"] = 37] = "TABLE_NAME_POWER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_SELECT_TITLE"] = 38] = "TABLE_NAME_POWER_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_BUTTON"] = 39] = "TABLE_NAME_POWER_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_POWER_BUTTON_TITLE"] = 40] = "TABLE_NAME_POWER_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_BUTTON"] = 41] = "TABLE_NAME_UPDATE_FIRMWARE_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE"] = 42] = "TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_BUTTON"] = 43] = "TABLE_NAME_UPDATE_BOOTLOADER_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE"] = 44] = "TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_UUID"] = 45] = "TABLE_NAME_LICENSE_UUID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_UUID_TITLE"] = 46] = "TABLE_NAME_LICENSE_UUID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MORE_OPTIONS"] = 47] = "TABLE_NAME_LICENSE_MORE_OPTIONS"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE"] = 48] = "TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUBVENDOR_ID"] = 49] = "TABLE_NAME_LICENSE_SUBVENDOR_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE"] = 50] = "TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MAX_NODE"] = 51] = "TABLE_NAME_LICENSE_MAX_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_MAX_NODE_TITLE"] = 52] = "TABLE_NAME_LICENSE_MAX_NODE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUPPORT"] = 53] = "TABLE_NAME_LICENSE_SUPPORT"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_LICENSE_SUPPORT_TITLE"] = 54] = "TABLE_NAME_LICENSE_SUPPORT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BETA"] = 55] = "TABLE_NAME_UPDATE_BETA"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BETA_SELECT_TITLE"] = 56] = "TABLE_NAME_UPDATE_BETA_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BETA_TITLE"] = 57] = "TABLE_NAME_UPDATE_BETA_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE"] = 58] = "TABLE_NAME_UPDATE_FIRMWARE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_TITLE"] = 59] = "TABLE_NAME_UPDATE_FIRMWARE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE"] = 60] = "TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE"] = 61] = "TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER"] = 62] = "TABLE_NAME_UPDATE_BOOTLOADER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_TITLE"] = 63] = "TABLE_NAME_UPDATE_BOOTLOADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE"] = 64] = "TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_DOWNLOAD_INFO"] = 65] = "TABLE_NAME_UPDATE_DOWNLOAD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_DOWNLOAD_FILE"] = 66] = "TABLE_NAME_UPDATE_DOWNLOAD_FILE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_WAIT_BUS_SERIAL"] = 67] = "TABLE_NAME_UPDATE_WAIT_BUS_SERIAL"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UPDATE_WAIT_UPDATE"] = 68] = "TABLE_NAME_UPDATE_WAIT_UPDATE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DETECTION_SYNC_MANUAL"] = 69] = "TABLE_NAME_DETECTION_SYNC_MANUAL"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE"] = 70] = "TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE"] = 71] = "TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_HEADER"] = 72] = "LOG_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_DONE"] = 73] = "LOG_DONE"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_FAILED"] = 74] = "LOG_FAILED"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_FAILED_CODE"] = 75] = "LOG_FAILED_CODE"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_UNSUPPORTED"] = 76] = "LOG_UNSUPPORTED"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_NOT_FIND_ELEMENT"] = 77] = "LOG_NOT_FIND_ELEMENT"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_XHR_TIMEOUT"] = 78] = "LOG_XHR_TIMEOUT"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_XHR_ERROR"] = 79] = "LOG_XHR_ERROR"; + ControllerUiLangClassId[ControllerUiLangClassId["LOG_XHR_INVALID_DATA"] = 80] = "LOG_XHR_INVALID_DATA"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_TEXT"] = 81] = "BUTTON_COPY_TEXT"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_TITLE"] = 82] = "BUTTON_COPY_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_CLOSE_TEXT"] = 83] = "BUTTON_CLOSE_TEXT"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_CLOSE_TITLE"] = 84] = "BUTTON_CLOSE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_DSK"] = 85] = "BUTTON_COPY_DSK"; + ControllerUiLangClassId[ControllerUiLangClassId["BUTTON_COPY_DSK_TITLE"] = 86] = "BUTTON_COPY_DSK_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["BOARD_INFO_HEADER"] = 87] = "BOARD_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["LICENSE_INFO_HEADER"] = 88] = "LICENSE_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["UPDATE_INFO_HEADER"] = 89] = "UPDATE_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["DEFAULT_RESET_WARNING"] = 90] = "DEFAULT_RESET_WARNING"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_INFO_HEADER"] = 91] = "MIGRATION_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER"] = 92] = "MIGRATION_ABOUT_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TITLE"] = 93] = "MIGRATION_ABOUT_HEADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TEXT_HTML"] = 94] = "MIGRATION_ABOUT_HEADER_TEXT_HTML"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5"] = 95] = "MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT"] = 96] = "MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_HEADER"] = 97] = "MIGRATION_PROCESS_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_HEADER_TITLE"] = 98] = "MIGRATION_PROCESS_HEADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_BUTTON_START"] = 99] = "MIGRATION_PROCESS_BUTTON_START"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_BUTTON_START_TITLE"] = 100] = "MIGRATION_PROCESS_BUTTON_START_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_BUTTON_START_WARNING"] = 101] = "MIGRATION_PROCESS_BUTTON_START_WARNING"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_TEST_INCLUDE"] = 102] = "MIGRATION_TEST_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_HOME_ID"] = 103] = "MESSAGE_READ_HOME_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_UNKNOWN_ERROR"] = 104] = "MIGRATION_UNKNOWN_ERROR"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_GOOD_RESULT"] = 105] = "MIGRATION_GOOD_RESULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_STOP"] = 106] = "MIGRATION_ACTION_STOP"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_CONTINUE"] = 107] = "MIGRATION_ACTION_CONTINUE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_STOP_TITLE"] = 108] = "MIGRATION_ACTION_STOP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_ACTION_CONTINUE_TITLE"] = 109] = "MIGRATION_ACTION_CONTINUE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUESTION_EXCLUDE"] = 110] = "MIGRATION_QUESTION_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_STOP_RESULT"] = 111] = "MIGRATION_STOP_RESULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_INIT_DATA"] = 112] = "MESSAGE_READ_INIT_DATA"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_EXCLUDING"] = 113] = "MESSAGE_START_EXCLUDING"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_WIDE_EXCLUDING"] = 114] = "MESSAGE_START_WIDE_EXCLUDING"; + ControllerUiLangClassId[ControllerUiLangClassId["SECONDS"] = 115] = "SECONDS"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_WAIT_EXCLUDE_START_MASTER"] = 116] = "MIGRATION_WAIT_EXCLUDE_START_MASTER"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_CLEAR_NODE"] = 117] = "MESSAGE_CLEAR_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_INCLUDE"] = 118] = "MESSAGE_START_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_WIDE_INCLUDE"] = 119] = "MESSAGE_START_WIDE_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUESTION_INCLUDE"] = 120] = "MIGRATION_QUESTION_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_WAIT_INCLUDE_START_MASTER"] = 121] = "MIGRATION_WAIT_INCLUDE_START_MASTER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FINALIZE"] = 122] = "MIGRATION_FINALIZE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_DETECTION"] = 123] = "MIGRATION_DETECTION"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SET_HOME_ID"] = 124] = "MESSAGE_SET_HOME_ID"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_REMOVE_NODE"] = 125] = "MESSAGE_REMOVE_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_SOFT_RESET"] = 126] = "MESSAGE_SOFT_RESET"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_NOP"] = 127] = "MESSAGE_NOP"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_PORT_SELECT"] = 128] = "MESSAGE_PORT_SELECT"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_INFO_HEADER"] = 129] = "DETECTION_INFO_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_HEADER"] = 130] = "DETECTION_PROCESS_HEADER"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_HEADER_TITLE"] = 131] = "DETECTION_PROCESS_HEADER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS"] = 132] = "DETECTION_PROCESS"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_STOP"] = 133] = "DETECTION_PROCESS_STOP"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_CONTINUE"] = 134] = "DETECTION_PROCESS_CONTINUE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_STOP_TITLE"] = 135] = "DETECTION_PROCESS_STOP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_CONTINUE_TITLE"] = 136] = "DETECTION_PROCESS_CONTINUE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_QUEST_SYNC"] = 137] = "DETECTION_PROCESS_QUEST_SYNC"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_BUTTON_RE_SYNC"] = 138] = "DETECTION_PROCESS_BUTTON_RE_SYNC"; + ControllerUiLangClassId[ControllerUiLangClassId["DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE"] = 139] = "DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["SLAVE_MESSAGE_READ_BOARD_INFO"] = 140] = "SLAVE_MESSAGE_READ_BOARD_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VERSION"] = 141] = "TABLE_NAME_VERSION"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_VERSION_TITLE"] = 142] = "TABLE_NAME_VERSION_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_BUILD_TIME_STAMP"] = 143] = "TABLE_NAME_BUILD_TIME_STAMP"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_BUILD_TIME_STAMP_TITLE"] = 144] = "TABLE_NAME_BUILD_TIME_STAMP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UUID"] = 145] = "TABLE_NAME_UUID"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_UUID_TITLE"] = 146] = "TABLE_NAME_UUID_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_HOME"] = 147] = "TABLE_NAME_HOME"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_HOME_TITLE"] = 148] = "TABLE_NAME_HOME_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_NODE"] = 149] = "TABLE_NAME_NODE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_NODE_TITLE"] = 150] = "TABLE_NAME_NODE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DSK"] = 151] = "TABLE_NAME_DSK"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_DSK_TITLE"] = 152] = "TABLE_NAME_DSK_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_QR_CODE"] = 153] = "TABLE_NAME_QR_CODE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_QR_CODE_TITLE"] = 154] = "TABLE_NAME_QR_CODE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["SLAVE_MESSAGE_FREEZE_ERROR"] = 155] = "SLAVE_MESSAGE_FREEZE_ERROR"; + ControllerUiLangClassId[ControllerUiLangClassId["SLAVE_DEFAULT_RESET_WARNING"] = 156] = "SLAVE_DEFAULT_RESET_WARNING"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE"] = 157] = "TABLE_NAME_TYPE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE_TITLE"] = 158] = "TABLE_NAME_TYPE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE_CONTROLER"] = 159] = "TABLE_NAME_TYPE_CONTROLER"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_TYPE_SLAVE"] = 160] = "TABLE_NAME_TYPE_SLAVE"; + ControllerUiLangClassId[ControllerUiLangClassId["ERROR_ARGUMENT_FOR_UPDATE_SELECT"] = 161] = "ERROR_ARGUMENT_FOR_UPDATE_SELECT"; + ControllerUiLangClassId[ControllerUiLangClassId["ERROR_ARGUMENT_FIND_TYPE"] = 162] = "ERROR_ARGUMENT_FIND_TYPE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE"] = 163] = "TABLE_NAME_INCLUDE_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE_TITLE"] = 164] = "TABLE_NAME_INCLUDE_EXCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE_BUTTON"] = 165] = "TABLE_NAME_INCLUDE_EXCLUDE_BUTTON"; + ControllerUiLangClassId[ControllerUiLangClassId["TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE"] = 166] = "TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["INCLUDE_EXCLUDE_WAIT"] = 167] = "INCLUDE_EXCLUDE_WAIT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_ENABLE_NIF_DEFAULT"] = 168] = "MESSAGE_ENABLE_NIF_DEFAULT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_ENABLE_EVENT_FOR_LEARN"] = 169] = "MESSAGE_ENABLE_EVENT_FOR_LEARN"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_START_LEARN"] = 170] = "MESSAGE_START_LEARN"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_TIMEOUT"] = 171] = "MESSAGE_LEARN_INFO_TIMEOUT"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART"] = 172] = "MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_INCLUDE_RESTART"] = 173] = "MESSAGE_LEARN_INFO_INCLUDE_RESTART"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_LEARN_INFO_EXCLUDE_RESTART"] = 174] = "MESSAGE_LEARN_INFO_EXCLUDE_RESTART"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_CONTINUE"] = 175] = "PROCESS_CONTINUE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_CONTINUE_TITLE"] = 176] = "PROCESS_CONTINUE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_STOP"] = 177] = "PROCESS_STOP"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_STOP_TITLE"] = 178] = "PROCESS_STOP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_REPEAT"] = 179] = "PROCESS_REPEAT"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_REPEAT_TITLE"] = 180] = "PROCESS_REPEAT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_ABORT"] = 181] = "PROCESS_ABORT"; + ControllerUiLangClassId[ControllerUiLangClassId["PROCESS_ABORT_TITLE"] = 182] = "PROCESS_ABORT_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE"] = 183] = "LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE"] = 184] = "LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_GET_URL_INFO"] = 185] = "MIGRATION_NOT_GET_URL_INFO"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_UPDATE"] = 186] = "MIGRATION_NOT_UPDATE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LAST_UPDATE_DETECT"] = 187] = "MIGRATION_LAST_UPDATE_DETECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_UPDATE_TYPE"] = 188] = "MIGRATION_FAILED_UPDATE_TYPE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_UPDATE_VERSION"] = 189] = "MIGRATION_FAILED_UPDATE_VERSION"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_CHANGE_REGION"] = 190] = "MIGRATION_FAILED_CHANGE_REGION"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE"] = 191] = "MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE"] = 192] = "LEARN_PROCESS_QUEST_EXCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["LEARN_PROCESS_QUEST_EXCLUDE_TITLE"] = 193] = "LEARN_PROCESS_QUEST_EXCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE"] = 194] = "MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_DETECT"] = 195] = "MIGRATION_FAILED_DETECT"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_QUEST_INCLUDE"] = 196] = "MIGRATION_PROCESS_QUEST_INCLUDE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_PROCESS_QUEST_INCLUDE_TITLE"] = 197] = "MIGRATION_PROCESS_QUEST_INCLUDE_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_DUMP_KEY"] = 198] = "MIGRATION_NOT_SUPPORT_DUMP_KEY"; + ControllerUiLangClassId[ControllerUiLangClassId["MESSAGE_READ_S2_KEY"] = 199] = "MESSAGE_READ_S2_KEY"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_AVIABLE_FIRMWARE"] = 200] = "MIGRATION_NOT_AVIABLE_FIRMWARE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_LR"] = 201] = "MIGRATION_NOT_SUPPORT_LR"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_NOT_SUPPORT_BACKUP"] = 202] = "MIGRATION_NOT_SUPPORT_BACKUP"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_SEE_LOG"] = 203] = "MIGRATION_FAILED_SEE_LOG"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER"] = 204] = "MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE"] = 205] = "MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_SUCESS"] = 206] = "MIGRATION_SUCESS"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_REPEATER_ALL_KEY"] = 207] = "MIGRATION_QUEST_REPEATER_ALL_KEY"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE"] = 208] = "MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_ABORT_STEP"] = 209] = "MIGRATION_QUEST_ABORT_STEP"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_QUEST_ABORT_STEP_TITLE"] = 210] = "MIGRATION_QUEST_ABORT_STEP_TITLE"; + ControllerUiLangClassId[ControllerUiLangClassId["MIGRATION_FAILED_REPEAR_TYPE"] = 211] = "MIGRATION_FAILED_REPEAR_TYPE"; +})(ControllerUiLangClassId || (exports.ControllerUiLangClassId = ControllerUiLangClassId = {})); + + +/***/ }), + +/***/ "./src/lang/ui_lang_en.ts": +/*!********************************!*\ + !*** ./src/lang/ui_lang_en.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.controller_lang_en = void 0; +const ui_lang_define_1 = __webpack_require__(/*! ./ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const controller_lang_en = { + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_NOT_SELECT]: "No port selected", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER]: "Sorry, this feature is supported only on Chrome, Edge and Opera", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_USE]: "Check yours, maybe another application is using it", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT]: "Connect device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION]: "Detection device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES]: "Read capabilities the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION]: "Read region the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_SEC]: "Read securite the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER]: "Read power the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_LICENSE]: "Read license the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_LICENSE]: "Set license the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO]: "Read board info the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION]: "Set region the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER]: "Set power the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_SEC]: "Set securite the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_DEFAULT]: "Set default the device", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PLEASE_WAIT]: "Please wait until the previous operation is completed.", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO]: "Download update info", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE]: "Download update file", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE]: "Start firmware update", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER]: "Start bootloader update", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION]: "Serial API Version:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE]: "It is specific to Z-Wave.Me", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR]: "Vendor:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID]: "Vendor ID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION]: "Region:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_TITLE]: "Z-Wave frequency", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE]: "Select region", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON]: "Apply", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE]: "Apply the selected region", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT]: "Reset default:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE]: "Reset to factory default settings", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON]: "Reset", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER]: "TX power level:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE]: "Select the TX power level", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON]: "Apply", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE]: "Apply the selected TX power", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON]: "Update", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON]: "Update", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID]: "UUID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE]: "Unique ID of your Z-Wave hardware", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS]: "More options:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE]: "Additional features available for your hardware", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID]: "Subvendor:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE]: "Nodes limit:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT]: "Support:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA]: 'Beta:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE]: 'Firmware:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE]: "Not updated", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER]: 'Bootloader:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO]: "Download info...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE]: "Download file...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL]: "Wait bus serial...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE]: "Wait update...", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL]: 'Sync manual:', + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.LOG_HEADER]: "Log", + [ui_lang_define_1.ControllerUiLangClassId.LOG_DONE]: " done", + [ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED]: " failed", + [ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED_CODE]: " failed: {{code}}", + [ui_lang_define_1.ControllerUiLangClassId.LOG_UNSUPPORTED]: " unsupported", + [ui_lang_define_1.ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT]: "Not find element: {{element}}", + [ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_TIMEOUT]: "
Internet request - timeout {{url}}
", + [ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_ERROR]: "
Internet request - error {{url}}
", + [ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_INVALID_DATA]: "
Internet request - invalid data {{url}}
", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_TEXT]: "Copy log", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_TITLE]: "Copy the log to clipboard", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_CLOSE_TEXT]: "Close", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_CLOSE_TITLE]: "Closes and stops working with the port", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_DSK]: "Copy", + [ui_lang_define_1.ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE]: "Copy the dsk to clipboard", + [ui_lang_define_1.ControllerUiLangClassId.BOARD_INFO_HEADER]: "Board Info", + [ui_lang_define_1.ControllerUiLangClassId.LICENSE_INFO_HEADER]: "License Info", + [ui_lang_define_1.ControllerUiLangClassId.UPDATE_INFO_HEADER]: "Update Info", + [ui_lang_define_1.ControllerUiLangClassId.DEFAULT_RESET_WARNING]: "The Controller Reset will delete all included devices from your network without excluding them. You will need to manually exclude and include all of them. Do you really want to do this?", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_INFO_HEADER]: "Migration Info", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER]: "About", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML]: "
Porting from your old controllerto your new Z-Wave.Me hardware
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5]: "
You have an old stickneed a newer one
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT]: "
Your stick is not supportedmigration works only to Z-Wave.Me hardware
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER]: "Migration:", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START]: "Start", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING]: "Are you sure you want to start the migration process? - During this process, all data will be lost.\nAlso make sure there are no power issues to avoid problems.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_TEST_INCLUDE]: "Checking whether it is on...", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_HOME_ID]: "Read home and node id the controller", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_UNKNOWN_ERROR]: "An unexpected error occurred, please try again.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_GOOD_RESULT]: "Migration was successful.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_STOP]: "Stop", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE]: "Continue", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_STOP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE]: "You need to excluding first - click when you're ready", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_STOP_RESULT]: "Migration was stoping.", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_INIT_DATA]: "Read init data the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_EXCLUDING]: "Start excluding controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING]: "Start wide excluding controller", + [ui_lang_define_1.ControllerUiLangClassId.SECONDS]: "s", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER]: "We are waiting for you to begin the elimination process.", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CLEAR_NODE]: "Start clear node the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_INCLUDE]: "Start include controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE]: "Start wide include controller", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE]: "You need to turn on the controller", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER]: "We are waiting for you to begin the inclusion process.", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FINALIZE]: "Finishing...", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_DETECTION]: "Detection...", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_HOME_ID]: "Set home and node id the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_REMOVE_NODE]: "Remove node the controller", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SOFT_RESET]: "Soft reset", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOP]: "Send nop", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT]: "Port selection", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_INFO_HEADER]: "Detection", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_HEADER]: "Sync:", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS]: "Sync...", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_STOP]: "Stop", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE]: "Continue", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC]: "Reset your hardware and try again", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC]: "Try to sync again", + [ui_lang_define_1.ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO]: "Read hardware information", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VERSION]: "Version:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP]: "Build date and time:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UUID]: "UUID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_UUID_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_HOME]: "Home ID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_HOME_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_NODE]: "Node ID:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_NODE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DSK]: "DSK:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_DSK_TITLE]: "Key used to securely include your device", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_QR_CODE]: "QR-code:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE]: "QR-code used to securely include your device", + [ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR]: "Failed to pause slave", + [ui_lang_define_1.ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING]: "Do you really want to do this?", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE]: "Type:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER]: "Controller", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE]: "Z-Uno / repeater", + [ui_lang_define_1.ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT]: "error arg for update select", + [ui_lang_define_1.ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE]: "error arg find type", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE]: "Include/Exclude:", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON]: "Start", + [ui_lang_define_1.ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT]: "Wait...", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT]: "Enable default NIF", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN]: "Enable event for learn mode", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_START_LEARN]: "Start learn mode", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT]: "Learn timout", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART]: "Learn timeout. Reloading", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART]: "Included. Reloading", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART]: "Excluded. Reloading", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE]: "Continue", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_CONTINUE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_STOP]: "Stop", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_STOP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT]: "Repeat", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_REPEAT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_ABORT]: "Abort", + [ui_lang_define_1.ControllerUiLangClassId.PROCESS_ABORT_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE]: "Ready for inclusion/exclusion by you controller", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO]: "Could not get a link to the information needed for migration", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_UPDATE]: "Failed to update", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LAST_UPDATE_DETECT]: "After the update, the firmware could not be detected", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE]: "The type of the updated firmware does not match", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION]: "After the update the version is not what it should be", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_CHANGE_REGION]: "Failed to change frequency", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE]: "No support for exclusion/inclusion", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE]: "Turn on exclusion mode on you controller", + [ui_lang_define_1.ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE]: "Learn completed", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_DETECT]: "Сould not be detected", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE]: "
Turn on inclusion mode on you controller
When inclusion starts, you have to select all the supported security keys and use the following security code:
${dsk}
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY]: "No support for dump key", + [ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_S2_KEY]: "Reading S2 keys", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE]: "The required firmware is not in the database", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR]: "Long Range is not supported", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP]: "Backup is not supported", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_SEE_LOG]: "Failed - see log", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER]: "
The inclusion happeded without the required keys.
Please turn on exclusion mode on you controller
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_SUCESS]: "Success", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY]: "
These are all the keys that we were able to read, is everything correct or will you try again?
", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP]: "An error occurred, would you like to try this step again or abort?", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE]: "", + [ui_lang_define_1.ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE]: "The type of the firmware does not match", +}; +exports.controller_lang_en = controller_lang_en; + + +/***/ }), + +/***/ "./src/other/define.ts": +/*!*****************************!*\ + !*** ./src/other/define.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.WEB_TOOLS_BETA = exports.WEB_TOOLS_VERSION = void 0; +const WEB_TOOLS_VERSION = "00.00.23"; +exports.WEB_TOOLS_VERSION = WEB_TOOLS_VERSION; +const WEB_TOOLS_BETA = true; +exports.WEB_TOOLS_BETA = WEB_TOOLS_BETA; + + +/***/ }), + +/***/ "./src/other/utilities.ts": +/*!********************************!*\ + !*** ./src/other/utilities.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.sleep = sleep; +exports.checksum = checksum; +exports.calcSigmaCRC16 = calcSigmaCRC16; +exports.costruct_int = costruct_int; +exports.hexToBytes = hexToBytes; +exports.arrayToStringHex = arrayToStringHex; +exports.versionNumberToString = versionNumberToString; +exports.intToBytearrayLsbMsb = intToBytearrayLsbMsb; +exports.intToBytearrayMsbLsb = intToBytearrayMsbLsb; +exports.versionNumberToStringSlave = versionNumberToStringSlave; +exports.numberToStringHex = numberToStringHex; +exports.conv2Decimal = conv2Decimal; +exports.toString = toString; +exports.conv2DecimalPadding = conv2DecimalPadding; +exports.version_str_to_int = version_str_to_int; +exports.version_int_to_str = version_int_to_str; +exports.splitHexBuff = splitHexBuff; +function toString(array) { + let result; + result = ""; + for (let i = 0; i < array.length; i++) { + result += String.fromCharCode(array[i]); + } + return result; +} +function numberToStringHex(num) { + return (((num >> 24) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 16) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 8) & 0xFF).toString(0x10).padStart(2, '0') + ((num) & 0xFF).toString(0x10).padStart(2, '0')); +} +function versionNumberToString(version) { + const txt = String((version >> 24) & 0xFF).padStart(2, '0') + "." + String((version >> 16) & 0xFF).padStart(2, '0') + "." + String((version >> 0x8) & 0xFF).padStart(2, '0') + "." + String((version) & 0xFF).padStart(2, '0'); + return (txt); +} +function versionNumberToStringSlave(version) { + const txt = String((version >> 24) & 0xFF).padStart(2, '0') + "." + String((version >> 16) & 0xFF).padStart(2, '0') + "." + String((version) & 0xFFFF); + return (txt); +} +function arrayToStringHex(data) { + let str_hex, i; + str_hex = ""; + i = 0x0; + while (i < data.length) { + str_hex = str_hex + data[i].toString(0x10).padStart(2, '0'); + i++; + } + return (str_hex); +} +function splitHexBuff(data) { + let str_hex, i; + str_hex = ""; + i = 0x0; + while (true) { + str_hex = str_hex + data[i].toString(0x10).padStart(2, '0').toUpperCase(); + i++; + if (i >= data.length) + break; + str_hex = str_hex + " "; + } + return (str_hex); +} +function hexToBytes(hex) { + let i; + if (hex.length == 0x0) + return (undefined); + if ((hex.length & 0x1) != 0x0) + return (undefined); + const bytes = []; + i = 0x0; + while (i < hex.length) { + try { + bytes.push(parseInt(hex.substring(i, i + 0x2), 0x10)); + } + catch (error) { + return (undefined); + } + i = i + 0x2; + } + return (bytes); +} +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} +function checksum(data) { + let ret = 0xff; + let i = 0x0; + while (i < data.length) { + ret = ret ^ data[i]; + i++; + } + return (ret); +} +function calcSigmaCRC16(crc, data, offset, llen) { + let new_bit, wrk_data, b, a, bit_mask; + const bin_data = data; + const CRC_POLY = 0x1021; + while (llen != 0) { + llen -= 1; + if (offset >= bin_data.length) + wrk_data = 0xFF; + else + wrk_data = bin_data[offset]; + offset += 1; + bit_mask = 0x80; + while (bit_mask != 0) { + a = 0; + b = 0; + if ((wrk_data & bit_mask) != 0) + a = 1; + if ((crc & 0x8000) != 0) + b = 1; + new_bit = a ^ b; + crc <<= 1; + crc = crc & 0xffff; + if (new_bit == 1) { + crc ^= CRC_POLY; + } + bit_mask >>= 1; + } + } + return (crc); +} +function costruct_int(arr, n, inv = true) { + let val, i, indx; + val = 0; + i = 0x0; + while (i < arr.length) { + val <<= 8; + indx = i; + if (inv == true) + indx = n - 1 - i; + if ((indx < arr.length) && (indx >= 0)) + val += arr[indx]; + i++; + } + val = val >>> 0x0; //The only JavaScript operator that works using unsigned 32-bit integers is >>>. You can exploit this to convert a signed-integer-in-Number you've been working on with the other bitwise operators to an unsigned-integer-in-Number: + return (val); +} +function intToBytearrayLsbMsb(data, size = 0x4) { + let i; + const array = new Uint8Array(size); + i = 0x0; + while (i < array.length) { + array[i] = data & 0xFF; + data = data >> 8; + i = i + 1; + } + return (array); +} +function intToBytearrayMsbLsb(data, size = 0x4) { + let i; + const array = new Uint8Array(size); + i = 0x0; + while (size != 0) { + size--; + array[i] = (data >> (8 * size)) & 0xFF; + i++; + } + return (array); +} +function conv2DecimalPadding(num, max) { + let num_str = num.toString(0xA); + while (num_str.length < max) + num_str = '0' + num_str; + return (num_str); +} +function conv2Decimal(buff, separator = "-") { + let i, text, v; + text = ""; + i = 0x0; + while (i < (buff.length / 2)) { + v = buff[(i * 2)]; + v <<= 8; + v += buff[(i * 2) + 1]; + if (i != 0) + text += separator; + text += conv2DecimalPadding(v, 5); + i = i + 1; + } + return (text); +} +function version_str_to_int(version) { + let i, out; + const version_list = version.split("."); + i = version_list.length; + out = 0x0; + while (i != 0x0) { + out = out | (Number(version_list[i - 0x1]) << (0x8 * (version_list.length - i))); + i--; + } + return (out); +} +function version_int_to_str(version, min) { + let out, i; + const list = []; + while (version != 0x0) { + list.unshift(version & 0xFF); + version = version >> 0x8; + } + while (list.length < min) { + list.unshift(0x0); + } + out = ""; + i = 0x0; + while (true) { + out = out + String(list[i]).padStart(2, '0'); + i++; + if (i < list.length) { + out = out + "."; + continue; + } + break; + } + return (out); +} + + +/***/ }), + +/***/ "./src/sapi/region.ts": +/*!****************************!*\ + !*** ./src/sapi/region.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SapiRegionClass = void 0; +class SapiRegionClass { + isLr(region) { + if (this.region_lr.includes(region) == false) + return (false); + return (true); + } + _getNameRegion(region, region_conv) { + let i; + i = 0x0; + while (i < region_conv.length) { + if (region_conv[i].id == region) { + const region_list = this.getListRegion(); + if (region_list.includes(region_conv[i].name) == false) + return (undefined); + return (region_conv[i].name); + } + i++; + } + return (undefined); + } + _getIdRegion(region, region_conv) { + let i; + const region_list = this.getListRegion(); + if (region_list.includes(region) == false) + return (undefined); + i = 0x0; + while (i < region_conv.length) { + if (region_conv[i].name == region) + return (region_conv[i].id); + i++; + } + return (undefined); + } + getNameRegion(region) { + return (this._getNameRegion(region, this.region_string_to_number)); + } + getNameRegionCustom(region) { + return (this._getNameRegion(region, this.region_custom_string_to_number)); + } + getIdRegion(region) { + return (this._getIdRegion(region, this.region_string_to_number)); + } + getIdRegionCustom(region) { + return (this._getIdRegion(region, this.region_custom_string_to_number)); + } + getListRegion() { + let out; + out = this.region_standart; + if (this.us_lr == true) + out = out.concat([this.REGION_US_LR]); + if (this.eu_lr == true) + out = out.concat([this.REGION_EU_LR]); + out = out.sort(); + return (out); + } + constructor(us_lr, eu_lr) { + this.REGION_EU = "EU"; + this.REGION_US = "US"; + this.REGION_ANZ = "ANZ"; + this.REGION_HK = "HK"; + this.REGION_IN = "IN"; + this.REGION_IL = "IL"; + this.REGION_RU = "RU"; + this.REGION_CN = "CN"; + this.REGION_JP = "JP"; + this.REGION_KR = "KR"; + this.REGION_EU_LR = "EU_LR"; + this.REGION_US_LR = "US_LR"; + this.region_lr = [ + this.REGION_EU_LR, this.REGION_US_LR + ]; + this.region_standart = [ + this.REGION_EU, this.REGION_US, this.REGION_ANZ, this.REGION_HK, this.REGION_IN, + this.REGION_IL, this.REGION_RU, this.REGION_CN, this.REGION_JP, this.REGION_KR, + ]; + this.region_string_to_number = [ + { name: this.REGION_EU, id: 0x0 }, { name: this.REGION_US, id: 0x01 }, { name: this.REGION_ANZ, id: 0x02 }, + { name: this.REGION_HK, id: 0x3 }, { name: this.REGION_IN, id: 0x5 }, { name: this.REGION_IL, id: 0x6 }, + { name: this.REGION_RU, id: 0x7 }, { name: this.REGION_CN, id: 0x8 }, { name: this.REGION_JP, id: 0x20 }, + { name: this.REGION_KR, id: 0x21 }, { name: this.REGION_US_LR, id: 0x9 }, { name: this.REGION_EU_LR, id: 0xB }, + { name: this.REGION_EU, id: 0xFF } + ]; + this.region_custom_string_to_number = [ + { name: this.REGION_EU, id: 0x0 }, { name: this.REGION_US, id: 0x03 }, { name: this.REGION_ANZ, id: 0x04 }, + { name: this.REGION_HK, id: 0x05 }, { name: this.REGION_IN, id: 0x02 }, { name: this.REGION_IL, id: 0x09 }, + { name: this.REGION_RU, id: 0x01 }, { name: this.REGION_CN, id: 0x06 }, { name: this.REGION_JP, id: 0x07 }, + { name: this.REGION_KR, id: 0x08 }, { name: this.REGION_US_LR, id: 0x0B }, { name: this.REGION_EU_LR, id: 0x0C }, + ]; + if (us_lr == undefined) + us_lr = false; + if (eu_lr == undefined) + eu_lr = false; + this.us_lr = us_lr; + this.eu_lr = eu_lr; + } +} +exports.SapiRegionClass = SapiRegionClass; + + +/***/ }), + +/***/ "./src/sapi/sapi.ts": +/*!**************************!*\ + !*** ./src/sapi/sapi.ts ***! + \**************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SapiClassDetectType = exports.SapiClassNodeIdBaseType = exports.SapiClassSerialAPISetupCmd = exports.SapiClassFuncId = exports.SapiClassStatus = exports.SapiClass = void 0; +const utilities_1 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +const define_1 = __webpack_require__(/*! ../other/define */ "./src/other/define.ts"); +const utilities_2 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +var SapiClassDetectType; +(function (SapiClassDetectType) { + SapiClassDetectType[SapiClassDetectType["RAZBERRY"] = 0] = "RAZBERRY"; + SapiClassDetectType[SapiClassDetectType["ZUNO"] = 1] = "ZUNO"; + SapiClassDetectType[SapiClassDetectType["UNKNOWN"] = 2] = "UNKNOWN"; +})(SapiClassDetectType || (exports.SapiClassDetectType = SapiClassDetectType = {})); +var SapiClassStatus; +(function (SapiClassStatus) { + SapiClassStatus[SapiClassStatus["OK"] = 0] = "OK"; + SapiClassStatus[SapiClassStatus["NO_ACK"] = 1] = "NO_ACK"; + SapiClassStatus[SapiClassStatus["INVALID_DATA_LEN"] = 2] = "INVALID_DATA_LEN"; + SapiClassStatus[SapiClassStatus["INVALID_CRC"] = 3] = "INVALID_CRC"; + SapiClassStatus[SapiClassStatus["NO_SOF"] = 4] = "NO_SOF"; + SapiClassStatus[SapiClassStatus["NO_LENGHT"] = 5] = "NO_LENGHT"; + SapiClassStatus[SapiClassStatus["WRITE"] = 6] = "WRITE"; + SapiClassStatus[SapiClassStatus["WRONG_LENGHT"] = 7] = "WRONG_LENGHT"; + SapiClassStatus[SapiClassStatus["WRONG_CMD"] = 8] = "WRONG_CMD"; + SapiClassStatus[SapiClassStatus["PORT_NOT_OPEN"] = 9] = "PORT_NOT_OPEN"; + SapiClassStatus[SapiClassStatus["PORT_NOT_CLOSE"] = 10] = "PORT_NOT_CLOSE"; + SapiClassStatus[SapiClassStatus["PORT_NOT_REQUEST"] = 11] = "PORT_NOT_REQUEST"; + SapiClassStatus[SapiClassStatus["PORT_USED"] = 12] = "PORT_USED"; + SapiClassStatus[SapiClassStatus["PORT_BUSY"] = 13] = "PORT_BUSY"; + SapiClassStatus[SapiClassStatus["TIMEOUT_RCV"] = 14] = "TIMEOUT_RCV"; + SapiClassStatus[SapiClassStatus["SERIAL_UN_SUPPORT"] = 15] = "SERIAL_UN_SUPPORT"; + SapiClassStatus[SapiClassStatus["SERIAL_BUSY"] = 16] = "SERIAL_BUSY"; + SapiClassStatus[SapiClassStatus["REQUEST_ONE_SHOT"] = 17] = "REQUEST_ONE_SHOT"; + SapiClassStatus[SapiClassStatus["REQUEST_NO_SELECT"] = 18] = "REQUEST_NO_SELECT"; + SapiClassStatus[SapiClassStatus["ZUNO_NO_FREEZE"] = 19] = "ZUNO_NO_FREEZE"; + SapiClassStatus[SapiClassStatus["ZUNO_START_WRONG_LENG"] = 20] = "ZUNO_START_WRONG_LENG"; + SapiClassStatus[SapiClassStatus["ZUNO_START_WRONG_DATA"] = 21] = "ZUNO_START_WRONG_DATA"; + SapiClassStatus[SapiClassStatus["ZUNO_START_WRONG_FRAME"] = 22] = "ZUNO_START_WRONG_FRAME"; + SapiClassStatus[SapiClassStatus["DETECTED_UNC_COMMAND"] = 23] = "DETECTED_UNC_COMMAND"; + SapiClassStatus[SapiClassStatus["DETECTED_NOT_FIND"] = 24] = "DETECTED_NOT_FIND"; + SapiClassStatus[SapiClassStatus["DETECTED_CANCEL"] = 25] = "DETECTED_CANCEL"; + SapiClassStatus[SapiClassStatus["DETECTED_UNC"] = 26] = "DETECTED_UNC"; + SapiClassStatus[SapiClassStatus["DETECTED_TARGET_TYPE"] = 27] = "DETECTED_TARGET_TYPE"; + SapiClassStatus[SapiClassStatus["UPDATE_UNK"] = 28] = "UPDATE_UNK"; + SapiClassStatus[SapiClassStatus["UPDATE_TIMEOUT"] = 29] = "UPDATE_TIMEOUT"; + SapiClassStatus[SapiClassStatus["UPDATE_PROCESS"] = 30] = "UPDATE_PROCESS"; + SapiClassStatus[SapiClassStatus["UPDATE_STEP_FAILL"] = 31] = "UPDATE_STEP_FAILL"; + SapiClassStatus[SapiClassStatus["WRONG_RETRIES_CAN"] = 32] = "WRONG_RETRIES_CAN"; + SapiClassStatus[SapiClassStatus["WRONG_RETRIES_NAK"] = 33] = "WRONG_RETRIES_NAK"; + SapiClassStatus[SapiClassStatus["TIMEOUT_RCV_I"] = 34] = "TIMEOUT_RCV_I"; + SapiClassStatus[SapiClassStatus["LAST_STATUS"] = 35] = "LAST_STATUS"; +})(SapiClassStatus || (exports.SapiClassStatus = SapiClassStatus = {})); +var SapiClassNodeIdBaseType; +(function (SapiClassNodeIdBaseType) { + SapiClassNodeIdBaseType[SapiClassNodeIdBaseType["TYPE_8_BIT"] = 1] = "TYPE_8_BIT"; + SapiClassNodeIdBaseType[SapiClassNodeIdBaseType["TYPE_16_BIT"] = 2] = "TYPE_16_BIT"; +})(SapiClassNodeIdBaseType || (exports.SapiClassNodeIdBaseType = SapiClassNodeIdBaseType = {})); +var SapiClassSerialAPISetupCmd; +(function (SapiClassSerialAPISetupCmd) { + // /** + // * The first 8 commands are given as bit-flags, and when all bits were consumed, a byte-array was created to give + // * more room. + // * The first 8 flags are the only ones that shall be used to fill the first byte when generating the response in + // * pOutputBuffer for the command, SERIAL_API_SETUP_CMD_SUPPORTED. + // * This is kept for backwards compatibility. + // */ + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_UNSUPPORTED"] = 0] = "SERIAL_API_SETUP_CMD_UNSUPPORTED"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_SUPPORTED"] = 1] = "SERIAL_API_SETUP_CMD_SUPPORTED"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_STATUS_REPORT"] = 2] = "SERIAL_API_SETUP_CMD_TX_STATUS_REPORT"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET"] = 4] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET"] = 8] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_GET_MAX_PAYLOAD_SIZE"] = 16] = "SERIAL_API_SETUP_CMD_TX_GET_MAX_PAYLOAD_SIZE"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_RF_REGION_GET"] = 32] = "SERIAL_API_SETUP_CMD_RF_REGION_GET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_RF_REGION_SET"] = 64] = "SERIAL_API_SETUP_CMD_RF_REGION_SET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET"] = 128] = "SERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET"; + // /** + // * The below values are not flags and shall only be used with BITMASK_ADD_CMD() when generating + // * the response for the command, SERIAL_API_SETUP_CMD_SUPPORTED. + // */ + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_SET"] = 3] = "SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_SET"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_GET"] = 5] = "SERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_GET"; + // The values 6 and 7 are unused, but not reserved. + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_GET_MAX_LR_PAYLOAD_SIZE"] = 17] = "SERIAL_API_SETUP_CMD_TX_GET_MAX_LR_PAYLOAD_SIZE"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET_16_BIT"] = 18] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET_16_BIT"; + SapiClassSerialAPISetupCmd[SapiClassSerialAPISetupCmd["SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET_16_BIT"] = 19] = "SERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET_16_BIT"; +})(SapiClassSerialAPISetupCmd || (exports.SapiClassSerialAPISetupCmd = SapiClassSerialAPISetupCmd = {})); +var SapiClassFuncId; +(function (SapiClassFuncId) { + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_INIT_DATA"] = 2] = "FUNC_ID_SERIAL_API_GET_INIT_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION"] = 3] = "FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_COMMAND_HANDLER"] = 4] = "FUNC_ID_APPLICATION_COMMAND_HANDLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_CONTROLLER_CAPABILITIES"] = 5] = "FUNC_ID_ZW_GET_CONTROLLER_CAPABILITIES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_SET_TIMEOUTS"] = 6] = "FUNC_ID_SERIAL_API_SET_TIMEOUTS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_CAPABILITIES"] = 7] = "FUNC_ID_SERIAL_API_GET_CAPABILITIES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_SOFT_RESET"] = 8] = "FUNC_ID_SERIAL_API_SOFT_RESET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_PROTOCOL_VERSION"] = 9] = "FUNC_ID_ZW_GET_PROTOCOL_VERSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_STARTED"] = 10] = "FUNC_ID_SERIAL_API_STARTED"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_SETUP"] = 11] = "FUNC_ID_SERIAL_API_SETUP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION_CMD_CLASSES"] = 12] = "FUNC_ID_SERIAL_API_APPL_NODE_INFORMATION_CMD_CLASSES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_EX"] = 14] = "FUNC_ID_ZW_SEND_DATA_EX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_MULTI_EX"] = 15] = "FUNC_ID_ZW_SEND_DATA_MULTI_EX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_RF_RECEIVE_MODE"] = 16] = "FUNC_ID_ZW_SET_RF_RECEIVE_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_SLEEP_MODE"] = 17] = "FUNC_ID_ZW_SET_SLEEP_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_NODE_INFORMATION"] = 18] = "FUNC_ID_ZW_SEND_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA"] = 19] = "FUNC_ID_ZW_SEND_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_MULTI"] = 20] = "FUNC_ID_ZW_SEND_DATA_MULTI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_VERSION"] = 21] = "FUNC_ID_ZW_GET_VERSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_ABORT"] = 22] = "FUNC_ID_ZW_SEND_DATA_ABORT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RF_POWER_LEVEL_SET"] = 23] = "FUNC_ID_ZW_RF_POWER_LEVEL_SET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_META"] = 24] = "FUNC_ID_ZW_SEND_DATA_META"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SD"] = 25] = "FUNC_ID_ZW_RESERVED_SD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SDM"] = 26] = "FUNC_ID_ZW_RESERVED_SDM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SRI"] = 27] = "FUNC_ID_ZW_RESERVED_SRI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_RANDOM"] = 28] = "FUNC_ID_ZW_GET_RANDOM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RANDOM"] = 29] = "FUNC_ID_ZW_RANDOM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RF_POWER_LEVEL_REDISCOVERY_SET"] = 30] = "FUNC_ID_ZW_RF_POWER_LEVEL_REDISCOVERY_SET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_GET_ID"] = 32] = "FUNC_ID_MEMORY_GET_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_GET_BYTE"] = 33] = "FUNC_ID_MEMORY_GET_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_PUT_BYTE"] = 34] = "FUNC_ID_MEMORY_PUT_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_GET_BUFFER"] = 35] = "FUNC_ID_MEMORY_GET_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_MEMORY_PUT_BUFFER"] = 36] = "FUNC_ID_MEMORY_PUT_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_APPL_HOST_MEMORY_OFFSET"] = 37] = "FUNC_ID_SERIAL_API_GET_APPL_HOST_MEMORY_OFFSET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_DEBUG_OUTPUT"] = 38] = "FUNC_ID_DEBUG_OUTPUT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_AUTO_PROGRAMMING"] = 39] = "FUNC_ID_AUTO_PROGRAMMING"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVR_GET_VALUE"] = 40] = "FUNC_ID_NVR_GET_VALUE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_GET_ID"] = 41] = "FUNC_ID_NVM_GET_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_READ_LONG_BUFFER"] = 42] = "FUNC_ID_NVM_EXT_READ_LONG_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER"] = 43] = "FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_READ_LONG_BYTE"] = 44] = "FUNC_ID_NVM_EXT_READ_LONG_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_EXT_WRITE_LONG_BYTE"] = 45] = "FUNC_ID_NVM_EXT_WRITE_LONG_BYTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_NVM_BACKUP_RESTORE"] = 46] = "FUNC_ID_NVM_BACKUP_RESTORE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NVR_GET_APP_VALUE"] = 47] = "FUNC_ID_ZW_NVR_GET_APP_VALUE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLOCK_SET"] = 48] = "FUNC_ID_CLOCK_SET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLOCK_GET"] = 49] = "FUNC_ID_CLOCK_GET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLOCK_CMP"] = 50] = "FUNC_ID_CLOCK_CMP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_CREATE"] = 51] = "FUNC_ID_RTC_TIMER_CREATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_READ"] = 52] = "FUNC_ID_RTC_TIMER_READ"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_DELETE"] = 53] = "FUNC_ID_RTC_TIMER_DELETE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RTC_TIMER_CALL"] = 54] = "FUNC_ID_RTC_TIMER_CALL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_CLEAR_TX_TIMERS"] = 55] = "FUNC_ID_CLEAR_TX_TIMERS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_TX_TIMERS"] = 56] = "FUNC_ID_GET_TX_TIMERS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_CLEAR_NETWORK_STATS"] = 57] = "FUNC_ID_ZW_CLEAR_NETWORK_STATS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_NETWORK_STATS"] = 58] = "FUNC_ID_ZW_GET_NETWORK_STATS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_BACKGROUND_RSSI"] = 59] = "FUNC_ID_ZW_GET_BACKGROUND_RSSI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LISTEN_BEFORE_TALK_THRESHOLD"] = 60] = "FUNC_ID_ZW_SET_LISTEN_BEFORE_TALK_THRESHOLD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REMOVE_NODE_ID_FROM_NETWORK"] = 63] = "FUNC_ID_ZW_REMOVE_NODE_ID_FROM_NETWORK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LEARN_NODE_STATE"] = 64] = "FUNC_ID_ZW_SET_LEARN_NODE_STATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_NODE_PROTOCOL_INFO"] = 65] = "FUNC_ID_ZW_GET_NODE_PROTOCOL_INFO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_DEFAULT"] = 66] = "FUNC_ID_ZW_SET_DEFAULT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NEW_CONTROLLER"] = 67] = "FUNC_ID_ZW_NEW_CONTROLLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE"] = 68] = "FUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REPLICATION_SEND_DATA"] = 69] = "FUNC_ID_ZW_REPLICATION_SEND_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_RETURN_ROUTE"] = 70] = "FUNC_ID_ZW_ASSIGN_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_DELETE_RETURN_ROUTE"] = 71] = "FUNC_ID_ZW_DELETE_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE"] = 72] = "FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODETYPE_NEIGHBOR_UPDATE"] = 104] = "FUNC_ID_ZW_REQUEST_NODETYPE_NEIGHBOR_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_APPLICATION_UPDATE"] = 73] = "FUNC_ID_ZW_APPLICATION_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ADD_NODE_TO_NETWORK"] = 74] = "FUNC_ID_ZW_ADD_NODE_TO_NETWORK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REMOVE_NODE_FROM_NETWORK"] = 75] = "FUNC_ID_ZW_REMOVE_NODE_FROM_NETWORK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_CREATE_NEW_PRIMARY"] = 76] = "FUNC_ID_ZW_CREATE_NEW_PRIMARY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_CONTROLLER_CHANGE"] = 77] = "FUNC_ID_ZW_CONTROLLER_CHANGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_FN"] = 78] = "FUNC_ID_ZW_RESERVED_FN"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_PRIORITY_RETURN_ROUTE"] = 79] = "FUNC_ID_ZW_ASSIGN_PRIORITY_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LEARN_MODE"] = 80] = "FUNC_ID_ZW_SET_LEARN_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_SUC_RETURN_ROUTE"] = 81] = "FUNC_ID_ZW_ASSIGN_SUC_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ENABLE_SUC"] = 82] = "FUNC_ID_ZW_ENABLE_SUC"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NETWORK_UPDATE"] = 83] = "FUNC_ID_ZW_REQUEST_NETWORK_UPDATE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_SUC_NODE_ID"] = 84] = "FUNC_ID_ZW_SET_SUC_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_DELETE_SUC_RETURN_ROUTE"] = 85] = "FUNC_ID_ZW_DELETE_SUC_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_SUC_NODE_ID"] = 86] = "FUNC_ID_ZW_GET_SUC_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_SUC_ID"] = 87] = "FUNC_ID_ZW_SEND_SUC_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE"] = 88] = "FUNC_ID_ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REDISCOVERY_NEEDED"] = 89] = "FUNC_ID_ZW_REDISCOVERY_NEEDED"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE_OPTION"] = 90] = "FUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE_OPTION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SUPPORT9600_ONLY"] = 91] = "FUNC_ID_ZW_SUPPORT9600_ONLY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NEW_ROUTE_DESTINATIONS"] = 92] = "FUNC_ID_ZW_REQUEST_NEW_ROUTE_DESTINATIONS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_NODE_WITHIN_DIRECT_RANGE"] = 93] = "FUNC_ID_ZW_IS_NODE_WITHIN_DIRECT_RANGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION"] = 94] = "FUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_EXPLORE_REQUEST_EXCLUSION"] = 95] = "FUNC_ID_ZW_EXPLORE_REQUEST_EXCLUSION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REQUEST_NODE_INFO"] = 96] = "FUNC_ID_ZW_REQUEST_NODE_INFO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REMOVE_FAILED_NODE_ID"] = 97] = "FUNC_ID_ZW_REMOVE_FAILED_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_FAILED_NODE_ID"] = 98] = "FUNC_ID_ZW_IS_FAILED_NODE_ID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_REPLACE_FAILED_NODE"] = 99] = "FUNC_ID_ZW_REPLACE_FAILED_NODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_ROUTING_MAX_6_00"] = 101] = "FUNC_ID_ZW_SET_ROUTING_MAX_6_00"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_PRIMARY_CTRL"] = 102] = "FUNC_ID_ZW_IS_PRIMARY_CTRL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_AES_ECB"] = 103] = "FUNC_ID_ZW_AES_ECB"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_START"] = 112] = "FUNC_ID_TIMER_START"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_RESTART"] = 113] = "FUNC_ID_TIMER_RESTART"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_CANCEL"] = 114] = "FUNC_ID_TIMER_CANCEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_TIMER_CALL"] = 115] = "FUNC_ID_TIMER_CALL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_FIRMWARE_UPDATE_NVM"] = 120] = "FUNC_ID_ZW_FIRMWARE_UPDATE_NVM"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_ROUTING_TABLE_LINE"] = 128] = "FUNC_ID_GET_ROUTING_TABLE_LINE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_TX_COUNTER"] = 129] = "FUNC_ID_GET_TX_COUNTER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_RESET_TX_COUNTER"] = 130] = "FUNC_ID_RESET_TX_COUNTER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_STORE_NODEINFO"] = 131] = "FUNC_ID_STORE_NODEINFO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_STORE_HOMEID"] = 132] = "FUNC_ID_STORE_HOMEID"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_LOCK_ROUTE_RESPONSE"] = 144] = "FUNC_ID_LOCK_ROUTE_RESPONSE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_ROUTE_DEMO"] = 145] = "FUNC_ID_ZW_SEND_DATA_ROUTE_DEMO"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_PRIORITY_ROUTE"] = 146] = "FUNC_ID_ZW_GET_PRIORITY_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_PRIORITY_ROUTE"] = 147] = "FUNC_ID_ZW_SET_PRIORITY_ROUTE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_TEST"] = 149] = "FUNC_ID_SERIAL_API_TEST"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_EXT"] = 152] = "FUNC_ID_SERIAL_API_EXT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SECURITY_SETUP"] = 156] = "FUNC_ID_ZW_SECURITY_SETUP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_SECURITY_EVENT"] = 157] = "FUNC_ID_APPLICATION_SECURITY_EVENT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_APPL_SLAVE_NODE_INFORMATION"] = 160] = "FUNC_ID_SERIAL_API_APPL_SLAVE_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER"] = 161] = "FUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_SLAVE_NODE_INFORMATION"] = 162] = "FUNC_ID_ZW_SEND_SLAVE_NODE_INFORMATION"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_SLAVE_DATA"] = 163] = "FUNC_ID_ZW_SEND_SLAVE_DATA"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_SLAVE_LEARN_MODE"] = 164] = "FUNC_ID_ZW_SET_SLAVE_LEARN_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_VIRTUAL_NODES"] = 165] = "FUNC_ID_ZW_GET_VIRTUAL_NODES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_VIRTUAL_NODE"] = 166] = "FUNC_ID_ZW_IS_VIRTUAL_NODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RESERVED_SSD"] = 167] = "FUNC_ID_ZW_RESERVED_SSD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_APPLICATION_COMMAND_HANDLER_BRIDGE"] = 168] = "FUNC_ID_APPLICATION_COMMAND_HANDLER_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_BRIDGE"] = 169] = "FUNC_ID_ZW_SEND_DATA_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_META_BRIDGE"] = 170] = "FUNC_ID_ZW_SEND_DATA_META_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_DATA_MULTI_BRIDGE"] = 171] = "FUNC_ID_ZW_SEND_DATA_MULTI_BRIDGE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_SETSTOPMODE"] = 176] = "FUNC_ID_PWR_SETSTOPMODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_CLK_PD"] = 177] = "FUNC_ID_PWR_CLK_PD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_CLK_PUP"] = 178] = "FUNC_ID_PWR_CLK_PUP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PWR_SELECT_CLK"] = 179] = "FUNC_ID_PWR_SELECT_CLK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_WUT_TIMEOUT"] = 180] = "FUNC_ID_ZW_SET_WUT_TIMEOUT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_IS_WUT_KICKED"] = 181] = "FUNC_ID_ZW_IS_WUT_KICKED"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_ENABLE"] = 182] = "FUNC_ID_ZW_WATCHDOG_ENABLE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_DISABLE"] = 183] = "FUNC_ID_ZW_WATCHDOG_DISABLE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_KICK"] = 184] = "FUNC_ID_ZW_WATCHDOG_KICK"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_EXT_INT_LEVEL"] = 185] = "FUNC_ID_ZW_SET_EXT_INT_LEVEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_RF_POWER_LEVEL_GET"] = 186] = "FUNC_ID_ZW_RF_POWER_LEVEL_GET"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_NEIGHBOR_COUNT"] = 187] = "FUNC_ID_ZW_GET_NEIGHBOR_COUNT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_ARE_NODES_NEIGHBOURS"] = 188] = "FUNC_ID_ZW_ARE_NODES_NEIGHBOURS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_TYPE_LIBRARY"] = 189] = "FUNC_ID_ZW_TYPE_LIBRARY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SEND_TEST_FRAME"] = 190] = "FUNC_ID_ZW_SEND_TEST_FRAME"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_PROTOCOL_STATUS"] = 191] = "FUNC_ID_ZW_GET_PROTOCOL_STATUS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_PROMISCUOUS_MODE"] = 208] = "FUNC_ID_ZW_SET_PROMISCUOUS_MODE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER"] = 209] = "FUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_START"] = 210] = "FUNC_ID_ZW_WATCHDOG_START"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_WATCHDOG_STOP"] = 211] = "FUNC_ID_ZW_WATCHDOG_STOP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_ROUTING_MAX"] = 212] = "FUNC_ID_ZW_SET_ROUTING_MAX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_GET_ROUTING_MAX"] = 213] = "FUNC_ID_ZW_GET_ROUTING_MAX"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PM_STAY_AWAKE"] = 215] = "FUNC_ID_PM_STAY_AWAKE"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PM_CANCEL"] = 216] = "FUNC_ID_PM_CANCEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NETWORK_MANAGEMENT_SET_MAX_INCLUSION_REQUEST_INTERVALS"] = 214] = "FUNC_ID_ZW_NETWORK_MANAGEMENT_SET_MAX_INCLUSION_REQUEST_INTERVALS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_INITIATE_SHUTDOWN"] = 217] = "FUNC_ID_ZW_INITIATE_SHUTDOWN"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_GET_LR_NODES"] = 218] = "FUNC_ID_SERIAL_API_GET_LR_NODES"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_LR_CHANNEL"] = 219] = "FUNC_ID_GET_LR_CHANNEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SET_LR_CHANNEL"] = 220] = "FUNC_ID_SET_LR_CHANNEL"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_SET_LR_VIRTUAL_IDS"] = 221] = "FUNC_ID_ZW_SET_LR_VIRTUAL_IDS"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_DCDC_CONFIG"] = 222] = "FUNC_ID_GET_DCDC_CONFIG"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SET_DCDC_CONFIG"] = 223] = "FUNC_ID_SET_DCDC_CONFIG"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_CMD"] = 224] = "FUNC_ID_ZW_NUNIT_CMD"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_INIT"] = 225] = "FUNC_ID_ZW_NUNIT_INIT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_LIST"] = 226] = "FUNC_ID_ZW_NUNIT_LIST"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_RUN"] = 227] = "FUNC_ID_ZW_NUNIT_RUN"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ZW_NUNIT_END"] = 228] = "FUNC_ID_ZW_NUNIT_END"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_ENABLE_RADIO_PTI"] = 231] = "FUNC_ID_ENABLE_RADIO_PTI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_GET_RADIO_PTI"] = 232] = "FUNC_ID_GET_RADIO_PTI"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SEND_NOP"] = 233] = "FUNC_ID_SEND_NOP"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_POWER_MANAGEMENT"] = 238] = "FUNC_ID_SERIAL_API_POWER_MANAGEMENT"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_SERIAL_API_READY"] = 239] = "FUNC_ID_SERIAL_API_READY"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_0"] = 240] = "FUNC_ID_PROPRIETARY_0"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_1"] = 241] = "FUNC_ID_PROPRIETARY_1"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_2"] = 242] = "FUNC_ID_PROPRIETARY_2"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_3"] = 243] = "FUNC_ID_PROPRIETARY_3"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_4"] = 244] = "FUNC_ID_PROPRIETARY_4"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_5"] = 245] = "FUNC_ID_PROPRIETARY_5"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_6"] = 246] = "FUNC_ID_PROPRIETARY_6"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_7"] = 247] = "FUNC_ID_PROPRIETARY_7"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_8"] = 248] = "FUNC_ID_PROPRIETARY_8"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_9"] = 249] = "FUNC_ID_PROPRIETARY_9"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_A"] = 250] = "FUNC_ID_PROPRIETARY_A"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_B"] = 251] = "FUNC_ID_PROPRIETARY_B"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_C"] = 252] = "FUNC_ID_PROPRIETARY_C"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_D"] = 253] = "FUNC_ID_PROPRIETARY_D"; + SapiClassFuncId[SapiClassFuncId["FUNC_ID_PROPRIETARY_E"] = 254] = "FUNC_ID_PROPRIETARY_E"; +})(SapiClassFuncId || (exports.SapiClassFuncId = SapiClassFuncId = {})); +class SapiClass { + _readWithTimeout(timeout) { + return __awaiter(this, void 0, void 0, function* () { + let out; + if (this.port == undefined || this.port.readable == null) + return (new Uint8Array([])); + const reader = this.port.readable.getReader(); + const timer = setTimeout(() => { + reader.releaseLock(); + }, timeout); + try { + out = (yield reader.read()).value; + } + catch (err) { + out = new Uint8Array([]); + } + clearTimeout(timer); + reader.releaseLock(); + return (out); + }); + } + _read(num) { + return __awaiter(this, void 0, void 0, function* () { + let out, i, rep, tempos; + rep = 0x0; + while (rep < 1) { + if (this.queue.length >= num) { + out = []; + i = 0x0; + while (i < num) { + tempos = this.queue.shift(); + if (tempos == undefined) + break; + out.push(tempos); + i++; + } + return (out); + } + const value = yield this._readWithTimeout(20); + i = 0x0; + while (i < value.byteLength) { + this.queue.push(value[i]); + i++; + } + rep++; + } + if (num >= this.queue.length) + num = this.queue.length; + out = []; + i = 0x0; + while (i < num) { + tempos = this.queue.shift(); + if (tempos == undefined) + break; + out.push(tempos); + i++; + } + return (out); + }); + } + _write(data) { + return __awaiter(this, void 0, void 0, function* () { + if (this.port == undefined || this.port.writable == null) + return (false); + const data_uint8 = new Uint8Array(data); + const writer = this.port.writable.getWriter(); + yield writer.write(data_uint8); + writer.releaseLock(); + if (define_1.WEB_TOOLS_BETA == true) + console.log(">> ", (0, utilities_2.splitHexBuff)(data_uint8)); + return (true); + }); + } + _recv_async() { + return __awaiter(this, void 0, void 0, function* () { + for (;;) { + if ((yield this._recvIncomingRequestAsyn(100)) == false) + break; + } + }); + } + _clear() { + return __awaiter(this, void 0, void 0, function* () { + yield this._recv_async(); + this.queue = []; + for (;;) { + const value = yield this._read(50); + if (value.length == 0x0) + return; + } + }); + } + _sendData(cmd, databuff) { + return __awaiter(this, void 0, void 0, function* () { + let final_data; + const data_len = databuff.length + this.ADDITIONAL_SIZE; + if (data_len > 255) { + const crc_data = [0x00, this.REQUEST, cmd].concat(databuff); + final_data = [0x00, (data_len >> 8) & 0x0FF, data_len & 0x0FF, this.REQUEST, cmd].concat(databuff); + const crc16 = (0, utilities_1.calcSigmaCRC16)(0x1D0F, crc_data, 0, crc_data.length); + final_data = [this.SOF].concat(final_data).concat([(crc16 >> 8) & 0xFF, (crc16) & 0xFF]); + if ((yield this._write(final_data)) == false) + return (false); + return (true); + } + final_data = [data_len & 0x0FF, this.REQUEST, cmd].concat(databuff); + const crc = (0, utilities_1.checksum)(final_data); + final_data = [this.SOF].concat(final_data).concat([crc]); + if ((yield this._write(final_data)) == false) + return (false); + return (true); + }); + } + _sendNack() { + return __awaiter(this, void 0, void 0, function* () { + return (yield (this._write([this.NAK]))); + }); + } + _sendAck() { + return __awaiter(this, void 0, void 0, function* () { + return (yield (this._write([this.ACK]))); + }); + } + _waitSOF(timeout) { + return __awaiter(this, void 0, void 0, function* () { + const sof_timeout = Date.now() + timeout; + while (sof_timeout > Date.now()) { + const sof = yield this._read(0x1); + if (sof.length == 0x0) { + continue; + } + if (sof[0x0] == this.SOF) + return (true); + } + return (false); + }); + } + _send_cmd(cmd, databuff) { + return __awaiter(this, void 0, void 0, function* () { + let rbuff, retries_nak, retries_can, retries_ack; + if (this.b_open == false) + return (SapiClassStatus.PORT_NOT_OPEN); + yield this._recv_async(); + retries_nak = 0x3; + retries_can = this.RETRIES_CAN; + retries_ack = 0x6; + for (;;) { + if (retries_nak < 0x0) + return (SapiClassStatus.WRONG_RETRIES_NAK); + if (retries_can < 0x0) + return (SapiClassStatus.WRONG_RETRIES_CAN); + if ((yield this._sendData(cmd, databuff)) == false) + return (SapiClassStatus.WRITE); + for (;;) { + if (retries_ack < 0x0) + return (SapiClassStatus.NO_ACK); + rbuff = yield this._read(0x1); + if (rbuff.length == 0x0) { + retries_ack--; + continue; + } + if (rbuff[0] == this.SOF) { + yield this._recvIncomingRequestAsyn(100, false); + continue; + } + break; + } + if (rbuff[0] == this.ACK) + break; + if (rbuff[0] == this.CAN) { + yield this._recv_async(); + retries_can--; + continue; + } + if (rbuff[0] == this.NAK) { + retries_nak--; + continue; + } + } + return (SapiClassStatus.OK); + }); + } + _request(filters) { + return __awaiter(this, void 0, void 0, function* () { + let port; + const nav_ext_serial = window.navigator; + if (this.port != undefined) + return (SapiClassStatus.REQUEST_ONE_SHOT); + try { + const options = { filters: filters }; + port = yield nav_ext_serial.serial.requestPort(options); + } + catch (e) { + return (SapiClassStatus.REQUEST_NO_SELECT); + } + this.port = port; + return (SapiClassStatus.OK); + }); + } + _open(baudRate) { + return __awaiter(this, void 0, void 0, function* () { + if (this.port == undefined) + return (SapiClassStatus.PORT_NOT_REQUEST); + if (this.b_open == true) + return (SapiClassStatus.PORT_NOT_OPEN); + try { + yield this.port.open({ baudRate, bufferSize: 8192 }); + } + catch (e) { + return (SapiClassStatus.PORT_USED); + } + this.b_open = true; + return (SapiClassStatus.OK); + }); + } + _close() { + return __awaiter(this, void 0, void 0, function* () { + if (this.port == undefined) + return (SapiClassStatus.PORT_NOT_REQUEST); + if (this.b_open == false) + return (SapiClassStatus.PORT_NOT_CLOSE); + yield this.port.close(); + this.b_open = false; + return (SapiClassStatus.OK); + }); + } + _recvIncomingRequest_add(lenght) { + return __awaiter(this, void 0, void 0, function* () { + let buff_data, wait_timeout; + const timout = 100; + buff_data = []; + wait_timeout = Date.now() + timout; + for (;;) { + const buffer = yield this._read(lenght - buff_data.length); + buff_data = buff_data.concat(buffer); + if (buff_data.length == lenght) + break; + if (buffer.length > 0x0) { + wait_timeout = Date.now() + timout; + continue; + } + if (Date.now() >= wait_timeout) { + yield this._sendNack(); + return ([]); + } + } + return (buff_data); + }); + } + _recvIncomingRequest(timeout_1) { + return __awaiter(this, arguments, void 0, function* (timeout, wait_sof = true) { + let buff_data; + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + if (this.b_open == false) { + out.status = SapiClassStatus.PORT_NOT_OPEN; + return (out); + } + if (wait_sof == true) { + if ((yield this._waitSOF(timeout)) == false) { + out.status = SapiClassStatus.NO_SOF; + return (out); + } + } + buff_data = yield this._recvIncomingRequest_add(0x1); + if (buff_data.length != 0x1) { + out.status = SapiClassStatus.NO_LENGHT; + return (out); + } + const len_data = buff_data[0x0]; + if (len_data < 0x3) { + out.status = SapiClassStatus.WRONG_LENGHT; + return (out); + } + buff_data = yield this._recvIncomingRequest_add(len_data); + if (buff_data.length != len_data) { + out.status = SapiClassStatus.INVALID_DATA_LEN; + return (out); + } + out.crc = (0, utilities_1.checksum)([len_data].concat(buff_data.slice(0, len_data - 0x1))); + if (out.crc != buff_data[len_data - 1]) { + yield this._sendNack(); + out.status = SapiClassStatus.INVALID_CRC; + return (out); + } + yield this._sendAck(); + out.raw = [this.SOF, len_data].concat(buff_data); + if (define_1.WEB_TOOLS_BETA == true) + console.log("<< ", (0, utilities_2.splitHexBuff)(out.raw)); + out.cmd = out.raw[0x3]; + out.data = out.raw.slice(0x4, out.raw.length - 0x1); + return (out); + }); + } + _recvIncomingRequestAsyn(timeout_1) { + return __awaiter(this, arguments, void 0, function* (timeout, wait_sof = true) { + const res = yield this._recvIncomingRequest(timeout, wait_sof); + if (res.status != SapiClassStatus.OK) + return (false); + // this.async_ret.push(res); + return (true); + }); + } + _sendCommandUnSz_rcv_test(res, cmd) { + if (res.status != SapiClassStatus.OK) + return (false); + if (res.cmd != cmd) + return (false); + return (true); + } + _sendCommandUnSz(cmd, args, timeout, cmd_ret) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + out.status = yield this._send_cmd(cmd, args); + if (out.status != SapiClassStatus.OK) { + return (out); + } + const wait_timeout = Date.now() + timeout; + for (;;) { + const current_timeout = Date.now(); + if (current_timeout >= wait_timeout) { + out.status = SapiClassStatus.TIMEOUT_RCV; + return (out); + } + const res = yield this._recvIncomingRequest(wait_timeout - current_timeout); + if (cmd_ret == undefined) + cmd_ret = cmd; + if (this._sendCommandUnSz_rcv_test(res, cmd_ret) == true) + return (res); + } + }); + } + _recvIncomingRequest_wait(timeout, cmd_ret) { + return __awaiter(this, void 0, void 0, function* () { + let res, i; + res = yield this._recvIncomingRequest(timeout); + if (cmd_ret == undefined) + return (res); + i = this.RETRIES_CAN; + for (;;) { + if (res.status != SapiClassStatus.OK) + break; + if (res.cmd == cmd_ret) + break; + if (i < 0x0) { + res.status = SapiClassStatus.TIMEOUT_RCV_I; + break; + } + res = yield this._recvIncomingRequest(100); + i--; + } + return (res); + }); + } + recvIncomingRequest(timeout, cmd_ret) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + this.b_busy = true; + const res = yield this._recvIncomingRequest_wait(timeout, cmd_ret); + this.b_busy = false; + return (res); + }); + } + sendCommandUnSz(cmd_1, args_1) { + return __awaiter(this, arguments, void 0, function* (cmd, args, timeout = 2000, cmd_ret) { + const out = { status: SapiClassStatus.OK, crc: 0x0, cmd: 0x0, raw: [], data: [] }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + this.b_busy = true; + const res = yield this._sendCommandUnSz(cmd, args, timeout, cmd_ret); + this.b_busy = false; + return (res); + }); + } + lock() { + this.state_lock = true; + } + unlock() { + this.state_lock = false; + } + is_busy() { + if (this.state_lock == true) + return (true); + return (this.busy()); + } + busy() { + return (this.b_busy); + } + static supported() { + if (!("serial" in window.navigator)) + return (false); + return (true); + } + request(filters) { + return __awaiter(this, void 0, void 0, function* () { + if (this.busy() == true) + return (SapiClassStatus.SERIAL_BUSY); + if (SapiClass.supported() == false) + return (SapiClassStatus.SERIAL_UN_SUPPORT); + this.b_busy = true; + const out = yield this._request(filters); + this.b_busy = false; + return (out); + }); + } + close() { + return __awaiter(this, void 0, void 0, function* () { + if (this.busy() == true) + return (SapiClassStatus.SERIAL_BUSY); + this.b_busy = true; + yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 500); + const out = yield this._close(); + this.b_busy = false; + this.detect_type = SapiClassDetectType.UNKNOWN; + this.unlock(); + return (out); + }); + } + type() { + return (this.detect_type); + } + _detect_rcv_freeze_zuno(out) { + return __awaiter(this, void 0, void 0, function* () { + const freeze_zuno_info = yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000); + if (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) { + out.status = SapiClassStatus.ZUNO_NO_FREEZE; + return; + } + out.type = SapiClassDetectType.ZUNO; + return; + }); + } + _detect_rcv_timout_async(out, timout) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._recvIncomingRequest(timout); + if (res.status != SapiClassStatus.OK) + return (false); + if (res.status == SapiClassStatus.OK && res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) { + if (res.data.length < 0x2) { + out.status = SapiClassStatus.ZUNO_START_WRONG_LENG; + return (true); + } + if (res.data[0x0] != 0xFF) { + out.status = SapiClassStatus.ZUNO_START_WRONG_FRAME; + return (true); + } + yield this._detect_rcv_freeze_zuno(out); + return (true); + } + if (res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED) { + out.type = SapiClassDetectType.RAZBERRY; + return (true); + } + return (false); + }); + } + _detect_rcv_timout(out, timout) { + return __awaiter(this, void 0, void 0, function* () { + const wait_timeout = Date.now() + timout; + while (wait_timeout > Date.now()) { + out.status = SapiClassStatus.OK; + if ((yield this._detect_rcv_timout_async(out, 200)) == true) + return; + const capabilities_info = yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, [], 300); + if (capabilities_info.status == SapiClassStatus.OK) { + //VendorID = 0x0115 and ProductTypeID = 0x0210 + if (capabilities_info.data.length >= 0x6 && capabilities_info.data[0x2] == 0x1 && capabilities_info.data[0x3] == 0x15 && capabilities_info.data[0x4] == 0x2 && capabilities_info.data[0x5] == 0x10) { + yield this._detect_rcv_freeze_zuno(out); + return; + } + out.type = SapiClassDetectType.RAZBERRY; + return; + } + if ((yield this._detect_rcv_timout_async(out, 200)) == true) //for old zuno + return; + } + out.status = SapiClassStatus.UPDATE_TIMEOUT; + }); + } + _detect_update(res) { + return __awaiter(this, void 0, void 0, function* () { + if (res.status != SapiClassStatus.OK) + return (SapiClassStatus.UPDATE_PROCESS); + if (res.cmd != SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) + return (SapiClassStatus.DETECTED_UNC_COMMAND); + if (res.data.length < 0x2) + return (SapiClassStatus.ZUNO_START_WRONG_LENG); + if (res.data[0x0] != 0x4 && res.data[0x1] != 0x1) + return (SapiClassStatus.ZUNO_START_WRONG_DATA); + return (SapiClassStatus.OK); + }); + } + _detect(out, baudrate, func) { + return __awaiter(this, void 0, void 0, function* () { + let i, res; + if (this.port == undefined) { + out.status = SapiClassStatus.PORT_NOT_REQUEST; + return; + } + if (this.b_open == true) { + out.status = yield this._close(); + if (out.status != SapiClassStatus.OK) + return; + yield (0, utilities_1.sleep)(this.dtr_timeout); + } + const baudrate_array = this.BAUDRATE; + i = baudrate.length; + while (i != 0x0) { + i--; + if (this.BAUDRATE.indexOf(baudrate[i]) != -1) { + baudrate_array.splice(baudrate_array.indexOf(baudrate[i]), 0x1); + baudrate_array.unshift(baudrate[i]); + } + } + i = 0x0; + while (i < baudrate_array.length) { + out.baudrate = baudrate_array[i]; + out.status = yield this._open(baudrate_array[i]); + if (out.status != SapiClassStatus.OK) + return; + const wait = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + yield this._detect_rcv_timout(wait, 1000); + if (wait.status == SapiClassStatus.OK) { + out.type = wait.type; + return; + } + if (wait.status != SapiClassStatus.UPDATE_TIMEOUT) { + out.status = wait.status; + return; + } + if (func != null) { + yield this._clear(); + if ((yield func()) == false) { + out.status = SapiClassStatus.DETECTED_CANCEL; + return; + } + const wait = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + yield this._detect_rcv_timout(wait, 2000); + if (wait.status == SapiClassStatus.OK) { + out.type = wait.type; + return; + } + if (wait.status != SapiClassStatus.UPDATE_TIMEOUT) { + out.status = wait.status; + return; + } + } + out.status = yield this._close(); + if (out.status != SapiClassStatus.OK) + return; + yield (0, utilities_1.sleep)(this.dtr_timeout); + i++; + } + out.status = SapiClassStatus.DETECTED_NOT_FIND; + }); + } + detect(baudrate, func) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate: 0x0 }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + this.b_busy = true; + yield this._detect(out, baudrate, func); + this.detect_type = out.type; + this.b_busy = false; + return (out); + }); + } + getQuantumSize() { + return (this.MAX_SEND_DATA_LENGHT); + } + _checkBootImage(addr) { + return __awaiter(this, void 0, void 0, function* () { + const data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF]; + yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x04].concat(data_addr), 100); + }); + } + _update_wait_zuno(target_type, out) { + return __awaiter(this, void 0, void 0, function* () { + const wait_timeout = Date.now() + 30000; + while (wait_timeout > Date.now()) { + const res = yield this._recvIncomingRequest(1000); + out.status = yield this._detect_update(res); + if (out.status == SapiClassStatus.UPDATE_TIMEOUT) + continue; + break; + } + if (target_type == SapiClassDetectType.RAZBERRY) { + yield (0, utilities_1.sleep)(20000); + const out_detect = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate: 0x0 }; + yield this._detect(out_detect, [115200], null); + out.type = out_detect.type; + out.status = out_detect.status; + return; + } + if (wait_timeout > Date.now()) { + yield this._detect_rcv_timout(out, wait_timeout - Date.now()); + return; + } + out.status = SapiClassStatus.UPDATE_TIMEOUT; + }); + } + _update_wait_razberry(target_type, out) { + return __awaiter(this, void 0, void 0, function* () { + if (target_type == SapiClassDetectType.RAZBERRY) { + yield this._detect_rcv_timout(out, 30000); + return; + } + yield (0, utilities_1.sleep)(20000); + const out_detect = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate: 0x0 }; + yield this._detect(out_detect, [115200], null); + out.type = out_detect.type; + out.status = out_detect.status; + }); + } + _update(addr, target_type, out) { + return __awaiter(this, void 0, void 0, function* () { + switch (this.detect_type) { + case SapiClassDetectType.ZUNO: + yield this._checkBootImage(addr); + yield this._update_wait_zuno(target_type, out); + break; + case SapiClassDetectType.RAZBERRY: + yield this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 200); + yield this._update_wait_razberry(target_type, out); + break; + default: + out.status = SapiClassStatus.UPDATE_UNK; + break; + } + }); + } + update(addr, target_type) { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + if (target_type == SapiClassDetectType.UNKNOWN) { + out.status = SapiClassStatus.DETECTED_UNC; + return (out); + } + this.b_busy = true; + yield this._update(addr, target_type, out); + this.detect_type = out.type; + this.b_busy = false; + if (out.status == SapiClassStatus.OK && out.type != target_type) { + out.status = SapiClassStatus.DETECTED_TARGET_TYPE; + return (out); + } + return (out); + }); + } + detect_rcv() { + return __awaiter(this, void 0, void 0, function* () { + const out = { status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN }; + if (this.busy() == true) { + out.status = SapiClassStatus.PORT_BUSY; + return (out); + } + if (this.detect_type == SapiClassDetectType.UNKNOWN) { + out.status = SapiClassStatus.DETECTED_UNC; + return (out); + } + this.b_busy = true; + const detect_type = this.detect_type; + yield this._detect_rcv_timout(out, 3000); + this.detect_type = out.type; + this.b_busy = false; + if (out.type != detect_type) { + out.status = SapiClassStatus.DETECTED_TARGET_TYPE; + return (out); + } + return (out); + }); + } + constructor() { + this.MAX_SEND_DATA_LENGHT = 0xA0; + this.SOF = 0x01; + this.ACK = 0x06; + this.NAK = 0x15; + this.CAN = 0x18; + this.REQUEST = 0x00; + this.RESPONSE = 0x01; + this.ADDITIONAL_SIZE = 0x03; + this.BAUDRATE = [115200, 230400, 460800, 921600]; + this.dtr_timeout = 250; // The time for the capacitor on the DTR line to recharge + this.RETRIES_CAN = 100; + this.b_busy = false; + this.state_lock = false; + this.b_open = false; + this.port = undefined; + this.queue = []; + this.async_ret = []; + this.detect_type = SapiClassDetectType.UNKNOWN; + } +} +exports.SapiClass = SapiClass; + + +/***/ }), + +/***/ "./src/sapi/zuno_sapi.ts": +/*!*******************************!*\ + !*** ./src/sapi/zuno_sapi.ts ***! + \*******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ZunoSapiClassStatus = exports.ZunoSapiClass = void 0; +const define_1 = __webpack_require__(/*! ../other/define */ "./src/other/define.ts"); +const sapi_1 = __webpack_require__(/*! ./sapi */ "./src/sapi/sapi.ts"); +const region_1 = __webpack_require__(/*! ./region */ "./src/sapi/region.ts"); +const utilities_1 = __webpack_require__(/*! ../other/utilities */ "./src/other/utilities.ts"); +const chip_1 = __webpack_require__(/*! ../hardware/chip */ "./src/hardware/chip.ts"); +var ELearnStatus; +(function (ELearnStatus) { + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_COMPLETE"] = 0] = "ELEARNSTATUS_ASSIGN_COMPLETE"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_NODEID_DONE"] = 1] = "ELEARNSTATUS_ASSIGN_NODEID_DONE"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE"] = 2] = "ELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_INFO_PENDING"] = 3] = "ELEARNSTATUS_ASSIGN_INFO_PENDING"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_ASSIGN_WAITING_FOR_FIND"] = 4] = "ELEARNSTATUS_ASSIGN_WAITING_FOR_FIND"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_SMART_START_IN_PROGRESS"] = 5] = "ELEARNSTATUS_SMART_START_IN_PROGRESS"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_LEARN_IN_PROGRESS"] = 6] = "ELEARNSTATUS_LEARN_IN_PROGRESS"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT"] = 7] = "ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED"] = 8] = "ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED"; + ELearnStatus[ELearnStatus["ELEARNSTATUS_PROCESS"] = -1] = "ELEARNSTATUS_PROCESS"; +})(ELearnStatus || (ELearnStatus = {})); +var ZunoSapiClassStatus; +(function (ZunoSapiClassStatus) { + ZunoSapiClassStatus[ZunoSapiClassStatus["OK"] = 0] = "OK"; + ZunoSapiClassStatus[ZunoSapiClassStatus["NOT_INIT"] = 35] = "NOT_INIT"; + ZunoSapiClassStatus[ZunoSapiClassStatus["WRONG_LENGTH_CMD"] = 36] = "WRONG_LENGTH_CMD"; + ZunoSapiClassStatus[ZunoSapiClassStatus["WRONG_STATUS"] = 37] = "WRONG_STATUS"; + ZunoSapiClassStatus[ZunoSapiClassStatus["WRONG_IN_DATA"] = 38] = "WRONG_IN_DATA"; + ZunoSapiClassStatus[ZunoSapiClassStatus["NO_FREEZE"] = 39] = "NO_FREEZE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["INVALID_ARG"] = 40] = "INVALID_ARG"; + ZunoSapiClassStatus[ZunoSapiClassStatus["TIMEOUT"] = 41] = "TIMEOUT"; + ZunoSapiClassStatus[ZunoSapiClassStatus["UN_SUPPORT"] = 42] = "UN_SUPPORT"; + ZunoSapiClassStatus[ZunoSapiClassStatus["TIMEOUT_FORCE_RESTART"] = 43] = "TIMEOUT_FORCE_RESTART"; + ZunoSapiClassStatus[ZunoSapiClassStatus["LEARN_EXCLUDE"] = 44] = "LEARN_EXCLUDE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["LEARN_INCLUDE"] = 45] = "LEARN_INCLUDE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_TOO_LONG"] = 46] = "SCETCH_TOO_LONG"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_PRIAMLE"] = 47] = "SCETCH_FALLED_PRIAMLE"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_CORE_VERSION"] = 48] = "SCETCH_FALLED_CORE_VERSION"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_REVISION"] = 49] = "SCETCH_FALLED_REVISION"; + ZunoSapiClassStatus[ZunoSapiClassStatus["SCETCH_FALLED_CRC16"] = 50] = "SCETCH_FALLED_CRC16"; +})(ZunoSapiClassStatus || (exports.ZunoSapiClassStatus = ZunoSapiClassStatus = {})); +// ------------------------------------------------------------------------------------------------------ +class ZunoSapiClass { + _get_param_info_default() { + const param_info = { + status: ZunoSapiClassStatus.NOT_INIT, freq_i: 0x0, raw: [], main_pow: 0x0, sec: false + }; + return (param_info); + } + _get_board_info_default() { + const board_info = { + status: ZunoSapiClassStatus.NOT_INIT, version: 0x0, build_number: 0x0, build_ts: 0x0, hw_rev: 0x0, code_size: 0x0, ram_size: 0x0, dbg_lock: 0x0, custom_code_offset: 0x30000, chip_uuid: new Uint8Array(), s2_pub: new Uint8Array(), + boot_offset: 0x3a000, boot_version: 0x0, max_default_power: 50, ext_nvm: 0x0, chip: { chip_type: chip_1.HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family: chip_1.HardwareChipClass.FAMILY_ZGM13, keys_hash: 0x8E19CC54, se_version: 0x0 }, + core_version: 0x0 + }; + return (board_info); + } + compile_zwave_qrcode(product_data, dsk, version) { + return __awaiter(this, void 0, void 0, function* () { + let protocol_map, text; + text = (0, utilities_1.conv2DecimalPadding)(product_data["s2_keys"], 3); + text = text + (0, utilities_1.conv2Decimal)(dsk, ""); + // #ProductType + text = text + "0010" + (0, utilities_1.conv2DecimalPadding)(product_data["device_type"], 5) + (0, utilities_1.conv2DecimalPadding)(product_data["device_icon"], 5); + // #ProductID + text = text + "0220" + (0, utilities_1.conv2DecimalPadding)(product_data["vendor"], 5) + (0, utilities_1.conv2DecimalPadding)(product_data["product_type"], 5) + (0, utilities_1.conv2DecimalPadding)(product_data["product_id"], 5) + (0, utilities_1.conv2DecimalPadding)(version, 5); + // # Supported Protocols + protocol_map = 0x01; + if (product_data["LR"] == true) + protocol_map = protocol_map | 0x02; + text += "0803" + (0, utilities_1.conv2DecimalPadding)(protocol_map, 3); + // # MaxInclusionInterval + text = text + "0403005"; // # ==5*128=640 + const buf = Uint8Array.from(unescape(encodeURIComponent(text)), c => c.charCodeAt(0)).buffer; + const digest = new Uint8Array(yield crypto.subtle.digest('SHA-1', buf)); + text = "9001" + (0, utilities_1.conv2DecimalPadding)((digest[0x0] << 0x8) | digest[0x1], 5) + text; + return (text); + }); + } + _readNVM(addr, size) { + return __awaiter(this, void 0, void 0, function* () { + return (yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF])); + }); + } + _writeNVM(addr, buff) { + return __awaiter(this, void 0, void 0, function* () { + const size = buff.length; + const data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF]; + return (yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(buff))); + }); + } + _get_param_info() { + return __awaiter(this, void 0, void 0, function* () { + this.param_info = this._get_param_info_default(); + const out = this.param_info; + const param_info = yield this._readNVM(0xFFE000, 0x09); + if (param_info.status != sapi_1.SapiClassStatus.OK) { + out.status = param_info.status; + return; + } + const param = param_info.data; + if (param.length < 0x5) { + out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; + return; + } + out.status = ZunoSapiClassStatus.OK; + out.raw = param; + out.freq_i = param_info.data[1]; + out.main_pow = param_info.data[2]; + if (param_info.data[4] != 0x0) + out.sec = true; + }); + } + _get_board_info_add() { + return __awaiter(this, void 0, void 0, function* () { + let code_sz_shift, shift_smrt, eu_lr, byte_i, bit_i; + this.board_info = this._get_board_info_default(); + const out = this.board_info; + const board_info = yield this._readNVM(0xFFFF00, 0x01); + if (board_info.status != sapi_1.SapiClassStatus.OK) { + out.status = board_info.status; + return; + } + const info = board_info.data; + if (info.length < 42) { + out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; + return; + } + out.status = ZunoSapiClassStatus.OK; + const version = ((info[0] << 8) | (info[1])); + out.core_version = version; + out.build_number = (info[2] << 24) | (info[3] << 16) | (info[4] << 8) | (info[5]); + out.version = (version << 16 | (out.build_number & 0xFFFF)); + out.build_ts = (info[6] << 24) | (info[7] << 16) | (info[8] << 8) | (info[9]); + out.hw_rev = (info[10] << 8) | (info[11]); + if (out.build_number > 1116) { + code_sz_shift = 0x1; + out.code_size = (0, utilities_1.costruct_int)(info.slice(12, 12 + 3), 3, false); + } + else { + code_sz_shift = 0x0; + out.code_size = (info[12] << 8) | (info[13]); + } + out.ram_size = (info[14 + code_sz_shift] << 8) | (info[15 + code_sz_shift]); + out.chip_uuid = new Uint8Array(info.slice(16 + code_sz_shift, 16 + code_sz_shift + 8)); + out.s2_pub = new Uint8Array(info.slice(24 + code_sz_shift, 24 + code_sz_shift + 16)); + out.dbg_lock = info[40 + code_sz_shift]; + const offset_base = 46; + if (info.length < offset_base) + return; + out.home_id = (0, utilities_1.costruct_int)(info.slice(41 + code_sz_shift, 41 + code_sz_shift + 4), 4, false); + out.node_id = info[45 + code_sz_shift]; + if (out.build_number < 1669) { + shift_smrt = 90; + if (info.length < (offset_base + code_sz_shift + shift_smrt)) + return; + out.smart_qr = (0, utilities_1.toString)(info.slice(46 + code_sz_shift, 46 + code_sz_shift + 90)); + } + else { + shift_smrt = 11; + if (info.length < (offset_base + code_sz_shift + shift_smrt)) + return; + out.zwdata = + { + s2_keys: info[46 + code_sz_shift], + device_type: (0, utilities_1.costruct_int)(info.slice(47 + code_sz_shift, 47 + code_sz_shift + 2), 2, false), + device_icon: (0, utilities_1.costruct_int)(info.slice(49 + code_sz_shift, 49 + code_sz_shift + 2), 2, false), + vendor: (0, utilities_1.costruct_int)(info.slice(51 + code_sz_shift, 51 + code_sz_shift + 2), 2, false), + product_type: (0, utilities_1.costruct_int)(info.slice(53 + code_sz_shift, 53 + code_sz_shift + 2), 2, false), + product_id: (0, utilities_1.costruct_int)(info.slice(55 + code_sz_shift, 55 + code_sz_shift + 2), 2, false), + version: version, + LR: false, + }; + out.smart_qr = yield this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version); + } + const offset_code = offset_base + code_sz_shift + shift_smrt; + if (info.length < (offset_code + 0x4)) + return; + out.custom_code_offset = (0, utilities_1.costruct_int)(info.slice(offset_code, offset_code + 0x4), 0x4, false); + if (out.custom_code_offset > 0x36000) + out.boot_offset = 0x40000; + const offset_prod = offset_code + 0x4; + if (info.length < (offset_prod + 0x10)) + return; + out.product = + { + prod_raw: new Uint8Array(info.slice(offset_prod, offset_prod + 0x10)), + prod_parent_uuid: new Uint8Array(info.slice(offset_prod, offset_prod + 0x8)), + prod_ts: (0, utilities_1.costruct_int)(info.slice(offset_prod + 0x8, offset_prod + 0x8 + 0x4), 0x4, true), + prod_sn: (0, utilities_1.costruct_int)(info.slice(offset_prod + 0x8 + 0x4, offset_prod + 0x8 + 0x4 + 0x3), 0x3, true), + prod_crc8: info[offset_prod + 0x8 + 0x4 + 0x3], + prod_valid: (info[offset_prod + 0x8 + 0x4 + 0x3] == (0, utilities_1.checksum)(info.slice(offset_prod, offset_prod + 0x10 - 0x1))) ? true : false + }; + const offset_license = offset_prod + 0x10; + if (info.length < (offset_license + 0xA)) + return; + out.license = + { + lic_subvendor: (0, utilities_1.costruct_int)(info.slice(offset_license, offset_license + 0x2), 0x2, false), + lic_flags_raw: new Uint8Array(info.slice(offset_license + 0x2, offset_license + 0x2 + 0x8)), + lic_flags: this.license_flags, + }; + byte_i = 0x0; + while (byte_i < out.license.lic_flags_raw.length) { + bit_i = 0x0; + while (bit_i < 0x8) { + if ((out.license.lic_flags_raw[byte_i] & (0x1 << bit_i)) != 0x0) { + if (out.license.lic_flags[byte_i * 0x8 + bit_i] != undefined) + out.license.lic_flags[byte_i * 0x8 + bit_i].active = true; + } + bit_i++; + } + byte_i++; + } + if (out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE] != undefined && out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE].active == true) { + if (out.version >= 0x30D124B) + eu_lr = true; + else + eu_lr = false; + this.region = new region_1.SapiRegionClass(true, eu_lr); + if (out.zwdata != undefined && this.param_info.status == ZunoSapiClassStatus.OK) { + const region = this.region.getNameRegion(this.param_info.freq_i); + if (region != undefined && this.region.isLr(region) == true) { + out.zwdata.LR = true; + out.smart_qr = yield this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version); + } + } + } + const offset_power = offset_license + 0xA; + if (info.length < (offset_power + 0x1)) + return; + out.max_default_power = info[offset_power]; + const offset_ext_nvm = offset_power + 0x1; + if (info.length < (offset_ext_nvm + 0x2)) + return; + out.ext_nvm = (0, utilities_1.costruct_int)(info.slice(offset_ext_nvm, offset_ext_nvm + 0x2), 0x2, false); + if (out.ext_nvm >= 512) + out.boot_offset = 0xA10000 + ((out.ext_nvm - 512) << 10); + const offset_chip = offset_ext_nvm + 0x2; + const size_chip = 0xA; + if (info.length < (offset_chip + size_chip)) + return; + out.chip = + { + chip_family: info[offset_chip], + chip_type: info[offset_chip + 0x1], + keys_hash: (0, utilities_1.costruct_int)(info.slice(offset_chip + 0x2, offset_chip + 0x2 + 0x4), 0x4, false), + se_version: (0, utilities_1.costruct_int)(info.slice(offset_chip + 0x2 + 0x4, offset_chip + 0x2 + 0x4 + 0x4), 0x4, false) + }; + const offset_boot_version = offset_chip + size_chip; + const size_boot_version = 0x4; + if (info.length < (offset_boot_version + size_boot_version)) + return; + out.boot_version = (0, utilities_1.costruct_int)(info.slice(offset_boot_version, offset_boot_version + size_boot_version), size_boot_version, false); + }); + } + _get_board_info() { + return __awaiter(this, void 0, void 0, function* () { + yield this._get_board_info_add(); + if (this.board_info.status != ZunoSapiClassStatus.OK) + return; + if (this.board_info.boot_version == 0x0) { + this.board_info.boot_version = 0x01090001; + } + if (this.board_info.chip.keys_hash == 0x0) { + this.board_info.chip.keys_hash = 0x8E19CC54; + this.board_info.chip.chip_type = chip_1.HardwareChipClass.CHIP_ZGM130S037HGN1; + this.board_info.chip.chip_family = chip_1.HardwareChipClass.FAMILY_ZGM13; + } + }); + } + _apply_param(raw) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._writeNVM(0xFFE000, raw); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + if (res.data.length < 0x1) + return (ZunoSapiClassStatus.WRONG_LENGTH_CMD); + if (res.data[0x0] != 0x1) + return (ZunoSapiClassStatus.WRONG_STATUS); + const soft_reset = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, []); + if (soft_reset.status != sapi_1.SapiClassStatus.OK) + return soft_reset.status; + const freeze_zuno_info = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000); + if (freeze_zuno_info.status != sapi_1.SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) + return (ZunoSapiClassStatus.NO_FREEZE); + return (ZunoSapiClassStatus.OK); + }); + } + _load_file(addr, data, process) { + return __awaiter(this, void 0, void 0, function* () { + let step, i, percentage, i_ask; + step = this.getQuantumSize(); + percentage = 0x0; + i = 0x0; + while (i < data.length) { + if (i + step > data.length) + step = data.length - i; + percentage = (i * 100.0) / data.length; + if (process != null) + process(percentage); + i_ask = 0x0; + for (;;) { + const status = yield this._writeNVM(addr, Array.from(data.subarray(i, i + step))); + if (status.status == sapi_1.SapiClassStatus.OK) + break; + if (i_ask >= 0x2) + return status.status; + if (status.status != sapi_1.SapiClassStatus.NO_ACK) + return status.status; + if (define_1.WEB_TOOLS_BETA == true) + console.error("second wind in renewal"); + i_ask++; + } + i = i + step; + addr = addr + step; + } + if (process != null && percentage < 100.00) + process(100.00); + return (ZunoSapiClassStatus.OK); + }); + } + updateFirmware(data, process, target_type) { + return __awaiter(this, void 0, void 0, function* () { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + const status = yield this._load_file(this.board_info.boot_offset, data, process); + if (status != ZunoSapiClassStatus.OK) + return (status); + const res = yield this.sapi.update(this.board_info.boot_offset, target_type); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + _pushSketch(addr, size, crc16) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(0x08, [0x01, (addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF, (crc16 >> 8) & 0xFF, (crc16) & 0xFF]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + if (res.data.length < 0x1) + return (ZunoSapiClassStatus.WRONG_LENGTH_CMD); + if (res.data[0x0] == 0xFE) + return (ZunoSapiClassStatus.SCETCH_FALLED_CRC16); + return (ZunoSapiClassStatus.OK); + }); + } + updateSketch(scetch, process) { + return __awaiter(this, void 0, void 0, function* () { + let status; + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (scetch.length > this.board_info.code_size) + return (ZunoSapiClassStatus.SCETCH_TOO_LONG); + const data_uint8 = scetch.slice(0, this.ZUNO_HEADER_PREAMBL.length); + const preamble = new TextDecoder().decode(data_uint8); + if (this.ZUNO_HEADER_PREAMBL != preamble) + return (ZunoSapiClassStatus.SCETCH_FALLED_PRIAMLE); + const header_version = (scetch[this.SK_HEADER_VERSION_MSB_OFFSET] << 8) | scetch[this.SK_HEADER_VERSION_LSB_OFFSET]; + if (header_version != this.board_info.core_version) + return (ZunoSapiClassStatus.SCETCH_FALLED_CORE_VERSION); + if (this.board_info.hw_rev != -1 && this.board_info.build_number >= 2849) { + const header_hw_rev = (0, utilities_1.costruct_int)(scetch.slice(this.SK_HEADER_HWREW_OFFSET, this.SK_HEADER_HWREW_OFFSET + 0x2), 2); + if (this.board_info.hw_rev != header_hw_rev) + return (ZunoSapiClassStatus.SCETCH_FALLED_REVISION); + } + status = yield this._load_file(this.board_info.custom_code_offset, scetch, process); + if (status != ZunoSapiClassStatus.OK) + return (status); + const crc16 = (0, utilities_1.calcSigmaCRC16)(0x1D0F, scetch, 0, scetch.length); + status = yield this._pushSketch(this.board_info.custom_code_offset, scetch.length, crc16); + return (status); + }); + } + getBoardInfo() { + return (this.board_info); + } + _isSupportRegionAndPower() { + if (this.param_info.status != ZunoSapiClassStatus.OK) + return (this.param_info.status); + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x3080517) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isMustResetDefault() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x30D124B) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportResetDefault() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x3080517) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportIncludeExclude() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.version < 0x30C108C) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportUpdateBootloader() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info.product == undefined) + return (ZunoSapiClassStatus.UN_SUPPORT); + if (this.board_info.product.prod_valid == false) + return (ZunoSapiClassStatus.UN_SUPPORT); + const prod_date = new Date(this.board_info.product.prod_ts * 1000); + if (prod_date.getUTCFullYear() <= 2022) + return (ZunoSapiClassStatus.UN_SUPPORT); + return (ZunoSapiClassStatus.OK); + } + isSupportDumpKey() { + if (this.board_info.status != ZunoSapiClassStatus.OK) + return (this.board_info.status); + if (this.board_info == undefined) + return (ZunoSapiClassStatus.UN_SUPPORT); + if (this.board_info.license == undefined) + return (ZunoSapiClassStatus.UN_SUPPORT); + if (this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2] != undefined && this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2].active == true) + return (ZunoSapiClassStatus.OK); + return (ZunoSapiClassStatus.UN_SUPPORT); + } + _test_dump_key(array) { + const empty_v1 = "00000000000000000000000000000000"; + const empty_v2 = "ffffffffffffffffffffffffffffffff"; + const key = (0, utilities_1.arrayToStringHex)(array); + if (key === empty_v1 || key === empty_v2) + return (false); + return (true); + } + readS2Key() { + return __awaiter(this, void 0, void 0, function* () { + let i; + const out = { status: ZunoSapiClassStatus.OK, list: [] }; + out.status = this.isSupportDumpKey(); + if (out.status != ZunoSapiClassStatus.OK) + return (out); + const dump_key_info = yield this._readNVM(0xFFCCC0, 0x40); + if (dump_key_info.status != sapi_1.SapiClassStatus.OK) { + out.status = dump_key_info.status; + return (out); + } + if (dump_key_info.data.length != 0x40) { + out.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD; + return (out); + } + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(0, 16)), name: this.KEY_UNAUTH_NAME }); + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(16, 32)), name: this.KEY_AUTH_NAME }); + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(32, 48)), name: this.KEY_ACCESS_NAME }); + out.list.push({ key: new Uint8Array(dump_key_info.data.slice(48, 64)), name: this.KEY_S0_NAME }); + i = 0x0; + while (i < out.list.length) { + if (this._test_dump_key(out.list[i].key) == false) + out.list[i].key = new Uint8Array([]); + i++; + } + return (out); + }); + } + getRegion() { + const out = { status: this._isSupportRegionAndPower(), region: "", region_array: this.region.getListRegion() }; + if (out.status != ZunoSapiClassStatus.OK) + return (out); + const region = this.region.getNameRegion(this.param_info.freq_i); + if (region == undefined) { + out.status = ZunoSapiClassStatus.WRONG_IN_DATA; + return (out); + } + out.region = region; + return (out); + } + setRegion(region) { + return __awaiter(this, void 0, void 0, function* () { + const status = this._isSupportRegionAndPower(); + if (status != ZunoSapiClassStatus.OK) + return (status); + const region_id = this.region.getIdRegion(region); + if (region_id == undefined) + return (ZunoSapiClassStatus.INVALID_ARG); + if (this.param_info.status != ZunoSapiClassStatus.OK) + return (this.param_info.status); + const raw = this.param_info.raw; + raw[0x1] = region_id; + if (raw.length > 0x8) + raw[0x8] = region_id; + return (yield this._apply_param(raw)); + }); + } + getPower() { + const out = { + status: this._isSupportRegionAndPower(), + power_raw: this.param_info.main_pow, + step: 0x1, + min: 1, + max: this.board_info.max_default_power, + }; + if (out.status != ZunoSapiClassStatus.OK) + return (out); + return (out); + } + getSec() { + const out = { + status: this._isSupportRegionAndPower(), + sec: this.param_info.sec, + }; + if (out.status != ZunoSapiClassStatus.OK) + return (out); + return (out); + } + setSec(sec) { + return __awaiter(this, void 0, void 0, function* () { + const status = this._isSupportRegionAndPower(); + if (status != ZunoSapiClassStatus.OK) + return (status); + const raw = this.param_info.raw; + if (sec == true) + raw[0x4] = 0x1; + else + raw[0x4] = 0x0; + return (yield this._apply_param(raw)); + }); + } + setPower(power) { + return __awaiter(this, void 0, void 0, function* () { + const status = this._isSupportRegionAndPower(); + if (status != ZunoSapiClassStatus.OK) + return (status); + const raw = this.param_info.raw; + raw[0x2] = power; + return (yield this._apply_param(raw)); + }); + } + enableNif() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x0A]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + enableEvent() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x09, 0x1]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + _enableLearn_get_status() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.recvIncomingRequest(1000); + if (res.status != sapi_1.SapiClassStatus.OK) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + if (res.cmd != sapi_1.SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + if (res.data.length < 0x3) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + if (res.data[0x1] != 0xA0) + return (ELearnStatus.ELEARNSTATUS_PROCESS); + return (res.data[0x2]); + }); + } + _enableLearn_include() { + return __awaiter(this, void 0, void 0, function* () { + let retries; + const wait_timeout = Date.now() + ((30 + 0x1) * 1000); + retries = 0x0; + while (wait_timeout > Date.now()) { + switch (yield this._enableLearn_get_status()) { + case ELearnStatus.ELEARNSTATUS_PROCESS: + retries++; + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: + retries = 0x0; + break; + default: + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + break; + } + if (retries >= 0x3) + return (ZunoSapiClassStatus.LEARN_INCLUDE); + } + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + }); + } + _enableLearn_exlude() { + return __awaiter(this, void 0, void 0, function* () { + let retries; + retries = 0x0; + while (retries < 0x3) { + retries++; + switch (yield this._enableLearn_get_status()) { + case ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE: + break; + case ELearnStatus.ELEARNSTATUS_PROCESS: + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: + return (yield this._enableLearn_include()); + break; + } + } + return (ZunoSapiClassStatus.LEARN_EXCLUDE); + }); + } + enableLearn(timeout) { + return __awaiter(this, void 0, void 0, function* () { + let detect_wait, status; + timeout = timeout & 0xFF; + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x07, timeout & 0xFF, 0x1 & 0xFF]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + const wait_timeout = Date.now() + ((timeout + 0x1) * 1000); + this.lock(); + while (wait_timeout > Date.now()) { + switch (yield this._enableLearn_get_status()) { + case ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT: + this.unlock(); + detect_wait = yield this.sapi.detect_rcv(); + if (detect_wait.status != sapi_1.SapiClassStatus.OK) + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + return (ZunoSapiClassStatus.TIMEOUT); + break; + case ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED: + this.unlock(); + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE: + status = yield this._enableLearn_exlude(); + this.unlock(); + return (status); + break; + case ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE: + status = yield this._enableLearn_include(); + this.unlock(); + return (status); + break; + } + } + this.unlock(); + return (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART); + }); + } + setDefault() { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this.sapi.sendCommandUnSz(sapi_1.SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x5]); + if (res.status != sapi_1.SapiClassStatus.OK) + return res.status; + return (ZunoSapiClassStatus.OK); + }); + } + getQuantumSize() { + return (this.sapi.getQuantumSize()); + } + lock() { + return (this.sapi.lock()); + } + unlock() { + return (this.sapi.unlock()); + } + is_busy() { + return (this.sapi.is_busy()); + } + connect() { + return __awaiter(this, void 0, void 0, function* () { + this.region = new region_1.SapiRegionClass(); + yield this._get_param_info(); + yield this._get_board_info(); + // await this._begin(true); + }); + } + detect(baudrate, func) { + return __awaiter(this, void 0, void 0, function* () { + return (yield this.sapi.detect(baudrate, func)); + }); + } + constructor(sapi) { + this.KEY_UNAUTH_NAME = "unauth"; + this.KEY_AUTH_NAME = "auth"; + this.KEY_ACCESS_NAME = "access"; + this.KEY_S0_NAME = "s0"; + this.ZUNO_HEADER_PREAMBL = "ZMEZUNOC"; + this.SK_HEADER_SIZE = 0xC0; + this.SK_HEADER_VERSION_MSB_OFFSET = 0x08; + this.SK_HEADER_VERSION_LSB_OFFSET = 0x09; + this.SK_HEADER_NAME_START = 56; + this.SK_HEADER_MAX_NAME = 47; + this.SK_HEADER_HWREW_OFFSET = this.SK_HEADER_NAME_START + this.SK_HEADER_MAX_NAME + 1; + this.LICENSE_KEY_DUMP_S2 = 0x1; + this.LICENSE_KEY_LONG_RANGE = 0x5; + this.license_flags = { + 0x00: { name: "Pti", title: "Provides Packet Trace Interface (PTI) capabilities. Turns ZUno to advanced sniffer.", active: false }, + 0x01: { name: "Key dump", title: "Enables Z-Wave network key dump using Z-Uno.", active: false }, + 0x02: { name: "Custom vendor", title: "Use custom vendor code intead of 0115 (ZME)", active: false }, + 0x03: { name: "Modem", title: "ZUno works as direct transmitter.", active: false }, + 0x04: { name: "Max power", title: "User is able to use the maximum power of radio amplifier.", active: false }, + 0x05: { name: "Long Range", title: "Enables Z-Wave LongRange technology support.", active: false }, + }; + this.board_info = this._get_board_info_default(); + this.param_info = this._get_param_info_default(); + this.region = new region_1.SapiRegionClass(); + this.sapi = sapi; + } +} +exports.ZunoSapiClass = ZunoSapiClass; + + +/***/ }), + +/***/ "./src/ui_define.ts": +/*!**************************!*\ + !*** ./src/ui_define.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.NAME_APP_VERSION_FULL = exports.TABLE_NAME_LICENSE_NO = exports.TABLE_NAME_LICENSE_YES = exports.ControllerUiDefineClass = void 0; +const define_1 = __webpack_require__(/*! ./other/define */ "./src/other/define.ts"); +const TABLE_NAME_LICENSE_YES = ''; +exports.TABLE_NAME_LICENSE_YES = TABLE_NAME_LICENSE_YES; +const TABLE_NAME_LICENSE_NO = ''; +exports.TABLE_NAME_LICENSE_NO = TABLE_NAME_LICENSE_NO; +var ControllerUiDefineClass; +(function (ControllerUiDefineClass) { + ControllerUiDefineClass["NAME_APP"] = "SerialAPIWebTools"; + ControllerUiDefineClass["KEY_INCLUDE_EXCLUDE_TIMEOUT"] = "SerialAPIWebTools_info_include_exlude_timout"; + ControllerUiDefineClass["KEY_BAUDRATE"] = "SerialAPIWebTools_baudrate_cache"; + ControllerUiDefineClass["KEY_DETECTION_SYNC_MANUAL"] = "SerialAPIWebTools_detection_sync_manual"; + ControllerUiDefineClass["KEY_UPDATE_BETA"] = "SerialAPIWebTools_update_beta"; + ControllerUiDefineClass["STORAGE_VALUE_TRUE"] = "true"; + ControllerUiDefineClass["STORAGE_VALUE_FALSE"] = "false"; +})(ControllerUiDefineClass || (exports.ControllerUiDefineClass = ControllerUiDefineClass = {})); +const NAME_APP_VERSION_FULL = ControllerUiDefineClass.NAME_APP + " " + define_1.WEB_TOOLS_VERSION; +exports.NAME_APP_VERSION_FULL = NAME_APP_VERSION_FULL; + + +/***/ }), + +/***/ "./src/z-uno-compiler.ts": +/*!*******************************!*\ + !*** ./src/z-uno-compiler.ts ***! + \*******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ZUnoCompilerClass = void 0; +const qrcode_1 = __webpack_require__(/*! ./qr_code/qrcode */ "./src/qr_code/qrcode.js"); +const ui_define_1 = __webpack_require__(/*! ./ui_define */ "./src/ui_define.ts"); +const sapi_1 = __webpack_require__(/*! ./sapi/sapi */ "./src/sapi/sapi.ts"); +const zuno_sapi_1 = __webpack_require__(/*! ./sapi/zuno_sapi */ "./src/sapi/zuno_sapi.ts"); +const ui_lang_define_1 = __webpack_require__(/*! ./lang/ui_lang_define */ "./src/lang/ui_lang_define.ts"); +const ui_lang_1 = __webpack_require__(/*! ./lang/ui_lang */ "./src/lang/ui_lang.ts"); +const utilities_1 = __webpack_require__(/*! ./other/utilities */ "./src/other/utilities.ts"); +const region_1 = __webpack_require__(/*! ./sapi/region */ "./src/sapi/region.ts"); +var XhrStatus; +(function (XhrStatus) { + XhrStatus[XhrStatus["OK"] = 0] = "OK"; + XhrStatus[XhrStatus["TIMEOUT"] = 1] = "TIMEOUT"; + XhrStatus[XhrStatus["ERROR"] = 2] = "ERROR"; + XhrStatus[XhrStatus["INVALID_DATA"] = 3] = "INVALID_DATA"; +})(XhrStatus || (XhrStatus = {})); +class ZUnoCompilerClass { + _progress(severity, txt) { + if (this.progressCbk == null) + return; + this.progressCbk(severity, txt); + } + _close() { + return __awaiter(this, void 0, void 0, function* () { + this.xhr_version.abort(); + this.xhr_compile.abort(); + this.xhr_download_finware.abort(); + yield this.sapi.close(); + }); + } + _info(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this._progress("info", txt); + } + _info_wait(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this._info(txt + "..."); + } + _info_done(txt) { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + this._info(txt + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_DONE)); + } + _error(txt) { + return __awaiter(this, void 0, void 0, function* () { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + txt = txt + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED); + this._progress("error", txt); + yield this._close(); + throw new Error(txt); + }); + } + _error_code(txt, code) { + return __awaiter(this, void 0, void 0, function* () { + if (typeof txt !== "string") + txt = this.locale.getLocale(txt); + txt = txt + this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_FAILED_CODE).replace('{{code}}', code.toString()); + this._progress("error", txt); + yield this._close(); + throw new Error(txt); + }); + } + _get_baudrate_cache() { + let baudrate, i; + const baudrate_str = localStorage.getItem(ui_define_1.ControllerUiDefineClass.KEY_BAUDRATE); + if (baudrate_str == null) + return ([]); + try { + baudrate = JSON.parse(baudrate_str); + } + catch (error) { + return ([]); + } + if (Array.isArray(baudrate) == false) + return ([]); + i = 0x0; + while (i < baudrate.length) { + if (this.sapi.BAUDRATE.indexOf(baudrate[i]) == -1) + baudrate.splice(i, 0x1); + i++; + } + return (baudrate); + } + _set_baudrate_cache(baudrate_array, baudrate) { + const i = baudrate_array.indexOf(baudrate); + if (i != -1) + baudrate_array.splice(i, 0x1); + baudrate_array.unshift(baudrate); + localStorage.setItem(ui_define_1.ControllerUiDefineClass.KEY_BAUDRATE, JSON.stringify(baudrate_array)); + } + _xhr(xhr, url, data) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(function (resolve) { + const out = { status: XhrStatus.OK, error: "", url: 'https://service.z-wave.me/z-uno-compilation-server/?' + url, data: "" }; + xhr.open("POST", out.url); + xhr.responseType = 'json'; + xhr.timeout = 30000; //30 sec + xhr.ontimeout = function () { + out.status = XhrStatus.TIMEOUT; + resolve(out); + }; + xhr.onload = function () { + out.data = xhr.response; + resolve(out); + }; + xhr.onerror = function () { + out.status = XhrStatus.ERROR; + resolve(out); + }; + xhr.send(data); + }); + }); + } + _xhr_common(xhr, url, data) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._xhr(xhr, url, data); + if (res.status == XhrStatus.OK) + return (res); + if (res.status == XhrStatus.TIMEOUT) { + res.error = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_TIMEOUT).replace('{{url}}', res.url); + return (res); + } + res.error = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_ERROR).replace('{{url}}', res.url); + return (res); + }); + } + _xhr_build_number(hw_str) { + return __awaiter(this, void 0, void 0, function* () { + const res = yield this._xhr_common(this.xhr_version, 'version', null); + const out = { res: res, build_number: 0x0 }; + if (res.status != XhrStatus.OK) + return (out); + try { + const result = res.data; + if (result["status"] != 0x0) { + out.res.status = XhrStatus.INVALID_DATA; + out.res.error = "Get version returned incorrect status: " + result["status"] + " message: " + result["message"]; + return (out); + } + const version_list = result["version"]["hw"]; + const build_number = version_list[hw_str].seq; + if (build_number === undefined) { + out.res.status = XhrStatus.INVALID_DATA; + out.res.error = "The server does not support the specified board revision"; + return (out); + } + out.build_number = build_number; + } + catch (error) { + out.res.status = XhrStatus.INVALID_DATA; + out.res.error = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url); + return (out); + } + return (out); + }); + } + _xhr_download_finware(hw_str, build_number) { + return __awaiter(this, void 0, void 0, function* () { + const url = 'bootloader&' + 'hw=' + hw_str + "&seq=" + String(build_number); + const res = yield this._xhr_common(this.xhr_download_finware, url, null); + const out = { res: res, bin: new Uint8Array() }; + if (res.status != XhrStatus.OK) + return (out); + try { + const result = res.data; + if (result["status"] != 0x0) { + out.res.status = XhrStatus.INVALID_DATA; + out.res.error = "Get bootloader returned incorrect status: " + result["status"] + " log: " + result["log"] + " message: " + result["message"]; + return (out); + } + out.bin = this._base64ToArrayBuffer(result["bin"]); + } + catch (error) { + out.res.status = XhrStatus.INVALID_DATA; + out.res.error = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url); + return (out); + } + return (out); + }); + } + _base64ToArrayBuffer(base64) { + const binaryString = atob(base64); + const bytes = new Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return new Uint8Array(bytes); + } + _xhr_compile(hw_str, code) { + return __awaiter(this, void 0, void 0, function* () { + const formData = new FormData(); + formData.append("sketch", new File([new Blob([code])], "sketch", { lastModified: Date.now(), type: "text/x-arduino" })); + formData.append("referer", document.location.href); + const url = 'compile&' + 'hw=' + hw_str; + const res = yield this._xhr_common(this.xhr_compile, url, formData); + const out = { res: res, bin: new Uint8Array() }; + if (res.status != XhrStatus.OK) + return (out); + try { + const result = res.data; + if (result["status"] != 0x0) { + out.res.status = XhrStatus.INVALID_DATA; + out.res.error = "Compilation returned incorrect status: " + result["status"] + " log: " + result["log"] + " message: " + result["message"]; + return (out); + } + out.bin = this._base64ToArrayBuffer(result["bin"]); + } + catch (error) { + out.res.status = XhrStatus.INVALID_DATA; + out.res.error = this.locale.getLocale(ui_lang_define_1.ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url); + return (out); + } + return (out); + }); + } + _sketch(code, freq, sec, main_pow) { + return __awaiter(this, void 0, void 0, function* () { + let hw_str, board_info, detect_dict; + this._info(ui_define_1.NAME_APP_VERSION_FULL); + const status = yield this.sapi.request(this.COM_PORT_FILTERS); + if (status == sapi_1.SapiClassStatus.SERIAL_UN_SUPPORT) + return (this._error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER)); + if (status == sapi_1.SapiClassStatus.REQUEST_NO_SELECT) + return (this._error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT)); + if (status != sapi_1.SapiClassStatus.OK) + return (this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_PORT_SELECT, status)); + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION); + const baudrate_array = this._get_baudrate_cache(); + detect_dict = yield this.sapi.detect(baudrate_array, null); + if (detect_dict.status != sapi_1.SapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); + return; + } + this._set_baudrate_cache(baudrate_array, detect_dict.baudrate); + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION); + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + if (this.sapi.type() != sapi_1.SapiClassDetectType.ZUNO) { + this._error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + return; + } + yield this.zuno.connect(); + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + board_info = this.zuno.getBoardInfo(); + if (board_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + const region_info = this.zuno.getRegion(); + if (region_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_REGION); + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER); + const power = this.zuno.getPower(); + if (power.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER, power.status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_POWER); + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_SEC); + const sec_info = this.zuno.getSec(); + if (sec_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_SEC, sec_info.status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_READ_SEC); + if (freq != null && freq != region_info.region) { + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + const set_region_status = yield this.zuno.setRegion(freq); + if (set_region_status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION, set_region_status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_REGION); + } + if (main_pow < power.min || main_pow > power.max) { + this._error("Radio power is out of range"); + return; + } + if (power.power_raw != main_pow) { + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER); + const set_power_status = yield this.zuno.setPower(main_pow); + if (set_power_status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER, set_power_status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_POWER); + } + if (sec_info.sec != sec) { + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_SEC); + const set_power_status = yield this.zuno.setSec(sec); + if (set_power_status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_SEC, set_power_status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_SET_SEC); + } + hw_str = board_info.hw_rev.toString(0x10); + while (hw_str.length < 0x4) + hw_str = '0' + hw_str; + const promise_compile = this._xhr_compile(hw_str, code); + this._info_wait("Checking Z-Uno version"); + const res_build_number = yield this._xhr_build_number(hw_str); + if (res_build_number.res.status != XhrStatus.OK) { + this._error(res_build_number.res.error); + return; + } + if (board_info.build_number > res_build_number.build_number) { + this._error("The firmware on the board is newer than on the server"); + return; + } + this._info_done("Checking Z-Uno version"); + if (board_info.build_number != res_build_number.build_number) { + this._info_wait("Downloading new firmware"); + const res_download_finware = yield this._xhr_download_finware(hw_str, res_build_number.build_number); + if (res_download_finware.res.status != XhrStatus.OK) { + this._error(res_download_finware.res.error); + return; + } + this._info_done("Downloading new firmware"); + this._info_wait("Uploading a new firmware to the Z-Uno"); + const status = yield this.zuno.updateFirmware(res_download_finware.bin, null, sapi_1.SapiClassDetectType.ZUNO); + if (status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code("Uploading a new firmware to the Z-Uno", status); + return; + } + yield this.zuno.connect(); + this._info_done("Uploading a new firmware to the Z-Uno"); + this._info_wait(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + board_info = this.zuno.getBoardInfo(); + if (board_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); + return; + } + this._info_done(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO); + if (res_build_number.build_number != board_info.build_number) { + this._error("Although the firmware was successfully updated, the actual version was no longer needed"); + return; + } + } + this._info_wait("Compiling the sketch"); + const res_compile = yield promise_compile; + if (res_compile.res.status != XhrStatus.OK) { + this.error_complite = true; + this._error(res_compile.res.error); + return; + } + this._info_done("Compiling the sketch"); + this._info_wait("Uploading the sketch"); + const status_upload_scetch = yield this.zuno.updateSketch(res_compile.bin, null); + if (status_upload_scetch != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code("Uploading the sketch", status_upload_scetch); + return; + } + this._info_done("Uploading the sketch"); + this._info_wait("QR code read"); + yield this._close(); + detect_dict = yield this.sapi.detect([detect_dict.baudrate], null); + if (detect_dict.status != sapi_1.SapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status); + return; + } + if (this.sapi.type() != sapi_1.SapiClassDetectType.ZUNO) { + this._error(ui_lang_define_1.ControllerUiLangClassId.MESSAGE_CONNECT); + return; + } + yield this.zuno.connect(); + board_info = this.zuno.getBoardInfo(); + if (board_info.status != zuno_sapi_1.ZunoSapiClassStatus.OK) { + this._error_code(ui_lang_define_1.ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status); + return; + } + yield this._close(); + this._info_done("QR code read"); + const out = { smart_qr: board_info.smart_qr, dsk: (0, utilities_1.conv2Decimal)(board_info.s2_pub, " - ") }; + return (out); + }); + } + _generateQrCode(id, text) { + let obj_QRCode; + const option = { + text: text, + width: 256, + height: 256, + colorDark: "#000000", + colorLight: "#ffffff", + correctLevel: 1 /* QRErrorCorrectLevel.L */, + }; + try { + obj_QRCode = new qrcode_1.QRCode(id, option); + } + catch (e) { + this._progress("error", "Failed to create \"object QRCode\", check parameters."); + return (false); + } + return (true); + } + /** + * Draw the QR code of the board + * + * @param {*} id Id of the div tag that will host the QR-code image + * @param {*} qrContent Content of the QR-code to be printed + */ + drawQR(id, text) { + return (this._generateQrCode(id, text)); + } + cancel() { + this._close(); + } + errorComplite() { + return this.error_complite; + } + getWait() { + return (this.promise_wait); + } + /** + * + * @returns List freq + */ + static getFreqList() { + const region = new region_1.SapiRegionClass(true, true); + return (region.getListRegion()); + } + constructor(code, freq, sec, main_pow, cbk = null) { + this.sapi = new sapi_1.SapiClass(); + this.zuno = new zuno_sapi_1.ZunoSapiClass(this.sapi); + this.locale = new ui_lang_1.ControllerUiLangClass(); + this.COM_PORT_FILTERS = [{ usbVendorId: 0x10c4, usbProductId: 0xea60 }]; + this.xhr_version = new XMLHttpRequest(); + this.xhr_compile = new XMLHttpRequest(); + this.xhr_download_finware = new XMLHttpRequest(); + this.error_complite = false; + this.progressCbk = cbk; + this.promise_wait = this._sketch(code, freq, sec, main_pow); + } +} +exports.ZUnoCompilerClass = ZUnoCompilerClass; + + +/***/ }), + +/***/ "./src/qr_code/qrcode.js": +/*!*******************************!*\ + !*** ./src/qr_code/qrcode.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ QRCode: () => (/* binding */ QRCode) +/* harmony export */ }); +/** + * @fileoverview + * - Using the 'QRCode for Javascript library' + * - Fixed dataset of 'QRCode for Javascript library' for support full-spec. + * - this library has no dependencies. + * + * @author davidshimjs + * @see http://www.d-project.com/ + * @see http://jeromeetienne.github.com/jquery-qrcode/ + */ + +var QRCode; + +(function () { + //--------------------------------------------------------------------- + // QRCode for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word "QR Code" is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + this.parsedData = []; + + // Added to support UTF-8 Characters + for (var i = 0, l = this.data.length; i < l; i++) { + var byteArray = []; + var code = this.data.charCodeAt(i); + + if (code > 0x10000) { + byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); + byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); + byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[3] = 0x80 | (code & 0x3F); + } else if (code > 0x800) { + byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); + byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[2] = 0x80 | (code & 0x3F); + } else if (code > 0x80) { + byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); + byteArray[1] = 0x80 | (code & 0x3F); + } else { + byteArray[0] = code; + } + + this.parsedData.push(byteArray); + } + + this.parsedData = Array.prototype.concat.apply([], this.parsedData); + + if (this.parsedData.length != this.data.length) { + this.parsedData.unshift(191); + this.parsedData.unshift(187); + this.parsedData.unshift(239); + } + } + + QR8bitByte.prototype = { + getLength: function (buffer) { + return this.parsedData.length; + }, + write: function (buffer) { + for (var i = 0, l = this.parsedData.length; i < l; i++) { + buffer.put(this.parsedData[i], 8); + } + } + }; + + function QRCodeModel(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = []; + } + + QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);} + return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);} + if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);} + this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}} + return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;} + for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}} + for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}} + this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);} + var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;} + this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}} + row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error("code length overflow. (" + +buffer.getLengthInBits() + +">" + +totalDataCount*8 + +")");} + if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);} + while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);} + while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;} + buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;} + buffer.put(QRCodeModel.PAD1,8);} + return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}} + var totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));} + return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));} + return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;} + return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}} + for(var row=0;row=256){n-=255;} + return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);} + if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));} + this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]]; + + function _isSupportCanvas() { + return typeof CanvasRenderingContext2D != "undefined"; + } + + // android 2.x doesn't support Data-URI spec + function _getAndroid() { + var android = false; + var sAgent = navigator.userAgent; + + if (/android/i.test(sAgent)) { // android + android = true; + var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i); + + if (aMat && aMat[1]) { + android = parseFloat(aMat[1]); + } + } + + return android; + } + + var svgDrawer = (function() { + + var Drawing = function (el, htOption) { + this._el = el; + this._htOption = htOption; + }; + + Drawing.prototype.draw = function (oQRCode) { + var _htOption = this._htOption; + var _el = this._el; + var nCount = oQRCode.getModuleCount(); + var nWidth = Math.floor(_htOption.width / nCount); + var nHeight = Math.floor(_htOption.height / nCount); + + this.clear(); + + function makeSVG(tag, attrs) { + var el = document.createElementNS('http://www.w3.org/2000/svg', tag); + for (var k in attrs) + if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]); + return el; + } + + var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight}); + svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + _el.appendChild(svg); + + svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"})); + svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"})); + + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + if (oQRCode.isDark(row, col)) { + var child = makeSVG("use", {"x": String(row), "y": String(col)}); + child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template") + svg.appendChild(child); + } + } + } + }; + Drawing.prototype.clear = function () { + while (this._el.hasChildNodes()) + this._el.removeChild(this._el.lastChild); + }; + return Drawing; + })(); + + var useSVG = document.documentElement.tagName.toLowerCase() === "svg"; + + // Drawing in DOM by using Table tag + var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () { + var Drawing = function (el, htOption) { + this._el = el; + this._htOption = htOption; + }; + + /** + * Draw the QRCode + * + * @param {QRCode} oQRCode + */ + Drawing.prototype.draw = function (oQRCode) { + var _htOption = this._htOption; + var _el = this._el; + var nCount = oQRCode.getModuleCount(); + var nWidth = Math.floor(_htOption.width / nCount); + var nHeight = Math.floor(_htOption.height / nCount); + var aHTML = ['']; + + for (var row = 0; row < nCount; row++) { + aHTML.push(''); + + for (var col = 0; col < nCount; col++) { + aHTML.push(''); + } + + aHTML.push(''); + } + + aHTML.push('
'); + _el.innerHTML = aHTML.join(''); + + // Fix the margin values as real size. + var elTable = _el.childNodes[0]; + var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2; + var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2; + + if (nLeftMarginTable > 0 && nTopMarginTable > 0) { + elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px"; + } + }; + + /** + * Clear the QRCode + */ + Drawing.prototype.clear = function () { + this._el.innerHTML = ''; + }; + + return Drawing; + })() : (function () { // Drawing in Canvas + function _onMakeImage() { + this._elImage.src = this._elCanvas.toDataURL("image/png"); + this._elImage.style.display = "block"; + this._elCanvas.style.display = "none"; + } + + // Android 2.1 bug workaround + // http://code.google.com/p/android/issues/detail?id=5141 + if (this != undefined && this._android && this._android <= 2.1) { + var factor = 1 / window.devicePixelRatio; + var drawImage = CanvasRenderingContext2D.prototype.drawImage; + CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) { + if (("nodeName" in image) && /img/i.test(image.nodeName)) { + for (var i = arguments.length - 1; i >= 1; i--) { + arguments[i] = arguments[i] * factor; + } + } else if (typeof dw == "undefined") { + arguments[1] *= factor; + arguments[2] *= factor; + arguments[3] *= factor; + arguments[4] *= factor; + } + + drawImage.apply(this, arguments); + }; + } + + /** + * Check whether the user's browser supports Data URI or not + * + * @private + * @param {Function} fSuccess Occurs if it supports Data URI + * @param {Function} fFail Occurs if it doesn't support Data URI + */ + function _safeSetDataURI(fSuccess, fFail) { + var self = this; + self._fFail = fFail; + self._fSuccess = fSuccess; + + // Check it just once + if (self._bSupportDataURI === null) { + var el = document.createElement("img"); + var fOnError = function() { + self._bSupportDataURI = false; + + if (self._fFail) { + self._fFail.call(self); + } + }; + var fOnSuccess = function() { + self._bSupportDataURI = true; + + if (self._fSuccess) { + self._fSuccess.call(self); + } + }; + + el.onabort = fOnError; + el.onerror = fOnError; + el.onload = fOnSuccess; + el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data. + return; + } else if (self._bSupportDataURI === true && self._fSuccess) { + self._fSuccess.call(self); + } else if (self._bSupportDataURI === false && self._fFail) { + self._fFail.call(self); + } + }; + + /** + * Drawing QRCode by using canvas + * + * @constructor + * @param {HTMLElement} el + * @param {Object} htOption QRCode Options + */ + var Drawing = function (el, htOption) { + this._bIsPainted = false; + this._android = _getAndroid(); + + this._htOption = htOption; + this._elCanvas = document.createElement("canvas"); + this._elCanvas.width = htOption.width; + this._elCanvas.height = htOption.height; + el.appendChild(this._elCanvas); + this._el = el; + this._oContext = this._elCanvas.getContext("2d"); + this._bIsPainted = false; + this._elImage = document.createElement("img"); + this._elImage.alt = "Scan me!"; + this._elImage.style.display = "none"; + this._el.appendChild(this._elImage); + this._bSupportDataURI = null; + }; + + /** + * Draw the QRCode + * + * @param {QRCode} oQRCode + */ + Drawing.prototype.draw = function (oQRCode) { + var _elImage = this._elImage; + var _oContext = this._oContext; + var _htOption = this._htOption; + + var nCount = oQRCode.getModuleCount(); + var nWidth = _htOption.width / nCount; + var nHeight = _htOption.height / nCount; + var nRoundedWidth = Math.round(nWidth); + var nRoundedHeight = Math.round(nHeight); + + _elImage.style.display = "none"; + this.clear(); + + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + var bIsDark = oQRCode.isDark(row, col); + var nLeft = col * nWidth; + var nTop = row * nHeight; + _oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; + _oContext.lineWidth = 1; + _oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; + _oContext.fillRect(nLeft, nTop, nWidth, nHeight); + + // 안티 앨리어싱 방지 처리 + _oContext.strokeRect( + Math.floor(nLeft) + 0.5, + Math.floor(nTop) + 0.5, + nRoundedWidth, + nRoundedHeight + ); + + _oContext.strokeRect( + Math.ceil(nLeft) - 0.5, + Math.ceil(nTop) - 0.5, + nRoundedWidth, + nRoundedHeight + ); + } + } + + this._bIsPainted = true; + }; + + /** + * Make the image from Canvas if the browser supports Data URI. + */ + Drawing.prototype.makeImage = function () { + if (this._bIsPainted) { + _safeSetDataURI.call(this, _onMakeImage); + } + }; + + /** + * Return whether the QRCode is painted or not + * + * @return {Boolean} + */ + Drawing.prototype.isPainted = function () { + return this._bIsPainted; + }; + + /** + * Clear the QRCode + */ + Drawing.prototype.clear = function () { + this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height); + this._bIsPainted = false; + }; + + /** + * @private + * @param {Number} nNumber + */ + Drawing.prototype.round = function (nNumber) { + if (!nNumber) { + return nNumber; + } + + return Math.floor(nNumber * 1000) / 1000; + }; + + return Drawing; + })(); + + /** + * Get the type by string length + * + * @private + * @param {String} sText + * @param {Number} nCorrectLevel + * @return {Number} type + */ + function _getTypeNumber(sText, nCorrectLevel) { + var nType = 1; + var length = _getUTF8Length(sText); + + for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) { + var nLimit = 0; + + switch (nCorrectLevel) { + case QRErrorCorrectLevel.L : + nLimit = QRCodeLimitLength[i][0]; + break; + case QRErrorCorrectLevel.M : + nLimit = QRCodeLimitLength[i][1]; + break; + case QRErrorCorrectLevel.Q : + nLimit = QRCodeLimitLength[i][2]; + break; + case QRErrorCorrectLevel.H : + nLimit = QRCodeLimitLength[i][3]; + break; + } + + if (length <= nLimit) { + break; + } else { + nType++; + } + } + + if (nType > QRCodeLimitLength.length) { + throw new Error("Too long data"); + } + + return nType; + } + + function _getUTF8Length(sText) { + var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); + return replacedText.length + (replacedText.length != sText ? 3 : 0); + } + + /** + * @class QRCode + * @constructor + * @example + * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie"); + * + * @example + * var oQRCode = new QRCode("test", { + * text : "http://naver.com", + * width : 128, + * height : 128 + * }); + * + * oQRCode.clear(); // Clear the QRCode. + * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode. + * + * @param {HTMLElement|String} el target element or 'id' attribute of element. + * @param {Object|String} vOption + * @param {String} vOption.text QRCode link data + * @param {Number} [vOption.width=256] + * @param {Number} [vOption.height=256] + * @param {String} [vOption.colorDark="#000000"] + * @param {String} [vOption.colorLight="#ffffff"] + * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] + */ + QRCode = function (el, vOption) { + this._htOption = { + width : 256, + height : 256, + typeNumber : 4, + colorDark : "#000000", + colorLight : "#ffffff", + correctLevel : QRErrorCorrectLevel.H + }; + + if (typeof vOption === 'string') { + vOption = { + text : vOption + }; + } + + // Overwrites options + if (vOption) { + for (var i in vOption) { + this._htOption[i] = vOption[i]; + } + } + + if (typeof el == "string") { + el = document.getElementById(el); + } + + if (this._htOption.useSVG) { + Drawing = svgDrawer; + } + + this._android = _getAndroid(); + this._el = el; + this._oQRCode = null; + this._oDrawing = new Drawing(this._el, this._htOption); + + if (this._htOption.text) { + this.makeCode(this._htOption.text); + } + }; + + /** + * Make the QRCode + * + * @param {String} sText link data + */ + QRCode.prototype.makeCode = function (sText) { + this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel); + this._oQRCode.addData(sText); + this._oQRCode.make(); + this._el.title = sText; + this._oDrawing.draw(this._oQRCode); + this.makeImage(); + }; + + /** + * Make the Image from Canvas element + * - It occurs automatically + * - Android below 3 doesn't support Data-URI spec. + * + * @private + */ + QRCode.prototype.makeImage = function () { + if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) { + this._oDrawing.makeImage(); + } + }; + + /** + * Clear the QRCode + */ + QRCode.prototype.clear = function () { + this._oDrawing.clear(); + }; + + /** + * @name QRCode.CorrectLevel + */ + QRCode.CorrectLevel = QRErrorCorrectLevel; +})(); + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__("./src/z-uno-compiler.ts"); +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=z-uno-compiler.js.map \ No newline at end of file diff --git a/z_uno_compiler/beta/z-uno-compiler.js.map b/z_uno_compiler/beta/z-uno-compiler.js.map new file mode 100644 index 0000000..811af22 --- /dev/null +++ b/z_uno_compiler/beta/z-uno-compiler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"z-uno-compiler.js","mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yBAAyB;AACjE;AACA,qBAAqB,cAAc;AACnC;AACA;AACA,sBAAsB,cAAc;AACpC,qCAAqC,yBAAyB,UAAU,SAAS,uBAAuB,yBAAyB,iGAAiG;AAClO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,8HAA8H;AACvK;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC,sBAAsB,cAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,qBAAqB;AACrB,8CAA8C;AAC9C;AACA,YAAY,oBAAoB;AAChC,YAAY,eAAe;AAC3B,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;UCtmBD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;UENA;UACA;UACA;UACA","sources":["webpack://ZUnoCompiler/webpack/universalModuleDefinition","webpack://ZUnoCompiler/./src/hardware/chip.ts","webpack://ZUnoCompiler/./src/lang/ui_lang.ts","webpack://ZUnoCompiler/./src/lang/ui_lang_define.ts","webpack://ZUnoCompiler/./src/lang/ui_lang_en.ts","webpack://ZUnoCompiler/./src/other/define.ts","webpack://ZUnoCompiler/./src/other/utilities.ts","webpack://ZUnoCompiler/./src/sapi/region.ts","webpack://ZUnoCompiler/./src/sapi/sapi.ts","webpack://ZUnoCompiler/./src/sapi/zuno_sapi.ts","webpack://ZUnoCompiler/./src/ui_define.ts","webpack://ZUnoCompiler/./src/z-uno-compiler.ts","webpack://ZUnoCompiler/./src/qr_code/qrcode.js","webpack://ZUnoCompiler/webpack/bootstrap","webpack://ZUnoCompiler/webpack/runtime/define property getters","webpack://ZUnoCompiler/webpack/runtime/hasOwnProperty shorthand","webpack://ZUnoCompiler/webpack/runtime/make namespace object","webpack://ZUnoCompiler/webpack/before-startup","webpack://ZUnoCompiler/webpack/startup","webpack://ZUnoCompiler/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ZUnoCompiler\"] = factory();\n\telse\n\t\troot[\"ZUnoCompiler\"] = factory();\n})(self, () => {\nreturn ","\nexport {HardwareChipClass};\n\nclass HardwareChipClass {\n\tstatic readonly FAMILY_ZGM13\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x00;\n\tstatic readonly CHIP_ZGM130S037HGN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_ZGM130S037HGN1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\t\n\tstatic readonly FAMILY_EFR32MG21\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32MG21A010F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32MG21A010F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_EFR32MG21A010F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_EFR32MG21A020F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32MG21A020F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32MG21A020F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_EFR32MG21B010F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_EFR32MG21B010F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_EFR32MG21B010F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_EFR32MG21B020F1024IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\tstatic readonly CHIP_EFR32MG21B020F512IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0B;\n\tstatic readonly CHIP_EFR32MG21B020F768IM32\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0C;\n\t\n\tstatic readonly FAMILY_ZGM23\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_ZGM230SA27HGN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_ZGM230SA27HNN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_ZGM230SB27HGN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_ZGM230SB27HNN\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\t\n\tstatic readonly FAMILY_MGM21\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_MGM210L022JIF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_MGM210L022JNF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_MGM210LA22JIF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_MGM210LA22JNF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_MGM210P022JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_MGM210P032JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_MGM210PA22JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_MGM210PA32JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_MGM210PB22JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_MGM210PB32JIA\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\tstatic readonly CHIP_MGM211LA02JNF\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0B;\n\t\n\tstatic readonly FAMILY_EFR32ZG23\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32ZG23A010F512GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32ZG23A010F512GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_EFR32ZG23A020F512GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_EFR32ZG23A020F512GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32ZG23B010F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32ZG23B010F512IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_EFR32ZG23B011F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_EFR32ZG23B020F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_EFR32ZG23B020F512IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_EFR32ZG23B021F512IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\t\n\tstatic readonly FAMILY_EFR32MG24\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32MG24A010F1024IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tstatic readonly CHIP_EFR32MG24A010F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x02;\n\tstatic readonly CHIP_EFR32MG24A010F1536GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\tstatic readonly CHIP_EFR32MG24A010F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x04;\n\tstatic readonly CHIP_EFR32MG24A010F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x05;\n\tstatic readonly CHIP_EFR32MG24A010F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tstatic readonly CHIP_EFR32MG24A010F768IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x07;\n\tstatic readonly CHIP_EFR32MG24A010F768IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x08;\n\tstatic readonly CHIP_EFR32MG24A020F1024IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x09;\n\tstatic readonly CHIP_EFR32MG24A020F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0A;\n\tstatic readonly CHIP_EFR32MG24A020F1536GM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0B;\n\tstatic readonly CHIP_EFR32MG24A020F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0C;\n\tstatic readonly CHIP_EFR32MG24A020F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0D;\n\tstatic readonly CHIP_EFR32MG24A020F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0E;\n\tstatic readonly CHIP_EFR32MG24A020F768IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x0F;\n\tstatic readonly CHIP_EFR32MG24A021F1024IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x10;\n\tstatic readonly CHIP_EFR32MG24A110F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x11;\n\tstatic readonly CHIP_EFR32MG24A110F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x12;\n\tstatic readonly CHIP_EFR32MG24A111F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x13;\n\tstatic readonly CHIP_EFR32MG24A120F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x14;\n\tstatic readonly CHIP_EFR32MG24A121F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x15;\n\tstatic readonly CHIP_EFR32MG24A410F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x16;\n\tstatic readonly CHIP_EFR32MG24A410F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x17;\n\tstatic readonly CHIP_EFR32MG24A420F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x18;\n\tstatic readonly CHIP_EFR32MG24A420F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x19;\n\tstatic readonly CHIP_EFR32MG24A610F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1A;\n\tstatic readonly CHIP_EFR32MG24A620F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1B;\n\tstatic readonly CHIP_EFR32MG24B010F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1C;\n\tstatic readonly CHIP_EFR32MG24B010F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1D;\n\tstatic readonly CHIP_EFR32MG24B010F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1E;\n\tstatic readonly CHIP_EFR32MG24B020F1024IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x1F;\n\tstatic readonly CHIP_EFR32MG24B020F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x20;\n\tstatic readonly CHIP_EFR32MG24B020F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x21;\n\tstatic readonly CHIP_EFR32MG24B110F1536GM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x22;\n\tstatic readonly CHIP_EFR32MG24B110F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x23;\n\tstatic readonly CHIP_EFR32MG24B120F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x24;\n\tstatic readonly CHIP_EFR32MG24B210F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x25;\n\tstatic readonly CHIP_EFR32MG24B210F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x26;\n\tstatic readonly CHIP_EFR32MG24B220F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x27;\n\tstatic readonly CHIP_EFR32MG24B310F1536IM48\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x28;\n\tstatic readonly CHIP_EFR32MG24B610F1536IM40\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x29;\n\n\tconstructor() {\n\t}\n}\n\n","\nimport {controller_lang_en} from \"./ui_lang_en\"\nimport {ControllerUiLangClassList, ControllerUiLangClassId} from \"./ui_lang_define\"\n\nexport {ControllerUiLangClass};\n\nclass ControllerUiLangClass {\n\tprivate locale:ControllerUiLangClassList\t\t\t\t\t\t\t= controller_lang_en;\n\n\tpublic getLocale(id:ControllerUiLangClassId): string {\n\t\tif (this.locale[id] != undefined)\n\t\t\treturn (this.locale[id]);\n\t\treturn (\"\");\n\t}\n\n\tconstructor() {\n\t}\n}","\nexport {ControllerUiLangClassId, ControllerUiLangClassList};\n\nenum ControllerUiLangClassId\n{\n\tMESSAGE_PORT_NOT_SELECT,\n\tMESSAGE_NOT_SUPPORT_BROWSER,\n\tMESSAGE_PORT_USE,\n\tMESSAGE_CONNECT,\n\tMESSAGE_DETECTION,\n\tMESSAGE_READ_CAPABILITIES,\n\tMESSAGE_READ_REGION,\n\tMESSAGE_READ_SEC,\n\tMESSAGE_READ_POWER,\n\tMESSAGE_READ_LICENSE,\n\tMESSAGE_SET_LICENSE,\n\tMESSAGE_READ_BOARD_INFO,\n\tMESSAGE_SET_REGION,\n\tMESSAGE_SET_POWER,\n\tMESSAGE_SET_SEC,\n\tMESSAGE_SET_DEFAULT,\n\tMESSAGE_PLEASE_WAIT,\n\tMESSAGE_UPDATE_DOWNLOAD_INFO,\n\tMESSAGE_UPDATE_DOWNLOAD_FILE,\n\tMESSAGE_UPDATE_START_FIRMWARE,\n\tMESSAGE_UPDATE_START_BOOTLOADER,\n\tTABLE_NAME_SERIAL_API_VERSION,\n\tTABLE_NAME_SERIAL_API_VERSION_TITLE,\n\tTABLE_NAME_VENDOR,\n\tTABLE_NAME_VENDOR_TITLE,\n\tTABLE_NAME_VENDOR_ID,\n\tTABLE_NAME_VENDOR_ID_TITLE,\n\tTABLE_NAME_REGION,\n\tTABLE_NAME_REGION_TITLE,\n\tTABLE_NAME_REGION_SELECT_TITLE,\n\tTABLE_NAME_REGION_BUTTON,\n\tTABLE_NAME_REGION_BUTTON_TITLE,\n\tTABLE_NAME_RESET_DEFAULT,\n\tTABLE_NAME_RESET_DEFAULT_TITLE,\n\tTABLE_NAME_RESET_DEFAULT_BUTTON,\n\tTABLE_NAME_RESET_DEFAULT_BUTTON_TITLE,\n\tTABLE_NAME_POWER,\n\tTABLE_NAME_POWER_TITLE,\n\tTABLE_NAME_POWER_SELECT_TITLE,\n\tTABLE_NAME_POWER_BUTTON,\n\tTABLE_NAME_POWER_BUTTON_TITLE,\n\tTABLE_NAME_UPDATE_FIRMWARE_BUTTON,\n\tTABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE,\n\tTABLE_NAME_UPDATE_BOOTLOADER_BUTTON,\n\tTABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE,\n\tTABLE_NAME_LICENSE_UUID,\n\tTABLE_NAME_LICENSE_UUID_TITLE,\n\tTABLE_NAME_LICENSE_MORE_OPTIONS,\n\tTABLE_NAME_LICENSE_MORE_OPTIONS_TITLE,\n\tTABLE_NAME_LICENSE_SUBVENDOR_ID,\n\tTABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE,\n\tTABLE_NAME_LICENSE_MAX_NODE,\n\tTABLE_NAME_LICENSE_MAX_NODE_TITLE,\n\tTABLE_NAME_LICENSE_SUPPORT,\n\tTABLE_NAME_LICENSE_SUPPORT_TITLE,\n\tTABLE_NAME_UPDATE_BETA,\n\tTABLE_NAME_UPDATE_BETA_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_BETA_TITLE,\n\tTABLE_NAME_UPDATE_FIRMWARE,\n\tTABLE_NAME_UPDATE_FIRMWARE_TITLE,\n\tTABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_BOOTLOADER,\n\tTABLE_NAME_UPDATE_BOOTLOADER_TITLE,\n\tTABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE,\n\tTABLE_NAME_UPDATE_DOWNLOAD_INFO,\n\tTABLE_NAME_UPDATE_DOWNLOAD_FILE,\n\tTABLE_NAME_UPDATE_WAIT_BUS_SERIAL,\n\tTABLE_NAME_UPDATE_WAIT_UPDATE,\n\tTABLE_NAME_DETECTION_SYNC_MANUAL,\n\tTABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE,\n\tTABLE_NAME_DETECTION_SYNC_MANUAL_TITLE,\n\tLOG_HEADER,\n\tLOG_DONE,\n\tLOG_FAILED,\n\tLOG_FAILED_CODE,\n\tLOG_UNSUPPORTED,\n\tLOG_NOT_FIND_ELEMENT,\n\tLOG_XHR_TIMEOUT,\n\tLOG_XHR_ERROR,\n\tLOG_XHR_INVALID_DATA,\n\tBUTTON_COPY_TEXT,\n\tBUTTON_COPY_TITLE,\n\tBUTTON_CLOSE_TEXT,\n\tBUTTON_CLOSE_TITLE,\n\tBUTTON_COPY_DSK,\n\tBUTTON_COPY_DSK_TITLE,\n\tBOARD_INFO_HEADER,\n\tLICENSE_INFO_HEADER,\n\tUPDATE_INFO_HEADER,\n\tDEFAULT_RESET_WARNING,\n\tMIGRATION_INFO_HEADER,\n\tMIGRATION_ABOUT_HEADER,\n\tMIGRATION_ABOUT_HEADER_TITLE,\n\tMIGRATION_ABOUT_HEADER_TEXT_HTML,\n\tMIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5,\n\tMIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT,\n\tMIGRATION_PROCESS_HEADER,\n\tMIGRATION_PROCESS_HEADER_TITLE,\n\tMIGRATION_PROCESS_BUTTON_START,\n\tMIGRATION_PROCESS_BUTTON_START_TITLE,\n\tMIGRATION_PROCESS_BUTTON_START_WARNING,\n\tMIGRATION_TEST_INCLUDE,\n\tMESSAGE_READ_HOME_ID,\n\tMIGRATION_UNKNOWN_ERROR,\n\tMIGRATION_GOOD_RESULT,\n\tMIGRATION_ACTION_STOP,\n\tMIGRATION_ACTION_CONTINUE,\n\tMIGRATION_ACTION_STOP_TITLE,\n\tMIGRATION_ACTION_CONTINUE_TITLE,\n\tMIGRATION_QUESTION_EXCLUDE,\n\tMIGRATION_STOP_RESULT,\n\tMESSAGE_READ_INIT_DATA,\n\tMESSAGE_START_EXCLUDING,\n\tMESSAGE_START_WIDE_EXCLUDING,\n\tSECONDS,\n\tMIGRATION_WAIT_EXCLUDE_START_MASTER,\n\tMESSAGE_CLEAR_NODE,\n\tMESSAGE_START_INCLUDE,\n\tMESSAGE_START_WIDE_INCLUDE,\n\tMIGRATION_QUESTION_INCLUDE,\n\tMIGRATION_WAIT_INCLUDE_START_MASTER,\n\tMIGRATION_FINALIZE,\n\tMIGRATION_DETECTION,\n\tMESSAGE_SET_HOME_ID,\n\tMESSAGE_REMOVE_NODE,\n\tMESSAGE_SOFT_RESET,\n\tMESSAGE_NOP,\n\tMESSAGE_PORT_SELECT,\n\tDETECTION_INFO_HEADER,\n\tDETECTION_PROCESS_HEADER,\n\tDETECTION_PROCESS_HEADER_TITLE,\n\tDETECTION_PROCESS,\n\tDETECTION_PROCESS_STOP,\n\tDETECTION_PROCESS_CONTINUE,\n\tDETECTION_PROCESS_STOP_TITLE,\n\tDETECTION_PROCESS_CONTINUE_TITLE,\n\tDETECTION_PROCESS_QUEST_SYNC,\n\tDETECTION_PROCESS_BUTTON_RE_SYNC,\n\tDETECTION_PROCESS_BUTTON_RE_SYNC_TITLE,\n\tSLAVE_MESSAGE_READ_BOARD_INFO,\n\tTABLE_NAME_VERSION,\n\tTABLE_NAME_VERSION_TITLE,\n\tTABLE_NAME_BUILD_TIME_STAMP,\n\tTABLE_NAME_BUILD_TIME_STAMP_TITLE,\n\tTABLE_NAME_UUID,\n\tTABLE_NAME_UUID_TITLE,\n\tTABLE_NAME_HOME,\n\tTABLE_NAME_HOME_TITLE,\n\tTABLE_NAME_NODE,\n\tTABLE_NAME_NODE_TITLE,\n\tTABLE_NAME_DSK,\n\tTABLE_NAME_DSK_TITLE,\n\tTABLE_NAME_QR_CODE,\n\tTABLE_NAME_QR_CODE_TITLE,\n\tSLAVE_MESSAGE_FREEZE_ERROR,\n\tSLAVE_DEFAULT_RESET_WARNING,\n\tTABLE_NAME_TYPE,\n\tTABLE_NAME_TYPE_TITLE,\n\tTABLE_NAME_TYPE_CONTROLER,\n\tTABLE_NAME_TYPE_SLAVE,\n\tERROR_ARGUMENT_FOR_UPDATE_SELECT,\n\tERROR_ARGUMENT_FIND_TYPE,\n\tTABLE_NAME_INCLUDE_EXCLUDE,\n\tTABLE_NAME_INCLUDE_EXCLUDE_TITLE,\n\tTABLE_NAME_INCLUDE_EXCLUDE_BUTTON,\n\tTABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE,\n\tINCLUDE_EXCLUDE_WAIT,\n\tMESSAGE_ENABLE_NIF_DEFAULT,\n\tMESSAGE_ENABLE_EVENT_FOR_LEARN,\n\tMESSAGE_START_LEARN,\n\tMESSAGE_LEARN_INFO_TIMEOUT,\n\tMESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART,\n\tMESSAGE_LEARN_INFO_INCLUDE_RESTART,\n\tMESSAGE_LEARN_INFO_EXCLUDE_RESTART,\n\tPROCESS_CONTINUE,\n\tPROCESS_CONTINUE_TITLE,\n\tPROCESS_STOP,\n\tPROCESS_STOP_TITLE,\n\tPROCESS_REPEAT,\n\tPROCESS_REPEAT_TITLE,\n\tPROCESS_ABORT,\n\tPROCESS_ABORT_TITLE,\n\tLEARN_PROCESS_QUEST_EXCLUDE_INCLUDE,\n\tLEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE,\n\tMIGRATION_NOT_GET_URL_INFO,\n\tMIGRATION_NOT_UPDATE,\n\tMIGRATION_LAST_UPDATE_DETECT,\n\tMIGRATION_FAILED_UPDATE_TYPE,\n\tMIGRATION_FAILED_UPDATE_VERSION,\n\tMIGRATION_FAILED_CHANGE_REGION,\n\tMIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE,\n\tLEARN_PROCESS_QUEST_EXCLUDE,\n\tLEARN_PROCESS_QUEST_EXCLUDE_TITLE,\n\tMIGRATION_LEARN_INFO_EXCLUDE_INCLUDE,\n\tMIGRATION_FAILED_DETECT,\n\tMIGRATION_PROCESS_QUEST_INCLUDE,\n\tMIGRATION_PROCESS_QUEST_INCLUDE_TITLE,\n\tMIGRATION_NOT_SUPPORT_DUMP_KEY,\n\tMESSAGE_READ_S2_KEY,\n\tMIGRATION_NOT_AVIABLE_FIRMWARE,\n\tMIGRATION_NOT_SUPPORT_LR,\n\tMIGRATION_NOT_SUPPORT_BACKUP,\n\tMIGRATION_FAILED_SEE_LOG,\n\tMIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER,\n\tMIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE,\n\tMIGRATION_SUCESS,\n\tMIGRATION_QUEST_REPEATER_ALL_KEY,\n\tMIGRATION_QUEST_REPEATER_ALL_KEY_TITLE,\n\tMIGRATION_QUEST_ABORT_STEP,\n\tMIGRATION_QUEST_ABORT_STEP_TITLE,\n\tMIGRATION_FAILED_REPEAR_TYPE,\n}\n\ntype ControllerUiLangClassList =\n{\n\t[key in ControllerUiLangClassId]:string;\n}\n","import {ControllerUiLangClassList, ControllerUiLangClassId} from \"./ui_lang_define\"\n\nexport {controller_lang_en};\n\nconst controller_lang_en:ControllerUiLangClassList\t\t\t\t\t=\n{\n\t[ControllerUiLangClassId.MESSAGE_PORT_NOT_SELECT]: \"No port selected\",\n\t[ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER]: \"Sorry, this feature is supported only on Chrome, Edge and Opera\",\n\t[ControllerUiLangClassId.MESSAGE_PORT_USE]: \"Check yours, maybe another application is using it\",\n\t[ControllerUiLangClassId.MESSAGE_CONNECT]: \"Connect device\",\n\t[ControllerUiLangClassId.MESSAGE_DETECTION]: \"Detection device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_CAPABILITIES]: \"Read capabilities the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_REGION]: \"Read region the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_SEC]: \"Read securite the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_POWER]: \"Read power the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_LICENSE]: \"Read license the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_LICENSE]: \"Set license the device\",\n\t[ControllerUiLangClassId.MESSAGE_READ_BOARD_INFO]: \"Read board info the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_REGION]: \"Set region the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_POWER]: \"Set power the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_SEC]: \"Set securite the device\",\n\t[ControllerUiLangClassId.MESSAGE_SET_DEFAULT]: \"Set default the device\",\n\t[ControllerUiLangClassId.MESSAGE_PLEASE_WAIT]: \"Please wait until the previous operation is completed.\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_INFO]: \"Download update info\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_DOWNLOAD_FILE]: \"Download update file\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_START_FIRMWARE]: \"Start firmware update\",\n\t[ControllerUiLangClassId.MESSAGE_UPDATE_START_BOOTLOADER]: \"Start bootloader update\",\n\t[ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION]: \"Serial API Version:\",\n\t[ControllerUiLangClassId.TABLE_NAME_SERIAL_API_VERSION_TITLE]: \"It is specific to Z-Wave.Me\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR]: \"Vendor:\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR_ID]: \"Vendor ID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_VENDOR_ID_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION]: \"Region:\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_TITLE]: \"Z-Wave frequency\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_SELECT_TITLE]: \"Select region\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON]: \"Apply\",\n\t[ControllerUiLangClassId.TABLE_NAME_REGION_BUTTON_TITLE]: \"Apply the selected region\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT]: \"Reset default:\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_TITLE]: \"Reset to factory default settings\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON]: \"Reset\",\n\t[ControllerUiLangClassId.TABLE_NAME_RESET_DEFAULT_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER]: \"TX power level:\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_SELECT_TITLE]: \"Select the TX power level\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON]: \"Apply\",\n\t[ControllerUiLangClassId.TABLE_NAME_POWER_BUTTON_TITLE]: \"Apply the selected TX power\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON]: \"Update\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON]: \"Update\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID]: \"UUID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_UUID_TITLE]: \"Unique ID of your Z-Wave hardware\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS]: \"More options:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MORE_OPTIONS_TITLE]: \"Additional features available for your hardware\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID]: \"Subvendor:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUBVENDOR_ID_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE]: \"Nodes limit:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_MAX_NODE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT]: \"Support:\",\n\t[ControllerUiLangClassId.TABLE_NAME_LICENSE_SUPPORT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA]: 'Beta:',\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BETA_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE]: 'Firmware:',\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_FIRMWARE_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_NOT_UPDATE_SELECT_TITLE]: \"Not updated\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER]: 'Bootloader:',\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_BOOTLOADER_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_INFO]: \"Download info...\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_DOWNLOAD_FILE]: \"Download file...\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_BUS_SERIAL]: \"Wait bus serial...\",\n\t[ControllerUiLangClassId.TABLE_NAME_UPDATE_WAIT_UPDATE]: \"Wait update...\",\n\t[ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL]: 'Sync manual:',\n\t[ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_SELECT_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_DETECTION_SYNC_MANUAL_TITLE]: \"\",\n\t[ControllerUiLangClassId.LOG_HEADER]: \"Log\",\n\t[ControllerUiLangClassId.LOG_DONE]: \" done\",\n\t[ControllerUiLangClassId.LOG_FAILED]: \" failed\",\n\t[ControllerUiLangClassId.LOG_FAILED_CODE]: \" failed: {{code}}\",\n\t[ControllerUiLangClassId.LOG_UNSUPPORTED]: \" unsupported\",\n\t[ControllerUiLangClassId.LOG_NOT_FIND_ELEMENT]: \"Not find element: {{element}}\",\n\t[ControllerUiLangClassId.LOG_XHR_TIMEOUT]: \"
Internet request - timeout {{url}}
\",\n\t[ControllerUiLangClassId.LOG_XHR_ERROR]: \"
Internet request - error {{url}}
\",\n\t[ControllerUiLangClassId.LOG_XHR_INVALID_DATA]: \"
Internet request - invalid data {{url}}
\",\n\t[ControllerUiLangClassId.BUTTON_COPY_TEXT]: \"Copy log\",\n\t[ControllerUiLangClassId.BUTTON_COPY_TITLE]: \"Copy the log to clipboard\",\n\t[ControllerUiLangClassId.BUTTON_CLOSE_TEXT]: \"Close\",\n\t[ControllerUiLangClassId.BUTTON_CLOSE_TITLE]: \"Closes and stops working with the port\",\n\t[ControllerUiLangClassId.BUTTON_COPY_DSK]: \"Copy\",\n\t[ControllerUiLangClassId.BUTTON_COPY_DSK_TITLE]: \"Copy the dsk to clipboard\",\n\t[ControllerUiLangClassId.BOARD_INFO_HEADER]: \"Board Info\",\n\t[ControllerUiLangClassId.LICENSE_INFO_HEADER]: \"License Info\",\n\t[ControllerUiLangClassId.UPDATE_INFO_HEADER]: \"Update Info\",\n\t[ControllerUiLangClassId.DEFAULT_RESET_WARNING]: \"The Controller Reset will delete all included devices from your network without excluding them. You will need to manually exclude and include all of them. Do you really want to do this?\",\n\t[ControllerUiLangClassId.MIGRATION_INFO_HEADER]: \"Migration Info\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER]: \"About\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML]: \"
Porting from your old controllerto your new Z-Wave.Me hardware
\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_RAZ5]: \"
You have an old stickneed a newer one
\",\n\t[ControllerUiLangClassId.MIGRATION_ABOUT_HEADER_TEXT_HTML_UNSUPPORT]: \"
Your stick is not supportedmigration works only to Z-Wave.Me hardware
\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_HEADER]: \"Migration:\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_HEADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START]: \"Start\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_BUTTON_START_WARNING]: \"Are you sure you want to start the migration process? - During this process, all data will be lost.\\nAlso make sure there are no power issues to avoid problems.\",\n\t[ControllerUiLangClassId.MIGRATION_TEST_INCLUDE]: \"Checking whether it is on...\",\n\t[ControllerUiLangClassId.MESSAGE_READ_HOME_ID]: \"Read home and node id the controller\",\n\t[ControllerUiLangClassId.MIGRATION_UNKNOWN_ERROR]: \"An unexpected error occurred, please try again.\",\n\t[ControllerUiLangClassId.MIGRATION_GOOD_RESULT]: \"Migration was successful.\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_STOP]: \"Stop\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE]: \"Continue\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_STOP_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_ACTION_CONTINUE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_QUESTION_EXCLUDE]: \"You need to excluding first - click when you're ready\",\n\t[ControllerUiLangClassId.MIGRATION_STOP_RESULT]: \"Migration was stoping.\",\n\t[ControllerUiLangClassId.MESSAGE_READ_INIT_DATA]: \"Read init data the controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_EXCLUDING]: \"Start excluding controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_WIDE_EXCLUDING]: \"Start wide excluding controller\",\n\t[ControllerUiLangClassId.SECONDS]: \"s\",\n\t[ControllerUiLangClassId.MIGRATION_WAIT_EXCLUDE_START_MASTER]: \"We are waiting for you to begin the elimination process.\",\n\t[ControllerUiLangClassId.MESSAGE_CLEAR_NODE]: \"Start clear node the controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_INCLUDE]: \"Start include controller\",\n\t[ControllerUiLangClassId.MESSAGE_START_WIDE_INCLUDE]: \"Start wide include controller\",\n\t[ControllerUiLangClassId.MIGRATION_QUESTION_INCLUDE]: \"You need to turn on the controller\",\n\t[ControllerUiLangClassId.MIGRATION_WAIT_INCLUDE_START_MASTER]: \"We are waiting for you to begin the inclusion process.\",\n\t[ControllerUiLangClassId.MIGRATION_FINALIZE]: \"Finishing...\",\n\t[ControllerUiLangClassId.MIGRATION_DETECTION]: \"Detection...\",\n\t[ControllerUiLangClassId.MESSAGE_SET_HOME_ID]: \"Set home and node id the controller\",\n\t[ControllerUiLangClassId.MESSAGE_REMOVE_NODE]: \"Remove node the controller\",\n\t[ControllerUiLangClassId.MESSAGE_SOFT_RESET]: \"Soft reset\",\n\t[ControllerUiLangClassId.MESSAGE_NOP]: \"Send nop\",\n\t[ControllerUiLangClassId.MESSAGE_PORT_SELECT]: \"Port selection\",\n\t[ControllerUiLangClassId.DETECTION_INFO_HEADER]: \"Detection\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_HEADER]: \"Sync:\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_HEADER_TITLE]: \"\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS]: \"Sync...\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_STOP]: \"Stop\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE]: \"Continue\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_STOP_TITLE]: \"\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_CONTINUE_TITLE]: \"\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_QUEST_SYNC]: \"Reset your hardware and try again\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC]: \"Try to sync again\",\n\t[ControllerUiLangClassId.DETECTION_PROCESS_BUTTON_RE_SYNC_TITLE]: \"\",\n\t[ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO]: \"Read hardware information\",\n\t[ControllerUiLangClassId.TABLE_NAME_VERSION]: \"Version:\",\n\t[ControllerUiLangClassId.TABLE_NAME_VERSION_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP]: \"Build date and time:\",\n\t[ControllerUiLangClassId.TABLE_NAME_BUILD_TIME_STAMP_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_UUID]: \"UUID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_UUID_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_HOME]: \"Home ID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_HOME_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_NODE]: \"Node ID:\",\n\t[ControllerUiLangClassId.TABLE_NAME_NODE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_DSK]: \"DSK:\",\n\t[ControllerUiLangClassId.TABLE_NAME_DSK_TITLE]: \"Key used to securely include your device\",\n\t[ControllerUiLangClassId.TABLE_NAME_QR_CODE]: \"QR-code:\",\n\t[ControllerUiLangClassId.TABLE_NAME_QR_CODE_TITLE]: \"QR-code used to securely include your device\",\n\t[ControllerUiLangClassId.SLAVE_MESSAGE_FREEZE_ERROR]: \"Failed to pause slave\",\n\t[ControllerUiLangClassId.SLAVE_DEFAULT_RESET_WARNING]: \"Do you really want to do this?\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE]: \"Type:\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE_CONTROLER]: \"Controller\",\n\t[ControllerUiLangClassId.TABLE_NAME_TYPE_SLAVE]: \"Z-Uno / repeater\",\n\t[ControllerUiLangClassId.ERROR_ARGUMENT_FOR_UPDATE_SELECT]: \"error arg for update select\",\n\t[ControllerUiLangClassId.ERROR_ARGUMENT_FIND_TYPE]: \"error arg find type\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE]: \"Include/Exclude:\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON]: \"Start\",\n\t[ControllerUiLangClassId.TABLE_NAME_INCLUDE_EXCLUDE_BUTTON_TITLE]: \"\",\n\t[ControllerUiLangClassId.INCLUDE_EXCLUDE_WAIT]: \"Wait...\",\n\t[ControllerUiLangClassId.MESSAGE_ENABLE_NIF_DEFAULT]: \"Enable default NIF\",\n\t[ControllerUiLangClassId.MESSAGE_ENABLE_EVENT_FOR_LEARN]: \"Enable event for learn mode\",\n\t[ControllerUiLangClassId.MESSAGE_START_LEARN]: \"Start learn mode\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT]: \"Learn timout\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_TIMEOUT_FORSE_RESTART]: \"Learn timeout. Reloading\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_INCLUDE_RESTART]: \"Included. Reloading\",\n\t[ControllerUiLangClassId.MESSAGE_LEARN_INFO_EXCLUDE_RESTART]: \"Excluded. Reloading\",\n\t[ControllerUiLangClassId.PROCESS_CONTINUE]: \"Continue\",\n\t[ControllerUiLangClassId.PROCESS_CONTINUE_TITLE]: \"\",\n\t[ControllerUiLangClassId.PROCESS_STOP]: \"Stop\",\n\t[ControllerUiLangClassId.PROCESS_STOP_TITLE]: \"\",\n\t[ControllerUiLangClassId.PROCESS_REPEAT]: \"Repeat\",\n\t[ControllerUiLangClassId.PROCESS_REPEAT_TITLE]: \"\",\n\t[ControllerUiLangClassId.PROCESS_ABORT]: \"Abort\",\n\t[ControllerUiLangClassId.PROCESS_ABORT_TITLE]: \"\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE]: \"Ready for inclusion/exclusion by you controller\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_INCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_GET_URL_INFO]: \"Could not get a link to the information needed for migration\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_UPDATE]: \"Failed to update\",\n\t[ControllerUiLangClassId.MIGRATION_LAST_UPDATE_DETECT]: \"After the update, the firmware could not be detected\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_TYPE]: \"The type of the updated firmware does not match\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_UPDATE_VERSION]: \"After the update the version is not what it should be\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_CHANGE_REGION]: \"Failed to change frequency\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_INCLUDE_EXCLUDE]: \"No support for exclusion/inclusion\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE]: \"Turn on exclusion mode on you controller\",\n\t[ControllerUiLangClassId.LEARN_PROCESS_QUEST_EXCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_LEARN_INFO_EXCLUDE_INCLUDE]: \"Learn completed\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_DETECT]: \"Сould not be detected\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE]: \"
Turn on inclusion mode on you controller
When inclusion starts, you have to select all the supported security keys and use the following security code:
${dsk}
\",\n\t[ControllerUiLangClassId.MIGRATION_PROCESS_QUEST_INCLUDE_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_DUMP_KEY]: \"No support for dump key\",\n\t[ControllerUiLangClassId.MESSAGE_READ_S2_KEY]: \"Reading S2 keys\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_AVIABLE_FIRMWARE]: \"The required firmware is not in the database\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_LR]: \"Long Range is not supported\",\n\t[ControllerUiLangClassId.MIGRATION_NOT_SUPPORT_BACKUP]: \"Backup is not supported\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_SEE_LOG]: \"Failed - see log\",\n\t[ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER]: \"
The inclusion happeded without the required keys.
Please turn on exclusion mode on you controller
\",\n\t[ControllerUiLangClassId.MIGRATION_LEARN_PROCESS_QUEST_EXCLUDE_REPEATER_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_SUCESS]: \"Success\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY]: \"
These are all the keys that we were able to read, is everything correct or will you try again?
\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_REPEATER_ALL_KEY_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP]: \"An error occurred, would you like to try this step again or abort?\",\n\t[ControllerUiLangClassId.MIGRATION_QUEST_ABORT_STEP_TITLE]: \"\",\n\t[ControllerUiLangClassId.MIGRATION_FAILED_REPEAR_TYPE]: \"The type of the firmware does not match\",\n};","export {WEB_TOOLS_VERSION, WEB_TOOLS_BETA};\n\ndeclare const __VERSION__: string;\ndeclare const __BETA__: boolean;\n\nconst WEB_TOOLS_VERSION:string = __VERSION__;\nconst WEB_TOOLS_BETA:boolean = __BETA__;\n","export {\tsleep, checksum, calcSigmaCRC16, costruct_int, hexToBytes, arrayToStringHex, versionNumberToString, intToBytearrayLsbMsb, intToBytearrayMsbLsb, versionNumberToStringSlave, numberToStringHex, conv2Decimal, toString,\n\t\t\tconv2DecimalPadding, version_str_to_int, version_int_to_str, splitHexBuff\n};\n\nfunction toString(array:Array): string {\n\tlet result:string;\n\n\tresult = \"\";\n\tfor (let i = 0; i < array.length; i++) {\n\t\tresult += String.fromCharCode(array[i]);\n\t}\n\treturn result;\n}\n\nfunction numberToStringHex(num:number): string {\n\treturn (((num >> 24) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 16) & 0xFF).toString(0x10).padStart(2, '0') + ((num >> 8) & 0xFF).toString(0x10).padStart(2, '0') + ((num) & 0xFF).toString(0x10).padStart(2, '0'));\n}\n\nfunction versionNumberToString(version:number): string {\n\tconst txt:string = String((version >> 24) & 0xFF).padStart(2, '0') + \".\" + String((version >> 16) & 0xFF).padStart(2, '0') + \".\" + String((version >> 0x8) & 0xFF).padStart(2, '0') + \".\" + String((version) & 0xFF).padStart(2, '0')\n\treturn (txt)\n}\n\nfunction versionNumberToStringSlave(version:number): string {\n\tconst txt:string = String((version >> 24) & 0xFF).padStart(2, '0') + \".\" + String((version >> 16) & 0xFF).padStart(2, '0') + \".\" + String((version) & 0xFFFF)\n\treturn (txt)\n}\n\nfunction arrayToStringHex(data:Array|Uint8Array):string {\n\tlet str_hex:string, i:number;\n\n\tstr_hex = \"\";\n\ti = 0x0;\n\twhile (i < data.length) {\n\t\tstr_hex = str_hex + data[i].toString(0x10).padStart(2, '0');\n\t\ti++;\n\t}\n\treturn (str_hex);\n}\n\nfunction splitHexBuff(data:Array|Uint8Array):string {\n\tlet str_hex:string, i:number;\n\n\tstr_hex = \"\";\n\ti = 0x0;\n\twhile (true) {\n\t\tstr_hex = str_hex + data[i].toString(0x10).padStart(2, '0').toUpperCase();\n\t\ti++;\n\t\tif (i >= data.length)\n\t\t\tbreak ;\n\t\tstr_hex = str_hex + \" \";\n\t}\n\treturn (str_hex);\n}\n\n\nfunction hexToBytes(hex:string):Array|undefined {\n\tlet i:number;\n\n\tif (hex.length == 0x0)\n\t\treturn (undefined);\n\tif ((hex.length & 0x1) != 0x0)\n\t\treturn (undefined);\n\tconst bytes = [];\n\ti = 0x0;\n\twhile (i < hex.length) {\n\t\ttry {\n\t\t\tbytes.push(parseInt(hex.substring(i, i + 0x2), 0x10));\n\t\t} catch (error) {\n\t\t\treturn (undefined);\n\t\t}\n\t\ti = i + 0x2;\n\t}\n\treturn (bytes);\n}\n\nfunction sleep(ms:number):Promise {\n\treturn new Promise(resolve => setTimeout(resolve, ms));\n}\n\nfunction checksum(data:Array|Uint8Array):number {\n\tlet ret = 0xff;\n\tlet i = 0x0;\n\n\twhile (i < data.length) {\n\t\tret = ret ^ data[i];\n\t\ti++;\n\t}\n\treturn (ret);\n}\n\nfunction calcSigmaCRC16(crc:number, data:Array|Uint8Array, offset:number, llen:number):number {\n\tlet new_bit:number, wrk_data:number, b:number, a:number, bit_mask:number;\n\tconst bin_data:Array|Uint8Array = data;\n\tconst CRC_POLY:number = 0x1021;\n\n\twhile (llen != 0) {\n\t\tllen -= 1;\n\t\tif (offset >= bin_data.length)\n\t\t\twrk_data = 0xFF;\n\t\telse\n\t\t\twrk_data = bin_data[offset];\n\t\toffset += 1;\n\t\tbit_mask = 0x80;\n\t\twhile (bit_mask != 0) {\n\t\t\ta = 0;\n\t\t\tb = 0;\n\t\t\tif ((wrk_data & bit_mask) != 0)\n\t\t\t\ta = 1;\n\t\t\tif ((crc & 0x8000) != 0)\n\t\t\t\tb = 1;\n\t\t\tnew_bit = a ^ b;\n\t\t\tcrc <<= 1;\n\t\t\tcrc = crc & 0xffff;\n\t\t\tif (new_bit == 1) {\n\t\t\t\tcrc ^= CRC_POLY;\n\t\t\t}\n\t\t\tbit_mask >>= 1;\n\t\t}\n\t}\n\treturn (crc);\n}\n\nfunction costruct_int(arr:Array|Uint8Array, n:number, inv:boolean = true): number {\n\tlet val:number, i:number, indx:number;\n\n\tval = 0;\n\ti = 0x0;\n\twhile (i < arr.length) {\n\t\tval <<= 8;\n\t\tindx = i;\n\t\tif (inv == true)\n\t\t\tindx = n-1-i\n\t\tif ((indx < arr.length) && (indx >= 0))\n\t\t\tval += arr[indx];\n\t\ti++;\n\t}\n\tval = val >>> 0x0;//The only JavaScript operator that works using unsigned 32-bit integers is >>>. You can exploit this to convert a signed-integer-in-Number you've been working on with the other bitwise operators to an unsigned-integer-in-Number:\n\treturn (val);\n}\n\nfunction intToBytearrayLsbMsb(data:number, size:number = 0x4):Uint8Array {\n\tlet i:number;\n\n\tconst array:Uint8Array = new Uint8Array(size);\n\ti = 0x0;\n\twhile (i < array.length) {\n\t\tarray[i] = data & 0xFF;\n\t\tdata = data >> 8;\n\t\ti = i + 1;\n\t}\n\treturn (array);\n}\n\nfunction intToBytearrayMsbLsb(data:number, size:number = 0x4):Uint8Array {\n\tlet i:number;\n\n\tconst array:Uint8Array = new Uint8Array(size);\n\ti = 0x0;\n\twhile (size != 0) {\n\t\tsize--;\n\t\tarray[i] = (data >> (8 * size)) & 0xFF;\n\t\ti++;\n\t}\n\treturn (array);\n}\n\nfunction conv2DecimalPadding(num:number, max:number): string {\n\tlet num_str = num.toString(0xA);\n\n\twhile (num_str.length < max)\n\t\tnum_str = '0' + num_str;\n\treturn (num_str);\n}\n\n\nfunction conv2Decimal(buff:Uint8Array, separator:string = \"-\"): string {\n\tlet i:number, text:string, v:number;\n\n\ttext = \"\";\n\ti = 0x0;\n\twhile (i < (buff.length / 2)) {\n\t\tv = buff[ (i * 2)];\n\t\tv <<= 8;\n\t\tv += buff[ (i * 2) + 1];\n\t\tif(i != 0)\n\t\t\ttext += separator;\n\t\ttext += conv2DecimalPadding(v, 5);\n\t\ti = i + 1;\n\t}\n\treturn (text)\n}\n\nfunction version_str_to_int(version:string): number {\n\tlet i:number, out:number;\n\n\tconst version_list:Array = version.split(\".\");\n\ti = version_list.length;\n\tout = 0x0;\n\twhile (i != 0x0) {\n\t\tout = out | (Number(version_list[i - 0x1]) << (0x8 * (version_list.length - i)));\n\t\ti--;\n\t}\n\treturn (out)\n}\n\nfunction version_int_to_str(version:number, min:number): string {\n\tlet out:string, i:number;\n\n\tconst list:Array = [];\n\twhile (version != 0x0) {\n\t\tlist.unshift(version & 0xFF);\n\t\tversion = version >> 0x8;\n\t}\n\twhile (list.length < min) {\n\t\tlist.unshift(0x0);\n\t}\n\tout = \"\";\n\ti = 0x0;\n\twhile (true) {\n\t\tout = out + String(list[i]).padStart(2, '0')\n\t\ti++;\n\t\tif (i < list.length) {\n\t\t\tout = out + \".\";\n\t\t\tcontinue ;\n\t\t}\n\t\tbreak ;\n\t}\n\treturn (out)\n}\n","export {SapiRegionClass};\n\n\nclass SapiRegionClass {\n\tprivate us_lr:boolean;\n\tprivate eu_lr:boolean;\n\n\tprivate readonly REGION_EU:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"EU\";\n\tprivate readonly REGION_US:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"US\";\n\tprivate readonly REGION_ANZ:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"ANZ\";\n\tprivate readonly REGION_HK:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"HK\";\n\tprivate readonly REGION_IN:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"IN\";\n\tprivate readonly REGION_IL:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"IL\";\n\tprivate readonly REGION_RU:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"RU\";\n\tprivate readonly REGION_CN:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"CN\";\n\tprivate readonly REGION_JP:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"JP\";\n\tprivate readonly REGION_KR:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"KR\";\n\tprivate readonly REGION_EU_LR:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"EU_LR\";\n\tprivate readonly REGION_US_LR:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"US_LR\";\n\n\tprivate readonly region_lr:Array\t\t\t\t\t\t\t\t\t\t\t\t\t\t=\n\t[\n\t\tthis.REGION_EU_LR, this.REGION_US_LR\n\t];\n\tprivate readonly region_standart:Array\t\t\t\t\t\t\t\t\t\t\t\t\t=\n\t[\n\t\tthis.REGION_EU, this.REGION_US, this.REGION_ANZ, this.REGION_HK, this.REGION_IN,\n\t\tthis.REGION_IL, this.REGION_RU, this.REGION_CN, this.REGION_JP, this.REGION_KR,\n\t];\n\tprivate readonly region_string_to_number: Array<{ name: string;id: number;}>\t\t\t\t\t\t\t=\n\t[\n\t\t{name:this.REGION_EU, id:0x0}, {name:this.REGION_US, id:0x01}, {name:this.REGION_ANZ, id:0x02},\n\t\t{name:this.REGION_HK, id:0x3}, {name:this.REGION_IN, id:0x5}, {name:this.REGION_IL, id:0x6},\n\t\t{name:this.REGION_RU, id:0x7}, {name:this.REGION_CN, id:0x8}, {name:this.REGION_JP, id:0x20},\n\t\t{name:this.REGION_KR, id:0x21}, {name:this.REGION_US_LR, id:0x9}, {name:this.REGION_EU_LR, id:0xB},\n\t\t{name:this.REGION_EU, id:0xFF}\n\t];\n\tprivate readonly region_custom_string_to_number: Array<{ name: string;id: number;}>\t\t\t\t\t=\n\t[\n\t\t{name:this.REGION_EU, id:0x0}, {name:this.REGION_US, id:0x03}, {name:this.REGION_ANZ, id:0x04},\n\t\t{name:this.REGION_HK, id:0x05}, {name:this.REGION_IN, id:0x02}, {name:this.REGION_IL, id:0x09},\n\t\t{name:this.REGION_RU, id:0x01}, {name:this.REGION_CN, id:0x06}, {name:this.REGION_JP, id:0x07},\n\t\t{name:this.REGION_KR, id:0x08}, {name:this.REGION_US_LR, id:0x0B}, {name:this.REGION_EU_LR, id:0x0C},\n\t];\n\n\tpublic isLr(region:string): boolean {\n\t\tif (this.region_lr.includes(region) == false)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate _getNameRegion(region:number, region_conv:Array<{ name: string;id: number;}>): string|undefined {\n\t\tlet i;\n\t\n\t\ti = 0x0;\n\t\twhile (i < region_conv.length) {\n\t\t\tif (region_conv[i].id == region) {\n\t\t\t\tconst region_list:Array = this.getListRegion();\n\t\t\t\tif (region_list.includes(region_conv[i].name) == false)\n\t\t\t\t\treturn (undefined);\n\t\t\t\treturn (region_conv[i].name);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn (undefined);\n\t}\n\n\tprivate _getIdRegion(region:string, region_conv:Array<{ name: string;id: number;}>): number|undefined {\n\t\tlet i;\n\t\n\t\tconst region_list:Array = this.getListRegion();\n\t\tif (region_list.includes(region) == false)\n\t\t\treturn (undefined);\n\t\ti = 0x0;\n\t\twhile (i < region_conv.length) {\n\t\t\tif (region_conv[i].name == region)\n\t\t\t\treturn (region_conv[i].id);\n\t\t\ti++;\n\t\t}\n\t\treturn (undefined);\n\t}\n\n\tpublic getNameRegion(region:number): string|undefined {\n\t\treturn (this._getNameRegion(region, this.region_string_to_number));\n\t}\n\n\tpublic getNameRegionCustom(region:number): string|undefined {\n\t\treturn (this._getNameRegion(region, this.region_custom_string_to_number));\n\t}\n\n\tpublic getIdRegion(region:string): number|undefined {\n\t\treturn (this._getIdRegion(region, this.region_string_to_number));\n\t}\n\n\tpublic getIdRegionCustom(region:string): number|undefined {\n\t\treturn (this._getIdRegion(region, this.region_custom_string_to_number));\n\t}\n\n\tpublic getListRegion(): Array {\n\t\tlet out:Array;\n\n\t\tout = this.region_standart;\n\t\tif (this.us_lr == true)\n\t\t\tout = out.concat([this.REGION_US_LR]);\n\t\tif (this.eu_lr == true)\n\t\t\tout = out.concat([this.REGION_EU_LR]);\n\t\tout = out.sort();\n\t\treturn (out);\n\t}\n\n\tconstructor(us_lr?:boolean, eu_lr?:boolean) {\n\t\tif (us_lr == undefined)\n\t\t\tus_lr = false;\n\t\tif (eu_lr == undefined)\n\t\t\teu_lr = false;\n\t\tthis.us_lr = us_lr;\n\t\tthis.eu_lr = eu_lr;\n\t}\n}","import {sleep, checksum, calcSigmaCRC16} from \"../other/utilities\";\nimport {WEB_TOOLS_BETA} from \"../other/define\"\nimport {splitHexBuff} from \"../other/utilities\"\n\nexport {SapiClass, SapiClassStatus, SapiClassFuncId, SapiClassRet, SapiClassSerialAPISetupCmd, SapiSerialOptionFilters, SapiClassNodeIdBaseType, SapiClassDetect, SapiClassDetectType, SapiClassDetectTypeFunc, SapiClassDetectWait, SapiClassUpdateProcess};\n\ninterface SapiClassDetectTypeFunc {\n\t(): Promise\n}\n\ntype SapiClassUpdateProcess = (percentage:number) => void;\n\nenum SapiClassDetectType\n{\n\tRAZBERRY,\n\tZUNO,\n\tUNKNOWN,\n}\n\ninterface SapiClassDetect\n{\n\tstatus:SapiClassStatus;\n\ttype:SapiClassDetectType;\n\tbaudrate:number;\n}\n\ninterface SapiClassDetectWait\n{\n\tstatus:SapiClassStatus;\n\ttype:SapiClassDetectType;\n}\n\ninterface SapiSerialOptionFilters\n{\n\tusbVendorId:number;\n\tusbProductId:number;\n}\n\ninterface SapiClassRet\n{\n\tstatus:SapiClassStatus;\n\tcrc:number;\n\tcmd:number;\n\traw:Array;\n\tdata:Array;\n}\n\nenum SapiClassStatus\n{\n\tOK = 0x00,\n\tNO_ACK,\n\tINVALID_DATA_LEN,\n\tINVALID_CRC,\n\tNO_SOF,\n\tNO_LENGHT,\n\tWRITE,\n\tWRONG_LENGHT,\n\tWRONG_CMD,\n\tPORT_NOT_OPEN,\n\tPORT_NOT_CLOSE,\n\tPORT_NOT_REQUEST,\n\tPORT_USED,\n\tPORT_BUSY,\n\tTIMEOUT_RCV,\n\tSERIAL_UN_SUPPORT,\n\tSERIAL_BUSY,\n\tREQUEST_ONE_SHOT,\n\tREQUEST_NO_SELECT,\n\tZUNO_NO_FREEZE,\n\tZUNO_START_WRONG_LENG,\n\tZUNO_START_WRONG_DATA,\n\tZUNO_START_WRONG_FRAME,\n\tDETECTED_UNC_COMMAND,\n\tDETECTED_NOT_FIND,\n\tDETECTED_CANCEL,\n\tDETECTED_UNC,\n\tDETECTED_TARGET_TYPE,\n\tUPDATE_UNK,\n\tUPDATE_TIMEOUT,\n\tUPDATE_PROCESS,\n\tUPDATE_STEP_FAILL,\n\tWRONG_RETRIES_CAN,\n\tWRONG_RETRIES_NAK,\n\tTIMEOUT_RCV_I,\n\tLAST_STATUS,\n}\n\nenum SapiClassNodeIdBaseType\n{\n\tTYPE_8_BIT = 0x1,\n\tTYPE_16_BIT = 0x2,\n}\n\nenum SapiClassSerialAPISetupCmd\n{\n\t// /**\n\t// * The first 8 commands are given as bit-flags, and when all bits were consumed, a byte-array was created to give\n\t// * more room.\n\t// * The first 8 flags are the only ones that shall be used to fill the first byte when generating the response in\n\t// * pOutputBuffer for the command, SERIAL_API_SETUP_CMD_SUPPORTED.\n\t// * This is kept for backwards compatibility.\n\t// */\n\tSERIAL_API_SETUP_CMD_UNSUPPORTED,\n\tSERIAL_API_SETUP_CMD_SUPPORTED = 1, //1<<0\n\tSERIAL_API_SETUP_CMD_TX_STATUS_REPORT = 2, //1<<1\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET = 4, //1<<2 @Deprecated\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET = 8, //1<<3 @Deprecated\n\tSERIAL_API_SETUP_CMD_TX_GET_MAX_PAYLOAD_SIZE = 16, //1<<4\n\tSERIAL_API_SETUP_CMD_RF_REGION_GET = 32, //1<<5\n\tSERIAL_API_SETUP_CMD_RF_REGION_SET = 64, //1<<6\n\tSERIAL_API_SETUP_CMD_NODEID_BASETYPE_SET = 128, //1<<7\n\t// /**\n\t// * The below values are not flags and shall only be used with BITMASK_ADD_CMD() when generating\n\t// * the response for the command, SERIAL_API_SETUP_CMD_SUPPORTED.\n\t// */\n\tSERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_SET = 3,\n\tSERIAL_API_SETUP_CMD_MAX_LR_TX_PWR_GET = 5,\n\t\t\t\t\t\t// The values 6 and 7 are unused, but not reserved.\n\tSERIAL_API_SETUP_CMD_TX_GET_MAX_LR_PAYLOAD_SIZE = 17,\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_SET_16_BIT = 18,\n\tSERIAL_API_SETUP_CMD_TX_POWERLEVEL_GET_16_BIT = 19,\n}\n\nenum SapiClassFuncId\n{\n\tFUNC_ID_SERIAL_API_GET_INIT_DATA = 0x02,\n\tFUNC_ID_SERIAL_API_APPL_NODE_INFORMATION = 0x03,\n\tFUNC_ID_APPLICATION_COMMAND_HANDLER = 0x04,\n\tFUNC_ID_ZW_GET_CONTROLLER_CAPABILITIES = 0x05,\n\tFUNC_ID_SERIAL_API_SET_TIMEOUTS = 0x06,\n\tFUNC_ID_SERIAL_API_GET_CAPABILITIES = 0x07,\n\tFUNC_ID_SERIAL_API_SOFT_RESET = 0x08,\n\tFUNC_ID_ZW_GET_PROTOCOL_VERSION = 0x09,\n\tFUNC_ID_SERIAL_API_STARTED = 0x0A,\n\tFUNC_ID_SERIAL_API_SETUP = 0x0B,\n\tFUNC_ID_SERIAL_API_APPL_NODE_INFORMATION_CMD_CLASSES = 0x0C,\n\tFUNC_ID_ZW_SEND_DATA_EX = 0x0E,\n\tFUNC_ID_ZW_SEND_DATA_MULTI_EX = 0x0F,\n\tFUNC_ID_ZW_SET_RF_RECEIVE_MODE = 0x10,\n\tFUNC_ID_ZW_SET_SLEEP_MODE = 0x11,\n\tFUNC_ID_ZW_SEND_NODE_INFORMATION = 0x12,\n\tFUNC_ID_ZW_SEND_DATA = 0x13,\n\tFUNC_ID_ZW_SEND_DATA_MULTI = 0x14,\n\tFUNC_ID_ZW_GET_VERSION = 0x15,\n\tFUNC_ID_ZW_SEND_DATA_ABORT = 0x16,\n\tFUNC_ID_ZW_RF_POWER_LEVEL_SET = 0x17,\n\tFUNC_ID_ZW_SEND_DATA_META = 0x18,\n\tFUNC_ID_ZW_RESERVED_SD = 0x19,\n\tFUNC_ID_ZW_RESERVED_SDM = 0x1A,\n\tFUNC_ID_ZW_RESERVED_SRI = 0x1B,\n\tFUNC_ID_ZW_GET_RANDOM = 0x1C,\n\tFUNC_ID_ZW_RANDOM = 0x1D,\n\tFUNC_ID_ZW_RF_POWER_LEVEL_REDISCOVERY_SET = 0x1E,\n\tFUNC_ID_MEMORY_GET_ID = 0x20,\n\tFUNC_ID_MEMORY_GET_BYTE = 0x21,\n\tFUNC_ID_MEMORY_PUT_BYTE = 0x22,\n\tFUNC_ID_MEMORY_GET_BUFFER = 0x23,\n\tFUNC_ID_MEMORY_PUT_BUFFER = 0x24,\n\tFUNC_ID_SERIAL_API_GET_APPL_HOST_MEMORY_OFFSET = 0x25,\n\tFUNC_ID_DEBUG_OUTPUT = 0x26,\n\tFUNC_ID_AUTO_PROGRAMMING = 0x27,\n\tFUNC_ID_NVR_GET_VALUE = 0x28,\n\tFUNC_ID_NVM_GET_ID = 0x29,\n\tFUNC_ID_NVM_EXT_READ_LONG_BUFFER = 0x2A,\n\tFUNC_ID_NVM_EXT_WRITE_LONG_BUFFER = 0x2B,\n\tFUNC_ID_NVM_EXT_READ_LONG_BYTE = 0x2C,\n\tFUNC_ID_NVM_EXT_WRITE_LONG_BYTE = 0x2D,\n\tFUNC_ID_NVM_BACKUP_RESTORE = 0x2E,\n\tFUNC_ID_ZW_NVR_GET_APP_VALUE = 0x2F,\n\tFUNC_ID_CLOCK_SET = 0x30,\n\tFUNC_ID_CLOCK_GET = 0x31,\n\tFUNC_ID_CLOCK_CMP = 0x32,\n\tFUNC_ID_RTC_TIMER_CREATE = 0x33,\n\tFUNC_ID_RTC_TIMER_READ = 0x34,\n\tFUNC_ID_RTC_TIMER_DELETE = 0x35,\n\tFUNC_ID_RTC_TIMER_CALL = 0x36,\n\tFUNC_ID_CLEAR_TX_TIMERS = 0x37,\n\tFUNC_ID_GET_TX_TIMERS = 0x38,\n\tFUNC_ID_ZW_CLEAR_NETWORK_STATS = 0x39,\n\tFUNC_ID_ZW_GET_NETWORK_STATS = 0x3A,\n\tFUNC_ID_ZW_GET_BACKGROUND_RSSI = 0x3B,\n\tFUNC_ID_ZW_SET_LISTEN_BEFORE_TALK_THRESHOLD = 0x3C,\n\tFUNC_ID_ZW_REMOVE_NODE_ID_FROM_NETWORK = 0x3F,\n\tFUNC_ID_ZW_SET_LEARN_NODE_STATE = 0x40,\n\tFUNC_ID_ZW_GET_NODE_PROTOCOL_INFO = 0x41,\n\tFUNC_ID_ZW_SET_DEFAULT = 0x42,\n\tFUNC_ID_ZW_NEW_CONTROLLER = 0x43,\n\tFUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE = 0x44,\n\tFUNC_ID_ZW_REPLICATION_SEND_DATA = 0x45,\n\tFUNC_ID_ZW_ASSIGN_RETURN_ROUTE = 0x46,\n\tFUNC_ID_ZW_DELETE_RETURN_ROUTE = 0x47,\n\tFUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE = 0x48,\n\tFUNC_ID_ZW_REQUEST_NODETYPE_NEIGHBOR_UPDATE = 0x68,\n\tFUNC_ID_ZW_APPLICATION_UPDATE = 0x49,\n\tFUNC_ID_ZW_ADD_NODE_TO_NETWORK = 0x4A,\n\tFUNC_ID_ZW_REMOVE_NODE_FROM_NETWORK = 0x4B,\n\tFUNC_ID_ZW_CREATE_NEW_PRIMARY = 0x4C,\n\tFUNC_ID_ZW_CONTROLLER_CHANGE = 0x4D,\n\tFUNC_ID_ZW_RESERVED_FN = 0x4E,\n\tFUNC_ID_ZW_ASSIGN_PRIORITY_RETURN_ROUTE = 0x4F,\n\tFUNC_ID_ZW_SET_LEARN_MODE = 0x50,\n\tFUNC_ID_ZW_ASSIGN_SUC_RETURN_ROUTE = 0x51,\n\tFUNC_ID_ZW_ENABLE_SUC = 0x52,\n\tFUNC_ID_ZW_REQUEST_NETWORK_UPDATE = 0x53,\n\tFUNC_ID_ZW_SET_SUC_NODE_ID = 0x54,\n\tFUNC_ID_ZW_DELETE_SUC_RETURN_ROUTE = 0x55,\n\tFUNC_ID_ZW_GET_SUC_NODE_ID = 0x56,\n\tFUNC_ID_ZW_SEND_SUC_ID = 0x57,\n\tFUNC_ID_ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE = 0x58,\n\tFUNC_ID_ZW_REDISCOVERY_NEEDED = 0x59,\n\tFUNC_ID_ZW_REQUEST_NODE_NEIGHBOR_UPDATE_OPTION = 0x5A,\n\tFUNC_ID_ZW_SUPPORT9600_ONLY = 0x5B,\n\tFUNC_ID_ZW_REQUEST_NEW_ROUTE_DESTINATIONS = 0x5C,\n\tFUNC_ID_ZW_IS_NODE_WITHIN_DIRECT_RANGE = 0x5D,\n\tFUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION = 0x5E,\n\tFUNC_ID_ZW_EXPLORE_REQUEST_EXCLUSION = 0x5F,\n\tFUNC_ID_ZW_REQUEST_NODE_INFO = 0x60,\n\tFUNC_ID_ZW_REMOVE_FAILED_NODE_ID = 0x61,\n\tFUNC_ID_ZW_IS_FAILED_NODE_ID = 0x62,\n\tFUNC_ID_ZW_REPLACE_FAILED_NODE = 0x63,\n\tFUNC_ID_ZW_SET_ROUTING_MAX_6_00 = 0x65,\n\tFUNC_ID_ZW_IS_PRIMARY_CTRL = 0x66,\n\tFUNC_ID_ZW_AES_ECB = 0x67,\n\tFUNC_ID_TIMER_START = 0x70,\n\tFUNC_ID_TIMER_RESTART = 0x71,\n\tFUNC_ID_TIMER_CANCEL = 0x72,\n\tFUNC_ID_TIMER_CALL = 0x73,\n\tFUNC_ID_ZW_FIRMWARE_UPDATE_NVM = 0x78,\n\tFUNC_ID_GET_ROUTING_TABLE_LINE = 0x80,\n\tFUNC_ID_GET_TX_COUNTER = 0x81,\n\tFUNC_ID_RESET_TX_COUNTER = 0x82,\n\tFUNC_ID_STORE_NODEINFO = 0x83,\n\tFUNC_ID_STORE_HOMEID = 0x84,\n\tFUNC_ID_LOCK_ROUTE_RESPONSE = 0x90,\n\tFUNC_ID_ZW_SEND_DATA_ROUTE_DEMO = 0x91,\n\tFUNC_ID_ZW_GET_PRIORITY_ROUTE = 0x92,\n\tFUNC_ID_ZW_SET_PRIORITY_ROUTE = 0x93,\n\tFUNC_ID_SERIAL_API_TEST = 0x95,\n\tFUNC_ID_SERIAL_API_EXT = 0x98,\n\tFUNC_ID_ZW_SECURITY_SETUP = 0x9C,\n\tFUNC_ID_APPLICATION_SECURITY_EVENT = 0x9D,\n\tFUNC_ID_SERIAL_API_APPL_SLAVE_NODE_INFORMATION = 0xA0,\n\tFUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER = 0xA1,\n\tFUNC_ID_ZW_SEND_SLAVE_NODE_INFORMATION = 0xA2,\n\tFUNC_ID_ZW_SEND_SLAVE_DATA = 0xA3,\n\tFUNC_ID_ZW_SET_SLAVE_LEARN_MODE = 0xA4,\n\tFUNC_ID_ZW_GET_VIRTUAL_NODES = 0xA5,\n\tFUNC_ID_ZW_IS_VIRTUAL_NODE = 0xA6,\n\tFUNC_ID_ZW_RESERVED_SSD = 0xA7,\n\tFUNC_ID_APPLICATION_COMMAND_HANDLER_BRIDGE = 0xA8,\n\tFUNC_ID_ZW_SEND_DATA_BRIDGE = 0xA9,\n\tFUNC_ID_ZW_SEND_DATA_META_BRIDGE = 0xAA,\n\tFUNC_ID_ZW_SEND_DATA_MULTI_BRIDGE = 0xAB,\n\tFUNC_ID_PWR_SETSTOPMODE = 0xB0,\n\tFUNC_ID_PWR_CLK_PD = 0xB1,\n\tFUNC_ID_PWR_CLK_PUP = 0xB2,\n\tFUNC_ID_PWR_SELECT_CLK = 0xB3,\n\tFUNC_ID_ZW_SET_WUT_TIMEOUT = 0xB4,\n\tFUNC_ID_ZW_IS_WUT_KICKED = 0xB5,\n\tFUNC_ID_ZW_WATCHDOG_ENABLE = 0xB6,\n\tFUNC_ID_ZW_WATCHDOG_DISABLE = 0xB7,\n\tFUNC_ID_ZW_WATCHDOG_KICK = 0xB8,\n\tFUNC_ID_ZW_SET_EXT_INT_LEVEL = 0xB9,\n\tFUNC_ID_ZW_RF_POWER_LEVEL_GET = 0xBA,\n\tFUNC_ID_ZW_GET_NEIGHBOR_COUNT = 0xBB,\n\tFUNC_ID_ZW_ARE_NODES_NEIGHBOURS = 0xBC,\n\tFUNC_ID_ZW_TYPE_LIBRARY = 0xBD,\n\tFUNC_ID_ZW_SEND_TEST_FRAME = 0xBE,\n\tFUNC_ID_ZW_GET_PROTOCOL_STATUS = 0xBF,\n\tFUNC_ID_ZW_SET_PROMISCUOUS_MODE = 0xD0,\n\tFUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER = 0xD1,\n\tFUNC_ID_ZW_WATCHDOG_START = 0xD2,\n\tFUNC_ID_ZW_WATCHDOG_STOP = 0xD3,\n\tFUNC_ID_ZW_SET_ROUTING_MAX = 0xD4,\n\tFUNC_ID_ZW_GET_ROUTING_MAX = 0xD5,\n\tFUNC_ID_PM_STAY_AWAKE = 0xD7,\n\tFUNC_ID_PM_CANCEL = 0xD8,\n\tFUNC_ID_ZW_NETWORK_MANAGEMENT_SET_MAX_INCLUSION_REQUEST_INTERVALS = 0xD6,\n\tFUNC_ID_ZW_INITIATE_SHUTDOWN = 0xD9,\n\tFUNC_ID_SERIAL_API_GET_LR_NODES = 0xDA,\n\tFUNC_ID_GET_LR_CHANNEL = 0xDB,\n\tFUNC_ID_SET_LR_CHANNEL = 0xDC,\n\tFUNC_ID_ZW_SET_LR_VIRTUAL_IDS = 0xDD,\n\tFUNC_ID_GET_DCDC_CONFIG = 0xDE,\n\tFUNC_ID_SET_DCDC_CONFIG = 0xDF,\n\tFUNC_ID_ZW_NUNIT_CMD = 0xE0,\n\tFUNC_ID_ZW_NUNIT_INIT = 0xE1,\n\tFUNC_ID_ZW_NUNIT_LIST = 0xE2,\n\tFUNC_ID_ZW_NUNIT_RUN = 0xE3,\n\tFUNC_ID_ZW_NUNIT_END = 0xE4,\n\tFUNC_ID_ENABLE_RADIO_PTI = 0xE7,\n\tFUNC_ID_GET_RADIO_PTI = 0xE8,\n\tFUNC_ID_SEND_NOP = 0xE9,\n\tFUNC_ID_SERIAL_API_POWER_MANAGEMENT = 0xEE,\n\tFUNC_ID_SERIAL_API_READY = 0xEF,\n\tFUNC_ID_PROPRIETARY_0 = 0xF0,\n\tFUNC_ID_PROPRIETARY_1 = 0xF1,\n\tFUNC_ID_PROPRIETARY_2 = 0xF2,\n\tFUNC_ID_PROPRIETARY_3 = 0xF3,\n\tFUNC_ID_PROPRIETARY_4 = 0xF4,\n\tFUNC_ID_PROPRIETARY_5 = 0xF5,\n\tFUNC_ID_PROPRIETARY_6 = 0xF6,\n\tFUNC_ID_PROPRIETARY_7 = 0xF7,\n\tFUNC_ID_PROPRIETARY_8 = 0xF8,\n\tFUNC_ID_PROPRIETARY_9 = 0xF9,\n\tFUNC_ID_PROPRIETARY_A = 0xFA,\n\tFUNC_ID_PROPRIETARY_B = 0xFB,\n\tFUNC_ID_PROPRIETARY_C = 0xFC,\n\tFUNC_ID_PROPRIETARY_D = 0xFD,\n\tFUNC_ID_PROPRIETARY_E = 0xFE,\n}\n\n// ------------------------------------------------------------------------------------------------------\ninterface SapiPortOpenOption\n{\n\tbaudRate:number;\n\tbufferSize:number;\n}\n\ninterface SapiPort\n{\n\treadonly readable:ReadableStream;\n\treadonly writable:WritableStream;\n\tclose(): Promise;\n\topen(options?: SapiPortOpenOption): Promise;\n}\n\ninterface SapiSerialOption\n{\n\tfilters?:SapiSerialOptionFilters[];\n}\n\n\ninterface SapiSerial\n{\n\trequestPort(options?: SapiSerialOption): Promise;\n}\n\ninterface NavigatorExtSerial extends Navigator\n{\n\tserial:SapiSerial;\n}\n\n\nclass SapiClass {\n\tprivate readonly MAX_SEND_DATA_LENGHT\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0xA0;\n\n\tprivate readonly SOF:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\tprivate readonly ACK:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x06;\n\tprivate readonly NAK:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x15;\n\tprivate readonly CAN:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x18;\n\n\tprivate readonly REQUEST:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x00;\n\tprivate readonly RESPONSE:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x01;\n\n\tprivate readonly ADDITIONAL_SIZE:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 0x03;\n\n\tpublic readonly BAUDRATE\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= [115200, 230400, 460800, 921600];\n\tprivate readonly dtr_timeout:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 250;// The time for the capacitor on the DTR line to recharge\n\n\tprivate readonly RETRIES_CAN:number\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= 100;\n\n\tprivate b_busy:boolean\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= false;\n\tprivate state_lock:boolean\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= false;\n\tprivate b_open:boolean\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= false;\n\tprivate port:SapiPort|undefined\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= undefined;\n\tprivate queue:Array\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= [];\n\tprivate async_ret:Array\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= [];\n\tprivate detect_type:SapiClassDetectType\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= SapiClassDetectType.UNKNOWN;\n\n\tprivate async _readWithTimeout(timeout:number): Promise {\n\t\tlet out:Uint8Array;\n\n\t\tif (this.port == undefined || this.port.readable == null)\n\t\t\treturn (new Uint8Array([]));\n\t\tconst reader = this.port.readable.getReader();\n\t\tconst timer = setTimeout(() => {\n\t\t\treader.releaseLock();\n\t\t}, timeout);\n\t\ttry {\n\t\t\tout = (await reader.read()).value;\n\t\t} catch (err) {\n\t\t\tout = new Uint8Array([]);\n\t\t}\n\t\tclearTimeout(timer);\n\t\treader.releaseLock();\n\t\treturn (out);\n\t}\n\n\tprivate async _read(num:number): Promise> {\n\t\tlet out:Array, i:number, rep:number, tempos:number|undefined;\n\n\t\trep = 0x0;\n\t\twhile (rep < 1) {\n\t\t\tif (this.queue.length >= num) {\n\t\t\t\tout = [];\n\t\t\t\ti = 0x0;\n\t\t\t\twhile (i < num) {\n\t\t\t\t\ttempos = this.queue.shift();\n\t\t\t\t\tif (tempos == undefined)\n\t\t\t\t\t\tbreak ;\n\t\t\t\t\tout.push(tempos);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tconst value:Uint8Array = await this._readWithTimeout(20);\n\t\t\ti = 0x0;\n\t\t\twhile (i < value.byteLength) {\n\t\t\t\tthis.queue.push(value[i])\n\t\t\t\ti++;\n\t\t\t}\n\t\t\trep++;\n\t\t}\n\t\tif (num >= this.queue.length)\n\t\t\tnum = this.queue.length;\n\t\tout = [];\n\t\ti = 0x0;\n\t\twhile (i < num) {\n\t\t\ttempos = this.queue.shift();\n\t\t\tif (tempos == undefined)\n\t\t\t\tbreak ;\n\t\t\tout.push(tempos);\n\t\t\ti++;\n\t\t}\n\t\treturn (out);\n\t}\n\n\tprivate async _write(data:Array): Promise {\n\t\tif (this.port == undefined || this.port.writable == null)\n\t\t\treturn (false);\n\t\tconst data_uint8:Uint8Array = new Uint8Array(data);\n\t\tconst writer = this.port.writable.getWriter();\n\t\tawait writer.write(data_uint8);\n\t\twriter.releaseLock();\n\t\tif (WEB_TOOLS_BETA == true)\n\t\t\tconsole.log(\">> \", splitHexBuff(data_uint8));\n\t\treturn (true);\n\t}\n\n\tprivate async _recv_async(): Promise {\n\t\tfor (;;) {\n\t\t\tif (await this._recvIncomingRequestAsyn(100) == false)\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate async _clear(): Promise {\n\t\tawait this._recv_async();\n\t\tthis.queue = [];\n\t\tfor (;;) {\n\t\t\tconst value = await this._read(50);\n\t\t\tif (value.length == 0x0)\n\t\t\t\treturn ;\n\t\t}\n\t}\n\n\tprivate async _sendData(cmd:number, databuff:Array): Promise {\n\t\tlet final_data:Array;\n\n\t\tconst data_len = databuff.length + this.ADDITIONAL_SIZE;\n\t\tif (data_len > 255) {\n\t\t\tconst crc_data:Array = [0x00, this.REQUEST, cmd].concat(databuff);\n\t\t\tfinal_data = [0x00, (data_len >> 8)& 0x0FF, data_len & 0x0FF, this.REQUEST, cmd].concat(databuff);\n\t\t\tconst crc16:number = calcSigmaCRC16(0x1D0F, crc_data, 0, crc_data.length);\n\t\t\tfinal_data = [this.SOF].concat(final_data).concat([(crc16 >> 8) & 0xFF, (crc16) & 0xFF]);\n\t\t\tif (await this._write(final_data) == false)\n\t\t\t\treturn (false);\n\t\t\treturn (true);\n\t\t}\n\t\tfinal_data = [data_len & 0x0FF, this.REQUEST, cmd].concat(databuff);\n\t\tconst crc:number = checksum(final_data);\n\t\tfinal_data = [this.SOF].concat(final_data).concat([crc]);\n\t\tif (await this._write(final_data) == false)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate async _sendNack(): Promise {\n\t\treturn (await (this._write([this.NAK])));\n\t}\n\n\tprivate async _sendAck(): Promise {\n\t\treturn (await (this._write([this.ACK])));\n\t}\n\n\tprivate async _waitSOF(timeout:number): Promise {\n\t\tconst sof_timeout:number = Date.now() + timeout;\n\n\t\twhile (sof_timeout > Date.now()) {\n\t\t\tconst sof:Array = await this._read(0x1);\n\t\t\tif (sof.length == 0x0) {\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tif (sof[0x0] == this.SOF)\n\t\t\t\treturn (true);\n\t\t}\n\t\treturn (false);\n\t}\n\n\tprivate async _send_cmd(cmd:number, databuff:Array): Promise {\n\t\tlet rbuff:Array, retries_nak:number, retries_can:number, retries_ack:number;\n\n\t\tif (this.b_open == false)\n\t\t\treturn (SapiClassStatus.PORT_NOT_OPEN);\n\t\tawait this._recv_async();\n\t\tretries_nak = 0x3;\n\t\tretries_can = this.RETRIES_CAN;\n\t\tretries_ack = 0x6;\n\t\tfor (;;) {\n\t\t\tif (retries_nak < 0x0)\n\t\t\t\treturn (SapiClassStatus.WRONG_RETRIES_NAK);\n\t\t\tif (retries_can < 0x0)\n\t\t\t\treturn (SapiClassStatus.WRONG_RETRIES_CAN);\n\t\t\tif (await this._sendData(cmd, databuff) == false)\n\t\t\t\treturn (SapiClassStatus.WRITE);\n\t\t\tfor (;;) {\n\t\t\t\tif (retries_ack < 0x0)\n\t\t\t\t\treturn (SapiClassStatus.NO_ACK);\n\t\t\t\trbuff = await this._read(0x1)\n\t\t\t\tif (rbuff.length == 0x0) {\n\t\t\t\t\tretries_ack--;\n\t\t\t\t\tcontinue ;\n\t\t\t\t}\n\t\t\t\tif (rbuff[0] == this.SOF) {\n\t\t\t\t\tawait this._recvIncomingRequestAsyn(100, false);\n\t\t\t\t\tcontinue ;\n\t\t\t\t}\n\t\t\t\tbreak ;\n\t\t\t}\n\t\t\tif (rbuff[0] == this.ACK)\n\t\t\t\tbreak ;\n\t\t\tif (rbuff[0] == this.CAN) {\n\t\t\t\tawait this._recv_async();\n\t\t\t\tretries_can--;\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tif (rbuff[0] == this.NAK) {\n\t\t\t\tretries_nak--;\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t}\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _request(filters?:SapiSerialOptionFilters[]): Promise {\n\t\tlet port:SapiPort;\n\n\t\tconst nav_ext_serial:NavigatorExtSerial = ((window.navigator as unknown) as NavigatorExtSerial);\n\t\tif (this.port != undefined)\n\t\t\treturn (SapiClassStatus.REQUEST_ONE_SHOT);\n\t\ttry {\n\t\t\tconst options:SapiSerialOption = {filters:filters};\n\t\t\tport = await nav_ext_serial.serial.requestPort(options);\n\t\t} catch(e) {\n\t\t\treturn (SapiClassStatus.REQUEST_NO_SELECT);\n\t\t}\n\t\tthis.port = port;\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _open(baudRate:number): Promise {\n\t\tif (this.port == undefined)\n\t\t\treturn (SapiClassStatus.PORT_NOT_REQUEST);\n\t\tif (this.b_open == true)\n\t\t\treturn (SapiClassStatus.PORT_NOT_OPEN);\n\t\ttry {\n\t\t\tawait this.port.open({ baudRate, bufferSize: 8192 });\n\t\t} catch(e) {\n\t\t\treturn (SapiClassStatus.PORT_USED);\n\t\t}\n\t\tthis.b_open = true;\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _close(): Promise {\n\t\tif (this.port == undefined)\n\t\t\treturn (SapiClassStatus.PORT_NOT_REQUEST);\n\t\tif (this.b_open == false)\n\t\t\treturn (SapiClassStatus.PORT_NOT_CLOSE);\n\t\tawait this.port.close();\n\t\tthis.b_open = false;\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _recvIncomingRequest_add(lenght:number): Promise> {\n\t\tlet buff_data:Array, wait_timeout:number;\n\n\t\tconst timout:number = 100;\n\t\tbuff_data = [];\n\t\twait_timeout = Date.now() + timout;\n\t\tfor (;;) {\n\t\t\tconst buffer:Array = await this._read(lenght - buff_data.length);\n\t\t\tbuff_data = buff_data.concat(buffer);\n\t\t\tif (buff_data.length == lenght)\n\t\t\t\tbreak ;\n\t\t\tif (buffer.length > 0x0) {\n\t\t\t\twait_timeout = Date.now() + timout;\n\t\t\t\tcontinue ;\n\t\t\t}\n\t\t\tif (Date.now() >= wait_timeout) {\n\t\t\t\tawait this._sendNack();\n\t\t\t\treturn ([]);\n\t\t\t}\n\t\t}\n\t\treturn (buff_data);\n\t}\n\n\tprivate async _recvIncomingRequest(timeout:number, wait_sof:boolean = true): Promise {\n\t\tlet buff_data:Array;\n\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tif (this.b_open == false) {\n\t\t\tout.status = SapiClassStatus.PORT_NOT_OPEN;\n\t\t\treturn (out);\n\t\t}\n\t\tif (wait_sof == true) {\n\t\t\tif (await this._waitSOF(timeout) == false) {\n\t\t\t\tout.status = SapiClassStatus.NO_SOF;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t}\n\t\tbuff_data = await this._recvIncomingRequest_add(0x1);\n\t\tif (buff_data.length != 0x1) {\n\t\t\tout.status = SapiClassStatus.NO_LENGHT;\n\t\t\treturn (out);\n\t\t}\n\t\tconst len_data:number = buff_data[0x0];\n\t\tif (len_data < 0x3) {\n\t\t\tout.status = SapiClassStatus.WRONG_LENGHT;\n\t\t\treturn (out);\n\t\t}\n\t\tbuff_data = await this._recvIncomingRequest_add(len_data);\n\t\tif (buff_data.length != len_data) {\n\t\t\tout.status = SapiClassStatus.INVALID_DATA_LEN;\n\t\t\treturn (out);\n\t\t}\n\t\tout.crc = checksum([len_data].concat(buff_data.slice(0, len_data - 0x1)));\n\t\tif (out.crc != buff_data[len_data - 1]) {\n\t\t\tawait this._sendNack();\n\t\t\tout.status = SapiClassStatus.INVALID_CRC;\n\t\t\treturn (out);\n\t\t}\n\t\tawait this._sendAck();\n\t\tout.raw = [this.SOF, len_data].concat(buff_data);\n\t\tif (WEB_TOOLS_BETA == true)\n\t\t\tconsole.log(\"<< \", splitHexBuff(out.raw));\n\t\tout.cmd = out.raw[0x3];\n\t\tout.data = out.raw.slice(0x4, out.raw.length - 0x1);\n\t\treturn (out);\n\t}\n\n\tprivate async _recvIncomingRequestAsyn(timeout:number, wait_sof:boolean = true): Promise {\n\t\tconst res:SapiClassRet = await this._recvIncomingRequest(timeout, wait_sof);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (false);\n\t\t// this.async_ret.push(res);\n\t\treturn (true);\n\t}\n\n\tprivate _sendCommandUnSz_rcv_test(res:SapiClassRet, cmd:number): boolean {\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (false);\n\t\tif (res.cmd != cmd)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tprivate async _sendCommandUnSz(cmd:number, args:Array, timeout:number, cmd_ret?:number): Promise {\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tout.status = await this._send_cmd(cmd, args);\n\t\tif (out.status != SapiClassStatus.OK) {\n\t\t\treturn (out);\n\t\t}\n\t\tconst wait_timeout:number = Date.now() + timeout;\n\t\tfor (;;) {\n\t\t\tconst current_timeout:number = Date.now();\n\t\t\tif (current_timeout >= wait_timeout) {\n\t\t\t\tout.status = SapiClassStatus.TIMEOUT_RCV;\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tconst res:SapiClassRet = await this._recvIncomingRequest(wait_timeout - current_timeout);\n\t\t\tif (cmd_ret == undefined)\n\t\t\t\tcmd_ret = cmd;\n\t\t\tif (this._sendCommandUnSz_rcv_test(res, cmd_ret) == true)\n\t\t\t\treturn (res);\n\t\t}\n\t}\n\n\tprivate async _recvIncomingRequest_wait(timeout:number, cmd_ret?:number): Promise {\n\t\tlet res:SapiClassRet, i:number;\n\n\t\tres = await this._recvIncomingRequest(timeout);\n\t\tif (cmd_ret == undefined)\n\t\t\treturn (res);\n\t\ti = this.RETRIES_CAN;\n\t\tfor (;;) {\n\t\t\tif (res.status != SapiClassStatus.OK)\n\t\t\t\tbreak ;\n\t\t\tif (res.cmd == cmd_ret)\n\t\t\t\tbreak ;\n\t\t\tif (i < 0x0) {\n\t\t\t\tres.status = SapiClassStatus.TIMEOUT_RCV_I;\n\t\t\t\tbreak ;\n\t\t\t}\n\t\t\tres = await this._recvIncomingRequest(100);\n\t\t\ti--;\n\t\t}\n\t\treturn (res);\n\t}\n\n\tpublic async recvIncomingRequest(timeout:number, cmd_ret?:number): Promise {\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tconst res:SapiClassRet = await this._recvIncomingRequest_wait(timeout, cmd_ret);\n\t\tthis.b_busy = false;\n\t\treturn (res);\n\t}\n\n\tpublic async sendCommandUnSz(cmd:number, args:Array, timeout:number = 2000, cmd_ret?:number): Promise {\n\t\tconst out:SapiClassRet = { status: SapiClassStatus.OK, crc:0x0, cmd:0x0, raw:[], data:[]};\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tconst res = await this._sendCommandUnSz(cmd, args, timeout, cmd_ret);\n\t\tthis.b_busy = false;\n\t\treturn (res);\n\t}\n\n\tpublic lock() {\n\t\tthis.state_lock = true;\n\t}\n\n\tpublic unlock() {\n\t\tthis.state_lock = false;\n\t}\n\n\tpublic is_busy(): boolean {\n\t\tif (this.state_lock == true)\n\t\t\treturn (true);\n\t\treturn (this.busy());\n\t}\n\n\tpublic busy(): boolean {\n\t\treturn (this.b_busy);\n\t}\n\tpublic static supported(): boolean {\n\t\tif (!(\"serial\" in window.navigator))\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tpublic async request(filters?:SapiSerialOptionFilters[]): Promise {\n\t\tif (this.busy() == true)\n\t\t\treturn (SapiClassStatus.SERIAL_BUSY);\n\t\tif (SapiClass.supported() == false)\n\t\t\treturn (SapiClassStatus.SERIAL_UN_SUPPORT);\n\t\tthis.b_busy = true;\n\t\tconst out:SapiClassStatus = await this._request(filters);\n\t\tthis.b_busy = false;\n\t\treturn (out);\n\t}\n\n\tpublic async close(): Promise {\n\t\tif (this.busy() == true)\n\t\t\treturn (SapiClassStatus.SERIAL_BUSY);\n\t\tthis.b_busy = true;\n\t\tawait this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 500);\n\t\tconst out:SapiClassStatus = await this._close();\n\t\tthis.b_busy = false;\n\t\tthis.detect_type = SapiClassDetectType.UNKNOWN;\n\t\tthis.unlock();\n\t\treturn (out);\n\t}\n\n\tpublic type(): SapiClassDetectType {\n\t\treturn (this.detect_type);\n\t}\n\n\tprivate async _detect_rcv_freeze_zuno(out:SapiClassDetectWait): Promise {\n\t\tconst freeze_zuno_info:SapiClassRet = await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000);\n\t\tif (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0) {\n\t\t\tout.status = SapiClassStatus.ZUNO_NO_FREEZE;\n\t\t\treturn ;\n\t\t}\n\t\tout.type = SapiClassDetectType.ZUNO;\n\t\treturn ;\n\t}\n\n\tprivate async _detect_rcv_timout_async(out:SapiClassDetectWait, timout:number): Promise {\n\t\tconst res:SapiClassRet = await this._recvIncomingRequest(timout);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (false)\n\t\tif (res.status == SapiClassStatus.OK && res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET) {\n\t\t\tif (res.data.length < 0x2) {\n\t\t\t\tout.status = SapiClassStatus.ZUNO_START_WRONG_LENG;\n\t\t\t\treturn (true);\n\t\t\t}\n\t\t\tif (res.data[0x0] != 0xFF) {\n\t\t\t\tout.status = SapiClassStatus.ZUNO_START_WRONG_FRAME;\n\t\t\t\treturn (true);\n\t\t\t}\n\t\t\tawait this._detect_rcv_freeze_zuno(out);\n\t\t\treturn (true);\n\t\t}\n\t\tif (res.cmd == SapiClassFuncId.FUNC_ID_SERIAL_API_STARTED) {\n\t\t\tout.type = SapiClassDetectType.RAZBERRY;\n\t\t\treturn (true);\n\t\t}\n\t\treturn (false);\n\t}\n\n\tprivate async _detect_rcv_timout(out:SapiClassDetectWait, timout:number): Promise {\n\t\tconst wait_timeout:number = Date.now() + timout;\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tout.status = SapiClassStatus.OK;\n\t\t\tif (await this._detect_rcv_timout_async(out, 200) == true)\n\t\t\t\treturn ;\n\t\t\tconst capabilities_info:SapiClassRet = await this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_GET_CAPABILITIES, [], 300);\n\t\t\tif (capabilities_info.status == SapiClassStatus.OK) {\n\t\t\t\t//VendorID = 0x0115 and ProductTypeID = 0x0210\n\t\t\t\tif (capabilities_info.data.length >= 0x6 && capabilities_info.data[0x2] == 0x1 && capabilities_info.data[0x3] == 0x15 && capabilities_info.data[0x4] == 0x2 && capabilities_info.data[0x5] == 0x10) {\n\t\t\t\t\tawait this._detect_rcv_freeze_zuno(out);\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tout.type = SapiClassDetectType.RAZBERRY;\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif (await this._detect_rcv_timout_async(out, 200) == true)//for old zuno\n\t\t\t\treturn ;\n\t\t}\n\t\tout.status = SapiClassStatus.UPDATE_TIMEOUT;\n\t}\n\n\tprivate async _detect_update(res:SapiClassRet): Promise {\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (SapiClassStatus.UPDATE_PROCESS);\n\t\tif (res.cmd != SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET)\n\t\t\treturn (SapiClassStatus.DETECTED_UNC_COMMAND);\n\t\tif (res.data.length < 0x2)\n\t\t\treturn (SapiClassStatus.ZUNO_START_WRONG_LENG);\n\t\tif (res.data[0x0] != 0x4 && res.data[0x1] != 0x1)\n\t\t\treturn (SapiClassStatus.ZUNO_START_WRONG_DATA);\n\t\treturn (SapiClassStatus.OK);\n\t}\n\n\tprivate async _detect(out:SapiClassDetect, baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise {\n\t\tlet i:number, res:SapiClassRet;\n\n\t\tif (this.port == undefined) {\n\t\t\tout.status = SapiClassStatus.PORT_NOT_REQUEST;\n\t\t\treturn ;\n\t\t}\n\t\tif (this.b_open == true) {\n\t\t\tout.status = await this._close();\n\t\t\tif (out.status != SapiClassStatus.OK)\n\t\t\t\treturn ;\n\t\t\tawait sleep(this.dtr_timeout);\n\t\t}\n\t\tconst baudrate_array:Array = this.BAUDRATE;\n\t\ti = baudrate.length;\n\t\twhile (i != 0x0) {\n\t\t\ti--;\n\t\t\tif (this.BAUDRATE.indexOf(baudrate[i]) != -1) {\n\t\t\t\tbaudrate_array.splice(baudrate_array.indexOf(baudrate[i]), 0x1);\n\t\t\t\tbaudrate_array.unshift(baudrate[i]);\n\t\t\t}\n\t\t}\n\t\ti = 0x0;\n\t\twhile (i < baudrate_array.length) {\n\t\t\tout.baudrate = baudrate_array[i];\n\t\t\tout.status = await this._open(baudrate_array[i]);\n\t\t\tif (out.status != SapiClassStatus.OK)\n\t\t\t\treturn ;\n\t\t\tconst wait:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\t\t\tawait this._detect_rcv_timout(wait, 1000);\n\t\t\tif (wait.status == SapiClassStatus.OK) {\n\t\t\t\tout.type = wait.type;\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif (wait.status != SapiClassStatus.UPDATE_TIMEOUT) {\n\t\t\t\tout.status = wait.status;\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tif (func != null) {\n\t\t\t\tawait this._clear();\n\t\t\t\tif (await func() == false) {\n\t\t\t\t\tout.status = SapiClassStatus.DETECTED_CANCEL;\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tconst wait:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\t\t\t\tawait this._detect_rcv_timout(wait, 2000);\n\t\t\t\tif (wait.status == SapiClassStatus.OK) {\n\t\t\t\t\tout.type = wait.type;\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t\tif (wait.status != SapiClassStatus.UPDATE_TIMEOUT) {\n\t\t\t\t\tout.status = wait.status;\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tout.status = await this._close();\n\t\t\tif (out.status != SapiClassStatus.OK)\n\t\t\t\treturn ;\n\t\t\tawait sleep(this.dtr_timeout);\n\t\t\ti++;\n\t\t}\n\t\tout.status = SapiClassStatus.DETECTED_NOT_FIND;\n\t}\n\n\tpublic async detect(baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise {\n\t\tconst out:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0};\n\t\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tawait this._detect(out, baudrate, func);\n\t\tthis.detect_type = out.type;\n\t\tthis.b_busy = false;\n\t\treturn (out);\n\t}\n\n\tpublic getQuantumSize(): number {\n\t\treturn (this.MAX_SEND_DATA_LENGHT);\n\t}\n\n\tprivate async _checkBootImage(addr:number): Promise {\n\t\tconst data_addr:Array = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF];\n\t\tawait this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x04].concat(data_addr), 100);\n\t}\n\n\tprivate async _update_wait_zuno(target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise {\n\t\tconst wait_timeout:number = Date.now() + 30000;\n\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tconst res:SapiClassRet = await this._recvIncomingRequest(1000);\n\t\t\tout.status = await this._detect_update(res);\n\t\t\tif (out.status == SapiClassStatus.UPDATE_TIMEOUT)\n\t\t\t\tcontinue ;\n\t\t\tbreak ;\n\t\t}\n\t\tif (target_type == SapiClassDetectType.RAZBERRY) {\n\t\t\tawait sleep(20000);\n\t\t\tconst out_detect:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0};\n\t\t\tawait this._detect(out_detect, [115200], null);\n\t\t\tout.type = out_detect.type;\n\t\t\tout.status = out_detect.status;\n\t\t\treturn ;\n\t\t}\n\t\tif (wait_timeout > Date.now()) {\n\t\t\tawait this._detect_rcv_timout(out, wait_timeout - Date.now());\n\t\t\treturn ;\n\t\t}\n\t\tout.status = SapiClassStatus.UPDATE_TIMEOUT;\n\t}\n\n\tprivate async _update_wait_razberry(target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise {\n\t\tif (target_type == SapiClassDetectType.RAZBERRY) {\n\t\t\tawait this._detect_rcv_timout(out, 30000);\n\t\t\treturn ;\n\t\t}\n\t\tawait sleep(20000);\n\t\tconst out_detect:SapiClassDetect = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN, baudrate:0x0};\n\t\tawait this._detect(out_detect, [115200], null);\n\t\tout.type = out_detect.type;\n\t\tout.status = out_detect.status;\n\t}\n\n\tprivate async _update(addr:number, target_type:SapiClassDetectType, out:SapiClassDetectWait): Promise {\n\t\tswitch (this.detect_type) {\n\t\t\tcase SapiClassDetectType.ZUNO:\n\t\t\t\tawait this._checkBootImage(addr);\n\t\t\t\tawait this._update_wait_zuno(target_type, out);\n\t\t\t\tbreak ;\n\t\t\tcase SapiClassDetectType.RAZBERRY:\n\t\t\t\tawait this._sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [], 200)\n\t\t\t\tawait this._update_wait_razberry(target_type, out);\n\t\t\t\tbreak ;\n\t\t\tdefault:\n\t\t\t\tout.status = SapiClassStatus.UPDATE_UNK;\n\t\t\t\tbreak ;\n\t\t}\n\t}\n\n\tpublic async update(addr:number, target_type:SapiClassDetectType): Promise {\n\t\tconst out:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tif (target_type == SapiClassDetectType.UNKNOWN) {\n\t\t\tout.status = SapiClassStatus.DETECTED_UNC;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tawait this._update(addr, target_type, out);\n\t\tthis.detect_type = out.type;\n\t\tthis.b_busy = false;\n\t\tif (out.status == SapiClassStatus.OK && out.type != target_type) {\n\t\t\tout.status = SapiClassStatus.DETECTED_TARGET_TYPE;\n\t\t\treturn (out);\n\t\t}\n\t\treturn (out);\n\t}\n\n\tpublic async detect_rcv(): Promise {\n\t\tconst out:SapiClassDetectWait = {status: SapiClassStatus.OK, type: SapiClassDetectType.UNKNOWN};\n\t\tif (this.busy() == true) {\n\t\t\tout.status = SapiClassStatus.PORT_BUSY;\n\t\t\treturn (out);\n\t\t}\n\t\tif (this.detect_type == SapiClassDetectType.UNKNOWN) {\n\t\t\tout.status = SapiClassStatus.DETECTED_UNC;\n\t\t\treturn (out);\n\t\t}\n\t\tthis.b_busy = true;\n\t\tconst detect_type:SapiClassDetectType = this.detect_type;\n\t\tawait this._detect_rcv_timout(out, 3000);\n\t\tthis.detect_type = out.type;\n\t\tthis.b_busy = false;\n\t\tif (out.type != detect_type) {\n\t\t\tout.status = SapiClassStatus.DETECTED_TARGET_TYPE;\n\t\t\treturn (out);\n\t\t}\n\t\treturn (out);\n\t}\n\n\n\tconstructor() {\n\t}\n\n}","import {WEB_TOOLS_BETA} from \"../other/define\"\n\nimport {\n\tSapiClass, SapiClassStatus, SapiClassFuncId, SapiClassRet, SapiClassDetectWait, SapiClassDetectType, SapiClassUpdateProcess,\n\tSapiClassDetectTypeFunc, SapiClassDetect\n} from \"./sapi\";\n\nimport {SapiRegionClass} from \"./region\";\n\nimport {costruct_int, toString, conv2Decimal, conv2DecimalPadding, checksum, arrayToStringHex, calcSigmaCRC16} from \"../other/utilities\";\nimport {HardwareChipClass} from \"../hardware/chip\"\n\nexport {ZunoSapiClass, ZunoSapiClassStatus, ZunoSapiClassBoardInfo, ZunoSapiClassParamInfo, ZunoSapiClassRegion, ZunoSapiClassPower, ZunoSapiClassS2Key, ZunoSapiClassSec};\n\nenum ELearnStatus\n{\n\tELEARNSTATUS_ASSIGN_COMPLETE, /**< Internal status. Not passed to application. */\n\tELEARNSTATUS_ASSIGN_NODEID_DONE, /**< Internal status. Node ID have been assigned */\n\tELEARNSTATUS_ASSIGN_RANGE_INFO_UPDATE, /**< Internal status. Node is doing Neighbor discovery */\n\tELEARNSTATUS_ASSIGN_INFO_PENDING, /**< Internal status. Not passed to application. */\n\tELEARNSTATUS_ASSIGN_WAITING_FOR_FIND, /**< Internal status. Not passed to application. */\n\tELEARNSTATUS_SMART_START_IN_PROGRESS, /**< Passed to application when Smart Start learn mode goes into progress. */\n\tELEARNSTATUS_LEARN_IN_PROGRESS, /**< Passed to application when classic learn mode goes into progress. */\n\tELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT,/**< Passed to application if classic learn mode times out. */\n\tELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED, /**< Passed to application if learn mode failed. */\n\tELEARNSTATUS_PROCESS = -1,\n}\n\ninterface ZunoSapiClassPower\n{\n\tstatus:ZunoSapiClassStatus;\n\tpower_raw:number;\n\tstep:number;\n\tmin:number;\n\tmax:number;\n}\n\ninterface ZunoSapiClassSec\n{\n\tstatus:ZunoSapiClassStatus;\n\tsec:boolean;\n}\n\ninterface ZunoSapiClassS2Key\n{\n\tstatus:ZunoSapiClassStatus;\n\tlist:Array<{key: Uint8Array; name: string;}>;\n}\n\n\ninterface ZunoSapiClassRegion\n{\n\tstatus:ZunoSapiClassStatus;\n\tregion:string;\n\tregion_array:string[];\n}\n\nenum ZunoSapiClassStatus\n{\n\tOK = SapiClassStatus.OK,\n\tNOT_INIT = SapiClassStatus.LAST_STATUS,\n\tWRONG_LENGTH_CMD,\n\tWRONG_STATUS,\n\tWRONG_IN_DATA,\n\tNO_FREEZE,\n\tINVALID_ARG,\n\tTIMEOUT,\n\tUN_SUPPORT,\n\tTIMEOUT_FORCE_RESTART,\n\tLEARN_EXCLUDE,\n\tLEARN_INCLUDE,\n\tSCETCH_TOO_LONG,\n\tSCETCH_FALLED_PRIAMLE,\n\tSCETCH_FALLED_CORE_VERSION,\n\tSCETCH_FALLED_REVISION,\n\tSCETCH_FALLED_CRC16,\n}\n\ninterface ZunoSapiClassBoardInfoZwDataProt\n{\n\ts2_keys:number;\n\tdevice_type:number;\n\tdevice_icon:number;\n\tvendor:number;\n\tproduct_type:number;\n\tproduct_id:number;\n\tversion:number;\n\tLR:boolean;\n}\n\ninterface ZunoSapiClassParamInfo\n{\n\tstatus:ZunoSapiClassStatus;\n\traw:Array;\n\tfreq_i:number;\n\tmain_pow:number;\n\tsec:boolean;\n}\n\ninterface ZunoSapiClassBoardInfoProduction\n{\n\tprod_raw:Uint8Array;\n\tprod_parent_uuid:Uint8Array;\n\tprod_ts:number;\n\tprod_sn:number;\n\tprod_crc8:number;\n\tprod_valid:boolean;\n}\n\ninterface ZunoSapiClassLicenseFlag\n{\n\tname:string;\n\ttitle:string;\n\tactive:boolean;\n}\n\n\ninterface ZunoSapiClassBoardInfoLicense\n{\n\tlic_subvendor:number;\n\tlic_flags_raw:Uint8Array;\n\tlic_flags:{[key:number]: ZunoSapiClassLicenseFlag};\n}\n\ninterface ZunoSapiClassBoardInfoChip\n{\n\tchip_family:number;\n\tchip_type:number;\n\tkeys_hash:number;\n\tse_version:number;\n}\n\ninterface ZunoSapiClassBoardInfo\n{\n\tstatus:ZunoSapiClassStatus;\n\tcore_version:number;\n\tversion:number;\n\tbuild_number:number;\n\tbuild_ts:number;\n\thw_rev:number;\n\tcode_size:number;\n\tram_size:number\n\tcustom_code_offset:number;\n\tboot_offset:number;\n\tboot_version:number;\n\tchip_uuid:Uint8Array;\n\ts2_pub:Uint8Array;\n\tmax_default_power:number;\n\text_nvm:number;\n\tdbg_lock:number;\n\tchip:ZunoSapiClassBoardInfoChip;\n\tzwdata?:ZunoSapiClassBoardInfoZwDataProt,\n\tsmart_qr?:string;\n\thome_id?:number;\n\tnode_id?:number;\n\tproduct?:ZunoSapiClassBoardInfoProduction;\n\tlicense?:ZunoSapiClassBoardInfoLicense;\n}\n// ------------------------------------------------------------------------------------------------------\n\nclass ZunoSapiClass {\n\tprivate readonly KEY_UNAUTH_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t= \"unauth\";\n\tprivate readonly KEY_AUTH_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t= \"auth\";\n\tprivate readonly KEY_ACCESS_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t= \"access\";\n\tprivate readonly KEY_S0_NAME:string\t\t\t\t\t\t\t\t\t\t\t\t\t\t= \"s0\";\n\n\tprivate readonly ZUNO_HEADER_PREAMBL:string\t\t\t\t\t\t\t\t\t\t\t\t= \"ZMEZUNOC\";\n\n\tprivate readonly SK_HEADER_SIZE:number\t\t\t\t\t\t\t\t\t\t\t\t\t= 0xC0;\n\tprivate readonly SK_HEADER_VERSION_MSB_OFFSET:number\t\t\t\t\t\t\t\t\t= 0x08;\n\tprivate readonly SK_HEADER_VERSION_LSB_OFFSET:number\t\t\t\t\t\t\t\t\t= 0x09;\n\tprivate readonly SK_HEADER_NAME_START:number\t\t\t\t\t\t\t\t\t\t\t= 56;\n\tprivate readonly SK_HEADER_MAX_NAME:number\t\t\t\t\t\t\t\t\t\t\t\t= 47;\n\tprivate readonly SK_HEADER_HWREW_OFFSET:number\t\t\t\t\t\t\t\t\t\t\t= this.SK_HEADER_NAME_START + this.SK_HEADER_MAX_NAME + 1;\n\n\tprivate readonly LICENSE_KEY_DUMP_S2:number\t\t\t\t\t\t\t\t\t\t\t\t= 0x1;\n\tprivate readonly LICENSE_KEY_LONG_RANGE:number\t\t\t\t\t\t\t\t\t\t\t= 0x5;\n\tprivate readonly license_flags: {[key:number]: ZunoSapiClassLicenseFlag}\t\t\t\t=\n\t{\n\t\t0x00: {name:\"Pti\", title: \"Provides Packet Trace Interface (PTI) capabilities. Turns ZUno to advanced sniffer.\", active:false},\n\t\t0x01: {name:\"Key dump\", title: \"Enables Z-Wave network key dump using Z-Uno.\", active:false},\n\t\t0x02: {name:\"Custom vendor\", title: \"Use custom vendor code intead of 0115 (ZME)\", active:false},\n\t\t0x03: {name:\"Modem\", title: \"ZUno works as direct transmitter.\", active:false},\n\t\t0x04: {name:\"Max power\", title: \"User is able to use the maximum power of radio amplifier.\", active:false},\n\t\t0x05: {name:\"Long Range\", title: \"Enables Z-Wave LongRange technology support.\", active:false},\n\t};\n\t\n\tprivate readonly sapi:SapiClass;\n\n\tprivate board_info:ZunoSapiClassBoardInfo\t\t\t\t\t\t\t\t\t\t\t\t= this._get_board_info_default();\n\tprivate param_info:ZunoSapiClassParamInfo\t\t\t\t\t\t\t\t\t\t\t\t= this._get_param_info_default();\n\n\tprivate region:SapiRegionClass\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t= new SapiRegionClass();\n\n\tprivate _get_param_info_default(): ZunoSapiClassParamInfo {\n\t\tconst param_info:ZunoSapiClassParamInfo\t\t\t\t\t\t\t\t\t\t\t\t=\n\t\t{\t\n\t\t\tstatus:ZunoSapiClassStatus.NOT_INIT, freq_i:0x0, raw:[], main_pow:0x0, sec:false\n\t\t};\n\t\treturn (param_info);\n\t}\n\n\tprivate _get_board_info_default(): ZunoSapiClassBoardInfo {\n\t\tconst board_info:ZunoSapiClassBoardInfo\t\t\t\t\t\t\t\t\t\t\t\t=\n\t\t{\t\n\t\t\tstatus:ZunoSapiClassStatus.NOT_INIT, version:0x0, build_number:0x0, build_ts:0x0, hw_rev:0x0, code_size:0x0, ram_size:0x0, dbg_lock:0x0, custom_code_offset:0x30000, chip_uuid: new Uint8Array(), s2_pub: new Uint8Array(),\n\t\t\tboot_offset:0x3a000, boot_version: 0x0, max_default_power:50, ext_nvm:0x0, chip : {chip_type:HardwareChipClass.CHIP_ZGM130S037HGN1, chip_family:HardwareChipClass.FAMILY_ZGM13, keys_hash:0x8E19CC54, se_version:0x0},\n\t\t\tcore_version:0x0\n\t\t};\n\t\treturn (board_info);\n\t}\n\n\tprivate async compile_zwave_qrcode(product_data:ZunoSapiClassBoardInfoZwDataProt, dsk:Uint8Array, version:number): Promise {\n\t\tlet protocol_map:number, text:string;\n\n\t\ttext = conv2DecimalPadding(product_data[\"s2_keys\"], 3);\n\t\ttext = text + conv2Decimal(dsk, \"\");\n\t\t// #ProductType\n\t\ttext = text + \"0010\" + conv2DecimalPadding(product_data[\"device_type\"], 5) + conv2DecimalPadding(product_data[\"device_icon\"], 5);\n\t\t// #ProductID\n\t\ttext = text + \"0220\" + conv2DecimalPadding(product_data[\"vendor\"], 5) + conv2DecimalPadding(product_data[\"product_type\"], 5) + conv2DecimalPadding(product_data[\"product_id\"], 5) + conv2DecimalPadding(version, 5);\n\t\t// # Supported Protocols\n\t\tprotocol_map = 0x01;\n\t\tif (product_data[\"LR\"] == true)\n\t\t\tprotocol_map = protocol_map | 0x02;\n\t\ttext += \"0803\" + conv2DecimalPadding(protocol_map, 3);\n\t\t// # MaxInclusionInterval\n\t\ttext = text + \"0403005\";// # ==5*128=640\n\t\tconst buf:ArrayBuffer = Uint8Array.from(unescape(encodeURIComponent(text)), c=>c.charCodeAt(0)).buffer;\n\t\tconst digest:Uint8Array = new Uint8Array(await crypto.subtle.digest('SHA-1', buf));\n\t\ttext = \"9001\" + conv2DecimalPadding((digest[0x0] << 0x8) | digest[0x1], 5) + text;\n\t\treturn (text);\n\t}\n\n\n\tprivate async _readNVM(addr:number, size:number): Promise {\n\t\treturn (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER, [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF]));\n\t}\n\n\tprivate async _writeNVM(addr:number, buff:Array): Promise {\n\t\tconst size = buff.length;\n\t\tconst data_addr = [(addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF];\n\t\treturn (await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_NVM_EXT_WRITE_LONG_BUFFER, data_addr.concat(buff)));\n\t}\n\n\tprivate async _get_param_info(): Promise {\n\t\tthis.param_info = this._get_param_info_default();\n\t\tconst out:ZunoSapiClassParamInfo = this.param_info;\n\t\tconst param_info:SapiClassRet = await this._readNVM(0xFFE000, 0x09);\n\t\tif (param_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((param_info.status as unknown) as ZunoSapiClassStatus);\n\t\t\treturn ;\n\t\t}\n\t\tconst param:Array = param_info.data;\n\t\tif (param.length < 0x5) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn ;\n\t\t}\n\t\tout.status = ZunoSapiClassStatus.OK;\n\t\tout.raw = param;\n\t\tout.freq_i = param_info.data[1];\n\t\tout.main_pow = param_info.data[2];\n\t\tif (param_info.data[4] != 0x0)\n\t\t\tout.sec = true;\n\t}\n\n\tprivate async _get_board_info_add(): Promise {\n\t\tlet code_sz_shift:number, shift_smrt:number, eu_lr:boolean, byte_i:number, bit_i:number;\n\t\n\t\tthis.board_info = this._get_board_info_default();\n\t\tconst out:ZunoSapiClassBoardInfo = this.board_info;\n\t\tconst board_info:SapiClassRet = await this._readNVM(0xFFFF00, 0x01);\n\t\tif (board_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((board_info.status as unknown) as ZunoSapiClassStatus);\n\t\t\treturn ;\n\t\t}\n\t\tconst info:Array = board_info.data;\n\t\tif (info.length < 42) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn ;\n\t\t}\n\t\tout.status = ZunoSapiClassStatus.OK;\n\t\tconst version:number = ((info[0] << 8) | (info[1]));\n\t\tout.core_version = version;\n\t\tout.build_number = (info[2] << 24) | (info[3] << 16) | (info[4] << 8) | (info[5]);\n\t\tout.version = (version << 16 | (out.build_number & 0xFFFF));\n\t\tout.build_ts = (info[6] << 24) | (info[7] << 16) | (info[8] << 8) | (info[9]);\n\t\tout.hw_rev = (info[10] << 8) | (info[11]);\n\t\tif (out.build_number > 1116) {\n\t\t\tcode_sz_shift = 0x1;\n\t\t\tout.code_size = costruct_int(info.slice(12,12+3), 3, false);\n\t\t}\n\t\telse {\n\t\t\tcode_sz_shift = 0x0;\n\t\t\tout.code_size = (info[12] << 8) | (info[13]);\n\t\t}\n\t\tout.ram_size = (info[14+code_sz_shift] << 8) | (info[15+code_sz_shift]);\n\t\tout.chip_uuid = new Uint8Array(info.slice(16+code_sz_shift,16+code_sz_shift+8));\n\t\tout.s2_pub = new Uint8Array(info.slice(24+code_sz_shift,24+code_sz_shift+16));\n\t\tout.dbg_lock = info[40+code_sz_shift];\n\t\tconst offset_base:number = 46;\n\t\tif (info.length < offset_base)\n\t\t\treturn ;\n\t\tout.home_id = costruct_int(info.slice(41+code_sz_shift,41+code_sz_shift+4), 4, false);\n\t\tout.node_id = info[45+code_sz_shift];\n\t\tif (out.build_number < 1669) {\n\t\t\tshift_smrt = 90;\n\t\t\tif (info.length < (offset_base + code_sz_shift + shift_smrt))\n\t\t\t\treturn ;\n\t\t\tout.smart_qr = toString(info.slice(46+code_sz_shift,46+code_sz_shift+90));\n\t\t}\n\t\telse {\n\t\t\tshift_smrt = 11;\n\t\t\tif (info.length < (offset_base + code_sz_shift + shift_smrt))\n\t\t\t\treturn ;\n\t\t\tout.zwdata =\n\t\t\t{\n\t\t\t\ts2_keys: info[46+code_sz_shift],\n\t\t\t\tdevice_type: costruct_int(info.slice(47+code_sz_shift, 47+code_sz_shift+2), 2, false),\n\t\t\t\tdevice_icon: costruct_int(info.slice(49+code_sz_shift, 49+code_sz_shift+2), 2, false),\n\t\t\t\tvendor: costruct_int(info.slice(51+code_sz_shift, 51+code_sz_shift+2), 2, false),\n\t\t\t\tproduct_type: costruct_int(info.slice(53+code_sz_shift, 53+code_sz_shift+2), 2, false),\n\t\t\t\tproduct_id: costruct_int(info.slice(55+code_sz_shift, 55+code_sz_shift+2), 2, false),\n\t\t\t\tversion: version,\n\t\t\t\tLR: false,\n\t\t\t};\n\t\t\tout.smart_qr = await this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version);\n\t\t}\n\t\tconst offset_code:number = offset_base + code_sz_shift + shift_smrt;\n\t\tif (info.length < (offset_code + 0x4))\n\t\t\treturn ;\n\t\tout.custom_code_offset = costruct_int(info.slice(offset_code, offset_code + 0x4), 0x4, false);\n\t\tif(out.custom_code_offset > 0x36000)\n\t\t\tout.boot_offset = 0x40000;\n\t\tconst offset_prod:number = offset_code + 0x4;\n\t\tif (info.length < (offset_prod + 0x10))\n\t\t\treturn ;\n\t\tout.product =\n\t\t{\n\t\t\tprod_raw: new Uint8Array(info.slice(offset_prod, offset_prod + 0x10)),\n\t\t\tprod_parent_uuid: new Uint8Array(info.slice(offset_prod, offset_prod + 0x8)),\n\t\t\tprod_ts: costruct_int(info.slice(offset_prod + 0x8, offset_prod +0x8 + 0x4), 0x4, true),\n\t\t\tprod_sn: costruct_int(info.slice(offset_prod + 0x8 + 0x4, offset_prod +0x8 + 0x4 + 0x3), 0x3, true),\n\t\t\tprod_crc8: info[offset_prod + 0x8 + 0x4 + 0x3],\n\t\t\tprod_valid: (info[offset_prod + 0x8 + 0x4 + 0x3] == checksum(info.slice(offset_prod, offset_prod + 0x10 - 0x1))) ? true:false\n\t\t};\n\t\tconst offset_license:number = offset_prod + 0x10;\n\t\tif (info.length < (offset_license + 0xA))\n\t\t\treturn ;\n\t\tout.license =\n\t\t{\n\t\t\tlic_subvendor: costruct_int(info.slice(offset_license, offset_license + 0x2), 0x2, false),\n\t\t\tlic_flags_raw: new Uint8Array(info.slice(offset_license + 0x2, offset_license + 0x2 + 0x8)),\n\t\t\tlic_flags: this.license_flags,\n\t\t};\n\t\tbyte_i = 0x0;\n\t\twhile (byte_i < out.license.lic_flags_raw.length) {\n\t\t\tbit_i = 0x0;\n\t\t\twhile (bit_i < 0x8) {\n\t\t\t\tif ((out.license.lic_flags_raw[byte_i] & (0x1 << bit_i)) != 0x0) {\n\t\t\t\t\tif (out.license.lic_flags[byte_i * 0x8 + bit_i] != undefined)\n\t\t\t\t\t\tout.license.lic_flags[byte_i * 0x8 + bit_i].active = true;\n\t\t\t\t}\n\t\t\t\tbit_i++;\n\t\t\t}\n\t\t\tbyte_i++;\n\t\t}\n\t\tif (out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE] != undefined && out.license.lic_flags[this.LICENSE_KEY_LONG_RANGE].active == true) {\n\t\t\tif (out.version >= 0x30D124B)\n\t\t\t\teu_lr = true;\n\t\t\telse\n\t\t\t\teu_lr = false;\n\t\t\tthis.region = new SapiRegionClass(true, eu_lr);\n\t\t\tif (out.zwdata != undefined && this.param_info.status == ZunoSapiClassStatus.OK) {\n\t\t\t\tconst region:string|undefined = this.region.getNameRegion(this.param_info.freq_i);\n\t\t\t\tif (region != undefined && this.region.isLr(region) == true) {\n\t\t\t\t\tout.zwdata.LR = true;\n\t\t\t\t\tout.smart_qr = await this.compile_zwave_qrcode(out.zwdata, out.s2_pub, out.zwdata.version);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst offset_power:number = offset_license + 0xA;\n\t\tif (info.length < (offset_power + 0x1))\n\t\t\treturn ;\n\t\tout.max_default_power = info[offset_power];\n\t\tconst offset_ext_nvm:number = offset_power + 0x1;\n\t\tif (info.length < (offset_ext_nvm + 0x2))\n\t\t\treturn ;\n\t\tout.ext_nvm = costruct_int(info.slice(offset_ext_nvm, offset_ext_nvm + 0x2), 0x2, false);\n\t\tif (out.ext_nvm >= 512)\n\t\t\tout.boot_offset = 0xA10000 + ((out.ext_nvm - 512) << 10);\n\t\tconst offset_chip:number = offset_ext_nvm + 0x2;\n\t\tconst size_chip:number = 0xA;\n\t\tif (info.length < (offset_chip + size_chip))\n\t\t\treturn ;\n\t\tout.chip = \n\t\t{\n\t\t\tchip_family:info[offset_chip],\n\t\t\tchip_type:info[offset_chip + 0x1],\n\t\t\tkeys_hash:costruct_int(info.slice(offset_chip + 0x2, offset_chip + 0x2 + 0x4), 0x4, false),\n\t\t\tse_version:costruct_int(info.slice(offset_chip + 0x2 + 0x4, offset_chip + 0x2 + 0x4 + 0x4), 0x4, false)\n\t\t};\n\t\tconst offset_boot_version:number = offset_chip + size_chip;\n\t\tconst size_boot_version:number = 0x4;\n\t\tif (info.length < (offset_boot_version + size_boot_version))\n\t\t\treturn ;\n\t\tout.boot_version = costruct_int(info.slice(offset_boot_version, offset_boot_version + size_boot_version), size_boot_version, false);\n\t}\n\n\tprivate async _get_board_info(): Promise {\n\t\tawait this._get_board_info_add();\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn ;\n\t\tif (this.board_info.boot_version == 0x0) {\n\t\t\tthis.board_info.boot_version = 0x01090001;\n\t\t}\n\t\tif (this.board_info.chip.keys_hash == 0x0) {\n\t\t\tthis.board_info.chip.keys_hash = 0x8E19CC54;\n\t\t\tthis.board_info.chip.chip_type = HardwareChipClass.CHIP_ZGM130S037HGN1;\n\t\t\tthis.board_info.chip.chip_family = HardwareChipClass.FAMILY_ZGM13;\n\t\t}\n\t}\n\n\tprivate async _apply_param(raw:Array): Promise {\n\t\tconst res:SapiClassRet = await this._writeNVM(0xFFE000, raw);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\tif (res.data.length < 0x1)\n\t\t\treturn (ZunoSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (res.data[0x0] != 0x1)\n\t\t\treturn (ZunoSapiClassStatus.WRONG_STATUS);\n\t\tconst soft_reset:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [])\n\t\tif (soft_reset.status != SapiClassStatus.OK)\n\t\t\treturn ((soft_reset.status as unknown) as ZunoSapiClassStatus);\n\t\tconst freeze_zuno_info:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x2], 3000);\n\t\tif (freeze_zuno_info.status != SapiClassStatus.OK || freeze_zuno_info.data[0x0] != 0x0)\n\t\t\treturn (ZunoSapiClassStatus.NO_FREEZE);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tprivate async _load_file(addr:number, data:Uint8Array, process:SapiClassUpdateProcess|null): Promise {\n\t\tlet step:number, i:number, percentage:number, i_ask:number;\n\t\tstep = this.getQuantumSize();\n\t\tpercentage = 0x0;\n\t\ti = 0x0\n\t\twhile (i < data.length) {\n\t\t\tif (i + step > data.length)\n\t\t\t\tstep = data.length - i;\n\t\t\tpercentage = (i * 100.0) / data.length;\n\t\t\tif (process != null)\n\t\t\t\tprocess(percentage);\n\t\t\ti_ask = 0x0;\n\t\t\tfor (;;) {\n\t\t\t\tconst status:SapiClassRet = await this._writeNVM(addr, Array.from(data.subarray(i, i + step)));\n\t\t\t\tif (status.status == SapiClassStatus.OK)\n\t\t\t\t\tbreak ;\n\t\t\t\tif (i_ask >= 0x2)\n\t\t\t\t\treturn ((status.status as unknown) as ZunoSapiClassStatus);\n\t\t\t\tif (status.status != SapiClassStatus.NO_ACK)\n\t\t\t\t\treturn ((status.status as unknown) as ZunoSapiClassStatus);\n\t\t\t\tif (WEB_TOOLS_BETA == true)\n\t\t\t\t\tconsole.error(\"second wind in renewal\");\n\t\t\t\ti_ask++;\n\t\t\t}\n\t\t\ti = i + step\n\t\t\taddr = addr + step\n\t\t}\n\t\tif (process != null && percentage < 100.00)\n\t\t\tprocess(100.00);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tpublic async updateFirmware(data:Uint8Array, process:SapiClassUpdateProcess|null, target_type:SapiClassDetectType): Promise {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tconst status:ZunoSapiClassStatus = await this._load_file(this.board_info.boot_offset, data, process);\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst res:SapiClassDetectWait = await this.sapi.update(this.board_info.boot_offset, target_type);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tprivate async _pushSketch(addr:number, size:number, crc16:number): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(0x08, [0x01, (addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, (size >> 8) & 0xFF, size & 0xFF, (crc16 >> 8) & 0xFF, (crc16) & 0xFF])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\tif (res.data.length < 0x1)\n\t\t\treturn (ZunoSapiClassStatus.WRONG_LENGTH_CMD);\n\t\tif (res.data[0x0] == 0xFE)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_CRC16);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tpublic async updateSketch(scetch:Uint8Array, process:SapiClassUpdateProcess|null): Promise {\n\t\tlet status:ZunoSapiClassStatus;\n\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (scetch.length > this.board_info.code_size)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_TOO_LONG);\n\t\tconst data_uint8 = scetch.slice(0, this.ZUNO_HEADER_PREAMBL.length);\n\t\tconst preamble:string = new TextDecoder().decode(data_uint8);\n\t\tif (this.ZUNO_HEADER_PREAMBL != preamble)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_PRIAMLE);\n\t\tconst header_version:number = (scetch[this.SK_HEADER_VERSION_MSB_OFFSET] << 8) | scetch[this.SK_HEADER_VERSION_LSB_OFFSET];\n\t\tif (header_version != this.board_info.core_version)\n\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_CORE_VERSION);\n\t\tif (this.board_info.hw_rev != -1 && this.board_info.build_number >= 2849) {\n\t\t\tconst header_hw_rev:number = costruct_int(scetch.slice(this.SK_HEADER_HWREW_OFFSET, this.SK_HEADER_HWREW_OFFSET + 0x2), 2);\n\t\t\tif (this.board_info.hw_rev != header_hw_rev)\n\t\t\t\treturn (ZunoSapiClassStatus.SCETCH_FALLED_REVISION);\n\t\t}\n\t\tstatus = await this._load_file(this.board_info.custom_code_offset, scetch, process);\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst crc16:number = calcSigmaCRC16(0x1D0F, scetch, 0, scetch.length);\n\t\tstatus = await this._pushSketch(this.board_info.custom_code_offset, scetch.length, crc16);\n\t\treturn (status);\n\t}\n\n\tpublic getBoardInfo(): ZunoSapiClassBoardInfo {\n\t\treturn (this.board_info);\n\t}\n\n\tprivate _isSupportRegionAndPower():ZunoSapiClassStatus {\n\t\tif (this.param_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.param_info.status);\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x3080517)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isMustResetDefault():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x30D124B)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportResetDefault():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x3080517)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportIncludeExclude():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.version < 0x30C108C)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportUpdateBootloader():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info.product == undefined)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tif (this.board_info.product.prod_valid == false)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tconst prod_date:Date = new Date(this.board_info.product.prod_ts * 1000);\n\t\tif (prod_date.getUTCFullYear() <= 2022)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\treturn (ZunoSapiClassStatus.OK)\n\t}\n\n\tpublic isSupportDumpKey():ZunoSapiClassStatus {\n\t\tif (this.board_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.board_info.status);\n\t\tif (this.board_info == undefined)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tif (this.board_info.license == undefined)\n\t\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t\tif (this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2] != undefined && this.board_info.license.lic_flags[this.LICENSE_KEY_DUMP_S2].active == true)\n\t\t\treturn (ZunoSapiClassStatus.OK);\n\t\treturn (ZunoSapiClassStatus.UN_SUPPORT);\n\t}\n\n\tprivate _test_dump_key(array:Uint8Array): boolean {\n\t\tconst empty_v1:string = \"00000000000000000000000000000000\";\n\t\tconst empty_v2:string = \"ffffffffffffffffffffffffffffffff\";\n\n\t\tconst key:string = arrayToStringHex(array);\n\t\tif (key === empty_v1 || key === empty_v2)\n\t\t\treturn (false);\n\t\treturn (true);\n\t}\n\n\tpublic async readS2Key(): Promise {\n\t\tlet i:number;\n\n\t\tconst out:ZunoSapiClassS2Key = {status:ZunoSapiClassStatus.OK, list:[]};\n\t\tout.status = this.isSupportDumpKey();\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\tconst dump_key_info:SapiClassRet = await this._readNVM(0xFFCCC0, 0x40);\n\t\tif (dump_key_info.status != SapiClassStatus.OK) {\n\t\t\tout.status = ((dump_key_info.status as unknown) as ZunoSapiClassStatus);\n\t\t\treturn (out);\n\t\t}\n\t\tif (dump_key_info.data.length != 0x40) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_LENGTH_CMD;\n\t\t\treturn (out);\n\t\t}\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(0, 16)), name:this.KEY_UNAUTH_NAME});\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(16, 32)), name:this.KEY_AUTH_NAME});\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(32, 48)), name:this.KEY_ACCESS_NAME});\n\t\tout.list.push({key:new Uint8Array(dump_key_info.data.slice(48, 64)), name:this.KEY_S0_NAME});\n\t\ti = 0x0;\n\t\twhile (i < out.list.length) {\n\t\t\tif (this._test_dump_key(out.list[i].key) == false)\n\t\t\t\tout.list[i].key = new Uint8Array([]);\n\t\t\ti++;\n\t\t}\n\t\treturn (out);\n\t}\n\n\tpublic getRegion(): ZunoSapiClassRegion {\n\t\tconst out:ZunoSapiClassRegion = {status:this._isSupportRegionAndPower(), region:\"\", region_array:this.region.getListRegion()};\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\tconst region:string|undefined = this.region.getNameRegion(this.param_info.freq_i);\n\t\tif (region == undefined) {\n\t\t\tout.status = ZunoSapiClassStatus.WRONG_IN_DATA;\n\t\t\treturn (out);\n\t\t}\n\t\tout.region = region;\n\t\treturn (out);\n\t}\n\n\tpublic async setRegion(region:string): Promise {\n\t\tconst status:ZunoSapiClassStatus = this._isSupportRegionAndPower();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst region_id:number|undefined = this.region.getIdRegion(region);\n\t\tif (region_id == undefined)\n\t\t\treturn (ZunoSapiClassStatus.INVALID_ARG);\n\t\tif (this.param_info.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (this.param_info.status);\n\t\tconst raw:Array = this.param_info.raw;\n\t\traw[0x1] = region_id;\n\t\tif (raw.length > 0x8)\n\t\t\traw[0x8] = region_id;\n\t\treturn (await this._apply_param(raw));\n\t}\n\n\tpublic getPower(): ZunoSapiClassPower {\n\t\tconst out:ZunoSapiClassPower = {\n\t\t\tstatus:this._isSupportRegionAndPower(),\n\t\t\tpower_raw:this.param_info.main_pow,\n\t\t\tstep:0x1,\n\t\t\tmin:1,\n\t\t\tmax:this.board_info.max_default_power,\n\t\t};\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\treturn (out);\n\t}\n\n\tpublic getSec(): ZunoSapiClassSec {\n\t\tconst out:ZunoSapiClassSec = {\n\t\t\tstatus:this._isSupportRegionAndPower(),\n\t\t\tsec:this.param_info.sec,\n\t\t};\n\t\tif (out.status != ZunoSapiClassStatus.OK)\n\t\t\treturn (out);\n\t\treturn (out);\n\t}\n\n\tpublic async setSec(sec:boolean): Promise {\n\t\tconst status:ZunoSapiClassStatus = this._isSupportRegionAndPower();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst raw:Array = this.param_info.raw;\n\t\tif (sec == true)\n\t\t\traw[0x4] = 0x1;\n\t\telse\n\t\t\traw[0x4] = 0x0;\n\t\treturn (await this._apply_param(raw));\n\t}\n\n\tpublic async setPower(power:number): Promise {\n\t\tconst status:ZunoSapiClassStatus = this._isSupportRegionAndPower();\n\t\tif (status != ZunoSapiClassStatus.OK)\n\t\t\treturn (status);\n\t\tconst raw:Array = this.param_info.raw;\n\t\traw[0x2] = power;\n\t\treturn (await this._apply_param(raw));\n\t}\n\n\tpublic async enableNif(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x0A])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tpublic async enableEvent(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x09, 0x1])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\tprivate async _enableLearn_get_status(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.recvIncomingRequest(1000);\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\tif (res.cmd != SapiClassFuncId.FUNC_ID_NVM_EXT_READ_LONG_BUFFER)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\tif (res.data.length < 0x3)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\tif (res.data[0x1] != 0xA0)\n\t\t\treturn (ELearnStatus.ELEARNSTATUS_PROCESS);\n\t\treturn (res.data[0x2]);\n\t}\n\n\tprivate async _enableLearn_include(): Promise {\n\t\tlet retries:number;\n\t\n\t\tconst wait_timeout:number = Date.now() + ((30 + 0x1) * 1000);\n\t\tretries = 0x0;\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tswitch (await this._enableLearn_get_status()) {\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_PROCESS:\n\t\t\t\t\tretries++;\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE:\n\t\t\t\t\tretries = 0x0;\n\t\t\t\t\tbreak ;\n\t\t\t\tdefault:\n\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t\t\t\t\tbreak ;\n\t\t\t\t\n\t\t\t}\n\t\t\tif (retries >= 0x3)\n\t\t\t\treturn (ZunoSapiClassStatus.LEARN_INCLUDE);\n\t\t}\n\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t}\n\n\tprivate async _enableLearn_exlude(): Promise {\n\t\tlet retries:number;\n\n\t\tretries = 0x0;\n\t\twhile (retries < 0x3) {\n\t\t\tretries++;\n\t\t\tswitch (await this._enableLearn_get_status()) {\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE:\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_PROCESS:\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE:\n\t\t\t\t\treturn (await this._enableLearn_include());\n\t\t\t\t\tbreak ;\n\t\t\t}\n\t\t}\n\t\treturn (ZunoSapiClassStatus.LEARN_EXCLUDE);\n\t}\n\n\tpublic async enableLearn(timeout:number): Promise {\n\t\tlet detect_wait:SapiClassDetectWait, status:ZunoSapiClassStatus;\n\n\t\ttimeout = timeout & 0xFF;\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x07, timeout & 0xFF, 0x1 & 0xFF])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\tconst wait_timeout:number = Date.now() + ((timeout + 0x1) * 1000);\n\t\tthis.lock();\n\t\twhile (wait_timeout > Date.now()) {\n\t\t\tswitch (await this._enableLearn_get_status()) {\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_TIMEOUT:\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\tdetect_wait = await this.sapi.detect_rcv();\n\t\t\t\t\tif (detect_wait.status != SapiClassStatus.OK)\n\t\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT);\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_LEARN_MODE_COMPLETED_FAILED:\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_COMPLETE:\n\t\t\t\t\tstatus = await this._enableLearn_exlude();\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\treturn (status);\n\t\t\t\t\tbreak ;\n\t\t\t\tcase ELearnStatus.ELEARNSTATUS_ASSIGN_NODEID_DONE:\n\t\t\t\t\tstatus = await this._enableLearn_include();\n\t\t\t\t\tthis.unlock();\n\t\t\t\t\treturn (status);\n\t\t\t\t\tbreak ;\n\t\t\t}\n\t\t}\n\t\tthis.unlock();\n\t\treturn (ZunoSapiClassStatus.TIMEOUT_FORCE_RESTART);\n\t}\n\n\tpublic async setDefault(): Promise {\n\t\tconst res:SapiClassRet = await this.sapi.sendCommandUnSz(SapiClassFuncId.FUNC_ID_SERIAL_API_SOFT_RESET, [0x5])\n\t\tif (res.status != SapiClassStatus.OK)\n\t\t\treturn ((res.status as unknown) as ZunoSapiClassStatus);\n\t\treturn (ZunoSapiClassStatus.OK);\n\t}\n\n\n\tpublic getQuantumSize(): number {\n\t\treturn (this.sapi.getQuantumSize());\n\t}\n\n\tpublic lock() {\n\t\treturn (this.sapi.lock());\n\t}\n\n\tpublic unlock() {\n\t\treturn (this.sapi.unlock());\n\t}\n\n\tpublic is_busy(): boolean {\n\t\treturn (this.sapi.is_busy());\n\t}\n\n\tpublic async connect(): Promise {\n\t\tthis.region = new SapiRegionClass();\n\t\tawait this._get_param_info();\n\t\tawait this._get_board_info();\n\t\t// await this._begin(true);\n\t}\n\n\tpublic async detect(baudrate:Array, func:SapiClassDetectTypeFunc|null): Promise {\n\t\treturn (await this.sapi.detect(baudrate, func));\n\t}\n\n\tconstructor(sapi:SapiClass) {\n\t\tthis.sapi = sapi;\n\t}\n}","import {WEB_TOOLS_VERSION} from \"./other/define\"\n\nexport {ControllerUiDefineClass, TABLE_NAME_LICENSE_YES, TABLE_NAME_LICENSE_NO, NAME_APP_VERSION_FULL};\n\nconst TABLE_NAME_LICENSE_YES:string = '';\nconst TABLE_NAME_LICENSE_NO:string = '';\n\nenum ControllerUiDefineClass\n{\n\tNAME_APP = \"SerialAPIWebTools\",\n\tKEY_INCLUDE_EXCLUDE_TIMEOUT = NAME_APP + '_info_include_exlude_timout',\n\tKEY_BAUDRATE = ControllerUiDefineClass.NAME_APP + '_baudrate_cache',\n\tKEY_DETECTION_SYNC_MANUAL = ControllerUiDefineClass.NAME_APP + '_detection_sync_manual',\n\tKEY_UPDATE_BETA = ControllerUiDefineClass.NAME_APP + '_update_beta',\n\tSTORAGE_VALUE_TRUE = 'true',\n\tSTORAGE_VALUE_FALSE = 'false',\n}\n\nconst NAME_APP_VERSION_FULL:string = ControllerUiDefineClass.NAME_APP + \" \" + WEB_TOOLS_VERSION;","\nimport { QRCode, QRCodeOption, QRErrorCorrectLevel } from \"./qr_code/qrcode\";\nimport {ControllerUiDefineClass, NAME_APP_VERSION_FULL} from \"./ui_define\"\nimport {SapiClass, SapiClassDetect, SapiClassStatus, SapiClassDetectType} from \"./sapi/sapi\";\nimport {ZunoSapiClass, ZunoSapiClassBoardInfo, ZunoSapiClassStatus, ZunoSapiClassRegion, ZunoSapiClassPower, ZunoSapiClassSec} from \"./sapi/zuno_sapi\";\nimport {ControllerUiLangClassId} from \"./lang/ui_lang_define\"\nimport {ControllerUiLangClass} from \"./lang/ui_lang\"\nimport {conv2Decimal} from \"./other/utilities\"\nimport {SapiRegionClass} from \"./sapi/region\"\n\nexport {ZUnoCompilerClass};\n\ntype ZUnoCompilerProgressCbkProt = (severity:string, message:string) => void;\n\ntype ZUnoCompilerLoadSketchResultProt = {\n\t\"status\":number,\n\t\"log\":string,\n\t\"message\":string,\n\t\"bin\":string,\n};\n\n\ntype ZUnoCompilerVersionHwResultProt = {\n\t[index:string]:{\"seq\":number},\n};\n\ntype ZUnoCompilerVersionResultProt = {\n\t\"status\":number,\n\t\"log\":string,\n\t\"message\":string,\n\t\"version\":{\"hw\": ZUnoCompilerVersionHwResultProt}\n};\n\ntype ZUnoCompilerLoadSketchOutProt = {\n\t\"dsk\"?:string,\n\t\"smart_qr\"?:string,\n}\n\nenum XhrStatus\n{\n\tOK,\n\tTIMEOUT,\n\tERROR,\n\tINVALID_DATA,\n}\n\ninterface XhrOut\n{\n\tstatus:XhrStatus;\n\terror:string;\n\turl:string;\n\tdata:any;\n}\n\ninterface XhrOutBuildNumber\n{\n\tres:XhrOut;\n\tbuild_number:number;\n}\n\ninterface XhrOutBinary\n{\n\tres:XhrOut;\n\tbin:Uint8Array;\n}\n\nclass ZUnoCompilerClass {\n\tprivate readonly sapi:SapiClass\t\t\t\t\t\t\t\t\t\t\t= new SapiClass();\n\tprivate readonly zuno:ZunoSapiClass\t\t\t\t\t\t\t\t\t\t= new ZunoSapiClass(this.sapi);\n\tprivate readonly locale:ControllerUiLangClass\t\t\t\t\t\t\t= new ControllerUiLangClass();\n\n\tprivate readonly COM_PORT_FILTERS\t\t\t\t\t\t\t\t\t\t= [{ usbVendorId: 0x10c4, usbProductId: 0xea60 }];\n\n\tprivate xhr_version\t\t\t\t\t\t\t\t\t\t\t\t\t\t= new XMLHttpRequest();\n\tprivate xhr_compile\t\t\t\t\t\t\t\t\t\t\t\t\t\t= new XMLHttpRequest();\n\tprivate xhr_download_finware\t\t\t\t\t\t\t\t\t\t\t= new XMLHttpRequest();\n\n\tprivate error_complite:boolean\t\t\t\t\t\t\t\t\t\t\t= false;\n\n\tprivate progressCbk:ZUnoCompilerProgressCbkProt|null;\n\tprivate promise_wait: Promise;\n\n\tprivate _progress(severity:string, txt:string): void {\n\t\tif (this.progressCbk == null)\n\t\t\treturn ;\n\t\tthis.progressCbk(severity, txt);\n\t}\n\n\tprivate async _close(): Promise {\n\t\tthis.xhr_version.abort();\n\t\tthis.xhr_compile.abort();\n\t\tthis.xhr_download_finware.abort();\n\t\tawait this.sapi.close();\n\t}\n\n\tprivate _info(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis._progress(\"info\", txt);\n\t}\n\n\tpublic _info_wait(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis._info(txt + \"...\");\n\t}\n\n\t\n\tpublic _info_done(txt:string|ControllerUiLangClassId): void {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\tthis._info(txt + this.locale.getLocale(ControllerUiLangClassId.LOG_DONE));\n\t}\n\n\tprivate async _error(txt:string|ControllerUiLangClassId): Promise {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\ttxt = txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED);\n\t\tthis._progress(\"error\", txt);\n\t\tawait this._close();\n\t\tthrow new Error(txt);\n\t}\n\n\tprivate async _error_code(txt:string|ControllerUiLangClassId, code:number): Promise {\n\t\tif (typeof txt !== \"string\")\n\t\t\ttxt = this.locale.getLocale(txt);\n\t\ttxt = txt + this.locale.getLocale(ControllerUiLangClassId.LOG_FAILED_CODE).replace('{{code}}', code.toString());\n\t\tthis._progress(\"error\", txt);\n\t\tawait this._close();\n\t\tthrow new Error(txt);\n\t}\n\n\tprivate _get_baudrate_cache():Array {\n\t\tlet baudrate:Array, i:number;\n\n\t\tconst baudrate_str:string|null = localStorage.getItem(ControllerUiDefineClass.KEY_BAUDRATE);\n\t\tif (baudrate_str == null)\n\t\t\treturn ([]);\n\t\ttry {\n\t\t\tbaudrate = JSON.parse(baudrate_str);\n\t\t} catch (error) {\n\t\t\treturn ([]);\n\t\t}\n\t\tif (Array.isArray(baudrate) == false)\n\t\t\treturn ([]);\n\t\ti = 0x0;\n\t\twhile (i < baudrate.length) {\n\t\t\tif (this.sapi.BAUDRATE.indexOf(baudrate[i]) == -1)\n\t\t\t\tbaudrate.splice(i, 0x1);\n\t\t\ti++;\n\t\t}\n\t\treturn (baudrate);\n\t}\n\n\tprivate _set_baudrate_cache(baudrate_array:Array, baudrate:number):void {\n\t\tconst i:number = baudrate_array.indexOf(baudrate);\n\t\tif (i != -1)\n\t\t\tbaudrate_array.splice(i, 0x1);\n\t\tbaudrate_array.unshift(baudrate);\n\t\tlocalStorage.setItem(ControllerUiDefineClass.KEY_BAUDRATE, JSON.stringify(baudrate_array));\n\t}\n\n\tprivate async _xhr(xhr:XMLHttpRequest, url:string, data:FormData|null): Promise {\n\t\treturn new Promise(function(resolve) {\n\t\t\tconst out:XhrOut = {status:XhrStatus.OK, error:\"\", url:'https://service.z-wave.me/z-uno-compilation-server/?' + url, data:\"\"};\n\t\t\txhr.open(\"POST\", out.url);\n\t\t\txhr.responseType = 'json';\n\t\t\txhr.timeout = 30000;//30 sec\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tout.status = XhrStatus.TIMEOUT;\n\t\t\t\tresolve(out);\n\t\t\t};\n\t\t\txhr.onload = function () {\n\t\t\t\tout.data = xhr.response;\n\t\t\t\tresolve(out);\n\t\t\t};\n\t\t\txhr.onerror = function () {\n\t\t\t\tout.status = XhrStatus.ERROR;\n\t\t\t\tresolve(out);\n\t\t\t};\n\t\t\txhr.send(data);\n\t\t});\n\t}\n\n\tprivate async _xhr_common(xhr:XMLHttpRequest, url:string, data:FormData|null): Promise {\n\t\tconst res:XhrOut = await this._xhr(xhr, url, data);\n\t\tif (res.status == XhrStatus.OK)\n\t\t\treturn (res);\n\t\tif (res.status == XhrStatus.TIMEOUT) {\n\t\t\tres.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_TIMEOUT).replace('{{url}}', res.url);\n\t\t\treturn (res);\n\t\t}\n\t\tres.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_ERROR).replace('{{url}}', res.url);\n\t\treturn (res);\n\t}\n\n\tprivate async _xhr_build_number(hw_str:string): Promise {\n\t\tconst res:XhrOut = await this._xhr_common(this.xhr_version, 'version', null);\n\t\tconst out:XhrOutBuildNumber = {res:res, build_number:0x0};\n\t\tif (res.status != XhrStatus.OK)\n\t\t\treturn (out);\n\t\ttry {\n\t\t\tconst result:ZUnoCompilerVersionResultProt = res.data;\n\t\t\tif (result[\"status\"] != 0x0) {\n\t\t\t\tout.res.status = XhrStatus.INVALID_DATA;\n\t\t\t\tout.res.error = \"Get version returned incorrect status: \" + result[\"status\"] + \" message: \" + result[\"message\"];\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tconst version_list:ZUnoCompilerVersionHwResultProt = result[\"version\"][\"hw\"];\n\t\t\tconst build_number:number = version_list[hw_str].seq;\n\t\t\tif (build_number === undefined) {\n\t\t\t\tout.res.status = XhrStatus.INVALID_DATA;\n\t\t\t\tout.res.error = \"The server does not support the specified board revision\";\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tout.build_number = build_number;\n\t\t} catch (error) {\n\t\t\tout.res.status = XhrStatus.INVALID_DATA;\n\t\t\tout.res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url);\n\t\t\treturn (out);\n\t\t}\n\t\treturn (out);\n\t}\n\n\tprivate async _xhr_download_finware(hw_str:string, build_number:number): Promise {\n\t\tconst url = 'bootloader&' + 'hw=' + hw_str + \"&seq=\" + String(build_number);\n\t\tconst res:XhrOut = await this._xhr_common(this.xhr_download_finware, url, null);\n\t\tconst out:XhrOutBinary = {res:res, bin: new Uint8Array()};\n\t\tif (res.status != XhrStatus.OK)\n\t\t\treturn (out);\n\t\ttry {\n\t\t\tconst result:ZUnoCompilerLoadSketchResultProt = res.data;\n\t\t\tif (result[\"status\"] != 0x0) {\n\t\t\t\tout.res.status = XhrStatus.INVALID_DATA;\n\t\t\t\tout.res.error = \"Get bootloader returned incorrect status: \" + result[\"status\"] + \" log: \" + result[\"log\"] + \" message: \" + result[\"message\"];\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tout.bin = this._base64ToArrayBuffer(result[\"bin\"]);\n\t\t} catch (error) {\n\t\t\tout.res.status = XhrStatus.INVALID_DATA;\n\t\t\tout.res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url);\n\t\t\treturn (out);\n\t\t}\n\t\treturn (out);\n\t}\n\n\tprivate _base64ToArrayBuffer(base64:string): Uint8Array {\n\t\tconst binaryString:string = atob(base64);\n\t\tconst bytes:Array = new Array(binaryString.length);\n\t\tfor (let i = 0; i < binaryString.length; i++) {\n\t\t\tbytes[i] = binaryString.charCodeAt(i);\n\t\t}\n\t\treturn new Uint8Array(bytes);\n\t}\n\n\tprivate async _xhr_compile(hw_str:string, code:string): Promise {\n\t\tconst formData:FormData = new FormData();\n\t\tformData.append(\"sketch\", new File([new Blob([code])], \"sketch\", { lastModified: Date.now(), type: \"text/x-arduino\"}));\n\t\tformData.append(\"referer\", document.location.href);\n\t\tconst url = 'compile&' + 'hw=' + hw_str;\n\t\tconst res:XhrOut = await this._xhr_common(this.xhr_compile, url, formData);\n\t\tconst out:XhrOutBinary = {res:res, bin: new Uint8Array()};\n\t\tif (res.status != XhrStatus.OK)\n\t\t\treturn (out);\n\t\ttry {\n\t\t\tconst result:ZUnoCompilerLoadSketchResultProt = res.data;\n\t\t\tif (result[\"status\"] != 0x0) {\n\t\t\t\tout.res.status = XhrStatus.INVALID_DATA;\n\t\t\t\tout.res.error = \"Compilation returned incorrect status: \" + result[\"status\"] + \" log: \" + result[\"log\"] + \" message: \" + result[\"message\"];\n\t\t\t\treturn (out);\n\t\t\t}\n\t\t\tout.bin = this._base64ToArrayBuffer(result[\"bin\"]);\n\t\t} catch (error) {\n\t\t\tout.res.status = XhrStatus.INVALID_DATA;\n\t\t\tout.res.error = this.locale.getLocale(ControllerUiLangClassId.LOG_XHR_INVALID_DATA).replace('{{url}}', out.res.url);\n\t\t\treturn (out);\n\t\t}\n\t\treturn (out);\n\t}\n\n\tprivate async _sketch(code:string, freq:string|null, sec:boolean, main_pow:number): Promise {\n\t\tlet hw_str:string, board_info:ZunoSapiClassBoardInfo, detect_dict:SapiClassDetect;\n\n\t\tthis._info(NAME_APP_VERSION_FULL);\n\t\tconst status:SapiClassStatus = await this.sapi.request(this.COM_PORT_FILTERS);\n\t\tif (status == SapiClassStatus.SERIAL_UN_SUPPORT)\n\t\t\treturn (this._error(ControllerUiLangClassId.MESSAGE_NOT_SUPPORT_BROWSER));\n\t\tif (status == SapiClassStatus.REQUEST_NO_SELECT)\n\t\t\treturn (this._error(ControllerUiLangClassId.MESSAGE_PORT_SELECT));\n\t\tif (status != SapiClassStatus.OK)\n\t\t\treturn (this._error_code(ControllerUiLangClassId.MESSAGE_PORT_SELECT, status));\n\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\tconst baudrate_array:Array = this._get_baudrate_cache();\n\t\tdetect_dict = await this.sapi.detect(baudrate_array, null);\n\t\tif (detect_dict.status != SapiClassStatus.OK) {\n\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status);\n\t\t\treturn ;\n\t\t}\n\t\tthis._set_baudrate_cache(baudrate_array, detect_dict.baudrate);\n\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_DETECTION);\n\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\tif (this.sapi.type() != SapiClassDetectType.ZUNO) {\n\t\t\tthis._error(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\t\treturn ;\n\t\t}\n\t\tawait this.zuno.connect();\n\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\tthis._info_wait(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\tboard_info = this.zuno.getBoardInfo();\n\t\tif (board_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis._error_code(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\treturn ;\n\t\t}\n\t\tthis._info_done(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tconst region_info:ZunoSapiClassRegion = this.zuno.getRegion();\n\t\tif (region_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_READ_REGION, region_info.status);\n\t\t\treturn ;\n\t\t}\n\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_READ_REGION);\n\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_READ_POWER);\n\t\tconst power:ZunoSapiClassPower = this.zuno.getPower();\n\t\tif (power.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_READ_POWER, power.status);\n\t\t\treturn ;\n\t\t}\n\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_READ_POWER);\n\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_READ_SEC);\n\t\tconst sec_info:ZunoSapiClassSec = this.zuno.getSec();\n\t\tif (sec_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_READ_SEC, sec_info.status);\n\t\t\treturn ;\n\t\t}\n\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_READ_SEC);\n\t\tif (freq != null && freq != region_info.region) {\n\t\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\t\tconst set_region_status:ZunoSapiClassStatus = await this.zuno.setRegion(freq);\n\t\t\tif (set_region_status != ZunoSapiClassStatus.OK) {\n\t\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_SET_REGION, set_region_status);\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_SET_REGION);\n\t\t}\n\t\tif (main_pow < power.min || main_pow > power.max) {\n\t\t\tthis._error(\"Radio power is out of range\");\n\t\t\treturn ;\n\t\t}\n\t\tif (power.power_raw != main_pow) {\n\t\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_SET_POWER);\n\t\t\tconst set_power_status:ZunoSapiClassStatus = await this.zuno.setPower(main_pow);\n\t\t\tif (set_power_status != ZunoSapiClassStatus.OK) {\n\t\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_SET_POWER, set_power_status);\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_SET_POWER);\n\t\t}\n\t\tif (sec_info.sec != sec) {\n\t\t\tthis._info_wait(ControllerUiLangClassId.MESSAGE_SET_SEC);\n\t\t\tconst set_power_status:ZunoSapiClassStatus = await this.zuno.setSec(sec);\n\t\t\tif (set_power_status != ZunoSapiClassStatus.OK) {\n\t\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_SET_SEC, set_power_status);\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tthis._info_done(ControllerUiLangClassId.MESSAGE_SET_SEC);\n\t\t}\n\t\thw_str = board_info.hw_rev.toString(0x10);\n\t\twhile (hw_str.length < 0x4)\n\t\t\thw_str = '0' + hw_str;\n\t\tconst promise_compile: Promise = this._xhr_compile(hw_str, code);\n\t\tthis._info_wait(\"Checking Z-Uno version\");\n\t\tconst res_build_number:XhrOutBuildNumber = await this._xhr_build_number(hw_str);\n\t\tif (res_build_number.res.status != XhrStatus.OK) {\n\t\t\tthis._error(res_build_number.res.error);\n\t\t\treturn ;\n\t\t}\n\t\tif (board_info.build_number > res_build_number.build_number) {\n\t\t\tthis._error(\"The firmware on the board is newer than on the server\");\n\t\t\treturn ;\n\t\t}\n\t\tthis._info_done(\"Checking Z-Uno version\");\n\t\tif (board_info.build_number != res_build_number.build_number) {\n\t\t\tthis._info_wait(\"Downloading new firmware\");\n\t\t\tconst res_download_finware:XhrOutBinary = await this._xhr_download_finware(hw_str, res_build_number.build_number);\n\t\t\tif (res_download_finware.res.status != XhrStatus.OK) {\n\t\t\t\tthis._error(res_download_finware.res.error);\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tthis._info_done(\"Downloading new firmware\");\n\t\t\tthis._info_wait(\"Uploading a new firmware to the Z-Uno\");\n\t\t\tconst status:ZunoSapiClassStatus = await this.zuno.updateFirmware(res_download_finware.bin, null, SapiClassDetectType.ZUNO);\n\t\t\tif (status != ZunoSapiClassStatus.OK) {\n\t\t\t\tthis._error_code(\"Uploading a new firmware to the Z-Uno\", status);\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tawait this.zuno.connect();\n\t\t\tthis._info_done(\"Uploading a new firmware to the Z-Uno\");\n\t\t\tthis._info_wait(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\t\tboard_info = this.zuno.getBoardInfo();\n\t\t\tif (board_info.status != ZunoSapiClassStatus.OK) {\n\t\t\t\tthis._error_code(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\t\treturn ;\n\t\t\t}\n\t\t\tthis._info_done(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO);\n\t\t\tif (res_build_number.build_number != board_info.build_number) {\n\t\t\t\tthis._error(\"Although the firmware was successfully updated, the actual version was no longer needed\");\n\t\t\t\treturn ;\n\t\t\t}\n\t\t}\n\t\tthis._info_wait(\"Compiling the sketch\");\n\t\tconst res_compile:XhrOutBinary = await promise_compile;\n\t\tif (res_compile.res.status != XhrStatus.OK) {\n\t\t\tthis.error_complite = true;\n\t\t\tthis._error(res_compile.res.error);\n\t\t\treturn ;\n\t\t}\n\t\tthis._info_done(\"Compiling the sketch\");\n\t\tthis._info_wait(\"Uploading the sketch\");\n\t\tconst status_upload_scetch:ZunoSapiClassStatus = await this.zuno.updateSketch(res_compile.bin, null);\n\t\tif (status_upload_scetch != ZunoSapiClassStatus.OK) {\n\t\t\tthis._error_code(\"Uploading the sketch\", status_upload_scetch);\n\t\t\treturn ;\n\t\t}\n\t\tthis._info_done(\"Uploading the sketch\");\n\t\tthis._info_wait(\"QR code read\");\n\t\tawait this._close();\n\t\tdetect_dict = await this.sapi.detect([detect_dict.baudrate], null);\n\t\tif (detect_dict.status != SapiClassStatus.OK) {\n\t\t\tthis._error_code(ControllerUiLangClassId.MESSAGE_DETECTION, detect_dict.status);\n\t\t\treturn ;\n\t\t}\n\t\tif (this.sapi.type() != SapiClassDetectType.ZUNO) {\n\t\t\tthis._error(ControllerUiLangClassId.MESSAGE_CONNECT);\n\t\t\treturn ;\n\t\t}\n\t\tawait this.zuno.connect();\n\t\tboard_info = this.zuno.getBoardInfo();\n\t\tif (board_info.status != ZunoSapiClassStatus.OK) {\n\t\t\tthis._error_code(ControllerUiLangClassId.SLAVE_MESSAGE_READ_BOARD_INFO, board_info.status);\n\t\t\treturn ;\n\t\t}\n\t\tawait this._close();\n\t\tthis._info_done(\"QR code read\");\n\t\tconst out:ZUnoCompilerLoadSketchOutProt = {smart_qr:board_info.smart_qr, dsk:conv2Decimal(board_info.s2_pub, \" - \")};\n\t\treturn (out);\n\t}\n\n\tprivate _generateQrCode(id:HTMLElement|string, text:string): boolean {\n\t\tlet obj_QRCode:QRCode;\n\t\tconst option:QRCodeOption = {\n\t\t\ttext: text,\n\t\t\twidth: 256,\n\t\t\theight: 256,\n\t\t\tcolorDark: \"#000000\",\n\t\t\tcolorLight: \"#ffffff\",\n\t\t\tcorrectLevel: QRErrorCorrectLevel.L,\n\t\t};\n\n\t\ttry {\n\t\t\tobj_QRCode = new QRCode(id, option);\n\t\t} catch(e) {\n\t\t\tthis._progress(\"error\", \"Failed to create \\\"object QRCode\\\", check parameters.\");\n\t\t\treturn (false);\n\t\t}\n\t\treturn (true);\n\t}\n\n\t/**\n\t * Draw the QR code of the board\n\t *\n\t * @param {*} id Id of the div tag that will host the QR-code image\n\t * @param {*} qrContent Content of the QR-code to be printed\n\t */\n\tpublic drawQR(id:HTMLElement|string, text:string): boolean {\n\t\treturn (this._generateQrCode(id, text));\n\t}\n\n\tpublic cancel(): void {\n\t\tthis._close();\n\t}\n\n\tpublic errorComplite(): boolean {\n\t\treturn this.error_complite;\n\t}\n\n\tpublic getWait(): Promise {\n\t\treturn (this.promise_wait);\n\t}\n\n\t/**\n\t *\n\t * @returns List freq\n\t */\n\tpublic static getFreqList(): Array {\n\t\tconst region:SapiRegionClass = new SapiRegionClass(true, true);\n\t\treturn (region.getListRegion());\n\t}\n\n\tconstructor(code:string, freq:string|null, sec:boolean, main_pow:number, cbk:ZUnoCompilerProgressCbkProt|null = null) {\n\t\tthis.progressCbk = cbk;\n\t\tthis.promise_wait = this._sketch(code, freq, sec, main_pow);\n\t}\n}\n","/**\n * @fileoverview\n * - Using the 'QRCode for Javascript library'\n * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.\n * - this library has no dependencies.\n * \n * @author davidshimjs\n * @see http://www.d-project.com/\n * @see http://jeromeetienne.github.com/jquery-qrcode/\n */\n\nexport var QRCode;\n\n(function () {\n\t//---------------------------------------------------------------------\n\t// QRCode for JavaScript\n\t//\n\t// Copyright (c) 2009 Kazuhiko Arase\n\t//\n\t// URL: http://www.d-project.com/\n\t//\n\t// Licensed under the MIT license:\n\t// http://www.opensource.org/licenses/mit-license.php\n\t//\n\t// The word \"QR Code\" is registered trademark of \n\t// DENSO WAVE INCORPORATED\n\t// http://www.denso-wave.com/qrcode/faqpatent-e.html\n\t//\n\t//---------------------------------------------------------------------\n\tfunction QR8bitByte(data) {\n\t\tthis.mode = QRMode.MODE_8BIT_BYTE;\n\t\tthis.data = data;\n\t\tthis.parsedData = [];\n\n\t\t// Added to support UTF-8 Characters\n\t\tfor (var i = 0, l = this.data.length; i < l; i++) {\n\t\t\tvar byteArray = [];\n\t\t\tvar code = this.data.charCodeAt(i);\n\n\t\t\tif (code > 0x10000) {\n\t\t\t\tbyteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);\n\t\t\t\tbyteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);\n\t\t\t\tbyteArray[3] = 0x80 | (code & 0x3F);\n\t\t\t} else if (code > 0x800) {\n\t\t\t\tbyteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);\n\t\t\t\tbyteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);\n\t\t\t\tbyteArray[2] = 0x80 | (code & 0x3F);\n\t\t\t} else if (code > 0x80) {\n\t\t\t\tbyteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);\n\t\t\t\tbyteArray[1] = 0x80 | (code & 0x3F);\n\t\t\t} else {\n\t\t\t\tbyteArray[0] = code;\n\t\t\t}\n\n\t\t\tthis.parsedData.push(byteArray);\n\t\t}\n\n\t\tthis.parsedData = Array.prototype.concat.apply([], this.parsedData);\n\n\t\tif (this.parsedData.length != this.data.length) {\n\t\t\tthis.parsedData.unshift(191);\n\t\t\tthis.parsedData.unshift(187);\n\t\t\tthis.parsedData.unshift(239);\n\t\t}\n\t}\n\n\tQR8bitByte.prototype = {\n\t\tgetLength: function (buffer) {\n\t\t\treturn this.parsedData.length;\n\t\t},\n\t\twrite: function (buffer) {\n\t\t\tfor (var i = 0, l = this.parsedData.length; i < l; i++) {\n\t\t\t\tbuffer.put(this.parsedData[i], 8);\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction QRCodeModel(typeNumber, errorCorrectLevel) {\n\t\tthis.typeNumber = typeNumber;\n\t\tthis.errorCorrectLevel = errorCorrectLevel;\n\t\tthis.modules = null;\n\t\tthis.moduleCount = 0;\n\t\tthis.dataCache = null;\n\t\tthis.dataList = [];\n\t}\n\n\tQRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+\",\"+col);}\n\treturn this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);}\n\tif(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}\n\tthis.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}\n\treturn pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}\n\tfor(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}\n\tfor(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}\n\tthis.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);}\n\tvar mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}\n\tthis.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}\n\trow+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error(\"code length overflow. (\"\n\t+buffer.getLengthInBits()\n\t+\">\"\n\t+totalDataCount*8\n\t+\")\");}\n\tif(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}\n\twhile(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}\n\twhile(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}\n\tbuffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}\n\tbuffer.put(QRCodeModel.PAD1,8);}\n\treturn QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}}\n\tvar totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}\n\treturn((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}\n\treturn(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}\n\treturn digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error(\"bad maskPattern:\"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}}\n\tfor(var row=0;row=256){n-=255;}\n\treturn QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}\n\tif(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}\n\tthis.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];\n\t\n\tfunction _isSupportCanvas() {\n\t\treturn typeof CanvasRenderingContext2D != \"undefined\";\n\t}\n\t\n\t// android 2.x doesn't support Data-URI spec\n\tfunction _getAndroid() {\n\t\tvar android = false;\n\t\tvar sAgent = navigator.userAgent;\n\t\t\n\t\tif (/android/i.test(sAgent)) { // android\n\t\t\tandroid = true;\n\t\t\tvar aMat = sAgent.toString().match(/android ([0-9]\\.[0-9])/i);\n\t\t\t\n\t\t\tif (aMat && aMat[1]) {\n\t\t\t\tandroid = parseFloat(aMat[1]);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn android;\n\t}\n\t\n\tvar svgDrawer = (function() {\n\n\t\tvar Drawing = function (el, htOption) {\n\t\t\tthis._el = el;\n\t\t\tthis._htOption = htOption;\n\t\t};\n\n\t\tDrawing.prototype.draw = function (oQRCode) {\n\t\t\tvar _htOption = this._htOption;\n\t\t\tvar _el = this._el;\n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\n\n\t\t\tthis.clear();\n\n\t\t\tfunction makeSVG(tag, attrs) {\n\t\t\t\tvar el = document.createElementNS('http://www.w3.org/2000/svg', tag);\n\t\t\t\tfor (var k in attrs)\n\t\t\t\t\tif (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tvar svg = makeSVG(\"svg\" , {'viewBox': '0 0 ' + String(nCount) + \" \" + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});\n\t\t\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\t\t\t_el.appendChild(svg);\n\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorLight, \"width\": \"100%\", \"height\": \"100%\"}));\n\t\t\tsvg.appendChild(makeSVG(\"rect\", {\"fill\": _htOption.colorDark, \"width\": \"1\", \"height\": \"1\", \"id\": \"template\"}));\n\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\tif (oQRCode.isDark(row, col)) {\n\t\t\t\t\t\tvar child = makeSVG(\"use\", {\"x\": String(row), \"y\": String(col)});\n\t\t\t\t\t\tchild.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", \"#template\")\n\t\t\t\t\t\tsvg.appendChild(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tDrawing.prototype.clear = function () {\n\t\t\twhile (this._el.hasChildNodes())\n\t\t\t\tthis._el.removeChild(this._el.lastChild);\n\t\t};\n\t\treturn Drawing;\n\t})();\n\n\tvar useSVG = document.documentElement.tagName.toLowerCase() === \"svg\";\n\n\t// Drawing in DOM by using Table tag\n\tvar Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {\n\t\tvar Drawing = function (el, htOption) {\n\t\t\tthis._el = el;\n\t\t\tthis._htOption = htOption;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Draw the QRCode\n\t\t * \n\t\t * @param {QRCode} oQRCode\n\t\t */\n\t\tDrawing.prototype.draw = function (oQRCode) {\n var _htOption = this._htOption;\n var _el = this._el;\n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = Math.floor(_htOption.width / nCount);\n\t\t\tvar nHeight = Math.floor(_htOption.height / nCount);\n\t\t\tvar aHTML = [''];\n\t\t\t\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\taHTML.push('');\n\t\t\t\t\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\taHTML.push('');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\taHTML.push('');\n\t\t\t}\n\t\t\t\n\t\t\taHTML.push('
');\n\t\t\t_el.innerHTML = aHTML.join('');\n\t\t\t\n\t\t\t// Fix the margin values as real size.\n\t\t\tvar elTable = _el.childNodes[0];\n\t\t\tvar nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;\n\t\t\tvar nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;\n\t\t\t\n\t\t\tif (nLeftMarginTable > 0 && nTopMarginTable > 0) {\n\t\t\t\telTable.style.margin = nTopMarginTable + \"px \" + nLeftMarginTable + \"px\";\t\n\t\t\t}\n\t\t};\n\t\t\n\t\t/**\n\t\t * Clear the QRCode\n\t\t */\n\t\tDrawing.prototype.clear = function () {\n\t\t\tthis._el.innerHTML = '';\n\t\t};\n\t\t\n\t\treturn Drawing;\n\t})() : (function () { // Drawing in Canvas\n\t\tfunction _onMakeImage() {\n\t\t\tthis._elImage.src = this._elCanvas.toDataURL(\"image/png\");\n\t\t\tthis._elImage.style.display = \"block\";\n\t\t\tthis._elCanvas.style.display = \"none\";\t\t\t\n\t\t}\n\t\t\n\t\t// Android 2.1 bug workaround\n\t\t// http://code.google.com/p/android/issues/detail?id=5141\n\t\tif (this != undefined && this._android && this._android <= 2.1) {\n\t \tvar factor = 1 / window.devicePixelRatio;\n\t var drawImage = CanvasRenderingContext2D.prototype.drawImage; \n\t \tCanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {\n\t \t\tif ((\"nodeName\" in image) && /img/i.test(image.nodeName)) {\n\t\t \tfor (var i = arguments.length - 1; i >= 1; i--) {\n\t\t \targuments[i] = arguments[i] * factor;\n\t\t \t}\n\t \t\t} else if (typeof dw == \"undefined\") {\n\t \t\t\targuments[1] *= factor;\n\t \t\t\targuments[2] *= factor;\n\t \t\t\targuments[3] *= factor;\n\t \t\t\targuments[4] *= factor;\n\t \t\t}\n\t \t\t\n\t \tdrawImage.apply(this, arguments); \n\t \t};\n\t\t}\n\t\t\n\t\t/**\n\t\t * Check whether the user's browser supports Data URI or not\n\t\t * \n\t\t * @private\n\t\t * @param {Function} fSuccess Occurs if it supports Data URI\n\t\t * @param {Function} fFail Occurs if it doesn't support Data URI\n\t\t */\n\t\tfunction _safeSetDataURI(fSuccess, fFail) {\n var self = this;\n self._fFail = fFail;\n self._fSuccess = fSuccess;\n\n // Check it just once\n if (self._bSupportDataURI === null) {\n var el = document.createElement(\"img\");\n var fOnError = function() {\n self._bSupportDataURI = false;\n\n if (self._fFail) {\n self._fFail.call(self);\n }\n };\n var fOnSuccess = function() {\n self._bSupportDataURI = true;\n\n if (self._fSuccess) {\n self._fSuccess.call(self);\n }\n };\n\n el.onabort = fOnError;\n el.onerror = fOnError;\n el.onload = fOnSuccess;\n el.src = \"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\"; // the Image contains 1px data.\n return;\n } else if (self._bSupportDataURI === true && self._fSuccess) {\n self._fSuccess.call(self);\n } else if (self._bSupportDataURI === false && self._fFail) {\n self._fFail.call(self);\n }\n\t\t};\n\t\t\n\t\t/**\n\t\t * Drawing QRCode by using canvas\n\t\t * \n\t\t * @constructor\n\t\t * @param {HTMLElement} el\n\t\t * @param {Object} htOption QRCode Options \n\t\t */\n\t\tvar Drawing = function (el, htOption) {\n \t\tthis._bIsPainted = false;\n \t\tthis._android = _getAndroid();\n\t\t\n\t\t\tthis._htOption = htOption;\n\t\t\tthis._elCanvas = document.createElement(\"canvas\");\n\t\t\tthis._elCanvas.width = htOption.width;\n\t\t\tthis._elCanvas.height = htOption.height;\n\t\t\tel.appendChild(this._elCanvas);\n\t\t\tthis._el = el;\n\t\t\tthis._oContext = this._elCanvas.getContext(\"2d\");\n\t\t\tthis._bIsPainted = false;\n\t\t\tthis._elImage = document.createElement(\"img\");\n\t\t\tthis._elImage.alt = \"Scan me!\";\n\t\t\tthis._elImage.style.display = \"none\";\n\t\t\tthis._el.appendChild(this._elImage);\n\t\t\tthis._bSupportDataURI = null;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Draw the QRCode\n\t\t * \n\t\t * @param {QRCode} oQRCode \n\t\t */\n\t\tDrawing.prototype.draw = function (oQRCode) {\n var _elImage = this._elImage;\n var _oContext = this._oContext;\n var _htOption = this._htOption;\n \n\t\t\tvar nCount = oQRCode.getModuleCount();\n\t\t\tvar nWidth = _htOption.width / nCount;\n\t\t\tvar nHeight = _htOption.height / nCount;\n\t\t\tvar nRoundedWidth = Math.round(nWidth);\n\t\t\tvar nRoundedHeight = Math.round(nHeight);\n\n\t\t\t_elImage.style.display = \"none\";\n\t\t\tthis.clear();\n\t\t\t\n\t\t\tfor (var row = 0; row < nCount; row++) {\n\t\t\t\tfor (var col = 0; col < nCount; col++) {\n\t\t\t\t\tvar bIsDark = oQRCode.isDark(row, col);\n\t\t\t\t\tvar nLeft = col * nWidth;\n\t\t\t\t\tvar nTop = row * nHeight;\n\t\t\t\t\t_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\n\t\t\t\t\t_oContext.lineWidth = 1;\n\t\t\t\t\t_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\t\t\t\t\t\n\t\t\t\t\t_oContext.fillRect(nLeft, nTop, nWidth, nHeight);\n\t\t\t\t\t\n\t\t\t\t\t// 안티 앨리어싱 방지 처리\n\t\t\t\t\t_oContext.strokeRect(\n\t\t\t\t\t\tMath.floor(nLeft) + 0.5,\n\t\t\t\t\t\tMath.floor(nTop) + 0.5,\n\t\t\t\t\t\tnRoundedWidth,\n\t\t\t\t\t\tnRoundedHeight\n\t\t\t\t\t);\n\t\t\t\t\t\n\t\t\t\t\t_oContext.strokeRect(\n\t\t\t\t\t\tMath.ceil(nLeft) - 0.5,\n\t\t\t\t\t\tMath.ceil(nTop) - 0.5,\n\t\t\t\t\t\tnRoundedWidth,\n\t\t\t\t\t\tnRoundedHeight\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._bIsPainted = true;\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Make the image from Canvas if the browser supports Data URI.\n\t\t */\n\t\tDrawing.prototype.makeImage = function () {\n\t\t\tif (this._bIsPainted) {\n\t\t\t\t_safeSetDataURI.call(this, _onMakeImage);\n\t\t\t}\n\t\t};\n\t\t\t\n\t\t/**\n\t\t * Return whether the QRCode is painted or not\n\t\t * \n\t\t * @return {Boolean}\n\t\t */\n\t\tDrawing.prototype.isPainted = function () {\n\t\t\treturn this._bIsPainted;\n\t\t};\n\t\t\n\t\t/**\n\t\t * Clear the QRCode\n\t\t */\n\t\tDrawing.prototype.clear = function () {\n\t\t\tthis._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);\n\t\t\tthis._bIsPainted = false;\n\t\t};\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param {Number} nNumber\n\t\t */\n\t\tDrawing.prototype.round = function (nNumber) {\n\t\t\tif (!nNumber) {\n\t\t\t\treturn nNumber;\n\t\t\t}\n\t\t\t\n\t\t\treturn Math.floor(nNumber * 1000) / 1000;\n\t\t};\n\t\t\n\t\treturn Drawing;\n\t})();\n\t\n\t/**\n\t * Get the type by string length\n\t * \n\t * @private\n\t * @param {String} sText\n\t * @param {Number} nCorrectLevel\n\t * @return {Number} type\n\t */\n\tfunction _getTypeNumber(sText, nCorrectLevel) {\t\t\t\n\t\tvar nType = 1;\n\t\tvar length = _getUTF8Length(sText);\n\t\t\n\t\tfor (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {\n\t\t\tvar nLimit = 0;\n\t\t\t\n\t\t\tswitch (nCorrectLevel) {\n\t\t\t\tcase QRErrorCorrectLevel.L :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.M :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.Q :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][2];\n\t\t\t\t\tbreak;\n\t\t\t\tcase QRErrorCorrectLevel.H :\n\t\t\t\t\tnLimit = QRCodeLimitLength[i][3];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tif (length <= nLimit) {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tnType++;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (nType > QRCodeLimitLength.length) {\n\t\t\tthrow new Error(\"Too long data\");\n\t\t}\n\t\t\n\t\treturn nType;\n\t}\n\n\tfunction _getUTF8Length(sText) {\n\t\tvar replacedText = encodeURI(sText).toString().replace(/\\%[0-9a-fA-F]{2}/g, 'a');\n\t\treturn replacedText.length + (replacedText.length != sText ? 3 : 0);\n\t}\n\t\n\t/**\n\t * @class QRCode\n\t * @constructor\n\t * @example \n\t * new QRCode(document.getElementById(\"test\"), \"http://jindo.dev.naver.com/collie\");\n\t *\n\t * @example\n\t * var oQRCode = new QRCode(\"test\", {\n\t * text : \"http://naver.com\",\n\t * width : 128,\n\t * height : 128\n\t * });\n\t * \n\t * oQRCode.clear(); // Clear the QRCode.\n\t * oQRCode.makeCode(\"http://map.naver.com\"); // Re-create the QRCode.\n\t *\n\t * @param {HTMLElement|String} el target element or 'id' attribute of element.\n\t * @param {Object|String} vOption\n\t * @param {String} vOption.text QRCode link data\n\t * @param {Number} [vOption.width=256]\n\t * @param {Number} [vOption.height=256]\n\t * @param {String} [vOption.colorDark=\"#000000\"]\n\t * @param {String} [vOption.colorLight=\"#ffffff\"]\n\t * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] \n\t */\n\tQRCode = function (el, vOption) {\n\t\tthis._htOption = {\n\t\t\twidth : 256, \n\t\t\theight : 256,\n\t\t\ttypeNumber : 4,\n\t\t\tcolorDark : \"#000000\",\n\t\t\tcolorLight : \"#ffffff\",\n\t\t\tcorrectLevel : QRErrorCorrectLevel.H\n\t\t};\n\t\t\n\t\tif (typeof vOption === 'string') {\n\t\t\tvOption\t= {\n\t\t\t\ttext : vOption\n\t\t\t};\n\t\t}\n\t\t\n\t\t// Overwrites options\n\t\tif (vOption) {\n\t\t\tfor (var i in vOption) {\n\t\t\t\tthis._htOption[i] = vOption[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (typeof el == \"string\") {\n\t\t\tel = document.getElementById(el);\n\t\t}\n\n\t\tif (this._htOption.useSVG) {\n\t\t\tDrawing = svgDrawer;\n\t\t}\n\t\t\n\t\tthis._android = _getAndroid();\n\t\tthis._el = el;\n\t\tthis._oQRCode = null;\n\t\tthis._oDrawing = new Drawing(this._el, this._htOption);\n\t\t\n\t\tif (this._htOption.text) {\n\t\t\tthis.makeCode(this._htOption.text);\t\n\t\t}\n\t};\n\t\n\t/**\n\t * Make the QRCode\n\t * \n\t * @param {String} sText link data\n\t */\n\tQRCode.prototype.makeCode = function (sText) {\n\t\tthis._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);\n\t\tthis._oQRCode.addData(sText);\n\t\tthis._oQRCode.make();\n\t\tthis._el.title = sText;\n\t\tthis._oDrawing.draw(this._oQRCode);\t\t\t\n\t\tthis.makeImage();\n\t};\n\t\n\t/**\n\t * Make the Image from Canvas element\n\t * - It occurs automatically\n\t * - Android below 3 doesn't support Data-URI spec.\n\t * \n\t * @private\n\t */\n\tQRCode.prototype.makeImage = function () {\n\t\tif (typeof this._oDrawing.makeImage == \"function\" && (!this._android || this._android >= 3)) {\n\t\t\tthis._oDrawing.makeImage();\n\t\t}\n\t};\n\t\n\t/**\n\t * Clear the QRCode\n\t */\n\tQRCode.prototype.clear = function () {\n\t\tthis._oDrawing.clear();\n\t};\n\t\n\t/**\n\t * @name QRCode.CorrectLevel\n\t */\n\tQRCode.CorrectLevel = QRErrorCorrectLevel;\n})();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/z-uno-compiler.ts\");\n",""],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/z_uno_compiler/beta/z-uno-compiler.script b/z_uno_compiler/beta/z-uno-compiler.script new file mode 100644 index 0000000..4c01679 --- /dev/null +++ b/z_uno_compiler/beta/z-uno-compiler.script @@ -0,0 +1 @@ + \ No newline at end of file